CrewAI自定义Youtube搜索工具初始化报错:不存在'app'字段
排查CustomYoutubeChannelSearchTool初始化报错"no field 'app'"的解决步骤
核心原因
该错误源于你实现的CustomYoutubeChannelSearchTool类未满足CrewAI工具基类的属性要求——要么没显式声明app属性,要么初始化时未传入该参数。
具体解决方法
1. 补全工具类的属性声明
确保你的工具类正确继承CrewAI的工具基类,并显式声明app属性(类型根据实际业务定义,比如API客户端实例或字符串标识):
from crewai_tools import BaseTool class CustomYoutubeChannelSearchTool(BaseTool): # 显式声明app属性,匹配父类要求 app: object # 可替换为实际需要的类型,如YouTube API客户端 name: str = "Custom Youtube Channel Search Tool" description: str = "用于检索YouTube频道内容的自定义工具" def _run(self, query: str) -> str: # 此处实现你的搜索逻辑 return f"针对[{query}]的搜索结果"
2. 初始化工具时传入合法的app参数
创建工具实例时,必须传入符合类型要求的app值,比如已初始化的YouTube API客户端:
# 示例:初始化YouTube客户端(根据你使用的库调整) from googleapiclient.discovery import build youtube_client = build('youtube', 'v3', developerKey='你的API密钥') # 创建工具实例并传入app参数 tool = CustomYoutubeChannelSearchTool(app=youtube_client)
3. 验证CrewAI版本兼容性
不同版本的CrewAI对工具基类的属性要求可能不同,先确认当前版本:
pip show crewai
若版本较新,需对照官方文档调整工具类的属性定义,避免因API变更导致的属性缺失。
4. 检查Agent注册工具的逻辑
在给Agent绑定工具时,确保传入的是已初始化的工具实例,而非类本身:
from crewai import Agent agent = Agent( role="YouTube内容检索专家", goal="精准获取指定频道的相关内容", backstory="精通自定义工具调用与YouTube数据解析", tools=[tool] # 这里传入初始化后的tool实例,而非CustomYoutubeChannelSearchTool类 )
错误场景验证
如果你的代码既没声明app属性,初始化时也未传入该参数,就会触发如下错误:
AttributeError: 'CustomYoutubeChannelSearchTool' object has no field 'app'
覆盖上述步骤即可解决问题。
内容的提问来源于stack exchange,提问作者Herminio Henriques
相关产品推荐
相关产品推荐

