微信扫码
添加专属顾问
我要投稿
AI客服系统优化指南:指代消解与查询重写技术详解,提升同程旅行客服体验。 核心内容: 1. 结构化与非结构化数据在AI客服知识库构建中的应用 2. 指代消解技术如何解决代词理解难题 3. 查询重写方法优化用户提问的检索效果
在上一篇内容中,我分享了如何使用 N8N 这个开源且免费的自动化编排工具,完成了同程旅行网 AI 客服建设的第一道关卡 —— 知识采集。我们通过自动化的方式,抓取了同程旅行网客服系统中“景点”这一业务线的网页数据。这是一种典型的利用 AI 对网页 HTML 内容进行抽取,从而生成客服知识数据的做法。当然,我们也可以使用 Java 中常见的 Jsoup 组件来提取 HTML 中的页面元素,达到类似效果。
这一步,其实正是构建 RAG 系统和 AI 客服的起点:数据导入。
在企业实际场景中,数据导入的形式五花八门,远不止网页内容。我们需要将各种结构化数据和非结构化数据导入到 AI 的知识库中,才能为后续问答系统提供高质量的“知识地基”。
因此,企业在构建 AI 系统时,还需要掌握从不同来源导入数据的能力,包括文本、表格、图片、网页等内容,为 RAG 系统提供多样、真实的数据支撑。
目前,我们通过 N8N 这个工作流工具,从网页中抓取景点相关内容,并借助大模型进行自动总结,生成 Markdown 格式的知识文本,并存储到知识库中。对于我们这些开发者来说,接下来需要逐步掌握如何使用各种数据加载器去读取不同格式的文档。
像 Langchain4j、Spring AI 等框架已经内置了一些常用的文件解析组件,但现实情况是,大多数企业数据并不是以 Markdown 格式保存的,而更多是数据库中的业务数据、PDF 文档、宣传资料等等。
在上一篇中,我们已经完成了知识数据的准备工作,可以正式进入实际使用和学习阶段。
有了知识后,就要开始测试了
拥有了基础知识后,我们在构建 AI 客服的过程中,就需要开始进行大量的测试,模拟用户提问,并持续根据实际效果优化知识库、提示词、RAG 检索策略,以及 AI Agent 的工作流等。
本节重点:AI 客服系统中的「指代消解」与「查询重写」
在搭建 AI 客服系统的过程中,有两个关键能力非常值得构建,那就是 指代消解 和 查询重写。
什么是指代消解?
简单来说,指代消解就是让机器学会理解“它”“他”“这里”这种模糊代词到底指的是什么。在我们日常的对话中,代词就像个调皮的小孩,躲在句子里不肯说出“我是谁”,而机器如果不能正确理解这些代词,就很容易答非所问。
尤其是在 RAG(Retrieval Augmented Generation)系统中,能否精准“还原”代词背后的真实含义,直接影响到知识的检索效果和准确率。
什么是查询重写?
查询重写(Query Rewriting)是将用户原始的提问,转换为一个更能表达其真实意图的查询方式。它的目标是重新表述问题,以更高的匹配度找到相关文档。
这个能力在面对模糊、歧义或用户表达方式与知识库中的文档术语不一致的情况下,尤其重要。比如用户问:“它开放吗?”如果能自动重写为“长城这个景点现在开放吗,可以去参观吗?”那么检索结果的范围和语义就丰富了,返回的结果显然就更准确了。
我个人觉得指代消解是查询重写处理环节的一部分,其中一个场景。
设想一个场景:
小明是一名程序员,他每天的工作离不开咖啡。有一天,他对同事说:“咖啡救了我,它让我写出了代码奇迹。”
同事听后,脑中一闪,立刻反问:“哪来的‘它’?是咖啡,还是你的幸运符?”
这个小插曲看似简单,但实际上体现了一个问题:当句子中出现“它”时,我们如何知道它指的是咖啡而非别的东西?对人来说,凭借上下文我们能轻松判断,但对机器而言,这就像是在玩一场解谜游戏。如果机器不能正确指代消解,就有可能误解内容,进而影响到信息检索和生成结果的准确性。正是因为这个原因,指代消解在RAG系统中变得异常重要,它可以让系统更聪明地“猜测”每个代词的真实含义,从而提升召回率和回答质量。
说到这里,我们可能很多人,还是不太了解,这里我们可以使用非常通用的方法,即5W1H思维方式来处理。这里我分享如下:
1. What(什么是指代消解?)
指代消解(Anaphora Resolution)是自然语言处理中的一项技术,旨在确定文本中代词、名词短语等指代词的真正指向。简单来说,就是解决“它是谁”、“他指的是什么”的问题,从而让机器读懂文章中各个元素之间的关系。
2. Why(为什么要做指代消解?)
在RAG系统中,信息的准确检索和生成依赖于对上下文的深刻理解。如果系统不能正确解析指代关系,就会出现信息混淆,降低召回率和准确性。例如,在检索知识库时,错误地理解“它”可能导致系统返回与用户真正意图不匹配的答案。因此,指代消解有助于:
3. When(何时使用指代消解?)
指代消解在处理含有复杂指代关系的文本时尤为关键。常见应用场景包括:
当文本中出现多次代词指向同一对象或者含糊不清的指代时,指代消解的作用就显得格外重要。
4. Where(指代消解应用于哪些领域?)
指代消解技术不仅在RAG系统中有着重要应用,还广泛存在于:
通过正确解析文本中的指代关系,各行各业的智能系统都能更精准地理解用户需求,提供更高质量的服务。
5. Who(谁在使用指代消解?)
各种使用自然语言处理技术的公司和研究机构都在探索并应用指代消解技术:
6. How(如何实现指代消解?)
指代消解的实现通常涉及以下几个步骤:
为什么需要查询重写
• 用户的提问通常比较口语化,直接用问题检索效果不佳
• 减少查询和文档之间的语义差异
• 多轮对话中的检索,需要指代消解
我们在做RAG系统的时候,会遇到很多很多的问题,通常情况下,我们刚开始接触的RAG都算是最简单的原生RAG(Native RAG),而企业中要达到上线可用标准至少要达到高级RAG(Advanced RAG)级别,同时准确率在80-95%之间,然后解决了一些Native RAG带来的问题:
Query理解处理清楚,对于后续问题处理会更好。
对于我们目前基于FastGPT的AI大模型客服工作流,实现指代消解查询重写只需要在增加一个AI处理节点,用提示词处理即可。
本节内容,我们继续基于FastGPT这个软件来了解这个知识,对于我们开发者来说,先学会走路是比较重要的,能够快速的对于一项新内容的理解,而不是上来就开始学习底层技术,我们这个阶段也算是技术性的预研,了解到相关成熟的工具的使用方法,对于未来程序层面开发的理解也会深刻,毕竟程序开发本质的核心是对现实世界的抽象。学会UI工具的使用,可以提高我们在写程序时候的认知。
首先看下我们目前的AI客服的工作流:
接下来看下我们目前的FastGPT这个工作流,没有增加指代消解时候的回答现象:
首先我们问一个问题:
可以看到读取了我们的知识库中的内容,还可以的。继续追问:
这时候,可以看到了问题,我们本来的意思是想让他回答关于八达岭长城的这个退票相关的内容,我们的知识库中目前没有这个内容,但是它也给我们回答了,这说明我们即使使用了RAG,即使用了FastGPT软件,我们还是会出现这样的幻觉问题。
我们可以看到他在回答这个问题的时候,没有考虑到上下文的相关性,基于没有主语的问题去搜索的相关知识:
从知识召回的角度上来说,不符合我们的要求。他没有识别到【它】这个词代表的是八达岭长城,而是根据【它】这个词去知识库中搜索的知识,如果当前知识库中的知识特别多,那么我们的召回结果的质量也将非常的差。
也正是由于这个现象,我们接下来需要引入一个指代消解,通过对用户输入问题的处理,让他识别到。
引入后,会对我们的问题,进行重写,效果如下,这里我演示下转换后的问题:
可以基于这个新问题进行回答。
做法如下,我们在问题开始的时候可以让AI帮助我们写个提示词,然后调用AI进行重写。
这样工作流的流程如下:
1、增加一个AI对话节点,根据用户问题进行查询转换,对用户输入的问题中的代词进行消解,进行查询转换。
2、基于转换后的问题去知识库中搜索数据,以及回答。
简单版本的提示词如下:
## 角色你是用户问题的文案转换专家,能够根据用户的问题进行指代消解,根据用户问题重写为一个新问题。定位并解析代词(如“它”、“这个”,"刚才")的具体指向,将用户问题转换为为没有代词的问题,并且补全问题中缺失的历史上下文主题与关键词本轮问题如下:xxxxxx请根据用户问题,进行问题转换,强制需要包含景点名称,不要对用户的问题进行回答,需要对用户的问题重写。
这是一个简单的提示词,对于有些模型来说,不会实现我们的要求,所以我们可以选择一些质量较高的模型,例如gpt-4o,目前在企业中,我是用这个模型来完成指代消解和查询重写。
在企业真实的数据使用中,随着测试问题的增多,和准确率的要求,我们的查询重写和指代消解的提示词大概如下:
### 角色 你是xxx公司一个专业的用户问题重写专家,具备多维对话状态建模能力,精准识别本轮用户问题中的显性/隐性需求,你的任务是结合对话上下文聊天记录和本轮的问题,对用户本轮问题进行准确、自然、流畅的表达进行用户文案重写,以提升后续处理的准确性。### 任务 1. **上下文桥梁**: - 解析历史对话上下文中的实体、事件和状态信息,确保本轮提问重写的问题与上下文语境一致,能够解决当前用户的问题。 - 识别代词(如“它”、“这个”、“上次”、“刚才”、“那种”、“该”)的指代对象,明确其具体含义。 - 捕捉用户情绪倾向(如紧急、困惑、比较),并确保重写后的问题保留用户的情感色彩。 2. **智能指代消解**样例如下: ┌───────────────┬───────────────────────┐ │ 当前提问代词 │ 自动替换逻辑 │ ├───────────────┼───────────────────────┤ │ 这个/它 │ 替换为最近的产品实体 │ │ 上次的 │ 替换为上轮完整产品型号 │ │ 那种 │ 关联同类产品特征词 │ └───────────────┴───────────────────────┘3. **意图解构**: - 区分用户的表层问题与深层需求。 - 识别复合问题中的多个子需求和子问题,并确保重写后的问题涵盖所有关键点。 4. **信息补全**: - 为省略主语的问题补全实体。 - 为不完整或模糊的问题补充必要的背景信息,确保问题表达完整。 - 在补全主语或实体时,仅根据当前对话上下文中的已提及内容进行,避免随意猜测或添加未提及的信息。5. **跨轮补全**: - 当检测到代词时,执行: 1) 向前检索5轮对话 2) 提取最后出现的相关实体 3) 强制替换格式:「原代词+(实体)」, 例:把这个→把这个(xxxxxx设备)。5.**问题重写** - 在不改变原意的前提下,将用户的本轮问题重写为更相似、更准确、更自然、更流畅、更容易让系统理解的表达,任何时候不要删减用户问题中的关键内容和关键词,保留用户问题中的具体需求。原始问题和重写后的问题需要是相同含义。### 重写规则- 确保重写后的问题保留用户的原意和语气。 - **仅返回重写后的问题**,不包含任何额外的解释或说明。
我们也可以根据自己的业务需求,让AI帮助我们根据我们的实际场景进行优化:
### ? 角色你是同程旅行网AI客服系统中的**用户问题重写专家**,专注于提升用户问题的表达准确性。你具备多轮对话理解、指代消解、上下文建模与意图重构的能力,擅长将用户口语化、含糊或省略表达的提问,精准地重写为语义清晰、系统可理解的问题,涵盖景点、火车票、会员权益等业务领域。---### ? 任务目标你需要基于历史对话上下文和用户本轮输入,对当前问题进行**语义补全与重写**,以便:* 提高RAG系统的召回精度;* 准确处理用户查询中的指代关系;* 明确用户的实际意图,覆盖多维子需求。---### ? 任务拆解#### 1. 上下文桥梁* 理解历史对话内容,抽取用户已提及的实体(如:广州塔、学生票、白金会员等)、地点、时间、需求。* 保证当前问题的重写与上下文语义保持一致,必要时对问题进行场景补充。* 特别注意**多业务线场景切换**,准确识别当前业务上下文(如从景点跳转到火车票时)。#### 2. 智能指代消解* 对如“这个”、“它”、“那种”、“上次的”、“刚才的”等代词进行语义还原。* 若能明确指代对象,强制补充原实体名称,例如: * “它几点开门” → “广州塔几点开门(它=广州塔)” * “那个会员权益有变吗” → “白金会员的权益有变吗(那个=白金会员)”? **示例映射表**:| 当前代词 | 指代策略说明 || ------- | ----------------- || 它 / 这个 | 替换为上轮提及的地点或实体 || 那个 / 那种 | 替换为上轮涉及的类目或类别词 || 上次的 | 替换为用户最近一次提及的票种/权益 |> 优先使用最近5轮中提及的实体,跨轮查找时优先考虑业务领域的一致性。#### 3. 意图解构* 识别表层提问背后的深层动因,例如: * “几点开门” → 是在查询景点营业时间 * “还有票吗” → 是在查询车次余票* 拆解复合问题,例如: * “广州塔几点开门,有学生票吗?” → 两个子问题应被整合在一个完整表达中#### 4. 信息补全* 对省略主语的句子补全实体:* “几点开门?” → “广州塔几点开门?”* 补全场景必要信息,避免脱离上下文的模糊表达。* 不允许引入上下文中未提及的新实体。#### 5. 跨轮补全机制(强化指代消解)当检测到代词或模糊指向时,执行如下策略:1. 回溯最近5轮上下文2. 抽取最后出现的核心实体3. 替换代词,补充为完整问法,保留原始代词结构,例如: * “这个几点发车?” → “这个(G123次列车)几点发车?”--### ✍️ 重写策略* 保留用户问题原意、语气、情绪(如:紧急、困惑、不满等)* 不遗漏任何关键内容或子意图* 避免主观添加信息,仅基于对话上下文补全---### ? 最终产出要求***只返回重写后的问题**,不包含中间解释或提示* 确保语句自然、通顺、正式,方便系统处理
本文我提到了一个词:查询重写,这个是RAG优化策略中的查询转换(Query Translation、Query Transformer)中的一部分,主要目的将输入的query变为一种便于检索的形式。这个在RAG的优化中是非常重要的概念,里面又包括了若干个常用的优化手段。
在langchain实践中,总结了如下的图,对于一个问题,我们首先需要做的就是查询转换,从而更好的理解用户的问题:
查询转换常见的是三种常用的玩法:查询重写、查询扩展、查询拆解。图片中还包括了其他的一些方法。
这张图来源于:https://github.com/langchain-ai/rag-from-scratch/blob/main/rag_from_scratch_5_to_9.ipynb
查询转换可以通过修改输入查询来增强检索结果。
通过今天的分享,我揭开了指代消解和查询重写的神秘面纱,演示了当前在FastGPT工作流中的同程旅行客服的应用效果,还通过5W1H的方式系统地介绍了这一技术的重要性和应用场景。指代消解和查询重写不仅让机器更“懂人心”,更是提升RAG召回率的重要利器。
如果你正在研究或开发RAG系统,不妨深入探讨指代消解和查询重写技术,优化你的模型和工作流,带来更加精准和智能的信息检索体验。未来,随着技术的不断进步,指代消解将会在更多领域大放异彩,助力AI客服、语音助手等智能系统更好地服务于人类。如果你也在构建自己的 RAG 系统或者探索企业智能问答,不妨从这些看似“细节”的能力点入手,效果往往出乎意料。
喜欢本篇文章的,感兴趣的小伙伴可以一起交流沟通哦。
最近也看到有人问如何学习AI,这里分享几个资料如下:
1、通往AGI之路的知识库飞书云文档:
https://waytoagi.feishu.cn/wiki/QPe5w5g7UisbEkkow8XcDmOpn8e
2、掘金的AI知识库的飞书云文档
https://agijuejin.feishu.cn/wiki/UvJPwhfkiitMzhkhEfycUnS9nAm?table=blk3RfZtR7Nh73tO
3、极客时间的AI知识库的飞书云文档
https://geek-agi.feishu.cn/wiki/B9rYwwg6xidZYJkbrlscxTQFnOc
4、LangGPT社区的飞书云文档(结构化提示词等等):
5、一站式AI产品经理飞书知识库:
https://v11enp9ok1h.feishu.cn/wiki/KiIvwdFOciiqqNkwKzTcmn88ndL
6、微软网站分享的AI指南说明知识:
https://learn.microsoft.com/zh-cn/azure/databricks/generative-ai/guide/introduction-generative-ai-apps
7、李雨田老师的B站分享,基于AI大模型的智能客服产品设计实战,
https://www.bilibili.com/video/BV1h8PNeYEEz/
8、图书:基于大模型的RAG应用开发与优化——构建企业级LLM应用
喜欢本文的,可以关注、收藏、点赞、转发、分享到朋友圈哦。
本专题系列文章:
AI实现智能客服第1节:基于FastGPT知识库的AI客服搭建与使用
AI实现智能客服第2节:借助RAG实现常见问题的同程旅行AI客服
AI实现智能客服第3节:AI客服的核心能力RAG介绍
AI实现智能客服第4节:开源N8N编排采集同城旅行网数据知识
喜欢的可以加入我的免费知识星球:觉醒的新世界程序员,随时与我沟通,交流技术与想法。目前星球内正在更新AI代码评审的设计与实现,AI客服系统的搭建,也会定期的分享技术资料。
喜欢的也可以关注我的公众号:无处不在的技术,与我一起学习成长、共同进步,在技术的道路上越走越远。
喜欢就点个 在看 呗 ?
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-06-12
首个AI Agent零点击漏洞曝光:一封邮件窃取企业AI任意敏感数据
2025-06-12
AI实现智能客服第1节:基于FastGPT知识库的AI客服搭建与使用
2025-06-12
AI实现智能客服第2节:借助RAG实现常见问题的同程旅行AI客服
2025-06-12
AI实现智能客服第3节:AI客服的核心能力RAG介绍
2025-06-12
全链路实战解析:企业如何用AI Agent提效50%?|95%的企业将被AI Agent重塑!
2025-06-10
Xinference 客户案例分享:东南亚客户的多模型部署
2025-06-08
DeepSeek银行客户经理智能体应用方案
2025-06-06
AI大模型在客服工作流中的集成应用
2025-03-16
2025-03-16
2025-03-17
2025-03-17
2025-03-19
2025-04-06
2025-05-27
2025-03-19
2025-05-26
2025-03-30