提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、代理 (Agents) 和工具
要使用代理 (Agents) ,我们需要三样东西:
一个基本的 LLM,
我们将要进行交互的工具 Tools,
一个控制交互的代理 (Agents) 。
代码如下(示例):
#初始化LLM
from langchain import OpenAI
llm = OpenAI(
openai_api_key="OPENAI_API_KEY",
temperature=0,
model_name="text-davinci-003"
)
现在初始化计算器工具。
在初始化工具 Tool 时,我们可以创建自定义工具 Tool 或加载预构建工具 Tool。
无论哪种情况,“工具 Tool” 都是一个给定工具 名称 name 和 描述 description 的 实用链。
例如,我们可以从现有的 llm_math 链创建一个新的计算器工具:
from langchain.chains import LLMMathChain
from langchain.agents import Tool
llm_math = LLMMathChain(llm = llm)
# 初始化数学工具
math_tool = Tool(
name ='Calculator',
func = llm_math.run,
description ='Useful for when you need to answer questions about math.'
)
# 在给 LLM 提供工具时,我们必须作为工具列表传递
tools = [math_tool]
# tools [0].name, tools [0].description
在使用自定义工具时,我们必须遵循此过程。然而,一个预构建的 llm_math 工具可以做同样的事情。所以,我们可以这样做:
from langchain.agents import load_tools
tools = load_tools(
['llm-math'],
llm = llm
)
如果我们的用例存在一个预构建的工具,我们只能按照第二种方法进行。
现在我们有了 LLM 和工具,但没有 代理 (Agents) 。
要初始化一个简单的代理 (Agents) ,我们可以这样做:
from langchain.agents import initialize_agent
zero_shot_agent = initialize_agent(
agent = "zero-shot-react-description",
tools = tools,
llm = llm,
verbose = True,
max_iterations = 3
)
这里使用的 代理 (Agents) 是一个 “zero-shot-react-description” 代理 (Agents) 。
Zero-shot 意味着代理 (Agents) 仅在当前操作上起作用——它没有 记忆。
它使用 ReAct 框架根据工具的 描述 description 来决定使用哪个工具。
zero_shot_agent(" what is (4.5*2.1)^2.2?")
zero_shot_agent("if Mary has four apples and Giorgio brings two and a half apple "
"boxes (apple box contains eight apples), how many apples do we "
"have?")
zero_shot_agent("what is the capital of Norway?")
我们遇到了一个错误。问题在于代理 (Agents) 一直在尝试使用工具。然而,我们的代理 (Agents) 只包含一个工具——计算器。
幸运的是,我们可以通过给代理 (Agents) 添加更多工具来解决这个问题!让我们添加一个简单的 LLM 工具:
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
prompt = PromptTemplate(
input_variables = ["query"],
template = "{query}"
)
llm_chain = LLMChain(llm = llm, prompt = prompt)
# initialize the LLM tool
llm_tool = Tool(
name ='Language Model',
func = llm_chain.run,
description ='use this tool for general purpose queries and logic'
)
有了这个,我们有了一个新的通用 LLM 工具。我们只需将其添加到 tools 列表中并重新初始化代理 (Agents) :
tools.append(llm_tool)
# reinitialize the agent
zero_shot_agent = initialize_agent(
agent = "zero-shot-react-description",
tools = tools,
llm = llm,
verbose = True,
max_iterations = 3
)
zero_shot_agent("what is the capital of Norway?")
二、代理 (Agents) 类型
Zero Shot ReAct
会话式 ReAct Conversational ReAct
ReAct 文档存储
使用搜索自问