1. 整体工作流程Function Calling 不是模型直接“执行代码”而是通过结构化输出告诉外部系统“我要调用什么工具、传什么参数”。完整流程如下系统提示词注入工具定义模型在对话开始时会被注入一份工具列表包括工具名称、描述、参数 schema。模型生成结构化调用当模型判断需要使用工具时它不会直接回答用户而是输出特定格式的标记。外部解析器拦截系统检测到模型输出了 Function Call 标记后会暂停生成解析出工具名和参数。真正执行工具后端根据解析结果调用真实的函数/API搜索、画图、读文件、执行代码等。结果回传工具执行结果被包装成新的消息再次喂给模型。模型继续生成最终回答模型拿到工具结果后再组织自然语言回复用户。2. 当前系统的具体格式在本系统中Function Calling 使用的是XML 风格标签 键值对参数格式如下XMLrun tool 工具名称 with 参数名1 is 参数值1 参数名2 is 参数值2示例调用网页搜索XMLrun tool web_search with query is Function Calling 实现原理 num_results is 10多工具并行调用支持同时调用多个XMLrun tool web_search with query is Function Calling run tool browse_page with url is https://example.com instructions is 提取核心内容3. 关键实现细节环节实现方式说明工具定义在系统提示词中以 JSON Schema 或结构化文本描述每个工具的名称、功能、参数类型触发条件模型根据用户问题和工具描述自主决定是否需要调用、调用哪个输出约束通过提示词严格要求模型必须用指定标签格式输出不能自由发挥参数解析后端用正则或 XML 解析器提取 tool_name 和各个 parameter错误处理如果参数格式错误或工具执行失败会把错误信息再返回给模型让它重试或换方案并行支持允许一次输出多个 invoke 标签系统会并行执行后统一返回结果4. 与其他常见实现的对比实现方式代表产品特点JSON ModeOpenAI, Claude模型输出纯 JSON系统解析 JSONXML / 特殊标签当前 Grok 系统、部分开源框架用标签包裹解析更鲁棒支持流式输出特殊 Token一些私有模型训练时加入专门的 function call tokenReAct 风格早期 Agent用自然语言写「Thought → Action → Observation」5. 核心设计思想模型只负责“决策”决定调什么、传什么参数。系统负责“执行”真正跑代码、调 API、访问网络。结构化输出是关键保证解析可靠避免模型胡乱输出导致执行失败。