<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>授权 on Simon Sun</title><link>https://fatflowers.github.io/zh/tags/%E6%8E%88%E6%9D%83/</link><description>Recent content in 授权 on Simon Sun</description><image><title>Simon Sun</title><url>https://fatflowers.github.io/images/social-card-v2.jpg</url><link>https://fatflowers.github.io/images/social-card-v2.jpg</link></image><generator>Hugo -- 0.155.3</generator><language>zh</language><lastBuildDate>Tue, 22 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://fatflowers.github.io/zh/tags/%E6%8E%88%E6%9D%83/index.xml" rel="self" type="application/rss+xml"/><item><title>一次 100 美元的 API，批准必须发生在模型外面</title><link>https://fatflowers.github.io/zh/posts/original-tech/agent-paid-call-authorization/</link><pubDate>Tue, 22 Sep 2026 00:00:00 +0000</pubDate><guid>https://fatflowers.github.io/zh/posts/original-tech/agent-paid-call-authorization/</guid><description>&lt;blockquote&gt;
&lt;p&gt;本文整理自与 ChatGPT 的一次讨论。讨论的出发点是：有一个很贵的 API，调用一次可能要 100 美元。这种调用不该由 Agent 自己决定要不要打，必须由人明确审核；审核结果 Agent 不能模拟，也不能伪造。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;普通对话框里的 “Yes” 解决不了这个问题。Claude Code 那种逐条权限确认，拦的是本地命令和文件写入，人就坐在同一台机器前。100 美元一次的外部 API 要的是另一条边界：人在模型碰不到的地方，对&lt;strong&gt;这一次、这一组参数、这一笔金额&lt;/strong&gt;签字，执行层只认这张签字。&lt;/p&gt;
&lt;p&gt;这件事更准确的名字是带外人工授权（out-of-band human authorization）。Human-in-the-loop 只说明“环里有人”，没有说明这个人的同意能不能被模型伪造。&lt;/p&gt;
&lt;h2 id="模型只能提出调用"&gt;模型只能提出调用&lt;/h2&gt;
&lt;p&gt;安全边界要拆成四段，而且后三段都不能跑在 LLM 里面：&lt;/p&gt;
&lt;div class="mermaid-wrapper"&gt;
&lt;div class="mermaid"&gt;flowchart TD
Agent["Agent / LLM&lt;br&gt;提出 expensive_api"] --&gt; Gateway["Authorization Gateway / MCP Server"]
Gateway --&gt; Policy{"Policy Engine&lt;br&gt;这笔请求是否允许进入审批"}
Policy -- "拒绝" --&gt; Deny["直接失败，不建审批单"]
Policy -- "需要人批" --&gt; Request["创建 approval_request&lt;br&gt;冻结 tool、参数、金额、request_id"]
Request --&gt; Pause["暂停，不调用 API"]
Pause --&gt; Human["独立 Approval Service&lt;br&gt;Web / App / Slack / 推送"]
Human -- "人批准" --&gt; Cap["签发一次性授权"]
Cap --&gt; Check["Gateway 验签、验绑定、验未使用"]
Check -- "全部匹配" --&gt; API["expensive API"]
Check -- "任一不匹配" --&gt; Deny
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;四段各自只做一件事：&lt;/p&gt;</description></item></channel></rss>