RAG范式与快速搭建套件茴香豆--书生·浦语大模型第二期实战营第三课笔记&作业

一、笔记部分

1.1 RAG范式

包括朴素RAG(Naive RAG)、进阶RAG(Advanced RAG)和模块化RAG(Modular RAG)。

  1. 朴素RAG:这是RAG最早的方法论,主要包含索引(indexing)、检索(retrieval)和生成(generation)三个步骤。它通过将文档分割成小块,编码为向量,并存储在向量数据库中,以便在接收到用户查询时进行高效的相似性搜索。

  2. 进阶RAG:为了克服朴素RAG的局限性,进阶RAG引入了特定的改进措施,包括预检索和后检索策略。这些策略通过优化索引技术、查询优化和上下文压缩等方法来提高检索质量。

  3. 模块化RAG:模块化RAG架构在前两种RAG范式的基础上进一步发展,提供了更高的适应性和灵活性。它通过引入新的特定功能模块和替换现有模块的方法,支持顺序处理和端到端集成训练。

RAG范式
RAG范式

1.2 prompt engineering、fine-tuning、RAG系统三种技术在external knowledge required和model adaption required之间的差异

几种方案在不同需求上的差异
  1. Prompt Engineering

    • 外部知识需求:Low。Prompt engineering侧重于利用模型本身的知识和能力,通过设计合适的提示(prompts)来引导模型完成特定任务。这种方法通常不需要额外的外部知识库。
    • 模型适应性需求:Low。虽然prompt engineering不需要额外的知识库,但创建有效的提示可能需要对任务和模型有深入的理解,以及一定程度的实验和调整。
  2. Fine-tuning

    • 外部知识需求:Low to Middle。但需要特定领域的数据。Fine-tuning涉及在特定任务的数据集上进一步训练预训练模型,使其更好地适应该任务。这通常不需要大量的外部知识,但需要足够的标注数据来指导模型学习。
    • 模型适应性需求:High。Fine-tuning需要模型适应新任务或领域的特定要求,这通常通过在特定任务的数据集上进行训练来实现。这种方法可以使模型更好地适应特定任务,但可能需要大量的计算资源和时间。
  3. RAG系统

    • 外部知识需求:Middle to High。RAG系统通过检索外部知识库中的相关信息来增强模型的回答能力,特别是在知识密集型任务中。这要求有一个准确、更新和相关的外部知识源。
    • 模型适应性需求:Low。RAG系统通常不需要对模型本身进行大量的适应性调整,因为它们依赖于外部知识库来提供所需的信息。然而,RAG系统可能需要调整以优化检索策略和生成过程,以便更好地整合检索到的信息。

1.3 茴香豆

茴香豆最终流程
茴香豆最终流程
  1. User Input:系统设计用于在即时通讯(IM)工具的群聊中,如微信和飞书,接收用户提出的问题。由于群聊中可能存在多个用户同时提问和交流,HuixiangDou通过基于用户ID的消息分类来简化处理流程,使得LLM不会感知到群聊中的多个用户。用户可能不会一次性完整描述他们的问题,因此系统会将多个连续的消息打包成一个单一的问题,形成Query。

  2. Reject Pipeline:使用基于text2vec的模型来判断问题是否值得回答。不相关问题,如闲聊或与项目无关的内容,将被系统拒绝回答。

  3. Response Pipeline:对于真正的技术问题,系统使用检索增强生成(RAG)和LLM提示技术来寻找答案。

    1. 关键词提取(keywords):由于用户查询中可能包含许多模态词,这可能会极大影响text2vec模型的精确度。因此,系统利用LLM在自然语言处理中的词性标注任务的优势,直接从查询中提取关键词和短语。

    2. 搜索文档片段(DB、text2vec、web search):系统混合使用LangChain和wenda来检索特定领域的知识。搜索结果是一系列文档片段,同时使用LLM评分来判断查询和文档之间的相关性。

    3. LLM Scoring:基于背景知识,LLM生成回答。最终,使用LLM评分来评估回答与查询之间的相关性。huixiangdou支持本地和远程的LLM服务。

    4. Security:为了确保AI应用的安全性,HuixiangDou实施了多重安全检查,包括检查所有字符串变量、集成传统安全服务、设置工作时间以及允许用户撤回回答等。

