deepagents学习打卡day04

个人主页:https://github.com/zbhgis/

打卡记录

deepagents输出

bash 复制代码
============================================================
最终回答
============================================================


# LangGraph / CrewAI / AutoGen 定位差异调研

## 一句话概括(核心答案)

| 框架 | 最适合场景(一句话) |
|---|---|
| **LangGraph** | **需要精细控制、可持久化、可回放、含循环/分支/人工审批的长时生产级状态机型 Agent 工作流**(如客服工单、内容审核、企业审批链路)。 |
| **CrewAI** | **任务天然可拆成"角色分工"、追求快速搭建、类团队协作的中小型多智能体应用**(如市场调研+分析+写稿、内容营销流水线)。 |
| **AutoGen** | **通过多智能体"对话/群聊"来探索式求解问题、需要大量代码生成与执行、研究原型或人机协同调试的场景**(如编程助手、科研原型、Magentic-One 这类开放式 Agent 团队)。 |

---

## 差异要点对照

**1. LangGraph ------ "图 + 状态机"的低层编排引擎**
- 定位:LangChain 生态下的**低层编排框架与运行时**,把 LLM 应用建模成**有向状态图**(节点=步骤、边=跳转)。
- 关键能力:类型化共享状态、条件边、循环、持久化 checkpoint、`interrupt_before` 人工打断/恢复、流式输出。
- 优势:控制力最强、生产成熟度最高、Token 效率好;Klarna、Uber、J.P. Morgan 在用。
- 代价:学习曲线最陡,需要事先设计好 State Schema。
- 适合:需要**确定性、可审计、可回放**的企业级 Agent 生产系统。

**2. CrewAI ------ "角色 + 团队"的高层抽象**
- 定位:由 João Moura 创建的**独立开源框架**,围绕 `Agent / Crew / Task` 三个核心对象,让不同"角色"(研究员、分析师、写手...)像人类团队一样协作。
- 关键能力:角色人设、任务委派、Crew 级资源共享、易上手。
- 优势:上手最快、抽象直观,适合"任务可自然拆成角色"的业务(研究、分析、报告、编码)。
- 代价:控制粒度较弱,复杂日志/调试体验一般,长期企业承诺的框架风险相对更高。
- 适合:**中小规模、快速交付、角色分工清晰**的多 Agent 业务应用。

**3. AutoGen ------ "对话驱动"的多智能体框架**
- 定位:微软研究院发起的**多智能体对话框架**,把任务视为多个可对话 Agent(LLM/工具/人类)之间的自动聊天,拓扑可根据对话动态调整。
- 关键能力:GroupChat、动态/静态会话拓扑、强代码生成与执行、human-in-the-loop。
- 优势:编程式代码执行能力最强,适合探索型、开放式问题;衍生出 Magentic-One 等 Agent 团队。
- 代价:Token 开销最大、代码可读性随规模下降;⚠️ **2026 年起已进入维护模式**,微软官方已推出合并了 AutoGen 与 Semantic Kernel 的 **Microsoft Agent Framework** 作为继任者。
- 适合:**研究原型、需要多方 Agent 自由对话协商**、以及代码密集型的探索式求解。

---

## 选型速查

- 学习曲线:CrewAI(最易)> AutoGen(中)> LangGraph(最陡)
- 控制力:LangGraph > AutoGen > CrewAI
- 生产成熟度:LangGraph > CrewAI > AutoGen
- 代码执行:**AutoGen 最强**
- 常见混搭:CrewAI 做研究/合成阶段,LangGraph 做审批/执行阶段;AutoGen 做生成/迭代阶段,LangGraph 做落地阶段。
- 若新项目:优先 LangGraph 或 Microsoft Agent Framework;仅在任务天然角色化、且追求速度时才用 CrewAI;AutoGen 新项目建议直接看 Microsoft Agent Framework。
✅ Agent 发起了 write_todos 工具调用
✅ 找到 write_todos 调用: Updated todo list to [{'content': '调研 LangGraph 的定位、特性、适用场景', 'status': 'in_progress'}, {'content': '调研 CrewAI 的定位、特性、适用场景', 'status': 'pending'}, {'content': '调研 AutoGen 的定位、特性、适用场景', 'status': 'pending'}, {'content': '对比三者差异,给出各自最适合场景的一句话概括', 'status': 'pending'}]
✅ Agent 发起了 write_todos 工具调用
✅ 找到 write_todos 调用: Updated todo list to [{'content': '调研 LangGraph 的定位、特性、适用场景', 'status': 'completed'}, {'content': '调研 CrewAI 的定位、特性、适用场景', 'status': 'completed'}, {'content': '调研 AutoGen 的定位、特性、适用场景', 'status': 'completed'}, {'content': '对比三者差异,给出各自最适合场景的一句话概括', 'status': 'completed'}]

