知识库

Harness Engineering

一套围绕 AI Agent 运行控制层的系统工程方法。让 Agent 在真实系统中可靠行动,而不只是"模型够不够聪明"。

Agent = Model + Harness

模型负责推理生成 · Harness 负责工具、上下文、权限、执行、验证、观测、回滚

📑 目录导航 展开/收起

定义与边界

Agent Harness

AI Agent 的外部运行控制层,负责把模型推理转成受约束、可验证、可恢复的实际行动。

一个完整的 Agent Harness 通常包括:上下文装载、工具调用、权限控制、执行编排、结果验证、观测日志、恢复机制。它不是单纯的 prompt,也不只是 agent framework。

上下文装载 工具调用 权限控制 执行编排 结果验证 观测日志 恢复机制

Harness Engineering

设计、实现、维护、评估和持续演化 Agent Harness 的工程方法。

  • · Agent 能看见什么上下文?
  • · Agent 可以调用哪些工具?
  • · 写入和删除动作如何限制?
  • · 出错后怎么定位和回滚?
  • · 什么时候自动执行,什么时候必须人工确认?
  • · 如何把一次失败沉淀为下一轮可验证的改进?
概念关注点典型产物
Prompt Engineering如何表达任务prompt、system message、few-shot
Context Engineering让模型看到什么RAG、检索、压缩、记忆、代码索引
Tool Engineering给模型什么动作tool schema、MCP server、API wrapper
Agent Framework如何组织 agent 程序SDK、graph、workflow、runtime
Harness Engineering如何让 agent 在真实系统中可靠行动权限、工具、上下文、验证、状态、观测、回滚

容易误解的点

误解一:Agent Harness 等于框架
不准确。框架是 harness 的一部分,但真实 harness 还包括测试、权限、沙箱、CI、文档、审计和人工流程。
误解二:Harness 是提示词模板
不准确。提示词只是入口。Harness 的关键是把模型接入真实环境,同时控制它能做什么。
误解三:模型升级就能替代 harness
不准确。模型越强,能调用的工具越多,越需要更清晰的权限、观测和验证。
误解四:全自动才是高级 agent
不准确。高风险场景下,人类审批是 harness 的核心能力,不是退化方案。

能力分类

Agent Harness 可以拆成八个能力域,每个域回答一个核心设计问题。

1. Task Intake 任务入口

把用户意图转成可执行任务。能力包括意图识别、风险分级、任务拆解、输出格式约束、自动执行判断。

设计问题:任务是否足够窄?能否在单次运行内完成?失败后是否可复现?

2. Context Layer 上下文层

管理 agent 能看到什么。来源包括 system policy、repo rules、当前任务、检索结果、长期记忆、工具调用结果。

设计原则:带来源 ID、规则短而硬、大文档放资料库不全塞 prompt、上下文分层。

3. Tool Layer 工具层

把外部动作暴露给 agent。常见:文件读写、Shell、浏览器、数据库、HTTP API、MCP、邮件。

设计原则:白名单化、schema 化、每个工具有权限等级、危险工具须审批或沙箱。

4. Permission Layer 权限层

控制 agent 能做什么。L0 只读自动允许 → L1 写草稿记录日志 → L2 修改需 diff 可回滚 → L3 删除/批量强审批 → L4 支付/发布必须人工确认。

5. Execution Layer 执行层

让 agent 流程稳定运行。机制包括 workflow/graph、状态机、队列、retry、timeout、checkpoint、resume、rollback。

6. Verification Layer 验证层

判断 agent 结果是否可信。代码需 test/lint/typecheck/build;数据需 SQL dry-run/行数校验;知识库需引用覆盖率/来源检查。

没有验证层的 agent 应用,本质只是聊天机器人加工具。

7. Memory & State 状态记忆

让 agent 能恢复、复盘和持续改进。分为 Run State、Tool State、User Memory、Domain Memory、Failure Memory 五类。

记忆不是越多越好。必须能检索、过期、冲突处理和审计。

8. Observability 观测层

让工程团队知道 agent 怎么工作。至少记录 run id、model、tool calls、latency、token cost、verification result、approval result、failure reason。


参考架构

模型不直接接触真实系统。模型通过 Harness Runtime 调用受控工具,所有上下文、权限、验证和日志都由 harness 管。

User / UITask Intake          ← 结构化任务、风险预分级、参数门、审批决策Agent Orchestrator    ← 状态机 / LangGraph / Temporal / DAG / 多 agent handoffHarness Runtime
  ├─ Context Layer        policy → task → retrieved → memory → results → schema
  ├─ Tool Layer           受控 wrapper,非裸 API · schema + permission + side_effect
  ├─ Permission Layer     路径白名单 · 风险等级 · 审批门 · 敏感数据检查
  ├─ Execution Layer      timeout · retry · checkpoint · resume · rollback · idempotency
  ├─ Verification Layer   citation_coverage · lint · test · format_check · dry-run
  ├─ Memory & State       Run State · Tool State · User Memory · Domain Memory · Failure Memory
  └─ Observability Layer  trace · tool call log · token cost · audit trail · dashboard
  ↓
  ┌───────────────────────────────────┐
  │ Sandbox & Isolation            │
  │ L0 进程级 → L1 容器级 → L2 Firecracker → L3 E2B │
  └───────────────────────────────────┘
  ↓
