跳到正文

意图识别 Prompt 最佳实践?

关键要素与最佳实践,覆盖少样本与思维链

原题:在进行大模型意图识别任务时,如何设计有效的prompt模板?请描述prompt设计的关键要素和最佳实践。

Prompt工程 · 百度真题

30 秒回答

  1. 明确角色定义与任务边界
  2. 设计结构化输入输出格式
  3. 运用Few-shot示例增强泛化
  4. 引入思维链或推理步骤

回答与解析

答案要点

  • 明确角色定义与任务边界
  • 设计结构化输入输出格式
  • 运用Few-shot示例增强泛化
  • 引入思维链或推理步骤
  • 考虑多轮对话上下文管理

核心设计框架

1. 角色与任务定义

  • 明确指定模型身份:"你是意图识别专家,负责将用户输入分类到预定义意图"
  • 清晰界定意图类别清单,避免歧义重叠

2. 结构化输入输出

输入:用户query + 可选上下文(历史对话、用户画像)
输出:JSON格式 {"intent": "类别", "confidence": 分数, "slots": 槽位信息}
  • 强制结构化降低解析失败率

3. Few-shot示例设计

  • 每个意图提供2-3个典型正例+1个边界反例
  • 示例覆盖常见变体:口语化、省略主语、同义表达

4. 推理引导(关键)

分析步骤:
1. 提取关键词和实体
2. 匹配最相近的意图定义
3. 检查是否满足该意图的必备槽位
4. 输出结果并给出置信度理由

5. 边界情况处理

  • 显式定义"未知意图"兜底类别
  • 设置置信度阈值,低置信度触发澄清追问

百度场景的特殊考量

  • 搜索场景:需区分信息型vs导航型vs交易型意图
  • 多模态输入:支持文本+图片的联合意图理解
  • 时效敏感:加入时间上下文感知(如"今天天气"vs"明天天气")

口语版讲法(约4分钟)

  • 点出意图识别prompt设计的本质
  • 角色定义与结构化输出
  • Few-shot与推理引导
  • 边界与兜底处理
  • 业务场景举例与风险

这道题其实问的是,你怎么让大模型在意图识别这个任务上,既听话又聪明。说白了,就是个引导和控制的问题,模型知道要干什么,也知道怎么输出,遇到边界情况还能处理。我一般会从几个层面来搭这个prompt模板。

先说角色和任务定义。这个不能含糊,你得明确告诉模型你是谁、要干什么。比如我会写‘你是意图识别专家,负责把用户输入分类到以下预定义意图里’,然后把意图清单列清楚,每个意图给个简短描述。这里有个坑:意图之间不能有歧义重叠。比如‘查订单’和‘查物流’,用户说‘我的东西到哪了’其实两个都沾边,你要么合并要么明确边界。

然后是结构化输出。我最常用的是JSON格式,比如 {"intent": "类别", "confidence": 分数, "slots": {}}。为什么强制结构化?因为模型自由输出容易飘,你解析起来也麻烦。结构化输出能大幅降低解析失败率,这在线上服务里特别关键。

再一个就是示例。纯文本描述意图模型可能理解不到位,我会给每个意图配2-3个正例,再加1个边界反例。比如‘查天气’的正例是‘今天北京天气怎么样’,反例是‘明天上海会下雨吗’,这个其实也是查天气,但带着时间地点偏移,算边界。示例要覆盖口语化、省略主语这些常见变体,这样模型泛化能力更强。

说到推理,引导模型走推理步骤特别重要。我通常会在prompt里写一个分析步骤:先提取关键词和实体,再匹配最相近的意图定义,检查槽位是否满足,最后输出结果和置信度理由。这样模型就不是瞎猜,而是有逻辑链条。你可以理解为让模型‘先想再答’,效果比直接输出好很多。

边界情况必须处理。我会显式定义一个‘未知意图’兜底类别,并在prompt里说‘如果都不匹配,输出unknown’。同时设个置信度阈值,比如低于0.6就触发澄清追问。低置信度不硬猜,而是反问用户,这在客服场景里能避免很多错误。

举个例子,在电商客服场景里,用户说‘我买的东西还没到’,这个query可能既属于‘查物流’也属于‘投诉物流慢’。prompt里我会让模型先判断有没有时间敏感词‘还没到’,如果有,优先归到‘投诉’类,同时提取订单号槽位。如果置信度低,就反问‘您是想查物流进度还是反馈配送问题?’。这样的设计能有效区分信息型vs交易型vs投诉型意图。

落地时有个前提:你的意图类别不能太细也不能太粗,太细模型分不清,太粗又没意义。常见失败场景是意图重叠没处理好,或者示例覆盖不全,导致模型在边界上反复横跳。上线我会特别关注低置信度样本的分布,定期补充边界示例。

其实这里还有个延伸点:当意图类别超过20个时,单纯靠prompt里的示例可能不够,我可能会考虑结合 Few-shot 微调或者用 Function Calling 来结构化输出,但代价是维护成本上升。所以我会把prompt设计看成成本与效果的平衡,不是所有场景都适合纯prompt,关键看业务对准确率和覆盖率的容忍度。

关键一句:当意图类别超过20个时,纯prompt可能不够,需结合微调或Function Calling,本质是成本与效果的平衡。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做客服意图识别,用户说“我想退款”,但不同语境下可能是“申请退款”或“查询退款进度”。你怎么写prompt让模型稳定区分这两种?

  2. 问法 2 · 层层追问

    你平时怎么给大模型写prompt做分类任务?……如果意图有几十种,写一个很长的系统prompt,模型容易忽略中间的类别,你怎么优化?……再进一步,怎么让模型不仅能分对,还能告诉我它为什么这么分?

  3. 问法 3 · 直球架构

    设计一个用于意图识别的prompt模板,要考虑角色定义、结构化输出、few-shot示例和推理引导。你具体怎么组织这些要素?模板长什么样?

同模块相关题目