当前位置: 首页 > news >正文

Shire 智能体市场:IDE 一键安装多智能体,协同打造集体智慧 Copilot

太长不看版:在新版本(0.8)的 Shire 中,你可以通过 Shire 智能体市场,一键下载和安装多个智能体,并直接在你的当前项目中使用。与此同时,你还可以 将你的 Shire 代码段或者智能体上传到 Shire 智能体市场。

详细见视频:

WHY:AI 智能体应用于真实世界软件开发的挑战?

在软件开发中,确定性是非常关键的,特别是在像实例化需求、格式化测试用例等环节,开发人员需要完全可控、精确的结果。然而,生成式 AI 的特点是不确定性带来的”创新“。受限于此,当前 AI 辅助研发的主要场景还是在补全代码、生成注释等有一定确定性的场景。

在其他更复杂或更精确的开发环节中,AI 智能体的自动化能力尚未成熟,通常仍需要大量的人工干预。这表明,若要真正提高软件开发的效率, 开发人员需要引入更多类型的智能体,以适应不同的场景需求,从而覆盖各种开发任务。

软件工程不是纸上谈兵

d194799d47cc471d62c49a96e89e46f8.png

在应用 AI 辅助研发时,通过会分为两类场景考虑:新功能开发与现有功能维护。新功能开发通常是从 0 开始,而现有功能维护则需要考虑到现有代码库、 现有代码风格等。在我们构建各种智能体原型时,通常会从新功能开发开始 PoC。

哪怕是全新功能,现实中的 AI 辅助研发,远比简单的“AI 自动生成 API”的设想要复杂。常见的误解是:生成一个 API 只需要 AI 生成一个 prompt 即可完成。在实际的软件开发过程中, 完成一个 API 开发到上线通常需要经过 10 个步骤,或者由 10 个不同的智能体来协同完成。(详细等我们下篇文章 详细介绍)。

每个步骤背后可能涉及不同的团队、工具与资源,诸如于:API 设计规范、数据库结构、mock 服务、单元测试、API 测试等。实现一个 API 的自动化开发, 需要考虑到这些步骤的协同与整合。

团队固有开发范式

7ae7d6b34701ecd0e8d3e17333750af6.png

再回到软件开发的现实场景,每个团队受限于团队能力变迁以及历史的遗留问题,都有自己的开发范式。再受限于组织的历史规范与线上问题影响,在一个团队中, 可能会有多种开发范式并存:

  • 旧的系统中,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 的职责不再只是自动化代码生成或测试,而是通过协作的方式,促进团队整体能力的提升。

团队如何分享智慧?

ae053824adb7249a5f94750793e0c941.jpeg

通过观察大量团队的开发过程,我们发现:团队整体能力往往受到精英开发者与普通开发者之间能力差距的制约。

团队的集体智慧往往体现在资深开发者的经验积累和知识共享机制中。通过经验丰富的成员与普通开发者之间的交流,知识得以在团队中传递。然而, 这种机制存在局限性:知识传递的效率可能不高,特别是在复杂或大规模项目中,个别开发者的知识可能被封闭在小组中,难以在整个团队中流动。在现有的开发模式之下,我们往往会通过:

  • 技术分享会议,来分享优秀的团队成员的经验。

  • 代码评审、代码规范等方式,来提高团队整体代码质量。

  • 代码库、文档库等方式,来提高团队整体知识共享。

  • 代码生成工具、代码模板等方式,来提高团队整体开发效率。

而如果 AI 将上述的行为自动化之后,我们可能会失去这些优势。又或者是,我们可以考虑将 AI 作为一个团队成员,来协同工作,将大量的团队经验赋予 AI?

辅助团队核心:隐性知识的显性化

当我们开始构建 Team AI 这一类的工具时,我们做的大部分工作知识管理,诸如于将隐性知识转化为显性知识

0aae7b1dd8b3034496fed428fb5e1a0e.jpeg

显性知识是团队中明确文档化或口头传授的知识,如代码规范、最佳实践等,通常我们会通过代码库、文档库等方式来传递。在 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 代码来定义这个智能体的功能:

---
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 智能体市场,以供他人下载、安装、使用。

34303cb01cac65ac7a1a6237c2690362.png

用户只需要在 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 的目标。

相关文章:

Shire 智能体市场:IDE 一键安装多智能体,协同打造集体智慧 Copilot

太长不看版:在新版本(0.8)的 Shire 中,你可以通过 Shire 智能体市场,一键下载和安装多个智能体,并直接在你的当前项目中使用。与此同时,你还可以 将你的 Shire 代码段或者智能体上传到 Shire 智…...

机器学习笔记(一)初识机器学习

1.定义 机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式,并将现有内容进行知识结构划分来有效提高学习效率。 机器学习有…...

linux如何查看当前的目录所在位置

在Linux系统中,查看当前目录所在位置的常用命令是 pwd,它代表 "print working directory"(打印工作目录)。当你在终端中输入 pwd 并按下回车键时,它会显示当前所在的完整路径。 打开终端,然后输…...

【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!7000字长文,希望本文内容能够帮助到你! 目录 一:创建线程五种方式 方式一:继承Thread类,…...

[Python数据可视化] Plotly:交互式数据可视化的强大工具

