You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangChain Agent中为Tool函数添加ZapierNLA的action_id参数问题

解决Tool类传递action_id参数的ValidationError问题

问题原因

虽然Tool类定义里写了**kwargs: Any,但它底层的Pydantic模型实际设置了extra='forbid',不允许传入未定义的额外字段,所以直接传action_id会触发验证错误。

解决方法

核心思路是把action_id预先绑定到ZapierNLAWrapper.run方法上,让Tool的func调用时自动带上这个参数,不需要给Tool实例传额外字段。

方法1:使用functools.partial包装方法

from functools import partial
from langchain.tools import Tool
from langchain.utilities.zapier import ZapierNLAWrapper

# 实例化一次ZapierNLAWrapper,避免重复创建
zapier_wrapper = ZapierNLAWrapper()

# 创建Tool时用partial固定action_id
tool = Tool(
    name=item['name'],
    func=partial(zapier_wrapper.run, id=item['action_id']),
    description=item['description']
)

方法2:用闭包定义包装函数

from langchain.tools import Tool
from langchain.utilities.zapier import ZapierNLAWrapper

def build_zapier_tool(item):
    wrapper = ZapierNLAWrapper()
    # 闭包自动捕获item['action_id']
    def execute_tool(query):
        return wrapper.run(query=query, id=item['action_id'])
    
    return Tool(
        name=item['name'],
        func=execute_tool,
        description=item['description']
    )

# 使用示例
tool = build_zapier_tool(item)

原理说明

两种方法都是把action_id提前注入到要执行的函数中,当Agent调用工具的func时,只需要传入query参数,函数内部会自动带上预设的action_id,完美避开Tool类的字段验证限制。

内容的提问来源于stack exchange,提问作者Talha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:17:16