0%

Function Calling 实战:让 AI Agent 安全调用外部工具

Function Calling 是 AI Agent 从“会聊天”走向“能做事”的关键能力。模型通过函数调用访问天气、数据库、Git、Jenkins、飞书、Kubernetes 等外部工具,才能真正进入业务流程。

但企业场景下,工具调用不是简单暴露几个 API。它必须包含权限、参数校验、审计、错误处理和人工确认机制。

1. 基本工作流程

1
2
3
4
5
6
7
8
用户请求
-> LLM 理解意图
-> 选择工具
-> 提取参数
-> 权限判断
-> 执行工具
-> 返回结果
-> 记录审计日志

其中最容易被忽略的是“权限判断”和“审计日志”。没有这两层,Function Calling 很难进入生产环境。

2. 工具定义

一个好的工具定义至少包含:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name": "get_weather",
"description": "查询指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,例如北京、上海"
}
},
"required": ["city"]
}
}

工具描述要清晰,参数要明确,边界要写出来。否则模型会误选工具或生成错误参数。

3. 参数提取与校验

3.1 显式参数

1
2
用户:部署 myapp 到 production,3 个副本
-> app_name=myapp, namespace=production, replicas=3

3.2 隐式参数

1
2
用户:查下北京天气
-> city=北京, tool=get_weather

3.3 参数校验

1
2
3
def validate_params(schema, params):
jsonschema.validate(instance=params, schema=schema)
return params

校验不只是类型检查,还应包含:

  • 枚举值;
  • 路径白名单;
  • 数值范围;
  • 字符串长度;
  • 是否包含敏感信息;
  • 是否需要人工确认。

4. 权限分级

建议把工具分成四类:

类型 示例 策略
只读工具 搜索、查询天气、读取状态 可自动执行
低风险写工具 创建草稿、生成报告 限定目录/范围
高风险写工具 发消息、部署、删除文件 必须确认
禁止工具 导出密钥、破坏系统 直接拒绝

企业 Agent 平台不应该让模型自由调用所有工具。

5. OpenClaw 技能系统实践

OpenClaw 的技能可以看作 Function Calling 的工程化封装:

1
2
3
4
5
6
7
8
9
10
11
# k8s-deploy 技能

用途:部署应用到 Kubernetes
参数:
- app_name: 应用名称
- namespace: 命名空间
- replicas: 副本数
安全策略:
- production 命名空间必须人工确认
- 只允许指定 kubeconfig
- 记录部署日志

技能不仅描述“怎么执行”,还要描述“什么时候不能执行”。

6. 错误处理

1
2
3
4
5
6
7
8
try:
result = execute_tool(tool, params)
except PermissionDenied as e:
return f"权限不足:{e}"
except ValidationError as e:
return f"参数错误:{e}"
except ToolError as e:
return f"工具执行失败:{e}"

好的错误信息应该让用户知道:

  • 哪个工具失败;
  • 为什么失败;
  • 是否可重试;
  • 是否需要补充参数;
  • 是否需要人工审批。

7. 审计日志

每次工具调用都建议记录:

  • 用户请求;
  • 工具名称;
  • 参数摘要;
  • 权限决策;
  • 执行结果;
  • 耗时;
  • 错误信息;
  • 是否人工确认。

审计日志是企业 AI Agent 安全治理的基础。

8. 架构师点评

Function Calling 的本质是把模型接入现实系统。它带来的不是“多一个 API 调用”,而是权限、安全、审计、可靠性和责任边界问题。企业落地时,工具调用层应该像网关一样被设计,而不是像 demo 一样随手注册函数。

真正成熟的 AI Agent 平台,工具调用一定是可配置、可审批、可观测、可回滚的。

9. 企业落地建议

建议按三步推进:

  1. 先接入只读工具,验证意图识别和参数提取;
  2. 再接入低风险写工具,增加权限和审计;
  3. 最后接入部署、消息、工单等高风险工具,并加入人工确认。

需要设计企业 AI Agent 工具调用、OpenClaw 技能体系或安全审批流程,可以查看 企业 AI Agent / AI Coding 落地咨询AI Agent 专题

延伸阅读:工具调用如何进入 Agent Loop

Function Calling 解决的是“Agent 如何调用工具”,Loop Agent 解决的是“Agent 如何持续观察、调用、评估并决定下一步”。如果你要把工具调用升级为可控自主智能体,可以继续看 Loop Agent 设计最佳实践