AI Agent 工具权限分级实战:读、写、发布三类操作怎么管
AI Agent 一旦能调用工具,就从“只会回答问题”变成了“可以影响系统状态”。查询订单、修改资料、发送通知、发布内容,这些动作的风险完全不同。如果所有工具都用同一套放行规则,迟早会在权限边界上出问题。
摘要
本文给出一套轻量的工具权限分级方案:把工具按读、写、发布三类拆开管理。读操作可以自动放行;写操作需要确认关键参数;发布、删除、转账这类高风险操作必须二次确认,并写入审计日志。示例代码用 Python 描述路由逻辑,实际可以落到任意后端服务里。
适合人群
适合正在做 AI Agent、智能客服、数据助手、自动化运营后台的开发者。你不需要先上复杂平台,只要已有“模型输出工具名和参数”的基础流程,就可以按本文逐步加上权限层。
目录
- 为什么工具要分级
- 三类工具权限怎么划分
- 运行时守卫流程
- 一个简单的路由示例
- 常见坑和上线检查
为什么工具要分级
很多团队第一次接入 Agent 工具时,会把重点放在“模型能不能正确选工具”。但上线后真正麻烦的往往是另一个问题:模型选对了工具,但调用时机、参数范围、影响对象没有被管住。
例如下面三类动作,风险明显不同:
- 读取数据:查询订单状态、搜索知识库、读取配置。
- 修改数据:更新用户备注、调整工单状态、写入标签。
- 对外发布:发送邮件、发布文章、删除资料、触发付款。
如果把它们都当成普通工具,Agent 的一次错误判断就可能从“答错一句话”升级成“写错数据或发错内容”。
三类工具权限怎么划分
更稳的做法是把工具权限变成显式配置,而不是散落在各个工具函数里。下面这张图展示了一个简单分层:读操作走绿色通道,写操作进入确认,发布类操作走更严格确认,所有结果都写日志。

可以先从一张配置表开始:
TOOLS = {
"search_order": {
"level": "read",
"desc": "查询订单状态",
"required": ["order_id"],
},
"update_ticket": {
"level": "write",
"desc": "更新工单备注",
"required": ["ticket_id", "note"],
},
"publish_article": {
"level": "publish",
"desc": "发布文章到线上",
"required": ["title", "content_id"],
},
}
这张表的作用不是替代权限系统,而是让 Agent 层先知道每个工具的风险级别。后面再叠加用户身份、业务状态和人工确认,就会清晰很多。
运行时守卫流程
工具真正被调用前,建议至少经过五步:参数结构检查、风险判断、人工确认、工具调用、审计记录。不要让模型输出一段工具参数后直接进入业务函数。

