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:
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:让"规划者"拆任务,"程序员"实现,"评论者"验收:
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:
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:
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 代码基础上:
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
- 打开 https://www.coze.cn 用手机号/抖音登录。
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
- 打开 https://www.docker.com/products/docker-desktop/ 下载安装,装完启动。
- 预期看到:Docker Desktop 正常运行(右下角鲸鱼图标)。
Subsection 2 · 一键部署 Dify
- 打开 https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose ,按文档执行 docker compose 命令。
- 启动后浏览器打开
http://localhost/(或文档指定端口) - 预期看到:Dify 登录页,注册个本地账号进入。
- 网络/资源失败:记录原因,跳到 Section 14 直接做对比笔记,也算完成。
过关: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 天)。
