返回学习路线

AI 学习路线 · 深入

Part 11 · 多 Agent 与 Agent IDE

从"单个 Agent"升级到"多 Agent 协作",并掌握 AutoGen / LangGraph / GPTs / Coze / Dify 五个工具。


Section 1 · AutoGen:两个 Agent 互相聊天

Subsection 1 · 装库 cmd:pip install autogen-agentchat autogen-ext[openai]

AutoGen 0.4 之后包结构大改:不再是 pyautogen,而是拆成 autogen-core(核心)、autogen-agentchat(高层 Agent)、autogen-ext(模型客户端等扩展)。

Subsection 2 · 跑双 Agent 对话 新建 autogen_first.py:

python
import osimport asynciofrom dotenv import load_dotenvfrom autogen_agentchat.agents import AssistantAgentfrom autogen_agentchat.teams import RoundRobinGroupChatfrom autogen_agentchat.ui import Consolefrom autogen_ext.models.openai import OpenAIChatCompletionClientload_dotenv()# 模型客户端(DeepSeek 兼容 OpenAI 接口)# deepseek-chat 不在 AutoGen 内置模型白名单,需手动提供 model_infomodel_client = OpenAIChatCompletionClient(    model="deepseek-chat",    api_key=os.getenv("DEEPSEEK_API_KEY"),    base_url="https://api.deepseek.com",    model_info={        "vision": False,        "function_calling": True,        "json_output": True,        "structured_output": True,        "family": "unknown",    },)# 两个角色:一个提问,一个回答#  agent 的 name 只能用英文字母、数字、下划线、连字符,不能用中文questioner = AssistantAgent(    name="questioner",    model_client=model_client,    system_message="你是提问者,负责提出有趣的问题。每次只提一个问题,不要回答。",)answerer = AssistantAgent(    name="answerer",    model_client=model_client,    system_message="你是回答者,负责详细回答提问者的问题。",)# 轮流对话团队,最多 3 轮team = RoundRobinGroupChat([questioner, answerer], max_turns=3)# 新版 AutoGen 是 async 的,必须用 asyncio.runasync def main():    await Console(team.run_stream(task="我们来聊聊人工智能。你先提个问题吧。"))if __name__ == "__main__":    asyncio.run(main())
  • 预期看到:两个 agent 你来我往聊了几轮。
  • AutoGen 的核心思想:多个 agent 各自有角色,对话式协作。
  • 三个坑:① 装 autogen-agentchat 不是 pyautogen;② agent name 不能用中文;③ 非 OpenAI 模型要传 model_info。

过关:双 agent 对话跑通 = Section 1 完成。


Section 2 · AutoGen:规划者 + 执行者分工

Subsection 1 · 跑三角色协作 新建 autogen_team.py:让"规划者"拆任务,"程序员"实现,"评论者"验收:

python
import osimport asynciofrom dotenv import load_dotenvfrom autogen_agentchat.agents import AssistantAgentfrom autogen_agentchat.teams import RoundRobinGroupChatfrom autogen_agentchat.ui import Consolefrom autogen_ext.models.openai import OpenAIChatCompletionClientload_dotenv()model_client = OpenAIChatCompletionClient(    model="deepseek-chat",    api_key=os.getenv("DEEPSEEK_API_KEY"),    base_url="https://api.deepseek.com",    model_info={"vision": False, "function_calling": True, "json_output": True, "structured_output": True, "family": "unknown"},)planner = AssistantAgent(name="planner", model_client=model_client, system_message="你负责把任务拆成步骤,输出计划后结束。")coder = AssistantAgent(name="coder", model_client=model_client, system_message="你是Python工程师,负责写代码。")critic = AssistantAgent(name="critic", model_client=model_client, system_message="你审查代码,指出问题后结束。")team = RoundRobinGroupChat([planner, coder, critic], max_turns=3)async def main():    await Console(team.run_stream(task="写一个Python函数:输入数字n,返回1到n的和。"))if __name__ == "__main__":    asyncio.run(main())
  • 预期看到:规划→写码→(评论)的多角色流转。
  • 多 Agent 价值:专业分工 + 互相检查,比单个 agent 稳。
  • RoundRobinGroupChat 按列表顺序轮流发言;如果需要更智能的路由(比如根据内容决定下一个谁说话),用 SelectorGroupChat。

过关:多角色跑通 = Section 2 完成。


Section 3 · MetaGPT:模拟软件公司

