大语言模型从单纯的文本生成器演进为能够与外部世界交互的Agent,工具调用(Function Calling / Tool Use)是这一跃迁的核心能力。但当模型可以调用搜索引擎、数据库、代码执行器甚至支付接口时,安全问题便从"模型说错话"升级为"模型做错事"。2026年,随着MCP、A2A等Agent协作协议的普及,LLM工具调用的权限治理已成为AI工程的第一道防线。

一、工具调用为何成为新的攻击面传统软件的安全模型基于"用户身份+权限列表"。但LLM的工具调用引入了两个新变量:1. 自然语言意图的不确定性:用户一句"帮我清理一下服务器"可能被解析为删除日志,也可能被误解为删除关键数据。2. 多工具链的组合风险:单个工具 harmless,多个工具按特定顺序调用可能产生危险效果,例如先查订单再退款再发通知。OWASP for LLM 已将"过度代理权限"(Excessive Agency)列为关键风险。生产环境中,一次失控的工具调用可能导致数据泄露、资金损失或系统瘫痪。## 二、三层权限治理模型我们认为LLM工具调用的安全应由三层共同守护:### 1. 工具层:最小可用权限每个工具在注册时就应该声明自己的能力边界。python# tools/orders.pyTOOL_SCHEMA = { "name": "query_order", "description": "查询订单状态,仅支持读取", "read_only": True, "sensitive_fields": ["user_phone", "user_address"], "allowed_roles": ["customer_service", "admin"], "rate_limit": "100/hour", "required_approval": False}def query_order(order_id: str, user_context: dict): assert user_context["role"] in TOOL_SCHEMA["allowed_roles"] # 查询逻辑 return db.query(order_id).redact(TOOL_SCHEMA["sensitive_fields"])通过read_onlyallowed_rolesrequired_approval等元数据,系统可以在调用前做静态校验。### 2. 调用层:实时风控与人工确认对于写操作、敏感操作或高价值操作,应引入"人类在环"(Human-in-the-Loop)机制。pythonasync def execute_tool_call(tool_call, user_context): tool = registry.get(tool_call.name) risk_score = risk_engine.score(tool_call, user_context) if tool.required_approval or risk_score > 0.7: await approval_queue.request(tool_call, reason=risk_score) return {"status": "pending_approval"} if tool.read_only and tool_call.method != "GET": raise PermissionError("只读工具禁止写操作") return await tool.run(**tool_call.args)### 3. 模型层:意图理解与拒绝策略模型本身应该能够识别并拒绝恶意或超出权限范围的请求。pythonsystem_prompt = """你是一个客服助手,可以调用以下工具:query_order、refund_order。规则:1. 只有用户明确确认退款时才能调用 refund_order。2. 绝不向用户透露其他用户的订单信息。3. 如果请求涉及删除数据、修改配置、访问管理员功能,请拒绝并引导用户联系人工。"""## 三、MCP协议中的安全实践Model Context Protocol(MCP)正在成为Agent与工具之间的通用语言。一个安全的MCP Server应当:- 使用OAuth 2.1或mTLS进行身份认证- 在工具描述中明确声明副作用(side effects)- 支持能力协商(capability negotiation),客户端只能看到被授权的工具子集- 提供审计日志,记录每次调用的参数、结果和决策依据yaml# mcp_server_config.yamlserver: auth: type: oauth2 scopes: ["orders:read", "orders:write"] tools: - name: query_order scope_required: "orders:read" read_only: true - name: refund_order scope_required: "orders:write" approval_required: true## 四、审计与可观测性安全不是一次性配置,而是持续监控。关键指标包括:- 工具调用成功率与拒绝率- 高风险工具调用分布- 异常参数模式(如SQL注入、路径遍历)- 用户投诉与人工介入比例pythondef audit_log(tool_call, decision, latency_ms): logger.info({ "event": "tool_call", "tool": tool_call.name, "args_hash": hash_args(tool_call.args), "decision": decision, "latency_ms": latency_ms, "timestamp": utc_now() })## 五、总结LLM工具调用让Agent真正具备了行动能力,但能力越大,责任越大。最小权限、实时风控、人类在环、审计可观测,这四项原则应当成为每一个工具调用系统的默认配置。2026年的AI工程,不再只是让模型"能做什么",而是让模型"只能做该做的事"。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