快速构建 LangChain 应用(一)
LangChain 使您能够构建连接外部数据和计算资源到大型语言模型(LLM)的应用程序。下面我们将一步步来演示这个构建过程。
首先,我们将从简单的 LLM 链开始,它仅依赖于提示模板中的信息来响应。
接下来,我们将构建一个检索链,该链从单独的数据库中获取数据,并将这些数据传递给提示模板。
然后,我们将加入聊天历史记录,以创建一个会话检索链。这使您能够以聊天的方式与这个 LLM 互动,让它记住之前的问题。
最后,我们将构建一个代理人,该代理人利用 LLM 来判断是否需要检索数据来回答问题。
一、LLM 链
1.1、基于OpenAI的实现
我们可以通过API来访问LLM,比如OpenAI。在开始之前,需要先安装LangChain x OpenAI 集成包pip install langchain-openai
。其次设置环境变量OPENAI_API_KEYexport OPENAI_API_KEY="..."
。然后开始初始化。
1 | from langchain_openai import ChatOpenAI |
一旦完成安装并初始化了所选择的 LLM(大型语言模型),我们就可以尝试使用它了!比如让我们问它一些 LangSmith相关的信息。 - 这是一些在训练数据中不存在的内容,所以它可能不会给出一个非常好的回应。
1 | llm.invoke("how can langsmith help with testing?") |
我们还可以通过提示模板来指导它的回应。提示模板用于将原始用户输入转换为更适合 LLM(大型语言模型)的输入。
1 | from langchain_core.prompts import ChatPromptTemplate |
现在我们把llm和prompt组合成一个简单的LLM链。
1 | chain = prompt | llm |
现在我们可以调用它并再次提出同样的问题。它仍然不知道答案,但它应该会以更符合技术作家的语气做出回应。
1 | chain.invoke({"input": "how can langsmith help with testing?"}) |
ChatModel 的输出(也就是这个链的输出)是一个消息体。通常来说,与字符串工作要方便得多。让我们添加一个简单的输出解析器,将聊天消息转换为字符串。
1 | from langchain_core.output_parsers import StrOutputParser |
我们将上面这个输出解析器加到之前的链中。
1 | chain = prompt | llm | output_parser |
再次调用,将返回一个字符串,而非消息体。
1 | chain.invoke({"input": "how can langsmith help with testing?"}) |
1.2、基于Ollama的本地化模型的实现
Ollama 是一个允许本地化运行开源大语言模型(比如Llama 2)的工具。安装完Ollama之后,可以使用类似命令ollama pull llama2
下载开源模型。但Ollama服务允许后,我们就可以用如下代码载入大语言模型。
1 | from langchain_community.llms import Ollama |
得到llm之后的运行代码跟openai在线实现均相同,此地暂略。