【CrewAI系列5】万字拆解 CrewAI 角色设计:3 个要素让 Agent 输出专业 10 倍

0 阅读21分钟

作者: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 篇    教你"如何做出美味佳肴"

这篇你会学到:

  1. 一个踩坑故事(我花了 3 天才明白的事)
  2. 一组对比实验(3 种角色定义,输出差距 10 倍)
  3. 一套人话解释(role=身份证、goal=KPI、backstory=简历)
  4. 五个完整模板(测试经理/设计师/工程师/分析师/报告专员)
  5. 一份避坑指南(新手最常踩的 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 输出对比

版本字数专业度可用性核心问题
A100 字泛泛而谈,没有任何针对性
B300 字⭐⭐⭐⭐⭐⭐有一些测试概念,但缺乏深度
C1500+ 字⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐覆盖了核心场景,可直接使用

版本 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 输出稳定在"还行但不够好"的水平。

问题:好的角色定义不是一次写成的,是迭代出来的。

✅ 修正:每次运行后看输出,问自己三个问题:

  1. 输出中缺了什么?→ 补到 backstory 里
  2. 输出中多了什么不需要的?→ 在 backstory 中加约束
  3. 输出的风格对吗?→ 调整工作风格描述

错误 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:角色定义好了,输出还是不好怎么办?

三步排查:

  1. 检查 goal 是否可衡量——如果不可衡量,Agent 不知道做到什么程度
  2. 检查 backstory 是否有具体技能——如果只有泛泛描述,Agent 没有专业知识可以调用
  3. 检查 task 是否与角色匹配——如果让测试经理写代码,输出自然不好

Q6:需要为每个项目重新设计角色吗?

不需要完全重新设计。 保留核心框架,根据项目特点微调。比如电商项目的测试经理和金融项目的测试经理,核心能力相同,但项目经验部分需要调整。


9. 小结

核心要点回顾

  1. 角色定义

     — 明确 + 专业 + 英文对照,是 Agent 的灵魂

  2. 三要素缺一不可

     — role 是身份,goal 是 KPI,backstory 是简历

  3. backstory 写作

     — 经验 + 技能 + 风格 + 项目 + 价值观,200-300 字

  4. 多 Agent 协作

     — 明确边界、建立上下游、统一术语

  5. 迭代优化

     — 好的角色不是一次写成,是迭代出来的

验证标准

✅ 好的角色定义有一个硬标准:Agent 第一次输出就能达到专业水准。如果不行,继续优化 backstory。

下一步

  • 第 6 篇:《测试工具开发实战》——提供完整的工具代码,从零搭建你的 CrewAI 测试团队

作者说:我花了三天踩坑才明白这些。你把这篇文章看完,三分钟就能用上。这就是写这篇文章的意义。

🎯 立即行动

  1. 打开你的 CrewAI 项目
  2. 检查角色定义是否符合三要素(role + goal + backstory)
  3. 用本文的 5 个模板对照优化

📚 下一篇预告:第 6 篇《测试工具开发实战》将提供完整的工具代码,从环境搭建到跑通第一个多 Agent 测试流程,敬请期待!

欢迎关注测试员周周,获取更多 AI+ 测试实战内容!


📚 系列文章索引

序号文章状态
01-04已完成
05角色设计方法论✅ 本篇
06测试工具开发实战📝 下一篇
.........

📚 本文是 CrewAI 多 Agent 测试框架实战系列第 5 篇,共24篇