如何向LangChain Tools模块传递自定义完整输入参数?
解决LangChain Tools传递完整参数的方案
完全可以通过args schema实现将完整输入内容传递给工具函数,无需仅提取action_input。具体实现方式如下:
实现步骤
- 定义一个Pydantic模型,描述你需要接收的完整参数结构(可以是固定字段或任意字典)
- 创建自定义工具时,将该模型指定为
args_schema参数 - 工具函数即可直接接收完整参数,自行解析处理
代码示例
方式1:固定参数结构
如果你的参数字段是确定的,直接定义对应字段的Pydantic模型:
from langchain.tools import BaseTool from pydantic import BaseModel, Field # 定义完整参数的Pydantic模型 class FullParams(BaseModel): name: str = Field(description="名称") dt: int = Field(description="年份") id: int = Field(description="ID") # 自定义工具 class MyCustomTool(BaseTool): name = "my_custom_tool" description = "接收完整参数的自定义工具" args_schema = FullParams # 指定args_schema为自定义模型 def _run(self, name: str, dt: int, id: int): # 直接获取所有参数并处理 print(f"完整参数:name={name}, dt={dt}, id={id}") return "参数处理完成" # 使用工具 tool = MyCustomTool() tool.run({"name": "name", "dt": 2020, "id": 123})
方式2:任意参数字典
如果参数结构不确定,可定义接受字典类型的模型:
from langchain.tools import BaseTool from pydantic import BaseModel, Field class AnyParams(BaseModel): params: dict = Field(description="完整的参数字典") class MyCustomTool(BaseTool): name = "my_custom_tool" description = "接收任意参数字典的工具" args_schema = AnyParams def _run(self, params: dict): # 自行解析参数字典内容 print(f"完整参数字典:{params}") return "参数处理完成" # 使用工具 tool = MyCustomTool() tool.run({"params": {"name": "name", "dt": 2020, "id": 123}})
设置完成后,LangChain会自动将你传入的完整参数解析并传递给工具函数,不再仅提取单一的action_input。
内容的提问来源于stack exchange,提问作者bai you
相关产品推荐
相关产品推荐

