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