AI 提示词模板怎么复用?用 Jinja2 检查缺失变量并生成固定格式

用 Jinja2 将固定任务要求与事实变量分开,检查顶层和嵌套缺项,生成可保存的提示词,并说明格式遵守与真实性仍需核对。

重复给 AI 下达同一种任务时,可以把固定要求写成模板,把任务事实当变量传入。Jinja2 能生成格式一致的提示词,并在缺少日期、项目名等关键变量时及时报错。下面用一份延期通知任务演示模板复用、缺变量检查和资料原样插入。

模板和事实分别负责什么

模板保存任务结构与需要核对的条件;变量保存每次不同的输入。示例使用四个顶层变量:task、audience、facts、output_format,其中 facts 内含 project 和 date。顶层变量齐全,仍可能缺少 facts.date,因此同时使用静态变量检查和 StrictUndefined。

AI 提示词模板怎么复用?用 Jinja2 检查缺失变量并生成固定格式

Jinja 默认的某些缺失值可以输出为空字符串,重要事实悄悄消失会使提示词含义变化。StrictUndefined 会让这类访问失败。它检查变量存在性,不会判断日期是否真实、联系人是否正确或任务能否完成;这些需要在输入表和后续结果里核对。

准备独立环境

示例在 Windows、Python 3.11.15 的本地 CPU 环境实际运行。新建空文件夹,将后面完整代码保存为 01-jinja-prompt.py,在该目录用 PowerShell 执行:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install Jinja2==3.1.6
.\.venv\Scripts\python.exe 01-jinja-prompt.py

最后一行在保存代码后执行。macOS 或 Linux 使用 ./.venv/bin/python。输出文件留在当前目录,先用教学样本核对;代码不调用大模型 API,也不修改你的原始业务文件。

完整代码:缺项停止,事实只插入一次

把完整代码保存为 01-jinja-prompt.py,运行后打开 rendered_prompt.txt,核对任务、受众、项目事实与输出格式四个部分;再查看删除日期后的拒绝结果。

from pathlib import Path
from jinja2 import Environment, StrictUndefined, UndefinedError, meta

# 可信的本地模板;资料变量只做一次插入,不作为模板再次执行。
source = '''任务:{{ task }}
受众:{{ audience }}
事实:项目={{ facts.project }};日期={{ facts.date }}
输出格式:{{ output_format }}
请只使用上述事实,缺少信息时列出待确认项。'''
env = Environment(undefined=StrictUndefined, autoescape=False)
required = meta.find_undeclared_variables(env.parse(source))
template = env.from_string(source)
data = {'task': '写延期通知草稿', 'audience': '项目联系人',
        'facts': {'project': '示例 {{7*7}} 项目', 'date': '2026-10-08'},
        'output_format': '标题、延期事实、待确认项三个段落'}
missing = required - data.keys()
if missing:
    raise ValueError('缺少变量: '+','.join(sorted(missing)))
prompt = template.render(**data)
Path('rendered_prompt.txt').write_text(prompt, encoding='utf-8')
print('required:', sorted(required))
print(prompt)
assert '{{7*7}}' in prompt  # 变量内容未被递归作为模板执行。
broken = dict(data)
broken['facts'] = {'project': '示例项目'}
try:
    template.render(**broken)
except UndefinedError:
    print('missing nested date: rejected')
else:
    raise AssertionError('缺失date没有报错')
print('saved rendered_prompt.txt')

meta.find_undeclared_variables 返回模板引用的顶层名称,适合提前发现 task 或 facts 缺失;具体嵌套字段由渲染阶段检查。这里故意缺少 date 的输入只用于展示错误处理,不会覆盖已生成的完整提示词。

实际输出与保存结果

required: ['audience', 'facts', 'output_format', 'task']
任务:写延期通知草稿
受众:项目联系人
事实:项目=示例 {{7*7}} 项目;日期=2026-10-08
输出格式:标题、延期事实、待确认项三个段落
请只使用上述事实,缺少信息时列出待确认项。
missing nested date: rejected
saved rendered_prompt.txt

输出应列出 audience、facts、output_format、task 四个顶层变量,日期缺失时显示 missing nested date: rejected;项目名里的 {{7*7}} 仍原样保留,没有变成 49。

项目名含有看起来像模板表达式的字符串,作为数据插入时仍是普通文本。不要把第一次渲染结果再送回 from_string 二次渲染,否则会改变这一边界。模板本身应是你维护的可信文件;本示例没有实现执行陌生模板的隔离环境。

固定格式如何真正用于 AI 工作

本教程生成的是固定结构的提示词文本,没有请求任何大模型;模板渲染成功不能证明模型会严格按指定格式回答,也不能证明事实本身正确。

将 rendered_prompt.txt 复制到你已获准使用的 AI 入口,先用一条任务完成试运行。收回答案后按标题、延期事实、待确认项三个部分核对,尤其检查模型有没有增添赔偿、交付承诺或未提供的原因。需要机器读取 JSON 时,还应通过 JSON 解析与字段约束单独验证,不能仅靠模板文字。

autoescape=False 用于本例的纯文本提示词。若把变量输出到网页 HTML,必须重新考虑 HTML 转义,不能把这一设置照搬到页面。模板版本与输入事实建议一起保存,出现内容变化时可以比较具体改动。

常见失败如何排查

UndefinedError 通常意味着缺少变量或嵌套字段。先查看模板引用的名称,再检查数据字典层级与拼写;不要把关键字段用默认空值补齐。模板本身出现语法错误时,修复花括号或控制语句后重新渲染。

本例的日期与项目全部是人工教学事实,没有进行真实延期沟通,也没有测试任何模型的回答质量。把它复用到合同、客服或通知任务前,应增加与你的实际任务一致的输入校验和人工核对。

官方资料与核对范围

资料读取日期为 2026 年 10 月 1 日。接口行为依照以下官方文档或项目说明核对,输出来自上述本地教学代码。

  • Jinja API:Environment、StrictUndefined 与元信息检查接口。
  • Jinja 模板说明:变量插入、模板表达式和纯文本渲染行为。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31804.html

赞 (0)
AI小管家的头像AI小管家
人声与伴奏怎么分离?用 Demucs 导出两轨并检查残留
上一篇 2小时前
AI 中文语料怎么做繁简转换?用 OpenCC 保留原文并核对地区词汇
下一篇 2小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部