Module-9 小结和复习
📚 本章回顾
恭喜!你已经完成了 LangGraph 最复杂、最强大的应用场景学习 — Deep Research 深度研究系统。让我们回顾整个学习旅程。
🎯 核心组件回顾
1. Scoping(需求澄清与研究规划)
核心技术:
- ✅ Structured Output - 可靠的 LLM 输出
- ✅ Command 对象 - 灵活的控制流
- ✅ 对话管理 - 避免重复提问
关键代码:
python
class ClarifyWithUser(BaseModel):
need_clarification: bool
question: str
verification: str
def clarify_with_user(state):
response = model.with_structured_output(ClarifyWithUser).invoke(...)
if response.need_clarification:
return Command(goto=END, update={"messages": [AIMessage(response.question)]})
else:
return Command(goto="write_research_brief", update={...})最佳实践:
- 在 Prompt 中明确防止重复提问
- 使用正负示例指导 LLM 输出格式
- 评估简报质量(包含所有标准、无错误假设)
2. Research Agent(研究智能体基础)
核心技术:
- ✅ Agent 循环 - LLM 决策 → 工具执行 → 反思
- ✅ think_tool - 强制反思避免 spin-out
- ✅ Context Engineering - 两层压缩策略
- ✅ Prompt Engineering - 具体启发式规则
关键代码:
python
# Agent 循环
def llm_call(state):
return {"messages": [model_with_tools.invoke(...)]}
def tool_node(state):
tool_calls = state["messages"][-1].tool_calls
results = [tool.invoke(tc["args"]) for tc in tool_calls]
return {"messages": [ToolMessage(...)]}
def should_continue(state):
if state["messages"][-1].tool_calls:
return "tool_node"
return "compress_research"
# 两层压缩
## 第一层:网页摘要
summary = summarize_webpage_content(raw_html) # 20:1 压缩
## 第二层:研究压缩
compressed = compress_research(all_tool_results) # 5:1 压缩
## 总压缩比:100:1最佳实践:
- Hard Limits:2-3 次(简单)/ 5 次(复杂)搜索
- 每次搜索后使用 think_tool 反思
- 压缩时在末尾添加 Human Message 重申主题
- 设置 max_tokens 避免输出截断
3. MCP 集成(工具扩展)
核心技术:
- ✅ MCP 协议 - 标准化工具接口
- ✅ stdio/HTTP Transport - 本地/远程通信
- ✅ 异步执行 - MCP 工具必须异步
- ✅ 动态工具发现 - 运行时查询
关键代码:
python
# stdio Transport(本地)
mcp_config = {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"],
"transport": "stdio"
}
}
# HTTP Transport(远程)
mcp_config = {
"remote_api": {
"url": "https://mcp.example.com/sse",
"transport": "http",
"headers": {"Authorization": "Bearer token"}
}
}
# 异步使用
client = MultiServerMCPClient(mcp_config)
tools = await client.get_tools() # 必须异步
# 工具执行
if tool_name == "think_tool":
result = tool.invoke(args) # 同步
else:
result = await tool.ainvoke(args) # MCP 工具异步最佳实践:
- 懒加载 MCP client(LangGraph Platform 兼容)
- 每次重新获取工具引用(避免失效)
- 限制文件系统访问范围(安全)
- 使用 HTTP transport 连接第三方服务
4. Multi-Agent Supervisor(多智能体协同)
核心技术:
- ✅ Supervisor Pattern - 协调者 + 执行者
- ✅ Context Isolation - 独立上下文避免冲突
- ✅ asyncio.gather - 并行执行
- ✅ 决策启发式 - 智能判断何时并行
关键代码:
python
# Supervisor 决策
async def supervisor(state):
response = await supervisor_model_with_tools.ainvoke([
SystemMessage(content=lead_researcher_prompt), # 包含启发式
...
])
return Command(goto="supervisor_tools", update={...})
# 并行执行
async def supervisor_tools(state):
research_tasks = [
researcher_agent.ainvoke({"researcher_messages": [HumanMessage(topic)]})
for topic in topics
]
results = await asyncio.gather(*research_tasks) # 并行!
return {
"supervisor_messages": [ToolMessage(...)],
"raw_notes": ["\n".join(r["raw_notes"]) for r in results]
}决策启发式:
| 任务类型 | Agent 数量 | 示例 |
|---|---|---|
| 列表/排名 | 1 | "列出 SF 最佳咖啡店" |
| 对比 | N(每个对象一个) | "对比 A vs B vs C" → 3 |
| 多维分析 | N(每个维度一个) | "分析技术/市场/财务" → 3 |
最佳实践:
- 偏向单 Agent(简单任务无需并行)
- 最大并发限制(建议 3)
- 清晰定义子主题(避免重叠)
- 使用 return_exceptions 处理部分失败
5. 完整系统集成
核心技术:
- ✅ 子图集成 - 模块化设计
- ✅ 递归限制配置 - 支持复杂流程
- ✅ 最终报告生成 - 综合所有发现
- ✅ Checkpointer 可选 - 支持中断恢复
关键代码:
python
# 子图集成
deep_researcher_builder = StateGraph(AgentState)
deep_researcher_builder.add_node("clarify_with_user", clarify_with_user)
deep_researcher_builder.add_node("write_research_brief", write_research_brief)
deep_researcher_builder.add_node("supervisor_subgraph", supervisor_agent) # 子图
deep_researcher_builder.add_node("final_report_generation", final_report_generation)
# 线性流程
deep_researcher_builder.add_edge(START, "clarify_with_user")
deep_researcher_builder.add_edge("write_research_brief", "supervisor_subgraph")
deep_researcher_builder.add_edge("supervisor_subgraph", "final_report_generation")
deep_researcher_builder.add_edge("final_report_generation", END)
# 配置递归限制
config = {"configurable": {"thread_id": "1", "recursion_limit": 50}}
result = await agent.ainvoke(input, config=config)最佳实践:
- 模块化测试(单独测试每个组件)
- 递归限制设为 50(复杂任务)
- 使用 PostgresSaver 生产部署
- 添加日志和监控
📊 Context Engineering 完整策略
压缩点 1:网页内容摘要
python
原始网页: 10,000 tokens (包含广告、导航等)
↓ (使用 LLM 摘要)
结构化摘要: 500 tokens (<summary> + <key_excerpts>)
压缩比: 20:1压缩点 2:研究结果压缩
python
多轮搜索结果: 5 次搜索 * 3 网页 * 500 tokens = 7,500 tokens
↓ (使用 LLM 压缩)
核心发现: 1,500 tokens (结构化发现)
压缩比: 5:1总体效果
python
原始数据: 5 * 3 * 10,000 = 150,000 tokens
↓
最终压缩: 1,500 tokens
总压缩比: 100:1关键技巧:
- 网页级 - Structured Output(Summary Schema)
- 研究级 - 末尾添加 Human Message 重申主题
- 输出管理 - 设置 max_tokens=32000 避免截断
💡 Prompt Engineering 完整框架
1. Think Like The Agent
不要告诉 Agent "做研究",而是告诉它:
✅ "像一个时间有限的人类研究员一样思考"
✅ "从宽泛的搜索开始,然后逐步细化"
✅ "每次搜索后暂停评估:我有足够信息了吗?"2. Concrete Heuristics
<Hard Limits>
- Simple queries: 2-3 search calls maximum
- Complex queries: Up to 5 search calls maximum
- Always stop: After 5 searches if you cannot find answers
</Hard Limits>
<Stop Immediately When>:
- You can answer the question comprehensively
- You have 3+ relevant examples/sources
- Your last 2 searches returned similar information
</Stop Immediately When>3. Show Your Thinking
After each search, use think_tool to analyze:
- What key information did I find?
- What's missing?
- Do I have enough to answer comprehensively?
- Should I search more or provide my answer?4. Structured Output
python
# 不依赖字符串解析
response = model.with_structured_output(ClarifyWithUser).invoke(...)
# 类型安全
if response.need_clarification: # 保证是 bool
...🎓 学到的核心原则
1. 模块化设计
python
# ✅ 每个组件独立
scoping = scope_builder.compile() # 可单独使用
supervisor = supervisor_builder.compile() # 可单独使用
full_system = full_builder.compile() # 组合使用
# ✅ 独立测试
scoping_result = scoping.invoke(test_input)
assert scoping_result["research_brief"] is not None2. 评估驱动开发
python
# 为每个组件建立评估
evaluate_scoping() # 简报质量
evaluate_agent_termination() # Agent 停止时机
evaluate_supervisor_parallelism() # 并行决策正确性
# 迭代改进
for i in range(10):
result = run_system(test_case)
score = evaluate(result)
if score < 0.8:
adjust_prompts()3. 渐进式复杂度
Day 1: 单节点(clarify_with_user)
Day 3: 简单循环(Research Agent)
Day 5: 添加压缩(Context Engineering)
Day 7: 多智能体(Supervisor)
Day 10: 完整系统4. 失败驱动学习
常见失败:
- Spin-out → 添加 Hard Limits + think_tool
- 上下文爆炸 → 两层压缩
- 信息混淆 → 多 Agent 上下文隔离
- 输出截断 → 设置 max_tokens
📊 性能对比
单 Agent vs 多 Agent
| 指标 | 单 Agent | 多 Agent (3个) |
|---|---|---|
| 对比任务质量 | 7/10(信息混淆) | 9/10(清晰聚焦) |
| 执行时间 | 90s(串行) | 30s(并行) |
| Token 使用 | 150k tokens | 50k tokens(隔离压缩) |
| 成本 | $1.50 | $0.90(并行 + 压缩) |
压缩 vs 无压缩
| 指标 | 无压缩 | 两层压缩 |
|---|---|---|
| 上下文大小 | 150k tokens | 1.5k tokens |
| 后续处理成本 | $3.00 | $0.03 |
| 质量 | 信息过载 | 精炼聚焦 |
🚀 生产部署检查清单
1. 性能优化
- [ ] 使用 GPT-4.1 进行压缩(快速)
- [ ] 使用 Claude Sonnet 4 进行深度推理
- [ ] 实现搜索结果缓存
- [ ] 配置合理的并发限制
2. 可靠性
- [ ] 使用 PostgresSaver 持久化
- [ ] 实现错误处理和降级策略
- [ ] 配置超时和重试机制
- [ ] 添加日志和监控
3. 安全性
- [ ] 限制 MCP 文件系统访问范围
- [ ] 验证远程 MCP 服务器凭据
- [ ] 实现速率限制
- [ ] 过滤敏感信息
4. 可维护性
- [ ] 模块化代码组织
- [ ] 完整的单元测试
- [ ] 端到端集成测试
- [ ] 文档和使用示例
🎯 下一步学习
进阶主题
自定义 MCP Server
- 为特定领域创建专用工具
- 集成私有数据源
高级评估
- 设计领域特定的评估指标
- 实现 A/B 测试框架
多模态研究
- 集成图像分析工具
- 处理 PDF、表格等
实时研究
- WebSocket 流式输出
- 实时进度反馈
实战项目建议
学术文献研究助手
- 集成 arXiv、PubMed API
- 自动引用管理
市场调研平台
- 整合财务数据、新闻API
- 竞争对手分析
法律案例研究工具
- 搜索判例、法规
- 生成法律意见书
📚 推荐资源
官方文档
技术博客
实践案例
🎉 总结
完成 Module 9,你已经掌握了:
技术能力:
- ✅ 构建完整的 Deep Research 系统
- ✅ 实现 Context Engineering 压缩策略
- ✅ 集成 MCP 扩展工具能力
- ✅ 使用 Supervisor Pattern 协调多 Agent
- ✅ 应用 Prompt Engineering 最佳实践
设计思维:
- ✅ 模块化和可组合性
- ✅ 评估驱动的迭代开发
- ✅ 从失败中学习和优化
- ✅ 平衡自动化和控制
核心价值:
Deep Research 系统将 LLM 从"问答工具"升级为"研究助手",实现了:
单次查询 → 多轮迭代
表层信息 → 深度洞察
孤立回答 → 系统性研究
不可控 → 可审计、可验证🎯 你现在具备了构建生产级 AI 研究系统的完整能力!
继续实践、迭代和创新,将这些技术应用到实际项目中,创造真正的价值!
恭喜完成 Module 9! 🎊
现在你已经掌握了 LangGraph 最强大的应用模式之一。继续探索更多可能性,构建属于你自己的 AI 系统!