mcpField
C
check-crewai-api

check-crewai-api

github.com/crewaiinc開発48734 回インストール3 週間前に更新
リポジトリ

check-crewai-api について

CrewAIのコードを書く、またはレビューする開発者向けに、CrewAI 1.15.xの実際のAPIをまとめたリファレンスです。利用可能なフィールド、インポート、実行時の挙動や、誤りが無視されるケースを説明します。

主な機能

  1. 01Agent、Task、Crewの引数確認
  2. 02現在のインポートパスの例
  3. 03kickoffと結果の参照方法
  4. 04構造化出力の設定説明
  5. 05LLMプロバイダーの設定要件

活用シーン

  1. 01CrewAI更新後のコード互換性確認
  2. 02無視される引数や無効設定の調査
  3. 03構造化タスク出力の設定
  4. 04MCPツール接続方法の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/crewaiinc/skills --skill check-crewai-api

インストール後、Claude Code で/check-crewai-apiを入力して読み込まれたか確認します。

同梱ファイルreferences/source-receipts.mdreferences/verify-installed-api.md

詳細

CrewAI API の確認

crewai のコードを記述またはレビューする前に、これを読み込んでください。おそらく覚えている内容と、crewai 1.15.x で実際に受け付けられる内容を対応付けています。

2026-10-01 に crewai 1.15.22 および 1.15.23 で検証済みです。 2026-10-01 に実際の LLM でライブテスト済みです。 まず crewai version を実行してください。メジャーまたはマイナーバージョンが 1.15 と異なる場合は、信頼する前に ask-docs スキルでバージョン依存の行を再検証してください。


1. 何かを書く前に知っておくべき3つのルール

  1. 不明なキーワード引数は黙って無視されます。 Agent、Task、Crew は、存在しないパラメーターを受け付けて破棄します。Crew(memory_config={...}) や Task(response_format=Model) は問題なく生成されますが、何も行いません。古いパラメーター名を使っても例外は発生しないため、実在することを確認してください。

    from crewai import Agent, Crew, Task
    
    assert "response_model" in Task.model_fields      # real field
    assert "response_format" not in Task.model_fields  # silently dropped if passed
    assert "memory_config" not in Crew.model_fields    # silently dropped if passed
    print(sorted(Agent.model_fields)[:5])
    
  2. インストール済みのソースが、ドキュメント、チュートリアル、記憶よりも優先されます。 これには、crewai create が新しいプロジェクトに生成する AGENTS.md も含まれます。以下の行が重要な場合は、インストール済みのシグネチャを確認してください(verify-installed-api.md を参照)。

  3. 構造化出力は境界でアサートしてください。 以下のいくつかの間違いは、実行が成功したと報告される一方で、out.pydantic is None となり、ひそかに失敗します。


2. インポート

おそらく書いた内容現在の 1.15.x 形式間違った形式で起きること
from crewai_tools import BaseTool, toolfrom crewai.tools import BaseTool, toolImportError: cannot import name 'BaseTool' from 'crewai_tools'
from crewai.flow.flow import Flow, start, listen, persistfrom crewai.flow import Flow, start, listen, router, or_, and_, persistImportError: cannot import name 'persist'
from crewai.task import ConditionalTaskfrom crewai.tasks.conditional_task import ConditionalTaskImportError
from crewai.memory import ShortTermMemory, LongTermMemory, EntityMemoryfrom crewai import MemoryImportError(クラスは削除されています)
from crewai.utilities.events import crewai_event_busfrom crewai.events import BaseEventListener, crewai_event_busModuleNotFoundError: No module named 'crewai.utilities.events'
from crewai_tools import CodeInterpreterToolcrewai に代替品はありません。サンドボックスツールまたはサービスを使用してくださいImportError(削除済み)

現在のトップレベルおよびプロジェクトのインポート:

