快速结论:这不是一个运行时报错,而是关于 Add `ToolArgValidationMiddleware` — a new agent middleware that validates LLM-generated tool-call arguments 的功能请求(feature request)。如果你在找官方的工具参数校验中间件,结论是 LangChain 核心库暂时不会合并该中间件,需要改用社区独立包。
适用环境:Issue 中确认的包为 langchain,工具为 LangChain create_agent() / agent middleware 体系。Issue 未提供操作系统、Python、CUDA、显卡等环境信息。
最快修复方案:暂无确认的一步修复方案。Issue 中明确验证过的首选处理方式是:该中间件已由作者发布为独立包 langchain-tool-args-validation-middleware(PyPI 0.1.0),可作为 create_agent() 的 middleware 参数直接使用;核心库合并请求未通过。
注意事项:独立包属于社区实现,不在 LangChain 核心团队维护范围内,版本兼容性与长期维护需要自行评估。Issue 中给出的 pip install YOUR-PACKAGE 与 from YOUR_PACKAGE import YOURMODULE 是官方维护者示范用的占位写法,替换时应以实际包名和模块名为准。
问题场景
用户在使用 LangChain 构建 agent(尤其是通过 create_agent() 组装模型与工具)时,希望在做工具调用前校验 LLM 生成的 tool-call 参数是否满足工具 schema。典型触发场景包括:
- LLM 生成缺必填字段、类型错误、夹带空值或多余 key 的 tool-call 参数,直到工具节点执行才暴露错误。
- 使用 MCP 工具,JSON Schema 复杂,模型没有针对该 schema 微调过。
- 多步 agentic loop 中,一次错误的 tool call 让整个任务跑偏。
- Human-in-the-loop 工作流中,格式明显错误的参数被提交给用户审批。
用户希望有一个标准、可复用的中间件,在模型边界(工具执行或 HITL 之前)完成校验与重试,而不是自己写校验逻辑或接受工具层失败。
报错原文
Add `ToolArgValidationMiddleware` — a new agent middleware that validates LLM-generated tool-call arguments
该条为 Issue 标题中的功能描述文本,并非运行时报错堆栈。Issue 正文中未附加任何异常输出或 traceback。
原因分析
这不是 bug,而是功能缺失(feature gap)。最可能的原因是:LangChain 核心库当前没有内置的参数校验中间件,用户需要一个在 wrap_model_call / awrap_model_call 层拦截模型响应、对每个 tool call 做 schema 校验并在失败时回灌错误信息让模型自我修正的组件。
Issue 中提出的技术方案要点为:
- 继承
AgentMiddleware,实现wrap_model_call与awrap_model_call。 - 首次调用时从
request.tools惰性解析并缓存工具 schema。 - Pydantic 类工具(
@tool创建或带BaseModel的args_schema)用BaseModel.model_validate校验。 - MCP / dict-schema 工具(
args_schema为原始 JSON Schema dict)用jsonschema(软依赖,默认Draft7Validator,可配置)校验。 - 校验失败时追加描述错误的
ToolMessage并重新调用模型,重试循环全部位于 model node 内部,只有最终合法的AIMessage进入 graph state。 - 可配置项:
max_retries(默认 2)、strip_empty_values(默认 True,递归移除None/{}/[])、json_schema_validator_class(默认 None →Draft7Validator)。
环境排查
- 确认你使用的 LangChain 包:Issue 标注为
langchain。 - 确认
AgentMiddleware中间件接口的可用性——维护者在 Issue 中表示该接口是公开且稳定的。 - 确认模型接入方式(Issue 示例使用
anthropic:claude-opus-4-6,仅作演示)。 - 若采用独立包方案,确认 PyPI 包
langchain-tool-args-validation-middleware的版本(Issue 中发布版本为 0.1.0)与本地 LangChain 版本的兼容性。 - 若使用 dict-schema / MCP 工具校验路径,确认
jsonschema软依赖是否已安装。 - Issue 未提供操作系统、Python、CUDA、PyTorch、显卡等信息,无需在这些方向排查。
解决步骤
- 先明确预期:该中间件不会被合入
langchain核心库。维护者给出的理由是仓库已经非常拥挤、依赖面大,每新增一个中间件都会增加核心团队的维护负担。 - 按维护者建议,将方案作为独立包发布到 PyPI 使用。维护者示范的接入形式如下(注意
YOUR-PACKAGE/YOURMODULE/key=value为占位符,需替换为实际值):
pip install YOUR-PACKAGE
from langchain.agents import create_agent
from YOUR_PACKAGE import YOURMODULE
agent = create_agent(
model="anthropic:claude-opus-4-6",
tools=[...],
middleware=[
YOURMODULE(
key=value,
...
),
],
)
- 采用作者实际发布的独立包:
langchain-tool-args-validation-middleware,可通过 GitHub 仓库Serjbory/langchain-tool-args-validation-middleware或 PyPI 0.1.0 获取,并按上方的middleware=[...]方式接入create_agent()。 - 如果你已有自己的实现(Issue 中出现了 PR #36699 与 PR #36722 两条实现线索),注意 PR #36722 的提交者被建议无需继续,因为 PR #36699 已包含同作者的实现思路;最终该方向仍以独立包形式落地。
- 若你的场景对校验延迟敏感,可优先尝试在部署侧缓存已校验的 schema、编译 validator,或对高频调用做抽样校验——这些是评论中提出的生产建议,非 Issue 官方验证结论。
验证方法
接入中间件后,构造一个参数不合法的 tool call(例如缺少必填字段、类型错误或夹带 None / {} / [] 空值),观察中间件是否在模型边界拦截、追加错误 ToolMessage 并触发模型重试,且只有最终合法的 AIMessage 进入 graph state、工具节点未收到非法参数。Issue 中作者称其实现通过了 14 个单元与端到端测试,覆盖 Pydantic v1/v2 与 JSON Schema 校验;如需确认独立包是否正常工作,建议以其仓库中的测试用例为基准自测。
参考来源
相关链接(来自 Issue 讨论):Serjbory/langchain-tool-args-validation-middleware、PyPI: langchain-tool-args-validation-middleware 0.1.0、PR #36699、PR #36722
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


