Files

103 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧩 模块说明:LangGraph 基础篇 - 从状态机到智能 Agent
> 📌 核心知识点:StateGraph 基础结构|MessagesState 对话状态|ToolNode 工具执行|条件路由|MemorySaver 记忆|System Prompt 无污染注入|LangSmith 追踪
---
### 1. `s01_state_node_edge.py` LangGraph 最小状态机)
演示 LangGraph 最基础的三要素:State(状态)、Node(节点)、Edge(边)。
- ✅ 掌握点:
- 定义 `TypedDict` 作为状态(如 `{"count": int}`)。
- 编写节点函数(`node_a`, `node_b`)处理状态并返回更新。
- 使用 `add_edge(START, "A")``add_edge("A", "B")` 构建线性流程。
- 调用 `app.get_graph().draw_mermaid_png()` 生成可视化流程图。
- 输出:
- 控制台打印状态变化过程。
- 生成 `workflow.png` 流程图。
> 💡 此脚本**不涉及 LLM 或对话**,仅用于理解 LangGraph 底层机制。
---
### 2. `workflow.png` (状态机流程图)
`state_node_edge.py` 自动生成的 Mermaid 可视化图。
- 内容:
- 展示 `START → A → B → END` 的线性执行流。
- 节点 `A``B` 各将 `count` 加 1。
- 作用:
- 直观理解 LangGraph 的“图”本质。
- 为后续复杂控制流(如循环、分支)打下认知基础。
---
### 3. `s02_langsmith_trace.py` (状态机 + LangSmith 追踪)
`1.` 的基础上启用 LangSmith,实现执行过程可视化追踪。
- ✅ 掌握点:
- 设置环境变量:`LANGCHAIN_TRACING_V2=true``LANGCHAIN_PROJECT="my_demo"`
- 无需修改节点逻辑,自动上报每一步状态变更。
- 在 [LangSmith UI](https://smith.langchain.com) 查看执行轨迹。
- 注意:
- 仍是一个**纯状态机示例**(count +1 +1),**非对话 Agent**。
- 用于验证 LangSmith 集成是否生效。
---
### 4. `s03_conditional_router.py` (首个 ReAct Agent:无记忆)
构建第一个真正意义上的 LangGraph Agent:支持工具调用与条件循环。
- ✅ 掌握点:
- 使用 `MessagesState` 管理对话历史。
- 定义 `@tool def get_weather(location)` 并绑定到 LLM。
- 实现 `should_continue` 函数判断是否需调用工具。
- 构建 `agent → (条件) → tools → agent` 的 ReAct 循环。
- 通过 `app.invoke({"messages": [...]})` 触发执行。
- 效果:
- 输入“北京天气如何?” → 调用工具 → 返回天气。
- 输入“你好” → 直接回答,不触发工具。
- 局限:
- **无记忆**:每次 `invoke` 都是独立会话。
---
### 5. `s04_agent_with_memory.py` (完整 Agent:带记忆 + 系统提示)
`4.` 基础上升级为生产级 Agent 范式。
- ✅ 掌握点:
- 启用 `MemorySaver()` 实现跨轮次记忆(`checkpointer=MemorySaver()`)。
- 通过 `config={"configurable": {"thread_id": "user123"}}` 绑定会话。
-`call_model` 中动态注入 `SystemMessage(content=sys_prompt)`,**但不写入 state**,避免污染历史。
- 保留 LangSmith 追踪能力。
- 效果:
- 支持连续对话(如“查北京天气” → “那上海呢?”)。
- 系统指令始终生效,但不会出现在消息历史中。
- 全流程可追踪、可调试。
---
### 🔔 全局注意事项
- **学习路径建议**
`s01.`(理解图) → `s02`(理解追踪) → `s03`(理解 ReAct`s04`(理解记忆+prompt
- 所有 `.py` 文件均依赖 `.env` 中的 `OPENAI_API_KEY``LANGCHAIN_API_KEY`
- 若想复用你的 RAG 工具,只需将 `get_weather` 替换为 `search_war_and_peace`,其余逻辑不变。
- `workflow.png` 仅反映 `state_node_edge.py` 的简单线性流,**不代表 Agent 结构**。
---
### 💡 **建议**
- 尝试扩展 `s04_agent_with_memory.py`,添加更多自定义工具(如RAG检索工具)
- 实验不同的条件路由逻辑,实现更复杂的Agent决策路径
- 使用LangSmith深入分析和优化Agent的推理过程
- 尝试实现多Agent协作系统,通过LangGraph连接多个专业化Agent