from crewai import Agent, BaseLLM, Crew, CrewOutput, Flow, LLM, Memory, Process, Task, TaskOutput
from crewai.project import CrewBase, after_kickoff, agent, before_kickoff, crew, llm, task, tool
from crewai.tools import BaseTool, tool
from crewai.flow import Flow, and_, listen, or_, persist, router, start
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
from crewai.mcp import MCPServerHTTP, MCPServerSSE, MCPServerStdio
from crewai.events import BaseEventListener, crewai_event_bus

3. Agent、Task、Crew のパラメーターとデフォルト値

パラメーター現在の値備考
Task.expected_output必須Task(description=...) だけでは ValidationError ... expected_output Field required が発生します
Agent.max_iter2515 または 20 と想定しないでください
Agent.llmNone -> 構築時に解決環境変数 MODEL、次に MODEL_NAME、次に OPENAI_MODEL_NAME を参照し、いずれも設定されていない場合は gpt-4.1-mini が使われます
Agent.cacheTrueキャッシュを許可するだけで、有効化するわけではありません
Crew.cacheFalseツール結果のキャッシュはオプトインです。有効にするには Crew(cache=True) を設定します
Crew.memoryFalse
Crew.processProcess.sequential存在するのは sequential と hierarchical のみです
Task.guardrail_max_retries3max_retries は非推奨です(DeprecationWarning)
おそらく書いていた内容現在の形式誤った形式で発生すること
Process.consensualProcess.sequential または Process.hierarchicalAttributeError
マネージャーを指定せずに Crew(process=Process.hierarchical, ...)manager_llm="openai/gpt-4.1-mini" または manager_agent=... を追加ValidationError: Attribute manager_llm or manager_agent is required
Crew(memory=True, memory_config={...})Crew(memory=Memory(...))memory_config は黙って無視されます
Agent(allow_code_execution=True) / code_execution_mode="unsafe"削除し、サンドボックスツールを使用非推奨の no-op です。allow_code_execution=True は DeprecationWarning を出します
Crew(function_calling_llm=...)削除するか、エージェントごとに llm を設定非推奨です。DeprecationWarning が出ます
同じ agent を使う async_execution=True のタスクを2つ並行する非同期タスクごとに別のエージェントを使用RuntimeError: Executor is already running. Cannot invoke the same executor instance concurrently.
from crewai import Agent, Crew, Process, Task

researcher = Agent(
    role="Researcher",
    goal="Find facts about {topic}",
    backstory="A careful researcher.",
    llm="openai/gpt-4.1-mini",
)
research = Task(
    description="List three facts about {topic}.",
    expected_output="Three bullet points.",
    agent=researcher,
)
crew = Crew(agents=[researcher], tasks=[research], process=Process.sequential, cache=True)
out = crew.kickoff(inputs={"topic": "honey bees"})
print(out.raw)

4. Crew の実行と結果の読み取り

おそらく書いていた内容現在の形式誤った形式で発生すること
crew.kickoff("honey bees")crew.kickoff(inputs={"topic": "honey bees"})TypeError: inputs must be a dict or Mapping, got str
ネイティブな非同期処理で await crew.kickoff_async(...)await crew.akickoff(...)動作しますが、kickoff_async は同期処理の kickoff をスレッド(asyncio.to_thread)で実行します
result.output / result.final_output / result.resultresult.rawAttributeError: 'CrewOutput' object has no attribute ...
同じ Crew で crew.kickoff(...) の後に crew.kickoff_for_each(...) を呼び出すkickoff_for_each 用に新しい Crew を構築する(または、kickoff を呼び出す前に実行する)エラーは発生しませんが、すべての実行で最初の kickoff の入力が再利用されます。実行ごとのコピーには、すでに補間されたタスクテキストが保持されています
await crew.akickoff() を使う Crew の実行で Agent(mcps=["https://..."])mcps=[MCPServerHTTP(url="https://...")](crewai.mcp から)エラーは発生しませんが、エージェントは MCP ツールを1つも取得しません。文字列の参照は asyncio.run() で解決されますが、実行中のイベントループ内では失敗します(connect-tools-and-mcp を参照)

