云计算百科
云计算领域专业知识百科平台

从Agent到CrewAI,一口气读懂

欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。

目录

  • 引言
  • 1 LLM应用是什么?
  • 2 LLM Agent是什么?
    • 2.1 是自动化的LLM
    • 2.2 怎么构建一个好的Agent
  • 3 Multi-Agent System
    • 3.1 LLM的划分
      • 3.1.1 8/2法则:专注于任务(动态驱动)而非代理(固定配置)
  • 4 CrewAI是什么?
    • 4.1 核心类 Agent、Task、Crew
      • 4.1.1 Agent
      • 4.1.2 Task
      • 4.1.3 Crew
        • 4.1.3.1 Processes
          • 4.1.3.1.1 Sequential 顺序执行
          • 4.1.3.1.2 Hierarchical 层级流程
          • 4.1.3.1.3 Consensual 协商流程
    • 4.2 Tools

引言

从Agent到Agent框架CrewAI。不了解Agent也没有关系,我将尝试一次性讲明白。 阅读本篇可对Agent与CrewAI有一定认知。

  • 资料 CrewAI官网:https://docs.crewai.com/en/introduction Building an agent:https://docs.llamaindex.ai/en/stable/understanding/agent/ Building effective agents:https://www.anthropic.com/engineering/building-effective-agents

1 LLM应用是什么?

  • 什么是大模型? 在NLP(自然语言处理)等领域,运用机器学习(特别是深度学习)的手段研究出来的强大的基础引擎或平台。

  • LLM应用和传统应用的区别 传统应用:输入、过程、输出都是比较固定的。 LLM应用:模糊(不确定)的输入、模糊的过程、模糊的输出。

![[CrewAI入门笔记.png]]

2 LLM Agent是什么?

2.1 是自动化的LLM

当LLM具备一定的感知能力,可以依据状态自行调整、持续回答,甚至使用工具、与外界交互。这就是一个Agent了。 也可以划分出一些核心要素,比如”感知、认知/推理、行动、目标“。有着核心思想ReACT (Reason + Act)。 简单来说:它思考、记忆、行动。

2.2 怎么构建一个好的Agent

一个好的Agent有以下六个特点:

  • 专业的角色扮演

  • 专注于目标 Agent的驱动力,期望。

  • 合适的工具

  • 良好的协作 很少有Agent能独立完成所有复杂任务,基于这个前提,Agent应当有良好的”反馈“,要能识别自身能力的局限,将任务合理分解并委托给其他更适合的Agent。

  • 边界约束 操作边界、能力边界、安全边界等…

  • 记忆

构建时需要遵循以下原则:

  • 保持设计的简洁
  • 展示明确的规划步骤(透明化,以调整优先级)

3 Multi-Agent System

有一些重要的共识(来自CrewAI讲解视频):

  • 专注的LLM获取更好的结果
  • LLM在角色扮演的情况在表现更好

理论支撑(来自AI搜索、验证): Anthropic的信息压缩论——“单一LLM处理开放性问题时,受限于上下文窗口长度和计算资源,难以高效提炼海量信息。多智能体系统通过分工实现“并行压缩””。

所以,单个Agent是有极限的,并不能支撑实际生产的复杂业务,我们需要多Agent,需要Multi-Agent System。

3.1 LLM的划分

在CrewAI,LLM Agent被划分来处理不同的Task。类似事件驱动划分 或 角色驱动划分(从代码来看应该都可以)。

  • 一个有效的思维分享 决定一个LLM Agent是什么角色时,可以思考"一个现实的团队里,什么样的角色处理什么样的任务表现的更好“。

怎么感觉DDD还在追着我打,这种边界划分降低复杂度的做法…

概念DDDCrewAI Agent设计
核心边界 限界上下文 Agent角色/工具集
协作单元 聚合根 Agent任务执行实体
流程表达 领域事件 任务链顺序/触发条件
能力封装 领域服务 Agent工具方法

3.1.1 8/2法则:专注于任务(动态驱动)而非代理(固定配置)

CrewAI在官网文档中指出: 在构建高效的 AI 系统时,请记住这个关键原则:80%的努力应投入到任务设计,而只有 20%用于定义代理。

因为即使是最完美定义的代理,如果任务设计不当也会失败,但精心设计的任务可以使最简单的代理也能表现出色。这意味着:

  • 将大部分时间用于编写清晰的指令
  • 定义详细的输入和预期输出
  • 添加示例和背景信息以指导执行
  • 将剩余时间用于确定代理角色、目标和背景故事

其本质上是强调了动态的任务设计的重要性,任务设计是Agent系统的核心驱动力。 Agent的行为高度依赖任务指令的质量,而任务指令的本质就是提示词(Prompt)的优化。

在一般的Agent系统中,任务与代理的配置均通过Prompt实现,也应遵循8/2法则。 20%精力:定义代理基础能力,如role。 80%精力:优化任务Prompt,如task。

8/2法则类似Prompt设计模式中的CRISPE架构、CoT步骤要求,运用的原则类似传统软件设计模式中的“封装稳定的、抽离动态的”分离设计。

4 CrewAI是什么?

CrewAI是一个Python编写的可以用于构建 AI 代理团队(Multi-Agent System)的框架. 具备良好的抽象(结构划分)、强大的工具集成、记忆管理与流程控制,Agent间可以协同处理复杂任务。

![[从Agent到CrewAI.png]]

