LangChain手记 Question Answer 问答系统

整理并翻译自DeepLearning.AI×LangChain的官方课程:Question Answer(源代码可见)

本节介绍使用LangChian构建文档上的问答系统,可以实现给定一个PDF文档,询问关于文档上出现过的某个信息点,LLM可以给出关于该信息点的详情信息。这种使用方式比较灵活,因为并没有使用PDF上的文本对模型进行训练就可以实现文档上的信息点问答。本节介绍的Chain也比较常用,它涉及到了嵌入(embedding)和向量存储(vector store)。

(笔者注:embedding指的是将一个实体映射到高维空间,以高维向量的形式存储,以最大限度地capture其信息,自然语言处理使用embedding方式表示单词,即词向量。自然语言处理语境下,embedding都指的是word embedding词嵌入)

首先是一个简单的例子:

下面解释了一下底层原理:

LLM's on Documents 文档上的大语言模型

由于最大token数限制,LLM最多只能一次性处理几千个token。因而如果有一个文档级别的信息(远大于几千token),LLM没办法直接处理,因而引入词嵌入(embedding)和向量存储(vector store)来解决这个问题

Embedding 词嵌入

  • 嵌入向量捕捉上下文/含义
  • 相似(指语义相似)内容地文本对应相似的向量

如下图:句子1)和2)语义相似,因而它们的表示向量也相似。

因而我们可以使用表示向量的相似程度来判定两句话的相似程度,在回答文档上的问题时,先找出和提问相似的信息,作为输入喂给LLM,期望LLM能根据相似信息做出解答。

(笔者注:事实上,LLM内部就是将文本转化为词向量(tokenizer)来处理的,直接以向量形式存储节省了文本到向量的转化步骤。)

Vecotor Database 向量数据库


当一个查询输入时,先将其向量化,然后跟向量数据库里面的所有项对比,找出最相似的n项。

查询结果放入输入的上下文中喂给LLM,得到回复。

下面分步解释过程:

使用CSVLoader对象loader加载一个csv文件,里面存放了户外服装相关信息,打印第一行信息如上图。

因为文本量比较少,不需要分块,因而可以直接创建embedding,查看一个embedding(其实是一组词向量):



上述过程可以使用RetrievalQA chain轻松实现:

Stuff method 原材料方法

原材料是最简单的方法,只需要将所有的原始数据放到prompt中作为上下文喂给语言模型。

优点:只需调用一次LLM。LLM可以一次性访问所有数据。

缺点:LLM有上下文长度,对于大型文档或者多个文档超过上下文长度时无法生效。

additional methods 额外方法

Map_reduce:将文档每一个块和提问一起输入一个LLM中,汇总所有LLM结果,再使用一个LLM处理拿到最终答案。

(很有效,可以处理任意数量的文档,还可以并行,但很贵,且独立对待每一个文档,即忽略了文档之间的关联性)

Refine:从一个块和LLM中得到回复之后,再把结果作为下一轮的输出,不断优化到最后一个块,得到最终结果。

(好处时考虑了文档之间的关联性,和map_reduce代价相同)

Map_rank:处理所有块,给每一个块和LLM的结果打分,选一个分最高的作为最终结果。

(需要LLM有能力给结果打分,和map_reduce代价相同,也没有考虑文档之间的关联性)

相关推荐
圆内~搁浅15 小时前
langchain本地知识库问答机器人集成本地知识库
数据库·langchain·机器人
Neo很努力2 天前
【deepseek】本地部署+RAG知识库挂载+对话测试
自然语言处理·chatgpt·langchain·aigc·llama
merlin-mm2 天前
langchain应用-agent
langchain
朴拙数科3 天前
Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好?
数据库·mongodb·langchain
静静的喝酒6 天前
langchain学习笔记之消息存储在内存中的实现方法
langchain·消息存储·内存存储
Rickie6 天前
DeepSeek-V3 解读:优化效率与规模
langchain·rag·deepseek
少林码僧6 天前
1.5 企业级AI大模型四阶技术全景解析:从Prompt到Pre-training的进化路径
人工智能·gpt·chatgpt·langchain·prompt
Clang's Blog8 天前
使用 LangChain 对接硅基流动(SiliconFlow)API:构建一个智能对话系统
langchain
海绵波波1078 天前
Langchain对管道操作符|的重构实现链式流程
python·重构·langchain
morning_sir_jking9 天前
【无标题】
ai·langchain