要让豆包ai真正执行动作,必须启用function calling功能,完成声明function schema、显式启用tool_choice、解析tool_calls并回传tool_message的三步闭环。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让豆包AI真正帮你执行动作——比如查天气、发邮件、调用数据库,而不是只回答“我帮你查一下”,就必须启用Function Calling功能。它不是开关一开就自动运行的智能代理,而是需要你亲手写结构、主动触发、再手动接住返回结果的三步闭环流程。
声明合规的function schema
第一步是告诉豆包“你能调什么”,这一步必须严格按JSON Schema格式来,缺字段或格式错,API直接返回400错误,连请求都发不出去。
① 确保每个function对象包含且仅包含三个顶层字段:【name、description、parameters】,少一个就会报错。
② name只能是合法标识符:字母开头,只含字母、数字、下划线,不能有空格或横线(如get-weather ❌,get_weather ✅)。
③ parameters必须是完整object类型schema,必须显式写"type": "object"和"properties",不能省略;required数组里列出所有必填参数名,漏写会导致模型传参不全。
④ 别在parameters里嵌套anyOf/oneOf——豆包不支持,复杂逻辑得拆成多个独立function,否则解析失败。
这一步操作起来很简单,直接把下面这段复制进代码里改城市名就能跑:
{"name":"get_weather","description":"获取指定城市的实时天气","parameters":{"type":"object","properties":{"city":{"type":"string","description":"城市名称,如北京、上海"}},"required":["city"]}}
请求中显式启用tool_choice
就算你传了functions数组,豆包默认也当普通文本处理——它不会主动调用任何工具,除非你明确说“请调用”。
Doubao-Seedream-5.0-lite是字节跳动发布的最新图像创作模型。该模型首次搭载联网检索功能,能融合实时网络信息,提升生图时效性。同时,模型的聪明度进一步升级,能够精准解析复杂指令和视觉内容。此外,模型在世界知识广度、参考一致性及专业场景生成质量上均有增强,可更好地满足企业级视觉创作需求。
方法一:设"tool_choice": "auto",让模型根据用户问题自行判断是否调用及调用哪个函数。这是最常用的方式,适合开放问答场景。
方法二:设"tool_choice": {"type": "function", "function": {"name": "get_weather"}},强制指定调用某函数。适用于流程确定、无需推理的自动化链路,比如表单提交后固定查订单状态。
【注意:tool_choice设为"none"会彻底禁用所有function,哪怕你传了functions也没用】
解析tool_calls并回传tool_message
响应里出现tool_calls字段,才是Function Calling真正启动的标志;此时content通常为空或null,别误以为出错了。
第一步:检查response.choices[0].message.tool_calls是否存在且非空。
第二步:遍历每个tool_call,用tool_call.function.name匹配你声明的函数名,再用json.loads(tool_call.function.arguments)解析参数。
第三步:执行对应本地函数(如调用OpenWeather API),拿到结果后,必须构造role="tool"的消息体,包含tool_call.id和原始返回内容,再作为新消息发回API继续对话。
这一步漏掉,对话就断了——模型不会自动把结果塞进下一句回复里,你得亲手把它“交回去”。










