harness 工程
注意:现在 AI Agent 面试里的 Harness ≠ Harness.io 那个 CI/CD 平台。Agent 领域 Harness:驾驭层 / 挽具层;公式:Agent = Model(大脑) + Harness(运行约束底座)。一句话标准答案面试口述:模型负责思考推理;Harness 负责约束、调度、校验、记忆、循环执行、风险控制,解决大模型幻觉、无状态、长链路不可控问题,是 Demo Agent 走向生产 Agent 的关键层。
一、核心概念(必背)
- 字面含义:马具、缰绳;用来 “驾驭” 大模型,不提升模型智商,守住系统下限;模型负责上限创造力。
- Harness Engineering(驾驭工程):不是写 Prompt,而是构建一套包围 LLM 的运行时环境,定义:Agent 能做什么、不能做什么、何时停止、出错如何处理、结果如何校验、状态如何保存。
- 区分误区(面试官高频挖坑)
- ❌ Harness 不是 Prompt;Prompt 只是 Harness 其中一小部分。
- ❌ Harness 不是大模型;模型只是被 Harness 调用的组件,可以随时替换模型。
- ✅ Harness = Agentic Loop 循环 + 状态记忆 + 工具权限管控 + 输出校验 + 沙箱隔离 + 监控熔断 + 上下文管理。
二、Harness 六大核心模块(面试必问)
1. Agentic Loop(智能执行循环,心脏)
经典 ReAct 扩展:Gather 收集上下文 → Reason 模型推理 → Act 调用工具 → Observe 拿到工具返回 → Verify 校验结果 → 判断终止 / 下一轮循环。
生产级 Loop 必须带保护策略,不能简单 while True:
- 最大迭代次数 max_iter(防死循环)
- Token 预算上限(防上下文爆炸)
- 置信度阈值,低置信度主动终止
- 终止条件:任务完成 / 资源耗尽 / 连续失败 / 人工介入 HITL。
面试坑:很多人只写 “思考→调用工具”,漏掉 Verify 结果校验环节,直接扣分。
2. Identity 身份契约
定义 Agent 身份、能力边界、行为规范:
- 系统提示、CLAUDE.md 契约文件
- 角色、禁止行为、输出格式约束
- 子 Agent 分工定义、Hooks 钩子回调。
3. State & Memory 状态与记忆
区分三类记忆:
- Working Memory 工作记忆:本轮 Loop 上下文,临时;
- Episodic Memory 会话记忆:Checkpoint 检查点持久化(LangGraph checkpoint),中断后恢复会话;
- Semantic 长期记忆:向量库 RAG,跨会话知识。
面试高频问题:长 Loop 上下文衰减怎么解决?
- 策略:摘要压缩、滑动窗口、重要信息持久化到向量库、丢弃低价值历史、轮次摘要合并,不是单纯无限塞入 prompt。
4. Tool Policy 工具权限管控
- 定义可用工具集合(MCP/Tools),工具白 / 黑名单;
- 沙箱隔离:代码执行沙箱、文件读写权限限制,禁止高危系统调用;
- 参数校验,拦截危险入参;
- 控制工具调用频率,防止疯狂循环调用工具。
5. Validation 校验刹车(最重要的防幻觉手段)
“模型生成不可信,Harness 负责校验产出”
- 格式校验:JSON Schema 强制输出格式;
- 业务逻辑校验:代码静态检查(SpotBugs、Checkstyle)、单元测试门禁;
- 结果语义校验:是否符合业务目标;
- 失败策略:重试、报错终止、回滚状态、人工介入。
例子:Agent 写代码产生空 catch 吞异常,Harness 调用静态检查直接拦截,返回错误给 Agent 修正,而不是直接采纳输出结果。
6. Observability & 故障防护
- 全链路日志:每轮 loop 输入输出、token 消耗、工具调用记录;
- 限流、熔断、降级;
- 错误隔离:单步失败不搞崩整个 Agent 会话;
- 指标:循环次数、失败率、幻觉触发次数、平均 token 消耗。
三、高频面试题 + 回答模板
Q1:讲讲你理解的 Harness,Agent = Model + Harness 怎么理解?
参考口述:Harness 是包裹大模型的整套运行驾驭层。Model 相当于大脑,负责推理思考;Harness 是操作系统与约束框架,管循环执行、状态记忆、工具权限、输出校验、监控熔断。大模型原生无状态,有幻觉,长任务容易失控;Harness 不去提升模型本身能力,而是把模型能力约束在业务边界内,把 Demo 级 Agent 变成稳定可运维的生产系统。Prompt 只是 Harness 里很小一部分,完整 Harness 包含循环、记忆、校验、沙箱、监控整套体系。
Q2:Agent 死循环怎么处理?
- 硬上限:设置最大 loop 迭代次数兜底;
- 资源保护:token、执行时间预算耗尽强制退出;
- 业务层校验:Verify 阶段检测重复动作,连续多次做相同操作直接终止;
- 置信度机制:模型输出置信度持续走低,停止自动执行,交给人工;
- 记录 checkpoint,终止后可以人工修复再恢复执行。
Q3:长任务上下文膨胀、衰减怎么处理?
- 滑动窗口,丢弃最早非关键消息;
- 轮次摘要:对历史回合做 LLM 摘要,替换原始长上下文;
- 分层记忆:不重要信息存入向量长期记忆,需要再检索,不全塞进 prompt;
- Checkpoint 只保存关键 state,不是完整对话;
- 区分工作记忆与长期记忆,减少每轮输入 token 量。
Q4:Harness 和 Prompt 工程区别?
Prompt 工程是写提示词,改变模型输出倾向,只作用输入层。
Harness 是完整运行系统:除了系统提示,还包含循环调度、持久化状态、工具沙箱、结果校验、熔断监控。
只靠 Prompt 解决不了长链路、代码校验、死循环、状态丢失问题;Prompt 能力有限,必须 Harness 工程兜底。
Q5:Harness 层太厚 / 太薄指什么?(高阶)
- Harness 太厚:把大量业务硬编码写死在驾驭层,模型只做很小一部分决策,失去 Agent 泛化能力;
- Harness 太薄:只有简单调用模型,没有校验、循环保护、权限管控,完全依赖模型自觉,生产环境极不稳定。
工程上追求平衡点:边界约束、安全校验放 Harness;业务推理、决策留给 Model。
四、开源框架对应 Harness 实现
表格
| 框架 | Harness 实现特点 |
|---|---|
| LangGraph | Checkpoint 状态持久化,可配置 Loop,Human‑in‑loop,完整状态管理;最贴近生产 Harness 实现 |
| OpenCode / Claude Code | Gather‑Act‑Verify 三阶段 Loop,文件读写沙箱,结果校验,迭代保护 |
| AutoGen | 多 Agent 编排、会话管理;需要自己补充 Verify 校验层 |
| CrewAI | 侧重 Agent 分工,原生 Harness 防护较弱,需要二次开发 |
OpenCode 本质就是一套面向编码 Agent 的完整 Harness 实现,这也是为什么前面聊完 OpenCode,面试很容易追问 Harness。
五、
构建编码 Agent 时,基于 OpenCode 思想搭建 Harness 驾驭层:
- 实现 Gather‑Act‑Verify 三阶段循环,配置最大迭代与 token 预算防止死循环;
- 使用 Checkpoint 保存会话状态,处理长任务上下文压缩;
- 工具层做文件读写沙箱权限控制;
- 增加静态代码检查、单元测试门禁作为校验刹车,拦截 Agent 生成有缺陷代码;
- 全链路记录每轮 Agent 输入输出与工具调用日志,便于排查幻觉与异常。
模型可以无缝切换 DeepSeek/Claude,业务约束全部收敛在 Harness 层,不耦合具体大模型。
posted on 2026-08-04 20:21 ExplorerMan 阅读(31) 评论(0) 收藏 举报
浙公网安备 33010602011771号