CrewOutput のフィールド:raw、pydantic、json_dict、tasks_output(TaskOutput のリスト)、token_usage。out["field"] は pydantic / json_dict から読み取ります。kickoff_for_each(inputs=[...]) は CrewOutput のリストを返します。

token_usage は実行ごとではなく、各エージェントの LLM オブジェクトの存続期間全体にわたる合計です。1つの LLM(...) インスタンスを2つのエージェントで共有すると、すべての呼び出しが2回分カウントされます。また、同じインスタンスを複数の Crew で再利用すると、前の Crew のトークンも加算されます(anthropic/claude-haiku-4-5 で検証済み。同じ LLM を使った2回目の1回呼び出しの Crew では148トークン、2リクエストが報告され、新しい LLM では73トークン、1リクエストでした)。実行ごとのコストを算出するには、Crew ごとに専用の LLM オブジェクトを割り当てるか、LLMCallCompletedEvent(event.usage)を数えてください。

import asyncio

from crewai import Agent, Crew, Task



def make_crew() -> Crew:
    writer = Agent(role="Writer", goal="Write", backstory="Writes short text.", llm="openai/gpt-4.1-mini")
    task = Task(description="One line on {topic}.", expected_output="One line.", agent=writer)
    return Crew(agents=[writer], tasks=[task])


out = make_crew().kickoff(inputs={"topic": "bees"})
print(out.raw, out.token_usage.total_tokens, [t.raw for t in out.tasks_output])

many = make_crew().kickoff_for_each(inputs=[{"topic": "bees"}, {"topic": "ants"}])
print([o.raw for o in many])


async def main():
    return await make_crew().akickoff(inputs={"topic": "wasps"})

print(asyncio.run(main()).raw)

5. LLM、モデル文字列、プロバイダーの追加機能

LiteLLM は依存関係ではなくなりました。LLM(model=...) はネイティブプロバイダークラスを返すファクトリーです。コアの crewai に含まれるのは OpenAI SDK のみです。

おそらく以前に書いていた形式現在の形式誤った形式で起こること
crewai のみをインストールし、llm="anthropic/claude-sonnet-4-5" と指定uv add "crewai[anthropic]" を実行してから、同じ文字列を指定ImportError: Anthropic native provider not available, to install: uv add "crewai[anthropic]"
crewai のみをインストールし、llm="gemini/gemini-2.5-flash" と指定uv add "crewai[google-genai]"ImportError: Google Gen AI native provider not available
llm="groq/llama-3.3-70b-versatile"(または mistral/... など、ネイティブプロバイダー以外)uv add "crewai[litellm]"ImportError: Unable to initialize LLM with model '...'. The model did not match any supported native provider (...), and the LiteLLM fallback package is not installed.
llm= を指定せず、gpt-4 が使われると思っているデフォルトは gpt-4.1-mini です。MODEL=... または llm= を設定してください
llm.call(messages, response_format=Model)llm.call(messages, response_model=Model)TypeError: ... unexpected keyword argument 'response_format'. Did you mean 'response_model'?
カスタム BaseLLM.call(self, messages, tools=None, callbacks=None, available_functions=None)from_task=None、from_agent=None、response_model=None も受け付けるようにしてください(または **kwargs を指定)キックオフ時に TypeError: call() got an unexpected keyword argument 'from_task'

ネイティブプロバイダー:openai、anthropic/claude、azure、google/gemini、bedrock/aws、openrouter、deepseek、ollama、hosted_vllm、cerebras、dashscope、snowflake。追加機能:crewai[anthropic]、crewai[google-genai]、crewai[bedrock]、crewai[azure-ai-inference]、crewai[litellm]。コンストラクターは API キーを確認せず、キックオフ時に確認します(ValueError: OPENAI_API_KEY is required または ANTHROPIC_API_KEY is required。キーが間違っている場合は、プロバイダーの AuthenticationError ... 401 が発生します)。crewai create のスキャフォールドは、--provider anthropic/... を指定してもプロバイダーの追加機能を追加しません。自分で uv add "crewai[anthropic]" を実行してください。

