多输入工具
本笔记本展示了如何使用需要多个输入的工具与代理一起使用。推荐的方法是使用StructuredTool
类。
import os
os.environ["LANGCHAIN_TRACING"] = "true"
from langchain import OpenAI
from langchain.agents import initialize_agent, AgentType
llm = OpenAI(temperature=0)
API 参考:
- initialize_agent 来自
langchain.agents
- AgentType 来自
langchain.agents
from langchain.tools import StructuredTool
def multiplier(a: float, b: float) -> float:
"""Multiply the provided floats."""
return a * b
tool = StructuredTool.from_function(multiplier)
API 参考:
- StructuredTool 来自
langchain.tools
# 结构化工具与STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION代理类型兼容。
agent_executor = initialize_agent(
[tool],
llm,
agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
)
agent_executor.run("What is 3 times 4")
> 进入新的 AgentExecutor 链...
思考:我需要将3和4相乘
动作:
{
"action": "multiplier",
"action_input": {"a": 3, "b": 4}
}
观察:12
思考:我知道如何回答
动作:
{
"action": "Final Answer",
"action_input": "3 times 4 is 12"
}
> 完成链。
'3 times 4 is 12'
使用字符串格式的多输入工具
与结构化工具相比,另一种方法是使用常规的Tool
类并接受一个字符串。然后,工具必须处理解析逻辑以从文本中提取相关值,这将紧密地将工具表示与代理提示耦合在一起。如果底层语言模型无法可靠地生成结构化模式,则仍然很有用。
以乘法函数为例。为了使用它,我们将告诉代理将"Action Input"生成为一个由逗号分隔的长度为两个的列表。然后,我们将编写一个简单的包装器,将字符串围绕逗号分割为两部分,并将两个解析后的值作为整数传递给乘法函数。
from langchain.llms import OpenAI
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
API 参考:
- OpenAI 来自
langchain.llms
- initialize_agent 来自
langchain.agents
- Tool 来自
langchain.agents
- AgentType 来自
langchain.agents
这是乘法函数以及将字符串解析为输入的包装器。
def multiplier(a, b):
return a * b
def parsing_multiplier(string):
a, b = string.split(",")
return multiplier(int(a), int(b))
llm = OpenAI(temperature=0)
tools = [
Tool(
name="Multiplier",
func=parsing_multiplier,
description="用于将两个数字相乘的工具。该工具的输入应为一个由逗号分隔的长度为两个的数字列表,表示您想要相乘的两个数字。例如,如果您想要将1乘以2,则输入应为`1,2`。",
)
]
mrkl = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
mrkl.run("What is 3 times 4")
> 进入新的 AgentExecutor 链...
思考:我需要将两个数字相乘
动作:Multiplier
动作输入:3,4
观察:12
思考:我现在知道最终答案
最终答案:3 times 4 is 12
> 完成链。
'3 times 4 is 12'