CrewAI 生产化:缓存、回调、LLM 配置

📅 2026/7/5 14:48:57
CrewAI 生产化:缓存、回调、LLM 配置
CrewAI 生产化缓存、回调、LLM 配置概念速查CrewAI 在生产环境中需要关注三个核心配置维度。Cache 机制对 Tool 调用做输入哈希缓存——相同输入命中缓存则跳过执行直接返回上次结果。Callbacks是挂载在 Crew 事件上的钩子函数用于日志、监控和远程追踪。LLM 配置在 Agent 级别通过 llm 参数传入模型对象支持 model、temperature、max_tokens、api_key 等参数的不同组合。# crewai0.30.0fromcrewaiimportAgent,Crewfromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-4o,temperature0.1,max_tokens4096,api_keysk-xxx,)cache_llmChatOpenAI(modelgpt-4o-mini,temperature0,max_tokens512,)writerAgent(roleWriter,goalWrite content,backstoryYou are a writer.,llmllm,cacheTrue,)底层原理Cache输入哈希与跨 Agent 共享每次 Tool 调用时CrewAI 对工具名称和参数做哈希处理以哈希值为键查本地内存缓存。命中缓存则直接返回上次结果不走模型调用。缓存在 Crew 级别共享——同一 Crew 内不同 Agent 调用相同工具和参数时也能命中。生产环境建议始终开启缓存其内存开销极低KB 级别但对重复性工具调用如反复查询天气或数据库的收益非常明显。# crewai0.30.0# crewai.cache.cache 内部逻辑示意fromhashlibimportsha256def_cache_key(tool_name:str,args:dict)-str:rawf{tool_name}:{sorted(args.items())}returnsha256(raw.encode()).hexdigest()Crew 构造时传cacheTrue默认开启使该 Crew 内所有 Agent 共享同一Cache实例。生产环境建议始终开启内存开销低~KB 级对重复工具调用如天气查询、数据库查询收益明显。如需跳过单次缓存Agent 构造传cacheFalse。Callbacks事件驱动的监控层Crew 实例对外暴露了多种事件挂钩包括 task 开始和完成、step 执行、tool 调用等。通过这些回调函数可以在不修改 Agent 和 Task 定义的前提下实现日志记录、性能监控和远程追踪。本地调试时用简单 print生产环境应接入外部监控系统。# crewai0.30.0fromcrewaiimportCrewdefon_task_started(task):print(f[CREW] 开始执行:{task.description[:50]})defon_task_completed(task):print(f[CREW] 完成:{task.description[:50]})crewCrew(agents[writer],tasks[...],cacheTrue,task_callback_startedon_task_started,task_callback_completedon_task_completed,step_callbackNone,# 每步 Agent 执行回调tool_callbackNone,# 工具调用回调)LLM 配置模型级的灵活编排每个 Agent 独立持有 LLM 实例LLM 参数model、temperature、api_key完全由调用方控制。这是多模型混合编排的基础——分析 Agent 用强模型分类 Agent 用小模型。# crewai0.30.0fromcrewaiimportAgent researcherAgent(roleResearcher,goalResearch topic,backstoryYou are a researcher.,llmChatOpenAI(modelgpt-4o,temperature0.3),cacheTrue,)reviewerAgent(roleReviewer,goalReview output,backstoryYou are a reviewer.,llmChatOpenAI(modelgpt-4o-mini,temperature0),cacheTrue,)架构设计原则原则 1缓存策略按场景区分Crew 级别cacheTrue是生产默认值。如果 Pipeline 涉及多次调用同一 Tool如爬虫反复查询价格或数据库缓存显著降低成本和延迟。但对于对实时性要求高的场景——比如汇率查询或股票价格——缓存会导致 Agent 拿到过期数据。需要根据工具的语义特性来决定缓存开关而非一刀切全场开启。建议对纯查询类工具保持缓存对有时效性要求的工具通过自定义 cache_function 做时间窗口判断。原则 2回调函数轻量化本地调试可以用task_callback_started和task_callback_completed直接打印日志但生产环境下不应当在回调中执行阻塞 I/O 操作。回调函数的执行会延长 Agent 的响应时间阻塞 I/O 会使整个 Crew 的执行变慢。正确的做法是回调中只做入队操作或者异步写入将耗时操作交给后台消费者处理。Crew InstanceCache LayerCallback HandlersAgent PoolLLM: GPT-4oLLM: GPT-4o-miniLLM: ClaudeTool ExecutionsLocal LoggerRemote Monitor缓存策略Crew 级别cacheTrue是生产默认值。如果 Pipeline 涉及多次调用同一 Tool如多次查价格缓存显著降本。仅在工具结果具有时效性时如实时汇率关闭。回调配置本地调试用task_callback_started/task_callback_completed打日志远程追踪接入 LangSmith 或自建监控时将回调指向 SDK 上报函数。不要在同个回调里做阻塞 I/O 业务逻辑拆成两个回调或异步队列。# crewai0.30.0 — 本地调试 vs 远程追踪fromlangsmithimportClient clientClient(api_keyls-xxx)deftrace_to_langsmith(task):client.create_run(nametask.description[:60],inputs{description:task.description},run_typechain,)crewCrew(agents[writer,reviewer],tasks[...],cacheTrue,task_callback_startedtrace_to_langsmith,)LLM 配置分层Agent 定义时不写死 LLM通过环境变量或配置中心注入。api_key仅从环境变量读取禁止硬编码。temperature对确定性任务分类、提取设 0对创编任务设 0.7—0.9。性能建议缓存始终开启只对时效敏感任务按需关闭回调函数轻量化耗时操作异步出队多 Agent 间按职责分配不同模型避免全用最大模型max_tokens根据任务输出量设定不给 Agent 留无上限的 token 窗口