from crewai import LLM

gpt = LLM(model="openai/gpt-4.1-mini", temperature=0.2)  # core install
local = LLM(model="ollama/llama3")                        # core install, OpenAI-compatible route
claude = LLM(model="anthropic/claude-sonnet-4-5")         # needs: uv add "crewai[anthropic]"
print(type(gpt).__name__, type(local).__name__, type(claude).__name__)

カスタム LLM は BaseLLM をサブクラス化し、完全なシグネチャで call を実装します。call で messages をプロバイダー SDK に渡す場合は、各メッセージの role と content のみを送信してください。crewai は一部のメッセージに cache_breakpoint: True キーを追加しますが、Anthropic API はこれを拒否し、400 ... messages.0.cache_breakpoint: Extra inputs are not permitted を返します。

from typing import Any

from crewai import Agent, BaseLLM, Crew, Task


class EchoLLM(BaseLLM):
    def call(self, messages, tools=None, callbacks=None, available_functions=None,
             from_task=None, from_agent=None, response_model=None, **kwargs: Any) -> str:
        return "echo: " + str(messages[-1]["content"])[:40]


agent = Agent(role="Echo", goal="Echo", backstory="Echoes.", llm=EchoLLM(model="echo"))
task = Task(description="Say hi", expected_output="Anything", agent=agent)
print(Crew(agents=[agent], tasks=[task]).kickoff().raw)

6. 構造化出力

場所用途結果の格納先
Task(output_pydantic=Model)タスクとクルーの出力に解析済みモデルを格納out.pydantic、out["field"]
Task(output_json=Model)辞書形式の出力out.json_dict
Task(response_model=Model)プロバイダーのネイティブな構造化出力のみout.raw(JSON テキスト)。out.pydantic は None のまま
Agent.kickoff(messages, response_format=Model)単独のエージェントLiteAgentOutput.pydantic
llm.call(messages, response_model=Model)LLM の直接呼び出し解析済みモデル
LLM(model=..., response_format=Model)コンストラクターでのデフォルト
おそらく書いていた形式現在の形式誤った形式で起こること
Task(response_format=Model)Task(output_pydantic=Model)無視されます
Agent.kickoff(msg, response_model=Model)Agent.kickoff(msg, response_format=Model)TypeError: ... Did you mean 'response_format'?
Task(output_pydantic=M, output_json=M)どちらか一方を選択ValidationError: Only one output type can be set
ファイルに散文が出力されると期待して Task(output_pydantic=M, output_file="report.md") を指定output_pydantic を削除するか、自分でモデルをレンダリング拡張子に関係なく、ファイルにはモデルの JSON が出力されます
output_file="/abs/path/report.md"相対パス(または入力経由の output_file="{out_dir}/report.md")先頭の / が取り除かれ、ファイルは現在のディレクトリ配下に作成されます
tasks.yaml の output_pydantic: ReportPython の @task メソッドで output_pydantic=Report を設定対応する @output_pydantic クラスがない場合:KeyError: 'Report'。ある場合:黙って無視され、out.pydantic is None になります
from pydantic import BaseModel

from crewai import Agent, Crew, Task


class Report(BaseModel):
    title: str
    points: list[str]


analyst = Agent(role="Analyst", goal="Summarise", backstory="Concise.", llm="openai/gpt-4.1-mini")
task = Task(description="Summarise {topic}.", expected_output="A title and points.",
            agent=analyst, output_pydantic=Report)
out = Crew(agents=[analyst], tasks=[task]).kickoff(inputs={"topic": "bees"})
assert out.pydantic is not None, "structured output was dropped"
print(out.pydantic.title, out["points"])

standalone = analyst.kickoff("Summarise bees.", response_format=Report)
print(standalone.pydantic)

