Eszközök/MI-ágensek

CrewAI teszt: crewsek, flow-k és a tokenelsőszlám

A CrewAI a MIT-licencsel terjesztett Python-keretrendszer többügynökös rendserekhez: crew az autonóm együttműködéshez, flow a kontrollált állapothoz. Mennyibe kerül egy menet tokenben, és hol hát.

Típus
Agent framework
Ár
MIT · enterprise paid

··10 perc olvasás

  • Multi-agent
  • Agent orchestration
  • Python
  • Flows
  • Token cost
Ábra: egy CrewAI flow, amely egy ügynökökből álló crew-et irányít, amely a nyelvi modellt, a memóriát és az eszközöket hívja.

A lényeg röviden

  • A CrewAI 1.15.23 MIT-licencű Python 3.10-től 3.13-ig, saját futtatási korlát nélkül, extra csomagokkal toolokhoz, LiteLLM-hez, mem0-hoz, Qdranthoz és Bedrockhoz.
  • A crew-ek modellhívásokon keresztül delegálnak, ezért a menet költségét a topológia szabja meg: a szerep-promptok, a hierarchikus manager, három guardrail-újpróba és a memóriaelemzés mind további hívás.
  • A memória LanceDB vektorokban tárol, és modellt hív mentéskor és mély előhíváskor, az embedding-híváson felül.
  • A beépített tracing CrewAI saját backendjére megy, és fiókot kér az első futáskori hozzájárulási kérdéssel együtt; a Langfuse, a Phoenix, a Braintrust és az MLflow helyett OpenTelemetry-en át működik.
  • A keretrendszer akkor a legerősebb, ha a logikát a flow tartja, és egy-két ügynök végzi a nyitott munkát.

A CrewAI MIT-licencsel terjesztett Python-keretrendszer többügynökös rendserekhez, és a kategóriában ez a legkevésbé bonyolult: az ügynök role-t, goal-t és backstory-t kap, a feladat elvárt kimenetet, egy crew pedig ennek kettőjét néhány kódsorban összefogja. A verdictem: jól megépített, szokatlanul jól dokumentált és csendben drága. Minden szerkezeti funkció, amit a keretrendszer a puszta prompt fölé tesz, egy további modellhívásként van megvalósítva, és az éles számla pontosan ezekből áll.

Ugyanaz a réteg, mint a LangGraph, az AutoGen vagy a Pydantic AI, és a verseny a kezelhetőségért folyik, nem a kontrollért. A szállító két részre bontja az ajánlatot: a PyPI-könyvtár, amely ingyenes és korlátlan, és a CrewAI AMP, egy hosztolt control plane vizuális szerkesztővel, tracinggel és governance-szel, amelyet egyedi áron adnak el. Minden alább a könyvtárra vonatkozik, mert azt telepíted.

Mi a CrewAI

A könyvtár 2023 decemberében jelent meg először a PyPI-n, és a CrewAI Inc. fejleszti nyíltan. Az 1.15.23 verzió 2026. szeptember 28-án jelent meg, Python 3.10-től 3.13-ig igényli, a repóban 59.413 csillag és 8.655 fork található. Egyetlen, körülbelül 1,2 MB-os wheelként települ, opcionális extrákkal a toolokhoz, LiteLLM-hez, mem0-hoz, Qdranthoz, Bedrockhoz, Anthropichoz és A2A-támogatáshoz.

  • MIT-licenc, nincs futtatási keret, és nincs futásidejű függősége a LangChaintől vagy más agent keretrendszertől.
  • Két réteg: a flow-k, amelyek birtokolják az állapotot és a futási sorrendet, és a crew-ek, vagyis az ügynökök csoportjai, amelyek feladatokat hajtanak végre.
  • Egy ügynök egy attribútumokkal rendelkező prompt: role, goal és backstory, plusz opcionális eszközlista, LLM és memóriahatókör.
  • A folyamatok szekvenciálisak vagy hierarchikusak. A hierarchikushoz manager-LLM kell, és a munkát modellhívásokkal delegálja.
  • Az eredmény lehet szöveg, JSON vagy Pydantic-modell, ami a tisztta visszaút az alkalmazáskódba.
  • MCP-szerverek a crewai-tools csomagon keresztül csatlakoznak az ügynökökhöz, stdio, SSE vagy streamable HTTP transzporttal.

