在本文中,我们将讨论LangChain中的Agent及其各种类型。但在深入研究Agent之前,让我们先了解一下什么是LangChain和Agent。
一、什么是LangChain?
LangChain是一种功能强大的自动化工具,可用于各种任务,它提供了可用于创建agent的各种工具。
Agents:agent是一种旨在与现实世界交互的软件程序。LangChain提供不同类型的代理商。
Tools:LangChain提供有助于开发agent的工具。
要了解更多关于LangChain的信息,可以参考:https://www.c-sharpcorner.com/article/getting-started-with-langchain/
二、什么是Agent?
LangChain中的Agent是为了与现实世界互动而构建的,它们可以自动执行任务并参与现实世界的场景。LangChain代理可用于各种任务,如回答问题、生成文本、翻译语言、总结文本等。
三、LangChain中的代理类型
LangChain中的Agent使用LLM(语言学习模型)来确定要采取的操作以及顺序。
3.1 Zero-shot ReAct
Zero-shot ReAct Agent是一种语言生成模型,即使不经过特定数据的训练,也可以创建真实的上下文。它可以用于各种任务,如生成创造性的文本格式、语言翻译和生成不同类型的创造性内容。
from langchain.agents import initialize_agent, load_tools, AgentType
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="your_api_key")
tools = load_tools(["wikipedia", "llm-math"], llm=llm)
agent = initialize_agent(tools , llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
output_1=agent.run("4 + 5 is ")
output_2=agent.run("when you add 4 and 5 the result comes 10.")
print(output_1)
print(output_2)
在上面的代码中,导入了LangChain库,并通过设置OpenAI API Key来初始化OpenAI语言模型(LLM)。该代码使用维基百科和数学信息工具设置AI代理,将代理类型指定为ZERO_SHOT_REACT_DESCRIPTION代理。然后,代码提供两个提示来演示与代理的一次性交互。
3.2 Conversational ReAct
此代理是为在会话设置中使用而设计的,它结合了React框架来确定使用哪个工具,并利用内存来记住以前的对话交互。
from langchain.agents import initialize_agent, load_tools
from langchain.llms import OpenAI
from langchain.memory import ConversationBufferMemory
llm = OpenAI(openai_api_key="...")
tools = load_tools(["llm-math"], llm=llm)
memory = ConversationBufferMemory(memory_key="chat_history")
conversational_agent = initialize_agent(
agent="conversational-react-description",
tools=tools,
llm=llm,
verbose=True,
max_iterations=3,
memory=memory,)
output_1=conversational_agent.run("when you add 4 and 5 the result comes 10.")
output_2=conversational_agent.run("4 + 5 is ")
print(output_1)
print(output_2)
上面的代码通过导入必要的模块、设置了OpenAI LLM API Key、加载LLM-math等特定工具进行数学运算以及创建会话缓冲内存来演示LangChain库的使用。然后使用指定的代理类型、工具、LLM和其他参数初始化会话代理。该代码展示了与代理交互的两个提示。
3.3 ReAct Docstore
该代理使用React框架与文档存储进行通信。它要求提供名称相同的“搜索”工具和“查找”工具。“搜索”工具用于搜索文档,而“查找”工具则在最近找到的文档中查找术语。
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
from langchain import Wikipedia
from langchain.agents.react.base import DocstoreExplorer
llm = OpenAI(openai_api_key="...")
docstore = DocstoreExplorer(Wikipedia())
tools=[
Tool(name="Search", func=docstore.search, description="useful for when you need to ask with search"),
Tool(name="Lookup", func=docstore.lookup, description="useful for when you need to ask with lookup")]
react_agent= initialize_agent(tools, llm, agent="react-docstore")
print(react_agent.run("Full name of Narendra Modi is Narendra Damodardas Modi?")) # look on the keywords then go for search
print(react_agent.run("Full name of Narendra Modi is Narendra Damodardas Modi."))
上面的代码从LangChain导入必要的模块,并使用API Key初始化OpenAI语言模型(LLM)。它建立了一个以维基百科为源的文档存储资源管理器。定义了两个工具,“搜索”和“查找”,其中“搜索”工具搜索文档,“查找”工具执行术语查找。
3.4 Self-ask with Search
此代理使用中间回答工具进行自我提问。
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
from langchain import Wikipedia
llm = OpenAI(openai_api_key="...")
wikipedia = Wikipedia()
tools = [
Tool(
name="Intermediate Answer",
func=wikipedia.search,
description='wikipedia search'
)]
agent = initialize_agent(
tools=tools,
llm=llm,
agent="self-ask-with-search",
verbose=True,
)
print(agent.run("what is the capital of Japan?"))
上述代码从LangChain库导入必要的模块,包括代理和语言模型,它设置了一个具有特定代理配置的会话代理,称为“self-ask-with-search”。该代理使用“Intermediate Answer”工具来执行维基百科搜索。
四、常见问题FAQ
问:在LangChain中,Chain和Agent有什么区别?
答:LangChain中Agent和Chain之间的主要区别在于,Agent使用语言模型来确定其动作,而Chain是由开发人员设置的预定义动作序列。Agent使用语言模型根据用户输入和可用工具生成响应,而Chain遵循固定的输入/输出过程。
问:Verbose()做什么?
答:verbose选项可以在屏幕上显示详细的运行信息。
问:LangChain的温度是多少?
答:默认情况下,LangChain聊天模型的创建温度值为0.7。温度参数控制输出的随机性。较高的值(如0.7)使输出更随机,而较低的值(例如0.2)使输出更有重点和确定性。
参考文献:
[1] https://bakshiharsh55.medium.com/agents-in-langchain-3eb92f206a5f