每一步的目标很明确:
- SCHEMA:检查工具名是否存在,必填参数是否齐全,类型是否合理。
- RISK:根据工具级别、用户身份、目标对象判断风险。
- APPROVE:对写操作和发布操作给出人工确认界面。
- CALL:只在通过前置检查后调用真实业务工具。
- LOG:记录请求、参数摘要、确认人、结果和时间。
一个简单的路由示例
下面代码演示一个最小可用的守卫层。它不会直接信任模型给出的工具调用,而是先拿配置表做检查,再决定是否放行。
from dataclasses import dataclass
from typing import Any
@dataclass
class ToolRequest:
user_id: str
tool_name: str
args: dict[str, Any]
def check_schema(req: ToolRequest) -> list[str]:
tool = TOOLS.get(req.tool_name)
if not tool:
return ["unknown tool"]
missing = [
name for name in tool["required"]
if name not in req.args or req.args[name] in (None, "")
]
return [f"missing {name}" for name in missing]
def need_approval(req: ToolRequest) -> bool:
level = TOOLS[req.tool_name]["level"]
return level in {"write", "publish"}
def need_double_check(req: ToolRequest) -> bool:
return TOOLS[req.tool_name]["level"] == "publish"
然后在路由入口里统一处理:
def route_tool(req: ToolRequest) -> dict[str, Any]:
errors = check_schema(req)
if errors:
return {
"status": "rejected",
"reason": "; ".join(errors),
}
if need_double_check(req):
return {
"status": "waiting_double_approval",
"tool": req.tool_name,
"args_preview": req.args,
}
if need_approval(req):
return {
"status": "waiting_approval",
"tool": req.tool_name,
"args_preview": req.args,
}
return {
"status": "allowed",
"tool": req.tool_name,
"args": req.args,
}
实际系统里,waiting_approval 可以进入后台确认页,waiting_double_approval 可以要求更高权限账号确认。确认通过后,再由后端服务调用真实工具,并把结果写入日志。
审计日志要记录什么
很多 Agent 问题不是当场发现的,而是用户反馈后才回头排查。所以日志不能只记“成功或失败”,至少要包含:
{
"user_id": "u_1001",
"tool_name": "update_ticket",
"level": "write",
"args_digest": "ticket_id=7788,note_len=24",
"approval": "approved",
"result": "ok",
"created_at": "2026-06-13T15:30:00+08:00"
}
注意不要把完整敏感内容直接写进日志。更推荐记录摘要、长度、对象 ID、确认状态和结果码,既能追踪,又能减少隐私泄露风险。
常见坑和上线检查
- 只校验工具名:工具名对了,参数也可能越权,必须检查对象范围和必填字段。
- 把确认交给模型:确认应该来自用户或后台人员,不应该让模型自己判断自己是否安全。
- 发布类操作没有二次确认:对外发送、删除、付款、上线发布都建议更严格。
- 日志里写入明文敏感信息:用摘要和对象 ID 代替完整内容。
- 没有失败兜底:被拒绝时要给出可读原因,而不是静默失败。
总结
AI Agent 工具治理的核心不是把工具接得越多越好,而是让每个工具的风险级别可见、可控、可追踪。先把 READ、WRITE、PUBLISH 三类操作分开,再加上 SCHEMA、RISK、APPROVE、CALL、LOG 这条守卫流程,就能在不牺牲太多效率的前提下,把线上风险压低很多。
Python zipfile 批量打包实战:保留目录结构、过滤临时文件和写入校验
- 上一篇
- Python zipfile 批量打包实战:保留目录结构、过滤临时文件和写入校验
- 下一篇
- Postman 环境变量与 Tests 断言实战:一套请求切换开发、测试、生产
-
- 科技周边 · 人工智能 | 4天前 | 人工智能 · GenAI · opentelemetry · 可观测性 · AI工程 · 人工智能 链路追踪 GenAI OpenTelemetry AI可观测性 LLM网关 Token统计
- AI 调用可观测架构:从散乱日志到 OpenTelemetry GenAI 字段统一
- 427浏览 收藏
-
- 科技周边 · 人工智能 | 1星期前 | 人工智能 · 前端流式输出 · AI聊天 · Fetch Stream · 前端 AI聊天 流式输出 ReadableStream TextDecoder Fetch Stream
- AI 聊天流式输出前端配方:用 Fetch Stream 实现逐字渲染和中断控制
- 448浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 4036次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 3754次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 3729次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 3917次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 3883次使用
-
- CodeGeeX for Jetbrains IDEs正式上线!
- 2023-01-17 284浏览
-
- 技术阿里云实现ocr批量图片和pdf文件表格图片转换excel文档/支持票据图片提取/普通图片文字提取处理
- 2023-01-18 387浏览
-
- 直播预告|FeatureStore Meetup V2
- 2023-01-10 328浏览
-
- 深入浅出特征工程 – 基于 OpenMLDB 的实践指南(上)
- 2023-02-25 426浏览
-
- 开源机器学习数据库OpenMLDB v0.4.0产品介绍
- 2023-01-10 147浏览

