LangChain实战课笔记(五)| 豆包MarsCode AI刷题

76 阅读5分钟

LangChain笔记的最后一篇,内容相对简略。关于其他应用开发的可以看下项目主页。

RAG 应用架构

Retrieval-Augmented Generation,即检索增强生成,它结合了检索和生成的能力,为文本序列生成任务引入外部知识。RAG将传统的语言生成模型与大规模的外部知识库相结合,使模型在生成响应或文本时可以动态地从这些知识库中检索相关信息。

数据源 - 大模型应用 - 用例

数据处理管道(Pipeline)

  1. Loading:文档加载器把 Documents 加载为以LangChain能够读取的形式。
  2. Splitting:文本分割器把 Documents 切分为指定大小的分割,我把它们称为“文档块”或者“文档片”。
  3. Storage:将上一步中分割好的“文档块”以“嵌入”(Embedding)的形式存储到向量数据库(Vector DB)中,形成一个个的“嵌入片”。
  4. Retrieval:应用程序从存储中检索分割后的文档(例如通过比较余弦相似度,找到与输入问题类似的嵌入片)。
  5. Output:把问题和相似的嵌入片传递给语言模型(LLM),使用包含问题和检索到的分割的提示生成答案。

我们使用了 OpenAIEmbeddings 来生成嵌入,然后使用 Qdrant 这个向量数据库来存储嵌入

词嵌入(Word Embedding):将文本编码成向量。

LangChain中的 Embeddings 类是设计用于与文本嵌入模型交互的类。这个类为所有这些提供者提供标准接口。

  1. embed_documents 方法,为文档创建嵌入。接收多个文本作为输入,意味着你可以一次性将多个文档,即被搜索的内容,转换为它们的向量表示。
  2. embed_query 方法,为查询创建嵌入。只接收一个文本作为输入,通常是用户的搜索查询。

存储嵌入

CacheBackedEmbeddings:将嵌入缓存在键值存储中。

通过向量数据库(Vector Store)来保存

非结构化查询:

通过向量存储检索器 VectorstoreIndexCreator 创建索引,在索引的 query 方法中,通过 vectorstore 类的 as_retriever 方法完成检索任务。

# 导入文档加载器模块,并使用 TextLoader 来加载文本文件
from langchain.document_loaders import TextLoader
loader = TextLoader('LangChainSamples/OneFlower/易速鲜花花语大全.txt', encoding='utf8')

# 使用 VectorstoreIndexCreator 来从加载器创建索引
from langchain.indexes import VectorstoreIndexCreator
index = VectorstoreIndexCreator().from_loaders([loader])

# 定义查询字符串, 使用创建的索引执行查询
query = "玫瑰花的花语是什么?"
result = index.query(llm, query)
print(result) # 打印查询结果

from langchain.text_splitter import CharacterTextSplitter
# 进行文本分割
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
from langchain_community.vectorstores import Qdrant

# 带有 Qdrant 的向量索引创建器
index_creator = VectorstoreIndexCreator(
    vectorstore_cls=Qdrant,
    embedding,
    text_splitter=CharacterTextSplitter(chunk_size=1000, chunk_overlap=0),
)

索引

一种高效地管理和定位文档信息的方法,确保每个文档具有唯一标识并便于检索。

LangChain 利用了记录管理器(RecordManager)来跟踪哪些文档已经被写入向量存储。

在进行索引时,API 会对每个文档进行哈希处理,确保每个文档都有一个唯一的标识。这个哈希值不仅仅基于文档的内容,还考虑了文档的元数据。确保了即使文档经历了多次转换或处理,也能够精确地跟踪它的状态和来源,确保文档数据被正确管理和索引。

LangChain中 Indexing 的说明

论文

以下是课程中提到的论文,感兴趣可以仔细阅读。