Model Provider

最小可用架构(MVP)

UI → 固定 workflow → LLM → 3-5 白名单工具 → 验证脚本 → 人工确认 → trace log
  • · 只读和写草稿分离
  • · 正式写入前展示 diff
  • · 高风险动作人工确认
  • · 每次工具调用有日志
  • · 失败样本保存为 regression case

九个架构判断标准

  1. 任务是否结构化?
  2. 工具是否白名单化?
  3. 权限是否分级?
  4. 写操作是否可回滚?
  5. 结果是否自动验证?
  6. 过程是否可观测?
  7. 状态和记忆是否有治理?
  8. 是否在沙箱中执行?
  9. 失败是否能变成评估样本?
Task Intake 详细设计

Intake pipeline:User Request → Intent Classification → Risk Pre-Assessment → Parameter Extraction → Missing Parameter Gate → Task Structuring → Boundary Setting → Approval Decision → Structured Task

类型示例自主程度
查询"查一下销售额"全自动
生成"写一份周报"自动生成 + 人工确认
修改"更新配置文件"生成 diff → 人工审批 → 写入
删除"清理过期日志"人工确认每个删除对象
发布"部署到生产环境"必须人工触发
复合"分析数据并更新看板"拆解为子任务,高风险步审批

风险预分级由系统根据请求特征自动判定(写入操作、外部系统、生产环境、敏感数据、范围模糊、不可逆),不采信用户声明。缺失影响安全或业务结果的参数时必须反问用户。

Memory & State 详细设计
类型生命周期作用域存储
Run State单次 run当前任务Redis / Postgres / LangGraph persistence
Tool State单次 run工具调用链内存 / 临时文件
User Memory跨 run单个用户pgvector / Qdrant + 元数据过滤
Domain Memory长期全部用户知识库 / 向量库(含 source_id + 时间戳)
Failure Memory长期全局Postgres + JSONB,配合 eval 框架

关键约束:Run State 必须可序列化(支持 crash recovery);User Memory 强制 tenant 隔离,不存 PII 和密钥;Domain Memory 按可信度排序,过期内容标记;Failure Memory 每次事故后入库,改 prompt/模型/工具/检索策略后跑回归。

Observability 详细设计

基于 OpenTelemetry 的 trace + metric + log 三位一体,加入 agent 特有维度(token cost、tool call、permission check、human approval)。

关键指标:

成功:Task Success Rate、First-Pass Success Rate、Human Rejection Rate、Rollback Rate
安全:Unsafe Action Attempts、Blocked Action Count、Secret Exposure Count
成本:Token Cost per Task、Cost per Successful Task、Retry Cost Ratio
质量:Citation Coverage、Test Pass Rate、Format Compliance

推荐技术栈:Langfuse(tracing + agent graphs + sessions + dashboard + prompt management)、Prometheus + Grafana(指标聚合)、ELK / Loki(日志)。至少两个 dashboard:运营 dashboard(实时任务状态)和复盘 dashboard(7/30天趋势、失败原因分布)。

Sandbox & Isolation 详细设计
级别方案隔离强度启动速度适用场景
L0 进程级受限用户 + chroot即时可信内部脚本
L1 容器级Docker秒级代码执行、构建
L2 微虚拟化Firecracker microVM<125ms多租户、不可信代码
L3 远程沙箱E2B / cloud sandbox秒级生产 agent、浏览器 agent

沙箱策略:按任务风险等级分配隔离级别;网络默认禁止访问 localhost/内网,显式 allowlist 出站目标;生产数据通过只读副本提供;每个关键步骤做 snapshot,任务完成后销毁沙箱。浏览器 agent 需额外注意外部网页内容标记为不可信输入,下载文件进入隔离区扫描后才能传出。


上下文、工具与执行层设计

来源:01_architecture/context_tool_execution_layers.md

1. Context Layer(上下文层)

上下文层的目标不是"给模型更多信息",而是给模型正确、可追溯、可压缩的信息。

上下文分区:

System Policy     永久规则,短而硬
Developer Policy  应用规则、团队规范
Task Context      当前用户任务
Retrieved Context 检索资料
Working State     当前步骤状态
Tool Results      工具调用结果
Memory            长期偏好或历史经验
Output Schema     输出格式

设计原则:

  • 每段上下文带 source id
  • 检索结果按可信度和相关性排序
  • 大资料先摘要再进入 prompt
  • 工具结果与检索结果分开
  • 过期资料要标注时间
  • 冲突资料不能静默合并

反模式:

  • 把所有文档塞进 system prompt
  • 把长期记忆当事实来源
  • 没有来源 ID 的事实写入正式结果
  • 不区分用户偏好和客观事实
2. Tool Layer(工具层)

工具层的目标是给 agent 动作能力,同时限制副作用。

工具定义模板:

{
  "name": "tool_name",
  "description": "工具做什么,不做什么",
  "input_schema": {},
  "output_schema": {},
  "permission_level": "L1",
  "side_effect": "none|filesystem_write|external_api|production_change",
  "timeout_sec": 30,
  "retry": 1,
  "approval_required": false,
  "audit": true
}

