【AI Agent 从入门到精通】第五章:AI Agent 的工具调用与工具设计:Function Calling 深度指南

张开发
2026/4/18 1:52:51 15 分钟阅读

分享文章

【AI Agent 从入门到精通】第五章:AI Agent 的工具调用与工具设计:Function Calling 深度指南
📌前置说明:本系列共 8 章,建议按顺序阅读。📖系列导航:第一章:AI Agent 是什么?一文讲清楚核心概念与架构第二章:AI Agent 的技术原理:LLM + 规划 + 记忆 + 工具第三章:主流 AI Agent 框架对比:LangChain、AutoGPT、AutoGen、LlamaIndex第四章:动手实现你的第一个 AI Agent(附完整代码)前言上一章我们实现了一个基础 Agent,但工具层面还比较简单。这一章,我们深入工具系统,搞清楚:Function Calling 的底层工作原理如何设计高质量的工具 API工具编排与依赖管理生产级工具的设计模式常见坑与最佳实践一、Function Calling 底层原理1.1 什么是 Function Calling?Function Calling(函数调用)是 LLM 与外部系统交互的核心能力。它本质上是让 LLM 输出一个结构化的工具调用指令,而不是普通文本。普通 LLM 回复: "北京今天的气温是 18 到 26 度,晴天。" Function Calling 返回(结构化 JSON): { "tool_calls": [{ "id": "call_abc123", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\": \"北京\"}" } }] }1.2 Function Calling 的完整流程用户输入 ↓ ┌─────────────────────────────┐ │ LLM + System Prompt │ ← 告诉 LLM 有哪些工具可用 │ + 可用工具 schema 定义 │ └──────────────┬──────────────┘ ↓ LLM 推理判断: "需要调用 get_weather" ↓ 返回 tool_calls JSON ↓ ┌──────────────────────────────┐ │ 开发者解析 tool_calls │ │ 提取 name + arguments │ └──────────────┬───────────────┘ ↓ 执行实际工具函数 get_weather(city="北京") ↓ 获得结果:"18-26°C,晴天" ↓ ┌──────────────────────────────┐ │ 将结果作为 tool 消息 │ │ 再次发送给 LLM │ └──────────────┬───────────────┘ ↓ LLM 生成自然语言回复 ↓ 返回给用户1.3 工具定义的 JSON Schema# 一个完整的工具定义(OpenAI 格式) tool_schema = { "type": "function", "function": { "name": "send_email", # 工具名称(必须:英文、唯一) "description": "发送电子邮件", # 描述(关键:LLM据此判断何时调用) "parameters": { "type": "object", "properties": { "to": { "type": "string", "description": "收件人邮箱地址" }, "subject": { "type": "string", "description": "邮件主题,不超过100字" }, "body": { "type": "string", "description": "邮件正文内容" }, "cc": { "type": "string", "description": "抄送邮箱(可选)", "default": "" # 默认值 } }, "required": ["to", "subject", "body"] } } }二、高质量工具设计原则2.1 原则一:description 是灵魂LLM 靠description来判断"什么时候该用这个工具"。描述越清晰,调用越准确。❌ 差的描述: "获取天气信息" ✅ 好的描述: "获取指定城市的当前天气和未来24小时预报。 当用户询问天气、穿衣建议、是否适合出行时使用。 返回:温度、湿度、风力、空气质量、穿衣建议。 输入:城市名称(中文或英文

更多文章