CrewAI Agent初始化失败报错'mechanical_assistant'求排查方案
问题分析与排查方案
问题描述
基于CrewAI的CrewBase创建了EnergyAssitt类,代码如下:
@CrewBase class EnergyAssitt(): """EnergyAssitt crew""" agents_config = 'config/agents.yaml' tasks_config = 'config/tasks.yaml' def __init__(self): logger.info(f"__init__") @agent def assistant(self) -> Agent: logger.info(f"assistant") return Agent( config=self.agents_config['mechanical_assistant'], memory=True, memory_config=memory_config, verbose=True ) @task def chat_task(self) -> Task: logger.info(f"chat_task") return Task( config=self.tasks_config['chat_task'], agent=self.assistant() ) @crew def crew(self) -> Crew: """Creates the Energy Assisstant crew""" logger.info(f"crew") return Crew( agents=self.agents, tasks=self.tasks, process=Process.sequential, knowledge_sources=[pdf_source], verbose=True )
提交任务时出现错误:
2025-03-19 16:46:10,270 - app.services.services - INFO - Task 5a3a8b3a-573f-4b18-9a11-43d079df87fb failed with error: 'mechanical_assistant'
核心问题与排查步骤
1. 配置文件未正确加载(最可能原因)
代码中agents_config = 'config/agents.yaml'仅存储了文件路径字符串,而非加载后的YAML字典。直接用self.agents_config['mechanical_assistant']尝试对字符串做字典索引,必然找不到目标键。
解决方式:在__init__方法中加载YAML文件为字典对象:
import yaml @CrewBase class EnergyAssitt(): agents_config = None tasks_config = None def __init__(self): logger.info(f"__init__") # 加载agents配置文件 try: with open('config/agents.yaml', 'r', encoding='utf-8') as f: self.agents_config = yaml.safe_load(f) except FileNotFoundError: logger.error("agents.yaml文件不存在") raise except yaml.YAMLError as e: logger.error(f"YAML解析错误: {e}") raise # 加载tasks配置文件 try: with open('config/tasks.yaml', 'r', encoding='utf-8') as f: self.tasks_config = yaml.safe_load(f) except FileNotFoundError: logger.error("tasks.yaml文件不存在") raise except yaml.YAMLError as e: logger.error(f"YAML解析错误: {e}") raise
2. 检查YAML文件内容
- 确认
config/agents.yaml中存在mechanical_assistant顶级键,格式示例:mechanical_assistant: role: "机械能源助理" goal: "解答能源系统相关的技术问题" backstory: "具备多年能源行业技术经验,专注于设备运维与咨询" verbose: true - 检查YAML语法:必须用空格缩进(禁止使用制表符),字符串引号配对,无语法错误。
3. 验证文件路径与权限
- 确认
config/agents.yaml路径正确:相对路径以程序运行的工作目录为基准,而非当前脚本所在目录。可通过打印os.getcwd()确认工作目录。 - 确保程序拥有读取该文件的权限,避免因权限不足导致加载失败。
4. 其他潜在问题
- 确认
memory_config和pdf_source变量已正确定义,避免因未定义变量引发连锁错误。 - 检查
@agent、@task、@crew装饰器的使用是否符合CrewAI规范,确保代理和任务被正确注册。
内容的提问来源于stack exchange,提问作者Gurpreet Sachdeva
相关产品推荐
相关产品推荐

