跳转到内容

角色驱动 Agent 设计

学习目标

理解 CrewAI 如何通过 role/goal/backstory 三元组定义 Agent 人格,以及这种设计如何影响提示词组装、多 Agent 路由和委派决策。

前置知识

下文假设你已理解上述概念,直接聚焦 CrewAI 的具体实现。


项目实践

role/goal/backstory 三元组

CrewAI 的 Agent 定义要求三个必需字段:

# 伪代码
Agent(
role="高级数据分析师",
goal="从数据中提取可操作的洞察",
backstory="你拥有10年数据分析经验,擅长从复杂数据集中发现模式",
)

这三个字段在 Agent 初始化时通过 model_validator(mode="before") 合并配置,然后通过 post_init_setup 初始化 LLM、执行器和技能。

提示词组装

CrewAI 使用 i18n 多语言模板将三元组组装为系统提示词:

You are {role}.
Your personal goal is: {goal}
Your backstory: {backstory}
Tools you have access to:
{tools_description}
You have a maximum of {max_iter} iterations.

模板可通过 system_templateprompt_templateresponse_template 参数自定义。

三元组在多 Agent 路由中的作用

在 Hierarchical 模式下,Manager Agent 根据 role 描述决定任务分配:

  • DelegateWorkTool 使用 role + goal 生成同事 Agent 的描述列表
  • Manager 的提示词包含教导如何根据 role 选择合适 Agent 的指令
  • 委派时,目标 Agent 的 backstory 影响其输出的风格和视角

Agent 适配器

CrewAI 的 Agent Adapter 系统允许将第三方框架的 Agent 桥接到 CrewAI 接口:

BaseAgentAdapter
├── LangGraphAgentAdapter → 创建 LangGraph ReAct Agent 图
└── OpenAIAgentAdapter → 配置 OpenAI Assistants API

每个适配器负责工具转换、结构化输出转换和执行桥接,使得 Crew 中可以混合使用原生 Agent 和第三方 Agent。


问题与规避

过于泛化的 role 描述导致行为不可预测

  • 如果 role 描述太宽泛(如 “助手”),LLM 的输出风格和质量不可预测
  • 对策:role 应具体到领域和职责,如 “Python 后端性能优化专家” 而非 “程序员”

三元组缺乏行为约束和输出格式控制

  • 相比完整的 Agent 人格模板(身份 + 使命 + 规则 + 工作流 + 通信风格),三元组缺乏对行为约束的控制
  • 对策:通过自定义 system_templateprompt_template 添加行为约束和输出格式要求

backstory 过长导致 Token 浪费

  • backstory 每次调用 LLM 都会包含在系统提示中
  • 对策:backstory 保持 1-2 句,专注于经验背景和视角,而非详细简历

设计取舍

三元组 vs 完整人格模板

维度三元组完整模板
简洁性高(3 个字段)低(6+ 个段落)
行为控制
多 Agent 路由直接支持(Manager 根据 role 分配)需要额外解析
适用场景快速原型、角色分工清晰的场景需要精确行为约束的场景

CrewAI 选择三元组作为核心接口,但允许通过模板自定义扩展。


参考来源