@CrewBase プロジェクトでは、タスクのほかの部分が YAML でも、モデルは Python に記述してください。

@task
def research_task(self) -> Task:
    return Task(config=self.tasks_config["research_task"], output_pydantic=Report)

7. ガードレール

関数型ガードレールは引数を 1 つ(TaskOutput)受け取り、タプル (bool, value) を返します。False の場合、値はエラーとしてエージェントに渡され、タスクは guardrail_max_retries(デフォルトは 3)まで再試行します。その後、タスクは Task failed guardrail validation after N retries を発生させます。文字列型ガードレールは、追加の LLM 呼び出しでチェックされます。

おそらく書いていた形式現在の形式誤った形式で起こること
def g(out) -> bool: return Truedef g(out: TaskOutput) -> tuple[bool, Any] とし、(True, out.raw) を返す型注釈がある場合:Task(...) で ValidationError: If return type is annotated, it must be Tuple[bool, Any]。型注釈がない場合:kickoff 時に TypeError: cannot unpack non-iterable bool object
-> tuple[bool, object]-> tuple[bool, Any](または str、TaskOutput)同じ ValidationError が Task(...) で発生
Task(max_retries=2)Task(guardrail_max_retries=2)DeprecationWarning
HallucinationGuardrail に依存関数型ガードレールを記述オープンソース版の crewai では何もせず、常に通過します
from typing import Any

from crewai import Agent, Crew, Task, TaskOutput


def under_50_words(output: TaskOutput) -> tuple[bool, Any]:
    if len(output.raw.split()) > 50:
        return (False, "Keep it under 50 words.")
    return (True, output.raw)


writer = Agent(role="Writer", goal="Write", backstory="Brief.", llm="openai/gpt-4.1-mini")
task = Task(description="Describe {topic}.", expected_output="A short paragraph.", agent=writer,
            guardrails=[under_50_words, "Must not mention prices"], guardrail_max_retries=2)
print(Crew(agents=[writer], tasks=[task]).kickoff(inputs={"topic": "bees"}).raw)

guardrails=[...] は各ガードレールを順番に実行します。成功した文字列の結果は、次のガードレールで out.raw を置き換えます。


8. メモリとナレッジ

メモリは、1 つの Memory クラス(LanceDB ストレージ)で構成されています。デフォルトでは OpenAI が呼び出され、埋め込みには text-embedding-3-large、分析には gpt-5.4-mini が使われます。Crew(memory=True) では、代わりに最初のエージェントの llm で分析します。また、embedder の指定がないナレッジでは、埋め込みに text-embedding-3-small が使われます。OpenAI キーを使った実動確認では、memory=True のクルーがあるプロセスでコードネームを保存し、次のプロセスで起動した新しいクルーがそれを呼び出せました。クルーとエージェントのナレッジはいずれも、ソースに基づいた回答を返しました。

おそらく記述したもの現在の形式誤った形式で起きること
ShortTermMemory()、LongTermMemory()、EntityMemory()Memory(...)ImportError
OPENAI_API_KEY が設定されていない(または無効な)状態での Crew(memory=True)キーを設定するか、Memory(llm=..., embedder=...) を渡しますクルーは完了しますが、保存はすべてサイレントに失敗します(MemorySaveFailedEvent が発行されるだけです)。何も保存されません
キーを設定せずに memory.remember(...) を実行する同上RuntimeError: Memory requires an embedder for vector search(無効なキーの場合:AuthenticationError ... 401)
キーも embedder も指定せず、クルー内のエージェントに Agent(knowledge_sources=[...]) を設定するAgent または Crew に embedder={...} を渡しますクルーのキックオフ時に ValueError: Invalid Knowledge Configuration: The OPENAI_API_KEY environment variable is not set.(無効なキーの場合:AuthenticationError ... 401)
knowledge_sources を持つエージェントで agent.kickoff(...) を実行するエージェントを Crew のタスクとして実行するか、事実をプロンプトに含めますキーの有無にかかわらずエラーは発生しません。Agent.kickoff() はエージェントのナレッジを参照しないため、回答には反映されません
キーも embedder も指定せずに Crew(knowledge_sources=[...]) を設定する同上Failed to upsert documents がログに記録され、クルーはナレッジなしで実行されます
ナレッジを保存した実行の後で、ナレッジの embedder を変更するcrewai reset-memories -kn(または crew.reset_memories(command_type="knowledge"))を実行してから、再実行しますEmbedding function conflict: new: <x> vs persisted: openai。クルーはナレッジなしで実行されます
embedder を指定せずにナレッジを保存した後で embedder={"provider": "openai"} を追加する(または OpenAI の埋め込みモデルを変更する)同じリセットを実行しますFailed to upsert documents: Collection expecting embedding with dimension of 1536, got 3072(プロバイダーを明示すると、デフォルトで text-embedding-3-large が使われます)。クルーはナレッジを使わずに回答します

