Shire 编码智能体语言:打造最强专属 AI 编程助手
大模型开发/技术交流
- LLM
9月20日193看过
TL;DR:
Shire 提供了一种简便 AI 编码智能体语言,能够让大型语言模型(LLM)与控制集成开发环境(IDE)之间自由对话,以实现自动化编程。
在 Intellij Marketplace 上搜索 Shire,或者在 GitHub 上下载与安装最新版本。
-
GitHub:github.com/phodal/shir…
-
Demo 视频:www.bilibili.com/video/BV1Lf…
PS:由于,当前版本(0.4.2)支持本地的自定义 RAG 能力,内置本地的 embedding 模型,因此还需要 Onnx Runtime、HF Tokenizer,因此在体积上会比较大。
为什么需要 Shire 智能体语言?
在 AutoDev 中,我们提供了一系列丰富的自定义能力,以支持开发人员自定义自己的指令,但是受限于框架限制,开发人员的自定义能力还是不够。
同时,我们还引入了 DevIns 语言,以支持开发人员更好地自定义自己的 AI 指令。而随后,我们会发现仅仅是这样, 还不足以满足开发人员的日常需求。
1. 辅助研发需求的多样性
AI 软件研发效能提升并不是一件容易的事情,在过去的一年多里,我们做了非常多的尝试。从端到端 AI 辅助研发的开源 Unit Mesh
方案,再到目前 国内最好的开源 AI 驱动编程插件 AutoDev。在这个过程中,我们发现了一些非常有意思的点,诸如于,开发人员需要一个适合自己合适的
AI IDE, 而不是一个通用的 AI IDE。
-
特别领域代码生成。你需要结合 RAG 来生成包含领域知识的代码,而非简单的补充。
-
文档实时更新。你需要 AI 来帮你更好生成整个项目的文档,而不仅仅是当前的代码片段注释。
-
辅助架构分析。你需要结合代码库的 AST 来生成更好的架构分析报告,而不是自己去分析。
还有大量的其它类似的需求,通过现有的 AI IDE 是无法满足的。
2. 文本数据的多样性
在完成自定义任务时,我们所需要的文本数据是丰富多样的。如在 AutoDev 中,用户可以从 IDE 中获取当前的文件、当前的代码片段、当前的选择、当前的光标位置等等。
但是依旧存在一些问题:
-
缺少简单的文本处理逻辑。你可能只需要数据的一部分,而不是整个代码段或者文件作为上下文。
-
更多的数据信息。你并不能获取到更多的数据,比如,你无法获取到当前的文件的 AST、你无法获取到当前的文件的语法树、你无法获取到当前的文件的类型等等。
-
知识检索以提取关键信息。甚至于,由于你的代码库太大,生成单个 prompt 容易超过上下文,你需要做一些检索,以获取到你所需要的数据。这些都是当前IDE 所不能满足的。
如何通过一些简单的方式,以让用户能处理这些文本是我们所需要解决的问题。
3. 数据获取的复杂性
虽然,你可能有更种强烈的需求,但是你的 IDE 接口知识限制了你的能力。哪怕现在的生成式 AI 能力非常强大,但是你提不到一个好的问题,你也无法得到一个好的答案。
诸如于,你不知道 IDE 领域的知识,RAG 无法发挥作用,需要大量的对话来增强你的知识库。 然后,你还需要去开发一个 IDE
插件,去获取所需的文本数据,然后再去调用 AI 模型,这个过程是非常复杂的。
那么,我们能不能简化这个过程呢?
4. 其它
其实上面都不重要,重点是,我手痒,想写一个新的东西。
Shire
Shire 提供了一种简便 AI 编码智能体语言,能够让大型语言模型(LLM)与控制集成开发环境(IDE)之间自由对话,以实现自动化编程。
简单来说,你可以通过 Shire 去:
-
调用封装的 IDE API,以生成 prompt 所需的数据。在 Shire 中,数据在 prompt 中以变量的形式存在。
-
定义在 IDE 中的行为,如何触发、如何执行,以及如何处理结果。
-
定义简单的数据流处理,如何处理数据、如何存储数据。
因此,你可以通过 Shire 作为中间语言,访问自己的 IDE 数据,生成与 AI 模型对话的 prompt,以实现自动化编程。
Shire 设计原则
结合先前的 AutoDev 开发经验,为了让开发人员更好地使用 AI IDE,我们定义了一些设计原则:
-
原则 1:IDE 即上下文环境。围绕这一原则,去分解 IDE 的能力,对应有三个实现:上下文感知变量化、模式-动作上下文构建、AST 查询语言。
-
原则 2:语言即抽象接口。我们使用领域特定语言(DSL)来让开发人员定义 IDE 交互,同时自然语言作为 LLM 接口使用。
-
原则 3:原子功能单元。即将复杂系统分解为独立且功能明确的最小操作单元。这种设计原则受到 Linux 设计思想的启发,强调模块化、独立性和简洁性。
详细的设计原则说明见:shire.phodal.com/design-prin…
Shire 示例
先让我们再看一个简单的代码示例:
---name: "On Streaming Done 文档更新"actionLocation: ContextMenuinteraction: RunPanelonStreamingEnd: { saveFile("docs/lifecycle/on-streaming-done.md") }---根据如下当前的最新代码,更新现有的文档:/file:ContextVariable.kt
在这个示例中,我们定义了一个 AI 指令,以用于更新文档。在这个 AI 指令中,我们将通过
file
指令来获取当前的文件,然后转换为
LLM 的 prompt,
再交由 AI 模型来生成文档。最后,我们在
onStreamingEnd
里定义了,将文档保存到
docs/lifecycle/on-streaming-done.md
文件中。
当然了,你还可以定义更多复杂的 AI 指令,诸如于:
-
定义
selectionStrategy
,定义如何选择当前的代码片段。 -
定义触发条件
when
,以定义何时在菜单上显示。 -
定义
afterStreaming
,以在当前任务结束后,执行任务的决策,路由到不同的任务。
Shire 将如何帮助你设计专属 AI IDE 呢?
1. AI 武装的 IDE
通过上面的示例,你可以看到 Shire 的基本能力,通过编写 Shire 代码,你可以结合 IDE 定义自己的 AI 指令。并将它们组织到一起,如下目录所示:
.shire├── autotest.shire├── commit-message.shire├── javadoc.shire├── quick-input.shire├── refactoring-code.shire├── search│ └── TextSearch.shire├── terminal.shire├── workflow│ ├── custom-agent.shire│ └── lifecycle-streaming-end.shire└── write-doc.shire
在
.shire
目录中,你可以管理你的所有 AI 指令,以及定义它们的行为。
更详细的信息,可以参考我们的示例项目:github.com/shire-lang/…
2. 结合研发 AI Agent 打造端到端自动化
与 AutoDev 相似,我们在 Shire 中也提供了 AI Agent 的能力。你只需要在项目中创建一个
xxx.shireCustomAgent.json
,就可以在
Shire 代码中
调用它。
[{"name": "内部 API 集成","description": "生成 API 信息","url": "http://127.0.0.1:8765/api/agent/api-market","responseAction": "Direct"}]
通过结合 AI Agent,你可以实现更多的自动化任务,如:自动化编写需求,自动化生成文档,自动化生成代码等等。同时,结合 Shire 的能力,你可以在执行 完当前 Shire 任务后,再执行新的 Shire 任务。
---afterStreaming: {condition {"error" { output.length < 1 }"json-result" { jsonpath("${'$'}.store.*") }}case condition {"error" { notify("Failed to Generate JSON") }"json-result" { execute("sample.shire") } /* go to execute sample.shire */default { notify("Failed to Generate JSON") /* mean nothing */ }}}---
更详细的文档可以参考:shire.phodal.com/workflow/re…
3. 本地 RAG
在 Shire 中,我们提供了本地 RAG 的能力,你可以通过简单的配置,来使用本地的 RAG 模型,作为问答知识库的一部分。示例如下:
---name: "Search"variables:"testTemplate": /.*.java/ { caching("disk") | splitting | embedding | searching("comment") }---根据如下的代码,回答用户的问题:博客创建的流程$testTemplate
在这个示例中,我们定义了一个变量
testTemplate
,它的值是从所有 *.java
文件中检索 comment
的结果。在这个定义中,我们使用了一系列的操作符,
如
caching
、splitting
、embedding
、searching
,最后我们将结果返回给用户。除了代码外,你还可以将文本文件、pdf、docx
等文件作为输入,以获取更多的信息。更详细的文档可以参考:
。
总结
GitHub:github.com/phodal/shir…
Shire 智能体语言通过简便的 DSL 和设计原则,为开发人员提供了强大的自定义能力,使得大型语言模型(LLM)能够与控制集成开发环境(IDE)之间自由对话,实现了自动化编程。Shire 的设计初衷是为了满足多样化的研发需求、处理复杂的数据获取以及简化开发流程。通过 Shire,开发人员可以设计专属的 AIIDE,实现端到端的自动化,提升研发效能。Shire 将成为你打造高效、智能化开发环境的得力助手。
————————————————
版权声明:本文为稀土掘金博主「Phodal」的原创文章
原文链接:https://juejin.cn/post/7395593543961591847
如有侵权,请联系千帆社区进行删除
评论