来自工业界的知识库 RAG 方案(一):多轮会话优化

背景介绍

RAG 最佳实践 中,我介绍了 RAG 的各个核心模块的最佳实践方案,包括文件解析、分片、向量化、检索、重排序等。据此已经得到一个具备良好效果的 RAG 应用,但是如果想生成一个具体良好体验的 RAG 服务,还有一些问题需要优化。

从目前客户的反馈来看,多轮会话的优化是用户最关心的点之一。我们人类进行交流时,往往都是你来我往的多轮沟通,因此对大模型应用的用户而言,很自然会带入日常的交流习惯,比如:

在医疗场景下,用户向大模型提供症状描述后,大模型往往会给出诊断建议。之后用户往往会追问 那应该怎么治疗呢? 或者 那应该吃什么药呢? 等等,如果不结合多轮会话中的上下文信息,大模型很难根据当前轮次的问题给出正确的回答。

当前目前大模型调用时往往提供基于历史会话进行响应的能力,但是在目前的 RAG 应用中,存在的问题往往是检索阶段不具备基于多轮会话检索的能力。比如在上面的问题中 那应该怎么治疗呢?那应该吃什么药呢? 这种类型的问题,直接进行检索很难匹配到正确的信息。本文就是尝试针对此问题的一些优化方案。

开源方案调研

针对上面提到多轮对话的问题,调研了目前主要的开源 RAG 项目,目前针对这个场景有明确优化的是 llama-indexhaystack

llama-index

针对多轮对话场景,llama-index 提供了 ChatEngine ,此模块主要用于会话场景,可以基于历史会话记录进行回答。llama-index 提供了包括 CondenseQuestionChatEngine, ContextChatEngine 在内的多种的会话引擎。

但是最基础的多轮会话引擎是 CondenseQuestionChatEngine,对应的实现在 llama_index/core/chat_engine/condense_question.py 中,其核心思想很简单:基于多轮的会话记录与当前问题,调用大模型生成一个新问题,基于新问题进行后续处理。对应的实现简化如下:

from llama_index.core import PromptTemplate
from llama_index.core.llms import ChatMessage, MessageRole
from llama_index.core.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易迟

高质量内容创作不易,支持下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值