【CrewAI系列3】8 分钟,我用 CrewAI 创建了第一个 AI 员工
这是CrewAI系列的第3篇,计划写24篇,会持续更新;
作者:14 年测试/QA 老兵
系列:CrewAI 多 Agent 测试框架实战(第 3 篇)
字数:约 4,200 字
阅读时间:10 分钟
收益:学完即可创建你的第一个 AI 员工,替代重复性工作
你是不是也经历过这些
❌重复写测试用例—— 同样的场景,换个项目又要重写一遍
❌手动查资料—— 遇到不懂的测试概念,要去 网上搜半天
❌文档没人看—— 辛辛苦苦写的测试文档,开发说「太长了不看」
❌半夜被叫醒—— 线上出问题,要半夜起来查日志、复现 bug
❌背锅侠—— 延期了是测试没测好,上线出问题了是测试漏测了
如果中了一条,这篇文章就是为你写的。
换个思路:如果有个 AI 助手呢?
想象一下:
- 你告诉它「帮我写 20 条边界值分析的测试用例」,30 秒后给你一份完整的文档
- 你问它「什么是边界值分析」,它用测试人员能懂的语言解释,还附带实际例子
- 你让它「分析这个 bug 报告」,它帮你找出根本原因和复现步骤
这不是未来,这是现在就能做到的。而 CrewAI,就是帮你创建这个 AI 员工的工具。
CrewAI 核心架构
在开始之前,先理解三个核心概念:
TEXT复制
┌─────────────────────────────────────────────────────────┐ │ CrewAI 三要素 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 🤖 Agent(员工) 📋 Task(工单) │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ role 角色 │ │ description │ │ │ │ goal 目标 │ │ output │ │ │ │ backstory │ │ agent │ │ │ └─────────────┘ └─────────────┘ │ │ ↓ ↓ │ │ └───────┬───────────┘ │ │ ↓ │ │ 👥 Crew(团队) │ │ ┌─────────────┐ │ │ │ agents[] │ │ │ │ tasks[] │ │ │ │ kickoff() │ ← 启动执行 │ │ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘通俗理解:-Agent= 你的员工(定义角色、目标、背景) -Task= 分配给员工的工单(描述任务、期望输出)
- Crew= 项目组(把员工和工单组织起来,启动执行)
一个 Agent 是最小单位,多个 Agent 协作就是 Crew。
8 分钟,创建你的第一个 Agent
第一步:创建项目文件(2 分钟)
BASH复制
# 进入项目目录 cd ~/projects/crewai-demo # 激活虚拟环境 source venv/bin/activate # 创建文件 touch hello_agent.py第二步:编写代码(3 分钟)
打开hello_agent.py,复制以下代码:
PYTHON复制
from crewai import Agent, Task, Crew # 1. 定义 Agent(创建你的员工) agent = Agent( role="助手", goal="帮助用户完成任务", backstory="你是一个友好的 AI 助手", verbose=True ) # 2. 定义 Task(分配工单) task = Task( description="请用 3 句话介绍人工智能", expected_output="AI 简介", agent=agent ) # 3. 创建 Crew(组建团队) crew = Crew( agents=[agent], tasks=[task], verbose=True ) # 4. 执行(kickoff 启动) print("🚀 开始执行...\n") result = crew.kickoff() print("\n✅ 执行完成!") print(f"结果:{result}")第三步:运行(3 分钟)
BASH复制
python hello_agent.py预期输出:
TEXT复制
🚀 开始执行... ╭───────────────── 🚀 Crew Execution Started ─────────────────╮ │ Crew Execution Started │ │ Name: crew │ │ ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 │ ╰──────────────────────────────────────────────────────────────╯ ╭─────────────────── 📋 Task Started ────────────────────╮ │ Task Started │ │ Description: 请用 3 句话介绍人工智能 │ ╰─────────────────────────────────────────────────────────╯ ╭─────────────────── 🤖 Agent Started ────────────────────╮ │ Agent: 助手 │ ╰─────────────────────────────────────────────────────────╯ ╭───────────────── ✅ Agent Final Answer ──────────────────╮ │ 人工智能起源于 1956 年达特茅斯会议。 │ │ 20 世纪 80 年代专家系统兴起。 │ │ 2010 年后深度学习突破,AI 进入快速发展期。 │ ╰─────────────────────────────────────────────────────────╯ ✅ 执行完成! 结果:人工智能起源于 1956 年...恭喜!你的第一个 AI 员工上岗了!🎉
代码逐行解析(理解核心参数)
1. 导入类
PYTHON复制
from crewai import Agent, Task, Crew三个核心类:
| 类 | 作用 | 类比 |
|---|---|---|
Agent | 智能体 | 你的员工 |
Task | 任务 | 工单 |
Crew | 团队 | 项目组 |
2. 定义 Agent(创建员工)
PYTHON复制
agent = Agent( role="助手", # 角色定位 goal="帮助用户完成任务", # 工作目标 backstory="你是一个友好的 AI 助手", # 背景故事 verbose=True # 详细日志 )4 个核心参数:
| 参数 | 作用 | 是否必填 | 影响 |
|---|---|---|---|
role | 定义 Agent 身份 | ✅ 必填 | 决定输出风格 |
goal | 定义目标任务 | ✅ 必填 | 决定工作方向 |
backstory | 让 Agent 更"真实" | ✅ 必填 | 决定输出深度 |
verbose | 输出详细日志 | ❌ 可选 | 决定日志详细度 |
3. 定义 Task(分配工单)
PYTHON复制
task = Task( description="请用 3 句话介绍人工智能", # 任务描述 expected_output="AI 简介", # 期望输出 agent=agent # 负责人 )3 个核心参数:
| 参数 | 作用 | 是否必填 |
|---|---|---|
description | 任务描述 | ✅ 必填 |
expected_output | 期望输出 | ✅ 必填 |
agent | 负责 Agent | ✅ 必填 |
4. 创建 Crew(组建团队)
PYTHON复制
crew = Crew( agents=[agent], # Agent 列表 tasks=[task], # Task 列表 verbose=True # 详细日志 )5. 执行(启动项目)
PYTHON复制
result = crew.kickoff()kickoff()方法:- 启动 Crew 执行 - 按顺序执行所有 Task
- 返回最终结果
实测:修改参数,观察效果变化
实验 1:修改 role(角色定位)
版本 1:友好助手
PYTHON复制
agent = Agent( role="助手", backstory="你是一个友好的 AI 助手" )输出风格:平实、易懂
TEXT复制
人工智能是一种让计算机模拟人类智能的技术。 它可以帮助人们完成各种任务,如识别图像、理解语言等。 人工智能正在改变我们的生活方式。版本 2:资深专家
PYTHON复制
agent = Agent( role="AI 专家(20 年经验)", backstory="你是拥有 20 年经验的 AI 专家,曾在谷歌、微软工作" )输出风格:专业、包含技术术语
TEXT复制
人工智能(Artificial Intelligence)的概念最早由 John McCarthy 于 1956 年在达特茅斯会议上提出。经过符号主义、连接主义等阶段, 特别是 2012 年深度学习突破后,AI 进入了快速发展期...💡 结论:role 定义直接影响输出风格和专业度。
实验 2:修改 backstory(背景故事)
版本 1:简短
PYTHON复制
backstory="你帮助写文档"输出:约 100 字,简单直接版本 2:详细
PYTHON复制
backstory="""你是拥有 15 年经验的测试经理,擅长: 1. 根据需求评估测试范围 2. 制定合理的测试计划 3. 识别高风险区域 你的工作风格: - 结果导向 - 风险驱动 - 数据驱动"""输出:约 500 字,详细专业💡 结论:backstory 越长越详细,输出越专业、越有深度。
实验 3:修改 verbose(日志详细度)
verbose=False:
TEXT复制
✅ 执行完成! 结果:人工智能起源于...verbose=True:
TEXT复制
🚀 Crew Execution Started 📋 Task Started 🤖 Agent Started ✅ Agent Final Answer ✅ 执行完成!💡 建议:开发调试时用 True,生产环境用 False。
实战:创建测试助手 Agent
需求场景
创建一个能回答测试问题的 AI 助手,随时解答测试概念、提供测试建议。
代码实现
PYTHON复制
from crewai import Agent, Task, Crew # 创建测试助手 Agent test_assistant = Agent( role="测试助手 (Test Assistant)", goal="回答测试相关问题,提供测试建议", backstory="""你是拥有 10 年经验的测试专家,擅长: 1. 测试用例设计(等价类、边界值、场景法等) 2. 测试执行和缺陷分析 3. 测试自动化和持续集成 你乐于助人,用简单易懂的语言解释测试概念。 喜欢用实际例子说明抽象概念。""", verbose=True ) # 创建任务 question = Task( description="请解释什么是边界值分析,并给出一个实际例子", expected_output="边界值分析的解释和示例", agent=test_assistant ) # 创建 Crew crew = Crew( agents=[test_assistant], tasks=[question], verbose=True ) # 执行 result = crew.kickoff() print(result)输出示例
TEXT复制
╭───────────────── ✅ Agent Final Answer ──────────────────╮ │ 边界值分析是一种测试设计技术,用于测试输入域的边界条件。 │ │ │ │ 原理: │ │ 错误往往发生在边界附近,而不是中间值。 │ │ │ │ 实际例子: │ │ 测试一个输入框,要求输入 1-100 的数字。 │ │ │ │ 应该测试的边界值: │ │ - 0(小于最小值) │ │ - 1(最小值) │ │ - 2(最小值 +1) │ │ - 99(最大值 -1) │ │ - 100(最大值) │ │ - 101(大于最大值) │ │ │ │ 这样可以发现边界处理错误。 │ ╰─────────────────────────────────────────────────────────╯看到没?这就是你的 AI 测试助手!以后遇到测试概念,不用再去 Google 搜了,直接问它就行。
你的收益计算器
假设你是一个测试人员:学习前:- 查一个测试概念:15 分钟(搜索 + 筛选 + 理解) - 写一份测试用例文档:2 小时
- 每月重复性工作:约 35 小时
学习后:- 查一个测试概念:30 秒(问 AI 助手) - 写一份测试用例文档:20 分钟(AI 生成初稿 + 人工审核)
- 每月重复性工作:约 5 小时
每月节省:30 小时每年节省:360 小时 = 45 个工作日这还没算:- 减少的加班时间 - 提升的工作质量
- 避免的线上故障
更重要的是:你可以把节省下来的时间,用来: - 学习新技能(AI 评测、大模型测试) - 做更有价值的工作(测试架构、质量体系建设)
- 早点下班,陪陪家人
而不是把生命浪费在重复的体力劳动上。
常见问题 FAQ
Q1: 输出是英文怎么办?
原因:提示词是英文解决:用中文写 description
PYTHON复制
# ❌ 错误 description="Explain what is boundary value analysis" # ✅ 正确 description="请解释什么是边界值分析"Q2: 输出太短怎么办?
解决:明确要求字数
PYTHON复制
task = Task( description="请详细解释边界值分析(不少于 300 字)", expected_output="详细的边界值分析解释" )Q3: 输出格式混乱怎么办?
解决:指定输出格式
PYTHON复制
task = Task( description="""请解释边界值分析 要求: 1. 先给出定义 2. 说明原理 3. 给出实际例子 4. 使用 Markdown 格式""", expected_output="结构化的边界值分析说明" )Q4: 执行失败怎么办?
检查步骤:
BASH复制
# 1. 检查 API Key echo $DASHSCOPE_API_KEY # 2. 检查网络连接 ping dashscope.aliyuncs.com # 3. 查看详细错误 # verbose=True 时会显示详细错误信息Q5: 可以创建多个 Agent 吗?
可以!这就是 CrewAI 的核心能力。
# 创建多个 Agent researcher = Agent(role="研究员", ...) writer = Agent(role="作家", ...) reviewer = Agent(role="评审员", ...) # 创建多个 Task task1 = Task(agent=researcher, ...) task2 = Task(agent=writer, ...) task3 = Task(agent=reviewer, ...) # 组建 Crew crew = Crew( agents=[researcher, writer, reviewer], tasks=[task1, task2, task3] )多个 Agent 会按顺序协作完成任务。
你最想用 AI Agent 帮你做什么?
A. 自动生成测试用例
B. 自动分析 Bug 报告
C. 自动写测试文档
D. 自动执行回归测试
评论区告诉我你的选择!
下篇预告
第 4 篇我们会深入理解 Agent 核心参数:
- 如何定义专业的 Agent 角色?
- backstory 怎么写才能让输出更专业?
- 如何控制输出的风格和格式?
- 实战:创建 5 个专业测试 Agent
敬请期待!
作者说:第一个 Agent 是起点,后续会创建 5 个专业测试 Agent,形成完整的测试团队。
欢迎关注我「测试员周周」,获取更多 AI+ 测试实战内容!
📚系列文章索引
| 序号 | 文章 | 状态 |
|---|---|---|
| 01 | CrewAI 是什么? | ✅ 已完成 |
| 02 | 10 分钟搭建环境 | ✅ 已完成 |
| 03 | 第一个 Agent | ✅ 本篇 |
| 04 | 理解核心参数 | 📝 下一篇 |
| 05 | 设计专业 Agent 角色 | 📝 规划中 |
| ... | ... | ... |
🎁 获取完整代码
关注、点赞、评论获取:
- ✅ hello_agent.py 完整源码
- ✅ test_assistant.py 测试助手源码
- ✅ CrewAI 参数速查表(PDF)
- ✅ 常见问题解决方案文档
作者:测试员周周,14 年测试经验,专注 AI+ 测试实战
