查看原文
其他

讯飞星火iFlyCode编程实测,领先主流开发大模型

CSDN 2023-09-12

出品 | CSDN(ID:CSDNnews)

AI 持续火爆的今天,国内已经诞生出上百家大模型,他们分布在营销、文旅、航空、医疗、教育、金融等各个领域,仅最近一个月,多家厂商都在紧锣密鼓的发布或更新自己的大模型。由于大模型其出色的性能和效果、泛化能力、降低成本的优势,未来会有更多的大模型加入,作为应用侧落地的一线开发者该如何抉择就变得非常重要。

2023 年 8 月 15 日,讯飞正式发布讯飞星火 2.0 版,发布会重点介绍了代码能力和多模态能力,并且发布了全新的智能编程助手 iFlyCode,该助手是一款 AI 编程工具,基于讯飞星火 2.0 大模型,具备 代码生成,代码补齐,代码纠错,代码解释,单元测试生成 5 项关键能力,而且代码生成和补齐维度上已经超过了 ChatGPT,耳听为虚,眼见为实,这次我们将通过两个真实需求,全方位体验 iFlyCode 这款工具。

其中,iFlyCode 与 4 款主流编码大模型,测试 50 道算法题(答案代码控制在 30 行内)的运行统计结果可明显看到 iFlyCode 已经领先于主流编码大模型,尤其是其运行时间与代码一次生成可用率。并且 iFlyCode 所有注释全部中文标记,无需声明特别指令。

考核维度

iFlyCode

ChatGPT 3.5

ChatGPT 4

StableCode

StarCoder

平均运行时间

1.5S

4S+

5S+

7S+

7S+

代码正确率

80%

80%

86%

50%

50%

代码注释

100%

100%

100%

不足40%

不足40%

自带测试用例

100%

低于70%

低于70%

CSDN实测 50道算法题运行统计结果

本次实战开发中,iFlyCode 还有很多优异的运行与能力表现,以下为实测详细内容:

iFlyCode 要挑战的两个实战需求


整体的体验过程会围绕两个需求展开,第一条是算法题解析,第二条是完成一个需求简易版 Demo。

需求一:用 Python 实现下述算法题

算法题我们拿一道比较简单的大厂 ACM 机试题,题目如下:

描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

数据范围:输入的字符串长度满足 1≤n≤1000

注意本题有多组输入

输入描述

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述

得到逆序的句子

示例

输入:I am a boy

输出:boy a am I

需求二:用Python调用指定API,返回数据结果

通过 Python 调用 CSDN 指数查询接口,返回文字质量分。

以下代码都在 VSCode 中实现,按照下述步骤完成插件安装。


iFlyCode VS 国外 AI 工具实现算法题


我们选择了多款主流AI工具进行算法题解答,下图是 iFlyCode 与 ChatGPT 的运行对比。 

下述是 2 的平台的代码对比,可以看到对于常规算法题,二者给出的代码逻辑基本一致。

Python

# iFlyCode 输出代码
def reverse_sentence(s):
    words = s.split()
    reversed_words = words[::-1]
    return ' '.join(reversed_words)

# 测试
input_str = "I am a boy"
output_str = reverse_sentence(input_str)
print(output_str)

# ChatGPT 输出代码
while True:
    try:
        # 读取输入
        input_str = input().strip()

        # 将输入字符串按空格分割成单词列表,然后逆序排列
        words = input_str.split()
        reversed_sentence = ' '.join(words[::-1])

        # 输出逆序的句子
        print(reversed_sentence)

    except EOFError:
        break

为了测试得到更详尽的数据,笔者测试了 4 款主流编码大模型,测试了 50 道算法题(答案代码控制在30行内),得到如下结果。

考核维度

iFlyCode

ChatGPT 3.5

ChatGPT 4

StableCode

StarCoder

平均运行时间

1.5S

4S+

5S+

7S+

7S+

代码正确率

80%

80%

86%

50%

50%

代码注释

100%

100%

100%

不足40%

不足40%

自带测试用例

100%

低于70%

低于70%

通过 50 道算法题运行统计结果可明显看到 iFlyCode 已经领先于主流编码大模型,尤其是国内其运行时间与代码一次生成可用率。并且 iFlyCode 所有注释全部中文标记,无需声明特别指令,这一点让使用过程变得特别舒适。

几款大模型测试能看到,iFlyCode 可用度高,安装、配置、使用流畅简单,及易上手。

