基于 Nvidia DGX 的高效代码搜索方案

Home DEVELOPER

Related Resources Generative AI

亮点:Qodo 利用 NVIDIA DGX 创新高效代码搜索

2025年4月23日 By Amit Bleiweiss, Dana Elifaz and Tal Sheffer

+6 Like Discuss (0)

Decorative image.

Large language models (LLMs) 已经赋能了 AI 工具,可以帮助你更快地编写更多代码。但是,当我们要求这些工具承担越来越复杂的任务时,一些局限性就会变得明显。诸如理解编程语言的细微差别、复杂的依赖关系以及适应特定代码库上下文等挑战会导致代码质量降低,并在后续过程中造成瓶颈。

Qodo,是 NVIDIA Inception program 的成员,是一个多代理代码完整性平台,它使用 AI 驱动的代理来增强和自动化软件质量工作流程,包括代码编写、测试和审查。

Qodo 愿景的核心原则是相信只有当 AI 具有深刻的上下文感知能力时,才能在软件完整性方面实现有意义的改进。代码不是孤立编写的,它存在于复杂的架构、不断演变的依赖关系和特定的编码标准中。为了使 AI 有效地协助开发人员,它必须理解的不仅是语法,还包括代码库的意图、模式和更广泛的结构。

Qodo 通过基于高级 retrieval-augmented generation (RAG)、索引和分析构建其 AI 代理来实现这一目标,所有这些都由最先进的 (SOTA) 代码嵌入模型提供支持。这种特殊的代码嵌入模型——在 NVIDIA DGX 上训练——使 AI 能够更有效地理解和分析代码,并检索高度相关的上下文,以确保 LLM 可以生成准确的代码建议、可靠的测试和富有洞察力的代码审查。

对代码专用流程的需求

大型复杂代码库在不断变化,并且上下文索引是一个持续的过程。

Qodo 构建了一个强大的流程,用于持续维护新鲜的索引,以确保代码和测试生成始终基于存储库的最新状态。此流程包括从代码库检索文件、将检索到的文件分块为段,以及将自然语言描述添加到嵌入,以使 AI 更容易理解上下文。

代码专用 RAG 流程的一个挑战是将大型代码文件分块为有意义的段。对于自然语言文本来说,分块相对简单——段落和句子为创建语义上有意义的段提供了明显的边界点。

然而,naive 的分块方法难以准确地划分代码中有意义的段,从而导致边界定义问题以及包含不相关或不完整的信息。向 LLM 提供无效或不完整的代码段实际上可能会损害性能并增加幻觉,而不是提供帮助。

Qodo 使用特定于语言的静态分析来实现分块,以递归方式将节点划分为更小的块,并执行追溯处理以重新添加任何已删除的关键上下文。这种方法可以创建尊重代码结构的块,并将相关元素放在一起。

另一个关键挑战是嵌入。对于许多现有的嵌入模型来说,很难根据自然语言查询准确地检索相关的代码示例。许多通用嵌入模型(例如 E5)侧重于语言模式,而不是特定于代码的元素,例如语法、变量依赖关系、控制流和 API 用法。这会导致不相关或不精确的搜索结果和代码检索,但相关性和精确性对于启用 AI 编码代理至关重要。

A flow diagram shows Qodo’s ingest pipeline starting with retrieving files from code base, filtering supported files, a code splitter, text splitter, and dedicated splitters, chunking, and ending with embedding to a database.

图 1. Qodo 的代码专用摄取流程

用于代码的嵌入模型

retrieval-augmented generation (RAG) 系统中,embedding models 通过将文本转换为捕获语义意义的高维向量来发挥关键作用。这些嵌入存储在 vector database 中,并支持高效的相似性搜索,使系统能够在响应用户查询时从知识库中检索最相关的信息。

The diagram shows embedding representation in a vector database, including a request in the embedding form, “Find the two most similar images, documents, or videos.”

图 2. 用于相似性匹配的嵌入过程的通用模型

对于特定于代码的任务,使用在编程语言和软件文档上训练的嵌入模型尤其具有战略意义。这种模型可以更好地理解代码语法、函数名称和技术术语的细微差别,从而更准确地检索相关的代码片段或文档。

这种专门的嵌入模型可以显着提高 RAG 系统在软件开发环境中的性能,有助于改进代码补全、错误检测和技术文档的生成。

The workflow diagram shows that the Qodo pipeline automatically scrapes open-source code from GitHub, applies multiple filtering steps for quality, and then injects the data with synthetic function descriptions and docstrings.

