变量注入与默认值是什么
模板渲染是数据进入提示词的边界,也是做校验成本最低的位置:默认值、类型转换、空值策略与超长截断都在这里统一处理。放在这里做的好处是「一次处理、全局生效」——如果每个调用方各自处理变量,同一模板在不同入口的行为就会不一致。空值尤其要明确:静默渲染成空串时,模型会把「这项没要求」当成一种要求来执行。
基本信息
| 适用平台 | 应用侧模板引擎(Jinja2、Handlebars 等)或框架的提示模板机制 |
|---|---|
| 处理顺序 | 填默认值 → 类型转换 → 空值与长度防护 → 填充模板 |
| 空值策略 | 按字段决定报错、用默认值或允许为空,不静默变空串 |
| 长度策略 | 超长截断并记录原文长度与截断位置 |
典型使用场景
- 多入口共用模板:不同调用方传参习惯不同,靠渲染层统一规范化
- 可选配置项:风格、语言、输出格式缺省时使用默认值
- 批量任务:逐条处理时对超长输入截断,控制单条成本
- 枚举参数:非法取值在渲染前拦截,避免模型自行猜测
- 排障复现:记录渲染后的变量快照(脱敏后),便于还原问题现场
渲染前处理顺序(伪代码)
渲染前处理顺序(伪代码)
# vars = apply_defaults(raw) # 缺失项填默认值,必填项缺失直接报错
# vars = coerce(vars) # 枚举校验、列表展开、布尔与数字规范化为统一类型
# vars = guard(vars) # 空值策略与超长截断;截断处记录长度与位置
# prompt = fill(template, vars) # 填充;文本类变量放入数据区,不进入指令区
# 记录:变量名、长度、是否被截断(不含敏感内容),随请求日志留存
# 校验:渲染后做一次关键词与格式检查,确认必填段落没有缺失变量处理策略
| 情形 | 处理方式 | 不处理的后果 |
|---|---|---|
| 必填变量缺失 | 抛错并拒绝请求 | 模型按缺失信息自由发挥 |
| 可选变量为空 | 使用默认值或整段不出现 | 渲染为空串,被当作「无要求」 |
| 枚举取值非法 | 渲染前拦截并提示调用方 | 模型自行猜测含义 |
| 文本超长 | 截断并记录原文长度 | 挤占输出预留,回答被截断 |
| 类型不匹配 | 规范化或报错 | 模板拼接出畸形内容 |
文本类变量应渲染进明确的数据段(带分隔标记),不要拼进指令区:用户内容里出现指令样式语句时,模型会把它当成要求执行。
截断要留痕:记录原文长度与截断位置,样本变短导致结果异常时才有据可查。截断位置还应在提示中标注,避免模型把残句当作完整内容。