工具包装原则:

  • 不暴露原始 shell,优先暴露具体动作
  • SQL 默认 read-only,写库必须审批
  • 文件写入默认写草稿区
  • 外部 API 调用必须记录 request id
  • 浏览器访问和本地控制面要隔离

工具输出原则:

{
  "ok": true,
  "artifact_id": "draft_001",
  "summary": "创建草稿",
  "path": "drafts/note.md",
  "diff": "...",
  "warnings": []
}
3. Execution Layer(执行层)

执行层的目标是让 agent 任务可恢复、可重试、可复盘。

任务状态:

created → planning → running → waiting_for_approval → verifying → completed / failed / rolled_back

Step 记录:

{
  "step_id": "extract_claims",
  "status": "completed",
  "input_artifacts": ["source_001"],
  "output_artifacts": ["claims_001"],
  "tool_calls": [],
  "verification": "pass"
}

Retry 策略:

失败类型处理
网络超时可重试
工具 schema 错误让模型修正参数
权限不足等待人工审批或终止
事实冲突标记冲突,不自动合并
测试失败允许有限修复循环
高风险动作不自动重试
4. Verification Layer(验证层)

验证要尽量靠确定性程序,而不是再问一次模型。

优先级:

  1. 编译器、测试、lint
  2. schema validation
  3. 静态规则
  4. 数据库 dry-run
  5. diff 检查
  6. 引用覆盖率
  7. LLM judge
  8. 人工 review

LLM judge 适合判断语义质量,不适合替代安全检查。


13 个设计模式

从实战中提炼的可复用工程模式,覆盖工具、权限、执行、验证、记忆、安全和成本。

🔧

1. Tool Wrapper

不暴露裸 API。受控 wrapper 封装工具,含 schema 校验、timeout、audit log 和 rollback 支持。

📝

2. Draft First

所有写操作先写草稿,展示 diff 后再写入。降低误写风险,便于确认和回滚。

3. Human Approval Gate

删除、发布、发邮件、支付、生产变更等高风险动作必须人工审批,记录审批人和时间。

🔗

4. Evidence-Bound Output

所有事实性结论绑定 source_id + confidence。确保输出可追溯、可核实。

🧭

5. Bounded Autonomy

不追求全自主 agent。固定流程 + 单步内有限自主,逐步放大自主范围。

🔄

6. Failure-to-Eval

每次失败沉淀为评估样本。记录原始任务、错误输出、正确输出、修复方式。改 prompt/模型/工具后跑回归。

💾

7. Checkpoint & Rollback

副作用前做 checkpoint。文件做 snapshot + patch,数据库用 transaction,代码用 git branch。

🎯

8. Least Context

上下文不是越多越好。按步检索,历史压缩为 state,大文档只传相关段落。

📦

9. Tool Result Compression

返回值压缩后入上下文。保留关键输出 + artifact id + error reason,不塞超长日志。

🌐

10. Safe Browser

浏览器 agent 与控制面隔离。localhost allowlist,外部内容不高权限执行,下载进隔离区。

🧠

11. Guarded Memory

长期记忆需治理:可追溯、可删除、可过期、可冲突标记,不把偏好当事实。

🤝

12. Agent Handoff

多 agent 交接需结构化 payload:task + state + artifacts + constraints + expected_output。

💰

13. Cost Guard

Token 预算硬限制、模型按成本路由、重试最多 2 次且退避递增、成本归因报表。


失败模式与评估

Agent 失败不是"模型不够好",而是 harness 某层的设计缺口。识别、分类、评估、修复四个步骤形成闭环。

五种常见失败模式

上下文污染

表现:被网页 prompt injection 影响、把过期资料当最新事实、把用户偏好当客观事实、规则过长导致关键约束丢失。

治理:上下文分层、来源和时间戳、外部内容降权、规则短而硬。

工具越权

表现:写错目录、删除重要文件、批量改名不可恢复、访问不该访问的密钥或本地服务。

治理:工具 wrapper、路径白名单、权限分级、审批门、沙箱。

错误恢复失败

表现:测试失败后盲目改更多文件、重试同一个错误参数、覆盖中间结果、无法回到上一步。

治理:checkpoint、bounded retry、rollback、failure classification。

幻觉写入

表现:没来源的结论进入知识库、编造 API 行为、编造论文结果、把猜测当事实。

治理:evidence-bound output、citation checker、unknown/pending 标记、人工 review。

观测缺失

表现:只知道失败不知道失败在哪一步、无法复现、无法比较版本、无法估算成本。

治理:trace、run log、tool call log、artifact registry、eval set。

评估维度与方法

维度指标
任务成功task success rate、first-pass success rate、human rejection rate、rollback rate
安全unsafe action attempts、blocked count、secret exposure count、unauthorized tool call count
质量citation coverage、test pass rate、factual error rate、format compliance、duplicate output rate
成本token cost per task、tool call count、latency、retry count、human review time
可维护性prompt version stability、tool schema breakage、eval regression count、failure case reuse rate

Eval Set 设计:

