LangChain系列文章
- LangChain 实现给动物取名字,
- LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
- LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
- LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
- LangChain 5易速鲜花内部问答系统
- LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
- LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
- LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
- LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
- LangChain 10思维链Chain of Thought一步一步的思考 think step by step
- LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
- LangChain 12调用模型HuggingFace中的Llama2和Google Flan t5
- LangChain 13输出解析Output Parsers 自动修复解析器
- LangChain 14 SequencialChain链接不同的组件
- LangChain 15根据问题自动路由Router Chain确定用户的意图
- LangChain 16 通过Memory记住历史对话的内容
- LangChain 17 LangSmith调试、测试、评估和监视基于任何LLM框架构建的链和智能代理
- LangChain 18 LangSmith监控评估Agent并创建对应的数据库
- LangChain 19 Agents Reason+Action自定义agent处理OpenAI的计算缺陷
- LangChain 20 Agents调用google搜索API搜索市场价格 Reason Action:在语言模型中协同推理和行动
- LangChain 21 Agents自问自答与搜索 Self-ask with search
- LangChain 22 LangServe用于一键部署LangChain应用程序
- LangChain 23 Agents中的Tools用于增强和扩展智能代理agent的功能
1. RAG检索增强生成Retrieval-augmented generation
RAG 是一种用额外的、通常是私人的或实时的数据增强LLM知识的技术。
LLM可以推理广泛的话题,但它们的知识仅限于它们在特定时间点之前训练的公共数据。如果你想构建可以推理私人数据或模型截止日期之后引入的数据的人工智能应用程序,你需要用模型需要的具体信息增强模型的知识。将适当的信息带入并插入到模型提示中的过程被称为检索增强生成(RAG)。
2. 架构
一个典型的RAG应用程序有两个主要组成部分:
- Indexing索引:用于从源中摄取数据并对其进行索引的流水线。这通常是离线进行的。
- Retrieval and generation检索和生成:实际的RAG链,它在运行时接收用户查询,从索引中检索相关数据,然后将其传递给模型。
从原始数据到答案的最常见完整序列如下:
2.1 Indexing索引
- Load加载:首先我们需要加载我们的数据。我们将使用DocumentLoaders来实现这一点。
- Split分割:文本分割器将大型文档分成较小的块。这对于索引数据和将其传递给模型都很有用,因为大块更难搜索,并且不会在模型的有限上下文窗口中。
- Store存储:我们需要一个地方来存储和索引我们的分割,以便以后可以进行搜索。这通常使用VectorStore和Embeddings模型来完成。
2.2 Retrieval and generation 检索和生成
- Retrieval检索:根据用户输入,使用检索器从存储中检索相关的拆分。
- generate生成:ChatModel / LLM使用包括问题和检索到的数据的提示生成答案。
3. 检索本地文档代码
ChatGPT 生成文本材料
请生成20个水果好处 以下面格式。 水果: 好处
先生成fruit.txt
苹果:富含纤维和抗氧化剂,有助于消化和心脏健康。
香蕉:富含钾和维生素B6,有助于肌肉功能和能量生产。
橙子:高维生素C含量,增强免疫系统。
草莓:富含维生素C和抗氧化剂,有助于皮肤健康。
蓝莓:富含抗氧化剂,有助于大脑健康和防止记忆衰退。
菠萝:含有消化酶和维生素C,有助于消化和免疫系统。
猕猴桃:高维生素C和E含量,有助于皮肤健康和免疫。
西瓜:高水分含量,有助于保持水分和清凉。
芒果:富含维生素A和C,有助于眼睛健康和免疫力。
梨:高纤维含量,有助于消化和控制血糖。
桃子:含有维生素C和钾,有助于心脏健康和皮肤。
樱桃:含有抗炎和抗氧化成分,有助于减少关节疼痛。
杏:富含维生素A,有助于视力和皮肤健康。
葡萄:含有抗氧化剂,有助于防止心脏病和癌症。
柠檬:高维生素C含量,有助于增强免疫力和消化。
鳄梨:含有健康脂肪和纤维,有助于心脏健康和减肥。
黑莓:富含抗氧化剂和维生素C,有助于大脑健康。
火龙果:富含抗氧化剂,有助于减少炎症和促进消化。
石榴:含有抗氧化剂,有助于减少心脏病风险。
无花果:高纤维含量,有助于消化和血糖控制。
RAG/rag_query_doc.py
这段代码使用了Langchain库,以从一个文本文件中检索与查询相关的信息。以下是对每一行代码的解释
# 导入OpenAI模块,用于与OpenAI语言模型交互
from langchain.llms import OpenAI
# 导入PromptTemplate模块,用于创建和管理提示模板
from langchain.prompts import PromptTemplate
# 导入ChatOpenAI类,用于创建和管理OpenAI聊天模型的实例
from langchain.chat_models import ChatOpenAI
# 导入TextLoader类,用于从文本文件加载数据
from langchain.document_loaders import TextLoader
# 导入VectorstoreIndexCreator类,用于创建和管理向量存储索引
from langchain.indexes import VectorstoreIndexCreator
# 导入dotenv库,用于加载.env文件中的环境变量
from dotenv import load_dotenv
# 加载.env文件中的环境变量
load_dotenv()
# 使用TextLoader加载文本文件,指定文件路径和编码格式
loader = TextLoader('./RAG/fruit.txt', encoding='utf8')
# 使用VectorstoreIndexCreator从加载的数据创建向量存储索引
index = VectorstoreIndexCreator().from_loaders([loader])
# 定义要查询的字符串
query = "蓝莓的好处是啥"
# 使用创建的索引执行查询
result = index.query(query)
# 打印查询结果
print(result)
执行结果
└─[1] <git:(develop 984e07a✱✈) > python RAG/rag_query_doc.py
Number of requested results 4 is greater than number of elements in index 1, updating n_results = 1
蓝莓富含抗氧化剂,有助于大脑健康和防止记忆衰退。
(.venv) ┌─[zgpeace@zgpeaces-MBP] - [~/Workspace/LLM/langchain-llm-app] - [2023-12-09 03:07:42]
└─[0] <git:(develop 984e07a✱✈) > python RAG/rag_query_doc.py
Number of requested results 4 is greater than number of elements in index 1, updating n_results = 1
草莓富含维生素C和抗氧化剂,有助于皮肤健康。
代码
https://github.com/zgpeace/pets-name-langchain/tree/develop
参考
https://python.langchain.com/docs/use_cases/question_answering/