另外,在学习代码的时候,好的注释对代码阅读有非常大的帮助,但很多开源代码并没有编写注释,接下来我们使用 iFlyCode 的代码注释功能,标记一算法的核心逻辑。

首先选中【代码解释】功能,iFlyCode 可以特别快的对思路进行清晰的说明。

在实战中发现,可以直接选中部分代码,然后输入指令“给选中代码,添加详细注释”,可直接添加注释。

通过多次测试 iFlyCode 代码注释功能,发现如下优点:

注释清晰,每行代码都有清晰注释;

注释与代码匹配度高,不会出现添加注释后,但注释与代码不匹配情况;

每行代码的注释不是单纯翻译代码,iFlyCode 增加了理解注释,例如 "将 totalNum 加上 2,表示匹配到了两个字符" ,这行注释就非常清晰易理解;

iFlyCode 还可以给重点代码逻辑添加注释,即不使用逐行注释。


iFlyCode 在应用落地中的实战


在讯飞星火发布会上提到了一个关键词“10 倍工程师”,使用 iFlyCode 之后效率会有很大的提升,这一点对很多人来说,吸引力是巨大的。

接下来,我们通过 iFlyCode 交互式操作完成一款爬虫程序 Demo 的制作。

第一步,通过交互问答,完成接口初次调用

请求网址:https://library.hsfz.net.cn/userlib/bookfind.asp?ft=0

请求方法:POST

输入 Prompt 得到第一步代码。

Python
编写Python代码,通过 POST 形式访问 https://library.hsfz.net.cn/userlib/bookfind.asp?ft=0,传递txtName 参数,其值为 Python

生成如下代码:

Python
import requests

url = "https://library.hsfz.net.cn/userlib/bookfind.asp?ft=0"
data = {"txtName": "Python"}

response = requests.post(url, data=data)

print(response.text)

运行之后提示出现下述错误信息(编码错误),接下来继续通过 iFlyCode 智能问答进行修改。

Shell
Traceback (most recent call last):
  File "▒㷨▒▒▒▒▒.py", line 9, in <module>
    print(response.text)
UnicodeEncodeError: 'gbk' codec can't encode character '\xcd' in position 28: illegal multibyte sequence

输入如下 Prompt 指令。

刚刚代码报错 UnicodeEncodeError: 'gbk' codec can't encode character '\xcd' in position 25: illegal multibyte sequence 请修改完善

得到最新的代码,运行新代码,发现已解决上述编码错误问题。

Python
import requests

url = "https://library.hsfz.net.cn/userlib/bookfind.asp?ft=0"
data = {"txtName": "Python"}

response = requests.post(url, data=data)

print(response.content.decode('gbk'))

第二步,提取网页目标数据

这一步很重要,需要配合一些基础逻辑实现,首先通过一个目标元素模板,获取用于提取目标元素的正则表达式。

HTML
<table border="0" cellpadding="1" cellspacing="1" width="100%"><tbody><tr><td><font size="3"><b>Python可以这样学</b></font></td></tr>    <tr><td><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><hr size="1" color="#DFF3FC"></td></tr>    <tr><td class="bookinfo">索书号:<b>TP311.56/D652</b></td></tr>    <tr><td class="bookinfo">著 者:董付国著</td></tr>    <tr><td class="bookinfo">出版社:清华大学出版社 2017.2</td></tr><tr><td class="bookinfo">馆 藏:总计<b>6</b>册,在库<b>6</b>册【初中部图书馆<b>2</b>册,初中部智能柜②<b>1</b>册,二楼开架书库<b>3</b>册】</td></tr></tbody></table></td></tr></tbody></table>

输入关键 Prompt 如下所示。

网页返回的结果如下所示

这里添加刚刚的HTML表格模板

使用正则提取表格中的文字信息

在 iFlyCode 中的输入效果如下。

此时得到一个可运行的 Python 代码,直接复制代码再次出现了编码错误,询问 iFlyCode 之后添加文件头 # -*- coding: utf-8 -*- 即可解决 。

Python
# -*- coding: utf-8 -*-

import re

html = """
<table border="0" cellpadding="1" cellspacing="1" width="100%"><tbody><tr><td><font size="3"><b>Python可以这样学</b></font></td></tr>    <tr><td><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><hr size="1" color="#DFF3FC"></td></tr>    <tr><td class="bookinfo">索书号:<b>TP311.56/D652</b></td></tr>    <tr><td class="bookinfo">著 者:董付国著</td></tr>    <tr><td class="bookinfo">出版社:清华大学出版社 2017.2</td></tr><tr><td class="bookinfo">馆 藏:总计<b>6</b>册,在库<b>6</b>册【初中部图书馆<b>2</b>册,初中部智能柜2<b>1</b>册,二楼开架书库<b>3</b>册】</td></tr></tbody></table></td></tr></tbody></table>
"""

