目录
- LangChain及必知概念
- Loaders
- Document
- Text Spltters 文本分割
- Vectorstores 向量数据库
- Chain 链
- Agent 代理
- Embedding
LangChain及必知概念
LangChain 是一个用于开发由语言模型驱动的应用程序的框架。他主要拥有 2 个能力:
可以将 LLM 模型与外部数据源进行连接
允许与 LLM 模型进行交互
安装方法
pip install langchain
conda install langchain -c conda-forge
Loaders
从指定源进行加载数据的。
比如:文件夹 DirectoryLoader、Azure 存储 AzureBlobStorageContainerLoader、CSV文件 CSVLoader、印象笔记 EverNoteLoader、Google网盘 GoogleDriveLoader、任意的网页 UnstructuredHTMLLoader、PDF PyPDFLoader、S3 S3DirectoryLoader/S3FileLoader、
Youtube YoutubeLoader 等等,上面只是简单的进行列举了几个,官方提供了超级的多的加载器供你使用。
https://python.langchain.com/en/latest/modules/indexes/document_loaders.html
Document
当使用loader加载器读取到数据源后,数据源需要转换成 Document 对象后,后续才能进行使用。
Text Spltters 文本分割
用来分割文本。
为什么需要分割文本?
因为我们每次不管是做把文本当作 prompt 发给 openai api ,还是还是使用 openai api embedding 功能都是有字符限制的。
比如我们将一份300页的 pdf 发给 openai api,让他进行总结,他肯定会报超过最大 Token 错。所以这里就需要使用文本分割器去分割我们 loader 进来的 Document。
Vectorstores 向量数据库
因为数据相关性搜索其实是向量运算。所以,不管我们是使用 openai api embedding 功能还是直接通过向量数据库直接查询,都需要将我们的加载进来的数据 Document 进行向量化,才能进行向量运算搜索。转换成向量也很简单,只需要我们把数据存储到对应的向量数据库中即可完成向量的转换。
https://python.langchain.com/en/latest/modules/indexes/vectorstores.html
Chain 链
我们可以把 Chain 理解为任务。一个 Chain 就是一个任务,当然也可以像链条一样,一个一个的执行多个链。
Agent 代理
可以动态的帮我们选择和调用chain或者已有的工具。
Embedding
用于衡量文本相关性
https://help.openai.com/en/articles/7437458-embeddings
相比 fine-tuning 最大的优势:
不用进行训练,并且可以实时添加新的内容,而不用加一次新的内容就训练一次,并且各方面成本要比 fine-tuning 低很多。
https://www.youtube.com/watch?v=9qq6HTr7Ocw
总结:了解了langchain的一些基本情况,在掌握一些概念前提下,需要写几个小例子来深入理解LangChain中产生的一些东西