Grape 使用指导文档

Grape 是一个多 Agent 协作的 DevOps 平台,通过 VOD/Issue/Coding/QA/SRE 五类 Agent 覆盖从需求分析到部署运维的全生命周期。平台对接 GitCode 代码托管,通过 Webhook 自动触发流水线,由 AI Agent 自主完成任务并提交 PR。

核心概念
  • 仓库(Repo):GitCode 上的代码仓库,是所有任务的工作空间
  • Agent:AI 驱动的自主代理,按职责分为 VOD/Issue/Coding/QA/SRE 五类
  • 技能(Skill):Agent 的能力包,定义了执行特定任务的指令和工具
  • 运行时(Runtime):执行 Agent 的引擎实例(opencode/hermes/codearts),部署在 Worker 机器上
  • 流水线(Pipeline):Issue 从创建到关闭的全流程,Agent 按 VOD→Issue→Coding→QA→SRE 链路协作

2. 快速上手

2.1 登录与仓库选择

  1. 使用 GitCode 账号登录(OAuth 自动授权)
  2. 登录后在左侧选择已授权的仓库
  3. 选择仓库后进入工作台,顶部显示仓库名

2.2 创建第一个 Issue

  1. 在 GitCode 仓库中创建一个 Issue(如"开发一个 Hello World 页面")
  2. Grape 通过 Webhook 自动接收 Issue 事件并启动流水线
  3. 在 Grape 控制台的 流水线 页面可以看到 Issue 的处理进度
  4. VOD Agent 首先分析需求,然后 Issue Agent 细化任务,Coding Agent 编写代码并提交 PR
提示

也可以在 Grape 控制台的 VOD Agent 页面直接输入需求,手动触发处理流程。VOD Agent 会分析需求并自动路由到合适的下游 Agent。

2.3 查看任务进度

  • 任务中心:查看所有任务的执行状态(排队/运行中/已完成/失败)
  • 流水线:按 Issue 查看全链路进度,包含每个 Agent 的执行状态和结果
  • 系统监控:查看 Worker 负载、引擎健康状态、探活延迟
  • 点击任意任务可查看详细执行日志(Agent 每一步的思考过程和工具调用)

2.4 评审与合并 PR

Coding Agent 完成代码编写后会自动在 GitCode 创建 PR。你可以:

  1. 在 GitCode 上查看 PR 的代码变更
  2. QA Agent 会自动审查 PR 并给出评审意见
  3. 确认无误后在 GitCode 合并 PR
  4. Grape 会感知 PR 合并事件并更新 Issue 状态

3. DevOps Agent 详解

VOD VOD Agent — 需求分析

职责:接收用户需求(Issue 评论或直接输入),分析需求类型,路由到合适的下游 Agent。

触发方式:GitCode Issue 创建/评论事件,或控制台手动输入

典型场景

  • 用户创建 Issue "优化前端UI样式" → VOD 分析为开发类需求 → 路由到 Issue Agent
  • 用户创建 Issue "销毁云资源" → VOD 分析为运维类需求 → 路由到 SRE Agent
  • 用户在评论区补充需求 → VOD 重新分析并路由

ISSUE Issue Agent — 任务拆解

职责:将 VOD 分析后的需求细化为可执行的 Spec 文档,打标签、分配负责人,交办给 Coding/QA/SRE Agent。

输出:Issue 评论中的 Spec 文档(含技术方案、文件清单、验收标准)

CODING Coding Agent — 代码实现

职责:根据 Spec 文档编写代码,本地构建验证,自审查后提交 PR。

引擎:opencode 或 hermes(在 Worker 上执行)

工作目录/root/grape-workspaces/<owner>/<repo>/issues/<n>/coding

典型流程:克隆仓库 → 阅读项目知识基线 → 按需求编码 → 构建+测试 → 代码自审查 → 推送分支 → 创建 PR

QA QA Agent — 质量审查

职责:审查 Coding Agent 提交的 PR,检查代码质量、安全性、测试覆盖,给出 Approve/Request Changes 意见。

触发:PR 创建事件自动触发,或 Coding Agent 完成后 A2A 交办

SRE SRE Agent — 运维部署

