news 2026/8/30 8:32:51

CrewAI 单元测试:3步锁定Agent、Task、Crew的行为

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CrewAI 单元测试:3步锁定Agent、Task、Crew的行为

CrewAI 单元测试:3步锁定Agent、Task、Crew的行为

【免费下载链接】crewAIFramework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.项目地址: https://gitcode.com/GitHub_Trending/cr/crewAI

CrewAI 是一个编排多个 AI 代理协作的框架,Agent、Task、Crew 里都藏着大量隐式逻辑,得靠 CrewAI 单元测试把行为锁住。这篇文章帮你三步写出第一个能跑的测试用例。

把第一个测试跑起来 🚀

先克隆仓库、装依赖。项目用 uv 管理依赖和虚拟环境(可以理解为比 pip 更快的 Python 包管理器),clone 完执行这段:

git clone https://gitcode.com/GitHub_Trending/cr/crewAI cd crewAI uv sync --all-groups --all-extras

然后在lib/crewai/tests/下建一个测试文件,内容就这几行:

from unittest.mock import Mock from crewai import Task agent = Mock() agent.execute_task.return_value = "test result" task = Task(description="写一段摘要", agent=agent) result = task.execute_sync(agent=agent) assert result.raw == "test result"

逐行说:Mock()把 Agent 换成假对象,不真调 LLM(慢、不稳、还烧 token);execute_task.return_value指定"假 LLM"的返回;最后一行assert确认 Task 真的把输出塞进了结果。跑起来(pytest 是 Python 最常用的测试框架):

cd lib/crewai && uv run pytest tests/my_first_test.py -v

变绿就成了。接下来你可以把断言换成任何想验证的行为。

测试代码放在哪、怎么找

要测哪个模块,先想它属于哪个包,目录结构和源码包是一一对应的,然后去 lib/crewai/tests/ 下找对应子目录:

  • agents/→ Agent 行为
  • task/→ Task 执行、异步任务
  • crew/→ Crew 编排
  • a2a/→ 代理之间的通信
  • llms/→ 各家 LLM 的集成
  • cassettes/→ LLM 调用的录制响应,测试重放时不真正发网络请求

根目录直接放文件的多是核心类测试,比如 test_task.py。在编辑器里全局搜test_<模块名>,十有八九能找到。

用 Mock 和断言把测试"锁死"

Mock(模拟)是 CrewAI 单元测试的核心手法:把"慢、贵、不稳定"的外部依赖换成受控的假对象,被测逻辑保持真身。一句话:不关心的 Mock,被测的别 Mock。

这是企业版的测试配置页:选迭代次数、勾选要测哪个模型,和你在单测里挑"假 LLM"是同一个思路。仓库里 test_task_guardrails.py 就是标准示范:Task 是真的、guardrail 校验逻辑是真的,只 Mock 掉 Agent。你照着写:

# 对:只 Mock LLM 调用,被测的 guardrail 用真对象 agent = Mock() agent.execute_task.return_value = "test result" task = Task(description="test", agent=agent, guardrails=[validate]) assert task.execute_sync(agent=agent).raw == "test result" # 错:你测的是 guardrail 校验逻辑,却把 validate 本身 Mock 掉了 # 测试永远绿,但它什么都没验证

养成这个习惯,测试才不只是"跑一遍看着对",而是真的在验证行为。

测试失败了先看哪里

红了先看环境,别急着怀疑逻辑。CrewAI 的 LLM 测试用 VCR(一个录制/回放 HTTP 请求的工具)把真实响应存进lib/crewai/tests/cassettes/,该调 LLM 的测试报网络或鉴权错,多半是 cassette 缺失或没匹配上,而不是你的代码写错。

确认是逻辑问题,跑uv run pytest <文件> -k <用例名> -vv看完整断言栈;想搞清楚 Agent 为什么这么干,打开 tracing(执行追踪,逐步记录每个环节的输入输出):

让测试自动跑起来 ✅

仓库的 .github/workflows/tests.yml 在 pull request 时触发,把完整测试套件切成 8 片并行跑,覆盖 Python 3.10 到 3.13,任何一片失败都会拦住合并。CI 细节不用深究,记住一条:本地uv run pytest过了,PR 大概率是绿的;反过来 PR 红了,就去翻对应分片那一组的日志。

下一步可以做什么

把 Mock 换成真 Agent 加一次真实 LLM 调用,写个集成测试,key 放进.env.test文件(仓库的 conftest.py 会自动加载它)。再翻几个cassettes/下的录制文件,理解请求是怎么被录下来又重放的。这两步做完,给你自己项目里的 Crew 补测试就是小时级的事。

【免费下载链接】crewAIFramework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.项目地址: https://gitcode.com/GitHub_Trending/cr/crewAI

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 8:30:55

Harness工程是什么:如何用反馈闭环让便宜模型在任务中击败昂贵模型

Claude Opus 4.8 在几项任务里输给了一套价格低得多的模型组合&#xff0c;这不是段子。最近社区流传的对比测试中&#xff0c;有人把昂贵模型的裸调用和一套经过设计的 Harness 工程放到同一批任务上&#xff0c;结果五项任务全部落败&#xff0c;而模型 API 单价差距被提到 5…

作者头像 李华
网站建设 2026/8/30 8:30:13

Vue3面试题八股集合:从响应式原理到框架设计

2023年Vue3面试题八股集合&#xff1a;从背题到理解框架设计最近不少朋友在准备前端跳槽&#xff0c;问我有没有Vue3面试题的“八股集合”。说实话&#xff0c;每年这个时候都会有一波面试季&#xff0c;而Vue3相关的问题几乎已经成了前端面试的必考点。有人觉得八股文就是死记…

作者头像 李华
网站建设 2026/8/30 8:30:09

与AI同游:游戏AI落地的工程化路径与架构挑战

去年有段时间&#xff0c;我连续试了好几个国产游戏的技术 Demo。最明显的感受是&#xff1a;以前玩家面对的 NPC 是一段写死的对话树&#xff0c;对话选项永远只有三四个&#xff1b;现在很多角色能真正接住玩家输入的自由文本&#xff0c;然后结合游戏内的状态做出反应。这个…

作者头像 李华
网站建设 2026/8/30 8:22:42

ESP32跑LLM推理可视化:Brainscope示例实战解析

在嵌入式开发里调试 AI 推理&#xff0c;过去基本就是看串口打印的 loss 和 accuracy&#xff0c;模型内部真正在做什么&#xff0c;完全是个黑盒。Brainscope 的 examples/ESP32 示例换了个思路&#xff1a;让微控制器上的小型 LLM 在推理时&#xff0c;把每一层的激活值、输…

作者头像 李华
网站建设 2026/8/30 8:21:06

GPT-4时代,刷算法题和背八股文还有意义吗?

前几天一个准备跳槽的朋友发消息问我&#xff1a;GPT-4都能刷穿LeetCode了&#xff0c;我还在天天刷算法题、背Java八股文&#xff0c;是不是有点蠢&#xff1f;我当时没直接回答他&#xff0c;而是反问了一句&#xff1a;你用GPT-4写过代码吧&#xff1f;你觉得它写出来的东西…

作者头像 李华