1.4 RAG增强优化方法

Survey论文讨论了增强过程中的3种方法:

  1. 迭代检索(Iterative Retrieval):迭代检索是指在生成答案的过程中多次检索知识库,每次迭代都基于前一次生成的文本和初始查询。这种方法可以提供更全面的知识库信息,有助于增强后续答案生成的鲁棒性。迭代检索可能会受到语义不连续性和累积的无关信息的影响。

  2. 递归检索(Recursive Retrieval):递归检索通过迭代地细化搜索查询来提高搜索结果的深度和相关性。该过程利用了链式思维(chain-of-thought)来指导检索过程,并根据检索结果不断优化查询。递归检索可以更好地适应用户的需求,通过反馈循环逐步聚焦于最相关的信息。

  3. 自适应检索(Adaptive Retrieval):自适应检索方法,如Flare和Self-RAG,允许LLMs主动决定检索的最佳时机和内容,从而提高信息检索的效率和相关性。这些方法体现了LLMs在操作中的主动判断能力,类似于智能代理使用工具的方式。自适应检索通过评估生成过程中的置信度来优化检索时机,当置信度低于某个阈值时触发检索系统以收集相关信息。

    1. FLARE方法(FLARE: Forward-Looking Active REtrieval Augmented Generation):FLARE是一种通用方法,它通过迭代使用即将生成的句子的预测来预见未来内容,并将其用作查询以检索相关文档,然后在生成句子时重新生成,如果包含低置信度的标记。

    2. Self-Rag方法:self-rag在处理搜索结果的时候,分别针对结果使用prompt来进行增强,并使用critic模型对返回结果进行评分。

    self-rag

1.5 其他补充

茴香豆retrie代码部分:HuixiangDou/huixiangdou/service /retriever.py

is_reject: 如果 disable_throttleTrue,则函数执行一个简化的搜索,只返回一个结果,并检查是否有任何结果返回。如果没有结果,函数返回 True 表示拒绝查询,以及一个空的 docs_with_score 列表;如果至少有一个结果,函数返回 False 表示接受查询,并返回这个结果及其相关性分数。如果 disable_throttleFalse,则函数执行一个更复杂的搜索,返回 k 个结果。它首先调用 similarity_search_with_relevance_scores 方法来获取相关性分数的搜索结果列表 docs_with_score。然后,它遍历这些结果,检查每个结果的分数是否超过了 reject_throttle 阈值。如果超过,将该结果添加到 ret 列表中。同时,它会跟踪最高分数 max_score 和对应的最佳结果 top1

update_throttle:根据配置文件的good_question和bad_question来计算最优阈值,用于is_reject函数中拒绝判断。

二、作业部分

2.1 在茴香豆 Web 版中创建自己领域的知识问答助手

1.创建助手后,上传个性化文档(图片略)

2.进行针对性提问:

问题比较简单的情况下,LLM未必会去知识库中进行查找。

3.集成到微信

2.2 Intern Studio 部署茴香豆

Tutorial/huixiangdou/readme.md at camp2 · InternLM/Tutorial · GitHub

跟着教程完成,基本没有问题,可以修改sed语句,来定制自己的问题。

日志中可以看到,query理解部分会利用大模型对query质量进行打分,和主题的提取。

(另一个问题)召回后利用prompt对相关性进行打分。

三、教材资料引用部分

教材:https://app.yinxiang.com/fx/97ff4bad-3123-4561-8ee2-e70d1732599d

Retrieval-Augmented Generation for Large Language Models: A Survey-https://arxiv.org/abs/2312.10997

[2401.08772] HuixiangDou: Overcoming Group Chat Scenarios with LLM-based Technical Assistance (arxiv.org)

active retrival argumented generation:https://arxiv.org/abs/2305.06983

self-rag:https://arxiv.org/abs/2310.11511

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值