引言: 上篇文章已经讲过了langchain最主要部分:链条(chain)的工作原理。我们还需要其他重要部分的配合才能实现想要的功能。
分别是agent(代理),memory(记忆)
下面的文章也只是介绍它们最简单的使用,之后会非常详细具体的结合例子分析。所以:心急吃不来热豆腐,饭得一口口吃。
本文介绍如何使用LangChain中的代理(Agents)和记忆(Memory)。
代理可以使用语言模型(LLM)动态地调用行为链(Chains),根据用户的输入调用不同的行为。我们可以通过加载预定义的工具(Tools)来使用代理,这些工具包括 Google Search、Database、Python REPL等。
为了使用代理,我们需要了解以下概念:
- 工具(Tool):执行特定任务的函数,例如 Google Search、Database lookup、Python REPL、其他链。(一般我们是通过调用api来实现使用工具)
- LLM:支持代理的语言模型。(一般使用openai的模型)
- 代理(Agent):使用的代理,应该是一个字符串,引用支持代理类。这篇文章只涵盖了使用标准支持代理的最简单、最高级别的API。
为了演示代理的使用,我们首先需要安装SerpAPI Python包(serpAPI是谷歌浏览器的api,我们通过调用谷歌的浏览器功能实现联网功能,具体如何拿到api到网上搜一下有详细教程),并设置相应的环境变量。
import os
os.environ["SERPAPI_API_KEY"] = "..."
接着,我们可以通过如下代码来初始化代理:
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
llm = OpenAI(temperature=0) # 首先,加载将要使用的语言模型。
tools = load_tools(["serpapi", "llm-math"], llm=llm) # 加载我们需要使用的工具。
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) # 最后,初始化代理。
运行上述代码后,我们就可以使用agent.run方法来执行代理。例如,我们可以输入问题"What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?",代理将搜索相关信息来回答我们的问题。
agent.run("What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?")
在介绍代理后,我们开始探讨记忆的用法。
为了实现记忆效果,我们需要使用ConversationChain。它包含了两种类型的记忆:短时记忆和长时记忆。
短时记忆是指在一个对话中,我们可以将之前的输入/输出保存到上下文中。代码示例如下:
from langchain import OpenAI, ConversationChain
llm = OpenAI(temperature=0) # 首先初始化语言模型。
conversation = ConversationChain(llm=llm, verbose=True) # 我们可以使用ConversationChain来初始化一个对话。
output = conversation.predict(input="Hi there!") # 输入问题 "Hi there!"
print(output) # 输出的回答为 "Hello! How are you today?"
output = conversation.predict(input="I'm doing well! Just having a conversation with an AI.") # 可以继续和AI交流。
print(output) # 输出的回答为 "That's great! What would you like to talk about?"
长时记忆则可以让代理记住关键的信息。更多细节以后再说。
总之,代理和记忆使得我们可以设计出更加强大和智能的应用。
今天就介绍这么多,明天继续连载。