为纪念 35 周年:《Terminator 2: Judgment Day》将在全球影院重映
2026-07-13
2026-07-16 0
很多团队在做 AI Agent 原型时,最常见的接入方式是:把一把 API Key 写进环境变量、配置文件,或者 Agent 平台的密钥配置页,然后让 Agent 去调用模型、工具和业务接口。

在 PoC 阶段,这种做法确实快。几分钟能跑通,一个 Demo 能展示完整链路。
但一旦 Agent 进入多人协作、生产环境或半生产环境,长期 API Key 直接暴露给 Agent 就会变成明显的工程风险。原因不复杂:Agent 不只是“调用模型的程序”,它会读取外部输入、拆解任务、决定下一步动作、调用工具,甚至在失败后自动重试。它的执行路径不是固定代码路径,而是由模型判断、上下文和工具返回结果共同决定。
这意味着,过去给后端服务发一把固定 Key 的做法,不适合原样套到 Agent 上。
早期讨论大模型安全,重点多放在输出内容:有没有幻觉、有没有不合规回答、有没有被提示词注入诱导输出敏感信息。
但 Agent 的关键差异在于:它可以执行动作。
一个普通聊天机器人答错,影响通常停留在内容层。一个有工具权限的 Agent 答错后,可能继续执行:
因此,Agent 的风险不只取决于模型能力,还取决于它拿到了什么凭证、能访问哪些系统、能触发哪些动作。
举个常见场景:一个 Agent 被设计成“读取客户邮件并生成待办”。如果邮件里混入隐藏指令,例如诱导 Agent 忽略原始规则、调用某个外部接口、导出客户列表,传统系统会把邮件当数据,Agent 却可能把其中一部分内容当成指令。只要它手里的凭证权限足够大,这类间接提示词注入就可能从文本攻击变成真实动作。
这也是为什么 Agent 凭证治理不能只停留在“Key 是否加密保存”,还要关注“Key 允许 Agent 做什么”。
在工程实践里,长期 API Key 直接交给 Agent,通常会带来三类问题。
很多 API Key 一旦配置进去,就能访问一整个 Provider、一个账号池,甚至多个模型能力。对于一个只需要完成摘要任务的 Agent 来说,这种权限明显过大。
如果 Agent 只是做客服知识库总结,它不应该拥有代码仓库工具权限;如果它只是做报表解释,它不应该拥有原始敏感数据导出权限;如果它只是做测试环境任务,它不应该能触达生产侧动作。
权限边界越宽,提示词注入、工具误用、配置错误带来的影响范围就越大。
长期 Key 的默认假设是:调用方稳定可信,凭证可以长期存在。但 Agent 任务往往是临时的。
一次数据分析任务可能只需要 10 分钟,一次代码审查任务可能只需要半小时,一次工单分类任务可能只需要一个会话窗口。让这些任务长期持有可复用凭证,会扩大泄露后的风险窗口。
更现实的问题是,很多 Key 配上去以后没人再看。Agent 下线了,Key 还在;人员调整了,Key 还在;测试任务结束了,Key 还在。等到账单异常或者审计发现问题时,凭证可能已经存在很久。
Provider 后台通常能看到某个 Key 在某段时间用了多少 Token、多少费用、多少次请求。但这不等于 Agent 审计。
真正需要追踪的是:
如果审计只停留在 Key 维度,出现异常时只能看到“某把 Key 消耗异常”,而无法还原是哪条 Agent 任务链路导致的。
一种更适合 Agent 的凭证模型,是把长期真实 Key 收敛到控制面或安全凭证层,由执行链路按任务签发临时凭证或受限 Token。
可以把它理解成:Agent 不直接拿“总钥匙”,而是在任务开始时拿到一张“限时通行证”。这张通行证只在特定上下文里有效。
一个基本的策略对象可以包含以下维度:
subject:user: user_123agent: support_summary_agentproject: customer_service
scope:models: - text-summary-modeltools: - read_kb - create_ticketenvironments: - staging
limits:ttl_minutes: 30max_requests: 200max_cost: 50
controls:allow_write: falserequire_approval_for: - export_data - external_http_call
这个示例不是完整实现,而是表达一个核心思路:凭证不再只是“能不能调 API”,而是和身份、Agent、项目、工具、模型、预算、有效期绑定在一起。
这样即便某个 Agent 被误导,它也不能越过策略边界去访问无关工具;即便临时凭证泄露,凭证也会在短时间后失效;即便消耗异常,系统也能按项目、Agent、用户维度定位。
上线前做 Prompt 审查、工具列表登记、权限评审当然重要。但 Agent 的很多风险是在运行时发生的。
它读到了什么外部内容、工具返回了什么、模型如何解释下一步、是否触发重试、是否调用了额外 API,这些都无法在上线前完全枚举。
因此,更可靠的治理位置应该在调用链路上:
用户请求↓
Agent 任务编排↓
凭证校验 / 策略匹配↓
模型与工具调用↓
审计日志 / 成本事件 / 风险事件回流
在这个链路里,关键能力包括:
这种模式的重点不是增加开发负担,而是把治理能力放在 Agent 真正行动之前。
Agent 场景下,单纯记录 HTTP 请求日志不够。一次 Agent 任务可能包含多次模型调用、多次工具调用、多轮重试和多个中间状态。
更建议采用链路化审计,将一次任务拆成可追踪事件:
| 事件类型 | 需要记录的字段 |
|---|---|
| 任务创建 | user、agent、project、session、request_id |
| 模型调用 | model、provider、token、latency、cost |
| 工具调用 | tool、action、input_classification、result_status |
| 策略命中 | policy_id、decision、reason、risk_level |
| 凭证事件 | token_id、ttl、scope、revoked_status |
| 审批事件 | approver、decision、timestamp |
有了这些字段,排查问题时才不会只剩“某把 Key 消耗异常”这一条线索。
例如,某个任务成本突然升高,可以继续追到具体 Agent、具体用户、具体模型调用和工具重试次数;某个工具被异常调用,可以追溯是用户明确要求、Agent 自主决策,还是外部内容诱导。
安全系统最怕的不是发现风险,而是发现以后关不掉。
当某个 Agent 被提示词注入诱导异常调用,或者某个工具链路出现问题时,平台需要能快速执行几类动作:
这里的关键是“生效速度”。如果撤销动作只停留在控制台配置,但执行侧缓存长时间不刷新,实际止损就会滞后。比较理想的模式是:控制面更新策略,执行面在短时间内感知并拒绝后续调用。
AI Agent 的能力越强,越不能继续沿用“给一把长期 API Key,能跑就行”的接入方式。
更稳妥的工程路径是:
这套思路并不依赖某一种具体产品形态。无论是自建 Agent 平台、接入第三方模型,还是在云上做企业 AI 应用,只要 Agent 开始读取数据、调用工具、触发流程,凭证治理就应该从一开始进入架构设计。