热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >自定义 RAG 工作流:在 IDE 中结合 RAG 编排,构建可信的编码智能体

自定义 RAG 工作流:在 IDE 中结合 RAG 编排,构建可信的编码智能体

来源:互联网 更新时间:2026-08-19 14:19

构建编码智能体从来不是一件轻松的事。结合我们在 AutoDev、ArchGuard Co-mate、ChocoBuilder 等智能体项目上摸爬滚打的经验,我们开始在 Shire 语言中尝试一种新的 RAG 工作流。说白了,就是利用先前搭建好的 IDE 基础设施——代码生成、校验、执行那一套接口——现在终于可以打造出更靠谱、更可信的编码智能体了。

TL;DR(太长不看)版

现在,你可以用 Shire 配合自定义的 RAG 流程来编排智能体。看下面这段代码:

  • 用自己写的 prompt 和 IDE 接口捞取代码数据

  • 对代码做向量化、检索,以及常规的代码搜索

  • 把参数传给下一个流程(execute 函数)

---
name: "Search"
variables:
"placeholder": /.*.ja va/ { splitting | embedding }
"input": "博客创建流程"
afterStreaming: {
case condition {
default { searching($output) | execute("SummaryQuestion.shire", $output, $input) }
}
}
---
xxx
User: $input
Response:

再配合代码校验、代码执行这些能力,一个完整、可信的编码智能体就搭起来了。

基础 Shire 能力:Pattern Action 与代码可信函数

Shire 是一种简化的 AI 编码智能体语言,能让大型语言模型(LLM)与集成开发环境(IDE)自由对话,从而实现自动化编程。

简单概括,通过 Shire 你能做到:

  • 调用封装好的 IDE API,生成 prompt 所需的数据。在 Shire 里,数据在 prompt 中以变量形式存在。

  • 定义在 IDE 中的行为——怎么触发、怎么执行、结果如何处理。

  • 定义简单的数据流——数据怎么处理、怎么存储。

所以,用 Shire 作为中间语言,你可以访问自己的 IDE 数据,生成与 AI 模型对话的 prompt,实现真正的自动化编程。

Shire RAG 基础:Pattern Action 构建数据流

在先前的 Shire 中,你可以通过 variables 自定义 Pattern Action,从 IDE 里拉取数据。比如:

---
variables:
"logContent": /.*.ja va/ { grep("error.log") | head }
---
检查用户的代码是否有问题:$logContent

这里定义了一个变量 logContent,它的值是从所有 *.ja va 文件中检索 error.log 的结果。最后把结果发给 LLM,由 AI 来处理。

Shire RAG 基础:代码可信校验

Shire 的代码校验是在生命周期中的 onStreamingDone 阶段执行的——也就是 Streaming 完成后,通过一系列后处理器对生成内容做处理。当前版本支持三个函数:

  • parseCode 把文本解析成代码块。

  • verifyCode 检查代码错误或 PSI 问题。

  • runCode 运行生成的文本代码。

因此,你可以这样处理 LLM 生成的代码:

---
onStreamingEnd: { parseCode | sa veFile | openFile | verifyCode | runCode }
---
生成一个 python hello world,使用 markdown block返回

启动 Shire 指令的那一刻,一场精心编排的编码舞蹈就开始了。首先,Shire RAG 工作流调用 LLM,这个强大的语言模型迅速生成一段 Python 的 Hello World 代码块。

  • 生成的代码块接着通过 sa veFile 保存到指定文件。

  • 为了确保准确性和可靠性,启动 verifyCode 函数做严格的语法校验。

  • 一旦通过校验,就用 runCode 函数运行这段代码。

这一刻,代码仿佛被赋予了生命,在 IDE 中输出 "Hello, World!"。

Shire RAG 基础:Index 与 Query

借助我们之前做 RAGScript 和相关 RAG 项目的经验,通过简单的函数就可以实现代码的检索和查询。例如:

---
name: "Search"
variables:
"testTemplate": /.*.kt/ { splitting | embedding | searching("blog") }
---
$testTemplate

