编码 agent 申请折扣,谁有批准权?一个可运行的审批规则示例
审批规则只有在你能测试规则两侧时才真正有用:被禁止的动作被拒绝,被允许的决策留下证据。仅 happy-path 演示无法展示这个区别。
这是一个用 Accordo(开源框架,编码 agent 用来构建自定义 CRM)运行的可复现示例:一个合成客户想要 Enterprise Plan 的 30 个席位,申请 25% 折扣。现有策略允许 10% 以内自动批准;10% 到 50% 之间需要用户决策。
本地运行
需要 Git、Node.js 22.16+、npm。克隆并跑固定版本的 recipe:
git clone https://github.com/khaoss85/agent-crm.git framework-source
cd framework-source
git checkout 3b5b5f0c4c3e582e48d54501136024b064756daa
node --no-warnings examples/recipes/quote-approval/run.mjs ../my-quote-crm
脚本用固定源码(不依赖 npm scaffolder 发布版)起本地服务,通过公开 SDK 走 HTTP 驱动完整流程。
脚本断言的两条关键路径
- 拒绝:模拟 agent 的审批请求收到 HTTP 403
HUMAN_APPROVAL_REQUIRED。报价与审批保持 pending,不添加业务审计条目; - 决策:模拟用户批准后,报价变为 approved,含一条用户决策审计和完整 trace。提交的快照不变,一个报价版本、一条审批记录。
关键设计:拒绝也有失败 trace——记录一次不成功的尝试,不应该制造出一条成功的业务决策。在 receipt 里检查 agentRefusal、refusalTrace、decision、humanAudit、approvalTrace;sourceCommit 与 recipeSha256 标识所用实现。
实践建议
- 审批规则要有"拒绝留痕":403 + pending + 无审计条目,与"批准留痕"是可区分的两种状态;
- 策略阈值(如 10%/50%)要版本化冻结:提交时快照商业快照,账目可复核;
- 本地重放不能当真实验证:生产需要已验证身份和显式授权配置,sales-manager 审批 key 只是标签,不是已认证角色。
来源:A coding agent can request a discount. Who gets to approve it? - DEV Community