function calling 是模型根据用户输入识别意图并调用预定义函数的机制。需按五步实现:一、理解结构,确认平台支持及 json schema 格式;二、定义函数名、描述和参数 schema;三、通过 tools 参数传入请求并设置 tool_choice;四、解析 tool_calls 字段并校验参数;五、安全执行函数后以 tool_message 形式回传结果。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在使用大语言模型时希望它能主动执行外部操作,例如查询天气、发送邮件或检索数据库,则需要理解 Function Calling 的机制。以下是阅读相关文档并实现 AI 自动调用函数的关键步骤:
一、理解 Function Calling 的基本结构
Function Calling 是模型根据用户输入识别意图,并将参数填充后生成符合预定义格式的函数调用请求的过程。它依赖于开发者提前声明函数名称、描述和参数 schema,模型据此决定是否调用及如何组织参数。
1、查阅所用模型平台的官方文档,定位“Function Calling”或“Tool Calling”章节。
2、确认支持的函数定义格式,常见为 JSON Schema 形式,包含 name、description、parameters 三个必填字段。
3、注意参数类型限制,如 string、number、boolean、array 等,parameters 字段必须是 JSON Schema object 类型,不可为 null 或其他原始类型。
二、定义可被调用的函数
函数定义需以结构化方式传入模型请求,作为系统提示的一部分或工具列表。模型不会自行发明函数,仅从提供的定义中选择匹配项。
1、编写一个 Python 字典或 JSON 对象,包含函数名、简明功能描述、以及 parameters 字段下的属性定义。
2、为每个参数指定 type、description,必要时添加 enum、required 等约束。
3、确保函数名只含字母、数字和下划线,且不与保留关键字冲突。
三、构造符合要求的模型请求
模型需在消息序列中接收到函数定义,并在用户输入触发条件时返回 function_call 字段。请求体结构直接影响是否启用调用能力。
1、在 messages 列表中,将函数定义通过 tools 参数单独传入,而非拼入 system 消息。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
2、设置 model 参数为明确支持 Function Calling 的版本,如 gpt-4o、claude-3.5-sonnet 或 qwen2.5:72b-instruct-q8_0。
3、必须指定 tool_choice 参数为 auto、required 或具体函数名,否则模型默认不触发调用。
四、解析模型返回的 function_call 内容
当模型决定调用函数时,响应中会包含 tool_calls 字段(OpenAI 格式)或 content 中嵌套的 function_call 对象(部分开源模型格式),需程序主动提取并执行。
1、检查响应中是否存在 tool_calls 数组,若存在则遍历每个 item。
2、读取 item.function.name 与预定义函数名比对,防止未授权调用。
3、严格校验 item.function.arguments 是否为合法 JSON 字符串,避免 eval 或 json.loads 报错中断流程。
五、安全执行函数并注入结果回对话
函数执行结果需以特定格式返回给模型,使其能基于结果生成自然语言回复。该过程需隔离执行环境并控制超时与错误反馈。
1、使用 subprocess.run 或 sandboxed runtime 执行外部命令,禁止直接 exec 用户可控字符串。
2、将函数返回值构造成 tool_message,包含 role="tool"、tool_call_id 和 content 字段。
3、将 tool_message 追加至原始 messages 列表末尾,再次发起请求,使模型整合结果生成最终回答。










