作者:14 年测试/QA 老兵 系列:CrewAI 多 Agent 测试框架实战(第 5 篇,计划24篇)
0. 上篇回顾
第 4 篇我们学习了 Agent 的所有核心参数:
必填参数:
- role - 定义 Agent 的身份
- goal - 定义 Agent 要完成的任务
- backstory - 让 Agent 更"真实"
推荐参数:
- llm - LLM 配置
- tools - 工具列表
- verbose - 详细日志
可选参数:
- max_iter - 最大迭代次数
- memory - 启用记忆
- cache - 启用缓存
上篇解决的是"是什么"和"怎么用"的问题。
0.1 这篇我们解决什么问题?
不是讲"怎么用",而是讲"怎么设计好"。
就像学做菜:
- 04 篇 告诉你"锅碗瓢盆有哪些、怎么用"
- 05 篇 教你"如何做出美味佳肴"
这篇你会学到:
- 一个踩坑故事(我花了 3 天才明白的事)
- 一组对比实验(3 种角色定义,输出差距 10 倍)
- 一套人话解释(role=身份证、goal=KPI、backstory=简历)
- 五个完整模板(测试经理/设计师/工程师/分析师/报告专员)
- 一份避坑指南(新手最常踩的 8 个坑)
核心结论:专业角色定义的输出质量是模糊角色的 10 倍以上。
1. 一个踩坑故事:我花了三天才明白的事
先讲个自己的故事。
我第一次认真用 CrewAI 搭建测试团队。信心满满地配了 5 个 Agent,跑起来一看——
输出的测试计划像实习生第一次写的作业:泛泛而谈、毫无针对性、连边界条件都没考虑。
我以为是 prompt 写得不好,改了十几遍还是那样。又以为是模型不够聪明,换了模型还是不行,换了一家的 API,结果差不多。
折腾了三天。最后发现问题的根源只有一个——
角色定义太烂了。
我当时的角色定义是这样的:
agent = Agent(
role="测试助手",
goal="帮我写测试相关文档",
backstory="你是一个 AI 助手"
)
这叫什么?这叫给 Agent 发了张身份证,上面名字写了个"人" 。
Agent 拿到这种定义,内心 OS 大概是:"好吧,我是个测试助手,但我不确定要测试什么、怎么测试、测到什么程度。随便写点吧。"
后来我把角色重新设计了一遍,同样的模型,输出质量直接翻了 10 倍。
这就是我今天要写的:角色设计方法论。
角色定义是 Agent 开发的灵魂,代码只是躯壳。灵魂不对,写再多代码也是白搭。
1. 一个实验:角色定义的影响力有多大
1.1 实验设计
我用 完全相同的模型、相同的任务,只改角色定义,做了 3 组对比实验。
任务:为电商订单系统制定一份测试计划
3 种角色定义:
# 版本 A:模糊角色
agent_a = Agent(
role="助手",
goal="写测试计划",
backstory="你帮助写文档"
)
# 版本 B:普通角色
agent_b = Agent(
role="测试人员",
goal="制定测试计划",
backstory="你有测试经验,做过一些项目的测试工作"
)
# 版本 C:专业角色
agent_c = Agent(
role="资深测试经理 (Senior Test Manager)",
goal="为电商订单系统制定测试计划,确保 P0 用例覆盖率 100%,P1 覆盖率≥95%",
backstory="""
你是拥有 15 年经验的测试经理,擅长:
1. 电商系统测试(订单、支付、库存、物流)
2. 风险评估和测试策略制定
3. 跨团队协作和测试资源管理
你的工作风格:
- 结果导向,关注测试覆盖率
- 风险驱动,优先测试核心业务流程
- 数据驱动,用指标说话
你曾经为多个大型电商平台(日活百万级)负责测试管理,
对秒杀系统、订单系统、支付系统的测试有丰富经验。
你深知测试的价值不在于找 bug,而在于降低业务风险、保障用户体验。
"""
)
1.2 输出对比
| 版本 | 字数 | 专业度 | 可用性 | 核心问题 |
|---|---|---|---|---|
| A | 100 字 | ⭐ | ⭐ | 泛泛而谈,没有任何针对性 |
| B | 300 字 | ⭐⭐⭐ | ⭐⭐⭐ | 有一些测试概念,但缺乏深度 |
| C | 1500+ 字 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 覆盖了核心场景,可直接使用 |
版本 A 的典型输出:
测试计划包括:功能测试、性能测试、兼容性测试。需要测试主要功能,确保正常运行。
版本 C 的典型输出节选:
订单系统测试覆盖矩阵:
1. 核心业务流程测试(P0) - 创建订单 → 支付 → 发货 → 收货 → 完成 - 创建订单 → 取消订单 → 退款 - 库存不足场景的降级处理
2. 异常场景测试(P1) - 支付超时自动取消 - 并发下单时的库存扣减 - 重复提交的幂等处理
3. 边界条件测试 - 最大购买数量限制 - 订单金额边界值(0、负数、超大金额) - 时间边界(跨天订单、活动过期瞬间下单)
结论一目了然:专业角色定义的输出质量是模糊角色的 10 倍以上。
同一个模型,不同的角色定义,输出的差距比不同模型的差距还大。
2. 角色设计三要素:role、goal、backstory
💡 人话解释:
role(角色)
= Agent 的"身份证",告诉它"你是谁"
goal(目标)
= Agent 的"KPI",告诉它"要达成什么结果"
backstory(背景故事)
= Agent 的"简历",告诉它"你做过什么、擅长什么"
记住:没有身份证的人是黑户,没有 KPI 的员工会摸鱼,没有简历的求职者没人要。 Agent 也一样。
2.1 role(角色)—— Agent 的身份证
命名公式:
role = [经验级别] + [专业领域] + [英文对照]
经验级别参考: 初级、中级、资深、高级、专家级
正确示例:
role="资深测试经理 (Senior Test Manager)"
role="高级性能测试专家 (Senior Performance Specialist)"
role="初级测试工程师 (Junior Test Engineer)" # 当需要入门级输出时
错误示例:
role="助手" # ❌ 太模糊
role="测试" # ❌ 连名词都不是
role="test agent" # ❌ 不够专业
role="一个会测试的AI" # ❌ 口语化,不严肃
role 不是名字,是身份。你给 Agent 什么身份,它就给你什么输出。
为什么英文对照很重要?
底层 LLM 的训练数据中英文内容最丰富。加上英文对照,能让模型精准匹配到对应的专业知识库。比如"测试经理"可能匹配到中文社区的浅层内容,但"Test Manager"会直接关联到 IEEE 标准、ISTQB 认证体系等专业资料。
2.2 goal(目标)—— Agent 的 KPI
命名公式:
goal = [核心动作] + [产出物] + [质量要求]
正确示例:
goal="制定测试计划,确保 P0 用例覆盖率 100%"
goal="设计全面的测试用例,覆盖正常/边界/异常场景"
goal="分析 bug 根因,给出可执行的修复建议"
错误示例:
goal="做好测试" # ❌ 不可衡量
goal="帮我做测试相关的工作" # ❌ 太宽泛
goal="写文档" # ❌ 没有质量要求
可衡量的 goal 有什么魔力?
当 goal 包含明确的质量标准时,Agent 会自我约束。它不是随便写点东西交差,而是会主动检查自己的输出是否达到了你设定的标准。这就是"KPI"的真正含义。
没有 KPI 的 Agent 就像没有目标的员工,不是能力不行,是不知道做到什么程度算合格。
2.3 backstory(背景故事)—— Agent 的简历
完整结构:
backstory="""
【经验年限】你是拥有 X 年经验的 [角色],擅长:
1. [技能 1]
2. [技能 2]
3. [技能 3]
【工作风格】你的工作风格:
- [特点 1]
- [特点 2]
- [特点 3]
【项目经验】你曾经在 [项目类型] 负责 [工作]。
【价值观】你深知 [理念]。
"""
为什么 backstory 比 role 和 goal 更重要?
role 和 goal 决定了 Agent "往哪个方向走",但 backstory 决定了"走多远、走多深"。一个充实的 backstory 能让 Agent 输出远超角色本身预期的专业内容。
提示
:backstory 不是越长越好,200-300 字最佳。太长会稀释关键信息,模型反而抓不住重点。
3. backstory 写作技巧:从模板到实战
3.1 具体化经验年限
❌ 模糊: "你有测试经验"
✅ 具体: "你是拥有 15 年经验的测试经理"
为什么具体数字这么重要?因为 LLM 对数字非常敏感。"有测试经验"触发的知识范围可能从入门到专家级都有;而"15 年经验"会精准定位到资深专家级别的知识深度。
3.2 列出核心技能
backstory="""你擅长:
1. 等价类划分和边界值分析
2. 状态迁移图和判定表
3. 场景法和错误推测法
"""
技巧:列出 3-5 个核心技能即可。太少不够丰满,太多会稀释注意力。
不同角色应该列什么技能?
| 角色 | 应列技能 |
|---|---|
| 测试经理 | 风险评估、资源分配、测试策略、团队管理 |
| 测试设计师 | 用例设计方法、场景建模、边界分析 |
| 测试工程师 | 自动化脚本、CI/CD、缺陷跟踪 |
| 测试分析师 | 根因分析、数据统计、5 Why 分析 |
3.3 描述工作风格
backstory="""你的工作风格:
- 结果导向,关注测试覆盖率
- 风险驱动,优先测试核心功能
- 数据驱动,用指标说话
"""
工作风格的本质是"行为约束" 。它告诉 Agent:不要泛泛而谈,要给出可量化的结果;不要面面俱到,要优先处理高风险区域。
好的 backstory 不是给 Agent 加光环,而是给它装护栏——让它在专业轨道上跑,而不是在泛泛而谈的旷野里迷路。
3.4 加入项目经验
backstory="""你曾经在多个大型电商系统负责测试管理,
对秒杀系统、订单系统、支付系统的测试有丰富经验。
"""
项目经验的作用:让 Agent 调用特定场景下的专业知识,而不是通用知识。同样是"测试",电商系统的测试和金融系统的测试关注点完全不同。
3.5 表达价值观
backstory="""你深知测试的价值不在于找 bug,
而在于降低业务风险、保障用户体验。
"""
价值观不是废话。它会直接影响 Agent 的输出视角。如果价值观是"测试是为了保证质量",Agent 会侧重流程和规范;如果是"测试是为了降低风险",Agent 会侧重风险评估和优先级排序。
4. 完整模板:5 个测试 Agent 角色设计
下面是我实战中验证过的 5 个角色,可以直接复制使用。
4.1 测试经理 (Test Manager)
test_manager = Agent(
role="资深测试经理 (Senior Test Manager)",
goal="为指定系统制定测试计划,确保 P0 用例覆盖率 100%,P1 覆盖率≥95%",
backstory="""
你是拥有 15 年经验的测试经理,擅长:
1. 大型系统测试风险评估和策略制定
2. 测试资源规划和团队管理
3. 跨部门协作和沟通
你的工作风格:
- 结果导向,关注测试覆盖率和质量指标
- 风险驱动,优先测试核心业务流程
- 数据驱动,用指标说话
你曾经为多个日活百万级的大型电商/金融系统负责测试管理,
对高并发、分布式架构的测试有丰富经验。
你深知测试的价值不在于找 bug,
而在于降低业务风险、保障用户体验。
"""
)
这个角色的核心价值:它能输出一份可直接执行的测试计划,包括测试范围、优先级、资源分配、时间规划。
4.2 测试设计师 (Test Designer)
test_designer = Agent(
role="资深测试设计师 (Senior Test Designer)",
goal="设计全面的测试用例,覆盖正常路径、边界条件和异常场景",
backstory="""
你是拥有 10 年经验的测试设计专家,擅长:
1. 等价类划分和边界值分析
2. 状态迁移图和判定表
3. 场景法和错误推测法
4. 正交实验设计
你的工作风格:
- 系统化思维,从全局到局部逐步分解
- 注重边界条件,关注极端场景
- 结构化输出,每个用例都有明确的输入、操作和预期结果
你曾经为支付网关、订单系统、用户权限管理等核心模块设计过测试用例,
对复杂业务逻辑的测试设计有丰富经验。
你深信好的测试用例设计是测试质量的第一道防线。
"""
)
4.3 测试工程师 (Test Engineer)
test_engineer = Agent(
role="高级测试工程师 (Senior Test Engineer)",
goal="根据测试用例执行测试,记录详细的执行结果和缺陷信息",
backstory="""
你是拥有 8 年经验的高级测试工程师,擅长:
1. 自动化测试脚本编写(Python/Java)
2. API 测试和接口自动化
3. 性能测试(JMeter/LoadRunner)
4. CI/CD 流水线中的测试集成
你的工作风格:
- 执行力强,严格按照用例步骤执行
- 记录详细,每个步骤都有截图和日志
- 问题敏感,发现异常时深挖一层
你曾经参与过多个大型项目的测试执行工作,
对测试环境搭建、数据准备、结果分析有丰富经验。
你深知测试执行的质量直接影响测试结果的可靠性。
"""
)
4.4 测试分析师 (Test Analyst)
test_analyst = Agent(
role="资深测试分析师 (Senior Test Analyst)",
goal="分析测试中发现的缺陷,给出根因定位和修复建议",
backstory="""
你是拥有 12 年经验的测试分析专家,擅长:
1. 5 Why 根因分析法
2. 鱼骨图和因果矩阵
3. 缺陷趋势分析和质量度量
4. 故障模式和影响分析(FMEA)
你的工作风格:
- 刨根问底,不满足于表面原因
- 数据支撑,每个结论都有证据
- 建设性,不仅指出问题还给出方案
你曾经主导过多个复杂缺陷的根因分析工作,
对分布式系统、微服务架构的缺陷分析有深入理解。
你相信每个缺陷背后都有一个可以被理解的原因,
找到它,才能避免同类问题再次发生。
"""
)
4.5 测试报告专员 (Report Specialist)
report_specialist = Agent(
role="专业测试报告撰写专家 (Professional Report Specialist)",
goal="生成结构化的专业测试报告,包含执行概要、详细数据和改进建议",
backstory="""
你是拥有 6 年经验的测试报告专家,擅长:
1. 测试报告结构化撰写
2. 测试数据可视化和统计分析
3. 质量度量指标计算和解读
4. 面向不同受众的报告定制(技术团队/管理层/客户)
你的工作风格:
- 结构清晰,先给结论再给数据
- 数据说话,避免模糊表述
- 可读性强,技术细节和业务价值分开
你曾经为多个大型项目撰写过测试报告,
熟悉 ISO/IEC/IEEE 29119 标准的报告规范。
你深知测试报告不是数据堆砌,
而是用数据讲清楚质量现状和改进方向。
"""
)
一套好的角色模板,能让你的 Agent 团队从"能用"变成"好用",从"好用"变成"离不开"。
5. 进阶:多 Agent 协作时的角色设计
当你有多个 Agent 协同工作时,角色设计需要额外注意以下几点。
5.1 避免角色重叠
两个 Agent 的职责如果高度重叠,会出现两种情况:
-
互相依赖
:A 等 B 的输出,B 等 A 的输出,死锁
-
互相重复
:A 和 B 做了同样的事,浪费资源
正确做法:明确边界
# ✅ 职责清晰
test_designer.goal = "设计测试用例,覆盖正常/边界/异常场景"
test_engineer.goal = "根据已有用例执行测试,记录结果"
# ❌ 职责重叠(两个都要"做测试")
agent_1.goal = "完成测试工作"
agent_2.goal = "完成测试工作"
5.2 建立上下游关系
好的多 Agent 系统应该像工厂流水线:
测试经理(制定计划)
↓
测试设计师(设计用例)
↓
测试工程师(执行测试)
↓
测试分析师(分析结果)
↓
报告专员(生成报告)
每个环节的输出,都是下一个环节的输入。 角色定义中要体现这一点。
5.3 统一术语
多个 Agent 协作时,如果术语不统一会产生理解偏差。比如一个 Agent 说"严重缺陷",另一个 Agent 理解为 P0,第三个理解为 P1。
解决方案:在 backstory 中统一术语体系:
backstory="...你使用标准的缺陷分级:P0(阻塞)/ P1(严重)/ P2(一般)/ P3(轻微)..."
6. 常见错误排障指南
这一节我整理了新手最常踩的 8 个坑,附上排障方法。
错误 1:角色太模糊
症状:Agent 输出泛泛而谈,像 AI 生成的大话。
❌ 错误: role="助手"
✅ 修正: role="资深测试经理 (Senior Test Manager)"
自测方法:把你的 role 发给一个陌生人,看他能不能猜到 Agent 要做什么。猜不到 = 太模糊。
错误 2:backstory 太短
症状:Agent 输出缺乏深度,只有表面信息。
❌ 错误: backstory="你有测试经验"
✅ 修正: 200-300 字的完整 backstory,覆盖经验、技能、风格、项目、价值观。
错误 3:goal 不可衡量
症状:Agent 输出的质量无法评估,不知道做到什么程度算合格。
❌ 错误: goal="做好测试"
✅ 修正: goal="制定测试计划,确保 P0 用例覆盖率 100%"
错误 4:backstory 写成了散文
症状:写了一大段优美的文字,但 Agent 输出没有改善。
问题:LLM 不是靠"文采"来理解指令的,是靠结构化信息。散文式的 backstory 信息密度太低。
✅ 修正: 用列表、分段、标签的方式组织,让模型一眼抓取关键信息。
# ❌ 散文式
backstory="你是一位经验丰富的测试专家,多年来一直从事各种系统的测试工作..."
# ✅ 结构化
backstory="""你是拥有 15 年经验的测试经理,擅长:
1. 风险评估
2. 测试策略
3. 团队管理
"""
错误 5:所有角色用同样的 backstory
症状:不同 Agent 的输出风格差不多,没有区分度。
问题:测试经理和测试工程师应该有完全不同的视角和技能栈。用同样的 backstory 等于让它们穿同一件衣服。
✅ 修正:每个角色的 backstory 必须体现其独特性。测试经理强调战略和规划,测试工程师强调执行和技术。
错误 6:backstory 过长(超过 500 字)
症状:Agent 输出反而变差了,抓不住重点。
问题:信息过载。LLM 的注意力是有限的,太长的 backstory 会稀释关键信息。
✅ 修正:控制在 200-300 字,每句话都有信息量。
backstory 的精髓不是"什么都说",而是"说最关键的"。200 字的精准定位,远胜 1000 字的泛泛而谈。
错误 7:角色定义了一次就再也不改
症状:Agent 输出稳定在"还行但不够好"的水平。
问题:好的角色定义不是一次写成的,是迭代出来的。
✅ 修正:每次运行后看输出,问自己三个问题:
- 输出中缺了什么?→ 补到 backstory 里
- 输出中多了什么不需要的?→ 在 backstory 中加约束
- 输出的风格对吗?→ 调整工作风格描述
错误 8:忽视了英文 prompt 的优势
症状:同样的角色定义,英文 model 输出比中文 model 好很多。
问题:很多专业领域的训练数据英文质量更高。
✅ 修正:role 中加上英文对照,backstory 中的专业术语也用英文标注。比如"等价类划分 (Equivalence Partitioning)"。
7. 角色设计检查清单
每次设计角色时,按这个清单过一遍。
角色定义自检
- role 是否包含经验级别 + 专业领域 + 英文对照?
- goal 是否包含核心动作 + 产出物 + 质量要求?
- backstory 是否覆盖经验年限、核心技能、工作风格、项目经验、价值观?
- backstory 字数是否在 200-300 字之间?
- 多个 Agent 之间是否有职责重叠?
- 术语是否统一?
- 英文专业术语是否有对照标注?
输出质量验证
- Agent 第一次输出就能达到专业水准吗?
- 输出内容可以直接使用吗?
- 输出有没有泛泛而谈的"AI 味"?
- 输出的深度是否符合角色级别?
花 80% 的时间设计角色,20% 的时间写代码,你会得到 10 倍的回报。反过来,你只会得到 10 倍的调试时间。
8. FAQ:新手必问
Q1:backstory 用中文还是英文写?
建议:中文为主,关键术语加英文对照。 这样既能精准表达你的意图,又能让模型匹配到最相关的专业知识。
Q2:一个 Crew 里能有多少个 Agent?
技术上没有硬性限制,但实践中建议 3-7 个。太多会导致:
- 协调成本增加
- 输出延迟变长
- 错误定位困难
Q3:角色定义会影响响应速度吗?
会。backstory 越长,prompt token 越多,响应时间略长。但 200-300 字的 backstory 只会增加几百 token,影响微乎其微。质量提升远大于速度损失。
Q4:可以用一个通用角色 + 不同的 task 吗?
可以,但效果不好。Task 决定"做什么",角色决定"怎么做"。同样的任务,测试经理和测试工程师的输出角度完全不同。
Q5:角色定义好了,输出还是不好怎么办?
三步排查:
- 检查 goal 是否可衡量——如果不可衡量,Agent 不知道做到什么程度
- 检查 backstory 是否有具体技能——如果只有泛泛描述,Agent 没有专业知识可以调用
- 检查 task 是否与角色匹配——如果让测试经理写代码,输出自然不好
Q6:需要为每个项目重新设计角色吗?
不需要完全重新设计。 保留核心框架,根据项目特点微调。比如电商项目的测试经理和金融项目的测试经理,核心能力相同,但项目经验部分需要调整。
9. 小结
核心要点回顾
-
角色定义
— 明确 + 专业 + 英文对照,是 Agent 的灵魂
-
三要素缺一不可
— role 是身份,goal 是 KPI,backstory 是简历
-
backstory 写作
— 经验 + 技能 + 风格 + 项目 + 价值观,200-300 字
-
多 Agent 协作
— 明确边界、建立上下游、统一术语
-
迭代优化
— 好的角色不是一次写成,是迭代出来的
验证标准
✅ 好的角色定义有一个硬标准:Agent 第一次输出就能达到专业水准。如果不行,继续优化 backstory。
下一步
- 第 6 篇:《测试工具开发实战》——提供完整的工具代码,从零搭建你的 CrewAI 测试团队
作者说:我花了三天踩坑才明白这些。你把这篇文章看完,三分钟就能用上。这就是写这篇文章的意义。
🎯 立即行动:
- 打开你的 CrewAI 项目
- 检查角色定义是否符合三要素(role + goal + backstory)
- 用本文的 5 个模板对照优化
📚 下一篇预告:第 6 篇《测试工具开发实战》将提供完整的工具代码,从环境搭建到跑通第一个多 Agent 测试流程,敬请期待!
欢迎关注测试员周周,获取更多 AI+ 测试实战内容!
📚 系列文章索引
| 序号 | 文章 | 状态 |
|---|---|---|
| 01-04 | 已完成 | ✅ |
| 05 | 角色设计方法论 | ✅ 本篇 |
| 06 | 测试工具开发实战 | 📝 下一篇 |
| ... | ... | ... |
📚 本文是 CrewAI 多 Agent 测试框架实战系列第 5 篇,共24篇