Subsection 1 · 部署 MetaGPT

  • 打开 https://github.com/geekan/MetaGPT ,按 README 安装:pip install metagpt
  • 配置 Key:在 config/config2.yaml 里把 api_key 改成你的 DeepSeek Key,model 改 deepseek-chat。
  • 跑:metagpt "写一个贪吃蛇小游戏"(国内网络可能较慢/需代理,跑不动就看 README 截图写笔记)。
  • 预期看到:自动产出需求文档 + 代码 + 测试。
  • 这是"Agent 模拟一个团队"的极致演示。

过关:跑通或写出笔记 = Section 3 完成。


Section 4 · LangGraph 进阶:节点/边/条件边

Subsection 1 · 跑条件分支 新建 lg_branch.py:

python
from typing import TypedDict, Literalfrom langgraph.graph import StateGraph, ENDclass State(TypedDict):    value: int    result: strdef check(state: State):    v = state["value"]    return {"result": "大" if v > 10 else "小"}# 根据条件走不同边def route(state: State) -> Literal["big", "small"]:    return "big" if state["value"] > 10 else "small"def big(state: State):    return {"result": state["result"] + "于10"}def small(state: State):    return {"result": state["result"] + "于等于10"}g = StateGraph(State)g.add_node("check", check)g.add_node("big", big)g.add_node("small", small)g.set_entry_point("check")g.add_conditional_edges("check", route, {"big": "big", "small": "small"})g.add_edge("big", END)g.add_edge("small", END)app = g.compile()print(app.invoke({"value": 15}))   # result: 大于10print(app.invoke({"value": 3}))    # result: 小于等于10
  • 预期看到:{'value': 15, 'result': '大于10'} 和 {'value': 3, 'result': '小于等于10'}。
  • 条件边 = Agent 的"决策":根据状态走不同分支。这是 Agent 大脑的骨架。

过关:条件分支跑通 = Section 4 完成。


Section 5 · LangGraph + 工具(真正可控的 Agent)

Subsection 1 · 跑图里调工具 新建 lg_agent.py:

python
from typing import TypedDictfrom langgraph.graph import StateGraph, ENDfrom langchain_openai import ChatOpenAIfrom langchain_core.tools import toolfrom langchain_core.messages import HumanMessageimport osfrom dotenv import load_dotenvload_dotenv()llm = ChatOpenAI(model="deepseek-chat", api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")@tooldef add(a: float, b: float) -> float:    """相加"""    return a + btools = [add]llm_with_tools = llm.bind_tools(tools)class State(TypedDict):    messages: listdef agent_node(state):    resp = llm_with_tools.invoke(state["messages"])    return {"messages": state["messages"] + [resp]}def tools_node(state):    last = state["messages"][-1]    results = []    for call in last.tool_calls:        if call["name"] == "add":            results.append({"role": "tool", "content": str(add.invoke(call["args"])), "tool_call_id": call["id"]})    return {"messages": state["messages"] + results}def should_continue(state):    last = state["messages"][-1]    return "tools" if getattr(last, "tool_calls", None) else ENDg = StateGraph(State)g.add_node("agent", agent_node)g.add_node("tools", tools_node)g.set_entry_point("agent")g.add_conditional_edges("agent", should_continue, {"tools": "tools", END: END})g.add_edge("tools", "agent")app = g.compile()result = app.invoke({"messages": [HumanMessage("计算 7 加 8 等于多少")]})print("最终回答:", result["messages"][-1].content)
  • 预期看到:模型自动调 add 工具,算出 15。
  • 这就是 LangGraph 版 Agent:节点=动作,条件边=决策,比 AgentExecutor 更可控(能加中断、记忆、人工确认)。

过关:LangGraph 调工具跑通 = Section 5 完成。


Section 6 · LangGraph 记忆(跨轮保存状态)

Subsection 1 · 加 MemorySaver 在 Section 5 代码基础上:

python
from langgraph.checkpoint.memory import MemorySavermemory = MemorySaver()app = g.compile(checkpointer=memory)# 用 thread_id 区分不同会话config = {"configurable": {"thread_id": "1"}}app.invoke({"messages": [HumanMessage("我叫小明")]}, config)r = app.invoke({"messages": [HumanMessage("我叫什么名字?")]}, config)print(r["messages"][-1].content)   # 记得"小明"
  • 预期看到:第二个问题记得上一轮内容。
  • thread_id = 会话 ID,不同用户/不同会话互不干扰。这是产品级 Agent 的记忆方案。

过关:跨轮记忆跑通 = Section 6 完成。


Section 7 · GPTs(不写代码做 Agent)

Subsection 1 · 创建一个 GPT

  • 打开 https://chatgpt.com/gpts (需要 ChatGPT 账号,没有就注册)
  • 点"Create a GPT"→ 在对话里用自然语言描述你的 Agent(如"你是我的周报助手")→ 加 Instructions + Knowledge(上传资料)→ 发布
  • 预期看到:一个能对话、能用你资料回答的 GPT。
  • GPTs = 不写代码,用"配置"做 Agent。适合快速原型。

过关:创建并发布一个 GPT = Section 7 完成。


Section 8 · Assistants API(GPTs 的编程版)

Subsection 1 · 概念

Assistants API 核心概念:  Assistant  一个"助手"配置(指令+模型+工具)  Thread     一段会话的"线程"(装消息)  Message    一条消息(用户/助手)  Run        让助手跑一次(可异步)
  • 对比 GPTs:GPTs 是网页配置版,Assistants API 是代码版。我们用 LangChain/OpenAI SDK 就能调。

过关:能说出 Thread / Message / Run 各是什么 = Section 8 完成。


Section 9 · Coze 扣子:人设 + 插件

Subsection 1 · 注册 Coze

Subsection 2 · 搭第一个机器人

  • 点"创建 Bot"→ 填写:名字(如"我的学习助手")、人设与回复逻辑(写"你是一个……")
  • 在"插件"里点"添加插件",加一个"联网搜索"或"天气查询"插件
  • 点右上角"预览/调试",问它问题
  • 预期看到:机器人按人设回答,还能用插件查实时信息。
  • Coze 是字节的零代码 Agent 平台:人设 + 插件 + 工作流 + 知识库 四件套。

过关:Bot 创建并带插件跑通 = Section 9 完成。


Section 10 · Coze 工作流

Subsection 1 · 搭一个工作流

  • 在 Coze 的 Bot 编辑页,左侧切到"工作流"→ 新建
  • 拖三个节点串起来:开始 → LLM(让模型写文案)→ 结束(输出)
  • 保存,在预览里调用这个工作流
  • 预期看到:一句话输入 → 经过模型 → 输出文案。
  • 工作流 = 把多个步骤可视化编排(类似 LangGraph 的图形界面版)。

过关:工作流跑通 = Section 10 完成。


Section 11 · Coze 知识库 / 记忆 / 发布

Subsection 1 · 加知识库

  • 在 Bot 编辑页 → 知识库 → 新建 → 上传你的 company.md → 关联到 Bot
  • 问它资料里的问题
  • 预期看到:能回答你的私有资料。

Subsection 2 · 记忆 + 发布

  • 打开"记忆"(数据库/变量),添加一个"用户偏好"变量
  • 点"发布",选一个渠道(如"网页/小程序"),生成访问链接
  • 预期看到:发布成功,得到一个能分享的链接。
  • 到这里,你已经用零代码做出了一个带知识库、记忆、可发布的产品——这就是 Agent IDE 的意义。

过关:知识库 + 发布完成 = Section 11 完成。


Section 12 · Dify 部署(开源编排平台)

Subsection 1 · 装 Docker Desktop

Subsection 2 · 一键部署 Dify

过关:Dify 跑起来或写出原因 = Section 12 完成。


Section 13 · Dify 搭知识库问答应用

Subsection 1 · 在 Dify 里建应用

  • Dify 首页 → “创建空白应用” → 选"聊天助手"
  • 左侧"编排"页:添加"知识库"节点 → 上传 company.md → 模型选 DeepSeek(在设置里配 API Key)
  • 右侧预览窗口问它"迟到怎么处理"
  • 预期看到:Dify 里的知识库问答跑通。
  • 对比Part 5 手写 RAG:Dify 把检索/编排全可视化,几分钟搭完。

过关:Dify 知识库问答跑通 = Section 13 完成。


Section 14 · 三大 Agent 平台对比

Subsection 1 · 写对比笔记 在备忘录做一张表:

          GPTs         Coze        Dify定位      闭源网页版    字节零代码    开源自部署知识库                          工作流    简单          强          强私有化               (云)       (自部署)适合      快速原型      国内快速产品  要源码/私有化
  • 结论:先 Coze 快速验证,要私有化/深度定制再上 Dify;GPTs 适合海外场景。

过关:对比笔记写完 = Section 14 完成。


Section 15 · 站 9 验收

勾选

  • AutoGen 双/多角色协作跑通
  • MetaGPT 跑通或笔记完成
  • LangGraph 条件边 + 工具 + 记忆跑通(Section 4~6)
  • 创建并发布一个 GPTs
  • 能说出 Assistants API 核心概念
  • Coze:人设+插件+工作流+知识库+发布 全部走通
  • Dify 部署 + 知识库问答走通
  • 三平台对比笔记完成

写 300 字Part 9 总结:多 Agent 和 Agent IDE 各解决什么问题,你更喜欢哪个平台。

全勾选 = Part 11 通过 → 进入下一站 Part 12 · LlamaIndex,5 天)。