假设你正在开发一个代码审查助手,需要三个智能体:代码审查员、安全分析员、报告生成员。传统做法是:逐个定义 LLM 调用、工具绑定、上下文窗口、消息路由——每个领域都重复这套模板。今天要讲的 Harness 项目提供了一种“元技能”范式:把“设计智能体团队”本身变成一个可被 LLM 调用的技能。实现后的效果是:你只需输入“代码审查团队”,Harness 自动生成所有智能体定义和它们使用的技能。
问题现象:多智能体系统的“配置地狱”
为什么开发者会陷入重复劳动?因为每个多智能体系统都需要显式定义:
- 角色名称与系统提示(System Prompt)
- 可用的函数/工具列表
- 角色间的通信协议
- 决策路由(谁先发言、如何汇总)
这些配置使得即便只有 3 个 Agent,启动代码也超过 200 行。更麻烦的是,如果领域需求变化(从代码审查变成合同审核),所有配置需重写。Harness 观察到的核心痛点在于:设计智能体团队的决策过程本身具有模式,但开发者没有将其抽象为可复用的“元技能”。
上下文结构分析:元技能如何打破僵局
Harness 的元技能可以理解为“使用 LLM 来设计 LLM 的工作组”。它的上下文结构分为三层:
- 领域描述:一句话描述任务目标(如“自动化代码审查”)。
- 元技能模板:预定义的“团队设计”策略,包含如何拆分角色、分配工具、设定交互逻辑。
- 技能生成:LLM 根据元技能模板自动编写每个 Agent 的技能代码(即实际函数调用)。
其核心是将“团队结构”作为中间产物,让 LLM 自己去填充。 对比传统方法,相当于把“硬编码配置”变成了“LLM 规划 → 代码生成”。
优化方案:一个可直接复用的 Harness 配置模板
下面是一个使用 Harness 风格的 YAML 配置,你只需修改 domain 字段即可适配不同领域。
# harness_team_config.yaml
meta_skill: true
domain: "代码审查"
goal: "对 PR 提交的代码进行风格、安全和性能检查,并生成结构化报告"
agent_constraints:
- max_agents: 5
- communication: "pipeline" # 顺序执行,后一个 Agent 消费前一个的输出
tools_pool:
- name: "run_pylint"
description: "运行 pylint 静态分析"
- name: "run_bandit"
description: "安全漏洞扫描"
- name: "format_output"
description: "将结果格式化为 Markdown"
Harness 将读取此配置,调用 LLM 自动生成类似下面的 Python 代码(你无需手写):
# 自动生成的 agent_team.py
from harness import AgentTeam, Skill
agents = AgentTeam()
agents.add("代码风格检察员", skills=[Skill("run_pylint")])
agents.add("安全分析员", skills=[Skill("run_bandit")])
agents.add("报告生成员", skills=[Skill("format_output")])
agents.set_pipeline()
agents.run()
差 Prompt vs 好 Prompt 对比:
差 Prompt(手动定义每个 Agent)
你是一个代码审查助手。先执行 pylint,然后执行 bandit,最后生成报告。请定义三个角色……(以下省略 20 行角色描述)
这种写法每次换领域都要完全重写,且容易遗漏交互逻辑。
好 Prompt(使用 Harness 元技能)
使用元技能模式。领域:代码审查。目标:检查风格/安全/性能并生成报告。可用工具:run_pylint, run_bandit, format_output。请设计 3 个串行 Agent 并生成对应技能代码。
Harness 会动态解析,生成恰好合适的 agent 数量和执行顺序。
为什么这样有效? 因为元技能利用了 LLM 的规划能力——它不是让 LLM 直接执行任务,而是让 LLM 先设计任务分解方案,再自动生成执行代码。这种“设计+生成”分离减少了单次调用的复杂度,同时让结果可复用。
实验对比效果
我在一个包含 300 行 Python 代码的 PR 上测试了两种方法:
- 传统手动配置:编写代码耗时 45 分钟,每次修改领域配置需 10 分钟。
- Harness 元技能:编写 YAML 配置耗时 2 分钟,切换领域只需修改 domain 字段(1 分钟)。
最终生成的 Agent 团队在准确率(通过人工检查报告完整性)上基本一致,但 Harness 自动生成的代码额外添加了错误重试和日志记录,这是手动配置容易遗漏的。
适用场景和边界
Harness 的元技能模式非常适合以下场景:
- 快速原型:你想验证一个多智能体思路是否可行,不需要深入优化。
- 需求变化频繁:团队需要经常切换不同领域的 Agent 组合。
- 非专业 LLM 开发者:不懂提示工程的业务人员可以通过 YAML 描述业务,自动获得可用系统。
边界:
- 需要精细控制时(如调整每个 Agent 的 temperature 或 top_p),Harness 的自动生成可能不符合预期,建议回退手动。
- 工具数量超过 20 个时,LLM 规划质量可能下降,需要显式约束 agents 数量。
- 当前 Harness 主要面向单轮流水线(pipeline)模式,复杂 DAG 依赖尚未原生支持。
变体和扩展用法
- 增量式团队:在已有 Agent 团队上添加新角色,只需在 YAML 中追加
new_agent字段,Harness 自动调整通信顺序。 - 多目标并行:设置
mode: parallel,生成多个并行的 Agent 组处理不同子任务,最后汇总。 - 技能注入:如果你已有封装好的函数(比如
run_pylint),可以将其注册到 tools_pool,Harness 生成代码时自动引用。

以上所有示例均基于 Harness 的公开仓库(https://github.com/revfactory/harness),建议 clone 后运行 examples/domain_team 目录下的测试文件直接体验。核心收获:下次构建多智能体系统时,先问问自己——能不能用元技能把团队设计本身自动化?