当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > AI Agent 工具权限分级实战:读、写、发布三类操作怎么管

AI Agent 工具权限分级实战:读、写、发布三类操作怎么管

来源:17golang原创 2026-06-13 15:56:58 0浏览 收藏

AI Agent 一旦能调用工具,就从“只会回答问题”变成了“可以影响系统状态”。查询订单、修改资料、发送通知、发布内容,这些动作的风险完全不同。如果所有工具都用同一套放行规则,迟早会在权限边界上出问题。

摘要

本文给出一套轻量的工具权限分级方案:把工具按读、写、发布三类拆开管理。读操作可以自动放行;写操作需要确认关键参数;发布、删除、转账这类高风险操作必须二次确认,并写入审计日志。示例代码用 Python 描述路由逻辑,实际可以落到任意后端服务里。

适合人群

适合正在做 AI Agent、智能客服、数据助手、自动化运营后台的开发者。你不需要先上复杂平台,只要已有“模型输出工具名和参数”的基础流程,就可以按本文逐步加上权限层。

目录

  • 为什么工具要分级
  • 三类工具权限怎么划分
  • 运行时守卫流程
  • 一个简单的路由示例
  • 常见坑和上线检查

为什么工具要分级

很多团队第一次接入 Agent 工具时,会把重点放在“模型能不能正确选工具”。但上线后真正麻烦的往往是另一个问题:模型选对了工具,但调用时机、参数范围、影响对象没有被管住。

例如下面三类动作,风险明显不同:

  • 读取数据:查询订单状态、搜索知识库、读取配置。
  • 修改数据:更新用户备注、调整工单状态、写入标签。
  • 对外发布:发送邮件、发布文章、删除资料、触发付款。

如果把它们都当成普通工具,Agent 的一次错误判断就可能从“答错一句话”升级成“写错数据或发错内容”。

三类工具权限怎么划分

更稳的做法是把工具权限变成显式配置,而不是散落在各个工具函数里。下面这张图展示了一个简单分层:读操作走绿色通道,写操作进入确认,发布类操作走更严格确认,所有结果都写日志。

AI Agent 工具按 READ WRITE PUBLISH APPROVE LOG 分级治理的流程图

可以先从一张配置表开始:

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 层先知道每个工具的风险级别。后面再叠加用户身份、业务状态和人工确认,就会清晰很多。

运行时守卫流程

工具真正被调用前,建议至少经过五步:参数结构检查、风险判断、人工确认、工具调用、审计记录。不要让模型输出一段工具参数后直接进入业务函数。

AI Agent 工具调用前经过 SCHEMA RISK APPROVE CALL LOG 并可 REJECT 的守卫流程图

每一步的目标很明确:

  • 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 这条守卫流程,就能在不牺牲太多效率的前提下,把线上风险压低很多。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Python zipfile 批量打包实战:保留目录结构、过滤临时文件和写入校验Python zipfile 批量打包实战:保留目录结构、过滤临时文件和写入校验
上一篇
Python zipfile 批量打包实战:保留目录结构、过滤临时文件和写入校验
Postman 环境变量与 Tests 断言实战:一套请求切换开发、测试、生产
下一篇
Postman 环境变量与 Tests 断言实战:一套请求切换开发、测试、生产
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • MiMo Code - 小米大模型团队开源的新一代 AI 编程助手
    MiMo Code
    MiMo Code 是小米大模型团队开源的新一代 AI 编程助手,面向开发者提供代码理解、生成与辅助开发能力,适合作为 AI 编程工具收藏和体验。
    53次使用
  • TRAE Work - 字节跳动推出的 AI 原生工作台
    TRAE Work
    TRAE AI IDE | 国内首款 AI 原生集成开发环境,深度集成 Doubao-1.5-pro 与 DeepSeek 模型,支持中文自然语言一键生成完整代码框架,实时预览前端效果并智能修复 BUG。首创 Builder 模式实现需求到代码的自动化开发,兼容 Windows/macOS 系统,官网下载即用。
    78次使用
  • MeloLab - 一站式 AI 音乐生成与编辑平台
    MeloLab
    MeloLab 是一款 AI 音乐生成工具,可根据文本创意生成歌曲、人声、混音、分轨和背景音乐,适合创作者快速制作音乐素材。
    60次使用
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    8714次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    9125次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码