JEV - 告别提示词诗学:封闭题怎么设计
是非、单选和档位够当一门语言,前提是把业务拆成互不干扰的封闭题,并把状态压过故事。券发不发,留给代码里的阈值。

联合作者:folkbench.com (Folkbench 是面向 AI API、模型服务及相关站点的可复核评测与选择平台,依据已发布的服务资料、价格、可用性、延迟与证据窗口,帮助用户比较并选择使用路径。)
这一组共十篇:
- JEV - 关节不需要大脑
- JEV - 系统润滑剂:控制节点不再生成
- JEV - 从 BERT 到 Jev:分类回到一张分布
- JEV - 告别提示词诗学:封闭题怎么设计
- JEV - 反 Token 经济学:大厂为什么不先做
- JEV - 两个 demo:回来的只是一张分布
- JEV - 退出环路:置信度写进代码
- JEV - 能力过线之后,更聪明不再是卖点
- JEV - 直觉与理性:有些话不该问关节
- JEV - 从操作屏幕到只出概率
前半场的提示词像诗学。为了稳定拿到一个 JSON,人们写角色、写恐吓、写示例、写 XML。那是在无限的 token 组合里围堵。Jev 把围堵取消了。解空间在推理之前就收拢。你要设计的不是一句更好的咒语,是一份状态,加上几道互不干扰的封闭题。是非、单选、档位够不够当语言,取决于你肯不肯把业务拆到这三种形状里。
从围堵到问卷
[ 生成式 ]
提示词(角色、示例、格式约束) → 无限 token → 一段可能漂走的文本
[ Jev ]
state + 封闭题(Noul / Choice / Score) → 有限集合 → 一张分布
三种题把能问的话说死:
- 是非,Noul。要的是“是”的概率,用来卡一个临界。代码里再决定过不过阈值。它不是空值。
- 单选,Choice。选项事先给死,最多 255 项。每一项后面写清指什么。用来做意图和路由。
- 档位,Score。2 到 10 档,从低到高写成具体情形。用来表示程度,不用来发明新类别。
格式约束那一类提示词因此失效。剩下的手艺是状态怎么压,以及一道大题怎么拆开。
状态要压过故事
State 不听故事。原则是去掉修饰、把时序留清、把事实留住。
评估一个用户会不会离开,生成式写法常常是这样:
你是资深客服。阅读资料和对话,判断他是不是要退订,说明理由,输出 JSON。资料:张三,VIP3,注册两年。用户说功能又崩了,数据没了。客服说在修。用户说算了,告诉我怎么退款。
问题在角色句和语气词。模型要把注意力分给“你是专家”,输出还会被“算了吧”带着跑。
Jev 吃的是压过的状态:
{
"user_profile": {"tier": "VIP3", "tenure_months": 24},
"last_event": {"type": "system_error", "impact": "data_loss"},
"dialogue_history": [
{"role": "user", "intent": "complain", "content": "功能崩溃,数据丢失"},
{"role": "agent", "intent": "apology", "content": "正在修复"},
{"role": "user", "intent": "churn_explicit", "content": "询问退款,并说停止使用"}
]
}
原始对话可以留一句原文,但意图和影响要单独放出来。模型读的是一棵状态,不是一篇作文。
一道业务题拆成三问
“要不要发 50 元券”不是一道封闭题。里面叠了意图、火气、欺诈和成本。Jev 里一步到位会失败。拆成三道正交的题,券的政策留给代码。
state ─┬─ Choice 主意图
├─ Score 负面程度,1 到 5 档
└─ Noul 像不像薅羊毛
意图
单选。解空间写成:纯技术咨询、产品建议、故障投诉、恶意索赔。题干只问这一次交互的主意图,不问该不该赔。
[State]
{ ...已压缩的状态... }
[Question]
根据对话,这次交互的主意图是哪一类。
程度
档位。1 是疑问或轻微不满,3 是明确不满并要求解释,5 是极端情绪或已经提出退款、销户。不要只丢一个“1 到 5”给它。每一档写成情形。
[State]
{ ...已压缩的状态... }
[Question]
按下面的档评估负面程度。
1:疑问或轻微不满
3:明确不满,要求解释
5:极端情绪,或已经提出退款、销户
是非
Noul。把近 30 天的索赔次数放进 state,问这一次是否符合薅羊毛的特征。回来的是概率。过不过线,代码里写阈值。
[State]
{ ...状态,加上近 30 天索赔次数... }
[Question]
历史索赔次数大于 3,且这次故障影响为低。这一次是否符合薅羊毛特征。
代码只收分布
下游不再解析一段容易碎的 JSON。三种结果各自是一个数或一张表。业务条件留在函数里。
intent = jev.choice(
state=user_state,
options=["tech_support", "feedback", "complaint", "malicious"],
)
anger = jev.score(state=user_state, rungs=5)
fraud = jev.noul(state=user_state_with_history)
def handle_coupon(intent, anger, fraud):
if fraud.p_yes >= 0.9:
return "DENY_AND_HANDOFF"
if intent.top == "complaint" and anger.expected >= 4:
return "ISSUE_50_COUPON"
return "STANDARD_APOLOGY"
模型迭代时,输出的形状仍是这三种。格式崩溃不再是一条故障类型。确定性没有变成“模型永不分错”。确定性是:分错也分在你写好的格子里,分支仍然可以测试。
修辞退场
| 维度 | 生成式提示词 | Jev |
|---|---|---|
| 手艺 | 文采、示例、格式咒语 | 拆业务、压状态、划离散空间 |
| 解空间 | 开放 | 封闭:Noul / Choice / Score |
| 稳定 | 靠措辞和温度 | 靠结构,输出天生是分布 |
| 调试 | 改形容词、加语气、补例子 | 改状态的字段、把题目再拆正交 |
是非、单选、档位够当一门语言,当且仅当你把“接下来怎么办”拆到这三种里。拆不开的那一截,不是这门语言的失败,是它不该进关节。那一截留给会说话的模型,或者留给人。