AI编程界的集大成者——通义灵码AI程序员

news2025/3/3 14:37:09
一、引言

随着软件行业的快速发展和技术的进步,人工智能(AI)正在成为软件开发领域的一个重要组成部分。近年来,越来越多的AI辅助工具被引入到开发流程中,旨在提高效率、减少错误并加速创新。在这样的背景下,阿里云推出了通义灵码AI程序员——一款基于先进的自然语言处理技术和深度学习模型的AI编程助手。这款工具不仅在国内率先实现了AI程序员的概念落地,而且通过集成于Visual Studio Code (VS Code) 和 JetBrains IDEs 中,为开发者提供了前所未有的便捷性和灵活性。

通义灵码AI程序员的独特之处在于它能够覆盖从前端到后端的整个开发流程,利用对话式交互方式协助开发者完成从需求理解到最终产品发布的全过程。该系统不仅支持多文件级别的代码修改任务,如需求实现、问题修复以及批量生成单元测试等,还引入了诸如多版本快照管理和上下文自由组合等高级功能,进一步提升了开发者的生产力和项目管理能力。

二、唤起AI程序员

首先使用通义灵码AI程序员,需要将通义灵码IDE插件升级到最新版本(2.0.0及以上版本)。
image.png

当开发者期望和AI程序员一起完成一个研发任务时,可以通过IDE扩展导航打开通义灵码插件的窗口,并切换到AI程序员模块,或使用快捷键 ctrl+shift+I唤起AI程序员,即可开始使用。
image.png

切换到deepseekV3。
image.png

三、AI程序员功能

可以在对话框中输入:AI程序员都有哪些功能。就可以看到AI程序员都可以帮助我们做什么。
image.png

通义灵码中的智能问答和AI程序员在功能和定位上有以下区别:

  1. 智能问答

    • 功能:主要提供研发相关的问答服务,帮助开发者解决编程中的问题,如语法查询、API使用、错误排查等。
    • 定位:作为一个辅助工具,提供即时的信息查询和问题解答,帮助开发者快速找到解决方案。
  2. AI程序员

    • 功能:具备更广泛的编程能力,包括代码续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、异常报错排查、代码优化建议、代码重构以及跨语言支持等。
    • 定位:作为一个更全面的编程助手,不仅提供问答服务,还能直接参与代码的编写和优化,提升开发效率和质量。

总结来说,智能问答更侧重于信息查询和问题解答,而AI程序员则具备更全面的编程能力,能够直接参与代码的编写和优化。

四、输入需求

让AI程序员帮我设计一个在线电商网站各个模块,并且使用微服务架构。

AI程序员会把所有需要的模块都一一生成,包括用户服务、商品服务、订单服务、支付服务、购物车服务、推荐服务、通知服务、库存服务、网关服务、日志服务、配置服务、认证服务、搜索服务、评价服务等。
image.png

在生成过程中可以看到促销服务失败了,我们需要重新生成下。

image.png

QQ_1740815326897.png

在工作区可以看到对应的模块生成代码,点击接受。

image.png

image.png

五、优化代码

选中代码片段,进行优化。
image.png

image.png

可以看到我选中的是UserService.java,但是帮我优化的是PromotionService.java。这里AI理解出现了偏差。
image.png

重新再执行下上面的任务。可以看到UserService.java优化后的对比,此外还优化了PyamentService和AuthenticationService。理解的还是不够精准。
image.png

若不想全部接受,这里还可以选择对应的代码块进行接受,方便我们只进行局部代码修改。

image.png

六、多轮对话

当进行了一轮对话并生成代码变更文件后,如需继续补充需求或者修改需求,可在当前任务的会话流中继续提问,AI 程序员将结合前序轮次生成的代码变更分析补充的需求,并生成新的代码修改建议,产生一个或多个新的代码变更文件。

继续对上述的网站设计汇总增加对数据库接入模块。
image.png

生成的代码也是在工作区中,如下所示:
image.png

七、快照查看

当需要查看或回退到前序轮次的修改时,可单击下拉箭头查看当前会话任务中产生的多次代码变更快照,选择后,可以看到相关信息变化或进行切换操作。无须我们自己手工再去手工改写回退。
image.png

切换到快照0,可以看到回到了最开始。
image.png

