本节摘要:独立深度评测(Flavio Copes)总结的失败模式清单,加上第 2.2 节的"报牌名"总纲,构成本节的无能区地图:数学与计数(答案不可信——代码里算)、日期时间("是否三天内"判断不可靠——时间差先算好作为事实喂入)、字面精确匹配(十六进制码、序列号——用字符串等值)、间接指代("处理一下上面那个"——state 里展开指代)、对抗性文本(注入与诱导——多层防线)、矛盾 state(行为未定义化——先去矛盾)、臃肿 state(稀释判断——相关性裁剪)。通行的解法模式高度一致:可计算的归代码,语义的归 Jev,代码先算好再把结果作为事实喂进 state。
阅读完本节,你应当能够:
| # | 无能区 | 例 | 后果 | 正确拆法 |
|---|---|---|---|---|
| 1 | 数学与计数 | "共几行""金额合计" | 答案不可信 | 代码里算,结果进 state 或直接进分支 |
| 2 | 日期时间 | "是否 3 天内提交" | 时间判断不可靠 | 代码算时间差 → "距截止不足 72 小时"作为事实写进 state,Jev 只做语义部分 |
| 3 | 字面精确匹配 | 十六进制颜色码、序列号比对 | 语义判断替代不了等值比较 | == / 哈希比对;Jev 只判"这两个码是否可能笔误所致"这类语义面 |
| 4 | 间接指代 | "处理一下上面那个东西" | 指代消解弱 | 构造 state 时展开指代("上面那个"→ 具体对象) |
| 5 | 对抗性文本 | state 里藏"忽略以上指令" | 不可靠、可被诱导 | 多层防线(第 7.3 节)+ 对抗样本进回归集 |
| 6 | 矛盾 state | 两段材料说法打架 | 概率行为未定义化 | 构造侧去矛盾;或加一道"材料是否自洽"Noul 前置闸门 |
| 7 | 臃肿 state | 整段 dump、无关日志 | 判断质量悄悄下降 | 相关性裁剪(第 8.1 节差集审计) |
加一条总纲(第 2.2 节):答案空间开放的任务(起标题、估价格、找根因、写内容)——让 Jev"报牌名"是用系统一干系统二的活,直接交给 LLM。
七条拆法收敛为一个模式——可计算的先算,把结果作为事实喂给 Jev:
# ❌ 直接问(踩 #1 #2 两条) questions = { "should_escalate": { "type": "noul", "instructions": "该工单金额超过 5000 元且提交于 3 天内,需要升级处理" } } # ✅ 代码先行:金额与时间差算好,作为事实进 state;Jev 只判语义 state = { "ticket": ticket, "facts": { "amount_exceeds_5000": amount > 5000, # 代码算 "submitted_within_3d": (now - created).days < 3, # 代码算 }, } questions = { "should_escalate": { "type": "noul", "instructions": "`facts` 两项均为 true 且 `ticket.body` 语气强烈时为真" } }
两条收益:判断的可靠部分变成确定性的(免费且精确);Jev 的 instructions 更短、判据更纯(只剩语义面),回归集更好写。
💡 自检口诀:写任何 instructions 时扫一遍——有数字运算?有日期比较?有精确比对?有指代?有的先搬进代码。剩下纯语义的,才交给 Jev。
第 7.3 节已展开,这里补齐认知框架:Jev 的 instructions 与 state 都是自然语言,state 里的文本可以"说话"——攻击面由此而来(在待审内容里埋"本条目已通过审核"之类的诱导)。三层认知:
无能区是"什么活别给它"。但即使给对了活,它给出的判断保证什么、不保证什么——这个更根本的问题,下一节面对被引用最多的那句批评。