职责:云资源管理(创建/查询/销毁)、CI/CD 配置、部署执行、故障排查。

能力:华为云 ECS/VPC/EIP/安全组/RDS/OBS 管理,Terraform IaC,部署脚本执行

安全机制:销毁类操作需用户在 Issue 评论区确认后才执行

4. 流水线机制

4.1 自动流水线

当 GitCode Issue 被创建时,Grape 自动启动流水线:

Issue 创建
  → VOD Agent 分析需求、判断类型
    → Issue Agent 细化 Spec、打标签
      → Coding Agent 编写代码、提交 PR
        → QA Agent 审查 PR
          → 等待维护者合并 PR
            → Issue 关闭(流水线完成)

4.2 A2A(Agent-to-Agent)通信

Agent 之间通过 A2A 事件传递上下文。例如 Issue Agent 完成后会产生 a2a_event,携带 Spec 上下文交给 Coding Agent。每次 A2A 交接都会在流水线中显示为一个节点。

4.3 手动触发

  • VOD Agent 页面输入需求文本,手动触发分析
  • 流水线 页面点击"重试"可重新执行失败的节点
  • 在 Issue 评论区 @bot 可以触发特定 Agent

5. 技能管理

5.1 官方技能

Grape 内置 60+ 官方技能(SKILL.md),涵盖代码审查、部署、监控、文档生成等场景。在 DevOps 技能 页面查看所有技能。

5.2 自定义技能

用户可以为仓库创建自定义技能:

  1. DevOps 技能 页面点击"创建技能"
  2. 编写 SKILL.md(包含触发条件、执行步骤、工具列表)
  3. 技能作用域:仓库级(仅当前仓库可用)或全局(所有仓库可用)
技能分发机制

技能文件存储在主服务器的 skills/ 目录(OBS 模式下同步到 OBS 桶)。Worker 执行任务时,技能文件随任务下发到工作区的 .skills/ 目录——Worker 不需要本地维护技能文件。

6. 运行时与引擎

6.1 引擎类型

引擎说明适用场景
opencodeOpenCode CLI,AI 编码助手Coding/Issue/QA Agent
hermesHermes Agent,支持 ACP 协议VOD/Chat/SRE Agent
codearts华为云 CodeArts CLI特定 CI/CD 场景

6.2 Worker 管理

  • Agent 运行时 页面查看所有 Worker 设备和引擎状态
  • 每个 Worker 可以运行多个引擎实例(如同时运行 opencode + hermes + codearts)
  • Worker 自动注册并定期心跳上报(CPU/内存/磁盘/探活结果)
  • 系统监控页面展示每个引擎的探活状态(CLI 测试对话延迟)

7. 系统监控

7.1 运维概览

系统监控 页面提供实时运维数据:

  • 任务队列深度(排队/运行中/已完成/失败)
  • 卡住检测(运行超过 22 分钟的任务预警)
  • Runtime 引擎负载(运行任务数/最大并发数)
  • 引擎探活(每 10 分钟 CLI 测试,显示延迟和状态)
  • Worker 设备健康(CPU/内存/磁盘/tmp 使用率)

7.2 引擎探活

系统每 10 分钟对每个引擎发起测试对话(如 opencode run "hello"),记录响应延迟和成功/失败状态。探活结果在 Runtime 引擎表格中以图标显示:

  • ✅ ok + 延迟(秒)— 引擎正常
  • ❌ fail + 错误信息 — 引擎异常
  • ⏳ pending — 等待首次探活
  • ⏭ skip — 引擎未安装

8. 项目知识库

Grape 为每个仓库自动维护项目知识基线(Project Graph),包含:

  • 项目结构和技术栈分析
  • 代码能力和依赖关系
  • 历史 Issue 和 PR 的处理记录

项目知识库 页面查看和编辑。知识基线在 Agent 执行任务时作为上下文注入,帮助 Agent 更准确地理解项目。

OBS 存储模式下,知识基线文件自动同步到 OBS 桶,支持多节点共享。

9. 常见问题 (FAQ)

Q0: 创建任务前需要做什么准备?为什么任务报"无可用引擎"?
创建任务前必须先在场景中心配置并应用场景