langsmith记录

完整代码

python 复制代码
"""
一个使用 todo 机制拆解复杂任务的小型研究 Agent。
核心:显式启用 TodoListMiddleware,让 Agent 获得 write_todos 工具。
"""

import os
from typing import Literal

from dotenv import load_dotenv
from tavily import TavilyClient
from langchain_openai import ChatOpenAI
from langchain.agents.middleware import TodoListMiddleware
from deepagents import create_deep_agent
from deepagents.backends import StateBackend

# 1.模型
load_dotenv()
model = ChatOpenAI(
    model=os.environ.get("LLM_MODEL_NAME"),
    api_key=os.environ.get("LLM_API_KEY"),
    base_url=os.environ.get("LLM_BASE_URL"),
)


# 2.搜索工具
tavily = TavilyClient(api_key=os.environ.get("TAVILY_API_KEY"))


def internet_search(query: str, max_results: int = 5) -> dict:
    """Search the web for the given query."""
    return tavily.search(query, max_results=max_results)


# 3.系统提示词
SYSTEM_PROMPT = """你是一位技术研究员。
面对复杂研究任务时,请先使用 write_todos 制定研究计划,然后逐步执行。
每完成一步,及时更新任务状态。最终给出完整回答。
"""

# 4.创建带todo能力的Agent
agent = create_deep_agent(
    model=model,
    tools=[internet_search],
    system_prompt=SYSTEM_PROMPT,
    backend=StateBackend(),  # 内存文件系统,简化演示
    middleware=[TodoListMiddleware()],  # 关键:显式启用任务规划
)


# 5.执行一个需要多步骤的研究任务
query = (
    "调研 LangGraph、CrewAI 和 AutoGen 三个 Agent 框架的定位差异,"
    "分别用一句话概括它们各自最适合的场景。"
)

result = agent.invoke({"messages": [{"role": "user", "content": query}]})

# 6.输出最终回答
print("\n" + "=" * 60)
print("最终回答")
print("=" * 60)
print(result["messages"][-1].content)


# 7.打印所有消息,查找 ToolMessage
for msg in result["messages"]:
    if hasattr(msg, 'name') and msg.name == 'write_todos':
        print("✅ 找到 write_todos 调用:", msg.content)
    elif hasattr(msg, 'tool_calls'):
        for tc in msg.tool_calls:
            if tc['name'] == 'write_todos':
                print("✅ Agent 发起了 write_todos 工具调用")

踩坑记录

1.有的时候模型不会调用write_todos工具,有的话能够明确在langsmith中找到trace记录;

2.如果没有的话,多运行几次或者加强提示词。

关键内容

1.写入代办:write_todos工具,本质上是启用 TodoListMiddleware 后,任务以 pending、in_progress、completed 三种状态保存在 Agent State 中

2.上下文压缩:启用SummarizationMiddleware

3.create_deep_agent()的配置

4.不同配置的作用

参考教程

第4章

https://datawhalechina.github.io/deepagents-in-action/chapters/ch04-task-planning/

相关推荐
wangruofeng3 小时前
9 款主流 AI Agent CLI 对比:安装、版本查询与升级命令
aigc·agent·ai编程
智码看视界3 小时前
开源大模型前沿:科研智能体——Intern-S2-397B ,本地可跑的科学文献 Agent
科研·agent·intern-s2-397b·书生-s2·科学多模态大模型·apache 2.0
安易算力3 小时前
PUE优化工程实践:从1.5到1.2的制冷架构与气流组织改造路径
网络·python·容器·架构·kubernetes
墨心@3 小时前
实验 2-6 豆包版复现分析:Agent Skills 从论文生成演示文稿
自然语言处理·nlp·agent·智能体·datawhale共学
机械改造鹅3 小时前
拆解 prime-agent 系列——(2)Python runtime 与 kernel
agent
troy1283 小时前
Codex 安全盲区:代码漏洞生成实测
windows·python·ci/cd·pycharm·django·github·fastapi
武子康3 小时前
Codex 后台任务结束了,为什么还不能直接接着用?
人工智能·llm·agent
嵌入式学习菌4 小时前
Workbuddy自动写一个RS485 / LoRa 参数调试工具
python
DeepAgent4 小时前
AI Agent 入门指南(05):Agent 循环——观察、思考、行动
面试·agent