§14 实战:搭一个会写报告的研究助手
先给结论:把前 13 章串起来,你就能搭一个"搜索→存储→委派→出报告"的研究助手。
我用"研究 2025 年 agentic 框架"做例子。这是 DeepAgents 最经典的用法。
完整代码
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
from deepagents.backends import CompositeBackend, StateBackend, StoreBackend
from langgraph.store.memory import InMemoryStore
tavily = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(query: str, max_results: int = 5) -> dict:
"""运行网络搜索。"""
return tavily.search(query, max_results=max_results)
agent = create_deep_agent(
model="anthropic:claude-sonnet-4-6",
tools=[internet_search],
subagents=[
{"name": "data-collector", "description": "收集数据",
"system_prompt": "全面收集数据", "tools": [internet_search]},
{"name": "report-writer", "description": "撰写报告",
"system_prompt": "写专业报告", "tools": []},
],
store=InMemoryStore(),
backend=CompositeBackend(
default=StateBackend(),
routes={"/memories/": StoreBackend(namespace=lambda rt: (rt.server_info.user.identity,))},
),
system_prompt="""你是研究助手。把进度存到 /memories/research/:
- sources.txt 来源列表
- notes.txt 关键发现
- report.md 报告草稿""",
)
四大机制如何配合
| 能力 | 实现 | 组件 |
|---|---|---|
| 任务规划 | 自动拆任务 | write_todos + TodoListMiddleware |
| 上下文管理 | 大结果卸载 | 文件系统 + 自动驱逐(>20k) |
| 专业化 | 上下文隔离 | task + 子代理 |
| 持久记忆 | 混合存储 | CompositeBackend + StoreBackend |
跑它
result = agent.invoke(
{"messages": [{"role": "user",
"content": "研究 2025 年的 agentic 框架,写份报告"}]},
config={"configurable": {"thread_id": "research-001"}},
)
print(result["messages"][-1].content)
标叔的经验:第一次跑这种多子代理流程,我盯着流式输出看。主 Agent 规划完,把"收集"派给 data-collector,把"写"派给 report-writer。主上下文始终干净。那一刻我真正懂了 §08 说的"隔离"是什么感觉。
标叔的结论:研究助手是 DeepAgents 的"hello world 进阶版"。吃透它,你就吃透了框架。
下一章,介绍开箱即用的终端编程代理:dcode。