面试官问"Agent 上线后怎么保证它不乱来",就是在问 Harness。光答"用了 LangGraph"没用,要能说出运行期护栏的完整维度。
💡 答案要点
核心认知: Agent 能自主调工具之后,运行期必须有护栏(Guardrails),不能指望模型自觉。Harness(运行治理)就是这套护栏,五大维度:
| 维度 | 解决什么问题 | 落地手段 |
|---|---|---|
| 权限 | 谁能调什么工具、什么数据范围 | 工具白名单、最小权限 scope、用户/租户级授权 |
| 熔断 | 工具连续失败、调用超支 | 失败次数阈值、超时重试上限、成本/调用次数上限 |
| 上下文隔离 | 用户数据串号、上下文污染 | 每会话独立上下文、租户数据隔离、敏感信息脱敏 |
| 审计 | 出问题能追溯、能复盘 | 全链路日志、工具调用记录、决策理由(trace)落库 |
| 生命周期 | Agent 何时启动/停止/回收 | 会话超时回收、任务取消、资源释放 |
每个维度一句话定位:
- 权限:先问"这个工具这个 Agent 能不能调",拒绝要显式、要有审计;
- 熔断:先问"这个工具还靠不靠谱",连续失败就降级,别让 Agent 反复撞墙;
- 上下文隔离:先问"这份数据是哪个用户的",多租户场景串号是最高危事故;
- 审计:先问"这次执行到底发生了什么",没有审计就没有复盘和追责;
- 生命周期:先问"这个 Agent 会话什么时候该死",不回收就是资源黑洞。
一次请求经过 Harness 的时序:
用户请求 → 鉴权(权限:这个 Agent 能调哪些工具?)
→ 工具调用(熔断:该工具是否已熔断?超时/重试上限检查)
→ 数据读取(上下文隔离:会话上下文独立,租户数据隔离)
→ 全链路记录(审计:trace + 工具参数 + 结果 + 决策理由)
→ 任务结束(生命周期:释放会话资源,超时回收)面试话术:
"我把 Agent 运行治理拆成五个维度:权限管谁能调什么工具、熔断管工具靠不靠谱、上下文隔离管数据不串号、审计管能追溯、生命周期管资源回收。任何一个维度缺失,生产环境都会出事——没权限会越权,没熔断会重复撞墙烧钱,没隔离会串号,没审计出问题没法复盘,没生命周期会话泄漏。我的原则是:Agent 越自由,护栏越要硬。"