![[从Agent到CrewAI-3.png]]

4.1 核心类 Agent、Task、Crew

CrewAI通过3个核心类,极大简化了Agent的开发步骤。

4.1.1 Agent

CrewAI的Agent划分有重要的属性、role、goal、backstroy(类似context)。

有一个重要的说明:当给予代理专门角色而非一般角色时,代理的表现会显著更好。一个高度专注的代理能提供更精确、更相关的输出。

比如通用角色”作家“的效果往往没有专门的”xx作家“效果好。

  • trade off 高效的智能体需要在专业(精通某事)与通用(适应各种情况)之间取得恰当平衡。

CrewAI提供了一个Levels List,可以根据任务的复杂性和质量要求进行选择:

  • Novice agents: Good for straightforward tasks, brainstorming, or initial drafts 新手代理:适合简单任务、头脑风暴或初稿
  • Intermediate agents: Suitable for most standard tasks with reliable execution 中级代理:适合大多数标准任务,执行可靠
  • Expert agents: Best for complex, specialized tasks requiring depth and nuance 专家代理:最适合复杂、专业任务,需要深度和细致
  • World-class agents: Reserved for critical tasks where exceptional quality is needed 顶尖代理:保留用于关键任务,需要卓越质量

4.1.2 Task

Q:定义一个好的任务的关键是什么?

首先,站在Manager的角度,明确目标、实现目标的过程。 所以,我们有两个必须的属性,描述、(期望)预期结果。

CrewAI的Task定义有description与expected_output、agent。 任务提供执行所需的所有必要细节,例如描述、负责的代理、所需的工具等,从而促进各种复杂程度的行动。

4.1.3 Crew

在Multi-Agent System中,常有一个LLM Call Router的角色。 ![[从Agent到CrewAI-1.png]]

CrewAI使用 Crew(一个Manager LLM)将Agent与Task关联、组织起来。 不仅仅是LLM Call Router的作用。

crew = Crew(
agents = [planner, writer, editor],
tasks = [plan, write, edit],
verbose = 2 # 1 or 2,2可以看所有执行日志

在这个示例中,tasks按照顺序执行(agents是注册用,具体task使用的agent在config时绑定)。

4.1.3.1 Processes

如何让Agent之间协同工作(collaborate)? CrewAI提供有顺序执行、分层(层级流程)、协商执行三种方式。 我们也可以自定义协作规则。

4.1.3.1.1 Sequential 顺序执行

顺序执行。前一个任务的输出通过 context 自动注入到后一个任务的 Prompt 中。 每个Task必须指定Agent。

4.1.3.1.2 Hierarchical 层级流程

Crew启动后使用 Manager(可以是一个独立的 Agent,也可以直接用 LLM) 观察所有任务与所有 agent 的能力描述,动态决定谁来做什么;任务完成后再由 manager 审核、整合。

任务与 agent 无需预先绑定,manager 实时委派。 适用于所有需要“任务调度+质量把关”的场景。 在定义Agent时,可以配置allow_delegation=True。

manager_agent = Agent(allow_delegation=True) # 启用委派权限
crew = Crew(process=Process.hierarchical, manager_llm=manager_agent)

工作流:

  • Manager 解析任务并拆分子任务;
  • 通过 Delegate work 工具 将子任务分发给匹配的 Specialist Agent;
  • Specialist 执行后返回结果给 Manager
  • 任务链路里至少要有一个 Agent 的 allow_delegation=False,否则 Manager 会把所有任务都委派出去,导致空转。

    • 原理(来自Kimi K2)

    用户输入 ──▶ Manager 规划并分类任务

    ├─▶ 委派技术子任务 ──▶ Technical Agent ─┐
    │ │
    ├─▶ 委派账单子任务 ──▶ Billing Agent ─┤──▶ Manager 质检
    │ │
    └─▶ 委派质检任务 ──▶ QA Agent ——-┘


    不通过则回退

    Hierarchical这样的动态委派的原理是什么呢? 大概是一个Manager Prompt

    你是项目经理,手下有这些人:
    [agent0] role: 高级开发, goal: …, tools: [CodeInterpreter]
    [agent1] role: 测试工程师, goal: …, tools: [Browser]
    任务列表:
    Task0: 写注册接口
    Task1: 写单元测试

    Prompt 里会附上一段系统指令:“请根据 agent 能力把任务分派下去,并在收到结果后判断是否符合 expected_output,不符合就回退或重派。”

    简单总结:“用更大的 prompt让更大的 LLM扮演项目经理,然后把所有 agent 的 execute() 当成普通函数反复调用,直到 LLM 说 OK 为止。”

    4.1.3.1.3 Consensual 协商流程

    规划中,多个 agent 民主协商、投票或辩论后决定任务顺序与结果 。

    from enum import Enum

    class Process(str, Enum):
    """
    Class representing the different processes that can be used to tackle tasks
    """

    sequential = "sequential"
    hierarchical = "hierarchical"
    # TODO: consensual = 'consensual'

    4.2 Tools

    Agent的关键——工具。工具是Agent与外界交互的关键,合适的工具应当有如下特征:

    • 通用的 通用要求工具是功能单一的、可组合、输出可预期(易用)。
    • 容错率 状态可观测、具备良好的故障处理能力。
    • 缓存 控制使用成本。要求工具具备幂等性。
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 从Agent到CrewAI,一口气读懂
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!