通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。
国际市场研究机构Gartner发布业界首个AI代码助手魔力象限,阿里云通义灵码在产品功能和市场应用等方面表现优秀,成为唯一进入挑战者象限的中国科技公司。
通义灵码上线不到一年就入围 Gartner 挑战者象限,产品能力得到广泛认可。通义灵码底层基础模型已升级至Qwen2,熟练掌握200多种编程语言,同时兼容 Visual Studio Code、Visual Studio、JetBrains IDEs 等主流编程工具,可以辅助写代码、读代码、查Bug、优化代码,并提供研发智能问答等能力。通义灵码还支持上传企业私域知识库,实现私域知识问答,让AI推荐的代码更贴合企业规范。
目前,通义灵码下载量已超470万,每日辅助开发者生成代码超3000万次,已有超亿行代码被开发者采纳。一汽集团、中华财险以及哈啰集团等企业都在使用通义灵码,研发提效 10% 以上,AI 代码生成占比近30%。
欢迎下载使用链接
如何更好用好通义灵码呢?这里是我们准备的最佳使用指南,欢迎收藏!
1. 快捷键的运用
1.1 默认快捷键
通义灵码的许多操作有开箱即用的快捷键,以下是比较常用的几项:
功能 | Windows快捷键 | Macos 快捷键 |
在任意位置触发补全 | Alt + P | Option + P |
更换生成的结果 | Alt + ] | Option + ] |
采纳全部生成的代码 | Tab | Tab |
逐行采纳生成的代码 | Ctrl + ↓ | Cmd + ↓ |
关闭/打开对话面板 | Ctrl + Shift + L | Cmd + Shift + L |
另外,在通义灵码的问答面板里,可以使用 Cmd+Enter(Macos/Linux) 或 Ctrl+Enter(Windows)在输入问题时换行(直接按下 Enter 回车键会直接发送当前提问内容给模型)。
备注说明:更换生成结果快捷键会提高生成的多样性参数(temperature),有时能生成更长或更发散的内容。
1.2 自定义快捷键
JetBrains IDE 的快捷键设置方法。打开菜单栏的 Settings(设置)页面,左侧点击 Keymap(快捷键),然后找到 Plugins -> TONGYI Lingma 子项,展开即可查看和编辑快捷键。
VSCode 的快捷键设置方法。点击IDE左下角的设置图标,点击键盘快捷方式菜单,在页面中搜索 TONGYI Lingma 即可查看和编辑所有快捷键。
备注说明:为了便于识别,VSCode 的大部分通义灵码快捷键都是以 TONGYI Lingma 命名的,但触发内联建议、显示上一个/下一个内联建议快捷键复用了已经存在系统级功能项,因此命名风格上稍有差异。
2. 配置的运用
2.1 进入配置面板
JetBrains IDE 的配置面板在设置页面的顶级菜单 TONGYI Lingma 板块,可以通过点击状态栏的通义灵码小图标,选择“高级设置”项快速打开。
VSCode 的配置面板同样可以从状态栏右下角的通义灵码图标点击“高级设置”进入。
2.2 常用配置项
按文件类型禁用自动补全
若某些类型文件的自动补全结果较为打扰,可将该文件后缀类型添加到列表中,多种尾缀之间使用英文逗号分隔,例如:txt,md
JetBrains IDE 配置区域
VSCode 配置区域
备注说明:禁用特定文件类型的补全功能主要是禁用自动补全触发,若在文件内使用快捷键手工触发补全(默认快捷键位 Alt+P),依然能够使用大模型的内容自动续写生成的功能。
下拉提示时保留补全结果
默认情况下,当 IDE 有基于语法的下拉补全提示时,通义灵码会自动停止展示大模型补全内容,避免视觉上的冲突。
若希望通义灵码总是生成大模型补全,可以勾选该配置项,效果如下图所示,此时按下 Tab 键将会采纳大模型的生成结果:
JetBrains IDE 配置区域
VSCode 配置区域
生成长度控制
通义灵码支持将自动触发和手工触发的代码续写能力分别设置生成长度参数。通常建议将手工触发(默认快捷键 Alt+P) 设置得比自动触发稍长。
JetBrains IDE 配置区域
VSCode 配置区域
备注说明:这个配置项只是设置模型允许生成的最大长度,若模型某次补全生成的内容长度原本就较短,通过修改此配置并不能让模型生成的内容变长。
3. 代码注释的运用
3.1 通过注释引导补全生成
在没有额外注释引导的情况下,模型只能根据当前代码的上下文,以及项目内引用和查找到的相似代码来猜测接下来可能要编写的内容。当模型的猜测不准确时,可以尝试通过增加代码的方式来引导模型接下来应当实现什么代码。
例如在这段代码里,模型首先猜测了一个 CHAT_CONTEXT 字段,但这并非我们期望的内容:
接下来,我们增加一行注释,告诉模型下一个字段是历史记录,再次换行模型生成了符合预期的字段和相应的数据填充代码:
3.2 使用描述生成方法
通过“编辑区的代码注释引导补全”或“使用通义灵码问答面板”都能实现基于注释生成整个方法的目的。由于通义灵码的智能问答场景,使用的模型参数会比代码补全模型的参数量更大,因此,对于这类场景,通常更推荐在问答面板里直接提出需要生成的问题描述。
如果针对期望生成的语言或方法签名(方法名、参数类型、返回值类型)有特殊要求,可以在提问的时候将方法签名预先描述好。例如:
4. 跨文件索引的运用
4.1 及时保存文件,更新索引
通义灵码的跨文件索引是抑制代码幻觉的重要机制。通过自动找到当前上下文用到的类型和方法定义,模型能感知到项目里其他文件里的类型具有哪些成员,方法具有哪些参数。
在首次打开新的项目时,通义灵码会自动创建项目的文件索引,此后每次文件保存时,都会触发单个文件增量的索引更新。然而由于 IDE 里的文件通常存在内存缓存,在刚刚编写完一个文件,切换到另一个文件时,可能因为本地索引尚未更新,导致无法感知新增加或修改过的内容,依然按照原本类型结构进行推理。
例如在某代码项目中,我们给 Pet 对象,新增加了一个saleable 属性。
然后切换到另一个文件,尝试让大模型进行补全,但是模型推理出的逻辑使用的却是另一个不太相关的字段。
若要消除这种信息差异,可在编辑完前一个文件时,主动按下文件保存(快捷键Ctrl+S),再继续编辑其他文件,生成的内容就能正确引用到修改过的对象结构了。
4.2 针对MyBatis 场景的优化
除了 Java、Python、JavaScript 等主流语言项目的跨文件引用,通义灵码还支持在编写 MyBatis 的 xml 文件时自动感知 Mapper 对象上引用的表结构类型。例如在编写如下insert 语句时,插件会利用当前项目中的 TexiOrder 类型信息,确保生成的每个字段都是正确的。
5. 及时清理上下文
5.1 适时清空上下文
在同一次会话里,前文中的对话内容会在每次向大模型提问时,自动作为上文提供给模型。当实际要提问的是一个与前文无关的问题时,这些额外的信息可能会对模型的回答带来干扰。
此时可以点击问答面板顶部的新建会话按钮,在新的会话里进行提问,或使用 /clear context命令,对上下文进行清空,减少上文对接下来问答的干扰。
5.2 查看历史会话
创建新的会话后,如果需要寻找此前提问过的内容,可以使用历史记录功能回到之前的话题,并继续追问。
6. 基于代码提问
6.1 通用问答
若需要基于特定代码段的内容进行提问,除了将代码内容直接贴入问答区,也可以先在代码编辑器里框选一段代码,然后在问答区针对这段代码进行提问,例如:
6.2 内置代码任务
通义灵码插件内置了解释代码、生成单元测试、生成代码注释、生成优化建议四个代码任务,通义灵码大语言模型对这些任务进行过专项训练。例如,在需要生成单元测试的时候,使用内置任务会比框选代码之后再输入生成单元测试效果更佳。
代码任务有三种使用方式,最常用的是在方法定义的开头,点击通义灵码小图标,在下拉选项中直接选择需要执行的任务。
JetbriansIDE 的下拉菜单在方法上方:
VSCode 的下拉菜单在 IDE 顶部:
第二种方式是选择代码后点击鼠标右键,选择通义灵码菜单。
第三种方式是选择代码后在问答面板输入斜线(/)激活内置任务菜单,然后选择相应任务。
7. 提示词的技巧
7.1 在提问中引用选择的代码
在提问时,若同时在代码编辑区圈选了文本或代码段,则被选择的内容会自动以 Markdown 引用的格式被附加到提问内容的最后,因此若在提示词中提及选择的代码,应对使用“如下代码”或“以下内容”。例如:
- 正确的说法:请检查以下代码是否存在下标越界风险。
- 错误的说法:请检查选中的代码是否存在下标越界风险。 (模型并不知道选中的代码是什么)
7.2 在使用命令的时候,追加信息
通过在命令后,追加更多的辅助信息,为问答提供更多的上下文,以获得更符合期望的回复。
7.3 通过多轮对话生成有效代码
在与大语言模型的对话过程中,给到上下文越多,生成出来的结果越符合用户的预期。因此,用户可以基于上一轮的对话的基础上,再进行问答,这样,后续的提问的上下文会更多,因此生成的结果更符合整个历史上下文。当然,也会出现上一轮的历史信息干扰的现象,这个时候,用户需要适时地去清空上下文。
在上一轮的基础上,再继续追问。
7.4 为模型提供参考示例
当需要模型按照指定的格式输出,或遵循特定的前置规则时。与其用文字描述,不如提供一个参考实例,往往能达到更好的效果。例如有一份程序的运行结果文件,可以让通义灵码整理成所特定的 JSON 结构文档。首先打开文件,全选问题内容,然后在问答区域进行提问。对比下述两种提示词,后者能更稳定的输出预期的数据格式。
- 提示词1:将测试报告整理成JSON格式,每个测试结果是一个 JSON结构,用例名称放到name 字段,是否成功放到success 字段,运行耗时放到duration 字段(单位毫秒),测试覆盖率放到coverage 字段,detail字段的值是一个 JSON,将每次的用例输入和输出放到其中的input 和output 字段。
- 提示词2:将测试报告整理成JSON格式,如输入报告
…报告内容略…
应输出的数据为
[ { “name”: “超出有效页码范围时,应返回空列表并提示无更多数据”, “duration”: 3434, “coverage”: 80, “detail”: [ { “input”: “…”, “output”: “…” } ] } ]
请以此为例,生成测试的报告。
7.5 为模型设定身份
相比单纯的提问,预先给模型提供身份信息也能够有效的提升模型生成结果的稳定性和准确性。以生成测试用例为例,打开接口文档文件,全选文件内容,然后在问答区域进行提问。对比下述两种提示词,后者能给生成质量更高、覆盖率更好的用例。
- 提示词1:请根据以下接口文档生成测试用例。
- 提示词2:你是一位经验丰富的测试工程师,特点是对细节异常敏感,并且能够高效地识别潜在的问题和边界情况,请根据以下的接口文档生成详尽的测试用例,确保所有预期的功能行为都被验证。
备注说明:由于优质的提示词往往也需要输入较多内容,这部分技巧比较适合配合通义灵码即将推出的自定义提示词功能一起使用。当前阶段可以先手工输入或将提问模板复制粘贴到问题里再编辑。