AI AI树洞

Chapter 06

第六章 框架开发实践

当你理解了 ReAct、Plan-and-Solve 和 Reflection,下一步就是使用框架组织更复杂的 Agent。本章对照 AutoGen、AgentScope、CAMEL、LangGraph 的思想,并用无外部依赖的模拟代码理解它们的核心机制。

6.1 从手动实现到框架开发

6.1.1 为何需要智能体框架

手写 Agent 适合理解原理,但复杂项目会遇到消息传递、角色协作、状态恢复、工具管理、并发执行和可视化调试等问题。框架的价值,是把这些共性问题抽象成可复用组件。

6.1.2 主流框架的选型与对比

框架核心视角适合场景学习重点
AutoGen多角色对话与协作。软件团队、审查流程、任务分工。角色、群聊、终止条件。
AgentScope多智能体应用和游戏式交互。角色扮演、仿真、并行决策。消息结构、环境循环、角色状态。
CAMEL角色扮演式自主协作。写作、研究、专家协作。任务设定、角色目标、对话推进。
LangGraph状态图和条件路由。长任务、可恢复流程、复杂工作流。State、Node、Edge、Router。

6.2 框架一:AutoGen

6.2.1 AutoGen 的核心机制

AutoGen 类框架把 Agent 看成多个可以互相发消息的角色。每个角色有职责、系统提示词、工具和停止规则。系统通过群聊或调度器推进协作。

6.2.2 软件开发团队

软件团队案例通常包含产品经理、工程师和审查员。产品经理拆需求,工程师实现,审查员检查风险。教学代码用 SoftwareTeamSimulator 展示这个结构。

class SoftwareTeamSimulator:
    def run(self, task: str) -> list[TeamMessage]:
        return [
            TeamMessage("产品经理", f"需求拆解:{task}"),
            TeamMessage("工程师", "实现方案:先写测试,再实现最小功能。"),
            TeamMessage("审查员", "审查意见:补充边界条件和失败处理。"),
        ]

6.2.3 核心代码实现

最小实现由三部分组成:角色定义、消息结构和调度器。角色只负责生成自己的回复,调度器负责决定发言顺序、终止条件和最终汇总。不要把所有逻辑塞进单个 Prompt,否则很难调试哪个角色造成了错误。

messages = team.run("实现登录页")
for message in messages:
    print(message.sender, message.content)

6.2.4 AutoGen 的优势与局限性分析

多角色对话非常适合把职责显式化,但如果没有明确终止条件和裁决者,角色会互相消耗上下文和成本。

6.3 框架二:AgentScope

6.3.1 AgentScope 的设计

AgentScope 类框架更强调多智能体应用结构,常见概念包括角色、消息、环境、并行决策和运行时管理。它适合构建游戏、模拟和多角色交互。

6.3.2 三国狼人杀游戏

教学代码用 AgentScopeGame 模拟“玩家投票”。虽然很小,但能体现环境向多个角色收集动作,再统一更新状态的思想。

class AgentScopeGame:
    def __init__(self, players: list[str]) -> None:
        self.players = players

    def collect_votes(self) -> dict[str, str]:
        return {player: self.players[(index + 1) % len(self.players)] for index, player in enumerate(self.players)}

6.3.3 AgentScope 的优势与局限性分析

它适合多角色、强环境循环的任务;但工程上要格外关注角色状态、消息可追踪性和并发带来的调试难度。

6.4 框架三:CAMEL

6.4.1 CAMEL 的自主协作

CAMEL 类方法强调让两个或多个角色在明确任务设定下自主对话。它常用于专家协作、内容生成和研究型任务。

6.4.2 AI 科普电子书

一个写作者 Agent 和一个专家 Agent 可以协作产出电子书。写作者负责结构和读者体验,专家负责准确性和知识深度。

class CamelRolePlay:
    def run(self, topic: str) -> list[TeamMessage]:
        return [
            TeamMessage("写作者", f"请提供 {topic} 的章节结构。"),
            TeamMessage("专家", "建议分为背景、核心概念、案例和练习。"),
            TeamMessage("写作者", "我会把建议整理为电子书草稿。"),
        ]

6.4.3 CAMEL 的优势与局限性分析

角色扮演能提升产出覆盖面,但不等于事实正确。涉及专业知识时仍需要检索、引用和外部评估。

6.5 框架四:LangGraph

6.5.1 LangGraph 的结构梳理

LangGraph 的核心是状态图。你定义全局 State、节点函数和边,再通过条件路由控制下一步。它适合长任务、可恢复流程和有复杂分支的 Agent。

class StateGraph:
    def add_node(self, name: str, fn) -> None:
        self.nodes[name] = fn

    def add_edge(self, source: str, target: str) -> None:
        self.edges[source] = target

    def run(self, start: str, state: GraphState) -> GraphState:
        current = start
        while current:
            state = self.nodes[current](state)
            current = self.edges.get(current, "")
        return state

6.5.2 三步问答助手

三步问答助手可以拆成 planner、retriever、answerer 三个节点。本章配套代码为了保持简洁,只实现 planner 和 executor 两个节点。

当 StateGraph 增加条件路由后,节点不再只按固定边前进,而是根据状态决定下一步。例如 notes 为空时进入 retriever,已有检索结果时进入 answerer,遇到错误时进入 human_review。

完整代码见 framework_simulators.py

6.5.3 LangGraph 的优势与局限性分析

状态图让流程更可控、更适合恢复和调试;代价是前期设计更重,需要明确 State schema 和节点边界。

6.6 本章小结

AutoGen 强在多角色协作,AgentScope 强在环境和多智能体应用,CAMEL 强在角色扮演式任务推进,LangGraph 强在状态图和条件路由。选框架前,先判断你的任务更像对话协作、环境模拟、专家共创,还是可恢复流程。

习题

  1. 练习 6.1:扩展软件团队。SoftwareTeamSimulator 增加测试工程师角色。
  2. 练习 6.2:改造游戏投票。AgentScopeGame 支持弃权票。
  3. 练习 6.3:增加 CAMEL 轮次。 让写作者和专家进行两轮对话。
  4. 练习 6.4:扩展状态图。StateGraph 增加 retriever 节点。

参考资料

  • AutoGen:多 Agent 对话和协作框架。
  • AgentScope:面向多智能体应用的框架。
  • CAMEL:角色扮演式多智能体协作框架。
  • LangGraph:基于状态图的 Agent 工作流框架。