[具身智能-511]:大模型如何支持Function Calling(函数调用) 或结构化输出能力。
大模型支持 Function Calling函数调用和结构化输出本质上是通过“底层模型训练”与“上层工程约束”相结合来实现的。简单来说就是先通过训练让模型“听得懂”工具并“学会”输出特定格式再通过工程手段强制约束它“必须”输出完全合规的数据。以下是具体的实现原理及举例说明 1. 底层原理模型训练与约束解码指令微调让模型“听得懂”开发者会使用大量包含“函数定义”和“调用参数”的合成数据对模型进行微调。这让模型学会理解人类的自然语言意图并将其精准映射到预定义的函数名和参数上。约束解码让格式“绝对合规”这是确保 100% 可靠的核心黑科技。在模型生成文本Token的过程中系统会根据预定义的JSON Schema数据模式实时介入动态限制模型下一个能输出的字符。例如当 Schema 规定某个字段必须是数字时系统会直接屏蔽掉所有字母和符号的生成概率。这彻底杜绝了模型输出乱码、缺括号或字段拼写错误等常见问题。 2. 举例说明Function Calling函数调用Function Calling 的核心是让大模型充当“路由”它不直接执行代码而是输出一个标准的 JSON 指令告诉应用程序该调用哪个函数、传入什么参数。场景举例用户问“北京今天天气怎么样”第一步开发者向大模型注册工具清单在发起对话时开发者会通过 API 的tools参数向大模型描述当前可用的外部工具jsontools [ { type: function, function: { name: get_current_weather, // 函数名 description: 查询指定城市的实时天气, parameters: { type: object, properties: { location: { type: string, description: 城市名称如北京、上海 } }, required: [location] // 必填参数 } } } ]第二步大模型输出结构化的调用指令大模型理解用户意图后不会直接瞎编天气而是暂停生成回复输出一个包含函数名和参数的结构化对象json{ tool_calls: [ { id: call_12345, type: function, function: { name: get_current_weather, arguments: { \location\: \北京\ } // 提取出的参数 } } ] }第三步应用程序执行并回填结果你的程序捕获到这个指令去调用真实的天气 API拿到“北京今天是多云”的结果再把这个结果作为一条新消息role: tool喂回给大模型。大模型最终结合这个真实数据生成自然语言回复“北京今天天气多云气温适宜。” 3. 举例说明结构化输出JSON Mode结构化输出主要用于数据提取或固定格式回复确保大模型返回的文本可以直接被代码解析不需要复杂的正则清洗。场景举例从一段杂乱的文本中提取用户的姓名和年龄。实现方式在调用大模型时开启response_format参数并在提示词中明确要求输出 JSON。请求参数示例json{ model: qwen-flash, messages: [ { role: system, content: 请从用户文本中提取姓名和年龄并以JSON格式返回。 }, { role: user, content: 大家好我叫刘五今年34岁平时喜欢打篮球。 } ], response_format: { type: json_object } // 开启JSON结构化输出模式 }大模型的返回结果在约束解码的作用下模型会严格输出合法的 JSON 字符串不会包含任何“好的这是你要的数据”之类的废话或 Markdown 标记如 jsonjson{ 姓名: 刘五, 年龄: 34 }总结大模型之所以能支持这些能力是因为它在训练时被教会了理解工具和格式化的规范在推理时被工程手段如约束解码限制了输出格式并通过“暂停-执行-回填”的交互机制实现了与外部世界的精准联动。