build-your-ai-coding-assistant

build-your-ai-coding-assistant

构建AI编码助手全流程指南 助力开发效率提升

该项目提供构建AI辅助编码助手的全面指南,包括IDE插件开发、模型评估微调和数据工程等核心内容。通过整合开源工具和技术,项目旨在帮助开发者创建高效AI编码助手。内容涵盖多种AI辅助场景实现方法,探讨上下文工程对AI性能的影响,为开发者提供实用经验。

AI辅助编码生成式AI代码补全IDE插件上下文工程Github开源项目

AI 研发提效:构建 AI 辅助编码助手

Cover

2023 年,生成式 AI 的火爆,让越来越多的组织开始引入 AI 辅助编码。与在 2021 年发布的 GitHub Copilot 稍有差异的是,代码补全只是众多场景中的一个。 大量的企业内部在探索结合需求生成完整代码、代码审查等场景,也引入生成式 AI,来提升开发效率。

在这个背景下,我们(Thoughtworks 开源社区)也开源了一系列的 AI 辅助工具,以帮助更多的组织构建自己的 AI 辅助编码助手:

  • AutoDev for Intellij,基于 JetBrains 平台的全流程 AI 辅助编码工具。
  • AutoDev for VSCode,基于 VSCode 编辑器的全流程 AI 辅助编码工具。
  • Unit Eval,代码补全场景下的高质量数据集构建与生成工具。
  • Unit Minions,在需求生成、测试生成等测试场景下,基于数据蒸馏的数据集构建工具。

由于,我们设计 AutoDev 时,各类开源模型也在不断演进。在这个背景下,它的步骤是:

  • 构建 IDE 插件与度量体系设计。基于公开模型 API,编写和丰富 IDE 插件功能。
  • 模型评估体系与微调试验。
  • 围绕意图的数据工程与模型演进。

