服务启动前,检查对话模板结构
templ8c 将标准消息序列交给 Jinja 对话模板渲染,再检查预期角色标记、工具包装符和字段名。内置模板用于演示检查器自身的约定。
模板改动可能在应用代码未变时改变工具调用周围的文本。把消息样本与预期标记放在一起,可通过可重复本地检查发现结构差异。
- 覆盖多种角色 — 标准样本包括 system、user、工具调用与多轮输出。
- 指出缺失字段 — 每项差异包含字段、预期标记、观察文本和 PASS/FAIL。
- 读取本地配置 — TemplateLoader 从 tokenizer_config.json 提取 chat_template,供 check_source 检查。
ConformanceSpec 定义角色标记、工具调用要求和标准样本。TemplateLoader 读取内置模板或所选来源,Renderer 提供 Jinja 环境,Comparator 检查标记、包装符和名称是否出现,Checker 汇总字段级结果。
| 组件 | 职责 |
|---|---|
ConformanceSpec |
markers and message cases |
TemplateLoader |
Jinja source |
Renderer |
canonical message outputs |
Comparator |
field-level PASS / FAIL |
需要 Python 3.12+ 和 uv。模板检查不需要模型权重或推理服务。
git clone https://github.com/SuperMarioYL/templ8c.git
cd templ8c
uv venv --python 3.12
source .venv/bin/activate
uv pip install -e .示例基于内置 qwen3.8 模板创建本地 tokenizer_config.json,经实际加载器读取,再移除预期包装符重新检查。不下载上游模板。
.venv/bin/python examples/presentation_demo.pyTen checks pass for the bundled example; removing its wrapper creates two failing fields.
{"input": "bundled example", "passed": true, "checks": 10, "failed_fields": []}
{"input": "wrapper removed", "passed": false, "checks": 10, "failed_fields": ["tool_call_wrapper", "tool_call_wrapper"]}
Scope: repository-authored reference templates; no upstream model release or inference server tested.
完整命令与输出保存在 docs/demo-results.json. 输入和复现代码均随仓提供。
保留已有录制供参考;上方文字示例给出当前可复现的操作。
CLI 模型 ID 选择仓库定义的系列及别名。Python 本地产物用法为 source = TemplateLoader().load_from_tokenizer_config("tokenizer_config.json"),然后调用 Checker().check_source("qwen3.8", source)。查看 result.diffs 与 result.failed_count;只有具备权威依据时才修改预期约定。
.venv/bin/templ8c models
.venv/bin/templ8c render --model qwen3.8 --message "请查询天气。"
.venv/bin/templ8c check --model qwen3.8规范位于 src/templ8c/reference/specs.py。输入接受 chat_template 字符串或命名条目列表,列表形式取第一个模板。远程辅助方法获取仓库默认版本,不固定不可变修订;需要可复现时可先下载指定版本到本地。--server 仅打印提示,仍检查内置模板。
默认 check 将仓库编写的参考模板与配套规范比较。检查真实模型产物时,应加载其实际 tokenizer_config.json 并调用 check_source。内置检查成功不代表验证了上游模型版本。
| 路径 | 已实现职责 |
|---|---|
| Jinja source | render canonical messages |
| tokenizer_config.json | local template extraction |
| HF / ModelScope | explicit remote loader methods |
| Python API | check_source for custom templates |
| CLI | render / check / models |
- 比较器主要检查子串是否出现,不解析全部工具 JSON 语义,也不证明模板等价。
- 内置规范与系列名称是仓库样本,不是已经验证的上游约定。
- 推理服务探测尚未实现。模板 PASS 不能说明在线工具调用质量。
已实现本地渲染、参考约定、来源加载器和字段级比较。后续方向包括验证上游参考、深入结构比较和真实推理服务探测。
许可见 LICENSE. 反馈问题时请提供最小输入、执行命令和实际输出。
