RAG 落地实践踩坑

RAG技术实践

想起之前听过高原老师的一场分享,结合最近项目的实践,对RAG落地的一些经验进行梳理,希望能对各位读者有些帮助。

什么是 RAG

  • RAG 是 Retrival Augment Generation 的缩写,直译过来就是【检索增强生成】
  • 将大模型比喻成一个高中生,学会了基础学科的知识,有基础的逻辑和理解能力,RAG 就是给这个大学生一个搜索引擎
  • 没有搜索引擎之前,问一个高中生什么是数据库死锁,他无法回答,但是有了搜索引擎,通过搜索相关的知识,这个高中生就能回答这个问题
  • 大模型配合 RAG 的时候通常使用 Embedding 技术来进行文本内容之间的相似度匹配
  • Embedding 技术是通过算法将文本转换成数字向量,然后通过转换后的数字向量之间的距离来判断文本之间的相似程度,进而通过这样的方式来搜索找到相关的文本内容

需求描述

  • 希望搭建一个专家级营养师的IP形象,对外提供自动化的咨询问答服务
  • 建立AI知识库,训练AI智能对话的某类型知识来源范围需限制在知识库内
  • 设定某些对话(如激烈的情绪反应、产品活动价格等咨询)自动转人工客服
  • 遇到无法回答的问题自动转人工客服

结合用户需求,初步考虑的设计方案是通过一个意图分类器,把产品类别区分开来,然后再进行相关的RAG检索。

坑类回顾

       踩坑一:表格数据如何RAG

•用户希望能够基于产品信息进行回复和推荐
•但产品信息是一个 SKU 表格

解决方法:

根据行和列组合成FAQ,将表格内容转换成问答数据,以FAQ的形式检索和存储。通过文本相似度可以匹配相关内容,问题相似度高则直接回答

踩坑二:问答效果始终不满意

问题描述:

  1. 无法投产,不敢用
  2. 推荐的不准,老转人工
  3. AI推荐速度比较慢
  4. 智能推荐每次都要点击
  5. 智能推荐每次都要修改

解决方法:

        1.确定可衡量的交付标准,有签字画押,避免持续需求变更,举例来说

  • 客户组织一个业务测试团队(若干人),每次交付一个版本之后,进行批量测试,并对测试结果进行主观打分(10分满分)
  • 针对所有测试人员的测试结果,对分数取平均值,当超过8分的时候,即为达到验收标准

      2.调低用户预期,每一轮的验收内部先多轮测试验证,确认超过了上一轮的预期再给到客户

踩坑三:Embedding相似度不准

问题描述:

•embedding是一种基于文本字符的向量算法,无法理解语意
•匹配出来的结果,有时候预期中最希望命中的,往往不是相似度最高的那个
•LLM 生成的时候,都有token上限
•为了不超过上限,需要对匹配结果按照相似度选前 k 个匹配结果
•最终希望命中的那一个,没有成功进入到 LLM prompt 里
•真实相关的知识并没有被以最高相似度而匹配出来
•token长度限制,没有排在前面的知识就没有被选中并放入到prompt里面

解决方法:

  • 首先想到的是增加相似问、更换embedding算法
  • 其次是改写用户输入query,使用完整的问题再进行相关问题查询
  • 进一步拆分意图分类,增加被搜索知识整体集合与问题匹配度
  • 更有效地方式是如何把相关知识内容放到prompt中
  • 调整 token 分配比例!聊天历史也没那么重要,不需要太长
    大力出奇迹!换更长上下文的模型!4K不够16K,反正现在LLM都挺能装

踩坑四:自行编造产品问题

问题描述:

大模型存在幻觉,无法避免
•永远顺着问题去回答,问着问着,就逐渐离谱

解决方法:

让大模型自己检查结果(即幻觉*幻觉,概率变得趋向于0),抽取其中产品名称,再去和配置的白名单对比,不在名单里则拦截回复内容,在名单里则放行

踩坑五:多次回复稳定性不好

问题描述:

大模型分类当前会话类型
•大模型根据上下文重写问题
•大模型生成回答
•大模型从回答中抽取提及的产品名

解决方法:

