学习笔记15《检索增强生成:通过RAG助力鲜花运营》

99 阅读2分钟

RAG 概览

RAG是一种结合了检索和生成能力的模型,它通过从大规模外部知识库中检索相关信息,增强了传统语言生成模型的能力。RAG特别适合处理需要具体细节或外部事实支持的问题。

RAG 工作原理

  1. 检索:从大型文档集合中查找相关文档或段落。
  2. 上下文编码:将检索到的文档与原始输入一起编码。
  3. 生成:使用编码的上下文信息生成输出。

LangChain 工具梳理

LangChain提供了多种工具来实现RAG,包括文档加载器、文本转换器、文本分割器、嵌入模型和向量数据库等。

文档加载

  • 支持多种文档类型(HTML、PDF、代码)。
  • 与Airbyte和Unstructured.IO等集成。

文本转换

  • 将长文档分割成适合模型上下文窗口的小块。

文本分割器

  • 将文本分成具有语义意义的块。
  • 块之间有一定的重叠以保持上下文。

嵌入

  • 使用LLM将文本转换为数值表示,便于计算机处理和比较文本。
  • LangChain提供与多个嵌入模型的交互接口。

存储嵌入

  • 缓存存储:如InMemoryStore、LocalFileStore、RedisStore。
  • 向量数据库:如Elasticsearch、Faiss、Chroma、Qdrant等。

数据检索

  • Retriever:通过非结构化查询返回相关文档。
  • 向量存储检索器:支持向量检索。

索引

  • 管理和定位文档信息,确保文档具有唯一标识并便于检索。
  • 使用记录管理器跟踪文档状态和来源。

实践任务

  1. 文本分割:尝试使用一种文本分割器给文档分块。
    from langchain.text_splitter import CharacterTextSplitter
    text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
    
  2. 向量数据库:尝试使用一种新的向量数据库存储文本嵌入。
    from langchain.vectorstores import Chroma
    from langchain.embeddings import OpenAIEmbeddings
    embeddings = OpenAIEmbeddings()
    index_creator = VectorstoreIndexCreator(
        vectorstore_cls=Chroma,
        embedding=OpenAIEmbeddings(),
        text_splitter=CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
    )
    
  3. 检索器:尝试使用一种新的检索器提取信息。
    from langchain.indexes import VectorstoreIndexCreator
    index = VectorstoreIndexCreator().from_loaders([loader])
    query = "玫瑰花的花语是什么?"
    result = index.query(query)
    print(result)
    

应用场景

  • 鲜花运营:通过嵌入向量关联鲜花与非结构化信息(如花语、颜色、产地)。
  • 订单管理:嵌入并检索订单信息,提供实时更新、跟踪和查询服务。

思考与延伸

  • RAG为非结构化数据创建了一个“地图”,通过嵌入向量快速准确地检索信息。
  • 下一课将探讨LLM如何帮助查询数据库表中的条目。

总结

RAG通过检索增强生成,为非结构化数据的存储和搜索提供了一种有效方法。通过LangChain工具,我们可以轻松实现RAG,提高信息检索的效率和准确性。期待在实践中深入理解和应用RAG,以提升业务流程和用户体验。