返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

AutoDev 预上下文引擎:预生成代码语义化信息,构建 AI 编程的知识基座

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 21:04 |阅读模式 打印 上一主题 下一主题

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

预生成上下文是指在用户发起查询或生成请求之前,系统针对特定代码仓库、文档或 SDK,离线构建一组语义化的上下文数据。这些上下文经过理解、 加工与组织,使其在运行时能够被快速检索和引用,从而提升代码智能体在生成、解释或检索代码时的准确性、相关性和响应速度。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">我们在 AutoDev Workbench 中实现了这一概念的分析端与后端,对应的分析侧即 AutoDev Context Worker。你可以使用这个工具, 对你的代码仓库进行上下文生成:

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

npx@autodev/context-worker@latest

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">PS:npx是 Node.js 的包管理工具,可以直接运行 npm 包中的命令。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">引子:寻找更高效的 RAG 方式

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">RAG 是在 AI 应用中一个重要的话题。尽管我们在 AutoDev 的 VSCode 版本中,构建了多种向量化 RAG 的方式,但是我一直认为在 AI 编程中, 对于大量的项目来说基于向量化方式的 RAG 的性价比并不高。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">所以,有必要重新审视 RAG 的方式,尤其是对于代码检索来说。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">性价比低的向量化代码检索

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">我认为向量化代码检索的性价比并不高,主要有以下几个原因:

  • 向量化索引是一个昂贵的过程,不论是你使用本地的向量化还是云端的向量化。
  • 向量化的实时刷新又是另外一个头疼的过程,特别是它会拉跨你的本地机器。
  • 代码库中并没有大量的文档知识,更多的是代码本身的语义信息。

而从 2025 年技术趋势来说,基于向量化的 RAG 已经变成了次要的选择,只当当前阶段,AI 检索不到相关信息时,有些工具如 Cursor 才会使用向量化的方式进行检索。

内部框架等固定知识的预生成

另外一方面,作为一个 AI 编程工具,我们还需要面对大量的内部框架、SDK、API 等固定知识的预生成。因为这些知识是相对固定的,对于用户来说, 通常问题也是颇为明确的 —— 用户不会去询问:如何使用 Spring Boot 来构建一个 Web 应用?而是会询问:如何在 Spring Boot 中使用 xx 框架。

那么,针对这类需要提供固定知识的场景:

  • 内部开发框架。可以分为单个组件的问题,或者多个组件一起使用等,在排查问题时需要知道部分代码信息。
  • SDK、API 等。用户通常不想去了解 SDK、API 的实现细节,而是想要了解如何使用它们来完成特定的任务。
  • 其它公共代码库。比如,如何使用某个公共库来完成特定的任务。

我们就可以用更高效的方式来生成它们。

Context Worker:预生成代码上下文

如上所述,针对于这一类场景,我们可以使用预生成上下文的方式来提升 RAG 的效果。Context Worker 就是为此而设计的。

AutoDev Context Worker 是一个用于深度解析和分析代码的工具,旨在为开发者提供更好的上下文理解和智能化的代码处理能力。 它可以帮助开发者更高效地理解和使用代码库。

Context Worker 的设计与目标

Context Worker 是基于我们先前的 VSCode 版本开发的,我们从中提取核心的代码解析和分析功能,构建了一个独立的工具。 我们进一步扩充了他的多语言的解析支持,现在可以支持 Java、JavaScript、TypeScript、Python、Golang、Rust、C/C++、Ruby、C# 等十几种主流语言。

结合 AutoDev Workbench 的服务端功能,Context Worker 可以为开发者提供以下能力:

  • 深度项目解析与 AST 构建结构化,Context Worker 对整个项目(或指定的模块范围)进行深度解析。这包括构建完整的 AST,识别所有的函数、类、接口及其签名、注释(docstrings)。同时,分析项目依赖(内部模块间和外部库依赖),构建初步的依赖图。
  • 自动化代码摘要与"意图"标注:对于缺乏良好注释的代码块(函数、复杂逻辑段),尝试使用 LLM 预先生成简洁的摘要或"意图描述" 。对于一些关键的架构组件或核心算法,可以预先打上特定的标签或元数据。
  • 构建项目级知识图谱:将解析出的代码实体(类、函数、变量等)及其关系(调用、继承、实现、引用等),并围绕领域模型构建知识图谱, 标注实体的语义和上下文信息。

使用 AutoDev Context Worker

Context Worker 的使用非常简单,你只需要运行以下命令:

npx@autodev/context-worker--path/path/to/project--upload--server-urlhttps://your-server/api/context--non-interactive

它将会启动 Context Worker,并对当前目录下的代码进行解析和分析。如下是一个生成数据的示例:

接口:UserRepository文件:/path/to/UserRepository.java接口定义:```javapublicinterfaceUserRepositoryextendsJpaRepository<User,Long>{Optional<User>findByUsername(Stringusername);List<User>findByEmail(Stringemail);}```===实现类(1)===实现类:UserRepositoryImpl文件:/path/to/UserRepositoryImpl.java```java@RepositorypublicclassUserRepositoryImplimplementsUserRepository{//...实现代码...@OverridepublicOptional<User>findByUsername(Stringusername){//...方法实现...}@OverridepublicList<User>findByEmail(Stringemail){//...方法实现...}}```

Context Worker 会自动分析代码中的接口、实现类、方法等信息,并生成相应的上下文知识。你可以将这些信息存储在知识库中,而后调用 AI 来直接生成 相应的 name 和 description 描述,以在不同的场景中使用。

使用 MCP 获取上下文知识

结合我们在 AutoDev Workbench 还提供的 MCP(Model Context Protocol)服务,你就可以使用 AI 编程工具通过 MCP 获取已知问题所需要的上下文知识。

总结


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