LESSON · 11
给模型
套上
缰绳
Harness Engineering · 让 AI 真正能上生产。
能用
≠
够用
Demo 跑通是 5%,剩下 95% 是工程。
模型能力 · 四件套
- 理解 · 看懂输入:文本 / 图像 / 代码 / 数据
- 生成 · 产出输出:文本 / 代码 / 图 / 决策
- 推理 · 多步思考:规划、因果、反思
- 调用工具 · 走出沙盒:函数 / API / Shell / RAG
- 这四件套是模型的"原始马力"
Harness
=
缰绳
套在模型外面的工程系统:约束 + 验证 + 追溯 + 回退 + 沉淀 + 审批。
Harness 最佳实践流程 (点击节点高亮)
① 约束 · Constraint
- 边界:能做什么 / 不能做什么(白/黑名单)
- 预算:步数 / token / 时间 / 金额上限
- 资源:哪些工具能调、哪些目录能写
- 输入护栏:长度截断、敏感词过滤、注入防御
- 输出护栏:JSON Schema、内容审核、PII 脱敏
- → 越自由的模型,越需要明确的边界
② 验证 · Verification
- 语法验证:JSON / SQL / 代码可解析
- 规则验证:必填字段、值域、引用完整性
- 事实验证:引用是否在 RAG 检索结果里
- 测试验证:跑单测 / 仿真 / dry-run
- 双 LLM 互检:Critic 角色复核
- "信任但验证" — 验证失败 = 重试或回退
③ 追溯 · Traceability
- 请求级:trace_id 串起每一次调用
- 步骤级:每个 thought / action / observation 都存
- 引用级:答案的每一句来自哪段证据
- 版本级:模型版本 + Prompt 版本 + 工具版本
- 工具:LangSmith / Langfuse / Phoenix / 自建
- → 能"复盘"的系统,才能"改进"
④ 回退 · Fallback
- 重试策略:指数退避、max retries、温度抖动
- 降级方案:旗舰模型→中模型→规则脚本
- 断路器:连续失败 N 次熔断,避免雪崩
- 事务回滚:写库 / 发邮件等副作用必须可撤销
- 人工兜底:模型放弃时切到客服
- 回退 = 别让一次失败,毁掉整条流程
⑤ 沉淀 · Distillation
- 从日志学:失败模式归类、典型错误打标
- 更新 Prompt:把教训写进 SYSTEM
- 沉淀到规则:高频场景固化为代码
- 构建评测集:把 bug 变成回归用例
- 反哺微调:积累足够数据后做 SFT/DPO
- → 系统越用越聪明,而不是越用越混乱
⑥ 审批 · Approval
- 风险分级:只读 / 可逆写 / 不可逆写 / 高风险
- HITL · Human in the Loop:高风险操作必须人确认
- 审批链:金额阶梯 → 不同审批人
- 预览 + diff:让人看清"将要改什么"
- 审计留痕:谁在何时批准了什么
- 越自动化的系统,越需要"刹车手"
没 Harness vs 有 Harness
裸调模型
- Demo 5 分钟搞定
- 线上 5 天就翻车
- 错了不知道为什么
- 改不动也回不去
→
checklist
[ ] 输入 schema 校验
[ ] 输出 JSON 严格模式
[ ] 步数 / 成本 / 超时上限
[ ] trace_id 全链路追踪
[ ] 错误分类 + 重试 + 熔断
[ ] 高风险操作必须人审批
[ ] 失败用例进回归集
[ ] 模型 / Prompt / 工具的版本号
[ ] 仪表盘:延迟 / 成功率 / 成本
[ ] 红队评测 + 上线 A/B
实战:Pydantic 输出验证
# pip install pydantic openai
from pydantic import BaseModel, Field
from openai import OpenAI
class ReviewResult(BaseModel):
"""代码审查结果的结构化输出"""
issues: list[str] = Field(description="问题列表")
severity: str = Field(pattern="^(critical|major|minor)$")
suggestion: str
client = OpenAI()
resp = client.beta.chat.completions.parse(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "审查这段代码: def f(x): return x+1"}],
response_format=ReviewResult
)
result = resp.choices[0].message.parsed # 类型安全!
print(f"严重度: {result.severity}, 问题: {result.issues}")
实战:Langfuse 追溯(3行接入)
# pip install langfuse openai
from langfuse.openai import openai # 一行替换 import!
# 之后所有 openai 调用自动上报 trace
# 效果:每次调用的 prompt/completion/latency/cost 全部可视化
# 控制台:https://cloud.langfuse.com
client = openai.OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "hello"}],
metadata={"session_id": "user-123", "task": "greeting"}
)
# → Langfuse 自动记录 trace_id, 延迟, token 消耗, 成本
主流落地工具
- 编排 · LangGraph / Temporal / Restate
- 验证 · Guardrails / Pydantic / JSON Schema
- 观测 · Langfuse / LangSmith / Phoenix
- 评测 · Promptfoo / Ragas / OpenAI Evals
- 审批 · Slack/IM 审批机器人 + 自建工作流
模型管智能,
Harness 管可靠。
缺一不可。
AI 工程的两条腿
本课收获
模型四件套
约束 / 验证
追溯 / 回退
沉淀 / 审批
实战清单
回到门户 · 从今天起,给你的 AI 套上缰绳。