太长不看版:在新版本(0.8)的 Shire 中,你可以通过 Shire 智能体市场,一键下载和安装多个智能体,并直接在你的当前项目中使用。与此同时,你还可以 将你的 Shire 代码段或者智能体上传到 Shire 智能体市场。
详细见视频:
WHY:AI 智能体应用于真实世界软件开发的挑战?
在软件开发中,确定性 是非常关键的,特别是在像实例化需求、格式化测试用例等环节,开发人员需要完全可控、精确的结果。然而,生成式 AI 的特点是不确定性带来的"创新"。受限于此,当前 AI 辅助研发的主要场景还是在补全代码、生成注释等有一定确定性的场景。
在其他更复杂或更精确的开发环节中,AI 智能体的自动化能力尚未成熟,通常仍需要大量的人工干预。这表明,若要真正提高软件开发的效率, 开发人员需要引入更多类型的智能体,以适应不同的场景需求,从而覆盖各种开发任务。
软件工程不是纸上谈兵
在应用 AI 辅助研发时,通过会分为两类场景考虑:新功能开发与现有功能维护。新功能开发通常是从 0 开始,而现有功能维护则需要考虑到现有代码库、 现有代码风格等。在我们构建各种智能体原型时,通常会从新功能开发开始 PoC。
哪怕是全新功能,现实中的 AI 辅助研发,远比简单的"AI 自动生成 API"的设想要复杂。常见的误解是:生成一个 API 只需要 AI 生成一个 prompt 即可完成。在实际的软件开发过程中, 完成一个 API 开发到上线通常需要经过 10 个步骤,或者由 10 个不同的智能体来协同完成。(详细等我们下篇文章 详细介绍)。
每个步骤背后可能涉及不同的团队、工具与资源,诸如于:API 设计规范、数据库结构、mock 服务、单元测试、API 测试等。实现一个 API 的自动化开发, 需要考虑到这些步骤的协同与整合。
团队固有开发范式
再回到软件开发的现实场景,每个团队受限于团队能力变迁以及历史的遗留问题,都有自己的开发范式。再受限于组织的历史规范与线上问题影响,在一个团队中, 可能会有多种开发范式并存:
-
旧的系统中,API 永远只返回 200 状态码,成功与失败通过返回值区分。
-
不旧不新的系统中,API 可能不能用
delete
方法,只能用post
方法。 -
新的系统中,API 通过返回状态码来区分成功与失败。
除此,不同的团队可能有不同的开发范式:有的团队更倾向于敏捷开发,快速迭代;有的团队则更加注重严格的需求分析和架构设计。你可能在 A、 B 团队之间需要一个 API 文档、 API 契约作为 mock 服务来作为中间层,而在 C 团队中,你可能 API 的提供者和消费者都是你自己,所以你并不需要详细的 API 文档、mock 服务等。
在这种情况下,未贴合企业实际需求的碎片化工具大量存在各个团队中,并且难以协同。碎片化的工具不仅会存在大量重复劳动,还会使得 AI 平台或者工具束之高阁, 无法发挥最大的价值。那么,我们应该如何去打通这些壁垒呢?
WHAT:集体智慧 Copilot = Team + AI + IDE
集体智慧 Copilot 的核心是通过 AI 与开发团队深度结合,实现一种团队与 AI 智能体共同合作的编程体验。IDE 不再只是一个被动的代码编写环境,而是一个智能体之间协同工作的平台。
集体智慧 IDE 是将开发团队的协作模式与 AI 紧密结合,使开发者与 AI 形成一种双向学习、协同合作的关系。这种关系不仅仅是单向的自动化工具使用,而是把 AI 当作一个动态的、不断学习和成长的团队成员。AI 的职责不再只是自动化代码生成或测试,而是通过协作的方式,促进团队整体能力的提升。
团队如何分享智慧?
通过观察大量团队的开发过程,我们发现:团队整体能力往往受到精英开发者与普通开发者之间能力差距的制约。
团队的集体智慧往往体现在资深开发者的经验积累和知识共享机制中。通过经验丰富的成员与普通开发者之间的交流,知识得以在团队中传递。然而, 这种机制存在局限性:知识传递的效率可能不高,特别是在复杂或大规模项目中,个别开发者的知识可能被封闭在小组中,难以在整个团队中流动。在现有的开发模式之下,我们往往会通过:
-
技术分享会议,来分享优秀的团队成员的经验。
-
代码评审、代码规范等方式,来提高团队整体代码质量。
-
代码库、文档库等方式,来提高团队整体知识共享。
-
代码生成工具、代码模板等方式,来提高团队整体开发效率。
而如果 AI 将上述的行为自动化之后,我们可能会失去这些优势。又或者是,我们可以考虑将 AI 作为一个团队成员,来协同工作,将大量的团队经验赋予 AI?
辅助团队核心:隐性知识的显性化
当我们开始构建 Team AI 这一类的工具时,我们做的大部分工作知识管理,诸如于将隐性知识 转化为显性知识。
显性知识 是团队中明确文档化或口头传授的知识,如代码规范、最佳实践等,通常我们会通过代码库、文档库等方式来传递。在 AI 辅助研发的当前阶段, 大量的组织热衷于通过构建知识库 + 问答机器人的方式来传递显性知识。
隐性知识是团队中没有明确文档化或口头传授的经验、技巧和决策逻辑。这种知识通常隐藏在资深开发者的脑海中,或者潜伏在代码的历史和修订记录中。在结合 AI 辅助编程的过程中,我们发现:AI 的提示词往往是隐性知识的显性化。即通过 AI 的提示词,我们将隐性知识转化为显性知识,诸如于各类约定俗成的 模式、最佳实践等。这种显性化的过程,不仅可以帮助团队成员更好地理解代码,还可以帮助团队成员更好地学习、成长。
集体智慧 Copilot
因此,当团队以上述的方式来分享智慧,并将其结合到 IDE 里时,它就变成了一个集体智慧 IDE。你可以在这个 IDE 里:
-
通过远程智能体来获取团队的显性知识,如代码规范、最佳实践等。
-
通过本地智能体来获取代码库中的隐性知识,如代码历史、代码风格等。
-
基于团队的流程、规范,来编写生成代码、生成测试用例等智能体。
-
通过智能体市场,来下载、安装、使用团队的智能体。
通过将团队的知识与代码库、团队上下文等紧密结合,我们可以实现更高效的软件开发。
HOW:如何实现集体智慧 Copilot?
在 IDE 中实现集体智慧 Copilot,我们可以通过 Prompt 即代码的方式来实现,将团队的知识、经验、规范等转化为 prompt,再通过 AI 智能体来执行。Shire 便可以作为一个实现集体智慧 Copilot 的工具。
Shire 是一个简便 AI 编码智能体语言,它能够让大型语言模型(LLM)与控制集成开发环境(IDE)之间自由对话,以实现自动化编程。安装方式:在 IDE 中安装 Shire 插件,即可开始使用 Shire。
方式 1:Prompt 即代码
举个例子,假设我们有一个智能体,用于 Swagger API 文档生成。那么,我们可以通过 Shire 代码来定义这个智能体的功能:
go
---
name: "Swagger Doc to Yaml"
variables:
"code": /any/ { cat($input) }
onStreamingEnd: { parseCode | saveFile($input, $output) }
---
为如下的代码,生成 Swagger Doc。不修改任务代码,只添加对应的注解。
文件路径:$input
代码:$code
只返回最后的代码,方便我使用。
我们只需要定义好这个智能体的功能,将其存储到代码库中,便可以提供给团队成员使用。
方式 2:Shire 智能体市场
Shire 智能体市场本质是利用 Shire 抽象 IDE 的底层能力 ,将与 IDE 交互、软件开发的操作,提取为一个个原子能力,诸如于:函数、变量、代码模型等。随后,再让用户通过 Shire 代码来组织这些原子能力,以实现对应的功能。最后,用户可以将这些 Shire 代码上传到 Shire 智能体市场,以供他人下载、安装、使用。
用户只需要在 Shire 智能体市场中,选择对应的智能体,点击安装,便可以直接在 IDE 中使用。诸如于,用户可以选择"API 设计、生成与文档"这个智能体包, 便可以直接在 IDE 中使用这这些智能体。
其它 Shire 新功能
在新版本(0.8)的 Shire 中,你还将体会到:
-
model
参数,用于在 Shire 代码中指定模型的名称,以支持多模型的调用。详细见:https://shire.phodal.com/shire/shire-env.html 。 -
beforeStreaming
生命周期钩子,用于启动应用或者 mock 服务。 -
Git 函数:
commit
、push
用于支持 Git 操作。
新的函数:
-
mock
函数,用于与 WireMock 集成,以支持 Mock 服务的启动。 -
execute
函数,现在可以直接运行 Gradle 任务、Python 脚本、Shell 脚本等。 -
batch
函数,用于批量执行多个 Shire 代码,可以用于批量添加注释等。
新语言支持:JavaScript、Go 的语言语法树(PsiVariable)解析支持。
总结
AI + IDE 是当前前沿的热门趋势,人们对于 GitHub Copilot、Cursor、Tabnine 等工具来提高开发效率,已经达成了共识。但是,这些工具的局限性在于:无法满足不同团队、不同项目的需求。我们在过去的一年多时间里,一直在探索合适的方式来让 AI 与团队协同工作,以实现更高效的软件开发。
在我们构建 AutoDev 时,是个人都想修改 AutoDev 的 prompt。即便,我们不断开放出 AutoDev 的能力,过于灵活也会使得 AutoDev 变得不堪重负。因此,我们希望通过 Shire 智能体市场,让用户可以自由地选择、安装、使用智能体,以实现集体智慧 IDE 的目标。