LangChain 实战课
黄佳
新加坡科研局首席研究员
8120 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 28 讲
结束语 & 结课测试 (2讲)
LangChain 实战课
15
15
1.0x
00:00/00:00
登录|注册

15|检索增强生成:通过RAG助力鲜花运营

你好,我是黄佳,欢迎来到 LangChain 实战课!
第 2 课中,我曾经带着你完成了一个基于本地文档的问答系统。用当下时髦的话说,你实现了一个 RAG 应用。
什么是 RAG?其全称为 Retrieval-Augmented Generation,即检索增强生成,它结合了检索和生成的能力,为文本序列生成任务引入外部知识。RAG 将传统的语言生成模型与大规模的外部知识库相结合,使模型在生成响应或文本时可以动态地从这些知识库中检索相关信息。这种结合方法旨在增强模型的生成能力,使其能够产生更为丰富、准确和有根据的内容,特别是在需要具体细节或外部事实支持的场合。
RAG 的工作原理可以概括为几个步骤。
检索对于给定的输入(问题),模型首先使用检索系统从大型文档集合中查找相关的文档或段落。这个检索系统通常基于密集向量搜索,例如 ChromaDB、Faiss 这样的向量数据库。
上下文编码找到相关的文档或段落后,模型将它们与原始输入(问题)一起编码。
生成使用编码的上下文信息,模型生成输出(答案)。这通常当然是通过大模型完成的。
RAG 的一个关键特点是,它不仅仅依赖于训练数据中的信息,还可以从大型外部知识库中检索信息。这使得 RAG 模型特别适合处理在训练数据中未出现的问题。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

RAG技术与LangChain工具在文本序列生成领域的应用是本文的重点。RAG技术结合了检索和生成能力,通过引入外部知识库,增强了模型的生成能力。LangChain提供了多种文档加载器、文本转换器和文本嵌入模型,以处理各种文档类型和进行文本嵌入。文章详细介绍了文本分割器的工作原理和其他形式的文本转换操作,如过滤冗余文档、翻译文档、提取元数据等。此外,还介绍了LangChain中的Embeddings类及其在文档嵌入和查询嵌入方面的应用。另外,文章还探讨了缓存存储和向量数据库在加速计算过程中的重要性。LangChain中的Retriever模块作为数据检索的核心入口,支持向量存储检索器等多种类型的检索工具。总体而言,本文通过介绍RAG技术及LangChain的相关工具,为读者提供了对检索增强生成技术的全面了解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《LangChain 实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • Geek_f55576
    老师如果对文件切片时候,文件中的的问题和回答被切成2个不同的chunck那么经常会无法检索到答案,这种场景有什么优化方法吗?

    作者回复: 有很多具体的策略: 1. 一般来说,都可以在切片时设置上下文的重叠区域,也就是重叠窗口。可以设大一点。 2. 有一些包支持把上一个片,和下一个片,都作为Metadata来保存在索引中,这样,检索出一个片,也就同时检索了上下文。 3. 如果你的文档都是一问,一答的形式。你可以自己修改切片逻辑,刻意的把问答捆绑在一起。

    2023-10-17归属地:浙江
    2
  • Lominnave
    老师可以介绍下稀疏向量么,另外稀疏-密集向量结合如何提高召回效果?

    作者回复: 当然可以了。稀疏向量是指一个大多数元素都是零(或未定义、null)的向量。与之相对的是密集向量,其中大部分元素都是非零的。稀疏向量在很多场合都非常有用,特别是在高维数据中,其中很多维度对于某些观察值来说可能是不相关或缺失的。例如,在自然语言处理中,词袋模型(Bag-of-Words, BoW)产生的是稀疏向量,因为大量的词在特定文档中可能没有出现。稀疏向量的优点:存储效率:由于向量中的大部分值都是零,我们只需要存储非零的元素及其索引,这大大节省了存储空间。计算效率:某些算法可以优化处理稀疏数据,从而更快地运行。 稀疏向量是指一个大多数元素都是零(或未定义、null)的向量。与之相对的是密集向量,其中大部分元素都是非零的。稀疏向量在很多场合都非常有用,特别是在高维数据中,其中很多维度对于某些观察值来说可能是不相关或缺失的。 例如,在自然语言处理中,词袋模型(Bag-of-Words, BoW)产生的是稀疏向量,因为大量的词在特定文档中可能没有出现。 稀疏向量的优点: 存储效率:由于向量中的大部分值都是零,我们只需要存储非零的元素及其索引,这大大节省了存储空间。 计算效率:某些算法可以优化处理稀疏数据,从而更快地运行。 如果同学想往深了学Embedding的原理,可以看一个我的视频课:“生成式预训练语言模型:理论与实战 黄佳”。搜一下就出来了。

    2023-10-12归属地:浙江
    1
  • 阿斯蒂芬
    【第二种是 embed_query 方法,为查询创建嵌入】一直有个疑问,如果query是需要“复杂理解”的,那么是怎么通过“相似度”去match到文档内容的呢。比如文档是一片小说,而query是:请解读文中描写主人翁心理活动的部分?这里面 LangChain 是否做了特殊处理?

    作者回复: 同学的问题特别好。这边LangChain并没有做特别的处理,而目前的LLM还无法处理超长的文本。那么,首先:你的问题要非常细。解读心理活动,解读那部分?哪年哪月?哪个环境?你泛泛,回答肯定不准。你问题细,就有可能检索出来相关的嵌入块。另外,工程上需要设计Metadata给每个块,需要做Summary,需要考虑递归式的检索策略,分层的检索策略。这是另一个大课题了。

    2023-10-11归属地:广东
    3
    1
  • 日暮途远
    embed_documents和embed_query这一块的文档是不是写错了?出现了2次「embed_documents 方法的示例代码如下:」

    作者回复: 好的,多谢同学,马上修改文字!

    2023-11-26归属地:上海
  • qkyong
    检索时为啥要指定text-splitter?理论上直接计算向量距离呀

    作者回复: 同学具体指得那段代码。一般来说text-splitter是生成矢量存储片之前用到的工具。检索时候,就直接计算向量距离。

    2023-10-30归属地:广东
  • zjl
    langchain有没有调用本地检索的tool呢?或许可以尝试用本地检索去做reAct

    作者回复: 可以啊,把Retrival模块和ReAct代理结合起来。你可以构建自己的Custom Tool。

    2023-10-25归属地:北京
    2
  • 感性即自然的理性
    希望老师可以最后的内容里面涉及到相关交互页面的内容,就是图形页面的内容

    作者回复: 好的,同学的意思是利用Streamlit这种WebUI框架开发交互式的机器学习应用是么?如果是的,我们最后的项目会有一些这部分的内容。

    2023-10-11归属地:北京
  • ManerFan
    相比 langchain的Retrival和llama index,应该如何选择呢?
    2024-02-28归属地:北京
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部