CrewAI + Ollama:协调多个 AI 智能体,在 本地
一个 AI 智能体回答一个问题;一个智能体团队解决一个问题。CrewAI 协调多个专门负责不同工作的 LLM——研究员、撰稿人、审稿人——让它们像同事一样交接工作。本指南将搭建一个通过 Ollama 完全在本地运行的 CrewAI 团队:没有任何数据发送到云端 API,也没有按 token 计费的成本。我们将介绍如何将 CrewAI 连接到本地端点,定义真正可行的角色和任务,为智能体配备工具,尤其是哪些本地模型能够承受多智能体的工作负载而不崩溃。
#为何在本地编排 CrewAI 团队
多智能体模式基于一个简单的观察:将复杂任务拆分给多个专门的智能体,比使用一个庞大的提示词能取得更好的结果。每个智能体都有明确的角色、具体的目标,并且只能看到自己负责的那部分工作。CrewAI 是一个 Python 框架,将这种分工方式规范化——定义角色、任务以及顺序或分层协作——省去了自行搭建状态图的繁琐工作。
在 Ollama 上运行这支团队,而不是使用 GPT-4 或 Claude,会带来三个变化。首先是隐私:多智能体处理流程会增加模型调用次数,从而增加向第三方泄露数据的潜在机会;在本地运行时,没有任何数据会离开机器。其次是成本:一支输出很多内容的团队,每次执行可能消耗数十万 tokens,使用按 token 计费的 API 时,成本很快就会变得高昂——在本地运行时,边际成本为零。最后是控制权:您可以选择模型、量化方式和上下文,并在没有配额或速率限制的情况下进行迭代。
#CrewAI 的四大组件
在编写第一行代码之前,需要先掌握相关术语。CrewAI 基于四个相互衔接的对象。理解它们,可以避免设计 crew(智能体团队)时 90% 的错误。
- 智能体
- 一个具有明确身份的 LLM:角色(“市场分析师”)、目标(goal)和背景故事(backstory)共同约束其行为。每个智能体都可以使用自己的 Ollama 模型。
- Task
- 交给智能体的一个工作单元:包含描述、预期结果(expected_output),通常还包括工具。具体指令由任务承载,而不是由智能体承载。
- Tool
- 智能体可以调用的外部能力:网页搜索、文件读取、SQL 查询、计算。没有工具,智能体只能依据已有知识进行推理。
- Crew
- 团队:由智能体列表、任务列表,以及决定执行顺序的流程(sequential 或 hierarchical)组成。这就是您通过 kickoff() 启动的对象。
这里需要进一步说明流程的执行方式。在 sequential(顺序)模式下,任务按声明的顺序执行,前一个任务的输出作为下一个任务的输入,非常适合研究 → 撰写 → 审校这样的流程。在 hierarchical(层级)模式下,一个“管理者”智能体(专门负责管理的 LLM)向其他智能体分派任务并协调它们。层级模式更强大,但对本地模型的要求也高得多,因为管理者必须推理判断谁负责什么:请始终从顺序模式开始。
#前置条件与模型选择
- Ollama正常运行
- 守护进程已启动,端点地址为 http://localhost:11434。请使用“ollama list”确认至少有一个支持工具调用的模型。
- Python 3.10+ 及虚拟环境(venv)
- CrewAI 可以在隔离的虚拟环境中妥善部署。应避免安装到系统 Python 环境中。
- 显存,还要有耐心
- 多智能体通过连续调用模型实现:每个任务对应一次或多次与模型的往返交互。为确保推理能力,建议至少使用 8B 模型,理想情况下选择 12B 至 24B 范围内的模型。
- 具备工具调用能力的模型
- 要为智能体配备工具,需要使用支持函数调用(function calling)的模型:Qwen 3.5、Qwen 3.8、Mistral Small 或 GLM 4.7 Flash。不支持工具使用的模型只能以文本形式进行推理。
#安装CrewAI并将其连接到 Ollama
CrewAI 通过 pip 安装。crewai-tools 包额外提供了一套即用型工具库(搜索、文件操作、网页抓取)
连接本地模型的关键是:CrewAI 依靠 LiteLLM 与模型通信。要连接 Ollama,需要在模型名称前加上“ollama/”前缀,并将基础 URL 指向本地守护进程。请确保事先已拉取模型。
#第一支团队:明确角色与任务
我们来组建一个经典且马上就能派上用场的团队(crew):先由研究者收集信息,再由撰写者将其整理成文。这是可重复用于信息监测、文献综述或内容生成的基本框架。首先定义各个智能体,并明确它们的角色。
角色、目标和背景故事并非装饰性内容:它们构成了每个智能体的系统提示词。模糊的角色(“助手”)会产生定位模糊的智能体。请明确具体,并设定其行为立场——这能防止小模型偏离设定范围。请注意占位符 {sujet}:CrewAI 会在启动时从输入中注入相应的值。
接下来是工作的核心:任务。每个任务都指定一个智能体,描述它需要产出什么,最重要的是明确 expected_output 字段。这是 CrewAI 中最被低估的质量控制手段:字段内容越具体,输出就越符合明确的要求。
context 参数明确关联各项任务:撰写任务接收研究任务的输出。在顺序模式下,任务之间的衔接已经是隐式的,但声明 context 可以让依赖关系清晰可见,并提高信息传递的可靠性。最后,组建智能体团队并启动运行。
- 01研究智能体开始运行其本地 LLM 接收角色信息和研究任务描述,并生成所需的事实列表。
- 02输出被传递CrewAI将搜索结果作为上下文传递给写作任务,符合context字段要求。
- 03撰稿智能体开始运行其智能体接收事实,并按照自身 expected_output 的要求撰写一篇 300 个词的综合摘要。
- 04kickoff() 返回最终结果返回的是最后一个任务的输出。verbose=True会在终端中显示完整的中间推理过程。
#为智能体提供工具
没有工具的智能体只能根据模型已经掌握的信息进行推理——很快就会遇到局限,而且容易产生幻觉。工具赋予它具体的能力:读取文件、搜索网页、查询数据库。crewai-tools 提供了一系列开箱即用的工具,您也可以编写自己的工具。
这里,模型的选择就变得至关重要。要使用工具,智能体必须生成结构化的函数调用(function calling),由 CrewAI 拦截并执行。不掌握工具使用机制的模型会忽略工具,或生成无效的 JSON。Qwen 3.5、Qwen 3.8、Mistral Small 和 GLM 4.7 Flash 能很好地处理这一机制,而许多通用小模型则不能。
#哪些本地模型能胜任多智能体任务
这才是本指南真正要回答的问题。多智能体比聊天的要求高得多:每个智能体都必须遵循自己的角色、遵守输出格式,而且经常需要调用工具,同时还要连续完成任务而不丢失思路。模型太小就会跟不上。以下是在 Q4_K_M 量化下切实可行的几个档位,以及对应的显存需求。
- 8B(≈5-7 GB)——最低配置
- Granite 4.2 8B(5.3 GB)、Qwen 3.5 9B(6.6 GB)。能够运行一个由 2 个智能体组成、使用基础工具的简单顺序协作团队。RTX 3060 12 GB、RTX 4070。模型规模低于这一档时,多智能体运行就不太可靠了。
- 16 GB(≈14 GB)——推荐
- gpt-oss 20B 或 Mistral Small 24B(约 14 GB,后者的法语表现非常出色),或采用 Q8 量化的 Qwen 3.5 9B(11 GB)。良好的折中方案:推理扎实,工具调用可靠,能遵循角色设定而不偏离。显卡范围从 RTX 4070 12 GB(勉强够用)到 RTX 4080 16 GB。这是大多数智能体团队的平衡点。
- 24 GB(≈18–19 GB)——运行更从容
- Qwen 3.8 27B(18 GB,262k 上下文)或 MoE 模型 Qwen3-Coder 30B-A3B(19 GB)。可应对运行时间更长的智能体团队(crew)、多个工具以及轻量级的层级模式。可选 RTX 4090 24 GB,或采用统一内存的 Mac M4 Pro。记得将 Qwen 3.8 的推理级别设为「low」,否则它在智能体团队中会过度思考。
- MoE 35B+ (≈23-32 GB) — 接近云端
- Qwen 3.6 35B-A3B(23 GB)或 Q8 量化的 Qwen3-Coder 30B-A3B(32 GB)。协调质量接近云端 API 的水平;得益于 MoE 架构,如今从 32 GB 起即可达到这一水平。可使用配备大容量统一内存的 Mac Studio,或多 GPU 配置。仅适合目标较高的智能体团队。
架构技巧:并非所有智能体都必须使用同一个模型。将简单任务(改写、计数、提取)交给小型快速模型(Qwen 3.5 4B、Granite 4.2 8B),并将 Qwen 3.8 27B 或 35B 的 MoE 模型留给负责推理或编排的智能体。只需实例化两个 LLM 对象,再按智能体分配即可。
#与使用云端 API 的智能体团队相比:成本与限制
本地运行最有说服力的优势是成本。智能体团队本来就会产生大量交互:每个智能体都会重读上下文、进行推理、调用工具,而随着任务推进,上下文不断扩展,token 数量也随之增加。一次稍有规模的运行就可能消耗数十万个 token。使用按 token 计费的 API 时,在开发过程中反复运行流水线很快就会带来高昂成本;而在本地,购买硬件后,每次迭代都是免费的。
- 成本 — 本地优势
- 每个 token 的费用为零。您可以迭代、重新运行和调试,不必担心计费不断累积。多智能体任务的消耗很大,也是本地运行最快让 GPU 投资回本的使用场景。
- 隐私——本地部署的优势
- 所有调用——而且数量很多——都不会离开这台机器。这对于专有代码、客户数据,以及任何受 NDA 或 GDPR 约束的内容,都是决定性的优势。
- 协调性表现——云端优势
- GPT-4 和 Claude 能够可靠地处理层级模式、长链流程和复杂的工具调用,本地 14B 模型无法达到同等的可靠性。随着智能体团队变得更加复杂,差距会进一步扩大。
- 速度 — 取决于硬件
- 处理大模型时,云端的响应通常比消费级 GPU 更快。使用本地 32B 模型时,由 4 个 AI 智能体组成的团队每次执行可能需要数分钟。
客观地说,本地模型擅长执行安排明确的顺序式智能体团队任务,其中每个智能体都有清晰的角色和限定的任务范围。但在要求较高的层级式编排中,本地模型会显露局限:14B 模型很难充当负责委派任务的管理者。合适的策略往往是混合使用:在本地进行原型开发和运行,将云端留给协调要求超出本地模型能力的步骤。LiteLLM 这样的代理服务正好可以在本地和云端之间进行路由。
#故障排除
- 智能体忽略其工具
- 该模型不支持函数调用。请改用 Qwen 3.5、Qwen 3.8、Mistral Small 或 GLM 4.7 Flash,并检查智能体是否确实配置了 tools=[...] 列表。
- “Connection refused” / litellm 错误
- Ollama 守护进程未启动,或 base_url 有误。请检查“ollama ps”,并确认 URL 为 http://localhost:11434。
- 智能体陷入循环或无法停止
- 模型规模不足以完成该任务,或工具数量过多。请使用更大的模型(至少为 Qwen 3.5 9B),减少工具数量,降低温度参数,并为智能体设置 max_iter。
- 输出不符合格式要求 / expected_output 被忽略
- 角色描述过于笼统,或 expected_output 不明确。请把两者都写得非常具体,并优先选择更强、能更好遵循格式要求的模型(Qwen 3.8 27B、Mistral Small 24B)。
- Crew 运行非常缓慢
- 模型因显存不足而将部分计算转移到系统内存和 CPU(“ollama ps”可以显示这一点),或者多个模型相互挤占资源,导致彼此被卸载。请选用小一档的模型,或统一使用一个模型。
- 分层模式出现异常
- 担任管理者的 LLM 能力不足。请切回 Process.sequential,或专门安排 Qwen 3.8 27B 或一个 35B MoE 模型担任管理者。
#深入了解
本地 CrewAI 智能体团队所依赖的基础组件,本网站已有介绍。以下指南是对本篇指南的延伸:
- 借助 LangChain 和 Ollama,以 Python 创建本地 AI 智能体
- 在转向多智能体之前,先了解单个智能体的基础——工具、推理循环。
- 使用 Ollama 进行函数调用和结构化 JSON 输出
- 了解您的智能体所用工具依赖的工具调用机制。
- LiteLLM:本地与云端的统一代理
- 用于在混合策略下,根据任务将智能体团队的请求路由到本地 Ollama 或云端 API。
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。