多输入工具
本文档演示如何在 Agent 中使用需要多个输入的工具。推荐的方法是使用 StructuredTool
类。
import os
os.environ["LANGCHAIN_TRACING"] = "true"
from langchain import OpenAI
from langchain.agents import initialize_agent, AgentType
llm = OpenAI(temperature=0)
from langchain.tools import StructuredTool
def multiplier(a: float, b: float) -> float:
"""Multiply the provided floats."""
return a * b
tool = StructuredTool.from_function(multiplier)
# Structured tools are compatible with the STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION agent type.
agent_executor = initialize_agent([tool], llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent_executor.run("What is 3 times 4")
Entering new AgentExecutor chain...
Thought: I need to multiply 3 and 4
Action:
```
{
"action": "multiplier",
"action_input": {"a": 3, "b": 4}
}
```
Observation: 12
Thought: I know what to respond
Action:
```
{
"action": "Final Answer",
"action_input": "3 times 4 is 12"
}
```
Finished chain.
'3 times 4 is 12'
使用字符串格式的多输入工具
与结构化工具相比,另一种方法是使用常规的 Tool
类,并接受单个字符串作为输入。然后,工具必须处理解析逻辑,从文本中提取相关值,这将使工具表示与 Agent 提示紧密耦合。如果底层语言模型无法可靠地生成结构化模式,这仍然很有用。
让我们以乘法函数为例。为了使用它,我们将告诉 Agent 生成以逗号分隔的长度为两个的 "Action Input"。然后,我们编写一个简单的包装器,将字符串分割成两部分(以逗号为界),并将两个解析后的值作为整数传递给乘法函数。
from langchain.llms import OpenAI
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
以下是乘法函数及其字符串解析器的示例:
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="useful for when you need to multiply two numbers together. The input to this tool should be a comma separated list of numbers of length two, representing the two numbers you want to multiply together. For example, `1,2` would be the input if you wanted to multiply 1 by 2."
)
]
mrkl = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
mrkl.run("What is 3 times 4")
Entering new AgentExecutor chain...
I need to multiply two numbers
Action: Multiplier
Action Input: 3,4
Observation: 12
Thought: I now know the final answer
Final Answer: 3 times 4 is 12
Finished chain.
'3 times 4 is 12'