引言: 在数据分析和可视化的世界中,Plotly 是一颗耀眼的明星。它是一个开源的交互式图表库,支持多种编程语言,包括 Python、R 和 JavaScript。Plotly 的强大之处在于它能够创建出既美观又具有高度交互性的图表,使得数据…...

Excel--DATEDIF函数的用法及参数含义

DATEDIF函数的用法为: DATEDIF(start_date,end_date,unit),start_date表示的是起始时间,end_date表示的是结束时间。unit表示的是返回的时间代码,是天、月、年等。如下: Datedif函数的参数含义unit参数返回值的意义"y"两个时间段之间的整年数…...

执行网络攻击模拟的 7 个步骤

在进攻和防守策略方面,我们可以从足球队和美式足球队身上学到很多东西。球员们会分析对方球队的策略,找出弱点,相应地调整进攻策略,最重要的是,练习、练习、再练习。作为最低要求,网络安全部门也应该这样做…...

技术成神之路:设计模式(十四)享元模式

介绍 享元模式(Flyweight Pattern)是一种结构性设计模式,旨在通过共享对象来有效地支持大量细粒度的对象。 1.定义 享元模式通过将对象状态分为内部状态(可以共享)和外部状态(不可共享)&#xf…...

使用systemctl实现开机自启动jar包

目录 1. 创建服务文件2. 配置服务文件3. 重新加载 systemd 配置4. 启动服务5. 查看服务状态 1. 创建服务文件 创建服务文件: 在 /etc/systemd/system/ 目录下创建一个新的服务文件 myapp.service。 sudo vim /etc/systemd/system/myapp.service2. 配置服务文件 按i…...

2024.9.20营养小题【2】(动态分配二维数组)

这道题里边涉及到了动态分配二维数组的知识点,不刷这道题我也不知道这个知识点,算是一个比较进阶一点的知识点了。 参考:C语言程序设计_动态分配二维数组_哔哩哔哩_bilibili【C/C 数据结构 】二维数组结构解析 - 知乎 (zhihu.com)...

前端web端项目运行的时候没有ip访问地址

我们发现 没有netWork 的地址 导致 团队内其他同学无法打开我们的地址 进行访问 在page.json 中的运行 指令中 添加 --host 记得加上空格 这样我们就可以看到这个地址了 团队其他同学 就可以访问我们这个地址了...

微服务架构陷阱与挑战

微服务架构6大陷阱 现在微服务的基础设施还是越来越完善了,现在基础设施缺乏的问题逐渐被解决了。 拆分粒度太细,服务关系复杂 拆分降低了服务的内部复杂度,但是提升了系统的外部复杂度,服务越多,服务和服务之间的连接…...

react的事件绑定

文章目录 基本示例使用箭头函数事件对象阻止默认行为绑定事件处理函数的上下文 在 React 中,事件绑定主要通过 JSX 属性来实现。事件处理函数被传递给相应的事件属性,例如 onClick、onChange 等。这些属性会被绑定到 HTML 元素上,并在事件发生…...

ASP.NET Core 入门教学二十九 DDD设计

在软件开发中,领域驱动设计(Domain-Driven Design,简称DDD)是一种重要的软件设计方法论,它强调通过深入理解业务领域来构建高质量的软件系统。DDD的核心思想是将复杂的业务逻辑集中在领域模型中,并通过分层…...

Rocprofiler测试

Rocprofiler测试 一.参考链接二.测试过程1.登录服务器2.使用smi获取列表3.使用rocminfo获取Agent信息4.准备测试用例5.The hardware counters are called the basic counters6.The derived metrics are defined on top of the basic counters using mathematical expression7.P…...

基于python flask的高血压疾病预测分析与可视化系统的设计与实现,使用随机森林、决策树、逻辑回归、xgboost等机器学习库预测

研究背景 随着现代社会的快速发展,生活方式的改变和人口老龄化的加剧,心血管疾病,尤其是高血压,已成为全球范围内的重大公共健康问题。高血压是一种常见的慢性疾病,其主要特征是动脉血压持续升高。长期不控制的高血压…...

Lombok 与 EasyExcel 兼容性问题解析及建议

在 Java 开发中,Lombok 被广泛用于减少样板代码,如 Getter、Setter、构造函数等。然而,在与像 EasyExcel 这样依赖反射机制的库一起使用时,可能会遇到一些意想不到的问题。本文将深入探讨 Lombok 与 EasyExcel 之间的兼容性问题&a…...

Kubeadm快速安装 Kubernetes集群

1. Kubernetes简介 Kubernetes(k8s)是谷歌开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它具有以下特点: 开源容器化自动部署扩展高可用 2. Kubernetes架构 Kubernetes遵循主从式架构设计,主要分…...

OpenJudge | 八皇后问题

总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。 输入 无输入。 输出 按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。 样例输入 (null)样例输出 No. 1 …...

C#往压缩包Zip文件的文件追加数据

C#往压缩包Zip文件的文件追加数据 往一个已经压缩好的压缩包里追加数据,一般就有两种方式,一种是前面已经学习过的,就是追加一个新的文件, 另外一种就是往已经存在的文件追加数据。 往已经存在的文件追加数据,需要先找到文件索引。 在压缩包里声明的名称,与外面的文件路…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...