自 OpenAI 发布 ChatGPT 起,人工智能席卷全球。ChatGPT 的自然语言能力毋庸置疑,那么我们国内百度开发的文心一言和讯飞开发的讯飞星火在自然语言能力方面表现又是如何呢?
今天,小编突发奇想地从代码能力、文本生成、数学能力、逻辑推理、知识问答和语言理解等多方面深入测试,以对比两大平台的水平,以供大家参考。
什么是文心一言
文心一言是百度研发的知识增强大语言模型,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。
文心一言具有以下特征:
- 中文特色:文心一言根植于中国,更熟练掌握中文,具有中文特色和优点。
- 知识增强:文心一言可以提供各种学科知识,能够进行知识推理、数学计算等。
- 信息及时:文心一言能够及时获取和提供最新信息。
- 可迭代性:文心一言是一个在线AI系统,可以不断学习、迭代和优化。
- 高效性:文心一言可以高效地回答用户的问题和提供服务,能够快速响应用户需求。
(注:上述文字是文心一言对自己的描述)
什么是讯飞星火
讯飞星火认知大模型,是由科大讯飞自主研发,基于讯飞最新的认知智能大模型技术,经历了各类数据和知识的充分学习训练,可以和人类进行自然交流,解答问题,高效完成各领域认知智能需求。
讯飞星火是科大讯飞自主研发的认知智能大模型,具有多项特征:
- 多语言支持:讯飞星火支持中文和英文等多语言的交互,具有跨文化交流能力。
- 知识图谱:讯飞星火拥有完整的知识图谱,能够从大量的文本中自动抽取知识点,形成结构化的知识库。
- 深度学习技术:讯飞星火采用深度学习技术进行训练,可以不断地从大量数据中学习新的知识和技能。
- 可解释性:讯飞星火可以通过可视化的方式,将模型的推理过程呈现出来,提高模型的可解释性。
- 应用广泛:讯飞星火可以应用于多个领域,包括智能客服、智能问答、机器翻译、语音识别等。
(注:上述文字是讯飞星火对自己的描述)
代码能力
一般地,我们考察一个自然语言模型的代码能力,会从代码解释、代码生成、代码纠错和单元测试几个方面进行评估。
代码解释
小编给出AI Art主题里面一段代码,分别要求文心一言和讯飞星火作出解释。
其中文心一言的回答如下:
这段代码是WordPress主题中的一个典型头部模板。它用于定义网页的元数据和引用其他必要的资源。
这行代码设置了网页的字符集,通过调用
bloginfo('charset')
函数获取站点的字符集信息。这是一个响应式设计的元标签,它告诉浏览器在不同设备上显示页面时应如何缩放和布局。
这段代码检查当前是否为单篇文章页面且评论功能已开启,如果条件满足,则添加一个 pingback 链接,允许其他网站通知你的网站关于新的链接。
这是一个WordPress函数,它负责输出所有头部资源,如样式表、脚本文件等。这些资源是由WordPress主题或插件添加的。
讯飞星火的回答,则是
这段PHP代码是一个WordPress网站的部分的模板。它包含了一些元数据和链接,用于设置网页的字符集、视口和pingback。
:这行代码设置了网页的字符集。
bloginfo('charset')
函数返回当前博客的字符集,例如”UTF-8″。:这行代码设置了网页的视口,使其在不同设备上具有响应式布局。
width=device-width
表示视口宽度等于设备的屏幕宽度,initial-scale=1
表示初始缩放比例为1。:这是一个条件语句,它检查当前页面是否为单个页面(即非分类或标签页),并且查询对象(通常是文章或自定义帖子类型)的pingback功能是否开启。如果满足条件,则执行以下代码:
这行代码创建了一个指向当前博客的pingback URL的链接。当其他博客链接到这个页面时,它们可以通过pingback通知原始博客。
:这是条件语句的结束标记。
:这行代码调用了
wp_head()
函数,该函数负责输出所有在部分的元数据,例如标题、样式表链接等。
小结
就代码解释方面,百度文心一言和讯飞星火的能力相当,两者可能在描述文字上有所不同,但意思大体上是一致的。
代码生成
在代码生成能力方面,小编给出的问题是:
我打算开发一个WordPress插件,该插件主要实现的功能为,当访客的IP地址为非中国大陆IP,则重定向至一个固定URL(https://www.domain.com/access-restricted);当访客的IP地址为中国大陆IP地址,则访问正常,同时该插件还能够统计访客的访问IP,访问时间和访问状态(200状态或者Access restricted状态)。
其中百度的文心一言给出的代码解决方案为:
要实现这个功能,你可以使用以下步骤来开发你的WordPress插件:
- 设置重定向:你可以使用
$_SERVER['REMOTE_ADDR']
来获取访问者的 IP 地址,然后使用一个地理定位服务,如 GeoIP,来检查这个 IP 地址是否来自中国大陆。如果不是,则重定向到指定的 URL。你可以使用wp_redirect()
函数来实现重定向。function redirect_non_china_users() { $visitor_ip = $_SERVER['REMOTE_ADDR']; // 使用 GeoIP 检查 IP 地址是否来自中国大陆 if (!is_china_ip($visitor_ip)) { wp_redirect('https://www.domain.com/access-restricted'); exit; } } add_action('template_redirect', 'redirect_non_china_users');
- 统计访问信息:你可以使用
$_SERVER['REMOTE_ADDR']
来获取访问者的 IP 地址,使用date('Y-m-d H:i:s')
来获取访问时间,然后将这些信息存储到数据库中。你可以使用wp_insert_post()
函数来创建一个新的文章来存储这些信息。function log_visit() { $visitor_ip = $_SERVER['REMOTE_ADDR']; $visit_time = date('Y-m-d H:i:s'); $status = $_SERVER['HTTP_HOST'] === 'www.domain.com' ? 'Access restricted' : '200'; // 将访问信息存储到数据库中 $post_id = wp_insert_post(array( 'post_title' => $visitor_ip, 'post_content' => $visit_time, 'post_status' => $status, 'post_type' => 'visit_log', // 自定义文章类型 )); } add_action('wp_loaded', 'log_visit');
- 创建自定义文章类型:在上面的代码中,我们使用了一个名为 ‘visit_log' 的自定义文章类型。你需要在你的插件中创建这个自定义文章类型。你可以使用
register_post_type()
函数来创建。function register_visit_log_post_type() { register_post_type('visit_log', array( 'labels' => array( 'name' => 'Visit Logs', 'singular_name' => 'Visit Log', ), 'public' => false, // 不在前台显示 )); } add_action('init', 'register_visit_log_post_type');
请注意,上面的代码只是一个基本的示例,你可能需要根据你的具体需求进行修改。例如,你可能需要使用一个更精确的地理定位服务,或者你可能需要创建一个更详细的访问日志。同时,对于重定向的部分,你可能需要考虑一些额外的因素,例如处理重定向循环的问题。
讯飞星火的代码解决方案则是:
要实现这个功能,你需要创建一个WordPress插件,并在插件中添加以下代码:
- 注册一个自定义的非阻塞钩子,用于在请求开始时检查访客的IP地址。
- 如果访客的IP地址为非中国大陆IP,则重定向至指定的URL。
- 如果访客的IP地址为中国大陆IP地址,则继续处理请求。
- 在处理请求的过程中,记录访客的访问IP、访问时间和访问状态。
以下是具体的编码解决方案:
- 在你的插件文件中,添加以下代码以注册一个名为
check_ip
的非阻塞钩子:add_action('init', 'check_ip');
- 在
check_ip
函数中,使用$_SERVER['REMOTE_ADDR']
获取访客的IP地址,并检查其是否为非中国大陆IP。如果是,则执行重定向操作;否则,继续处理请求。function check_ip() { $allowed_ips = ['x.x.x.x', 'y.y.y.y']; // 在这里添加允许的中国大陆IP地址 $visitor_ip = $_SERVER['REMOTE_ADDR']; if (!in_array($visitor_ip, $allowed_ips)) { wp_redirect('https://www.domain.com/access-restricted'); exit; } }
- 在处理请求的过程中,使用
$_SERVER['REQUEST_URI']
获取请求的URL,以及$_SERVER['REQUEST_TIME']
获取访问时间。然后根据请求的状态码($_SERVER['HTTP_ACCEPT']
)判断访问状态。function process_request() { $url = $_SERVER['REQUEST_URI']; $time = $_SERVER['REQUEST_TIME']; $status = $_SERVER['HTTP_ACCEPT'] == 'text/html' ? 200 : 403; // 在这里记录访客的访问IP、访问时间和访问状态 }
- 将上述代码片段组合在一起,完整的插件代码如下:
<?php /* Plugin Name: IP Access Restriction Description: Redirect non-Chinese IP addresses to a specific URL and record their visit information. Version: 1.0 Author: Your Name */ add_action('init', 'check_ip'); function check_ip() { $allowed_ips = ['x.x.x.x', 'y.y.y.y']; // 在这里添加允许的中国大陆IP地址 $visitor_ip = $_SERVER['REMOTE_ADDR']; if (!in_array($visitor_ip, $allowed_ips)) { wp_redirect('https://www.domain.com/access-restricted'); exit; } } function process_request() { $url = $_SERVER['REQUEST_URI']; $time = $_SERVER['REQUEST_TIME']; $status = $_SERVER['HTTP_ACCEPT'] == 'text/html' ? 200 : 403; // 在这里记录访客的访问IP、访问时间和访问状态 } add_action('wp_footer', 'process_request'); ?>
将以上代码保存为一个PHP文件,例如ip-access-restriction.php
,然后在WordPress后台安装并激活该插件。这样,当访客的IP地址为非中国大陆IP时,将被重定向至指定的URL;当访客的IP地址为中国大陆IP地址时,将正常访问网站,并记录其访问信息。
小结
就上述的测试来而言:
- 代码整合 – 讯飞星火最终给出完整的插件代码方案,而百度没有;
- 编码逻辑 – 讯飞星火和问心一言给出的代码思路大体一致,但都不能够直接用,比如他们都没有给出两个状态的统计;
- 代码完整性 – 讯飞星火并没有给出统计访问信息的代码示例。
因此,对技术开发人员来说,文心一言和讯飞星火生成代码的思路及示例,都能带来一定的帮助。但目前来说,两个平台生成的代码一般都无法直接使用,需要根据项目实际需求进行再加工。
代码纠错
小编把一段涵盖语法错误或分析错误、致命错误、警告错误和通知错误的 PHP 代码分别提交给文心一言和讯飞星火,看看这两个平台分别是如何解答和纠错的。
"; echo "Bob: I'm Bob. How are you?" echo "Alex: I'm good! and you?"; echo "Bob: I'm also good"; >
文心一言的答案是:
以下是PHP代码的错误类型以及正确的代码:
- 在第一组代码中,每个echo语句后面都应该有一个分号(;)。分号是PHP语句的结束符号,如果没有它,PHP会认为下一条语句是当前语句的一部分,从而导致语法错误。以下是正确的代码:
"; echo "Bob: I'm Bob. How are you?"; echo "Alex: I'm good! and you?"; echo "Bob: I'm also good"; >
- 在第二组代码中,你定义了一个名为add()的函数,但是你没有调用它。相反,你尝试调用一个名为catch_fatal_error()的函数,但是这个函数没有定义,所以会出现致命错误。以下是正确的代码:
- 在第三组代码中,你尝试包含一个名为jtp.php的文件,但是这个文件是否存在并没有给出。如果jtp.php文件不存在或者路径不正确,会导致警告错误。以下是正确的代码:
- 在第四组代码中,你尝试输出一个名为$automobile的变量,但是这个变量没有定义,所以会出现警告错误。以下是正确的代码:
至于讯飞星火,则直接将所有代码错误解释为语法错误,如下:
//1. 错误类型:语法错误 正确代码: "; echo "Bob: I'm Bob. How are you?"; echo "Alex: I'm good! and you?"; echo "Bob: I'm also good"; > //2. 错误类型:语法错误 正确代码: //3. 错误类型:语法错误 正确代码: //4. 错误类型:语法错误 正确代码: //5. 错误类型:语法错误 正确代码:
小结
如果就代码纠错本身来说,两个平台都能够正确地纠正错误。但是文心一言在错误解析上更加全面和直观,能够方便用户理解。
单元测试
在单元测试能力方面,我给出了下面一段 java 代码,要求编写测试用例:
文心一言给出的答案如下:
以下是针对您提供的Java代码的测试用例:
这个测试类 MainTest
中的 testMain
方法对 Main
类中的 main
方法进行了测试。它首先调用 Main.main()
,然后创建一个与 main
方法中相同的 TreeMap
对象,并对其进行操作以确认其状态与预期相同。
讯飞星火则并没有编写测试代码用例,而是一段测试用例文字:
测试用例1: 输入:无 预期输出: Value of A: 1 Key: A, Value: 1 Key: C, Value: 3 测试用例2: 输入:无 预期输出: Value of A: 1 Key: A, Value: 1 Key: C, Value: 3 Key: B, Value: 2 测试用例3: 输入:无 预期输出: Value of A: 1 Key: A, Value: 1 Key: C, Value: 3 测试用例4: 输入:无 预期输出: Value of A: 1 Key: A, Value: 1 Key: C, Value: 3 Key: B, Value: 2 Key: D, Value: 4 测试用例5: 输入:无 预期输出: Value of A: 1 Key: A, Value: 1 Key: C, Value: 3 Key: B, Value: 2
小结
在代码测试能力方面,就上述的结果来看,文心一言给出了完整的测试用例,并进行了概要说明;讯飞星火只是简单列出了5个测试用例,并没有给出测试代码。
对比结果
注意,上述对比测试,仅供参考。单一测试无法见全貌,但就上述测试来看:
测试项 | 文心一言 | 讯飞星火 |
代码解释 | 平手 | 平手 |
代码生成 | 平手 | 平手 |
代码纠错 | 胜出 | |
代码测试 | 胜出 |
原文地址:https://www.wbolt.com/yiyan-vs-xinghuo.html