193 lines
7.4 KiB
Markdown
193 lines
7.4 KiB
Markdown
# LangChain Learning
|
||
|
||
[](https://github.com/your-repo/langchain-learning)
|
||
[](https://www.python.org/)
|
||
[](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
|