建议每个 AI 应用至少维护:
20 个简单成功任务 + 20 个复杂真实任务 + 20 个边界任务 + 20 个历史失败任务
高风险应用还要增加:
20 个恶意输入 / prompt injection 样本 + 20 个权限边界样本 + 20 个事实冲突样本

回归测试模板 · 失败复盘模板

{
  "case_id": "kb_001",
  "task": "从三篇来源生成知识库笔记",
  "input_artifacts": ["source_a","source_b","source_c"],
  "expected_checks": {
    "all_claims_have_sources": true,
    "no_delete_action": true,
    "draft_only": true,
    "format_valid": true
  },
  "forbidden": [
    "编造来源",
    "覆盖原始资料",
    "删除旧笔记"
  ]
}
# Failure Case
## Summary / Task / Expected / Actual
## Root Cause
  - Context / Tool / Permission
  - Verification / Model / User input
## Fix
## Regression Test

主流 Agent 工具映射

来源:03_tools_landscape/mainstream_agent_tools_mapping.md

很多工具不会直接使用 "Harness Engineering" 这个词,但它们的方向都在补强模型外部控制层。以下分析 10 个主流工具/框架的 harness 能力、适用场景和架构启发。

OpenAI Agents SDK

典型能力:agents、tools、handoffs、guardrails、sessions、tracing。

适合:需要自定义 agent 编排、工具调用+handoff+trace 的产品。

启发:tracing 应成为 agent 默认能力;handoff 是结构化任务转交;guardrail 是 runtime 机制而非 prompt 建议。

LangGraph

典型能力:durable execution、state、persistence、human-in-the-loop、memory、graph workflow。

适合:多步骤流程、需断点续跑、需人工审批、需状态可控的 agent 应用。

启发:agent 应用可用 graph 表达运行控制;持久化状态比单轮 prompt 更重要;人工介入应该是流程节点。

Claude Code / Claude Agent SDK

典型能力:built-in tools、permissions、hooks、subagents、MCP、settings、sessions。

适合:软件工程 agent、代码库内任务、需 hooks 做验证和流程控制的场景。

启发:hooks 是非常重要的 harness 扩展点;subagent 应有独立上下文和工具边界;权限配置要能进入项目级规则。

Cursor

典型能力:IDE 上下文、rules、agent mode、MCP、codebase indexing、background agents。

启发:代码库规则是 context layer 的核心资产;IDE 是很强的 harness 容器,天然连接文件、diff、诊断和用户审批。

Devin

典型能力:shell、browser、editor、isolated workspace、planning、test feedback。

启发:云端隔离开发环境是强 harness;shell/browser/editor 组合需要严格权限和观测;测试反馈是 agent 修复循环关键。

Microsoft Agent Framework

典型能力:session state、middleware、telemetry、workflows、enterprise integration。

启发:企业 agent 不是聊天界面,而是状态化工作流系统;telemetry 和 middleware 是生产化基础设施。

Google ADK

典型能力:tools、sessions、memory、artifacts、agent composition。

启发:artifacts 应该独立于对话存在;memory 和 session 要分层管理。

CrewAI

典型能力:agents、crews、tasks、tools、memory、knowledge、guardrails、observability。

启发:多 agent 协作需要任务契约;observability 不能后补,应从第一天就有。

AutoGen / AutoGen Studio

典型能力:multi-agent conversation、tools、human feedback、orchestration、app studio。

启发:多 agent 对话需要外部状态和约束,否则容易失控。

对比矩阵

工具强项Harness 重点
OpenAI SDKagent/tool/handoff/tracing应用级 agent runtime
LangGraph状态图、持久执行Execution Layer
Claude Code代码执行、hooks、权限软件工程 harness
CursorIDE 上下文、规则、索引代码库 context harness
Devin云端开发环境end-to-end engineering
Microsoft AF企业工作流、telemetry企业治理和状态
Google ADKsessions、memory、artifacts结构化运行时
CrewAI多 agent 业务流程task/crew orchestration

判断工具是否 harness 化

看它是否支持:工具白名单、权限分级、状态持久化、人工审批、trace、验证钩子、沙箱、回滚、任务历史、eval/replay。支持越多,越接近生产级 harness。


MCP 生态与 Harness 集成

来源:03_tools_landscape/mcp_ecosystem_analysis.md

MCP 在 Harness 中的位置

MCP(Model Context Protocol)是 Agent Harness 工具层的标准化协议,让外部工具、数据源和上下文以统一接口接入 agent,是工具白名单化和权限控制的关键基础设施。

Agent Harness Runtime
  ├─ Tool Layer
  │   ├─ MCP Client ── MCP Server A (filesystem)
  │   ├─ MCP Client ── MCP Server B (database)
  │   └─ Native Tools   (built-in wrappers)
  ├─ Permission Layer ── 在 MCP 调用前拦截
  └─ Observability   ── 记录 MCP tool call
MCP Server 按风险等级分类
类别典型工具风险默认策略
只读检索文档搜索、代码索引、网页抓取L0自动允许
只读数据数据库只读查询、API GETL0-L1自动允许,记录日志
文件写入文件创建、patch、草稿L1-L2写草稿自动,正式区需 diff
外部动作发邮件、创建工单、发布L3-L4强审批或人工确认
系统控制Shell、进程管理、部署L4必须人工确认
MCP 集成设计原则