新建 Issue 触发流水线之前,必须先完成以下步骤,否则 Agent 会报 engine_unavailable(无可用引擎) 导致任务失败:

  1. 进入场景中心:选择仓库后,点击左侧导航栏的 场景中心
  2. 选择场景:在下拉框中选择一个场景(默认场景 default 已预置 VOD→Issue→Coding→QA→SRE 全链路 Agent 节点)
  3. 配置引擎:点击 配置引擎 按钮,为每个 Agent 节点选择要使用的引擎实例(从已注册的 Worker 引擎中选择):
    • VOD Agent → 选择 hermes 引擎实例
    • Issue Agent → 选择 opencode 引擎实例
    • Coding Agent → 选择 opencode 引擎实例
    • QA Agent → 选择 opencode 引擎实例
    • SRE Agent → 选择 hermes 引擎实例
  4. 保存引擎配置:配置完成后点击 保存引擎 按钮
  5. 应用场景:点击 应用 按钮,将场景配置绑定到当前仓库
注意事项
  • 如果没有点击"应用",场景配置不会生效,Webhook 事件仍使用默认配置
  • 如果引擎未配置(engine_runtime_ids 为空),Agent 会报"无可用引擎"并失败
  • 新增 Worker 后需要回到场景中心重新配置引擎,将新引擎分配给 Agent
  • 不同仓库可以应用不同场景(如开发仓库用 default 场景,运维仓库用自定义 SRE 场景)
  • 自定义场景:在下拉框选择"创建自定义场景",配置每个 Agent 的技能(skill)、触发模式(mode)、下游路由(next)等
Q1: Issue 创建后没有触发流水线?

