## 🧩 模块说明：LangChain Agents 进阶核心组件

📌 **核心知识点**：  
Function Calling｜@tool 工具封装｜ReAct 循环｜Agent 构建｜SQL Agent｜记忆+流式｜开发优化

---

### 1. `s01_define_toolbox.py`（工具函数定义）  
使用 `@tool` 装饰器将 Python 函数封装为 LangChain 可调用的工具。  

✅ 掌握点：  
- 如何用 `@tool` 定义工具  
- 必须添加三引号描述（作为提示词）  
- 支持任意自定义逻辑函数

---

### 2. `s02_general_agent.py`（通用 Agent 构建）  
基于 `create_tool_calling_agent` 创建支持工具调用的智能体。  

✅ 掌握点：  
- ReAct 思维循环：思考 → 行动 → 观察 → 再思考  
- 使用 `MessagesPlaceholder("agent_scratchpad")` 记录推理过程  
- `AgentExecutor` 执行完整流程，支持 `verbose=True` 查看思考链

---

### 3. `s03_sql_agent.py`（SQL 专用 Agent）  
一键构建自然语言查询数据库的智能体。  

✅ 掌握点：  
- 使用 `create_sql_agent` 快速接入 SQLite 数据库  
- 自动分析表结构、生成 SQL 并执行  
- 无需手动定义工具，开箱即用

---

### 4. `s04_memory_general_agent.py`（带记忆的 Agent）  
将 Agent 与对话历史结合，实现多轮上下文感知。  

✅ 掌握点：  
- 在 Prompt 中加入 `MessagesPlaceholder("history")`  
- 使用 `RunnableWithMessageHistory` 包装 AgentExecutor  
- 实现“记住用户身份”、“持续追问”的真实对话体验

---

### 5. `s05_caching.py`（缓存优化技巧）  
在开发调试阶段避免重复调用 LLM，节省成本与时间。  

✅ 掌握点：  
- 使用 `set_llm_cache(InMemoryCache())` 启用缓存  
- 第一次调用远程请求，后续命中缓存秒出结果  
- 开发时开启，上线前关闭（仅用于测试）

---

### 6. `s06_streaming.py`（流式输出实战）  
实现 AI 回复像打字机一样逐字输出，提升用户体验。  

✅ 掌握点：  
- 设置 `streaming=True` 启用流式模式  
- 添加 `callbacks=[StreamingStdOutCallbackHandler()]` 实时打印 token  
- 使用 `print("AI: ", end="", flush=True)` 确保提示立即显示

---

💡 建议：  
跑通所有示例后，尝试将 `get_weather` 和 `query_user_info` 组合进一个带记忆的 Agent，让 AI 能连续问：“你是谁？”、“北京天气怎么样？”、“你喜欢什么颜色？”，并记住你的回答。