白名单化(不自动接入所有 MCP server):

{
  "mcp_servers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
      "permission_level": "L2",
      "allowed_paths": ["/workspace/drafts", "/workspace/notes"],
      "forbidden_paths": ["/workspace/secrets", "/workspace/production"]
    }
  }
}

权限检查在 MCP Client 层:

  1. MCP server 是否在白名单?
  2. 调用的 tool 是否在允许列表?
  3. 参数是否在允许范围内?
  4. 是否需要审批?
  5. 是否超过频率限制?
  6. 是否在变更窗口内?
MCP 安全五大风险
风险描述缓解
恶意 MCP server伪装成合法工具的恶意 server仅从可信源安装,校验签名
参数注入通过参数传入危险路径或命令参数白名单校验,路径规范化
权限提升MCP server 以过高权限运行最小权限原则,sandbox 运行
数据泄露MCP server 把敏感数据外传网络隔离,输出审计
Prompt injection外部内容通过 MCP 返回混入 system prompt外部内容降权标记,分层上下文

推荐的 MCP 最小安全集

  • MCP server 白名单
  • 每个 server 的 tool 白名单
  • 路径/域名/表名参数白名单
  • 只读 MCP 自动允许,写操作 MCP 分级审批
  • MCP tool call 全量审计日志
  • MCP server 运行在 sandbox / 受限用户
  • 未知 MCP server 默认拒绝

框架 Harness 成熟度

八个维度评估主流 Agent 框架的 harness 内置能力。H1 上下文管理 · H2 工具白名单 · H3 权限控制 · H4 执行控制 · H5 验证机制 · H6 状态记忆 · H7 观测审计 · H8 回滚恢复。每维度 0-3 分。

框架H1H2H3H4H5H6H7H8总分评级
Microsoft AF2233233119
Claude Code3332222118
LangGraph2223132217中高
Cursor3221321216中高
Devin2322311216中高
OpenAI SDK2212123013
Google ADK2212131012
CrewAI2212122012

框架选型决策树

· 需要 durable execution + 状态持久化?→ LangGraph

· 需要企业级权限 + 审计?→ Microsoft AF

· 主要做软件工程 agent?→ Claude Code / Claude Agent SDK

· IDE 内代码辅助?→ Cursor

· 多 agent 协作实验?→ CrewAI / AutoGen

· 快速原型,tracing 优先?→ OpenAI Agents SDK

框架之外:必须自建的部分

无论选哪个框架,以下能力通常需要应用层自建:

权限分级模型 文件系统安全 验证脚本 回滚机制 Eval Set 成本预算 审计报告

安全权限模型

Agent Harness 的安全问题不是"模型会不会听话",而是"系统有没有把危险动作关进边界里"。

核心原则

  • · 最小权限 — agent 只能做任务需要的最少操作
  • · 默认只读 — 任何写操作都需要额外授权
  • · 高风险动作审批 — L3/L4 操作必须人工确认
  • · 所有写操作可回滚 — 副作用前做 checkpoint
  • · 外部内容隔离 — 网页/消息不自动获得指令权限
  • · 密钥隔离 — 密钥与 agent 执行环境分离
  • · Control plane 需认证和授权

L0-L4 权限分级

L0只读(读文档、搜索、读文件)→ 自动允许
L1写草稿、生成临时文件 → 自动允许,记录日志
L2修改正式文件、patch 代码 → 需 diff + 可回滚
L3删除、批量改名、外部副作用 → 强审批
L4支付、发布、部署、生产变更 → 必须人工确认

Shell 安全

  • · 命令 allowlist
  • · 工作目录限制
  • · timeout
  • · 环境变量隔离
  • · 禁止访问 secret
  • · 写操作审批
  • · 输出压缩

禁止:任意下载并执行、未确认的 destructive command、生产环境默认可写。

Browser 安全

  • · 浏览器环境与控制面隔离
  • · localhost allowlist
  • · 外部页面内容不覆盖 system policy
  • · 下载进隔离区扫描后传出

风险:页面指令诱导 agent 泄露信息、访问 localhost、下载恶意文件。

MCP 安全

  • · MCP server 白名单
  • · 每个 server 独立权限
  • · 工具 schema 审计
  • · 禁止默认接入未知 MCP
  • · 高风险工具加审批
  • · 记录 server/tool/version

安全测试清单

agent 是否能读到不该读的文件?
agent 是否能写出 workspace?
agent 是否能删除正式文件?
agent 是否会执行网页里的恶意指令?
agent 是否会访问 localhost 控制面?
agent 是否会泄露密钥?
agent 是否能绕过审批?
agent 失败后是否能回滚?

合规框架映射与治理

来源:04_security_governance/compliance_governance.md

为什么 Agent 需要合规

Agent 不只又一个微服务。它具有特殊属性:自主决策(自行选择工具和参数)、工具调用(真实副作用)、上下文摄入(可能吞入敏感数据)、模型不确定性(相同输入可能不同输出)、记忆持久化(长期记忆可能保留敏感信息)。