图 3. 从存储库到生成数据集的 Qodo 流程

与 LLM 相比,嵌入模型要小得多,因此可以更有效地分布在多个 GPU 上。这可以更好地利用硬件资源并可能缩短训练时间。因此,它们更适合数据并行分布式训练,其中整个模型在每个 GPU 工作器上复制,并且数据批次在多个 GPU 之间拆分。

Qodo 使用 NVIDIA DGX 8x A100 80GB 节点训练了他们的嵌入模型。以 bfloat16 数字精度进行训练使他们能够使用 256 的大微批次大小,从而加快收敛速度和训练时间。这对于使用对比损失的嵌入模型非常重要,尤其是在依赖批内负例时。

较大的批次大小使模型能够对更多样化的负例集进行采样,这对于有效的学习至关重要。这种多样性有助于模型更好地区分相似和不相似的实例,从而提高表示质量。

Qodo 根据 Qwen(由阿里云开发的开源 LLM,旨在执行各种 AI 任务)微调了两个嵌入模型,Qodo-Embed-1-1.5BQodo-Embed-1-7B。他们实现了 SOTA 精度,在各自规模类别中领先于 Hugging Face MTEB::CoIR 排行榜(图 4)。

NDGC 是一种用于评估信息检索质量的特定指标。

A graph shows the Qodo embedding models compared to other code-specific embedding models as measured on the HuggingFace MTEB::CoIR leaderboard. The models are at the top with scores of 71.33 and 68.53 in mean NDCG.

图 4. Qodo 嵌入模型比较

案例研究:内部代码搜索

NVIDIA 和 Qodo 最近的一次合作通过一个真实的用例展示了 Qodo 解决方案的价值。这项工作侧重于提高 NVIDIA 内部 RAG 解决方案 (Genie) 的准确性,以搜索私有代码存储库。最终目标是在 NVIDIA 的内部代码存储库上执行基于 LLM 的查询,以生成准确和精确的响应。

为了实现这一目标,我们将 Genie 项目流程中现有的行业标准组件替换为 Qodo 的专用替代方案,从而提高了系统挖掘 NVIDIA 内部代码存储库的能力,并产生了卓越的结果。

以下 Qodo 组件已集成到流程中:

如前所述,构建特定于代码的 RAG 解决方案的挑战之一是分块。大型代码文件应在自然停止点处拆分,以确保文本块的大小针对处理和存储进行优化。否则,当关键相关代码段超出上下文时,检索过程将失败。

A diagram shows NVIDIA components for a retriever, internal embedding, internal web app, meeting transcripts, a Unity codebase, and Confluence. The Qodo components are a RAG retriever API, GitHub indexer, GitLab indexer, and embedding model. The off-the-shelf components are GitHub, GitLab, and a Milvus vector database.

图 5. 用于案例研究的特定于代码的 RAG 流程

最终的流程已集成到 NVIDIA 的内部 Slack 系统中,允许专业的 C++ 开发人员根据感兴趣的存储库提出详细的技术问题,并获得可靠的响应。

图 6 和图 7 分别显示了每个流程的示例输出,即原始流程和与 Qodo 合作构建的流程。图 6 中突出显示的矩形显示原始流程无法使用特定的数据点进行响应。

Screenshots compare the output of the same question asked using NVIDIA Genie and Qodo, respectively. The question was, “What are the predefined colors in ImGui and their corresponding RGBA values? %rtxpt” The original pipeline couldn’t respond with the specific data points and suggested checking the ImGui documentation instead.

图 6. 使用 Slack 的 NVIDIA Genie 特定于代码的 RAG 系统的示例输出

图 7 显示了更详细的结果。

Screenshots compare the output of the same question asked using NVIDIA Genie and Qodo, respectively. The question was, “What are the predefined colors in ImGui and their corresponding RGBA values? %rtxpt” The Qodo pipeline offered a short list of eight element groups with multiple color values for each, including text, background, border, frame, title, scrollbar, button, and header. 

图 7. 使用 Slack 的 Qodo 特定于代码的 RAG 系统的示例输出

对于测试,我们使用了以下常见的图形公共 SDK:

我们使用 Ragas 基于这些数据集生成合成问题,并比较哪些响应更正确且具有技术细节。三行对中的每一对对应于列表中 SDK 存储库之一。每列代表问题的细分,其中每个单元格中的值包括基于忠实性和答案相关性的正确响应数。每行中的最后一个单元格显示正确响应的总数。

