harness 工程

注意:现在 AI Agent 面试里的 Harness ≠ Harness.io 那个 CI/CD 平台。
 
Agent 领域 Harness:驾驭层 / 挽具层;公式:Agent = Model(大脑) + Harness(运行约束底座)。
 
一句话标准答案面试口述:模型负责思考推理;Harness 负责约束、调度、校验、记忆、循环执行、风险控制,解决大模型幻觉、无状态、长链路不可控问题,是 Demo Agent 走向生产 Agent 的关键层。

一、核心概念(必背)

  1. 字面含义:马具、缰绳;用来 “驾驭” 大模型,不提升模型智商,守住系统下限;模型负责上限创造力。
  2. Harness Engineering(驾驭工程):不是写 Prompt,而是构建一套包围 LLM 的运行时环境,定义:Agent 能做什么、不能做什么、何时停止、出错如何处理、结果如何校验、状态如何保存。
  3. 区分误区(面试官高频挖坑)
    • ❌ 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 状态与记忆

区分三类记忆:
  1. Working Memory 工作记忆:本轮 Loop 上下文,临时;
  2. Episodic Memory 会话记忆:Checkpoint 检查点持久化(LangGraph checkpoint),中断后恢复会话;
  3. 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 死循环怎么处理?

  1. 硬上限:设置最大 loop 迭代次数兜底;
  2. 资源保护:token、执行时间预算耗尽强制退出;
  3. 业务层校验:Verify 阶段检测重复动作,连续多次做相同操作直接终止;
  4. 置信度机制:模型输出置信度持续走低,停止自动执行,交给人工;
  5. 记录 checkpoint,终止后可以人工修复再恢复执行。

Q3:长任务上下文膨胀、衰减怎么处理?

  1. 滑动窗口,丢弃最早非关键消息;
  2. 轮次摘要:对历史回合做 LLM 摘要,替换原始长上下文;
  3. 分层记忆:不重要信息存入向量长期记忆,需要再检索,不全塞进 prompt;
  4. Checkpoint 只保存关键 state,不是完整对话;
  5. 区分工作记忆与长期记忆,减少每轮输入 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 驾驭层:
  1. 实现 Gather‑Act‑Verify 三阶段循环,配置最大迭代与 token 预算防止死循环;
  2. 使用 Checkpoint 保存会话状态,处理长任务上下文压缩;
  3. 工具层做文件读写沙箱权限控制;
  4. 增加静态代码检查、单元测试门禁作为校验刹车,拦截 Agent 生成有缺陷代码;
  5. 全链路记录每轮 Agent 输入输出与工具调用日志,便于排查幻觉与异常。
     
    模型可以无缝切换 DeepSeek/Claude,业务约束全部收敛在 Harness 层,不耦合具体大模型。

 

posted on 2026-08-04 20:21  ExplorerMan  阅读(31)  评论(0)    收藏  举报

导航