LangChain笔记的最后一篇,内容相对简略。关于其他应用开发的可以看下项目主页。
RAG 应用架构
Retrieval-Augmented Generation,即检索增强生成,它结合了检索和生成的能力,为文本序列生成任务引入外部知识。RAG将传统的语言生成模型与大规模的外部知识库相结合,使模型在生成响应或文本时可以动态地从这些知识库中检索相关信息。
数据源 - 大模型应用 - 用例
数据处理管道(Pipeline)
- Loading:文档加载器把 Documents 加载为以LangChain能够读取的形式。
- Splitting:文本分割器把 Documents 切分为指定大小的分割,我把它们称为“文档块”或者“文档片”。
- Storage:将上一步中分割好的“文档块”以“嵌入”(Embedding)的形式存储到向量数据库(Vector DB)中,形成一个个的“嵌入片”。
- Retrieval:应用程序从存储中检索分割后的文档(例如通过比较余弦相似度,找到与输入问题类似的嵌入片)。
- Output:把问题和相似的嵌入片传递给语言模型(LLM),使用包含问题和检索到的分割的提示生成答案。
我们使用了 OpenAIEmbeddings 来生成嵌入,然后使用 Qdrant 这个向量数据库来存储嵌入
词嵌入(Word Embedding):将文本编码成向量。
LangChain中的
Embeddings类是设计用于与文本嵌入模型交互的类。这个类为所有这些提供者提供标准接口。
embed_documents方法,为文档创建嵌入。接收多个文本作为输入,意味着你可以一次性将多个文档,即被搜索的内容,转换为它们的向量表示。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 会对每个文档进行哈希处理,确保每个文档都有一个唯一的标识。这个哈希值不仅仅基于文档的内容,还考虑了文档的元数据。确保了即使文档经历了多次转换或处理,也能够精确地跟踪它的状态和来源,确保文档数据被正确管理和索引。
论文
以下是课程中提到的论文,感兴趣可以仔细阅读。
- 开放式表格与文本问题回答,Chen, W., Chang, M.-W., Schlinger, E., Wang, W., & Cohen, W. W. (2021). Open Question Answering over Tables and Text. ICLR 2021.
- Open AI的GPT-3模型:大模型是少样本学习者, Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., ... & Agarwal, S. (2020). Language models are few-shot learners. arXiv preprint arXiv:2005.14165.
- 微调后的语言模型是零样本学习者, Wei, J., Bosma, M., Zhao, V. Y., Guu, K., Yu, A. W., Lester, B., Du, N., Dai, A. M., & Le, Q. V. (2022). Finetuned Language Models Are Zero-Shot Learners. Proceedings of the International Conference on Learning Representations (ICLR 2022).
- 对示例角色的重新思考:是什么使得上下文学习有效?, Min, S., Lyu, X., Holtzman, A., Artetxe, M., Lewis, M., Hajishirzi, H., & Zettlemoyer, L. (2022). Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? Proceedings of the 2022 Conference on Empirical Methods in Natural Language Processing (EMNLP 2022).
- 2022 年,在 Google 发布的论文 Chain-of-Thought Prompting Elicits Reasoning in Large Language Models中首次提出思维链(Chain of Thought),Wang, X., Wei, J., Schuurmans, D., Le, Q., Chi, E., Narang, S., Chowdhery, A., & Zhou, D. (2023). Self-Consistency Improves Chain of Thought Reasoning in Language Models. Proceedings of the International Conference on Learning Representations (ICLR). arXiv preprint arXiv:2203.11171.
- 论文,思维之树:使用大型语言模型进行深思熟虑的问题解决,Yao, S., Yu, D., Zhao, J., Shafran, I., Griffiths, T. L., Cao, Y., & Narasimhan, K. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models. arXiv preprint arXiv:2305.10601.
- ReAct:在语言模型中协同推理和行动,Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., & Cao, Y. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv preprint arXiv:2210.03629
- ART:大型语言模型的自动多步推理和工具使用,Paranjape, B., Lundberg, S., Singh, S., Hajishirzi, H., Zettlemoyer, L., & Ribeiro, M. T. (2023). ART: Automatic multi-step reasoning and tool-use for large language models. arXiv preprint arXiv:2303.09014.
- "计划与解决"提示:通过大型语言模型改进Zero-Shot链式思考推理 Wang, L., Xu, W., Lan, Y., Hu, Z., Lan, Y., Lee, R. K.-W., & Lim, E.-P. (2023). Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models. arXiv preprint arXiv:2305.04091.
- Large Language Models are Zero-Shot Reasoners
- 论文 HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face 官网