# 提取索书号
so_number = re.search(r'索书号:<b>(.*?)</b>', html).group(1)
print("索书号:", so_number)

# 提取著者
author = re.search(r'著 者:(.*?)<', html).group(1)
print("著者:", author)

# 提取出版社
publisher = re.search(r'出版社:(.*?) ', html).group(1)
print("出版社:", publisher)

# 提取馆藏信息
collection = re.search(r'馆 藏:总计<b>(.*?)</b>册,在库<b>(.*?)</b>册', html).group(1, 2)
print("馆藏:总计", collection[0], "册,在库", collection[1], "册")

运行代码得到如下结果,达到预期。

上述代码通过传入不同 HTML 源码进行了多次生成,最终找到了一个匹配度高的正则表达式,开发者在实践的时候,也可以传入多个示例,得到完美答案。

下面只需要将第一步获取的网页结果中,提取出对应的表格元素拼接到整体代码中,即可完成本案例,这里我们依旧使用 iFlyCode 的交互问答。

最后只需要简单的代码拼接,实现本案例,下述代码就是我们拼接之后的第二步完整代码。

Python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import re

url = "https://library.hsfz.net.cn/userlib/bookfind.asp?ft=0"
data = {"txtName": "Python"}

response = requests.post(url, data=data)

html = response.content.decode('gbk')
soup = BeautifulSoup(html, 'html.parser')

# 找到第2个表格
table_2 = soup.find_all('table')[1]

# 找到表格中的所有子表格
sub_tables = table_2.find_all('table')

# 打印子表格的HTML代码
for sub_table in sub_tables:
    # print(sub_table)

    # 提取索书号
    so_number = re.search(r'索书号:<b>(.*?)</b>', str(sub_table)).group(1)
    print("索书号:", so_number)

    # 提取著者
    author = re.search(r'著 者:(.*?)<', str(sub_table)).group(1)
    print("著者:", author)

    # 提取出版社
    publisher = re.search(r'出版社:(.*?) ', str(sub_table)).group(1)
    print("出版社:", publisher)

    # 提取馆藏信息
    collection = re.search(r'馆 藏:总计<b>(.*?)</b>册,在库<b>(.*?)</b>册', str(sub_table)).group(1, 2)
    print("馆藏:总计", collection[0], "册,在库", collection[1], "册")

在 Python 环境中运行上述代码,得到目标结果。

在使用 iFlyCode 基于生成代码的过程中,碰到细节问题,直接使用交互问答就可以得到修改建议,例如下面询问的 bs4.element.Tag 对象如何转换为字符串。


iFlyCode 使用总结及未来展望


今天给大家展示了讯飞星火新推出的 AI Code 工具:iFlyCode,整个应用过程中,体验非常好,优点如下所示:

流畅的生产速度

iFlyCode 生产代码速度极快,包含其交互问答部分,输出也非常流畅。

代码准确度

做到了一键出码,其生产代码可用度极高,笔者重点测试了国外主流产品的正则表达式生成功能,iFlyCode 可以完胜。

代码纠错,修BUG能力

使用大模型生成代码,无法避免代码BUG,因此代码纠错能力属于及高频动作,实战中我们会用其修复已有代码,也会修复其自生成代码,iFlyCode 在纠错能力上表现优异,极少出现其它大模型反复提供相同代码的问题。

AI 大模型不止在国内,在全球都在掀起新一轮技术革命和商业浪潮,以前要反复编写的代码,现在只需使用一句 “用 Python 提取视频的3~20秒” ,即可全自动化实现。除了通用大模型之外,与行业深度结合的大模型,将会给各个领域带来更大的价值。

iFlyCode 已经展示了星火大模型与编程领域之间的初步结合,仅仅 1.0 版本就让我们看到其在编程场景下的巨大助力,逻辑不复杂且重复度高的代码,直接让 AI 编程助手解决;需要检索的问题,一键搜索答案;有潜在风险的代码,一键完善优化……未来,AI 编程助手会进一步简化程序员的工作,提升生产效率,让更多开发者的精力得到释放,去做更多创造性的工作。

基于讯飞星火大模型的 iFlyCode 在国内已经走出了关键的第一步,相信不久的将来掌握 AI 工具的新程序员就会大量的出现,一个新时代已经到来,大家一起加入吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存