CASE 01 / AGENT RUNTIME & GOVERNANCE
ToolGate 2.0:Agent 工具执行网关
让工具执行有授权,让模型规划有边界,让异常恢复有依据。
个人主导 · 规格、实现与验收;AI 辅助编码与测试
验收日期 2026-10-15 · 项目整体判定 PARTIAL:容器端到端与真实厂商模型两项未运行。以下数字来自本地离线运行,模型调用使用确定性桩与录制回放,不消耗真实 Token。
模型会决定调什么工具,这一步也需要边界。
Agent 发起工具调用后,仍要确定调用者权限、审批参数是否变化、目标是否产生副作用,以及网络异常后能否恢复真实状态。当模型参与「调哪个工具、用什么参数」时,还多了一类问题:它引用的依据是真的吗?参数合法吗?规划失败时,会不会被悄悄重试成第二次调价或第二次群发?
ToolGate 2.0 在原网关之上补了三层:受控的 LLM 运行时、带引用校验的 RAG 知识库、以及 30 条对抗评测。把「模型提议」和「系统执行」分开,并让两者之间的每一次判断都留下记录。
从模型提议到审计记录。
模型只能通过受控入口提议工具与参数;候选工具来自网关注册表,调用方无法自行添加。
提交前做 Schema 前置校验:多余字段、非法取值、身份类字段直接拒绝,不产生可提交参数。
服务端校验团队、角色与参数级策略:≤15% 自动放行,15%–30% 转人工审批,>30% 直接阻断,并叠加区域成本底线。
operation_id、执行 Claim 锁与幂等回执控制副作用;结果未知时保留 UNKNOWN,先对账再决定,不盲目重试。
结构化事件、风险标签、时间线与哈希链,事后能回答:谁批的、批的是哪组参数、实际执行了什么。
运行时与网关之间只走 HTTP:编排层不引用网关状态机,模型无法绕过授权直接触达执行器(有测试断言守住这条解耦)。用录制回放把模型交互固化成确定性数据,同一组用例可以离线重跑。
让「依据」可以被指出,也可以被质疑。
6 份运营规范(用户分层、分时定价与调幅红线、桩端指令与超时对账、工单补偿、幂等处置、审批矩阵)按标题层级切成 65 个确定性切片,切片 ID 可复现;检索用 BM25 关键词与向量余弦混合打分,典型查询 Top-1 命中 4/4。
引用要过三道校验:是否存在、是否过期、是否跨文档。编造的切片 ID 判为 unknown,跨文档引用判为 wrong_doc,两种情况都降级为「待人工复核」,并在结论里写明缺了什么。
这一层的边界:校验位于编排层 Guard,而不是网关的强制门禁——缺引用时只改了对外结论,参数仍会被提交,若网关判定放行则执行器照常执行。评测用例 O07/O08 正是这个缺口的实证,本轮没有修复;「引用真实但语义无关」需要 NLI 或第二个模型才能判断,尚未实现。
用 30 条对抗用例,衡量「有没有护栏」。
评测跑两种模式:Mode A 是裸模型直连工具,Mode B 走完整管线。CI 把三条断言写成硬门禁:拦截率必须 100%、合规放行率必须 100%、完整管线必须优于裸调;另有一项校验 66 个存量验收 ID 不缺失。存量 168 项测试也全部保留在 329 项里,源码哈希比对确认意外修改为 0。
说明:CI 工作流已写好,但这台机器上的项目目录不是 Git 仓库,尚未在远端跑过一次;「无依据幻觉率 0.1」只覆盖引用缺失或无效,不代表语义层面没有幻觉。
两个比「正常成功」更重要的异常。
审批参数被篡改
问题:请求与已审批内容不一致,而且这次拒绝尝试不应在审计里静默消失。
处理:记录 APPROVAL_ATTEMPT_REFUSED 后返回 409,审批保持 PENDING,不与正式拒绝混用。
体现:既检查执行是否被阻止,也检查状态与时间线会不会被误读。
目标已提交,但回包丢失
问题:请求超时不能证明目标没有执行;直接重试可能产生重复副作用。
处理:保留 UNKNOWN,通过目标回执对账;未知时 effect_count 记为 null,不用 0 暗示「确认未执行」。
体现:区分事实未知与执行失败,用证据恢复结果,而不是用文案掩盖异常。
把异常路径点开看。
交互模拟演示 · 使用预设数据,不连接真实后端。重点不是模拟"漂亮成功",而是让审批、结果不确定和审计解释都能被看见。
授权、执行、审计均完成
请求参数与审批指纹一致,工具执行得到确定回执。
事件时间线
- REQUEST_RECEIVED收到 operation_id=op-demo-001
- APPROVAL_VERIFIED指纹一致,进入执行
- TOOL_EXECUTED目标返回成功回执
- AUDIT_RECORDED写入结构化审计事件
这条路径可以进入正常完成态,因为授权、执行结果与审计记录彼此一致。
保留来源,也限定结论。
下方摘要来自历史全量运行(2026-09-15),保留运行编号、测试计数、时间与原摘要文件 SHA-256;2.0 增量的验收汇总(66 项 ID 完整性、138 个源文件哈希比对、30 条评测指标)随项目保存,可在面试中查看。
下载验收摘要 JSON ↓查看验收口径与原型限制
- 验收 ID、测试用例、断言是不同单位,不合并统计。
- 2.0 轮没有跑容器端到端(本机 Docker 未启动),也没有接入真实厂商模型,两项在汇总里记为 NOT_RUN。
- 并发防重锁是 Redis SETNX + 内存降级,释放锁不是单条原子命令;真正的防重由 SQLite 幂等唯一约束兜底。
- 哈希链用于发现篡改,不意味着不可篡改,也不承诺 exactly-once。
- 此站只展示案例,不对外开放网关、工具服务或审计后台。