合规不是给 harness 加锁,而是让 harness 有证据可查、有边界可守、有异常可追溯。

SOC 2 / GDPR / ISO 27001 / OWASP 映射

SOC 2(安全与可用性)→ Harness 对应

访问控制L0-L4 权限分级、工具白名单、RBAC
变更管理写操作 diff、审批门、rollback
审计日志trace、tool call log、run history、approval history
系统监控token cost 监控、失败率告警、异常动作检测

GDPR(数据保护)→ Harness 对应

数据最小化上下文压缩、Least Context Pattern、检索而非全量载入
访问权/删除权记忆可删除、可追溯、用户可查看
DPIAagent 上线前的风险评估 checklist

OWASP Top 10 for LLM → Harness 缓解

LLM01 Prompt Injection外部内容降权、上下文分层、system policy 不可覆盖
LLM07 Insecure Plugin工具白名单、MCP server 独立权限、schema 校验
LLM08 Excessive AgencyL0-L4 权限分级、审批门、最小权限
LLM09 Overreliance人工审批关键动作、验证层自动检查、置信度标记
Agent 上线前 Checklist(12 项)
□ 任务范围是否已限定?(禁止模糊的开放式任务)
□ 工具是否白名单化?(不接受任意 shell/API 调用)
□ 权限是否分级?(L0-L4 明确标注)
□ 写操作是否可回滚?(snapshot/diff/transaction)
□ 高风险动作是否有人工审批?
□ 是否有自动验证(test/lint/dry-run)?
□ 是否全量记录 tool call 和审批?
□ 是否有 token 预算和超限告警?
□ 记忆是否可追溯、可删除?
□ 是否有 eval set(至少 20 个历史失败样本)?
□ 外部内容是否降权处理?
□ 密钥是否与 agent 环境隔离?
Agent 三级管理 + 持续治理
级别定义管理要求
A 级:内部辅助只读 + 写草稿,无外部副作用基础 trace + 定期抽查
B 级:内部生产可修改正式资产,有内部副作用全量 trace + 审批门 + eval set + 月度审计
C 级:对外/关键业务发消息、支付、部署、访问敏感数据强审批 + 实时监控 + 周度审计 + 渗透测试 + 回滚演练

持续治理节奏:

  • 周度:review 失败任务、unsafe action attempt 趋势
  • 月度:eval set 回归、权限策略 review、成本趋势
  • 季度:权限模型演练、secret 扫描、MCP server 版本审计
  • 年度:全面安全审计、合规差距分析、harness 架构 review
合规不是事后补文档。Harness 的权限、trace、审批、回滚本身就是合规基础设施。设计 harness 就是在设计合规。

事故响应与复盘

来源:04_security_governance/incident_response.md

Agent 事故的特殊性

  • 事故可能是正确的 agent 行为,但约束不够:agent 按规则执行了不该执行的动作
  • 事故难以复现:模型非确定性 + 上下文依赖导致同一输入可能不同结果
  • 事故链长:一次错误的 tool call → 错误输出 → 下一个 agent 基于错误信息继续执行
  • 事故发现滞后:agent 静默写入错误内容,可能几天后才被发现

因此 agent 事故响应不只修复 bug,更要补 harness 的约束缺口

事故分级与响应流程
等级定义示例时效
P0 严重影响用户或生产系统误删生产数据、泄露密钥立即
P1 高写入错误正式内容,未外泄知识库幻觉写入1 小时内
P2 中操作失败、资源浪费token 超预算、循环重试24 小时内
P3 低边界问题,可自行修正格式不规范、引用遗漏下个迭代

处置七步:

  1. 隔离:暂停该 agent 的写权限,升级为只读模式
  2. 止损:回滚已知错误写入
  3. 取证:导出 run log、tool call、上下文版本
  4. 分类:确定事故等级和根因类别
  5. 修复:补 harness 约束,不单改 prompt
  6. 验证:在 eval set 上回归
  7. 恢复:逐步恢复 agent 权限
根因八分类
□ Context — 上下文污染、检索错误、来源过期
□ Tool — 工具权限过宽、参数校验缺失
□ Permission — 权限配置过松、审批门被绕过
□ Execution — Retry 策略错误、checkpoint 缺失
□ Verification — 验证规则不够、false negative
□ Model — 模型幻觉、推理错误
□ User Input — 任务描述歧义、参数缺失
□ External — 外部 API 异常、MCP server 异常
事故复盘模板
# Agent Incident Report
## 基本信息
- Incident ID: INC-2026-001 | 等级: P1
- Agent: knowledge_base_agent_v2
- 发现时间: 2026-06-22 14:30 | 发现方式: 用户反馈

## 事故描述 [简要描述发生了什么]
## 时间线
- 14:00 agent 开始 run_042
- 14:08 agent 生成草稿,引用不在来源中的 API
- 14:10 citation checker 未检测到(source_id 格式正确但内容不存在)
- 14:15 写入正式 notes → 14:30 用户报告错误

## 根因分析
- 主因: Verification — citation checker 只检查 source_id 格式,未校验真实性
- 次因: Human — 人工审批未逐条核实

