ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何让 llama.cpp 的函数调用正常工作:从零跑通 tool_calls 为空的 3 个坑

如何让 llama.cpp 的函数调用正常工作:从零跑通 tool_calls 为空的 3 个坑 如何让 llama.cpp 的函数调用正常工作从零跑通 tool_calls 为空的 3 个坑【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp你给 Qwen2.5 配了天气工具它回了一句“北京今天晴天”——话很顺但返回里tool_calls字段是空的。先别怀疑模型llama.cpp 的函数调用function calling本身是好的根因在聊天模板没配对模型退回了聊天模式。 最小复现3 步拿到第一条 tool_calls拿二进制。克隆仓库编译一次得到可直接用的llama-servergit clone https://gitcode.com/GitHub_Trending/ll/llama.cpp cmake -B build cmake --build build --config Release -j带 jinja 启动服务。--jinja让服务端把消息和工具用 Jinja 模板一种小模板语言渲染成模型认识的文字是函数调用生效的前提./build/bin/llama-server -m qwen2.5-7b.gguf --jinja --port 8080发一条带 tools 的请求。接口是 OpenAI 兼容的只要tools数组非空模型应当回一条结构化调用curl -s http://localhost:8080/v1/chat/completions -d {tools:[{type:function,function:{name:get_weather,description:查询天气,parameters:{type:object,properties:{location:{type:string}},required:[location]}}}}],messages:[{role:user,content:北京天气怎么样}]}响应里finish_reason是tool、tool_calls有内容就说明跑通了。 关键开关拆解--jinja它决定服务端是否用模板渲染提示词。不启用或用--no-jinja关掉时请求里只要带tools就会被直接拒绝报错tools param requires --jinja flag模型根本看不到工具定义。--chat-template-file它指定用哪个模板文件包装消息默认读 GGUF 元数据里的模板。如果模型文件里没有支持工具的模板模型只知道“怎么聊天”、不知道“怎么开单据”即tool_calls。补一个--chat-template chatml或指向 models/templates/ 下的对应模板通常就能解决。 原理一句话模型像一个只认某一种面单格式的分拣员Jinja 模板是把你的 API 请求messages tools翻译成这种面单的打印机。格式对了它才会按规矩填“工具面单”tool_calls格式错了它照样跟你说话只是永远不写面单——这就是“回复通顺但 tool_calls 为空”的由来。 踩坑排查最常见的 4 个报错现象根因一行修法请求直接报tools param requires --jinja flag服务端未启用 jinja 渲染启动命令加上--jinja回复通顺但tool_calls为空GGUF 元数据里的聊天模板不支持工具模型处于聊天模式加--chat-template chatml或用--chat-template-file指向工具模板日志出现Chat format: Generic且 token 消耗偏高模板未被识别为原生格式回退到通用包装用--chat-template-file指定该模型的官方 tool_use 模板工具调用被输出成纯文本 JSON模板缺少工具槽位或 KV 缓存被极端量化弄坏了输出先在/props检查chat_template_tool_use字段避免-ctk q4_0这类极端量化发请求前可以先看/props接口确认当前模型是否带工具模板官方函数调用文档里还列了各模板对应的手写格式切换新模型时对着表核对一遍能少踩一半坑。【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表