Hogyan fut egy menet

A flow egy olyan metódusosztály, amelyet dekorátorok kötnek össze. A @start() jelöli a belépési pontokat, a @listen() egy metódust egy másik eredményéhez köt, a @router() pedig elágazások közül választ, és az and_ meg or_ kombinálja a feltételeket. Az állaptobjektum Pydantic-modell, tehát a lépések közötti adat alakja deklarált, nem kitalált, a flow.plot() pedig kirajzolja a gráfot. Ha egyszerre több @start()-metódus teljesül, azok párhuzamosan futnak.

Hol keletkeznek a modellhívásokNégy doboz egy sorban: egy flow, amely birtokolja az állapotot és a sorrendet, egy crew, amely a feladatokat és a folyamatot tartja, egy ügynök role-ból, goalból és backstoryból, valamint a szolgáltatói API mögötti nyelvi modell. Egy nyíl visszaviszi a crew kimenetét a flow állapotába. A második sorban a memória (írás és előhívás) és az eszközök (MCP, API-k, kód) található.Hol keletkeznek a modellhívásokminden doboz a keretrendszer promptjaFlowállapot és sorrendCrewfeladatok és folyamatAgentszerep, cél, történetLLMAPIA CrewOutput visszafolyik az állapotbaMemoryírás és előhívásToolsMCP, API-k, kódMinden ugrás modellhívás: ügynöklép, delegálás, guardrail-újrapróba, memóriaelemzés.
A pipeline olcsó, a keretrendszer nem: minden doboz egy újabb prompt, amit a modellnek el kell olvasnia, a vonal alatti dobozok pedig pontosan az a többlet, ami egy sima szkriptben nem lenne.

Egy flow-lépésen belül a crew állítja össze a promptot: minden ügynök role-ja, goalja és backstoryje minden feladat elé kerül, a feladat leírása interpolálódik, és az egyik feladat kimenete a következő kontextusává válik. Egy ügynök alapból 20 iterációig fut, kétszer próbálja újra hiba esetén, és összefoglalja az üzeneteket, hogy a kontextusablakon belül maradjon. Éppen erre kell figyelni. Az alapértelmezettekkel egy négy feladatos crew már négy hosszú prompt, mielőtt bármit delegálna, a memóriás crew pedig minden előhíváshoz hozzáad egy embedding-hívást és egy modellhívást a tárolt tartalom elemzésére és összevonására.

Első lépések