## 修复
1. citation checker 增加 source_id existence 检查
2. 新增 eval case: "引用不存在来源时拒绝 commit"

## 教训: 验证不能只检查格式,要检查内容真实性
预防机制 & 就绪检查

六层预防:

  • Context:来源过期告警、冲突标记可见化
  • Tool:危险参数自动拦截、频率限制
  • Permission:定期越权测试、权限最小化 review
  • Execution:异常循环检测、token 预算硬限制
  • Verification:验证覆盖度监控、false negative 分析
  • Human:审批界面辅助信息、高风险二次确认

就绪检查:

  • □ 是否有 agent 紧急只读模式开关?
  • □ 是否知道如何回滚最近 N 次写入?
  • □ 是否有当前权限模型的文档?
  • □ 是否存储了最近 30 天的 run log?
  • □ 是否有值班人员知道如何暂停 agent?
  • □ 是否演练过 P0 事故响应?
Agent 事故响应不是"修 bug"。它是用每一次事故来发现 harness 的约束缺口,并把缺口变成新的验证规则。

如何基于 Harness 做 AI 应用

来源:05_app_blueprints/build_ai_app_with_harness.md

1. 先定义边界(不先问接哪个模型)
输入是什么?允许读取什么?允许写入什么?最终交付物是什么?哪些动作需要人工确认?错了怎么回滚?

示例:AI 知识库助手

  • 输入:网页、PDF、会议记录
  • 读取:来源库、历史笔记、项目上下文
  • 写入:草稿区、索引文件、标签
  • 禁止:删除原文件、覆盖来源、访问私密目录
  • 交付:结构化笔记 + 来源链接 + 待确认问题
2. 设计半自主流程 + 3. 工具白名单化

不要一开始做完全自由 agent。推荐固定流程 + 局部自主:

Intake → Classify → Extract → Synthesize → Verify → Approval → Commit

每一步都有输入、输出、失败处理。不要暴露底层任意权限,推荐工具:searchDocsreadSourcecreateDraftpatchDraftrunValidationrequestApprovalcommitDraft。每个工具都定义 name、description、input/output schema、permission level、side effect、timeout、audit。

4-6. 上下文分层 · 权限审批 · 验证层

上下文包:policy、task、retrieved_context、memory、tool_results、output_schema。每段资料必须有 source_id、title、url/path、timestamp、trust_level。

默认策略:读资料自动、写草稿自动、修改正式文件展示 diff 后确认、删除/批量改名强确认、发布/部署/发邮件必须人工确认。

按应用选验证:

代码助手test、lint、typecheck、build
知识库助手引用覆盖率、来源检查、冲突检测
数据分析助手SQL dry-run、指标口径、行数校验
内容助手事实核验、敏感词、平台格式
运维助手dry-run、变更窗口、权限检查
7-9. 状态回滚 · 观测评估 · 技术栈

每次 run 保存:run_id、task、status、steps、artifacts、tool_calls、verification、rollback。每次写操作保存 before snapshot、patch diff、after snapshot、rollback command。

至少记录:trace、tool calls、latency、token cost、model output、verification result、human approval result、failure reason。建立 eval set:简单任务、复杂任务、边界任务、恶意输入、历史失败任务。

推荐技术栈:前端 Next.js/React;后端 FastAPI/NestJS;Agent OpenAI SDK/LangGraph/Claude Agent SDK/Temporal;存储 Postgres/pgvector/Redis;观测 OpenTelemetry/Langfuse;沙箱 Docker/E2B/Firecracker。

10. MVP 清单

最小可上线版本:

  • 固定 5-7 步 workflow
  • 3-5 个白名单工具
  • 写草稿自动,正式写入人工确认
  • 一个自动验证器
  • 每步 trace
  • run history
  • 失败样本保存

不要在 MVP 做:

  • 完全自由 agent
  • 无限工具
  • 自动删除
  • 自动发布
  • 无审计的长期记忆

应用蓝图

四个典型 AI Agent 场景的落地蓝图。每个蓝图遵循同一模板:边界定义 → Workflow → 工具白名单 → 权限策略 → 验证层 → 失败处理 → Eval Set。

知识库 Agent

目标:网页、PDF、会议记录、代码片段 → 可追溯、可复用、可更新的结构化笔记。

边界:读取来源库+历史笔记 → 写入草稿区 → 人工确认后写入正式区。禁止删除原文件、覆盖来源、访问私密目录。交付结构化笔记 + 来源链接 + 待确认问题。

Workflow:intake_source → parse_source → extract_claims → generate_note_draft → link_related_notes → verify_citations → request_approval → commit_note

关键工具:addSource、readSource、searchNotes、createDraftNote、checkCitationCoverage、commitDraft。

权限:读 sources/notes 自动;写 drafts 自动;写 notes 需 diff 审批;删除来源禁止;批量重命名强审批。

验证:每个 claim 是否有 source_id;source_id 是否真实存在于 source_index;是否有重复笔记;是否覆盖旧文件;是否尝试删除原始资料。

Eval Set:20 个简单来源 → 20 个多来源冲突 → 20 个边界(格式损坏、超长文档、混合语言)→ 20 个历史失败任务。