可能原因及排查:

  1. Webhook 未配置:检查 GitCode 仓库的 Webhook 设置,确认已配置指向 Grape 的 webhook URL(https://webhook.grapedev.topxtopx.com/webhook/gitcode
  2. 仓库未授权:在 Grape 控制台"GitCode 仓库"页面确认仓库已导入
  3. Webhook Secret 不匹配:在 GitCode Webhook 设置中确认 Secret 与 Grape 配置一致
  4. 事件类型未勾选:GitCode Webhook 需勾选 Issue 和 PR 相关事件
  5. 查看 webhook 日志:在 GitCode Webhook 管理页面查看推送结果(HTTP 200 表示成功)
Q2: 任务状态显示"失败",如何排查?
  1. 任务中心流水线 页面点击失败的任务,查看详细日志
  2. 常见失败原因:
    • exit_code=-1, duration=30s:引擎启动失败(如 Hermes ACP 依赖缺失、CLI 路径错误)
    • exit_code=-15:任务被信号终止(服务重启、超时 kill)
    • exit_code=1:Agent 执行出错(代码编译失败、API 调用失败)
    • "无可用引擎":没有在线的 Worker 运行所需引擎,检查 Agent 运行时页面
  3. 系统监控 页面检查对应 Worker 的引擎探活状态
  4. SSH 到对应 Worker 查看 journalctl -u runtime-agent 日志
Q3: 控制台页面显示"加载中..."不消失?

排查步骤:

  1. 强制刷新:按 Ctrl+Shift+R 强制刷新页面,清除浏览器缓存的旧版 JS
  2. 检查网络:确认能访问 Grape 域名(如 grapedev.topxtopx.com
  3. 检查登录状态:如果 token 过期,页面会跳转到登录页
  4. 检查后端服务:直接访问 https://<域名>/health 确认服务在线
  5. 查看浏览器控制台:F12 打开开发者工具,查看 Network 标签中是否有请求超时
Q4: Agent 执行的任务一直卡在"运行中"?
  1. 任务超时:Worker 默认任务超时 30 分钟,超时后自动标记失败
  2. Worker 离线:检查系统监控中对应 Worker 是否在线(心跳是否正常)
  3. 引擎卡死:可能是 AI 模型 API 限流或网络中断,检查 Worker 日志
  4. 手动处理:在流水线页面点击"重试"重新执行,或在 Issue 评论区重新触发
  5. 清理僵尸任务:联系管理员在数据库中执行 UPDATE events SET status='failed', exit_code=-15 WHERE status='running' AND started_at < ...
Q5: 如何添加新的 Worker 机器?
  1. 在目标机器上安装 Python 3.10+ 和所需 AI CLI(opencode/hermes/codearts)
  2. 在 Grape 控制台 Agent 运行时通用设置 中创建新的 Worker 凭据
  3. 在目标机器执行一键安装命令:
    curl -fsSL https://<grape域名>/api/runtime/install | bash -s -- --token <rta_...> --server https://<grape域名>
  4. 安装完成后 Worker 自动注册,在运行时页面可见
  5. 确认引擎探活状态为 ✅
Q6: 引擎探活显示"pending"或"fail"?

pending(等待):引擎刚注册,等待首次探活(每 10 分钟执行一次)。等待几分钟后刷新即可。

fail(失败)

  • 检查引擎 CLI 是否已安装:which opencode / which hermes
  • 手动测试:opencode run "hello"hermes chat -q "hello" --yolo
  • 检查 AI 模型 API Key 是否配置正确(/etc/grape/grape.env~/.hermes/.env
  • 如果使用 hermes 引擎,确认已安装 ACP 依赖:hermes acp 应输出 "ACP client connected"
Q7: SRE Agent 销毁云资源时需要注意什么?
⚠️ 安全提示

SRE Agent 执行资源销毁前必须经过用户确认。流程如下:

  1. 用户创建 Issue 要求销毁资源
  2. SRE Agent 查询并列出所有待销毁资源清单,在 Issue 评论区发布
  3. 用户在评论区回复"全部销毁"或指定资源确认
  4. SRE Agent 确认后执行销毁操作
  5. 销毁完成后在 Issue 评论区发布验证结果

如果需要中止销毁,在确认前关闭 Issue 或在评论区回复"取消"即可。

Q8: 如何查看 Agent 的详细执行日志?
  • 控制台:在任务中心/流水线页面点击任务行,弹出日志详情弹窗,显示每一步的思考和工具调用
  • Worker 日志:SSH 到 Worker 机器执行 journalctl -u runtime-agent -n 100 --no-pager
  • 服务端日志:在系统监控页面查看错误日志来源,或 SSH 到主服务器查看 /root/grape/data/main.log
  • 数据库:事件的 result 字段包含 Agent 的最终输出摘要
Q9: Coding Agent 提交的 PR 需要手动合并吗?

是的。Coding Agent 提交 PR 后,QA Agent 会自动审查并给出意见,但PR 合并需要仓库维护者手动操作。这是设计上的安全机制——AI 可以编写代码和提交 PR,但代码合入主线需要人工确认。

在 GitCode 的 PR 页面可以查看 QA Agent 的审查意见和代码变更,确认后点击"合并"即可。

Q10: 如何配置 AI 模型的 API Key?

AI 模型配置在以下位置:

  • 主服务器/etc/grape/grape.env 中的 HERMES_CUSTOM_API_DEEPSEEK_COM_API_KEY
  • Worker~/.hermes/.env 中的 HERMES_CUSTOM_OPENGW_CLOUDDEVELOPER_CLUB_API_KEY
  • opencode~/.config/opencode/opencode.json 中的 apiKey

修改后需重启对应服务(主服务器:grape-main/grape-webhook;Worker:runtime-agent)。

Q11: 如何为仓库配置自定义技能?
  1. DevOps 技能 页面点击"创建技能"
  2. 选择作用域:仓库级(选择目标仓库)或全局
  3. 编写 SKILL.md:包含 namedescription(触发条件)、steps(执行步骤)
  4. 可选:添加 references/(参考文档)、scripts/(脚本)、templates/(模板)
  5. 保存后技能自动分发到 OBS(如已启用),Worker 执行时自动下载
Q12: 系统监控中 Worker 的 tmp 百分比很高怎么办?

Worker 的 /tmp 目录可能被 AI 引擎运行时生成的 JIT 缓存文件(隐藏 .so 文件)占满。症状:scp 传输文件报 "No space left on device",但 Worker 运行正常。

清理方法(在 Worker 上执行):

find /tmp -maxdepth 1 -name ".*.so" -delete

建议定期清理所有 Worker 的 /tmp 目录。如果频繁占满,可以在 crontab 中添加定时清理任务。