Flows 工作流
Flow 是生产应用的骨架:事件驱动、带状态、可分支。官方确认的核心装饰器是 @start()、@listen(...)、@router();组合条件用 or_ / and_;持久化用 @persist(crewai.flow.persistence)。人机门闸是 @human_feedback(≥ 1.8.0,crewai.flow.human_feedback)。不要发明未出现在文档中的装饰器名。
导入(概念文档):
Quickstart 也使用 from crewai.flow import Flow, listen, start,二者均可。
状态与入口
每个 Flow 实例的 state 带唯一 id。无结构时用 dict;推荐 Flow[YourModel] + Pydantic。
@start():入口;可以有多个,满足条件时会启动(常并行)。@listen(method)或@listen("method_name"):被监听方法完成后运行;可接收其返回值作为参数。kickoff()返回最后完成的方法的返回值。plot()/plot("name")生成 HTML 图。
在步骤里跑 Crew
这是官方推荐的组合:Flow 管主题与产物,Crew 做自主研究。
CLI 项目里用 load_crew(Path("crew.jsonc")) 代替手写 Crew(...)。跑完后 flow.usage_metrics 汇总本轮所有 LLM 调用(含 Crew 与 Flow 内直接 LLM.call)。
@router、or_、and_
@listen(or_(a, b)):任一完成即触发。@listen(and_(a, b)):全部完成才触发。
@persist
kickoff(inputs={"id": ...}) 按同一 UUID 续跑;kickoff(restore_from_state_id=...) 分叉出新 state.id。不要和 from_checkpoint 混用。也可把 @persist 只打在某个方法上。
与 LangGraph 怎么选
LangGraph(本站 LangChain 课)用显式 StateGraph、检查点、中断。CrewAI Flow 用装饰器事件图,并原生嵌入 Crew 角色团队。已有 LangGraph 项目可参考官方 Moving from LangGraph to CrewAI;新项目若核心是角色协作,优先 Flow + Crew。