跳到主要内容

Harness 核心组件与架构

目录

总览:一次 Agent 请求的 Harness 切面

从工程视角,Harness 不是单一服务,而是横切在模型调用链上的组件集合。下面按「请求生命周期」排列,便于面试时按顺序讲。

组件一:编排环(Orchestration Loop)

职责:决定「下一步是再调模型、调工具、还是结束」。

模式说明适用
ReActThought → Action → Observation 循环通用 Agent
Plan-Execute先出计划再逐步执行步骤清晰的长任务
Graph / State Machine节点与边显式定义强合规、可审计
Single-shot + Tools模型一次决定是否调工具简单场景

Harness 必配参数(无论哪种模式):

  • maxSteps / maxToolCalls:防无限循环
  • timeoutMs:整请求与单工具分别设
  • abortSignal:用户取消必须传到模型与工具
  • onStepFinish:每步写 trace,便于调试

Vercel AI SDK 中对应 streamText({ maxSteps: 5, tools, abortSignal });OpenAI Agents SDK 有内置 run loop。核心思想一致:循环是 Harness 管的,不是模型自觉停的

组件二:Context Engineering(上下文组装)

在 Harness 内通常独立成 buildMessages(session, task) 模块。

输入源

来源说明风险
System + Skill角色、规范、渐进披露过长占窗口
会话历史多轮 user/assistant噪声累积
RAG 片段检索 top-k错检带入幻觉
Tool resultsJSON / 文本超大结果撑爆上下文
结构化状态计划、槽位、中间变量与 history 重复

2026 常用策略

  1. 固定预算:system 20% + RAG 30% + history 40% + 预留 10%
  2. 摘要压缩:超过 N 轮后对旧 history 做 LLM 摘要(异步、带 cache)
  3. Prompt Caching:稳定 system 前缀走缓存(Anthropic / OpenAI 等支持),Harness 层保证 system 块稳定
  4. Tool result 截断:超过 4k token 则摘要或只保留字段子集
  5. 引用格式统一:RAG 带来源 [doc:12],便于模型 cite 与前端展示

Skills 专题 的关系:Skill 是 Context 的模块化来源;Harness 决定何时加载哪段 Skill(渐进披露)。

组件三:工具网关(Tool Gateway)

模型侧的 function / tool 声明只是「意图」;真正执行必须在 Harness 控制的网关里

模型 tool_call → 网关校验 → 鉴权 → 执行 → 规范化结果 → 回填 messages
网关能力说明
白名单只允许注册过的 tool name
Schema 校验Zod / JSON Schema 校验参数
幂等与去重同一 toolCallId 不重复写库
沙箱文件/网络/Shell 隔离
速率限制按 user / tenant 配额
HITL敏感操作挂起等人批

MCP 把「工具发现 + 传输」标准化;Harness 仍要包一层网关,不能把 MCP Server 直接暴露给不可信输入。见 MCP 开发与应用

组件四:记忆与状态(Memory & State)

类型存储Harness 职责
会话内Redis / 内存多轮 history、tool 中间态
跨会话DB + 向量库用户偏好、长期事实(需用户同意)
工作记忆当前 run 的变量计划步骤、已收集字段

面试点:记忆不是「全塞进 context」;Harness 要做 write policy(什么值得记)和 read policy(什么时候检索注入)。

组件五:护栏(Guardrails)

分三层,与 03-生产Harness七大模式 对应:

  1. 输入护栏:PII 检测、Prompt 注入规则、请求大小
  2. 过程护栏:步数、成本上限、工具分类(只读 vs 写)
  3. 输出护栏:Structured Outputs、拒答模板、内容安全 API

推理模型(o 系列、DeepSeek-R1 等)常带长 chain-of-thought;Harness 应 不把 raw reasoning 全量给前端或日志,只保留 audit 需要的摘要。

组件六:可观测性(Observability)

生产 Harness 最低配

信号字段示例
traceId贯穿 HTTP → 每步 LLM → 每次 tool
spanstepIndex、model、latencyMs、tokenIn/Out
成本按 trace 汇总 USD / 积分
结果success / timeout / guardrail_block / user_abort

2026 常见栈:OpenTelemetry + Langfuse / LangSmith / 自建 ClickHouse。前端联调时至少要有 可按 traceId 查全链路 的管理页或日志查询。

组件七:Eval Harness(离线)

在线 Harness 的「镜像环境」:同一套 buildMessages + tools mock,对 Golden Set 批量跑。与在线共用代码路径越一致,回归越可信。详见 05-Eval-Harness与发布门禁

参考架构(中小团队)

面试可答:Harness 和 Framework 谁负责什么?

Framework(如 Vercel AI SDK)提供 stream、tool 类型、maxSteps 等原语;Harness 是你用这些原语组出来的策略与策略组合:哪些 tool 开放、context 怎么裁、trace 怎么打、失败怎么降级。换 Framework 应尽量只换适配层,Harness 策略层保持稳定。

延伸阅读