RuntimeError: Executor is already running. Cannot invoke the same executor instance concurrently.”

用户在 CrewAI 中使用 Crew 实例进行多次异步 kickoff(例如 asyncio.gather 同时调用 crew.akickoff() ),或通过循环对同一 Crew 实例传入不同输入时,触发了错误。

RuntimeError: Executor is already running. Cannot invoke the same executor instance concurrently."

RuntimeError: Executor is already running. Cannot invoke the same executor instance concurrently.

快速结论:该报错通常发生在使用 CrewAI 的 Agent 实例并行调用 akickoff() 且内部使用了实验性 AgentExecutor(并非 CrewAgentExecutor)时。优先排查是否因为同一个 Crew 实例被多个异步协程共享,或者确认 Agent 的 executor_class 是否被强制设为 CrewAgentExecutor

问题场景

用户在 CrewAI 中使用 Crew 实例进行多次异步 kickoff(例如 asyncio.gather 同时调用 crew.akickoff()),或通过循环对同一 Crew 实例传入不同输入时,触发了错误。

报错原文

RuntimeError: Executor is already running. Cannot invoke the same executor instance concurrently.

原因分析

在 CrewAI 的代码仓库中,存在两个并行的 Agent 执行器实现:CrewAgentExecutor 和实验性 AgentExecutor。后者在 invoke_async 方法内实现了执行锁(execution lock),当同一个 AgentExecutor 实例被多个异步协程同时调用时,锁会阻止并发执行。而旧的 CrewAgentExecutor 没有此限制,允许同时运行多次 kickoff。该行为差异是架构缺陷(Issue 作者将其归类为 bug),两个实现覆盖了相同的职责,但 AgentExecutor 缺少与 CrewAgentExecutor 的特性对齐。

环境排查

  • 确认 CrewAI 版本:如为 1.14.5a3(或接近主分支提交 d165bcb6 的版本),则可能已默认使用实验性 AgentExecutor
  • 检查 Python 版本(通常 3.9+ 无额外约束)。
  • 检查异步调用方式:是否使用 asyncio.gather 多次调用同一 Crew 实例的 akickoff()

解决步骤

  1. 回退到旧执行器:在创建 Agent 时显式指定 executor_class=CrewAgentExecutor,例如:
    agent = Agent(..., executor_class=CrewAgentExecutor)

    注意:这可能会触发废弃警告(deprecation warning),但可恢复并发行为。

  2. 为每个输入创建独立的 Crew 副本:对于大量输入的情况,使用 akickoff_for_each 方法(该方法内部会对 Crew 进行深拷贝)。这会避免共享同一个执行器实例,但可能带来性能开销。
  3. 避免复用 Crew 实例进行多次并发调用:如果必须使用实验性 AgentExecutor,则设计上应确保每个 Crew 实例只发起一次 akickoff(),并等待其完成后再处理下一个输入。

验证方法

重新运行之前触发错误的异步并行代码(例如用 asyncio.gather 调用多个 crew.akickoff()),若不再出现 RuntimeError: Executor is already running,或原先需要深拷贝的行为已符合预期,则问题修复。

参考来源

crewAIInc/crewAI #5736

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 9628

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注