代码审查 Agent

目标:对 PR/commit 做自动化第一遍机械检查,输出结构化 review comment,让人类 reviewer 专注设计和逻辑。

边界:读取 PR diff + 项目规范 → 生成 review comment(草稿,标记为 bot)→ 高风险发现人工确认后发布。禁止 approve、merge、push、修改代码。

Workflow:intake_pr → classify_changes → static_check(lint/typecheck)→ semantic_review → security_scan → test_review → style_convention → generate_review → [human_confirm] → post_review

Severity:high(安全漏洞/崩溃,block merge)→ medium(潜在 bug/性能)→ low(风格/文档)→ info(正面发现)。

验证:comment 是否指向真实文件和行号;severity 分级准确性(抽样);false positive 率;是否遗漏已知漏洞模式(eval set 回归)。

Eval Set:20 个已知漏洞 PR → 20 个正常 PR → 20 个边界(大 PR、二进制、merge commit)→ 20 个历史漏审 PR。

数据分析 Agent

目标:自然语言 → SQL 查询生成 → 只读执行 → 结果验证 → 结构化分析报告。

边界:读取 schema + 数据字典 + 只读副本 → 写入分析报告草稿。禁止写数据库、删除表、修改 schema、导出原始数据到外部。交付 SQL + 结果 + 解释 + 口径说明。

Workflow:intake_question → explore_schema → generate_query → dry_run_validate → execute_readonly → verify_result → explain_result → generate_report → [human_review] → commit_report

查询安全检查:只允许 SELECT/EXPLAIN/DESCRIBE;强制 LIMIT;超时 30s;只读副本连接;敏感字段标记审批。

验证:SQL 语法(EXPLAIN);行数合理性(预估 vs 实际偏差 < 20%);口径一致性;空值比例;异常值检测;时间连续性;结果可复现。

Eval Set:20 个简单聚合 → 20 个复杂 JOIN/窗口函数 → 20 个口径边界(去重、分母为零)→ 20 个异常输入(恶意 SQL、超大范围)。

客服 Agent

目标:辅助人工客服——自动分类、检索知识库、生成回复草稿、执行查询类操作。agent 处理机械部分,人工做判断和情感沟通。

边界:读取知识库 + 脱敏用户信息 + 历史工单 → 写入回复草稿 + 标签 + 内部备注。禁止直接发送回复、退款/补偿、修改用户数据、访问完整 PII。交付回复草稿 + 置信度 + 推荐动作。

Workflow:intake_message → classify_intent → assess_risk → search_knowledge → generate_draft → verify_draft → suggest_actions → human_confirm → [post_reply] → log_and_learn

风险评估:正常(一般咨询→可自动草稿)→ 敏感(支付/账户/隐私→强制人工发送)→ 紧急(安全/法律威胁→不生成草稿,直接升级)。

草稿验证:事实是否有 FAQ 来源;是否有未授权承诺(退款金额/时间);是否泄露敏感信息;语气是否与品牌一致;置信度低强制人工审批。

Eval Set:20 个 FAQ 覆盖咨询 → 20 个复杂故障 → 10 个投诉/情绪激烈(不应自动回复)→ 10 个 prompt injection → 10 个权限边界(尝试让 agent 退款)。

共同的设计约束

Draft First — 所有写操作先写草稿 Human Approval Gate — 高风险动作人工确认 Evidence-Bound — 结论绑定来源 Bounded Autonomy — 固定流程 + 单步自主 Failure-to-Eval — 每蓝图含 Eval Set

术语表

Agent能够基于目标、上下文和工具执行多步骤任务的软件实体。
Agent Harness围绕 AI Agent 的运行控制系统,负责上下文、工具、权限、执行、验证、观测和恢复。
Harness Engineering设计、实现、验证、维护和演化 Agent Harness 的工程方法。
ToolAgent 可以调用的受控能力,如搜索、读文件、写草稿、运行测试、查数据库。
MCPModel Context Protocol,外部工具和上下文以协议形式接入模型/agent。
Context Engineering设计模型上下文的工程方法,包括检索、压缩、排序、记忆和来源管理。
Guardrail约束 agent 行为或输出的机制,可以是规则、验证器、权限检查、人工审批或模型判别器。
Handoff一个 agent 或流程节点把任务和状态结构化交给另一个 agent 或节点。
Checkpoint在关键动作前保存状态,用于恢复和回滚。
Rollback当 agent 输出错误或副作用不符合预期时,把系统恢复到安全状态。
Trace一次 agent run 的完整运行记录,包括上下文、模型调用、工具调用、验证结果和 artifacts。
ArtifactAgent 运行中产生的可保存对象,如草稿、报告、diff、截图、引用表。
Human-in-the-loop人类在关键节点审批、纠错或补充上下文,是 harness 的正式组成部分。

来源与延伸阅读

来源:06_references/sources.md

核心概念

论文与研究

MCP 生态

观测与沙箱

优先阅读一手资料。第三方总结可理解趋势,但事实性表述应回官方文档、论文或安全团队原文。
10
架构层
13
设计模式
8
框架评估
4
应用蓝图