这里定义了一个变量 testTemplate,它的值是从所有 *.kt 文件中检索 blog 的结果。接着把结果发给 LLM,由 AI 处理。

Shire RAG Flow:解释代码示例

当我们使用领先的 AI IDE(比如 AutoDev VSCode 版本)的业务知识解释功能时,通常会分 3~5 个步骤:

  1. 查询转换

    。把用户的问题转换成某种形式的查询语句——关键字、假设性代码等。

  2. 信息检索

    。结合本地数据(文本、向量等)进行检索,获取相关信息。

  3. 重新排序

    。对检索到的信息排序、解释,生成对应结果。

  4. 内容总结

    。最后把结果发给 LLM,由 AI 处理。

根据不同的上下文或业务需求,这个流程可能略有差异,但基本套路是一样的。而在使用 Shire 开发时,由于只需要和 LLM 交互两次,所以可以简化为两步:

  1. 把用户的问题发给 LLM 并检索

  2. 由 LLM 总结上一步的结果

尽管简化了,但如何抽象出这种原子能力,对 Shire 提出了更高的要求。这里我们只是作为一个 PoC 来展示,后续版本会提供更多能力。

步骤 1:使用 Shire 自定义代码检索

有了上面这些基础,可以开始搭建 RAG 流程了。比如:

---
name: "Search"
variables:
"placeholder": /.*.ja va/ { splitting | embedding }
"lang": "ja va"
"input": "博客创建流程"
afterStreaming: {
case condition {
default { searching($output) | execute("summary.shire", $input, $output) }
}
}
---
[]: 这里写一些 CoT 相关的指令

这里定义了一个变量 placeholder,它的值是从所有 *.ja va 文件中检索“博客创建流程”的结果。默认情况下,embedding 的结果会存在内存中,所以在 afterStreaming 时可以直接拿来用。

afterStreaming 在 Streaming 完成后执行,这里用 searching 函数结合上一步的结果进行检索,最后把结果传给下一个流程。

步骤 2:使用 LLM 进行总结

第一步中,我们指定了下一个指令的名称为 summary.shire,传递了两个参数:$input$output。在这个流程里,可以直接使用这两个参数:

[]: 这里写一些 prompt
代码信息如下:
$output
用户的问题: $input

随后,Shire 会自动执行这个指令,把结果返回给用户——也就是问题的总结。

Shire RAG 工作流的实现

实现 Shire RAG 工作流可没那么简单。在人力有限的情况下,我们做了大量调研、试验和场景验证。我们调研了被广泛采用的编码 RAG 工具,尝试了不同的编码智能体实现方式,以探索更多可能性。

Shire RAG 技术栈

Shire RAG 工作流主要使用的技术栈如下:

  • 推理框架:ONNX Runtime

  • Embedding 模型:Sentence Transformers all-MiniLM-L6-v2

  • 相似度算法:Jaccard similarity(默认)

  • 数据存储:内存(默认)、本地文件(项目目录)、未来:SQLite

  • Tokenizer:HF Tokenizer

除了 RAG 部分,基于 NLP 与搜索的传统检索方式也支持,比如:

  • similarCode 变量:通过 Jaccard 等算法检索相似代码。

  • similarTestCase 变量:通过 TF-IDF 检索相似测试用例。

我们还在尝试把更多算法和技术集成到 Shire RAG 工作流中,提供更丰富的能力。

文档支持

基于我们构建的 LLM 开发框架 ChocoBuilder,现在可以支持:

  • Office 文档:docx, pptx, xlsx 文件

  • PDF 文档

  • 非二进制文件

  • IDE 支持语言代码文件

  • IDE 不支持语言代码文件

当然,现在版本的代码拆分机制还不够完善,后续版本会提供更多支持。

下一步

目前的版本只能满足一些简单需求,实际开发中还需要更多能力。后续版本会持续增强:

  • 支持更多存储方式,比如向量数据库。

  • 支持对结果重排,如 LIM、LLM Rerank 等。

  • 支持更多检索方式,如 BM25+、BM42 等。

  • ……

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc