欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。
目录
- 引言
- 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应用:模糊(不确定)的输入、模糊的过程、模糊的输出。
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还在追着我打,这种边界划分降低复杂度的做法…
核心边界 | 限界上下文 | 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间可以协同处理复杂任务。
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的角色。
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)
工作流:
任务链路里至少要有一个 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与外界交互的关键,合适的工具应当有如下特征:
- 通用的 通用要求工具是功能单一的、可组合、输出可预期(易用)。
- 容错率 状态可观测、具备良好的故障处理能力。
- 缓存 控制使用成本。要求工具具备幂等性。
评论前必须登录!
注册