251 lines
5.7 KiB
Markdown
251 lines
5.7 KiB
Markdown
# LangChain 聊天机器人项目
|
||
|
||
基于 LangChain、LangGraph 和 Ollama 的智能对话机器人,支持意图分析、订单诊断和自然对话。
|
||
|
||
## 🚀 项目特性
|
||
|
||
- **多种对话模式**: 支持简单对话链和复杂工作流两种模式
|
||
- **意图分析**: 自动识别用户意图,智能路由到相应处理节点
|
||
- **订单诊断**: 专门的订单查询和问题诊断功能
|
||
- **流式输出**: 支持实时流式响应,提升用户体验
|
||
- **FastAPI 接口**: 提供完整的 REST API 接口
|
||
- **命令行工具**: 支持命令行交互模式
|
||
- **监控集成**: 集成 LangSmith 进行对话监控和分析
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
langchain-project/
|
||
├── src/ # 源代码目录
|
||
│ ├── services/ # 服务层
|
||
│ │ ├── ollama_service.py # Ollama 服务封装
|
||
│ │ └── langsmith_service.py # LangSmith 监控服务
|
||
│ ├── models/ # 数据模型
|
||
│ │ └── chat_models.py # 对话相关数据模型
|
||
│ ├── workflows/ # LangGraph 工作流
|
||
│ │ ├── chat_workflow.py # 主工作流
|
||
│ │ └── nodes/ # 工作流节点
|
||
│ │ ├── intent_analysis.py # 意图分析节点
|
||
│ │ ├── order_diagnosis.py # 订单诊断节点
|
||
│ │ └── natural_chat.py # 自然对话节点
|
||
│ └── chains/ # LangChain 对话链
|
||
│ └── simple_chat_chain.py # 简单对话链
|
||
├── data/ # 数据文件
|
||
│ └── mock_orders.json # 模拟订单数据
|
||
├── tests/ # 测试文件
|
||
│ ├── test_ollama.py # Ollama 服务测试
|
||
│ ├── test_simple_chain.py # 简单对话链测试
|
||
│ ├── test_workflow.py # 工作流测试
|
||
│ └── test_api.py # API 接口测试
|
||
├── main.py # FastAPI 主应用
|
||
├── cli_chat.py # 命令行聊天程序
|
||
├── run_tests.py # 测试运行器
|
||
├── requirements.txt # Python 依赖
|
||
├── .env # 环境变量配置
|
||
└── README.md # 项目说明
|
||
```
|
||
|
||
## 🛠️ 安装和配置
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 2. 安装和配置 Ollama
|
||
|
||
```bash
|
||
# 安装 Ollama (Linux/macOS)
|
||
curl -fsSL https://ollama.ai/install.sh | sh
|
||
|
||
# 下载所需模型
|
||
ollama pull deepseek-v3.1:671b-cloud # 聊天模型
|
||
ollama pull qwen3:8b # 路由模型 (轻量级)
|
||
```
|
||
|
||
### 3. 配置环境变量
|
||
|
||
复制 `.env` 文件并根据需要修改配置:
|
||
|
||
```bash
|
||
# Ollama 配置
|
||
OLLAMA_BASE_URL=http://localhost:11434
|
||
CHAT_MODEL=deepseek-v3.1:671b-cloud
|
||
ROUTER_MODEL=qwen3:8b
|
||
|
||
# LangSmith 配置 (可选)
|
||
LANGCHAIN_TRACING_V2=false
|
||
LANGCHAIN_API_KEY=your_langsmith_api_key
|
||
LANGCHAIN_PROJECT=langchain-chatbot
|
||
|
||
# 应用配置
|
||
DEBUG=true
|
||
LOG_LEVEL=INFO
|
||
```
|
||
|
||
## 🚀 运行项目
|
||
|
||
### 1. 启动 FastAPI 服务器
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
服务器将在 `http://localhost:8000` 启动。
|
||
|
||
### 2. 使用命令行聊天
|
||
|
||
```bash
|
||
python cli_chat.py
|
||
```
|
||
|
||
支持的命令:
|
||
|
||
- `/help` - 显示帮助信息
|
||
- `/clear` - 清空对话历史
|
||
- `/history` - 显示对话历史
|
||
- `/mode [workflow|simple]` - 切换对话模式
|
||
- `/status` - 显示系统状态
|
||
- `/quit` - 退出程序
|
||
|
||
### 3. API 接口使用
|
||
|
||
#### 健康检查
|
||
|
||
```bash
|
||
curl http://localhost:8000/health
|
||
```
|
||
|
||
#### 创建会话
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8000/sessions \
|
||
-H "Content-Type: application/json" \
|
||
-d '{}'
|
||
```
|
||
|
||
#### 发送消息 (非流式)
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8000/chat/simple \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"message": "你好",
|
||
"session_id": "your_session_id"
|
||
}'
|
||
```
|
||
|
||
#### 发送消息 (流式)
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8000/chat \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"message": "帮我查询订单 ORD12345",
|
||
"session_id": "your_session_id",
|
||
"stream": true
|
||
}'
|
||
```
|
||
|
||
## 🧪 运行测试
|
||
|
||
### 运行所有测试
|
||
|
||
```bash
|
||
python run_tests.py
|
||
```
|
||
|
||
### 运行单个测试
|
||
|
||
```bash
|
||
# 测试 Ollama 服务
|
||
python tests/test_ollama.py
|
||
|
||
# 测试简单对话链
|
||
python tests/test_simple_chain.py
|
||
|
||
# 测试工作流
|
||
python tests/test_workflow.py
|
||
|
||
# 测试 API 接口 (需要先启动服务器)
|
||
python tests/test_api.py
|
||
```
|
||
|
||
## 📊 API 文档
|
||
|
||
启动服务器后,访问以下地址查看 API 文档:
|
||
|
||
- Swagger UI: `http://localhost:8000/docs`
|
||
- ReDoc: `http://localhost:8000/redoc`
|
||
|
||
## 🔧 主要功能
|
||
|
||
### 1. 意图分析
|
||
|
||
系统会自动分析用户输入,识别以下意图:
|
||
|
||
- `order_inquiry`: 订单查询相关
|
||
- `general_chat`: 一般对话
|
||
- `greeting`: 问候
|
||
- `goodbye`: 告别
|
||
|
||
### 2. 订单诊断
|
||
|
||
当识别到订单相关意图时,系统会:
|
||
|
||
- 提取订单信息(订单号、客户信息等)
|
||
- 查询订单状态
|
||
- 分析可能的问题
|
||
- 提供解决建议
|
||
|
||
### 3. 自然对话
|
||
|
||
处理日常对话,包括:
|
||
|
||
- 问候和告别
|
||
- 一般性问题
|
||
- 闲聊对话
|
||
- 功能介绍
|
||
|
||
### 4. 流式输出
|
||
|
||
支持实时流式响应,包括:
|
||
|
||
- 思考过程展示
|
||
- 逐步分析结果
|
||
- 实时响应生成
|
||
|
||
## 🔍 监控和调试
|
||
|
||
### LangSmith 集成
|
||
|
||
如果配置了 LangSmith,系统会自动记录:
|
||
|
||
- 对话开始和结束
|
||
- 意图分析结果
|
||
- 工作流步骤
|
||
- 模型调用
|
||
- 错误信息
|
||
|
||
### 日志记录
|
||
|
||
系统使用 Python logging 模块记录详细日志,可通过 `LOG_LEVEL` 环境变量控制日志级别。
|
||
|
||
## 🤝 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request!
|
||
|
||
## 📄 许可证
|
||
|
||
MIT License
|
||
|
||
## 📞 支持
|
||
|
||
如有问题,请查看:
|
||
|
||
1. 项目文档
|
||
2. 测试用例
|
||
3. API 文档
|
||
4. 提交 Issue
|