如何在IntelliJ IDEA中通过ACP使用AI智能体
Agent Client Protocol (ACP) 在客户端(例如 IntelliJ IDEA)与智能体之间定义了一份通用契约。IntelliJ IDEA 已内置多个兼容 ACP 的智能体:Codex、Claude Agent 和 Junie。除这些内置选项外,ACP Registry 还提供了更多选择,团队也可以通过 acp.json 注册内部或未列出的智能体。
关键在于边界。IntelliJ IDEA 仍然是浏览项目、检查代码和审阅更改的环境。通过 ACP 连接,每个智能体都维护自己的模型、行为、身份验证和智能体端工具。
这使得可替换单元比 LLM 更大。一个兼容 ACP 的智能体包含模型周围的完整体系:其规划逻辑、工具、模型路由行为和可观测性。由于 ACP 标准化了 IDE 与智能体之间的边界,你可以平滑地将一个智能体替换为另一个,而无需改变 IntelliJ IDEA 的集成方式。
ACP 简介
ACP 常被描述为编码智能体的 LSP(语言服务器协议)。这个类比之所以成立,是因为集成问题非常相似。
在 LSP 出现之前,支持每种语言都需要编写单独的编辑器集成。LSP 用一份通用契约取代了这种矩阵式集成。
ACP 将同样的思路应用于编辑器或 IDE 与编码智能体之间的连接。任何兼容 ACP 的智能体都可以连接,而无需为每对组合开发专属插件或私有 API。
ACP 源于 JetBrains 与 Zed 的合作,从一开始 JetBrains IDE 和 Zed 都被定位为客户端。
对于本地智能体,IntelliJ IDEA 会启动一个子进程,并通过标准输入输出上的 JSON-RPC 与之通信。初始化期间,IDE 与智能体协商协议版本和功能。连接后,提示词流向智能体,而进度更新、文件操作和权限请求则返回 IDE。
智能体在共享契约下仍可以表现不同。初始化时,每个智能体都会声明其支持的可选功能。计划、模式、斜杠命令、会话加载、终端操作等功能可能因智能体而异。
ACP 承载 IntelliJ IDEA 与智能体之间的交互。额外的工具和上下文可以通过 MCP(Model Context Protocol)传递给智能体,包括用户配置的服务器和集成的 IntelliJ MCP 服务器。
从可用的智能体开始
IntelliJ IDEA 自带多个无需手动配置 ACP 的智能体,包括 Codex、Claude Agent 和 Junie。选择一个并描述你希望它处理的任务。
每个智能体都有自己的工作流风格,可能包括计划模式、斜杠命令或特定的身份验证流程。ACP 让 IntelliJ IDEA 通过共享契约承载这种交互,同时保留这些差异。
让智能体做一个小改动。它编辑文件后,AI Chat 会在对话中显示更改后的文件。点击它即可在编辑器旁的聊天气泡中打开 diff,并精确查看更改内容。
[LOADING...]
这个“编辑-审阅”循环是值得保留的部分。如果之后切换智能体,把这个循环保留在 IDE 内,可以避免你不得不移动项目或在单独工具中审阅更改。
从 ACP Registry 安装智能体
ACP Registry 包含其他兼容 ACP 的智能体,以及 IntelliJ IDEA 安装它们所需的元数据。
在 IntelliJ IDEA 中,打开 Settings | Tools | AI Assistant | Agents,然后从 registry 中选择一个智能体。当前 ACP 文档 描述了完整的安装流程。
[LOADING...]
智能体的配置视图还允许你公开 AI Assistant 中配置的 MCP 服务器、集成的 IntelliJ MCP 服务器,或两者都公开。
当你应用设置时,IntelliJ IDEA 会下载智能体文件。首次会话可能会要求你使用该智能体支持的方法进行身份验证。
Registry 还提供用于更新和卸载的元数据。这些操作仍保留在 Agents 设置中,因此添加智能体并不需要维护另一个 IDE 插件。
每个 registry 智能体都保留自己的许可证、服务、凭据和隐私条款。在授予仓库访问权限之前,请务必查看这些详细信息。
使用 acp.json 连接自定义智能体
Registry 智能体面向广泛分发。而内部智能体通常承担更窄的角色,应留在公司内部。
如果内部智能体实现了 ACP,请在 ~/.jetbrains/acp.json 中注册它。IntelliJ IDEA 提供了一个 Add Custom Agent 操作来创建并打开此文件,但你也可以直接编辑该文件。
下面的配置注册了一个假设的公司迁移智能体:
agent_servers 下的每个键都会成为智能体的显示名称。command 值必须包含 IntelliJ IDEA 将启动的可执行文件的完整路径。将激活该智能体 ACP 模式所需的参数放入 args;具体值请参阅该智能体的文档。
当进程需要环境变量时,使用 env。许多智能体期望你先通过其 CLI 进行身份验证,然后复用存储在智能体用户配置中的凭据。如果某个智能体通过 env 接受 API 密钥,请遵循其文档,并避免将文件或其密钥提交到仓库。
保存 acp.json,然后在 IntelliJ IDEA 中选择已配置的智能体。
如果机器上已经安装了任何兼容 ACP 的智能体,IDE 会检测到它们,并提供将其添加到配置中的选项。
为什么使用多个智能体?
团队可能希望针对不同类型的工作使用不同的智能体。ACP 为这些智能体提供了连接到 IntelliJ IDEA 的通用方式:
- 通过 `acp.json` 连接兼容 ACP 的智能体,可避免开发和维护单独的 IntelliJ IDEA 插件。
- 开发人员可选择适合当前工作的智能体,同时继续在 IntelliJ IDEA 中进行导航、编辑和 diff 审阅。
- 如果某个智能体的服务或模型提供商不可用,开发人员可以切换到另一个已配置的智能体,并在同一个 IntelliJ IDEA 项目中继续工作。
保留 IDE,选择智能体
使用 IntelliJ IDEA 中已有的智能体、从 ACP Registry 安装一个,或在 acp.json 中注册内部智能体。
ACP 将编码智能体从 IDE 的固定绑定转变为可随时重新选择的选项。