langchain-learning/README.md
2026-04-15 20:49:50 +08:00

193 lines
7.4 KiB
Markdown
Raw 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.

# 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