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 的制作。
第一步,通过交互问答,完成接口初次调用
请求网址:/d/file/gt/2023-09/wwzy0kkbeh5.asp Prompt 得到第一步代码。
Python编写Python代码,通过 POST 形式访问 /d/file/gt/2023-09/bsqpbrwk1hp.asp 参数,其值为 Python |
生成如下代码:
Pythonimport requestsurl = \"/d/file/gt/2023-09/wb5tepabrvh.asp = {\"txtName\": \"Python\"}response = requests.post(url, data=data)print(response.text) |
运行之后提示出现下述错误信息(编码错误),接下来继续通过 iFlyCode 智能问答进行修改。
ShellTraceback (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 请修改完善
得到最新的代码,运行新代码,发现已解决上述编码错误问题。
Pythonimport requestsurl = \"/d/file/gt/2023-09/wb5tepabrvh.asp = {\"txtName\": \"Python\"}response = requests.post(url, data=data)print(responsentent.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 rehtml = \"\"\"<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)(1)print(\"索书号:\", so_number)# 提取著者author = re.search(r'著 者:(.*?)<', html)(1)print(\"著者:\", author)# 提取出版社publisher = re.search(r'出版社:(.*?) ', html)(1)print(\"出版社:\", publisher)# 提取馆藏信息collection = re.search(r'馆 藏:总计<b>(.*?)</b>册,在库<b>(.*?)</b>册', html)(1, 2)print(\"馆藏:总计\", collection[0], \"册,在库\", collection[1], \"册\") |
运行代码得到如下结果,达到预期。
上述代码通过传入不同 HTML 源码进行了多次生成,最终找到了一个匹配度高的正则表达式,开发者在实践的时候,也可以传入多个示例,得到完美答案。
下面只需要将第一步获取的网页结果中,提取出对应的表格元素拼接到整体代码中,即可完成本案例,这里我们依旧使用 iFlyCode 的交互问答。
最后只需要简单的代码拼接,实现本案例,下述代码就是我们拼接之后的第二步完整代码。
Python# -*- coding: utf-8 -*-import requestsfrom bs4 import BeautifulSoupimport reurl = \"/d/file/gt/2023-09/wb5tepabrvh.asp = {\"txtName\": \"Python\"}response = requests.post(url, data=data)html = responsentent.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))(1) print(\"索书号:\", so_number) # 提取著者 author = re.search(r'著 者:(.*?)<', str(sub_table))(1) print(\"著者:\", author) # 提取出版社 publisher = re.search(r'出版社:(.*?) ', str(sub_table))(1) print(\"出版社:\", publisher) # 提取馆藏信息 collection = re.search(r'馆 藏:总计<b>(.*?)</b>册,在库<b>(.*?)</b>册', str(sub_table))(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 工具的新程序员就会大量的出现,一个新时代已经到来,大家一起加入吧!