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

使用LangChain工具时CrewAI报错:输入需为有效字典或BaseTool实例

解决CrewAI兼容LangChain DuckDuckGoSearchResults工具的ValidationError问题

问题场景

用CrewAI框架搭建AI代理团队时,尝试给researcher代理引入LangChain的DuckDuckGoSearchResults工具,运行代码后触发Pydantic的ValidationError,报错提示Input should be a valid dictionary or instance of BaseTool。

报错原因

CrewAI的Agent类对传入的tools参数有类型限制,要求必须是CrewAI自身的BaseTool子类实例,而LangChain的Tool类和CrewAI的BaseTool不属于同一继承体系,直接传入会触发类型校验失败。

解决方案

自定义一个继承自CrewAI BaseTool的包装类,将LangChain的DuckDuckGoSearchResults工具封装进去,使其符合CrewAI的工具规范。

步骤1:导入CrewAI的BaseTool

在代码开头添加导入:

from crewai_tools import BaseTool

步骤2:编写包装类

创建一个包装类,实现_run方法调用LangChain工具的运行逻辑:

class DuckDuckGoSearchCrewTool(BaseTool):
    name: str = "DuckDuckGo搜索工具"
    description: str = "使用DuckDuckGo进行互联网搜索,获取最新的公开信息,适用于查找行业趋势、技术进展等内容"

    def _run(self, query: str) -> str:
        # 调用LangChain工具的run方法
        return DuckDuckGoSearchResults().run(query)

步骤3:替换工具实例

把原来的duckduckgo_search = DuckDuckGoSearchResults()替换成包装后的工具实例:

duckduckgo_search = DuckDuckGoSearchCrewTool()

修改后的完整代码

import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import BaseTool
from langchain_community.tools import DuckDuckGoSearchResults

os.environ["OPENAI_API_KEY"] = 'your-api-key'
os.environ["OPENAI_API_BASE"] = 'your-api-base'
os.environ["OPENAI_MODEL_NAME"] ='gpt-4o'

# 包装LangChain的DuckDuckGo搜索工具为CrewAI兼容的BaseTool
class DuckDuckGoSearchCrewTool(BaseTool):
    name: str = "DuckDuckGo搜索工具"
    description: str = "使用DuckDuckGo进行互联网搜索,获取最新的公开信息,适用于查找AI行业趋势、技术进展等内容"

    def _run(self, query: str) -> str:
        return DuckDuckGoSearchResults().run(query)

duckduckgo_search = DuckDuckGoSearchCrewTool()

# 定义代理
researcher = Agent(
  role='高级研究分析师',
  goal='揭示AI和数据科学的前沿发展',
  backstory="""您在一家领先的科技智库工作。
  您的专长在于识别新兴趋势。
  您擅长剖析复杂数据并提供可行的见解。""",
  verbose=True,
  allow_delegation=False,
  tools=[duckduckgo_search]
)
writer = Agent(
  role='技术内容策略师',
  goal='撰写引人入胜的科技进展内容',
  backstory="""您是一位著名的内容策略师,以深刻且引人入胜的文章而闻名。
  您将复杂概念转化为引人注目的叙述。""",
  verbose=True,
  allow_delegation=True
)

# 创建任务
task1 = Task(
  description="""对2024年AI的最新进展进行全面分析。
  确定关键趋势、突破性技术和潜在行业影响。""",
  expected_output="完整的分析报告,以要点形式呈现",
  agent=researcher
)

task2 = Task(
  description="""根据提供的见解,撰写一篇引人入胜的博客
  文章,突出最重要的AI进展。
  您的文章应信息丰富且易于理解,适合科技爱好者。
  让它听起来酷一些,避免复杂的词汇,以免听起来像AI写的。""",
  expected_output="至少4段的完整博客文章",
  agent=writer
)

# 实例化团队并执行
crew = Crew(
  agents=[researcher, writer],
  tasks=[task1, task2],
  verbose=True,
  process = Process.sequential
)

result = crew.kickoff()

print("######################")
print(result)

验证说明

修改后,LangChain的DuckDuckGo搜索工具会被包装成CrewAI认可的BaseTool实例,通过Pydantic的类型校验,代理可以正常调用该工具完成搜索任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:13:13