快速结论:当 DOCXSearchTool 以固定文档方式初始化(例如 DOCXSearchTool(docx="document.docx"))后,Agent 执行工具时只传入 search_query,会因子类化的 FixedDOCXSearchToolSchema 仍把 docx 标记为必填而触发 Pydantic ValidationError。优先检查 DOCXSearchTool 的 schema 继承关系是否与 CSV/PDF/JSON/Directory 等同类 RAG 工具一致。
适用环境:Issue 已确认:macOS Sonoma;Python 3.12;crewAI 1.15.20;crewAI Tools 1.15.20;Venv 虚拟环境。其他系统、CUDA、显卡、PyTorch 版本在 Issue 中未提及,无法确认。
最快修复方案:Issue 中给出的修复方向是调整 schema 继承:让 FixedDOCXSearchToolSchema 只保留 search_query 必填,让 DOCXSearchToolSchema 继承前者并补充 docx: str = Field(...)。该方案由提交者在本地通过 pytest、mypy、ruff 验证,并计划提交 PR,但是否已合并到正式版本需以对应 release 为准。
注意事项:该修复尚未在 Issue 中体现为已发布版本的一步式升级命令;如果所在环境使用的是包含该 bug 的 crewAI 版本,需关注后续版本是否已合入,或按上述 schema 结构自行修改。文档模式(固定 docx)与动态模式(每次传入 docx)下字段必填要求不同,修改时不要只把 docx 改成可选,否则会破坏动态模式的行为。
问题场景
用户在 CrewAI 中使用 DOCXSearchTool,并以固定文档方式初始化该工具,即把 docx 路径在构造时传入:tool = DOCXSearchTool(docx="document.docx")。此时工具内部会把 self.args_schema 设置为 FixedDOCXSearchToolSchema。之后 Agent 调用该工具时只携带 {"search_query": "..."},期望由固定的 docx 提供文件来源,但 Pydantic 校验失败,工具调用被中断。
报错原文
ValidationError: 1 validation error for FixedDOCXSearchToolSchema
docx: Field required [type=missing, input_value={'search_query': '...'}, input_type=dict]
原因分析
最可能的原因是 DOCXSearchTool 的 schema 继承关系被写反了。在 docx_search_tool.py 中,FixedDOCXSearchToolSchema 把 docx 字段用 Field(...) 标记为必填,而 DOCXSearchToolSchema 又继承自 FixedDOCXSearchToolSchema。这导致固定模式(构造时传入 docx)下,Agent 仍然需要每次调用都提供 docx。
对比同类 RAG 工具可以确认这是 DOCXSearchTool 独有的反例:CSVSearchTool 的 FixedCSVSearchToolSchema 只要求 search_query,由 CSVSearchToolSchema 补充 csv;PDFSearchTool、JSONSearchTool、DirectorySearchTool 也遵循同样模式。DOCXSearchTool 是唯一固定 schema 仍要求文件路径的工具,因此 Agent 只传 search_query 时必然报错。
环境排查
- 确认 crewAI 版本:Issue 报告版本为 1.15.20。
- 确认 crewAI Tools 版本:Issue 报告版本为 1.15.20。
- 确认 Python 版本:Issue 报告版本为 3.12。
- 确认虚拟环境:Issue 使用 Venv。
- 确认操作系统:Issue 使用 macOS Sonoma。其他 OS 未验证。
- 确认触发方式:是否以固定 docx 初始化,且 Agent 调用时只传入 search_query。
- CUDA、PyTorch、显卡版本在 Issue 中未涉及,无需作为排查重点。
解决步骤
- 先按 Issue 的复现步骤确认问题:用固定文档初始化
DOCXSearchTool(docx="sample.docx"),再执行tool.args_schema.model_validate({"search_query": "quarterly revenue"}),观察是否抛出同样的 ValidationError。 - 检查当前环境中
docx_search_tool.py的 schema 定义,确认FixedDOCXSearchToolSchema是否错误地把docx标记为必填(Field(...))。 - 按 Issue 给出的修复方向调整 schema:
FixedDOCXSearchToolSchema只保留search_query: str = Field(...)作为必填字段;DOCXSearchToolSchema继承FixedDOCXSearchToolSchema,并补充docx: str = Field(...)以支持动态模式。 - 如果不想直接改源码,可关注 crewAI 后续版本是否已合入该修复;Issue 中提交者表示已准备 PR,但未说明具体合并版本,因此升级到包含修复的版本是长期方案。
- 修改后运行本地回归测试,Issue 提交者提到会在
test_docx_search_tool.py加入专门单测,并保证 pytest、mypy、ruff 通过;可参照该方式验证。
验证方法
重新执行 tool.args_schema.model_validate({"search_query": "quarterly revenue"}),若不再抛出 docx: Field required,且只传 search_query 时字段校验通过,即可确认修复生效。再在 Agent 实际执行路径中调用一次 DOCXSearchTool,确认固定模式与动态模式(显式传入 docx)都能正常工作,且动态模式仍然要求提供 docx。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug] Chatflow with Human Input node: input box remains disabled after workflow completion in v1.16.1](https://www.chat-gpts.plus/wp-content/uploads/2026/09/40076-32d8bdf5-768x403.jpg)