1. 意图识别:Agent的“大脑”与“耳朵”
想象一下,你走进一家高级餐厅,对服务员说:“来点能让我暖和起来的,再来杯提神的。” 一个优秀的服务员会立刻理解你的意图:你想点一份热汤和一杯咖啡。Agent的意图识别,就是扮演这个“服务员”的角色,它是Agent理解用户真实需求的第一步,也是最关键的一步。
简单来说,意图识别就是让AI听懂人话背后的“目的”。用户说“帮我订一张明天去北京的机票”,其意图是“预订航班”;说“今天天气怎么样”,意图是“查询天气”。在低容错的业务场景里,比如智能客服、金融交易助手或医疗咨询机器人,一旦意图识别错了,整个对话就会跑偏,用户体验会断崖式下跌,业务转化率更是无从谈起。这就像你明明想点咖啡,服务员却给你端来一杯茶,不仅尴尬,还可能让你再也不想光顾。
所以,我们今天的核心目标,就是打造一个“金牌服务员”级别的Agent意图识别系统。我将带你从最基础的Prompt优化开始,一步步深入到RAG增强的完整方案,分享我在这条路上踩过的坑和验证过的有效策略。整个过程,我们会聚焦于如何让识别更准、更快、更稳。
2. 第一层优化:从“说人话”到“说AI能听懂的话”——Prompt工程实战
很多开发者一开始会觉得,和大模型对话,不就是把需求写清楚吗?但实际做下来,你会发现同样的需求,不同的说法,AI给出的答案天差地别。这就是Prompt工程的魅力,也是意图识别优化的第一道门槛。
2.1 自然语言Prompt的“艺术化”约束
原始的意图识别Prompt可能很简单:“请判断用户的意图。” 这太模糊了,大模型会自由发挥,结果不可控。我们的目标是把模糊指令变成精确的“操作手册”。
我常用的优化思路是 “角色扮演 + 上下文限定 + 输出格式化” 三板斧。
举个例子,我们想识别用户是想“查询天气”还是“设置提醒”。一个粗糙的Prompt可能是:“分析用户想做什么。” 而优化后的Prompt是这样的:
你是一个专业的意图分类助手。你的任务是根据用户输入,将其分类到以下唯一的意图类别中:
1. 查询天气:用户询问当前、未来或某个地点的天气状况。
2. 设置提醒:用户要求在未来某个时间点提醒自己做某事。
3. 其他:不属于以上任何一类。
**规则:**
- 只输出意图类别名称,不要输出任何其他解释。
- 如果用户输入同时包含多个意图,请识别最主要、最明确的那个。
- 如果输入模糊不清,无法明确归类,请输出“其他”。
**用户输入:** {user_input}
我实测下来,这种结构化的Prompt能让GPT-4、文心一言这类大模型的分类准确率提升至少30%。关键在于,你不仅告诉了AI“做什么”,还告诉了它“怎么做”以及“不能怎么做”。这就像给一个经验丰富但方向感不好的导游一张详细的地图和明确的禁忌清单。
2.2 结构化Prompt设计:意图与参数“一把抓”
在真实业务中,识别出意图往往只是开始。我们通常还需要从用户的话里提取关键参数(也叫槽位)。比如“预订航班”意图,需要提取“出发城市”、“到达城市”、“日期”等。传统的做法是先做意图分类,再做命名实体识别(NER),分两步走,耗时且可能误差累积。
更高效的做法是 结构化Prompt设计,让大模型一次性完成意图识别和参数提取。这就像让服务员一边听你点单,一边就在点单机上勾选了菜品和备注。
# 一个结合了意图分类和参数提取的Prompt示例
prompt_template = """
你是一个机票预订助手。请根据用户输入,完成以下任务:
1. **识别意图**:判断用户意图属于以下哪一类:
- 查询航班:用户想查找航班信息。
- 预订机票:用户明确要下单购买。
- 改签/退票:用户想更改或取消已有订单。
- 其他:不属于以上类别。
2. **提取参数**:如果识别为“查询航班”或“预订机票”,请从输入中提取以下参数,并以JSON格式输出。如果某个参数未提及,则值为空字符串。
- departure_city (出发城市)
- arrival_city (到达城市)
- date (出发日期,格式:YYYY-MM-DD)
- flight_class (舱位,如:经济舱、商务舱)
**输出格式必须是严格的JSON:**
{
"intent": "识别出的意图


1559

被折叠的 条评论
为什么被折叠?



