引言
在许多问答应用程序中,我们希望用户能够进行往返对话,这意味着应用程序需要某种形式的"记忆",以便在当前交互中使用过去的问题和答案。在本文中,我们将探讨如何通过添加逻辑以纳入历史消息来实现这种记忆。我们将介绍两种方法:链(Chains)和代理(Agents)。
主要内容
1. 设置环境
依赖项
我们将使用OpenAI嵌入和Chroma向量存储,但本文中展示的内容适用于任何嵌入和向量存储或检索器。
%pip install --upgrade --quiet langchain langchain-community langchain-chroma bs4
环境变量
设置OPENAI_API_KEY
环境变量,可以直接设置或通过.env
文件加载。
import getpass
import os
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass()
2. 应用链(Chains)
在对话RAG应用中,查询应由对话上下文决定。LangChain提供create_history_aware_retriever
构造函数简化此过程。
构建LLM和Retriever
from langchain_openai import ChatOpenAI
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate, M