跳到正文

意图识别 Prompt 设计要素?

大模型意图识别中 Prompt 模板的最佳实践与注意事项

原题:在基于大模型的意图识别任务中,如何设计有效的prompt模板?有哪些最佳实践和注意事项?

Prompt工程 · 百度真题

30 秒回答

  1. 明确角色定义和任务边界
  2. 设计结构化的输入输出格式
  3. 使用少样本示例(few-shot)提升稳定性
  4. 处理模糊意图和拒识策略

回答与解析

答案要点

  • 明确角色定义和任务边界
  • 设计结构化的输入输出格式
  • 使用少样本示例(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. 问法 1 · 场景切入

    假设你在做一个电商客服机器人,用户说‘我要退货’,但没说哪个订单、什么原因。你怎么设计prompt让它能把意图识别清楚,还能主动问用户补充信息?

  2. 问法 2 · 层层追问

    你一般怎么让大模型做意图识别?……用prompt对吧?那如果用户表达很模糊,比如‘看看那个’,你怎么保证模型不跑偏?……更进一步,你是怎么写prompt模板来稳定处理这种模糊情况的?

  3. 问法 3 · 直球架构

    设计一个基于大模型的意图识别prompt模板,要求能输出结构化JSON,包含意图、置信度、槽位,并且能处理模糊意图和拒识。你给出模板结构,并说明最佳实践和注意事项。

同模块相关题目