Three tables show that the Qodo pipeline has higher scores for total correct responses than the NVIDIA Genie pipeline: for RTXPT, the scores were 74 to 55, for RTXGI, 76 to 61, and for RTXDI, 79 to 53. 

图 7. 内部 RAG (NVIDIA Genie) 与基于 Qodo 的 RAG 流程的比较

结论

你可以在 Hugging Face 上试用 Qodo 的嵌入模型,Qodo-Embed-1-1.5BQodo-Embed-1-7B

想要加速其工作的初创公司应探索通过 NVIDIA Inception program 提供的免费权益。

有关更多信息,请参阅以下资源:

相关资源

Discuss (0) +6 Like

Tags

Generative AI | Cloud Services | General | Beginner Technical | Code / Software Generation | LLMs | Retrieval Augmented Generation (RAG)

关于作者

Amit Bleiweiss

关于 Amit Bleiweiss Amit Bleiweiss 是 NVIDIA 的高级数据科学家,专注于大型语言模型和生成式 AI。 他在应用机器学习和深度学习方面拥有 25 年的经验,在该领域拥有 50 多项专利和出版物。 Amit 获得了耶路撒冷希伯来大学的理学硕士学位,专门研究机器学习。

查看 Amit Bleiweiss 的所有帖子

Avatar photo

关于 Dana Elifaz Dana Elifaz 是一位软件和图形工具开发方面的实干领导者,拥有超过二十年的软件工具创新经验。 作为低级分析工具 Nsight Graphics—GPU Trace 的创始人,她一直处于图形性能分析的最前沿。 她现在专注于开发内部图形工具,同时领导将 AI 集成到组织工具集中的工作,从而塑造下一代智能性能解决方案。

查看 Dana Elifaz 的所有帖子

Avatar photo

关于 Tal Sheffer Tal Sheffer 是一位研究工程师和数据科学家,专门从事自然语言处理 (NLP)、机器学习和计算机视觉。 他目前在 Qodo 领导尖端生成式 AI 和大型语言模型解决方案的开发,从而推动各种 AI 应用的创新。 此前,他曾在亚马逊担任应用科学家,在那里他开发了复杂的计算机视觉算法,并在 SeeTree 担任数据科学团队负责人,领导 AI 驱动的农业领域解决方案。 Tal 强大的技术专长以坚实的学术基础为基础,拥有本古里安内盖夫大学的计算机工程理学硕士和理学士学位(优异成绩)。

查看 Tal Sheffer 的所有帖子

评论

forums.developer.nvidia.com 开始讨论

相关帖子

An illustration for AgentIQ.

使用 NVIDIA Agent Intelligence Toolkit 改进 AI 代码生成

使用 NVIDIA Agent Intelligence Toolkit 改进 AI 代码生成

使用 NVIDIA TensorRT-LLM Lookahead Decoding 优化 Qwen2.5-Coder 吞吐量

使用 NVIDIA TensorRT-LLM Lookahead Decoding 优化 Qwen2.5-Coder 吞吐量

微调小型语言模型以优化代码审查准确性

微调小型语言模型以优化代码审查准确性

Illustration representing LLMs.

使用 StarCoder2 释放你的 LLM 编码潜力

使用 StarCoder2 释放你的 LLM 编码潜力

使用 NVIDIA TensorRT-LLM 和 NVIDIA Triton 部署 AI 编码助手

使用 NVIDIA TensorRT-LLM 和 NVIDIA Triton 部署 AI 编码助手

相关帖子

NVIDIA cuPyNumeric 25.03 现已完全开源,支持 PIP 和 HDF5

NVIDIA cuPyNumeric 25.03 现已完全开源,支持 PIP 和 HDF5

使用 NVIDIA NeMo 微服务增强你的 AI 代理和数据飞轮

使用 NVIDIA NeMo 微服务增强你的 AI 代理和数据飞轮

使用 NVIDIA TensorRT 优化基于 Transformer 的扩散模型以生成视频

使用 NVIDIA TensorRT 优化基于 Transformer 的扩散模型以生成视频

Grandmaster 专家提示:使用 NVIDIA cuDF-pandas 通过特征工程在 Kaggle 竞赛中赢得第一名

Grandmaster 专家提示:使用 NVIDIA cuDF-pandas 通过特征工程在 Kaggle 竞赛中赢得第一名

![](https://developer-blogs.nvidia.c