ACP 使用教程
本教程将指导你如何在 AutoDev 中使用 ACP 代理进行日常开发工作。
基础使用
1. 连接到代理
方式 A: 自动连接
如果已配置默认代理,打开 ACP 面板即可自动连接:
- 打开 IntelliJ IDEA
- 打开 AutoDev 工具窗口(通常在右侧或底部)
- 切换到 ACP 标签
- 代理会自动连接(显示为"已连接"状态)
方式 B: 手动选择
- 在 ACP 面板中,点击代理下拉列表
- 选择想要使用的代理(如 "OpenCode")
- 点击 连接 按钮
- 等待连接成功(通常 2-5 秒)
2. 发送提示
连接成功后,在输入框中输入你的问题或任务:
基础示例:
- 解释这个函数的功能
- 这段代码有什么问题?
- 如何优化这个算法?
按 Enter 或点击发送按钮提交。
3. 查看响应
代理的响应会实时显示在聊天区域,包括:
- 💭 思考过程: 代理的分析思路
- 🔧 工具调用: 代理执行的操作(读取文件、运行命令等)
- 💬 回复内容: 最终的答案或建议
- ✅ 完成状态: 任务完成情况
常见使用场景
场景 1: 代码解释
任务: 理解复杂代码
示例提示:
@文件名.kt 这个文件的主要功能是什么?
它如何与其他模块交互?
代理操作:
- 读取指定文件
- 分析代码结构
- 解释主要逻辑
- 指出关键交互点
场景 2: Bug 调试
任务: 找出代码问题
示例提示:
这段代码在并发情况下会有问题吗?
@IdeaAcpAgentViewModel.kt:260-280
代理操作:
- 读取指定代码段
- 分析并发安全性
- 指出潜在的竞态条件
- 提供修复建议
场景 3: 代码重构
任务: 改进代码质量
示例提示:
重构这个函数以提高可读性和可维护性:
@parseEnvLines
代理操作:
- 读取函数代码
- 识别可改进点
- 提供重构方案
- 可能直接修改代码(需要权限确认)
场景 4: 测试生成
任务: 创建单元测试
示例提示:
为 IdeaAcpAgentPreset 类生成完整的单元测试,
包括边界情况和异常处理
代理操作:
- 读取类定义
- 分析公共方法
- 生成测试用例
- 创建测试文件(需要权限确认)
场景 5: 文档生成
任务: 生成 API 文档
示例提示:
为 AcpAgentProcessManager 类生成详细的 KDoc 文档,
包括使用示例
代理操作:
- 读取类代码
- 分析方法签名
- 生成文档注释
- 添加使用示例
场景 6: 代码搜索
任务: 在项目中查找特定模式
示例提示:
找出项目中所有使用 coroutineScope.launch 的地方,
并检查是否正确处理了异常
代理操作:
- 搜索代码库
- 分析每个使用位置
- 检查异常处理
- 提供改进建议
高级技巧
1. 使用 @ 引用
引用文件
@src/main/kotlin/MyClass.kt 这个文件的设计模式是什么?
引用特定行
@MyClass.kt:100-150 这段代码可以简化吗?
引用多个文件
比较以下两个文件的实现差异:
@FileA.kt
@FileB.kt
2. 多轮对话
代理会记住对话上下文,支持连续交互:
第一轮:
用户: "分析这个函数的时间复杂度"
代理: "这个函数的时间复杂度是 O(n²),主要是因为嵌套循环..."
第二轮:
用户: "如何优化到 O(n)?"
代理: "可以使用哈希表来优化,具体方法是..."
第三轮:
用户: "帮我实现这个优化"
代理: [修改代码]
3. 组合命令
结合多个任务:
请完成以下任务:
1. 分析 @UserService.kt 的代码质量
2. 找出潜在的性能问题
3. 生成优化方案
4. 为关键方法添加单元测试
4. 使用项目上下文
代理会自动了解项目结构:
根据项目的现有架构,
为用户模块添加一个新的权限管理功能
5. 请求特定格式
指定输出格式:
以 Markdown 表格形式列出这个类的所有方法及其用途
权限管理
权限类型
代理可能请求以下权限:
| 操作类型 | 示例 | 风险级别 |
|---|---|---|
| 读取文件 | 查看代码 | 低 |
| 写入文件 | 修改代码 | 中 |
| 执行命令 | 运行测试 | 高 |
| 删除文件 | 清理临时文件 | 高 |
权限选项
当代理请求权限时,你可以选择:
- Allow Once: 仅允许此次操作
- Allow Always: 始终允许此类操作(此会话内)
- Reject Once: 拒绝此次操作
- Reject Always: 始终拒绝此类操作
推荐策略
✅ 读取文件: Allow Always
✅ 写入文件: Allow Once (仔细审查后可改为 Always)
⚠️ 执行命令: Allow Once (每次审查)
❌ 删除文件: 仔细审查,必要时 Allow Once
撤销权限
如果误操作:
- 断开并重新连接代理
- 或重启 IDE
- 权限设置不会持久化到下次会话
性能优化
1. 预热连接
首次连接后,代理进程保持活动状态,后续使用更快:
首次连接: 3-5 秒
后续使用: < 1 秒
2. 限制上下文大小
对于大型项目,精确指定范围:
❌ 不推荐: "分析整个项目的代码质量"
✅ 推荐: "分析 src/main/kotlin/agent/ 目录的代码质量"
3. 使用增量查询
将大任务分解为小步骤:
第一步: "分析当前文件的主要功能"
第二步: "找出最复杂的方法"
第三步: "重构该方法"
4. 清理会话
长时间使用后,断开重连以清理上下文:
// 在 UI 中点击 "断开连接" 然后重新连接
调试技巧
查看详细日志
-
启用详细日志:
- Help → Diagnostic Tools → Debug Log Settings
- 添加:
#cc.unitmesh.devins.idea.toolwindow.acp
-
查看日志:
tail -f ~/.autodev/logs/autodev-app.log
检查进程状态
# 查看 ACP 代理进程
ps aux | grep opencode
# 检查端口占用(如果使用网络通信)
lsof -i :9999
测试 ACP 协议
# 手动测试代理响应
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' | opencode acp
查看 stderr 输出
在 ACP 面板底部可以看到代理的 stderr 输出,包含:
- 启动信息
- 错误消息
- 调试日志
最佳实践
1. 提示词编写
清晰具体:
❌ "改进这个"
✅ "重构 UserService.kt 中的 validateUser 方法,提取重复逻辑到单独的函数"
提供上下文:
❌ "修复这个 bug"
✅ "修复 UserService.kt:150 的 NullPointerException,
当 user.profile 为 null 时发生"
分步骤:
❌ "完全重构这个模块"
✅ "先分析模块结构,然后提出重构方案,最后逐个文件实施"
2. 代码审查工作流
1. 打开需要审查的文件
2. 向代理提问: "审查这个文件,关注安全性、性能和可维护性"
3. 代理提供分析报告
4. 针对具体问题继续提问
5. 让代理提供修复建议或直接修改
3. 学习新代码库
1. "概述这个项目的架构"
2. "核心模块有哪些?它们如何交互?"
3. "带我了解用户认证的实现"
4. "这个项目使用了哪些设计模式?"
4. 增量开发
1. "为用户管理创建基本的领域模型"
2. "添加数据访问层"
3. "实现业务逻辑"
4. "添加 API 端点"
5. "生成单元测试"
故障排除
问题 1: 代理无响应
症状: 发送消息后没有任何反应
解决方案:
- 检查连接状态(右上角指示器)
- 查看 stderr 输出是否有错误
- 断开重连
- 检查代理进程是否正在运行
问题 2: 响应中断
症状: 代理响应到一半停止
解决方案:
- 检查是否超时(默认 60 秒)
- 简化提示,减少工作量
- 检查网络连接(如果使用远程代理)
- 查看日志了解详细错误
问题 3: 权限对话框未显示
症状: 代理似乎卡住,没有弹出权限请求
解决方案:
- 检查是否有其他模态对话框遮挡
- 重启 IDE
- 检查日志是否有异常
- 尝试使用其他代理
问题 4: 代理不理解上下文
症状: 代理给出不相关的答案
解决方案:
- 使用 @ 显式引用文件
- 提供更多背景信息
- 分解任务为更小的步骤
- 断开重连以清除混乱的上下文
快捷键(可配置)
| 操作 | 默认快捷键 | 说明 |
|---|---|---|
| 发送消息 | Enter | 提交当前输入 |
| 换行 | Shift+Enter | 在输入框中换行 |
| 取消任务 | Esc | 停止当前代理任务 |
| 打开 ACP 面板 | 自定义 | 在设置中配置 |
与其他功能集成
与 DevIns 集成
在 DevIns 脚本中调用 ACP 代理:
/acp opencode "分析当前文件的复杂度"
与 MCP 集成
ACP 代理自动使用配置的 MCP 服务器:
mcpServers:
github:
command: "npx"
args: "@modelcontextprotocol/server-github"
代理可以直接访问 GitHub 数据。
与 Bridge 集成
通过 Bridge 使用远程 ACP 代理:
acpAgents:
"remote-opencode":
name: "Remote OpenCode"
url: "https://ai.company.com/acp"
下一步
- 学习如何开发自定义 ACP 代理
- 查看故障排除指南
- 阅读ACP 协议规范