embedder の設定形式は {"provider": <name>, "config": {...}} です。OpenAI のモデルキーは model_name です。Memory では "model" を指定すると TypeError: ... unexpected keyword argument 'model' が発生します。ナレッジでは "model" はサイレントに無視され、クルーは text-embedding-3-large で埋め込みを行います。以下の ollama プロバイダーを使うには、uv add ollama の実行と、モデルを取得済みの Ollama サーバーが必要です。パッケージがない場合、クルーのナレッジはサイレントに None になります。{"provider": "onnx"} はローカルで動作する、キー不要の embedder で、core crewai ですでに実行できます(chromadb の onnxruntime を使用し、初回利用時に約 80 MB のモデルをダウンロードします)。実用的な例は、design-agent スキルの memory-and-knowledge リファレンスを参照してください。テストで決定論的な embedder を使うには、callable(Memory の場合)またはカスタムクラス(ナレッジの場合)を使います。verify-installed-api.md を参照してください。

from crewai import Agent, Crew, Memory, Task
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource

embedder = {"provider": "ollama", "config": {"model_name": "nomic-embed-text"}}  # needs: uv add ollama
memory = Memory(llm="openai/gpt-4.1-mini", embedder=embedder)
facts = StringKnowledgeSource(content="acme was founded in 2020.")

agent = Agent(role="Analyst", goal="Answer", backstory="Uses knowledge.", llm="openai/gpt-4.1-mini")
task = Task(description="When was acme founded?", expected_output="A year.", agent=agent)
crew = Crew(agents=[agent], tasks=[task], memory=memory, knowledge_sources=[facts], embedder=embedder)
if crew.knowledge is None:
    print("knowledge failed to initialise - is the ollama package installed and the server running?")

保存済みデータをリセットするには、プロジェクトディレクトリから crewai reset-memories -m(メモリ。クルーにメモリがない場合は Memory memory system is not initialized エラーが発生します)、-kn(ナレッジ)、-akn(エージェントのナレッジ)、-k(最新のキックオフ出力)、-a(すべて)を実行します。旧オプションの -s、-l、-e は、非表示の非推奨エイリアスです。警告を表示して、統合されたメモリをリセットします。ストレージパスとオフライン embedder については、verify-installed-api.md を参照してください。


9. プロジェクトのスキャフォールドと CLI

