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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:05:04