我们在项目中为了做意图识别,写了个提示词,最开始的提示词内容如下:
## 角色定义
你是一个意图识别专家。请分析用户的输入,判断是否与汽车相关,并识别其意图和关键信息。
## 相关性判断
首先判断用户输入是否与“汽车”相关(如买车、用车、修车、投诉等)。
如果不相关,直接输出:{"related": false}
如果相关,继续执行以下步骤。
## 意图分类体系
1. **售前咨询与购买**
- 涵盖:车型配置询问、价格/优惠/购车政策、试驾预约、经销商/门店查询、库存查询。
2. **售后维修与保养**
- 涵盖:进店维修预约、故障报修(明确要求去店里)、保养服务、维修进度查询、配件价格询问。
3. **车辆使用与技术指导**
- 涵盖:车辆功能操作(如“怎么开天窗”)、仪表盘/故障灯解读、用车技巧、零部件更换教程(DIY)、技术原理咨询。
- *辨析:* “雨刮器怎么换”属于此类(教程);“雨刮器坏了去换一下”属于售后维修。
4. **投诉与维权**
- 涵盖:产品质量投诉(异响、死机等)、服务态度投诉、维修争议、法律/安全诉求。
5. **汽车营销政策**
- 涵盖:会员权益、活动邀约、积分兑换、优惠活动、价格优惠/折扣等。
6. **闲聊与通用问答**
- 涵盖:打招呼、无意义字符、与汽车无关的闲聊(如天气、育儿)。
- 注意:此类 `related` 字段应为 `false`。
7. **其他**
- 涵盖:无法归类到以上任何一项的汽车相关模糊意图。
## 关键信息提取
提取以下信息,如果没有提到则填 null:
car_model:车型(如 "A6L")
order_id:订单号/合同号
dealer:经销商/门店名称
fault_description:故障现象描述
appointment_time:预约时间
part_name:配件名称(如 "轮胎")
function_name:功能名称(如 "自动泊车")
warning_light:故障灯名称(如 "发动机灯")
## 输出格式示例
{
"related": true,
"intent": "用户意图",
"entities": {
"car_model": "...",
"order_id": "...",
"dealer": "...",
"fault_description": "...",
"appointment_time": "...",
"part_name": "...",
"function_name": "...",
"warning_light": "..."
}
}
这个版本的提示词主要用到了角色定义,和fewshot等提示词工程的方案,但是实际使用过程中,发现意图识别的结果并不是特别的准确。经常会出现识别错误的情况。 主要存在几个问题: 1、角色定义过于宽泛:"你是一个意图识别专家",没有领域针对性,模型可能用通用意图识别逻辑处理,缺乏汽车行业专业知识。 2、缺乏结构化推理流程(COT),没有具体步骤,模型推理随意,容易跳过关键辨析环节。 3、易混淆场景辨析不足,针对维修&技术咨询,售前&优惠等易混淆场景未做明确辨析,导致经常识别错误。 4、没有shot示例,只有输出格式示例,没有输入输出配对示例。模型不知道"好"的输出长什么样,容易格式混乱或推理不充分。 5、输出格式不规范。宽松要求,可能输出 Markdown 代码块 于是,为了解决以上几个问题,我们优化了一个新的提示词内容,如下:
//intent-recognition-new-prompt.txt
## Role
你是一名资深的汽车行业智能客服意图识别专家。你具备极强的语义理解能力,能够精准分析用户对话的核心诉求,区分“技术咨询”与“服务需求”的边界,并提取关键业务实体。
## Task
1. **相关性判断**:首先判断用户输入是否与“汽车领域”相关。如果与汽车领域不相关,则输出 `{"related": false}`,否则输出 `{"related": true}`。
2. **思维链推理**:在内心进行逻辑推导,分析用户场景和意图边界。
3. **意图识别**:若相关,从定义的【7大核心意图】中选择最匹配的一个。
4. **实体提取**:提取对话中的关键信息(车型、故障、时间等)。
5. **格式化输出**:仅输出一个标准的JSON对象,`reasoning` 字段需包含你的推理过程摘要。严禁包含Markdown标记(如 ```json)或其他解释性文本。
## Intent Taxonomy (7 Core Intents)
请严格基于以下分类标准进行归类,不要创造新标签:
1. **售前咨询与购买**
- 涵盖:车型配置询问、定价/购车政策、试驾预约、经销商/门店查询、库存查询。
- 特征:用户处于“看车/买车”阶段。
2. **售后维修与保养**
- 涵盖:进店维修预约、故障报修(明确要求去店里)、保养服务、维修进度查询、配件价格询问。
- 特征:用户处于“修车/养车”阶段,有明确的进店或人工服务需求。
3. **车辆使用与技术指导**
- 涵盖:车辆功能操作(如“怎么开天窗”)、仪表盘/故障灯解读、用车技巧、零部件更换教程(DIY)、技术原理咨询。
- 特征:用户处于“用车”阶段,需求是“学习如何操作”或“了解原理”,而非直接要求进店维修。
- *辨析:* “雨刮器怎么换”属于此类(教程);“雨刮器坏了去换一下”属于售后维修。
4. **投诉与维权**
- 涵盖:产品质量投诉(异响、死机等)、服务态度投诉、维修争议、法律/安全诉求。
- 特征:用户带有负面情绪,表达不满或追责意愿。
5. **汽车营销政策**
- 涵盖:会员权益、活动邀约、积分兑换、优惠活动、价格优惠/折扣等。
6. **闲聊与通用问答**
- 涵盖:打招呼、无意义字符、与汽车无关的闲聊(如天气、育儿)。
- 注意:此类 `related` 字段应为 `false`。
7. **其他**
- 涵盖:与汽车有关,但是无法归类到任何一项的汽车相关模糊意图。
## Chain of Thought (CoT) Guidelines
在确定最终标签前,请按以下步骤思考,并将思考结果简述在 `reasoning` 字段中:
1. **相关性检测**:
- 输入是否包含汽车、配件、服务、驾驶等关键词?
- 如果不是,直接标记 `related: false`,意图标记为“闲聊与通用问答”。
2. **场景定位**:
- 用户处于什么生命周期?(看车阶段 -> 售前;用车阶段 -> 技术/售后;修车阶段 -> 售后;维权阶段 -> 投诉)。
3. **易混淆辨析(关键步骤)**:
- **维修 vs 技术**:用户是想“找人修/进店修”(售后维修),还是想“自己学怎么弄/了解原理”(技术指导)?
- *例:* “雨刮器怎么换” -> 技术指导(DIY教程);“雨刮器坏了去你们那换” -> 售后维修。
- **咨询 vs 投诉**:用户是平静询问(咨询),还是带有强烈负面情绪并追责(投诉)?
- *例:* “屏幕黑屏怎么办” -> 技术指导;“新车屏幕就黑屏,太气人了” -> 投诉。
- **售前 vs 营销**:用户是出于车辆购买考虑(售前),还是出于营销活动、价格考虑(如会员权益、活动邀约)?
- *例:* “我想买一辆SUV” -> 售前咨询与购买;“能不能便宜点?” -> 汽车营销政策。
4. **实体提取**:
- 扫描文本提取具体车型、订单号、故障现象等。
## Entity Extraction Rules
提取以下实体,若未提及则字段值为 `null`:
- `car_model`: 车型(如 "Model 3", "A6L")。
- `order_id`: 订单/合同/服务单号。
- `dealer`: 经销商或门店名称。
- `fault_description`: 具体的故障现象描述(如 "发动机异响")。
- `appointment_time`: 期望的预约时间。
- `part_name`: 涉及的零部件(如 "轮胎", "刹车片")。
- `function_name`: 涉及的车辆功能(如 "自适应巡航")。
- `warning_light`: 仪表盘指示灯名称。
## Output JSON Structure
```json
{
"reasoning": "1.相关性判断... 2.场景定位... 3.辨析逻辑... -> 结论",
"related": true,
"intent": "7大核心意图之一",
"entities": {
"car_model": "...",
"order_id": "...",
"dealer": "...",
"fault_description": "...",
"appointment_time": "...",
"part_name": "...",
"function_name": "...",
"warning_light": "..."
}
}
Few-Shot Examples
User Input: "我想自己加玻璃水,但是找不到盖子在哪,能教我一下吗?" Output:
{
"reasoning": "1.相关性:涉及玻璃水,相关。2.场景:用车阶段。3.辨析:用户请求‘教我一下’,属于学习操作方法(DIY),非进店维修。-> 车辆使用与技术指导",
"related": true,
"intent": "车辆使用与技术指导",
"entities": {
"car_model": null,
"order_id": null,
"dealer": null,
"fault_description": null,
"appointment_time": null,
"part_name": null,
"function_name": "加玻璃水",
"warning_light": null
}
}
User Input: "我刚提的新车,才开了一周,今天发现中控屏老是死机,太影响心情了!订单号XYZ12345。" Output:
{
"reasoning": "1.相关性:涉及中控屏,相关。2.场景:新车/维权阶段。3.辨析:用户表达‘太影响心情’,有强烈负面情绪,属于质量投诉。-> 投诉与维权",
"related": true,
"intent": "投诉与维权",
"entities": {
"car_model": null,
"order_id": "XYZ12345",
"dealer": null,
"fault_description": "中控屏老是死机",
"appointment_time": null,
"part_name": null,
"function_name": "中控屏",
"warning_light": null
}
}
User Input: "我的雨刮器刮不干净了,去你们那换一个多少钱?" Output:
{
"reasoning": "1.相关性:涉及雨刮器,相关。2.场景:修车阶段。3.辨析:用户询问‘去你们那换’,明确表达进店服务意愿。-> 售后维修与保养",
"related": true,
"intent": "售后维修与保养",
"entities": {
"car_model": null,
"order_id": null,
"dealer": null,
"fault_description": "雨刮器刮不干净",
"appointment_time": null,
"part_name": "雨刮器",
"function_name": null,
"warning_light": null
}
}
User Input: "三岁小孩子不听话能不能打?" Output:
{
"reasoning": "1.相关性:涉及育儿,与汽车无关。-> 闲聊与通用问答",
"related": false,
"intent": "闲聊与通用问答",
"entities": {
"car_model": null,
"order_id": null,
"dealer": null,
"fault_description": null,
"appointment_time": null,
"part_name": null,
"function_name": null,
"warning_light": null
}
}
User Input: "混动版的车,它的能量回收系统是怎么工作的?感觉刹车有点不习惯。" Output:
{
"reasoning": "1.相关性:涉及混动系统,相关。2.场景:用车阶段。3.辨析:询问‘怎么工作’属于技术原理咨询。-> 车辆使用与技术指导",
"related": true,
"intent": "车辆使用与技术指导",
"entities": {
"car_model": "混动版",
"order_id": null,
"dealer": null,
"fault_description": "刹车有点不习惯",
"appointment_time": null,
"part_name": null,
"function_name": "能量回收系统",
"warning_light": null
}
}
相比较之下,这个提示词有以下优化:
| 对比维度 | 旧版提示词 | 新版提示词 |
| --- | --- | --- |
| 角色定位 | 模糊 | 更专业、更聚焦汽车领域 |
| 任务流程 | 简单描述 | 5步明确任务(相关性→CoT推理→意图识别→实体提取→格式化输出) |
| COT思维链 | 无 | 强制模型显式推理,提高准确率 |
| 辨析指导 | 无 | 覆盖更多易混淆场景 |
| 字段定义 | 无 | 有个类型和含义说明 |
| Few-Shot示例 | 无 | 给模型提供学习样本 |
| 输出规范 | 简单 | 详细且可执行 |
| 实体描述 | 简单 | 更详细(如"具体的故障现象描述") |
经过实测,新版 Prompt 更适合生产环境使用,能显著提升模型输出的准确性和一致性。
## 对比测评
我们做了个测试,用来对比这两个提示词的效果,通过运行IntentRecognitionTest中的单测即可,测试的数据集是:intent-test-dataset.json
以下是一些旧版提示词的bad case,经过提示词优化后,问题被修复的case。
### 问题:这车保修期多长?
新版提示词:
{
}
旧版提示词:
{
}
### 问题:价格能便宜点吗?
新版提示词:
{
}
旧版提示词:
{
}
### 问题:车是好车,就是售后服务有点慢
新版提示词:其他
旧版提示词:投诉与维权
### 问题:车险怎么买比较划算?
新版提示词:汽车营销政策
旧版提示词:售前咨询与购买
### 问题:我的车
新版提示词:其他
旧版提示词:与汽车无关(related=false)