おそらく入力した内容現在の形式誤った形式で起こること
crewai create crew my_crew で crew.py + YAML が作成されると想定crewai create crew my_crew --classicJSON プロジェクト(crew.jsonc、agents/*.jsonc)を書き出す対話型ウィザードが起動します。TTY がない場合は Aborted! と表示されます。クルーだけが必要なスクリプトでは、--classic --skip-provider を使用してください。
CI やスクリプトで JSON クルーに対して crewai run を実行CI では、crewai create crew <name> --classic でクルーを作成し、uv run run_crew で実行します全画面の実行ビューが開き、TTY がなくてもユーザーが終了するまで待機するため、コマンドが終了しません。環境変数 CREWAI_DMN=1 は crewai 1.15.x で実行ビューをスキップしましたが、サポート対象外でドキュメントにも記載されていません。変更される可能性があります
JSON スキャフォールドで "memory": true のままにし、OPENAI_API_KEY を設定しないキーを設定するか、"memory": false にするか、エンベッダーを設定しますクルーの処理は完了しますが、メモリの呼び出しと保存は失敗しても通知されません
クラシッククルーで crewai run --inputs '{...}' を実行main.py の run() に入力を記述しますError: --inputs is only supported for declarative flows and crews
crewai reset-memories -s -l -ecrewai reset-memories -m非推奨のエイリアスが使われ、警告が表示されます
main.run() から return crew.kickoff(...) を返す出力を返さないでくださいrun_crew スクリプトが sys.exit(<CrewOutput>) を呼び出し、実行が正常に完了した後に終了コード 1 で終了します。crewai run は An error occurred while running the crew: ... non-zero exit status 1 と表示します
クラシッククルー(--classic)または Python フローで、CI において crewai run の終了コードを信頼するuv run run_crew を実行します(終了コードが伝播します)。または出力を確認しますクルーまたはフローのプロセスが失敗しても、crewai run は終了コード 0 で終了します。JSON(ウィザード)クルーには run_crew スクリプトがないため、CI 用のクルーは --classic を指定して作成してください
crewai version
crewai create crew research_crew --classic --skip-provider
cd research_crew && uv add "crewai[anthropic]"   # only if an agent uses an anthropic/ model
crewai install && crewai run
crewai reset-memories --help

クラシックレイアウトは、src/<name>/crew.py(@CrewBase クラス)、src/<name>/config/agents.yaml と tasks.yaml(キーは @agent/@task メソッド名と一致)、main.py、および [tool.crewai] type = "crew" と依存関係 crewai[tools] を含む pyproject.toml で構成されます。YAML で llm: <name> を指定すると、同名の @llm メソッドが解決されます。それ以外の場合はモデル文字列として使用されます。crewai create flow も、プレースホルダーの OPENAI_API_KEY を含む .env を作成します。値を置き換え、決してコミットしないでください。


10. 削除済みおよび非推奨

機能1.15.22-1.15.23 でのステータス代わりに使用するもの
CodeInterpreterToolcrewai_tools から削除サンドボックスツールまたはサービス
Agent(allow_code_execution=...)、code_execution_mode非推奨の無効な機能同上
ShortTermMemory、LongTermMemory、EntityMemory、memory_config削除/無視Memory(...)
crewai.utilities.events削除crewai.events
Crew(function_calling_llm=...)非推奨エージェントごとの llm
Task(max_retries=...)非推奨guardrail_max_retries
crewai.cli モジュール非推奨の互換レイヤーcrewai_cli(CLI は独立したパッケージです)
コア依存関係としての LiteLLMオプションの追加機能ネイティブではないプロバイダーに限り crewai[litellm]

11. よくある間違い

症状原因対処方法
パラメーターを指定しても効果がなく、エラーも出ないAgent/Task/Crew が未知の kwargs を破棄する"name" in Task.model_fields を確認します
out.pydantic is NoneYAML で output_pydantic が設定されているか、output_pydantic の代わりに response_model が使用されているPython で output_pydantic=Model を設定し、None でないことをアサートします
ImportError: ... native provider not availableプロバイダー SDK の追加パッケージが不足しているuv add "crewai[anthropic]"(または [google-genai]、[bedrock]、[litellm])を実行します
kickoff 時に ValueError: OPENAI_API_KEY is required が発生するllm= が設定されていないため、デフォルトの gpt-4.1-mini が使用されたllm= または MODEL と、プロバイダーのキーを設定します
Crew は終了するが、何も記憶されていないembedder のキーが設定されていない状態で memory=True が指定されているMemory(embedder=...) を渡すか、キーを設定します。crewai.events の MemorySaveFailedEvent を監視します
ナレッジがプロンプトに反映されないCrew レベルのナレッジの埋め込みに失敗したembedder= を設定し、Failed to upsert documents を確認します
TypeError: ... unexpected keyword argument 'from_task'カスタム BaseLLM.call のシグネチャが古いfrom_task、from_agent、response_model、**kwargs を受け付けるようにします
Task(...) で Tuple[bool, Any] の ValidationError が発生するGuardrail の型注釈が -> bool または tuple[bool, object] になっている-> tuple[bool, Any] と注釈し、タプルを返します
crewai create crew が応答しなくなる、または Aborted! と表示する現在は対話型の JSON ウィザードになっている@CrewBase レイアウトを使うには --classic を追加します。CI とスクリプトでも使用します
JSON crew で crewai run が返ってこない実行画面がキー入力を待っているCI では crewai create crew <name> --classic と uv run run_crew を使用します
kickoff_for_each の結果がすべて最初のトピックへの回答になるCrew がすでに kickoff されているバッチごとに新しい Crew を構築します
token_usage が実行で使用可能だった量を超える複数のエージェントで LLM オブジェクトを共有しているか、複数の crew で再利用しているエージェントごと、crew ごとに LLM を1つ用意するか、LLMCallCompletedEvent を数えます
akickoff() でエージェントが MCP ツールを使わない実行中のイベントループ内で mcps に https:// 文字列を指定しているMCPServerHTTP(url=...) を使用します
Embedding function conflict ... persisted: openai別の embedder でナレッジが保存されているcrewai reset-memories -kn を実行します
Collection expecting embedding with dimension of 1536, got 3072別の OpenAI 埋め込みモデルでナレッジが保存されているcrewai reset-memories -kn を実行します
crew の成功後に crewai run が non-zero exit status 1 を報告するrun() が CrewOutput を返している返さないようにします

12. チェックリスト

  • crewai version を確認済み。1.15.x でない場合は各項目を再検証済み
  • すべての Agent/Task/Crew の kwarg が model_fields に存在する
  • ツールは crewai.tools から、flow デコレーターと persist は crewai.flow からインポートしている
  • すべてのタスクに expected_output がある
  • OpenAI 以外のすべてのモデル文字列について、pyproject.toml に追加パッケージがある
  • 構造化出力を Python で output_pydantic を使って設定し、out.pydantic が None でないことをアサートしている
  • Guardrail が (bool, value) を返し、tuple[bool, Any] と型注釈されているか、型注釈がない
  • Memory とナレッジに明示的な embedder があるか、環境にプロバイダーキーが設定されている
  • CodeInterpreterTool、allow_code_execution、ShortTermMemory、memory_config を使用していない
  • Classic プロジェクトは crewai create crew <name> --classic で作成し、プロバイダーの追加パッケージは uv add で追加している
  • CI とスクリプトでは classic crews を使用し(crewai create crew <name> --classic)、uv run run_crew で実行している

参考資料

  • インストール済み API の確認 - インストール済みの crewai にあるフィールド、デフォルト値、シグネチャを確認するワンライナー、ストレージパス、メモリとナレッジ用のオフラインエンベッダー
  • ソースの根拠 - 各行の根拠となる crewai のソースファイルと行番号。アップグレード後に再確認できます
  • 公開ドキュメント:https://docs.crewai.com

関連するスキル:

  • ask-docs - 内容が変更されている可能性がある場合に、CrewAI の最新ドキュメントを照会します
  • getting-started - プロジェクトのひな形作成と、crew と flow の選択
  • design-agent / design-task - API が適切であることを確認した後、エージェントとタスクを調整します
  • build-flow - Flow の状態、ルーター、@persist、人間からのフィードバック
  • connect-tools-and-mcp - BaseTool、@tool、mcps=[...]
  • test-crewai-project - オフラインのスタブ LLM と決定論的なテスト
  • deploy-to-amp / call-deployed-crew - crew のデプロイと呼び出し

コメント