0

0

使用Rag和Sem-Rag提供上下文增强AI编码助手

WBOY

WBOY

发布时间:2024-06-06 20:58:29

|

879人浏览过

|

来源于51CTO.COM

转载

通过将检索增强生成和语义记忆纳入 ai 编码助手,提升开发人员的生产力、效率和准确性。

译自Enhancing AI Coding Assistants with Context Using RAG and SEM-RAG,作者 Janakiram MSV。

虽然基本 AI 编程助手自然有帮助,但由于依赖对软件语言和编写软件最常见模式的总体理解,因此常常无法提供最相关和正确的代码建议。这些编码助手生成的代码适合解决他们负责解决的问题,但通常不符合各个团队的编码标准、惯例和风格。这通常会导致需要修改或完善其建议,以便将代码接受到应用程序中。

AI编码助手通常通过依靠特定大型语言模型(LLM)中包含的知识,以及在各种场景中应用通用编码规则来发挥作用。因此,典型的AI助手通常缺乏理解项目特定上下文的能力,从而导致在语法上正确,但在团队的独特指南、预期方法或架构设计不一致时可能会产生生产性代码与项目的当前状态或要求不匹配的情况。这种静态方法可能导致生成的代码和项目的当前状态或要求不匹配,从而需要开发人员进一步调整。

使用 RAG 优化 LLM

有一种误解,即AI只是与LLM交互以生成用户正在寻找的结果。无论您是生成文本、图像还是代码,最好的AI助手都会使用一组复杂的准则来确保用户要求的内容(例如完成特定任务的软件功能)和生成的内容(例如Java函数,在正确版本中具有准确的应用程序参数)保持一致。这样可以保持一致性,并在整个过程中提供对用户的帮助。

通过任何LLM课程,学生将获得最佳的已验证技术之一,即使用提示提供附加上下文的搜索结果。这种方法称为RAG(检索增强生成功能),已成为聊天机器人、AI助手和成功服务的关键组成部分,适用于企业用例。

使用现有代码库和编码标准了解不足的 AI 编程助手就像从街上集训练有素的软件工程师:乐于助人但可能需要修改以适应您的应用程序。编写程序的代码。

Figma
Figma

Figma 是一款基于云端的 UI 设计工具,可以在线进行产品原型、设计、评审、交付等工作。

下载

— Peter Guagenti,Tabnine

利用AI编码辅助工具可以生成生产式,LLM可以作为代码生成的基础。通过使用RAG使它们能够生成更高质量且符合公司现有代码库和工程标准的代 码。

在聊天机器人的领域中,RAG 考虑了以结构化和非结构化格式提供的现有数据。通过全文或语义搜索,它仅搜索足够多的上下文,并将其注入发送到 LLM 的提示中。

AI 编码助手可以使用类似(尽管更复杂)的方法,通过集成开发环境从现有代码库中检索上下文。高性能 AI 编码助手可以抓取项目工作区以访问当前文件、打开文件、Git 历史记录、日志、项目元数据甚至连接的 Git 存储库中的其他上下文。

RAG 赋能AI 编码助手提供高度相关和精确的结果,方法是考虑项目的特定方面,例如现有的 API、框架和编码模式。AI 助手不会提供通用解决方案,而是根据项目的既定实践调整其指导,例如建议与当前实现一致的数据库连接,或提供无缝集成私有 API 的代码建议。通过利用 RAG,助手甚至可以生成反映现有测试的结构、样式和语法的测试函数,确保代码在上下文上准确且符合项目的需要。

这种方法可以带来无与伦比的个性化,开发人员可以立即接受。

RAG 在编码助手中的工作原理

让我们来看看在编码助手上实现 RAG 所涉及的步骤。

第一阶段是索引和存储。最初,当编码助手安装并集成到开发环境中时,它会执行搜索并识别所有可以添加上下文的相关文档。然后,它将每个文档拆分为块,并将它们发送到嵌入模型。嵌入模型负责将每个块转换为向量,而不会丢失其语义表示。生成的向量存储在向量数据库中以供将来检索。编码助手可能会定期扫描工作区并将文档添加到向量数据库中。

第二阶段是编码。在下一阶段(编码)中,开发人员可能会创建注释或使用聊天助手生成特定函数。助手使用提示对存储在向量数据库中的先前索引集合执行相似性搜索。检索此搜索的结果并用于使用相关上下文扩充提示。当 LLM 收到增强提示和上下文时,它会生成与上下文中已有的代码对齐的代码片段。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

