Skip to content

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

关键技巧:

  1. 网页级 - Structured Output(Summary Schema)
  2. 研究级 - 末尾添加 Human Message 重申主题
  3. 输出管理 - 设置 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 None

2. 评估驱动开发

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 tokens50k tokens(隔离压缩)
成本$1.50$0.90(并行 + 压缩)

压缩 vs 无压缩

指标无压缩两层压缩
上下文大小150k tokens1.5k tokens
后续处理成本$3.00$0.03
质量信息过载精炼聚焦

🚀 生产部署检查清单

1. 性能优化

  • [ ] 使用 GPT-4.1 进行压缩(快速)
  • [ ] 使用 Claude Sonnet 4 进行深度推理
  • [ ] 实现搜索结果缓存
  • [ ] 配置合理的并发限制

2. 可靠性

  • [ ] 使用 PostgresSaver 持久化
  • [ ] 实现错误处理和降级策略
  • [ ] 配置超时和重试机制
  • [ ] 添加日志和监控

3. 安全性

  • [ ] 限制 MCP 文件系统访问范围
  • [ ] 验证远程 MCP 服务器凭据
  • [ ] 实现速率限制
  • [ ] 过滤敏感信息

4. 可维护性

  • [ ] 模块化代码组织
  • [ ] 完整的单元测试
  • [ ] 端到端集成测试
  • [ ] 文档和使用示例

🎯 下一步学习

进阶主题

  1. 自定义 MCP Server

    • 为特定领域创建专用工具
    • 集成私有数据源
  2. 高级评估

    • 设计领域特定的评估指标
    • 实现 A/B 测试框架
  3. 多模态研究

    • 集成图像分析工具
    • 处理 PDF、表格等
  4. 实时研究

    • WebSocket 流式输出
    • 实时进度反馈

实战项目建议

  1. 学术文献研究助手

    • 集成 arXiv、PubMed API
    • 自动引用管理
  2. 市场调研平台

    • 整合财务数据、新闻API
    • 竞争对手分析
  3. 法律案例研究工具

    • 搜索判例、法规
    • 生成法律意见书

📚 推荐资源

官方文档

技术博客

实践案例


🎉 总结

完成 Module 9,你已经掌握了:

技术能力:

  • ✅ 构建完整的 Deep Research 系统
  • ✅ 实现 Context Engineering 压缩策略
  • ✅ 集成 MCP 扩展工具能力
  • ✅ 使用 Supervisor Pattern 协调多 Agent
  • ✅ 应用 Prompt Engineering 最佳实践

设计思维:

  • ✅ 模块化和可组合性
  • ✅ 评估驱动的迭代开发
  • ✅ 从失败中学习和优化
  • ✅ 平衡自动化和控制

核心价值:

Deep Research 系统将 LLM 从"问答工具"升级为"研究助手",实现了:

单次查询 → 多轮迭代
表层信息 → 深度洞察
孤立回答 → 系统性研究
不可控 → 可审计、可验证

🎯 你现在具备了构建生产级 AI 研究系统的完整能力!

继续实践、迭代和创新,将这些技术应用到实际项目中,创造真正的价值!


恭喜完成 Module 9! 🎊

现在你已经掌握了 LangGraph 最强大的应用模式之一。继续探索更多可能性,构建属于你自己的 AI 系统!

基于 MIT 许可证发布。内容版权归作者所有。