•确保每一步的大模型调用都能得到预期结果,串联起来确保多次串联调用大模型,都能得到稳定结果
•大力出奇迹,日久见人心,重复多次测试,根据结果迭代调整,再反复多次测试,最终得到结果,这里没有捷径
•如果捷径一定说要有,那就是提前准备好测试工具
<think>嗯,用户想了解RAG模型的落地实现方案示例。首先,我需要回忆一下RAG的基本概念和工作流程。RAG是检索增强生成,结合了检索系统和生成模型,对吧?用户可能已经知道一些基础,但需要具体的实现步骤和例子。 我应该先分解RAG的实现步骤,比如数据准备、检索系统构建、生成模型选择、集成方式等。然后,每个步骤需要详细说明,可能还要给出代码示例,比如使用FAISS库做向量检索,用Hugging Face的Transformer模型做生成。 用户提到的引用里有提到Naive RAG的工作流程图,引用[2]和[4]可能相关,需要确保在回答中提到这些引用。引用[4]提到专业领域知识的问题,所以可能需要强调RAG在特定领域的应用,比如金融或医疗。 接下来要考虑用户可能的背景,可能是开发者或技术人员,所以代码示例会很有帮助。比如用Python展示如何加载模型,处理数据,构建检索器,然后集成生成部分。同时需要提到优化方向,比如检索效率、模型微调,这些是实际部署时需要考虑的问题。 还要注意用户要求结构清晰,分步骤说明,所以用列表或分点的方式比较好。另外,用户可能关心实际应用场景,比如客服系统或知识库,需要举几个例子说明RAG的应用。 需要检查引用是否正确,比如引用[2]是关于Naive RAG的流程图,引用[4]是关于专业领域和大模型应用,这些在回答中需要自然地融入,比如在介绍RAG解决专业问题时提到引用[4]。 最后,生成相关问题时要围绕RAG的实现、优化、应用场景等方面,确保问题有针对性,帮助用户进一步学习。例如,如何优化检索效率,或者RAG与其他方法的对比。</think>### RAG模型落地实现方案示例 #### 一、核心架构 RAG(检索增强生成)模型通过结合检索系统与生成模型实现知识增强,典型流程分为三步: 1. **检索阶段**:根据输入问题从知识库中提取相关段落 2. **增强阶段**:将检索结果与问题拼接为增强输入 3. **生成阶段**:基于增强输入生成最终回答 该架构有效解决大模型专业领域知识不足的问题[^4]。 #### 二、具体实现步骤(以Python为例) ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration import faiss import numpy as np # 1. 构建知识库 documents = ["大模型训练需要海量数据", "RAG通过检索增强生成结果", "..."] # 领域知识库 embeddings = np.random.rand(1000, 768) # 示例向量 index = faiss.IndexFlatL2(768) index.add(embeddings) # 2. 初始化组件 tokenizer = RagTokenizer.from_pretrained("facebook/rag-sequence-nq") retriever = RagRetriever.from_pretrained("facebook/rag-sequence-nq", index=index) model = RagSequenceForGeneration.from_pretrained("facebook/rag-sequence-nq", retriever=retriever) # 3. 推理流程 question = "如何降低大模型训练成本?" input_dict = tokenizer.prepare_seq2seq_batch(question, return_tensors="pt") outputs = model.generate(input_ids=input_dict["input_ids"]) answer = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0] ``` #### 三、优化方向 1. **检索优化**: - 使用DPR(Dense Passage Retrieval)改进检索精度 - 引入混合检索(关键词+向量) - 实现层次化检索架构 2. **生成优化**: - 对生成模型进行领域微调 - 添加结果验证模块 - 设计动态prompt模板 3. **工程优化**: - 建立增量更新机制 - 实现缓存加速层 - 部署分布式检索系统 #### 四、典型应用场景 1. 金融领域:结合监管文件库生成合规报告 2. 医疗领域:基于病历数据库生成诊断建议 3. 客服系统:关联产品文档生成标准回复 4. 教育领域:链接教材内容生成答案解析 当前主流实现方案多采用模块化架构设计,典型技术栈包括:FAISS/Annoy向量检索库、HuggingFace Transformers框架、ElasticSearch混合检索系统等[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

茯苓茶

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值