使用Rag和Sem-Rag提供上下文增强AI编码助手图片

将 RAG 应用于编码助手可以提高 LLM 生成的代码的性能、准确性和可接受性。它显著增强了该工具的实用性,并减少了开发人员重写或调整 AI 生成的代码所花费的时间。与项目的现有代码库直接对齐,可以提高代码建议的准确性,并极大地提高开发人员的生产力和代码质量。

“使用一个对你的现有代码库和编码标准不够了解的 AI 编码助手就像在街上雇用一个训练有素的软件工程师:乐于助人且用心良苦,但可能会创建需要修改才能适合你的应用程序的代码。当你分层加入适当级别的上下文(包括本地文件、项目或公司的代码库以及相关的非代码信息来源)时,就像让一位在你的公司拥有多年经验的高级工程师与你的开发人员坐在一起,”Tabnine总裁Peter Guagenti说。“数字证明了这一点。允许我们使用其现有代码作为上下文的 Tabnine 用户接受了多 40% 的代码建议,而无需修改。当 Tabnine 连接到公司的整个存储库时,这个数字会更高。”

这是 RAG 解决阻碍传统编码助手的可扩展性和适应性限制的一种方式。随着项目的增长和演变,配备 RAG 的工具会不断学习和适应,根据从代码库中收集到的新模式和信息优化其建议。这种演变能力使 RAG 成为动态开发环境中非常强大的工具。

使用语义记忆增强 RAG

语义检索增强生成 (SEM-RAG) 是 RAG 技术的高级迭代,旨在扩展 RAG 的准确性和语境化。它通过使用语义记忆而不是向量搜索来增强编码助手,从而将语义理解集成到检索过程中。

与主要依赖向量空间模型来检索相关代码片段的传统 RAG 不同,SEM-RAG 采用了一种更细致的语义索引方法。此方法利用静态分析来深入理解代码库的结构和语义,识别代码元素中的关系和依赖性。

例如,SEM-RAG 可以分析 Java 和 TypeScript 等语言中的导入语句,使其能够从库中提取上下文相关的代码元素,即使无法直接访问源代码。此功能允许 SEM-RAG 理解和利用导入库的字节码,有效地使用这些见解来丰富提供给语言模型的上下文。

虽然传统的 RAG 通过将代码片段的向量化表示与查询进行匹配,极大地提高了代码建议的相关性,但它有时缺乏完全掌握复杂软件项目语义细微差别的深度。SEM-RAG 通过关注代码中的语义关系来解决此限制,从而与项目的编码实践实现更精确的对齐。例如,通过理解项目架构中定义的关系和依赖性,SEM-RAG 可以提供不仅在上下文上准确,而且在架构上也一致的建议。这通过生成与现有系统无缝集成的代码来增强性能,从而降低引入错误或不一致的可能性。

SEM-RAG 的方法是将代码视为相互关联的元素,而不是孤立的片段,这比传统的 RAG 提供了更深入的语境化。这种理解深度促进了编码任务中更高程度的自动化,尤其是在代码库中相互依赖性至关重要的复杂领域。因此,SEM-RAG 不仅保留了传统 RAG 的所有优点,而且在理解代码的更深层次语义和结构方面至关重要的环境中超越了它。这使得 SEM-RAG 成为大规模和企业级软件开发的宝贵工具,其中维护架构完整性与代码正确性一样重要。

利用人工智能增强代码质量和开发人员生产力

选择通过 RAG 和 SEM-RAG 等高级技术融入上下文感知的人工智能编码助手,标志着软件开发工具演变中的变革性一步。通过嵌入对代码库上下文的深入理解,这些助手显着提高了他们生成的代码的准确性、相关性和性能。这种上下文集成有助于确保建议不仅在语法上正确,而且还符合您的特定编码标准、架构框架和特定于项目的细微差别,从而有效缩小了人工智能生成代码与人类专业知识之间的差距。

支持 RAG 的人工智能助手显着提高了开发人员的生产力并提高了代码质量。开发人员可以依靠这些增强的 AI 助手来生成不仅适合任务的代码,而且无缝融入更大的项目上下文中,从而最大程度地减少修订的需要并加速开发周期。通过以高度精确度自动化编码的更多方面,这些具有上下文感知的编码助手正在为软件开发设定新标准,推动人工智能工具像开发人员自己一样全面地理解和适应项目环境的复杂动态。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

43

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

158

2026.02.25

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

958

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

578

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

275

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

567

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

532

2024.04.09

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

382

2023.06.29

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

4

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 5.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号