也因此,这个教程也是围绕于这三个步骤展开的。 除此,基于我们的经验,本教程的示例技术栈:

  • 插件:Intellij IDEA。AutoDev 是基于 Intellij IDEA 构建的,并且自带静态代码分析能力,所以基于它作为示例。我们也提供了 VSCode 插件版本:AutoDev for VSCode,你可以在这个基础上进行开发。
  • 模型:DeepSeek Coder 6.7b。基于 Llama 2 架构,与 Llama 生态兼容
  • 微调:Deepspeed + 官方脚本 + Unit Eval。
  • GPU:RTX 4090x2 + OpenBayes。(PS: 用我的专用邀请链接,注册 OpenBayes,双方各获得 60 分钟 RTX 4090 使用时长,支持累积,永久有效: https://openbayes.com/console/signup?r=phodal_uVxU

由于,我们在 AI 方面的经验相对比较有限,难免会有一些错误,所以,我们也希望能够与更多的开发者一起,来构建这个开源项目。

功能设计:定义你的 AI 助手

结合 JetBrains 2023《开发者生态系统》报告的人工智能部分 ,我们可以总结出一些通用的场景,这些场景反映了在开发过程中生成式 AI 可以发挥作用的领域。以下是一些主要的场景:

  • 代码自动补全: 在日常编码中,生成式 AI 可以通过分析上下文和学习代码模式,提供智能的代码自动补全建议,从而提高开发效率。
  • 解释代码: 生成式 AI 能够解释代码,帮助开发者理解特定代码片段的功能和实现方式,提供更深层次的代码理解支持。
  • 生成代码: 通过学习大量的代码库和模式,生成式 AI 可以生成符合需求的代码片段,加速开发过程,尤其在重复性工作中发挥重要作用。
  • 代码审查: 生成式 AI 能够进行代码审查,提供高质量的建议和反馈,帮助开发者改进代码质量、遵循最佳实践。
  • 自然语言查询: 开发者可以使用自然语言查询与生成式 AI 进行交互,提出问题或请求,以获取相关代码片段、文档或解释,使得开发者更轻松地获取需要的信息。
  • 其它。诸如于重构、提交信息生成、建模、提交总结等。

而在我们构建 AutoDev 时,也发现了诸如于创建 SQL DDL、生成需求、TDD 等场景。所以。我们提供了自定义场景的能力,以让开发者可以自定义自己的 AI 能力,详细见:https://ide.unitmesh.cc/customize

场景驱动架构设计:平衡模型速度与能力

在日常编码时,会存在几类不同场景,对于 AI 响应速度的要求也是不同的(仅作为示例):

场景响应速度生成质量要求大小预期说明
代码补全1~6B代码补全是日常编码中最常用的场景,响应速度至关重要。
文档生成16B文档生成需要充分理解代码结构,速度和质量同样重要。
代码审查16B代码审查需要高质量的建议,同时响应速度也需尽可能快。
单元测试生成6B~单元测试生成的上下文较少,响应速度和AI质量同样重要。
代码重构32B~代码重构可能需要更多上下文理解,响应速度可适度减缓。
需求生成32B~需求生成是相对复杂的场景,响应速度可以适度放缓,确保准确性。
自然语言代码搜索与解释中-低32B~自然语言代码搜索与解释是相对复杂的场景,响应速度可以适度放缓,确保准确性。

PS:这里的 32B 仅作为一个量级表示,因为在更大的模型下,效果会更好。

因此,我们将其总结为:一大一中一微三模型,提供全面 AI 辅助编码:

  • 高质量大模型:32B~。用于代码重构、需求生成、自然语言代码搜索与解释等场景。
  • 高响应速度中模型:6B~。用于代码补全、单元测试生成、文档生成、代码审查等场景。
  • 向量化微模型:~100M。用于在 IDE 中进行向量化,诸如:代码相似度、代码相关度等。

重点场景介绍:补全模式

AI 代码补全能结合 IDE 工具分析代码上下文和程序语言的规则,由 AI 自动生成或建议代码片段。在类似于 GitHub Copilot 的代码补全工具中, 通常会分为三种细分模式:

行内补全(Inline)

类似于 FIM(fill in the middle)的模式,补全的内容在当前行中。诸如于:BlotPost blogpost = new,补全为: BlogPost();, 以实现:BlogPost blogpost = new BlogPost();

我们可以 Deepseek Coder 作为例子,看在这个场景下的效果:

<|fim▁begin|>def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[0] left = [] right = [] <|fim▁hole|> if arr[i] < pivot: left.append(arr[i]) else: right.append(arr[i]) return quick_sort(left) + [pivot] + quick_sort(right)<|fim▁end|>

在这里,我们就需要结合光标前和光标后的代码。

块内补全(InBlock)

通过上下文学习(In-Context Learning)来实现,补全的内容在当前函数块中。诸如于,原始的代码是:

fun createBlog(blogDto: CreateBlogDto): BlogPost { }

补全的代码为:

val blogPost = BlogPost( title = blogDto.title, content = blogDto.content, author = blogDto.author ) return blogRepository.save(blogPost)

块间补全(AfterBlock)

通过上下文学习(In-Context Learning)来实现,在当前函数块之后补全,如:在当前函数块之后补全一个新的函数。诸如于,原始的代码是:

fun createBlog(blogDto: CreateBlogDto): BlogPost { //... }

补全的代码为:

fun updateBlog(id: Long, blogDto: CreateBlogDto): BlogPost { //... } fun deleteBlog(id: Long) { //... }

在我们构建对应的 AI 补全功能时,也需要考虑应用到对应的模式数据集,以提升补全的质量,提供更好的用户体验。

编写本文里的一些相关资源:

重点场景介绍:代码解释

代码解释旨在帮助开发者更有效地管理和理解大型代码库。这些助手能够回答关于代码库的问题、 提供文档、搜索代码、识别错误源头、减少代码重复等, 从而提高开发效率、降低错误率,并减轻开发者的工作负担。

在这个场景下,取决于我们预期的生成质量,通常会由一大一微或一中一微两个模型组成,更大的模型在生成的质量上结果更好。结合,我们在 Chocolate Factory 工具中的设计经验,通常这样的功能可以分为几步:

  • 理解用户意图:借助大模型理解用户意图,将其转换为对应的 AI Agent 能力调用或者 function calling 。
  • 转换意图搜索:借助模型将用户意图转换为对应的代码片段、文档或解释,结合传统搜索、路径搜索和向量化搜索等技术,进行搜索及排序。
  • 输出结果:交由大模型对最后的结果进行总结,输出给用户。

作为一个 RAG 应用,其分为 indexing 和 query 两个部分。

在 indexing 阶段,我们需要将代码库进行索引,并涉及到文本分割、向量化、数据库索引等技术。 其中最有挑战的一个内容是拆分,我们参考的折分规则是:https://docs.sweep.dev/blogs/chunking-2m-files 。即:

  • 代码的平均 Token 到字符比例约为1:5(300 个 Token),而嵌入模型的 Token 上限为 512 个。
  • 1500 个字符大约对应于 40 行,大致相当于一个小到中等大小的函数或类。
  • 挑战在于尽可能接近 1500 个字符,同时确保分块在语义上相似且相关上下文连接在一起。

在不同的场景下,我们也可以通过不同的方式进行折分,如在 Chocolate Factory 是通过 AST 进行折分,以保证生成上下文的质量。

在 querying 阶段,需要结合我们一些传统的搜索技术,如:向量化搜索、路径搜索等,以保证搜索的质量。同时,在中文场景下,我们也需要考虑到转换为中文 的问题,如:将英文转换为中文,以保证搜索的质量。

其它:日常辅助

对于日常辅助来说,我们也可以通过生成式 AI 来实现,如:自动创建 SQL DDL、自动创建测试用例、自动创建需求等。这些只需要通过自定义提示词, 结合特定的领域知识,便可以实现,这里不再赘述。

架构设计:上下文工程

除了模型之外,上下文也是影响 AI 辅助能力的重要因素。在我们构建 AutoDev 时,我们也发现了两种不同的上下文模式:

  • 相关上下文:基于静态代码分析的上下文生成,可以构建更好质量的上下文,以生成更高质量的代码和测试等,依赖于 IDE 的静态代码分析能力。
  • 相似上下文:基于相似式搜索的上下文,可以构建更多的上下文,以生成更多的代码和测试等,与平台能力无关。

简单对比如下:

相关上下文相似上下文
检索技术静态代码分析相似式搜索
数据结构信息AST、CFGSimilar Chunk
跨平台能力依赖于 IDE,或者独立的解析器不依赖具体平台
上下文质量极高
生成结果极高

编辑推荐精选

问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多