尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ornith-1.5-9B chat_template.jinja 逐行解析指南:工具调用与思考格式的完整设计原理

Ornith-1.5-9B chat_template.jinja 逐行解析指南:工具调用与思考格式的完整设计原理 Ornith-1.5-9B chat_template.jinja 逐行解析指南工具调用与思考格式的完整设计原理【免费下载链接】Ornith-1.5-9B项目地址: https://ai.gitcode.com/hf_mirrors/ornith-ai/Ornith-1.5-9BOrnith-1.5-9B 是一个 9B 参数的推理大模型仓库中的 chat_template.jinja 定义了它的聊天模板——即消息列表如何被组装成模型真正读到的提示词。本文逐段解析这份 150 行的 Jinja2 模板用新手也能懂的方式讲清工具调用tool call格式与think思考块格式的底层设计原理帮你理解大模型会调工具、会思考背后的提示词契约。一、为什么需要先懂聊天模板 可以把聊天模板理解为一位翻译官你在聊天界面看到的是用户消息、助手回复、工具结果这样的结构化列表而模型只能读一段纯文本。模板负责把前者翻译成后者同时规定模型必须遵守的书写格式。对 Ornith-1.5-9B 而言这份模板规定了两件关键的事助手回复默认先写一个think…思考块再给最终答案它是推理模型需要调用工具时用tool_callfunctionparameter的 XML 标签来点菜由推理框架vLLM / SGLang解析回标准 JSON 工具调用。模板本身在 chat_template.jinja 中单独维护了一份可读副本运行时真正生效的模板内嵌在 tokenizer_config.json 的chat_template字段里。二、总览150 行模板的 5 大职责行号范围职责一句话说明L1-L41内容渲染宏把文本、图片、视频统一渲染成占位标记L42-L66工具声明块有工具时注入tools说明与调用格式规范L67-L80多步工具校验确认消息里存在真实用户问题L81-L142主渲染循环逐条渲染 system / user / assistant / tool 消息L143-L149生成提示补上下一轮助手前缀和think开关三、分节逐行精讲3.1 多模态渲染文本、图片、视频统一处理L1-L41模板开头定义了一个宏render_content它先判断内容类型纯字符串原样输出结构化列表逐项检查——图片项输出图片开始/结束占位符视频项输出视频开始/结束占位符文本项直接拼出文字系统消息里出现图片/视频直接raise_exception报错从源头杜绝系统提示词夹带多模态的脏数据。配合 config.json 中的image_token_id/video_token_id可见Ornith-1.5-9B 是多模态模型模板里的占位符最终会被替换成视觉塔输出的图像/视频 token。若开启add_vision_id还会输出Picture 1:、Video 2:这样的编号方便模型在多图场景中指代第几张图。3.2 工具调用声明一份写在提示词里的调用契约L45-L66当请求带tools参数时模板会插入一段system文本# Tools You have access to the following functions: tools 每个工具的 JSON 定义 /tools紧接着是一份IMPORTANT格式规范明确要求函数调用必须遵循外层tool_call标签、内层function标签、参数逐个用parameter标签包裹的 XML 结构且必填参数必须给出。 这就是XML 工具调用格式的由来它比裸 JSON 更不容易被模型写坏推理框架再把它解析回 OpenAI 标准的tool_calls字段。3.3 多步工具校验为什么最后一条用户消息必须是真实问题L67-L80模板会从后往前扫一遍消息检查最后一条 user 消息是否只是纯粹的tool_response工具结果块。如果所有用户消息都只是工具结果、没有任何真实提问就抛出No user query found in messages.异常。设计意图很实用多步工具调用场景下模型必须先看到人的问题才能开始干活防止框架传错消息导致模型空转或输出格式漂移。3.4 思考格式think 块与 reasoning_contentL89-L126渲染 assistant 消息时模板会做三件事提取思考内容优先读message.reasoning_content字段若没有、但正文里混着think标签则手动把思考部分和正文拆开固定输出结构assistant头 think 思考内容 结束标签 正文保证训练与推理时的格式一致渲染工具调用把message.tool_calls逐个转成tool_call块参数是对象/数组时自动转成 JSON 字符串再放进parameter标签。这样服务端vLLM/SGLang用推理解析器就能把思考内容单独回填到reasoning_content字段、把 XML 调用解析成标准tool_calls实现思考与答案分流。3.5 结尾开关think 与 enable_thinkingL143-L149最后模板为新一轮助手回复补上前缀assistant再根据开关决定思考模式默认或enable_thinkingtrue只输出think让模型进入思考状态enable_thinkingfalse输出空的think块即开闸不放水直接跳到最终答案。这就是 Ornith-1.5-9B 既能深度推理、又能快速直答的底层开关。四、从模板到服务解析器如何对暗号 模板只是出题推理框架负责判卷。README.md 给出的启动命令里有两个关键参数运行时工具调用解析器思考解析器vLLM--tool-call-parser qwen3_xml--reasoning-parser qwen3SGLang--tool-call-parser qwen3_coder--reasoning-parser qwen3它们与模板里定义的tool_call、think标签一一对应模板教模型按这个格式写解析器按这个格式读。改模板时务必同步检查解析器否则会出现工具调用解析失败、思考内容串进正文等典型故障。五、相关文件速查表 文件作用chat_template.jinja聊天模板可读副本训练/评测时的格式来源tokenizer_config.json内嵌运行时真正生效的 chat_template 与特殊 tokentokenizer.json / vocab.json / merges.txt分词器词表与 BPE 合并规则config.json模型结构配置262K 上下文、多模态 vision 配置preprocessor_config.json / video_preprocessor_config.json图像 / 视频预处理参数README.md部署命令、采样参数与评测说明六、常见问题 ❓Q1可以修改这个模板吗可以。评测时官方就调整了 Qwen 聊天模板以保证训练与推理一致。修改后需同步更新 tokenizer_config.json 中的内嵌模板并确认推理框架解析器与新格式匹配。Q2为什么不直接把思考内容混在正文里分离成think独立块后服务端能把思考流单独放进reasoning_content字段前端可折叠展示、流式渲染正文保持干净也便于按先想后答的方式做评测。Q3enable_thinking关闭后还消耗思考 token 吗不会。模板直接输出空的think块模型跳过推理过程直答显著降低延迟与 token 开销适合简单任务。小结Ornith-1.5-9B 的聊天模板是一份提示词契约——think块定义思考、tool_call标签定义工具调用、tool_response块定义结果回流。读懂它就读懂了模型与框架之间最核心的那层协议。【免费下载链接】Ornith-1.5-9B项目地址: https://ai.gitcode.com/hf_mirrors/ornith-ai/Ornith-1.5-9B创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表