HumanLayer Skills:OpenCode 接入指南与响应提取实战技巧
2026/9/17 4:34:50 网站建设 项目流程

HumanLayer Skills:OpenCode 接入指南与响应提取实战技巧

【免费下载链接】skills项目地址: https://gitcode.com/GitHub_Trending/skills53/skills

HumanLayer Skills 是一套面向AI 编程代理的开源技能包,让编码代理(如 OpenCode、Claude Code、Codex)以控制循环方式自动检测问题、修改代码并提交 PR。本指南带你完成 OpenCode 的 CI 接入,并掌握各家代理的响应提取技巧。

项目快速上手

HumanLayer Skills 包含 4 个开箱即用的技能插件,覆盖从代码审查到自动化工作流的完整链路:

技能用途入口文件
improve-claude-md<important if>块重写 CLAUDE.md,提升指令遵循率SKILL.md
narrow-react-prop-types收窄 React 组件 Prop 类型至真实代码路径SKILL.md
design-control-loop设计并构建"感知-控制-执行"循环SKILL.md
show-me用图表和 HTML 可视化解释当前话题SKILL.md

安装任意技能只需一行命令:

npx skills add humanlayer/skills --skill <skill-name>

💡 更多安装说明见 README.md。

OpenCode 接入控制循环:3 步搞定

design-control-loop技能支持 4 种编码代理:Claude Code、Codex、OpenCode、CodeLayer。下面以 OpenCode 为例,展示如何将其接入 CI 工作流。

为什么选择 OpenCode?

OpenCode 是开源的 AI 编程代理 CLI,支持多模型(Anthropic、OpenAI 等),以 JSON 格式输出结构化结果,非常适合在 CI 中做响应提取。

安装与基础配置

在 CI 工作流中,OpenCode 的接入分三步:

  1. 安装运行时:使用oven-sh/setup-bun@v2安装 Bun,再全局安装opencode-ai
  2. 配置密钥:根据所选模型设置对应的 API Key 环境变量
  3. 执行代理命令:以--format json运行 OpenCode,捕获全部输出

完整配置参考 agent-runner-templates.md,核心配置片段如下:

- uses: oven-sh/setup-bun@v2 - run: bun install -g opencode-ai - name: Run OpenCode env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | opencode run "$PROMPT" \ --dir "$GITHUB_WORKSPACE" \ --model anthropic/claude-sonnet-4-5 \ --format json \ --dangerously-skip-permissions \ 2>&1 | tee /tmp/agent-output.txt

⚠️ 切换模型时,--model和对应的密钥环境变量要一起改。例如改用 OpenAI 模型时,将--model改为openai/...,密钥改为OPENAI_API_KEY

控制循环的完整执行顺序

OpenCode 接入后,整个循环按以下顺序执行(完整工作流模板见 workflow-template.yml):

步骤组件职责
1Sensor测量代码库当前状态,输出结构化数据
2Controller根据测量结果选择本次要处理的目标
3ActuatorOpenCode 执行修改,生成最终响应
4Extract从 JSON 输出中提取代理的最终回复
5PR用提取的回复作为 PR Body 创建 Pull Request

各组件的详细设计原则见 control-loop-taxonomy.md。

响应提取实战技巧:4 种代理格式全解析

这是 OpenCode 接入中最容易踩坑的环节。不同代理的输出格式完全不同,用错提取命令会导致 PR Body 为空或内容错乱。

四种代理的输出格式对比

代理输出格式提取方式
Claude Codestream-json(JSON Lines)jq逐行解析,取最后一条 assistant 消息
Codex--json+ 内置--output-last-message无需额外提取,直接写入文件
OpenCode--format json(结构化 JSON)jq.messages中最后一条 assistant 消息
CodeLayer纯文本 + ANSI 颜色码sed去除 ANSI 转义序列

OpenCode 响应提取(重点)

OpenCode 以--format json输出时,JSON 结构中包含messages数组。用jq提取最后一条 assistant 消息即可:

- name: Extract PR body run: | cat /tmp/agent-output.txt \ | jq -r '.messages | map(select(.role == "assistant")) | last | .content' \ > /tmp/pr-body.md

关键细节

  • map(select(.role == "assistant"))— 只保留代理的回复,过滤掉 user 消息
  • last— 取最后一条,因为代理的最终结论在最后
  • .content— 直接取文本内容
  • 输出写入/tmp/pr-body.md,后续 PR 创建步骤会读取此文件

提取失败的兜底策略

agent-runner-templates.md 中明确建议:如果提取失败,工作流应优雅降级——使用原始输出或占位消息,而不是直接报错退出。

[ -s /tmp/pr-body.md ] || cp /tmp/agent-output.txt /tmp/pr-body.md

响应模板:让 PR Body 结构化

提取出的内容需要符合 response-template.md 定义的结构,包括:

  • 摘要统计:处理了多少问题,分 resolved / ignored / skipped
  • 变更明细:每个问题的文件、描述、风险等级
  • 验证结果:Typecheck、测试、Lint 是否通过
  • 风险标注:高 / 中 / 低风险,高风险附手动验证步骤

模板支持三类任务:修复 / 迁移、生成、重构。按任务类型选择对应模板,评审者可以一目了然。

记忆文件与迭代机制:让循环越跑越好

控制循环不是"一次跑完就结束"。两个机制让循环持续改进

  1. 记忆文件(memory-template.md):版本控制的 Markdown 文件,每次运行时注入 Actuator 上下文。存放永久性的范围排除、已知误报区域、评审者偏好——不是一次性指令。

  2. /iterate指令:维护者在代理 PR 上评论/iterate,对应工作流自动加载 PR 上下文和反馈,代理更新记忆文件并修改 PR。实现脚本见 agent-iteration.ts。

💡 设计哲学:人类始终在循环之上(human-on-the-loop),通过记忆文件和/iterate持续修正代理行为。

核心文件路径速查

文件用途
agent-runner-templates.md4 种代理的本地 + CI 命令、密钥、响应提取
workflow-template.yml周期性循环工作流骨架
prompt-template.mdActuator 步骤的嵌入提示词结构
response-template.mdPR Body 格式化模板
memory-template.md记忆 / 反馈文件骨架
skill-template.md生成的 Actuator 技能骨架
control-loop-taxonomy.md控制循环组件分类与设计问题
example-control-loop.md完整示例循环(逐组件注释)

【免费下载链接】skills项目地址: https://gitcode.com/GitHub_Trending/skills53/skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询