# LangChain Learning [![](https://img.shields.io/badge/version-0.0.11-blue.svg)](https://github.com/your-repo/langchain-learning) [![](https://img.shields.io/badge/python-3.11+-green.svg)](https://www.python.org/) [![](https://img.shields.io/badge/LangChain-v0.3.27-orange.svg)](https://www.langchain.com/) > 基于 LangChain 0.3.27 的学习项目,集成 SiliconFlow & Ollama API ## 功能特性 - **多 LLM 集成**:支持 OpenAI API、SiliconFlow、Ollama 及 LangChain 抽象层 - **MCP 协议支持**:通过 MultiServerMCPClient 连接多个 MCP 服务器 - **Agent 智能体**:基于 LangGraph 的 ReAct Agent 实现自主推理与工具调用 - **RAG 检索增强生成**:基于向量库(FAISS)的文档检索与问答 - **流式响应**:实时流式输出,带来更好的使用体验 - **Prompt 工程**:多种 Prompt 模板构建方式 - **输出解析**:支持 JSON 等格式解析 - **工具调用 (Tool Calling)**:支持 @tool 装饰器和 StructuredTool 定义工具 - **Token 用量追踪**:轻松监控 API 调用消耗 - **内存管理**:实现对话历史持久化(ConversationBufferMemory, SummaryMemory) - **Rich 终端界面**:支持 Markdown 渲染、多行输入等高级交互 - **模型测速工具**:测试模型的首字延迟 (TTFT) 和每秒生成速度 (TPS) ## 快速开始 ### 1. 安装依赖 ```bash uv sync ``` ### 2. 配置环境变量 在项目根目录创建 `.env` 文件: ```env # SiliconFlow SILICONFLOW_API_KEY=your_api_key_here SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1 # Ollama / 本地模型 OLLAMA_BASE_URL=http://localhost:11434/v1 OLLAMA_API_KEY=ollama ``` ### 3. 运行示例 **Hello World 示例** | 示例 | 命令 | 说明 | |------|------|------| | 直接调用 API | `python helloworld/helloworld.py` | 使用 requests 直接调用 SiliconFlow API | | LangChain + ChatOpenAI | `python helloworld/helloworld_langchain_openai.py` | 通过 OpenAI 接口调用 LLM | | LangChain + ChatSiliconFlow | `python helloworld/helloworld_siliconflow.py` | 使用 LangChain SiliconFlow 集成 | | OpenAI 客户端 + SiliconFlow | `python helloworld/openai_siliconflow.py` | OpenAI 客户端兼容 SiliconFlow | **Prompt 示例** | 示例 | 命令 | 说明 | |------|------|------| | PromptTemplate | `python prompt/prompt_demo.py` | 演示 PromptTemplate 模板构建 | | Few-shot Learning | `python prompt/fewshot_demo.py` | 带示例的少样本提示学习 | | 从文件加载 Prompt | `python prompt/promt_from_file.py` | 从 YAML 文件加载提示词模板 | **输出解析示例** | 示例 | 命令 | 说明 | |------|------|------| | JSON 解析器 | `python parser/json_parser_demo.py` | 使用 JsonOutputParser 解析 LLM 输出 | **RAG 示例** | 示例 | 命令 | 说明 | |------|------|------| | 基础 RAG | `python rag/rag_demo.py` | 基于 FAISS 向量库的检索问答系统 | **工具调用示例** | 示例 | 命令 | 说明 | |------|------|------| | 工具定义 | `python tools/tool_definition.py` | 演示 @tool 装饰器和 StructuredTool 定义方式 | | 工具调用 | `python tools/tool_demo.py` | 演示模型如何调用工具并获取结果 | **MCP 示例** | 示例 | 命令 | 说明 | |------|------|------| | MCP 客户端 | `python mcp/mcp_client.py` | 连接 MCP 服务器并获取工具列表 | | Agent + MCP | `python mcp/mcp_client_with_agent.py` | 使用 ReAct Agent 调用 MCP 工具 | | Agent + MCP (简易版) | `python mcp/mcp_client_with_agent_simple.py` | 简化版的 Agent MCP 调用 | **MCP 服务端示例** | 示例 | 命令 | 说明 | |------|------|------| | 天气服务 | `python mcp/get_weather_server.py` | 提供天气查询的 MCP 服务端 | | 数学服务 | `python mcp/math_server.py` | 提供数学计算的 MCP 服务端 | **Token 用量示例** | 示例 | 命令 | 说明 | |------|------|------| | Token 追踪 | `python token/token_demo.py` | 使用 get_openai_callback 追踪 token 消耗 | **内存管理示例** | 示例 | 命令 | 说明 | |------|------|------| | 基础记忆 | `python memory/memory_desc.py` | 演示不同类型的 Memory 对象 | | 带内存聊天 | `python memory/memory_demo.py` | 使用 ConversationBufferMemory 进行多轮对话 | | 无内存聊天 | `python memory/without_memory_demo.py` | 基础 LLM 聊天,无历史上下文 | | Rich 界面聊天 | `python memory/without_memory_demo_rich.py` | 使用 Rich 美化的无内存聊天界面 | **Ollama 示例** | 示例 | 命令 | 说明 | |------|------|------| | Rich 流式聊天 | `python ollama/ollama_rich_chat.py` | 支持 Markdown 渲染、多行输入的流式聊天 | | 模型测速工具 | `python ollama/tps_monitor.py` | 测量模型的 TTFT 和 TPS 性能 | ## 项目结构 ``` langchain-learning/ ├── helloworld/ │ ├── helloworld.py # 直接调用 SiliconFlow API │ ├── helloworld_langchain_openai.py # LangChain + ChatOpenAI │ ├── helloworld_siliconflow.py # LangChain + ChatSiliconFlow │ └── openai_siliconflow.py # OpenAI 客户端 + SiliconFlow ├── prompt/ │ ├── prompt_demo.py # PromptTemplate 模板示例 │ ├── fewshot_demo.py # Few-shot Learning 示例 │ ├── promt_from_file.py # 从文件加载 Prompt │ ├── prompt_from_file.yaml # Prompt YAML 模板文件 │ └── prompt_from_file.json # Prompt JSON 模板文件 ├── parser/ │ └── json_parser_demo.py # JSON 输出解析示例 ├── rag/ │ └── rag_demo.py # RAG 检索增强生成示例 ├── tools/ │ ├── tool_definition.py # 工具定义方式演示 │ └── tool_demo.py # 工具调用完整流程演示 ├── mcp/ │ ├── mcp_client.py # MCP 客户端基础用法 │ ├── mcp_client_with_agent.py # Agent + MCP 工具调用 │ ├── mcp_client_with_agent_simple.py # Agent + MCP 简易版 │ ├── get_weather_server.py # 天气查询 MCP 服务端 │ └── math_server.py # 数学计算 MCP 服务端 ├── token/ │ └── token_demo.py # Token 用量追踪示例 ├── memory/ │ ├── memory_desc.py # 演示 Memory 对象类型 │ ├── memory_demo.py # 带内存的对话链示例 │ ├── with_memory_demo.py # 手动管理内存的聊天示例 │ ├── without_memory_demo.py # 无内存的基础聊天 │ └── without_memory_demo_rich.py # Rich 界面的无内存聊天 ├── ollama/ │ ├── ollama_rich_chat.py # Ollama 流式聊天(Rich 界面) │ └── tps_monitor.py # 模型性能测速工具 ├── main.py # 入口文件 ├── pyproject.toml # 项目配置 └── README.md ``` ## 可用模型 **SiliconFlow** - `deepseek-ai/DeepSeek-R1-0528-Qwen3-8B` - `Qwen/Qwen3.5-4B` - `Qwen/Qwen3-8B` **Ollama (本地)** - `gemma4:26b` - `gemma4:e2b` - `deepseek-v3.1:671b-cloud` ## 技术栈 | 类别 | 技术 | |------|------| | 框架 | LangChain 0.3.27 | | Agent | LangGraph | | LLM 提供商 | SiliconFlow, Ollama | | MCP | langchain-mcp-adapters | | 向量库 | FAISS | | 终端美化 | Rich | | 数据验证 | Pydantic | | 语言 | Python 3.11+ | ## 许可证 MIT License