AI 老越权执行?5 个接口层组件把权限和流程锁死

5 min read

帮老大处理内部文件时,我发现最麻烦的不是模型不聪明,而是它把「帮我看看」这句话当成可以直接读整个数据库的指令。那次之后我开始琢磨,权限其实已经给够了,但模型不知道「到哪为止」。


真实场景里,问题通常卡在三个地方:用户输入藏着多重指令、工具调用时没有 scope 限制、执行完没有可追溯记录。靠 Prompt 收窄范围只能管一时,接口层面的显式守卫才更持久。

我判断这套做法在处理敏感文件或跨系统操作时效果最明显,但具体到你的产品还要看数据敏感度和用户量。


用户输入该怎么解析成固定 JSON?

把用户原始输入先扔进结构化解析器,要求返回固定 JSON,字段包含 intent、target、constraints。判断做对了的标准是:解析后的 JSON 里每个字段都有值,且 target 能对应到你系统里真实存在的对象。

操作位置:在 API 网关或第一层路由里加中间件。可以用任何支持 JSON Schema 的库,先定义好必填字段和敏感词黑名单。


上下文注入层如何把 token 控制在 30% 以内?

只把当前任务需要的上下文切片注入模型,而不是把整个历史一股脑塞进去。判断标准是:注入的 token 数是否小于原始上下文的 30%,且没有包含其他用户的 ID 或文件路径。

这里有个小坑:如果你的上下文来自多个数据源,建议在注入前给每条记录打上 owner 标记,防止跨用户泄露。

举个具体例子:原始上下文 10000 tokens,包含用户 A 的 10 条聊天记录和用户 B 的 3 个文件路径。注入时只保留用户 A 当前任务相关的 2800 tokens(intent 匹配部分),比例正好 28%,同时过滤掉所有其他用户 ID。


工具调用前怎么加权限白名单?

给每个工具单独声明允许的 action 和 resource scope,模型只能在白名单内选择。判断做对了的标准是:模型尝试调用未声明权限的工具时,系统直接返回 403 而不是执行。

操作位置:在工具注册表里加 permission 字段,调用前再做一次二次校验。建议先从邮件、文件读写这类高风险工具开始收紧。


逐步确认层

对任何写操作或高风险读操作,强制走「预览 → 用户确认 → 执行」三步。判断标准是:关键操作前是否生成了人类可读的执行计划,且用户有明确的「拒绝」按钮。


可追溯记录层

所有输入、上下文、工具调用、确认结果都写入结构化日志,并关联到用户会话 ID。判断标准是:能按用户 ID 在 5 秒内查出某次调用的完整决策链。


落地顺序建议

我验证过先做工具权限层和逐步确认层成本最低。建议第一周只改这两个,跑通后再补输入规范和日志。整个过程用户可能多等几秒,但能把越权风险明显降低。

可直接复制的检查清单(建议做成 Notion 模板或代码注释):

  • 输入是否强制包含「操作对象」和「预期结果」?
  • 工具是否都显式声明了 read-only / write 权限?
  • 写操作前是否生成可读计划并提供拒绝入口?
  • 日志是否包含模型决策依据而非仅最终输出?

FAQ

Q: 这 5 个组件是不是只适合复杂 Agent?
A: 不只适合。哪怕只是个简单的聊天总结功能,加上输入规范和记录层也能明显降低幻觉和越权风险。

Q: 实现这些组件需要重构现有代码吗?
A: 大部分可以做成中间件,先在 API 网关层加输入规范和日志,再逐步把工具调用收紧到权限白名单。

Q: 如果用户体验会变慢怎么办?
A: 把确认步骤做成可选的「快速模式」,默认只对写操作和跨域访问强制确认,平衡安全与效率。


你现在最想先把哪个组件加到自己的产品里?