一、引言
随着软件行业的快速发展和技术的进步,人工智能(AI)正在成为软件开发领域的一个重要组成部分。近年来,越来越多的AI辅助工具被引入到开发流程中,旨在提高效率、减少错误并加速创新。在这样的背景下,阿里云推出了通义灵码AI程序员——一款基于先进的自然语言处理技术和深度学习模型的AI编程助手。这款工具不仅在国内率先实现了AI程序员的概念落地,而且通过集成于Visual Studio Code (VS Code) 和 JetBrains IDEs 中,为开发者提供了前所未有的便捷性和灵活性。
通义灵码AI程序员的独特之处在于它能够覆盖从前端到后端的整个开发流程,利用对话式交互方式协助开发者完成从需求理解到最终产品发布的全过程。该系统不仅支持多文件级别的代码修改任务,如需求实现、问题修复以及批量生成单元测试等,还引入了诸如多版本快照管理和上下文自由组合等高级功能,进一步提升了开发者的生产力和项目管理能力。
二、唤起AI程序员
首先使用通义灵码AI程序员,需要将通义灵码IDE插件升级到最新版本(2.0.0及以上版本)。
当开发者期望和AI程序员一起完成一个研发任务时,可以通过IDE扩展导航打开通义灵码插件的窗口,并切换到AI程序员模块,或使用快捷键 ctrl+shift+I唤起AI程序员,即可开始使用。
切换到deepseekV3。
三、AI程序员功能
可以在对话框中输入:AI程序员都有哪些功能。就可以看到AI程序员都可以帮助我们做什么。
通义灵码中的智能问答和AI程序员在功能和定位上有以下区别:
-
智能问答:
- 功能:主要提供研发相关的问答服务,帮助开发者解决编程中的问题,如语法查询、API使用、错误排查等。
- 定位:作为一个辅助工具,提供即时的信息查询和问题解答,帮助开发者快速找到解决方案。
-
AI程序员:
- 功能:具备更广泛的编程能力,包括代码续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、异常报错排查、代码优化建议、代码重构以及跨语言支持等。
- 定位:作为一个更全面的编程助手,不仅提供问答服务,还能直接参与代码的编写和优化,提升开发效率和质量。
总结来说,智能问答更侧重于信息查询和问题解答,而AI程序员则具备更全面的编程能力,能够直接参与代码的编写和优化。
四、输入需求
让AI程序员帮我设计一个在线电商网站各个模块,并且使用微服务架构。
AI程序员会把所有需要的模块都一一生成,包括用户服务、商品服务、订单服务、支付服务、购物车服务、推荐服务、通知服务、库存服务、网关服务、日志服务、配置服务、认证服务、搜索服务、评价服务等。
在生成过程中可以看到促销服务失败了,我们需要重新生成下。
在工作区可以看到对应的模块生成代码,点击接受。
五、优化代码
选中代码片段,进行优化。
可以看到我选中的是UserService.java,但是帮我优化的是PromotionService.java。这里AI理解出现了偏差。
重新再执行下上面的任务。可以看到UserService.java优化后的对比,此外还优化了PyamentService和AuthenticationService。理解的还是不够精准。
若不想全部接受,这里还可以选择对应的代码块进行接受,方便我们只进行局部代码修改。
六、多轮对话
当进行了一轮对话并生成代码变更文件后,如需继续补充需求或者修改需求,可在当前任务的会话流中继续提问,AI 程序员将结合前序轮次生成的代码变更分析补充的需求,并生成新的代码修改建议,产生一个或多个新的代码变更文件。
继续对上述的网站设计汇总增加对数据库接入模块。
生成的代码也是在工作区中,如下所示:
七、快照查看
当需要查看或回退到前序轮次的修改时,可单击下拉箭头查看当前会话任务中产生的多次代码变更快照,选择后,可以看到相关信息变化或进行切换操作。无须我们自己手工再去手工改写回退。
切换到快照0,可以看到回到了最开始。
还可以切回到最新。这些快照都是自动的,无法手动保存。
八、单元测试
单元测试智能体是 AI 程序员所具备的一种专项能力,可以针对代码变更、单个或多个代码文件批量生成单元测试文件。选中有测试的代码,然后执行单元测试。
也可以在+号处选择要单元测试的代码。这里看到AI程序员有理解不太准确了。多测试了databaseService。
可以继续优化单元测试,让其可以自动化进行测试。
开发者输入被测内容、生成要求,AI 程序员即可自动生成测试计划、测试用例、编译、运行以及根据错误信息进行自动修复,大幅提升测试用例覆盖度和用例的生成质量,降低开发者编写单元测试用例的成本。
九、解析图片
支持选择、拖拽或粘贴将图片添加为上下文,自动分析图片内容,并根据需求描述生成代码建议或问题解决方案等。
对如下图片设计的架构组件,生成对应部分的代码。
第一次正确解析了图片中的内容,
但没有达到想实现的效果,继续交互,用户服务使用Java,支付服务使用PHP,订单服务使用.NET,这三部分的代码都需要用对应的语言来生成。这次完成的不错。
十、历史会话
当不再需要上下文,或者重新开始一个需求,可以新建一个任务。
如果需要回顾历史的会话任务,可单击会话历史按钮,就可以回看。
十一、实战小游戏
在对话输入自己的需求,1分钟就可以让AI程序员生成一个贪食蛇小游戏。
import pygame
import time
import random
# 初始化pygame
pygame.init()
# 定义颜色
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
# 定义显示窗口大小
dis_width = 800
dis_height = 600
# 创建显示窗口
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption('贪食蛇游戏')
# 定义时钟
clock = pygame.time.Clock()
# 定义蛇的大小和速度
snake_block = 10
snake_speed = 15
# 定义字体样式
font_style = pygame.font.SysFont("bahnschrift", 25)
score_font = pygame.font.SysFont("comicsansms", 35)
# 显示得分
def Your_score(score):
value = score_font.render("Your Score: " + str(score), True, yellow)
dis.blit(value, [0, 0])
# 绘制蛇
def our_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])
# 显示消息
def message(msg, color):
mesg = font_style.render(msg, True, color)
dis.blit(mesg, [dis_width / 6, dis_height / 3])
# 游戏循环
def gameLoop():
game_over = False
game_close = False
x1 = dis_width / 2
y1 = dis_height / 2
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
while not game_over:
while game_close == True:
dis.fill(blue)
message("You Lost! Press C-Play Again or Q-Quit", red)
Your_score(Length_of_snake - 1)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
x1_change = 0
if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
dis.fill(blue)
pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
snake_Head = []
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if len(snake_List) > Length_of_snake:
del snake_List[0]
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
our_snake(snake_block, snake_List)
Your_score(Length_of_snake - 1)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
Length_of_snake += 1
clock.tick(snake_speed)
pygame.quit()
quit()
# 启动游戏
gameLoop()
启动之后,验证可以正常工作,完美。
十一、体验反馈
AI程序员不仅支持多文件级别的代码修改任务,还引入了工作区空间管理、快照回滚机制等创新功能,旨在为开发者提供更加便捷和高效的开发体验。下面是我的使用反馈。
1、工作区空间管理
优势:
- 集中化管理: 通义灵码AI程序员增加了一个专门的工作区空间,所有与AI交互的需求描述及生成的代码都集中存储于此。这种设计极大地简化了项目的管理和维护过程,使得开发者能够更轻松地跟踪每一次对话及其对应的代码变更。
- 清晰组织: 工作区内的内容按需分类,便于快速查找和回顾历史记录。这对于需要频繁切换任务或处理复杂项目结构的开发者来说尤为有用。
改进建议:
- 界面优化: 虽然工作区提供了良好的集中管理功能,但在某些情况下,界面布局可能显得不够直观。未来版本可以考虑进一步优化UI/UX设计,使信息呈现更加清晰易懂。
2、快照回滚机制
优势:
- 版本控制: 快照功能自动保存变更的代码,并在必要时回滚到之前的版本。这不仅提高了开发过程中的灵活性,也为错误修复提供了强有力的支持。
- 数据保护: 在面对突发情况(如误操作导致的数据丢失)时,快照可以迅速恢复至稳定状态,确保业务连续性不受影响。
改进建议:
- 手动创建: 虽然自动化的快照智能高效,但这些快照无法修改名字,一旦修改代码比较频繁时,无法记住每个快照对应的代码内容了,所以希望可以增加手动快照,可以自定义名字,方便回退。
3、AI理解偏差问题
挑战:
- 准确性有待提高: 在AI程序员解析输入任务时偶尔会出现理解偏差,添加不必要的内容或忽略重要细节。这种情况可能导致最终生成的内容不符合预期要求。
改进建议:
- 增强训练数据集: 通过不断丰富和完善训练数据集,特别是针对特定领域或行业案例的学习材料,可以有效减少AI的理解误差。
- 用户引导优化: 提供更为详细的指导文档或教程,帮助用户更好地构建需求描述,以降低因表述不清引发的误解概率。
4、代码优化对比功能
亮点:
- 可视化对比: 当进行代码优化时,系统会自动生成优化前后的对比视图,让开发者一目了然地看到具体改动之处。此外,还支持选择性修改特定代码段,给予用户更大的自主权。
- 高效决策: 这种方式不仅加快了决策速度,也增强了开发者对最终结果的信心,因为可以根据实际需求做出最佳选择。
进一步探索:
- 深度学习算法集成: 结合最新的深度学习算法,持续优化代码优化逻辑,使其不仅能识别表面差异,还能洞察深层次的性能瓶颈,从而提出更具针对性的改进建议。
5、总结
总体而言,通义灵码AI程序员凭借其独特的工作区空间管理、实用的快照回滚机制以及强大的代码优化能力,已经证明了其在提升开发效率方面的巨大潜力。对于追求高效敏捷开发流程的企业和个人开发者来说,通义灵码无疑是一个值得尝试的选择。未来,随着更多用户反馈的积累和技术进步,我们期待看到这款AI编程助手带来更多惊喜。
十二、1.0和2.0对比
去年测评了初出茅庐但已崭露头角的小鲜肉通义灵码1.0——工作上个的好搭子——通义灵码测评分享。
现在经过千锤百炼、带着一身绝技归来的大佬——通义灵码2.0出来了。今天最后对两者进行一个简单的对比。
1、代码生成能力:从片段到框架
通义灵码1.0主要提供基本的代码补全和简单的代码片段生成功能。在一定程度上提高了编码效率,但在处理复杂功能开发时,代码质量和逻辑完整性还有待提升16。
2.0版在此基础上有了显著改进,能够根据需求描述生成高质量的代码框架,包括详细的逻辑处理、数据结构设计和异常处理。例如,在设计电商网站时,2.0版能够提供一个完整的架构设计,涵盖了各个模块。
2、跨语言编程:从“菜鸟”到“大佬”的转变
再来聊聊跨语言编程这个话题。1.0版就像是一个初学者,也能玩转几种编程语言,而在处理复杂转换时总显得有些力不从心,需要手动调整的地方不少。
而2.0版则完全不同,不仅能轻松跨越多种语言之间的障碍,还能自动处理语言间的差异,生成符合规范的转换代码,并且提供了详细的注释和转换说明,简直就是开发者们的贴心小棉袄!
3、单元测试自动生成:从“新手村”到“王者段位”
说到单元测试自动生成,1.0版本可能只能算是刚刚走出新手村,能够生成简单的单元测试用例,但覆盖面和准确性都有待提高。
但是2.0版本呢?嘿,这家伙直接跳到了王者段位!能根据代码逻辑自动生成全面的测试用例,覆盖面广,能有效发现潜在bug,而且还提供了执行反馈,帮助开发者快速定位问题。
4、图生代码:从“画蛇添足”到“点石成金”
最后不得不提的是图生代码功能。1.0版本在这个领域有点像是在“画蛇添足”,支持的图形类型有限,生成的代码准确度也有待提升。
2.0版本则是掌握了点石成金的秘籍,支持多种图形类型,通过绘制图形就能迅速生成结构清晰、逻辑性强的代码,特别适合复杂的业务逻辑和系统设计。
通义灵码1.0曾经带给我们的惊喜与成长。正是有了1.0的基础,才有了今天的2.0。期待它的下一次进化。