意图识别 Prompt 设计要素?
大模型意图识别中 Prompt 模板的最佳实践与注意事项
原题:在基于大模型的意图识别任务中,如何设计有效的prompt模板?有哪些最佳实践和注意事项?
Prompt工程 · 百度真题
30 秒回答
- 明确角色定义和任务边界
- 设计结构化的输入输出格式
- 使用少样本示例(few-shot)提升稳定性
- 处理模糊意图和拒识策略
回答与解析
答案要点
- 明确角色定义和任务边界
- 设计结构化的输入输出格式
- 使用少样本示例(few-shot)提升稳定性
- 处理模糊意图和拒识策略
- 考虑多轮对话上下文继承
核心设计原则
1. 角色与任务定义
你是一位专业的用户意图理解助手。请分析用户输入,从以下类别中选择最匹配的意图:
[类别列表:查询、预订、投诉、闲聊...]
2. 结构化输出格式 强制JSON输出,方便下游解析:
{
"intent": "预订",
"confidence": "高/中/低",
"slots": {"时间": "明天", "项目": "酒店"},
"clarification_needed": false
}
3. Few-shot示例设计
- 每个意图类别2-3个典型示例
- 覆盖常见变体表达(口语化、省略主语、同义词)
- 包含边界case(如"帮我订个票"→需澄清是机票/火车票/电影票)
关键注意事项
| 问题 | 解决方案 |
|---|---|
| 意图漂移 | 添加反例:明确"不属于XX意图"的样本 |
| 多意图混合 | 设计主意图+子意图的层级结构 |
| 置信度校准 | 要求模型输出置信度,低置信度触发澄清对话 |
| 上下文继承 | Prompt中保留最近2-3轮对话历史 |
迭代优化建议
- 动态示例选择:根据用户画像/场景,从示例库中检索最相关的few-shot
- 负样本强化:定期收集误识别case,加入prompt作为反例
- 温度参数调优:意图识别任务建议temperature=0~0.3,保证输出稳定
口语版讲法(约4分钟)
- 这道题在问什么:让大模型稳定做意图分类,核心是模板设计
- 角色定义和结构化输出:给模型一个清晰的边界
- 少样本示例:怎么选例、怎么覆盖边界
- 落地风险:意图漂移、多意图、置信度
- 迭代优化:动态示例和负样本
这道题其实在问,怎么让大模型稳定地做意图分类,核心就是模板设计。模板不只是写几句提示词,它是你跟模型沟通的接口,决定了模型能不能准确理解任务边界。
先说角色定义。你不能只扔给模型一句话说“给我分个类”,要明确告诉它“你是一个用户意图理解助手,你的输出要严格遵守我给的分类体系”。我一般会这样写:你是一位专业的意图分析助手,请从以下类别中选择最匹配的,如果都不匹配就输出“其他”。类别列表我会列清楚,比如查询、预订、投诉、闲聊。这样模型就知道自己的职责范围,不会跑偏。
再一个是结构化输出。我强制要求模型输出 JSON,这样下游解析方便,也方便做校验。比如输出里要有 intent、confidence、slots,还有 clarification needed 字段。confidence 分高、中、低三档,低的时候触发澄清对话。这个格式本身也是对模型的一种约束,让它不能随便乱写。
接下来是少样本示例。这是提升稳定性的关键。每个意图类别我一般放 2-3 个示例,但要覆盖常见变体,比如口语化的“帮我订个票”和省略主语的“明天酒店”。还有边界情况,比如“帮我订个票”其实需要澄清是机票、火车票还是电影票,我会在示例里展示模型如何输出 slots 和 clarification needed。说白了,示例就是给模型打样,让它学会怎么处理模糊输入。
这里有个坑,就是意图漂移。模型可能看到相似表达就跳到别的意图去。我的做法是加反例,明确告诉模型“这个不属于XX意图”。比如“我想退票”如果意图列表有“投诉”和“退款”,示例里要展示“退票”属于退款而不是投诉。
多意图混合也是个常见问题。用户说“帮我查一下订单,顺便问问满减政策”,这就涉及两个意图。我一般设计层级结构,主意图是“查询”,子意图是“订单查询”和“政策查询”。或者让模型输出一个主意图加多个子意图,但这样复杂度高,我更倾向在模板里加一条规则:如果检测到多个意图,先输出主意图,然后触发澄清。
置信度校准很重要。模型输出低置信度的时候,不要硬猜,要主动问用户。我上线前会特别关注低置信度样本的分布,如果某个意图频繁低置信度,说明模板里的示例不够,或者意图定义太模糊。还有一个常见失败场景是,用户输入很短,比如“你好”,模型可能误判为闲聊。我会在示例里把这种边界 case 加进去,明确告诉模型“你好”属于闲聊,但如果是“你好,我想查订单”,就属于查询。
迭代优化方面,我倾向做动态示例选择。根据用户画像或场景,从示例库里检索最相关的 few-shot。比如用户是商家,就多放跟订单、库存相关的示例。还有一个关键点是负样本强化,定期收集误识别 case,加到 prompt 里作为反例。温度参数我一般设 0 到 0.3,保证输出稳定。
其实还有一个延伸点,就是模板的可维护性。业务方经常改意图列表,你不能每次都改 prompt,所以我会把模板跟意图列表解耦,用模板变量动态注入。但这样做有个风险,模型可能对新意图不熟悉,需要额外的示例。这个平衡怎么把握,我觉得值得深入讨论。
所以总结一下,我会把 prompt 模板设计看作一个系统工程,核心是角色定义、结构化输出、少样本示例,加上迭代优化。前提是你的分类体系要清晰,如果不清晰,模板写得再好也没用。我更倾向用少量高质量示例加动态选择,而不是堆大量示例,因为示例太多会让模型困惑。
关键一句:模板与意图列表的动态解耦,以及新意图注入时的风险平衡
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做一个电商客服机器人,用户说‘我要退货’,但没说哪个订单、什么原因。你怎么设计prompt让它能把意图识别清楚,还能主动问用户补充信息?
- 问法 2 · 层层追问
你一般怎么让大模型做意图识别?……用prompt对吧?那如果用户表达很模糊,比如‘看看那个’,你怎么保证模型不跑偏?……更进一步,你是怎么写prompt模板来稳定处理这种模糊情况的?
- 问法 3 · 直球架构
设计一个基于大模型的意图识别prompt模板,要求能输出结构化JSON,包含意图、置信度、槽位,并且能处理模糊意图和拒识。你给出模板结构,并说明最佳实践和注意事项。