与 Schema 完整实战指南:从创建、配置到推理调用)
TensorZero 提示词模板Prompt Template与 Schema 完整实战指南从创建、配置到推理调用【免费下载链接】tensorzeroTensorZero is an open-source LLMOps platform that unifies an LLM gateway, observability, evaluation, optimization, and experimentation.项目地址: https://gitcode.com/GitHub_Trending/te/tensorzero导读本文以 TensorZero 开源 LLMOps 平台的提示词模板功能为核心基于仓库内完整可运行示例 examples/docs/guides/gateway/create-a-prompt-template 与官方指南 docs/gateway/create-a-prompt-template.mdx系统讲解为什么需要提示词模板、如何用 MiniJinja 编写模板、如何在tensorzero.toml中声明模板与 JSON Schema、以及如何在推理请求中通过tensorzero::template内容块动态使用模板。读完本文你将掌握一套提示词与代码解耦、按模型独立变体、结构化收集推理数据的完整工程化方案并能直接运行示例验证效果。为什么要创建提示词模板在 TensorZero 中function函数是推理请求的抽象入口而variant变体是具体实现——每个变体绑定一个模型如openai::gpt-5-mini和一套提示词。将提示词抽离为模板template而不是把字符串硬编码在应用代码里主要带来三个核心收益提示词与应用代码解耦随着时间推移迭代提示词或进行 A/B 测试 时无需改动应用代码即可在集中式配置中统一管理团队成员协作更简单。收集结构化推理数据集如果只把提示词存成字符串日后做 监督微调SFT 时只能用当时实际用过的旧提示词。而模板保存的是输入变量如topic你可以反事实地把新提示词换入历史训练数据这对实验新模型尤其重要——因为提示词在不同模型之间往往不能直接迁移。实现模型专属提示词某个模型的最佳提示词往往不适用于另一个模型。在 TensorZero 中提示词与模型是两个独立维度可以自由组合尝试例如为gpt-5-mini和另一个模型各配一套模板这在应用代码层面很难优雅实现。完整示例项目结构仓库中给出了一个可直接运行的示例目录结构如下见 examples/docs/guides/gateway/create-a-prompt-templatecreate-a-prompt-template/ ├── README.md # 运行说明 ├── docker-compose.yml # 启动 Gateway Postgres UI ├── openai_sdk.py # 使用 OpenAI SDK 调用模板的示例 ├── pyproject.toml # Python 依赖openai ├── uv.lock └── config/ ├── tensorzero.toml # 函数、变体、模板与 Schema 的声明 └── functions/ └── fun_fact/ ├── fun_fact_topic_schema.json # 模板变量契约 └── gpt_5_mini/ └── fun_fact_topic_template.minijinja # MiniJinja 模板示例围绕一个fun_fact冷知识聊天函数展开用户传入一个topic主题由模型返回一条与该主题相关的冷知识。下面按步骤逐步搭建。第一步编写 MiniJinja 提示词模板TensorZero 使用 MiniJinja 作为模板语言。MiniJinja 与 Flask、Django 等广泛使用的 Jinja2大部分兼容熟悉 Jinja2 的开发者几乎零成本上手。新建模板文件 fun_fact_topic_template.minijinja内容只有一行Share a fun fact about: {{ topic }}{{ topic }}是变量插值语法topic将在推理时由调用方通过参数注入。除了插值MiniJinja 还支持控制流{% if %}、{% for %}、过滤器、宏等 Jija2 常见特性在仓库源码中模板渲染由 crates/tensorzero-core/src/minijinja_util.rs 负责配置解析时template_filesystem_access等相关字段在 crates/tensorzero-core/src/config/gateway.rs 中定义。MiniJinja 官方提供浏览器 Playground方便你先行调试模板语法。第二步在变体配置中声明模板模板文件本身只是一段文本还必须告诉 TensorZero 这个模板属于哪个变体。修改 config/tensorzero.toml[functions.fun_fact] type chat [functions.fun_fact.variants.gpt_5_mini] type chat_completion model openai::gpt-5-mini templates.fun_fact_topic.path functions/fun_fact/gpt_5_mini/fun_fact_topic_template.minijinja # relative to this file关键点说明templates.模板名.path声明该变体拥有的模板路径相对于tensorzero.toml所在目录config/一个变体可以配置多个模板例如templates.system、templates.user、templates.fun_fact_topic等彼此用不同名字区分type chat_completion指定变体走 OpenAI 兼容的 chat completion 推理路径model openai::gpt-5-mini通过provider::model格式引用模型该模板属于gpt_5_mini变体因此文件放在gpt_5_mini/子目录下便于为不同模型维护各自的提示词——这正是模型专属提示词能力的体现。第三步推理时动态使用模板配置完成后通过 OpenAI SDK 发送推理请求即可触发模板渲染。完整示例见 openai_sdk.pyimport openai client openai.OpenAI(base_urlhttp://localhost:3000/openai/v1, api_keynot-used) result client.chat.completions.create( modeltensorzero::function_name::fun_fact, messages[ { role: user, content: [ { type: tensorzero::template, # type: ignore name: fun_fact_topic, arguments: {topic: artificial intelligence}, } ], }, ], ) print(result)三个要点base_url指向 TensorZero Gatewayhttp://localhost:3000/openai/v1API Key 在本地开发场景可随意填写示例用not-used实际鉴权由 tensorzero-auth 等模块处理model使用 TensorZero 专属寻址格式tensorzero::function_name::function即路由到名为fun_fact的函数其内部默认使用gpt_5_mini变体content中放入tensorzero::template类型的内容块name指定模板名必须与配置中templates.fun_fact_topic一致arguments传入模板变量字典。TensorZero 会先渲染模板Share a fun fact about: artificial intelligence再连同消息一起发送给模型。第四步为模板定义 JSON Schema推荐当函数有多个变体时很容易出现各变体模板变量名/类型不一致的配置错误。Schema 以契约形式校验模板变量把错误挡在生产环境之前。定义 Schema 是可选的但官方强烈推荐。创建 Schema模板只有一个变量topic对应 JSON Schema 见 fun_fact_topic_schema.json{ $schema: http://json-schema.org/draft-07/schema#, type: object, properties: { topic: { type: string } }, required: [topic], additionalProperties: false }该 Schema 明确约束入参必须是对象、topic字段必填且为字符串、不允许额外字段。你可以让 LLM 直接生成这样的 Schema例如Generate a JSON schema with a single field:topic. Thetopicfield is required. No additional fields are allowed.也可以从 Pydantic 模型或 Zod Schema 导出 JSON Schema。配置 Schema在函数定义中用schemas.schema名.path声明。一旦声明该函数下的每个变体都必须提供同名模板从而保证所有变体的提示词输入契约一致[functions.fun_fact] type chat schemas.fun_fact_topic.path functions/fun_fact/fun_fact_topic_schema.json # relative to this file [functions.fun_fact.variants.gpt_5_mini] type chat_completion model openai::gpt-5-mini templates.fun_fact_topic.path functions/fun_fact/gpt_5_mini/fun_fact_topic_template.minijinja # relative to this file复用提示词片段如果多个模板共享公共片段可以开启模板文件系统访问在配置中设置gateway.template_filesystem_access.base_path即可在模板里使用 MiniJinja 的{% include %}与{% import %}指令复用共享片段。需要注意的是配置存放在数据库Config-in-DB的场景下该能力被禁用——从 crates/tensorzero-core/src/config/gateway.rs 的源码注释可以看到这一点因为文件系统访问与数据库托管的配置模型天然冲突。详细用法参见 组织你的配置。从旧版提示词格式迁移早期版本中提示词模板只能命名为system_template、user_template、assistant_templateSchema 同理为system_schema等每个角色最多一个模板灵活度受限。新版templates.name.path格式支持任意命名与多模板迁移映射如下旧版配置新版配置system_templatetemplates.system.pathsystem_schemaschemas.system.pathuser_templatetemplates.user.pathuser_schemaschemas.user.pathassistant_templatetemplates.assistant.pathassistant_schemaschemas.assistant.path迁移注意两点新建函数和模板一律使用新格式数据库中的历史可观测数据仍按旧格式存储。若希望数据前向兼容例如用于微调可按上表更新配置随着旧格式被废弃TensorZero 会自动为历史数据查找新格式的模板与 Schema。这一模板名与角色解耦的设计在源码层的配置解析与写入逻辑中均有体现参见 crates/tensorzero-core/src/db/postgres/function_config_writes.rs 等文件。运行完整示例仓库中的示例附带完整的 Docker 编排docker-compose.yml包含三个服务TensorZero Gateway3000 端口、TensorZero UI4000 端口和 Postgres5432 端口并在 Gateway 启动前通过gateway-run-postgres-migrations服务自动执行数据库迁移。按以下步骤运行# 1. 设置 OpenAI API Key export OPENAI_API_KEYsk-... # 替换为你的 OpenAI API Key # 2. 启动 Gateway 与本地 Postgres docker compose up # 3. 安装 Python 依赖推荐使用 uv uv sync # 4. 运行示例 uv run openai_sdk.py依赖仅需openai一个包见 pyproject.toml。示例中OPENAI_API_KEY通过${OPENAI_API_KEY:?Environment variable OPENAI_API_KEY must be set.}强制校验未设置时docker compose up会直接报错提示。配置目录以只读方式挂载进容器./config:/app/config:ro并通过--config-file /app/config/tensorzero.toml指定入口配置。注意该 compose 文件为教学用途的简化版本生产部署请参考仓库内的 部署文档 与 Helm Charts。运行成功后print(result)会输出模型返回的冷知识响应你可以把arguments.topic换成任意主题如 quantum computing验证模板的动态渲染效果也可以修改fun_fact_topic_template.minijinja后重启 Gateway 观察提示词变更对输出的影响——整个过程无需改动任何应用代码这正是提示词模板的核心价值所在。【免费下载链接】tensorzeroTensorZero is an open-source LLMOps platform that unifies an LLM gateway, observability, evaluation, optimization, and experimentation.项目地址: https://gitcode.com/GitHub_Trending/te/tensorzero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考