0%

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

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

写在前面:Function Calling 是 AI Agent 调用外部工具的核心技术。这篇文章详解 Function Calling 原理、工具定义规范和 OpenClaw 实战经验。


一、Function Calling 原理

1.1 工作流程

1
用户请求 → LLM 理解 → 选择工具 → 提取参数 → 执行工具 → 返回结果

1.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"]
}
}

二、OpenClaw 技能系统

2.1 技能定义

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

**用途**: 部署应用到 K8s

**参数**:
- app_name: 应用名称
- namespace: 命名空间
- replicas: 副本数

**执行**:
```bash
kubectl apply -f deployment.yaml
1
2
3
4
5
6
7
8
9

### 2.2 工具注册

```python
skills = {
"k8s-deploy": k8s_deploy,
"feishu-send": feishu_send_message,
"web-search": web_search,
}

三、参数提取技巧

3.1 显式参数

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

3.2 隐式参数

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

四、错误处理

4.1 参数验证

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

4.2 执行失败

1
2
3
4
try:
result = execute_tool(tool, params)
except ToolError as e:
return f"工具执行失败:{e}"

五、最佳实践

实践 说明
工具描述清晰 LLM 能准确理解
参数类型明确 减少提取错误
错误信息友好 便于用户理解
日志记录完整 便于调试

作者:John
创建时间:2026-02-28
文档版本:v1.0