image.png

还可以切回到最新。这些快照都是自动的,无法手动保存。

image.png

八、单元测试

单元测试智能体是 AI 程序员所具备的一种专项能力,可以针对代码变更、单个或多个代码文件批量生成单元测试文件。选中有测试的代码,然后执行单元测试。

image.png
image.png
image.png
image.png

也可以在+号处选择要单元测试的代码。这里看到AI程序员有理解不太准确了。多测试了databaseService。
image.png
image.png

可以继续优化单元测试,让其可以自动化进行测试。
image.png

开发者输入被测内容、生成要求,AI 程序员即可自动生成测试计划、测试用例、编译、运行以及根据错误信息进行自动修复,大幅提升测试用例覆盖度和用例的生成质量,降低开发者编写单元测试用例的成本。

九、解析图片

支持选择、拖拽或粘贴将图片添加为上下文,自动分析图片内容,并根据需求描述生成代码建议或问题解决方案等。
image.png
image.png
image.png

对如下图片设计的架构组件,生成对应部分的代码。
image.png

第一次正确解析了图片中的内容,

image.png

但没有达到想实现的效果,继续交互,用户服务使用Java,支付服务使用PHP,订单服务使用.NET,这三部分的代码都需要用对应的语言来生成。这次完成的不错。
image.png

十、历史会话

当不再需要上下文,或者重新开始一个需求,可以新建一个任务。
image.png

如果需要回顾历史的会话任务,可单击会话历史按钮,就可以回看。
image.png

image.png

十一、实战小游戏

在对话输入自己的需求,1分钟就可以让AI程序员生成一个贪食蛇小游戏。

image.png

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()

启动之后,验证可以正常工作,完美。

image.png

十一、体验反馈

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。期待它的下一次进化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2308434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第三十三:6.3. 【mitt】 任意组件通讯

概述&#xff1a;与消息订阅与发布&#xff08;pubsub&#xff09;功能类似&#xff0c;可以实现任意组件间通信。 // 引入mitt import mitt from "mitt";// 创建emitter const emitter mitt()/*// 绑定事件emitter.on(abc,(value)>{console.log(abc事件被触发,…

6.7 数据库设计

文章目录 数据库设计6个阶段新奥尔良法完整导图 数据库设计6个阶段 数据库设计是指&#xff0c;根据应用环境&#xff0c;构造数据库模式&#xff0c;建立数据库、应用系统&#xff0c;实现有效地数据存储&#xff0c;以满足用户需求。 数据库设计过程包含6个阶段 数据库规划&…

Java 大视界 -- Java 大数据在智能安防入侵检测与行为分析中的应用(108)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

Vue3实现文件上传、下载及预览全流程详解(含完整接口调用)

文章目录 一、环境准备1.1 创建Vue3项目1.2 安装依赖1.3 配置Element Plus 二、文件上传实现2.1 基础上传组件2.2 自定义上传逻辑&#xff08;Axios实现&#xff09; 三、文件下载实现3.1 直接下载&#xff08;已知文件URL&#xff09;3.2 后端接口下载&#xff08;二进制流&am…

【云原生】SpringCloud-Spring Boot Starter使用测试

目录 Spring Boot Starter是什么&#xff1f; 以前传统的做法 使用 Spring Boot Starter 之后 starter 的理念&#xff1a; starter 的实现&#xff1a; ?创建Spring Boot Starter步骤 在idea新建一个starter项目、直接执行下一步即可生成项目。 ?在xml中加入如下配置…

介绍下pdf打印工具类 JasperPrint

JasperPrint 工具类深度解析 JasperPrint 是 JasperReports 框架中实现 PDF 打印的核心载体类&#xff0c;其本质是 填充数据后的可打印报表对象&#xff0c;承担着从模板编译、数据填充到格式输出的全流程控制。以下从 7 个维度展开深度解析&#xff1a; 一、核心定位与生命周…

idea中或pycharm中编写Markdown文件

参考 ltjt_aiseek: seek_backend_py 项目 数智科技ai探索API接口开发 1. 安装 Django 框架 在开始创建 Django 项目之前&#xff0c;需要先安装 Django 框架。可以通过 PyCharm 的终端或者系统的命令行工具来完成安装。 使用 PyCharm 终端安装 打开 PyCharm&#xff0c;如果…