A CLI a leggyorsabb út be. A uv tool install crewai a PATH-ra tesz egy crewai binárist, a crewai create crew <név> JSON-first projektet vázol agents/*.jsonc és crew.jsonc fájlokkal, a crewai create flow <név> pedig flow-projektet. A crewai install uv-val oldja fel a függőségeket, a crewai run lefuttatja a belépési pontot, a crewai memory pedig terminál böngészőt nyit a tárolóhoz. A --classic flag visszaállítja a régebbi, Python osztály plusz YAML elrendezést.

from crewai import Agent, Crew, Process, Task
from crewai.flow import Flow, listen, start
from pydantic import BaseModel


class ReportState(BaseModel):
    topic: str = "agent memory"
    brief: str = ""


class ReportFlow(Flow[ReportState]):
    @start()
    def pick_topic(self):
        self.state.topic = "agent memory"

    @listen(pick_topic)
    def research(self):
        analyst = Agent(
            role="Research analyst",
            goal=f"Collect verifiable facts about {self.state.topic}",
            backstory="You read primary sources and quote them.",
            llm="openai/gpt-4o-mini",
        )
        task = Task(
            description="Write a brief on {topic}.",
            expected_output="Five bullets, each with a source URL.",
            agent=analyst,
        )
        crew = Crew(agents=[analyst], tasks=[task], process=Process.sequential)
        self.state.brief = crew.kickoff(inputs={"topic": self.state.topic}).raw

ReportFlow().kickoff()

Ez a normál úton legfeljebb két modellhívásba kerül: egy az ügynök reasoning- és toolsciklusába, egy a végső válaszba. Ha jön egy második ügynök, egy manager vagy memória, a szám gyorsan nő, ezért a crew.usage_metrics és a flow.usage_metrics az elsők, amiket dashboard mögé kell tenni.

Memória és knowledge

A memóriát egyetlen Memory osztályba szervezték át. A rekordok LanceDB vektorok a .crewai/memory alatt, rangsorolva a szemantikus hasonlóság, a 30 napos felezési idővel mért frissesség és a mentéskor a modell által adott fontosság pontosságának keverékével. Az előhívásnak két mélysége van: a shallow tiszta vektorkeresés, nagyjából 200 ms, modellhívás nélkül, a deep előbb elemzi a kérdést, és csak 200 karakternél hosszabb kérésnél fut le. Memória esetén a crew minden feladatkimenetből tényeket von ki, és minden feladat előtt visszahívja a kontextust.

  • A tároló alapból helyi LanceDB, és a backend egy protokoll, így másik vektortárral cserélhető.
  • Az alapértelmezett embedder az OpenAI text-embedding-3-large, 3.072 dimenzióval, az elemző modell alapja a gpt-4o-mini. Mindkettő állítható.
  • A knowledge források külön mechanizmus: ChromaDB kollekciókba kerülnek, 0,35 alapértelmezett relevanciaküszöbbel és három dokumentummal lekérdezésenként.
  • Az írások háttérszálon futnak, az előhívás megvárja őket, így a menet végén nem vész el semmi, de az elemzés tokenbe kerül.

A memória az a rész, amit adatvédelmi átnézés előtt el kell olvasni. A dokumentáció világosan kimondja, hogy a rekordok tartalma elküldésre kerül a beállított LLM-nek a scope, a kategória és a fontosság elemzésére, így minden érzékeny adathoz lokális modell kell mindkét oldalon, az LLM-en és az embedderen is.

Élesben

A könyvtár gyorsan mozog. Stabil kiadások érkeztek szeptember 9-én, 16-án és 28-án, a dev előkiadások pedig naponta, szóval hosszú életű rendszerben a pinelés nem opcionális. A repóban 570 nyitott issue van, és ugyanaz a disztribúció ma már az open source futtatókörnyezetet és a hosztolt platform kliensét is hordozza, ezért egy changelog-bejegyzésben SQLite-javítás és platformfunkció is egymás mellé kerülhet.

Megfigyelhetőség

A beépített tracinget érdemes alaposabban megnézni. Alapból ki van kapcsolva, és a telemetriától külön konfigurálható, de a cél CrewAI saját szervere: kell hozzá egy ingyenes AMP-fiók, hitelesített CLI, és az első futáskor a folyamat rákérdez, hogy megosztható-e az execution trace. A trace-ek promptokat, bemeneteket és kimeneteket tartalmaznak, a helyi puffer pedig 1.000 spánt tart, mielőtt a legrégebbiek kidőlnek. Saját hosztoláshoz az OpenTelemetry-integrációk a jobb alapértelmezés, és a dokumentáció kész útvonalakat ad a Langfuse, az Arize Phoenix, a Braintrust, a Datadog, az MLflow, az Opik, a Patronus, a Portkey, a Weave és a Galileo számára.

  • Állítsd be a CREWAI_DISABLE_TELEMETRY=1 értéket, ha nincs okod névtelen használati adatot küldeni a szállítónak.
  • Az első futás tracingje a terminálban kér engedélyt, és eldobja a puffert, ha senki nem válaszol; a crewai traces enable és a crewai traces disable később módosítja ezt.
  • A kickoff_async() csak szálba csomagolja a szinkron futást. Az akickoff() és az akickoff_for_each() a natív async útvonalak, és ezek valók terhelés alatt.
  • A @persist alapból helyi SQLite adatbázisba írja a flow állapotát. A restore_from_state_id elágaztat egy futást egy mentett pillanatképből, míg a kickoff(inputs={"id": ...}) az eredetit folytatja.

Guardrail-ek

A task guardrail-eknek két formája van. Egy Python callable megkapja a feladat kimenetét és egy ítéletet ad vissza, egy egyszerű stringből pedig LLM guardrail lesz, amely az ügynök saját modelljével értékeli a kimenetet. Az újrapróbálások alapértéke három, így egy soha nem átmenő guardrail háromszorosára emelheti egy feladat költségét, mielőtt bármi eszkalálódna. A guardrail-ek a kimenetet validálják; nem védőfal az eszközhívások körül, és egy tool eredményében érkező prompt injection simán átesik rajtuk.

Licenc és költség

A licenc a könnyű rész. A CrewAI MIT-licencű, futtatási korlát nélkül, és der Framework maga csak annyival járul hozzá a költséghez, amennyi modellforgalmat a saját funkciói generálnak. A fizetős termék a CrewAI AMP: ingyenes Basic csomag havi 50 workflow-futtatással, és egyedi áron egyeztetett Enterprise szint.

Mit futtatszÁrMit tartalmaz
CrewAI OSSIngyenesNincs futtatási keret. A modellhívásokat, az eszközöket és a saját infrastruktúrádat te fizeted.
CrewAI AMP BasicIngyenes50 workflow-futtatás havonta, vizuális szerkesztő, GitHub szinkron, tracing és OpenTelemetry.
CrewAI AMP EnterpriseEgyedi árajánlatSSO, RBAC, workload identity, PII-redakció, saját VPC vagy on-prem, 45 napos onboarding.

Hol akad

A gyengeségek strukturálisak, és érdemes őket a bármilyen összehasonlítás előtt kimondani. Az absztrakció minden rétege egy prompt: a role, a goal és a backstory minden feladat elé kerül, tehát a kontextus a crewwel együtt nő, a keretrendszer alapértelmezései pedig, húsz iteráció, három guardrail-újrapróbálás és memóriaelemzés mentéskor és előhíváskor, separat számlázódnak. A delegálás és a hierarchikus manager a legrosszabb tételek, mert minden ugrás egy újabb modellhívás, amelynek egyetlen feladata eldönteni, ki dolgozik legközelebb. A Python az egyetlen futtatókörnyezet, egy olyan kategóriában, ahol a körülvevő alkalmazás gyakran TypeScript. A fizetős platformon kívül pedig a hibakeresés a napló kimenetére támaszkodik, ami gyengébb, mint egy gráf-futtató, amely újrajátszhatja a hibás csomópontot.

KeretrendszerHogyan van bekötve a munkaKöltség feladatonkéntHibakeresés
CrewAISzerepek és feladatok; a flow tartja az állapotot és a sorrendetA legmagasabb: a delegálás, a memóriaelemzés és a guardrail-újrapróbálás modellhívásokat ad hozzáAz AMP trace-ekhez fiók kell; OpenTelemetry hookok Langfuse, Phoenix, Braintrust, MLflow felé
LangGraphExplicit gráf, típusos állapot, checkpointokA legalacsonyabb: a routing sima PythonLangSmith trace-ek, checkpoint-újrajátszás bármely csomópontból
AutoGenBeszélgető csapatok mintákkal és leállási feltételekkelMagas és nyitott, ha nem állítasz be turn limitetAgentChat naplózás; a GraphFlow irányított gráfot ad hozzá

A LangGraph jobb eszköz egy fix éles pipeline-hoz, amely hurkokat és checkpointokat használ, és a költségen is nyer, mert a routing sima Python. Az AutoGen jobb eszköz a nyílt beszélgetéshez. A CrewAI ott nyer, ahol ez számít: ha a rendszert át kell adni annak, aki nem mérnök. A szókészlet egy állásleírás, a JSONC vagy YAML konfiguráció pedig olvasható. A szállító saját dokumentációja LangGraphből CrewAI-be vezető migrációs útmutatót és összehasonlító notebookokat is tartalmaz, amit szerződés előtt jó tudni.

Verdict

A CrewAI jó alapértelmezés azoknak a csapatoknak, akik ügynök alakú kódot akarnak kézzel bekötött gráf nélkül, és rossz alapértelmezés mindenhol, ahol a tokenelsőszlám a szűk keresztmetszet. A keretrendszer kompetens, a dokumentációja jobb a versenytársakénál, és a flow réteg önmagában is megérdemli a helyét. Az ár az, hogy az autonómia modellhívásokként van kifejezve, és a keretrendszer szívesen megteszi ezeket helyetted.

  1. Vedd fel, ha a pipeline nagyrészt lineáris, és az drága rész egy vagy két nyitott lépés. Tartsd kicsin a crew-et, és a logikát hagyd a flow-ban.
  2. Vedd fel, ha nem mérnököknek kell olvasniuk vagy szerkeszteniük a konfigurációt, mert egy role, egy goal és egy YAML fájl könnyebben átnézhető, mint egy csomópontgráf.
  3. Ne vedd fel fix, nagy volumenű pipeline-hoz, ahol minden ugrás egy sima függvényhívás. A koordinációs többlet olyan rugalmasságot vásárol, amit ilyen pipeline soha nem használ.
  4. Ne vedd fel, ha első naptól kell checkpoint-újrajátszás és költség csomópontonként, anélkül, hogy fizetnél a platformért vagy magad kötnéd be az OpenTelemetryt.
  5. Mérj, mielőtt megtartod: tedd az usage_metrics-et dashboard mögé az első héten, és hasonlítsd össze a crew-et ugyanazokkal a lépésekkel, sima flow-ként megírva.

Források

  1. CrewAI documentation: introductionCrewAI on PyPI: crewai 1.15.23CrewAI docs: FlowsCrewAI docs: MemoryCrewAI docs: tracingCrewAI pricingGitHub: crewAIInc/crewAILangGraph overviewAutoGen AgentChat user guide

Gyakori kérdések

Ingyenes a CrewAI éles használatra?

Igen. A keretrendszer MIT-licencű futtatási korlát nélkül; a költséget az ügynököd modellhívásai és a saját infrastruktúrád adja. A kereskedelmi termék, a CrewAI AMP, ingyenes Basic csomagot kínál havi 50 workflow-futtatással, az Enterprise szintet egyedi áron adják.

Függ a CrewAI a LangChaintől?

Nem. A csomagnak nincs LangChain-függősége, és önálló keretrendszerként pozicionálja magát. A modellekhez a szolgáltatói SDK-kon keresztül jut, a LiteLLM pedig a crewai[litellm] extra csomagban érhető el.

Miben különbözik a crew és a flow?

A flow @start, @listen és @router metódusokon keresztül birtokolja az állapotot és a futási sorrendet; a crew ügynökök és feladatok halmaza, amely egy flow-lépésen belül fut. A szállító saját ajánlása az, hogy flow-val indulj, és akkor delegálj egy crewnek, ha egy lépésnek autonómiára van szüksége.

Biztonságos a CrewAI memóriája érzékeny adatokhoz?

Alapból nem. A rekordok tartalma a scope, a kategória és a fontosság elemzésére elküldésre kerül a beállított LLM-nek, az alapértelmezett embedder pedig az OpenAI text-embedding-3-large. A dokumentáció érzékeny tartalomhoz lokális LLM-et és lokális embeddert, például Ollamát javasol.

Pont erre van szükséged?

Írj a projektedről vagy a pozícióról – szívesen hallok felőled.