Go红队开发—并发编程

文章目录 并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道 等协程sync.WaitGroup同步Runtime包Gosched()Goexit() 区别 同步变量sync.Mutex互斥锁atomic原子变量 SelectTicker定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…

使用自动化运维工具 Ansible 集中化管理服务器

一、概述 Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具 官方网站:https://www.ansible.com/ Ansible 成立于 2013 年,总部设在北卡罗来纳州达勒姆,联合创始人 ad Ziouani 和高级副总裁 Todd Barr都是红帽的老员工。Ansible 旗下的开源软件 Ansible 十分…

数据集笔记:新加坡 一些交通的时间序列统计量

1 机动车年度保有量 data.gov.sg 各类机动车年度保有量 数据范围&#xff1a;2005年1月 - 2020年12月 1.1 数据说明 非高峰时段车辆 包括周末车&#xff08;Weekend Cars&#xff09;和 修订版非高峰时段车辆&#xff08;Revised Off Peak Cars&#xff09;&#xff0c;该…

【FL0090】基于SSM和微信小程序的球馆预约系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…

智能图像处理平台:图像处理配置类

这里我们先修改一下依赖&#xff0c;不用JavaCV&#xff0c;用openCV。 导入依赖&#xff1a; <!-- JavaCV 依赖&#xff0c;用于图像和视频处理 --> <!-- <dependency>--> <!-- <groupId>org.bytedeco</groupId>--> &l…

一周一个Unity小游戏2D反弹球游戏 - 球板的发球

前言 本文将实现当游戏开始时球在球板上,且不具备物理性,在Windows平台上通过点击屏幕来球发射,安卓平台上当手指触摸到屏幕上时进行发球,并此时开始具备物理性。 发球逻辑 首先在球板上创建一个球的发射点,新建一个空的游戏物体,并命名为BallPoint,并将其作为SpringBoa…

012 rocketmq事务消息

文章目录 事务消息概念介绍交互流程事务消息原理TransactionListener接⼝TransactionProducer.javaTransactionConsumer.java 事务消息 内置topic中的消息对消费者不可见 本地事务mq消息事务消息 消息队列 RocketMQ 版提供的分布式事务消息适⽤于所有对数据最终⼀致性有强需求…

SpringBoot原理-02.自动配置-概述

一.自动配置 所谓自动配置&#xff0c;就是Spring容器启动后&#xff0c;一些配置类、bean对象就自动存入了IOC容器当中&#xff0c;而不需要我们手动声明&#xff0c;直接从IOC容器中引入即可。省去了繁琐的配置操作。 我们可以首先将spring项目启动起来&#xff0c;里面有一…

知识图谱+智能问诊预诊系统vue+django+neo4j架构、带问诊历史

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01; &#x1f90d;编号&#xff1a;D032 &#x1f90d;智能问答&#xff1a;智能问答自诊、预诊功能&#xff0c;同时可以保存问答历史 &…

DeepSeek 助力 Vue3 开发:打造丝滑的悬浮按钮(Floating Action Button)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

Java数据结构_一篇文章了解常用排序_8.1

本文所有排序举例均默认为升序排列。 目录 1. 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想&#xff1a; 2.1.2 直接插入排序 2.1.3 希尔排序&#xff08;缩小增量排序&#xff09; 2.2 选择排序 2.2.1 基本思想&#xff1a; 2.2.2 直接选择排…

(南京观海微电子)——倍压设计与应用

在电路设计过程中&#xff0c;当后级需要的电压比前级高出数倍而所需要的电流并不是很大时&#xff0c;就可以使用倍压整流电路。倍压整流&#xff1a;可以将较低的交流电压&#xff0c;用耐压较高的整流二极管和电容器&#xff0c;“整”出一个较高的直流电压。 01 倍压整流电…

网络安全-使用DeepSeek来获取sqlmap的攻击payload

文章目录 概述DeepSeek使用创建示例数据库创建API测试sqlmap部分日志参考 概述 今天来使用DeepSeek做安全测试&#xff0c;看看在有思路的情况下实现的快不快。 DeepSeek使用 我有一个思路&#xff0c;想要测试sqlmap工具如何dump数据库的&#xff1a; 连接mysql数据库&#…