275 lines
7.4 KiB
Markdown
275 lines
7.4 KiB
Markdown
# 智扫通智能机器人客服
|
||
|
||
> 基于 LangChain + RAG + Agent 的智能问答系统,专注于扫地机器人和扫拖一体机器人的专业客服
|
||
|
||
## 项目简介
|
||
|
||
智扫通是一个基于大语言模型的智能客服系统,利用 LangChain 的 Agent 框架和 RAG (检索增强生成) 技术,为用户提供专业、准确的扫地机器人相关问答服务。
|
||
|
||
### 核心功能
|
||
- **智能问答**:基于 ReAct 框架的 Agent 自主工具调用
|
||
- **专业知识库**:通过 RAG 从向量库检索专业资料
|
||
- **个性化服务**:支持生成用户使用报告
|
||
- **多轮对话**:保持会话上下文,提供连贯回答
|
||
- **流式输出**:实时显示思考过程和回答内容
|
||
|
||
## 技术栈
|
||
|
||
| 类别 | 技术/框架 | 版本 |
|
||
|------|----------|------|
|
||
| 前端 | Streamlit | 最新 |
|
||
| AI 框架 | LangChain | >= 0.3.0 |
|
||
| 大语言模型 | 通义千问 (qwen3-max) | - |
|
||
| 向量数据库 | Chroma | 最新 |
|
||
| Embedding | DashScope (text-embedding-v4) | - |
|
||
| 配置管理 | YAML | - |
|
||
| 语言 | Python | 3.9+ |
|
||
|
||
## 安装指南
|
||
|
||
### 1. 环境要求
|
||
- Python 3.9 或更高版本
|
||
- 已配置阿里云 DashScope API 密钥
|
||
|
||
### 2. 安装依赖
|
||
|
||
```bash
|
||
# 克隆项目
|
||
git clone https://github.zhang-heng.com/czzhangheng/agent_proj
|
||
cd agent_proj
|
||
|
||
# 安装依赖
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 3. 配置环境变量
|
||
|
||
在项目根目录创建 `.env` 文件,添加以下内容:
|
||
|
||
```bash
|
||
# DashScope API 密钥
|
||
DASHSCOPE_API_KEY=your_api_key_here
|
||
```
|
||
|
||
### 4. 知识库初始化
|
||
|
||
首次运行前需要初始化知识库:
|
||
|
||
```bash
|
||
# 加载知识库到向量库
|
||
python -m rag.vector_store
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 启动 Web 应用
|
||
|
||
```bash
|
||
# 启动 Streamlit 应用
|
||
streamlit run app.py
|
||
```
|
||
|
||
### 2. 访问界面
|
||
|
||
打开浏览器访问:`http://localhost:8501`
|
||
|
||
### 3. 开始对话
|
||
|
||
在聊天输入框中输入问题,例如:
|
||
- "扫地机器人如何保养?"
|
||
- "推荐适合小户型的扫地机器人"
|
||
- "生成我的使用报告"
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
agent_proj/
|
||
├── agent/ # Agent 核心模块
|
||
│ ├── tools/ # 工具定义和中间件
|
||
│ └── react_agent.py # ReAct Agent 封装
|
||
│
|
||
├── config/ # 配置文件
|
||
│ ├── agent.yaml # Agent 配置
|
||
│ ├── chroma.yaml # 向量库配置
|
||
│ ├── prompts.yaml # Prompt 路径配置
|
||
│ └── rag.yaml # RAG 模型配置
|
||
│
|
||
├── data/ # 知识库和外部数据
|
||
│ ├── external/ # 外部数据 (CSV)
|
||
│ └── 知识库文件 (pdf/txt) # 专业资料
|
||
│
|
||
├── docs/ # 项目文档
|
||
│
|
||
├── model/ # 模型工厂
|
||
│ └── factory.py # LLM/Embedding 模型创建
|
||
│
|
||
├── prompts/ # Prompt 模板
|
||
│ ├── main_prompt.txt # 主系统 Prompt
|
||
│ ├── rag_summarize.txt # RAG 总结 Prompt
|
||
│ └── report_prompt.txt # 报告生成 Prompt
|
||
│
|
||
├── rag/ # RAG 服务
|
||
│ ├── rag_service.py # RAG 总结服务
|
||
│ └── vector_store.py # 向量存储服务
|
||
│
|
||
├── utils/ # 工具模块
|
||
│ ├── config_handler.py # 配置加载
|
||
│ ├── file_handler.py # 文件处理
|
||
│ ├── logger_handler.py # 日志管理
|
||
│ ├── path_tool.py # 路径工具
|
||
│ └── prompt_loader.py # Prompt 加载
|
||
│
|
||
├── chroma_db/ # Chroma 向量数据库
|
||
├── logs/ # 日志目录
|
||
├── app.py # Streamlit 主应用
|
||
├── requirements.txt # 依赖列表
|
||
└── README.md # 项目说明
|
||
```
|
||
|
||
## 核心模块
|
||
|
||
### Agent 模块
|
||
- **ReactAgent**:封装 LangChain Agent,实现 ReAct 思考框架
|
||
- **工具系统**:支持 7 种工具,包括 RAG 检索、天气查询、用户信息获取等
|
||
- **中间件**:监控工具调用、动态提示词切换、日志记录
|
||
|
||
### RAG 模块
|
||
- **向量存储**:基于 Chroma 实现知识向量存储
|
||
- **文档加载**:支持 PDF 和 TXT 文件
|
||
- **文本分片**:使用 RecursiveCharacterTextSplitter 进行智能分片
|
||
- **相似度检索**:基于余弦相似度的 Top-K 检索
|
||
|
||
### 模型管理
|
||
- **模型工厂**:统一管理 LLM 和 Embedding 模型
|
||
- **动态配置**:通过 YAML 配置文件管理模型参数
|
||
|
||
## 配置说明
|
||
|
||
### 1. RAG 配置 (`config/rag.yaml`)
|
||
|
||
```yaml
|
||
# 大语言模型
|
||
chat_model_name: "qwen3-max"
|
||
|
||
# Embedding 模型
|
||
embeddings_model_name: "text-embedding-v4"
|
||
```
|
||
|
||
### 2. 向量库配置 (`config/chroma.yaml`)
|
||
|
||
```yaml
|
||
# 集合名称
|
||
collection_name: "agent"
|
||
|
||
# 持久化目录
|
||
persist_directory: "chroma_db"
|
||
|
||
# 检索 Top-K
|
||
k: 3
|
||
|
||
# 数据目录
|
||
data_path: "data"
|
||
|
||
# 分片配置
|
||
chunk_size: 200
|
||
chunk_overlap: 20
|
||
separators: ["\n\n", "\n", ".", "!", "?", "。", "?", "!", " "]
|
||
```
|
||
|
||
### 3. Agent 配置 (`config/agent.yaml`)
|
||
|
||
```yaml
|
||
# 外部数据路径
|
||
external_data_path: "data/external/records.csv"
|
||
```
|
||
|
||
### 4. Prompt 配置 (`config/prompts.yaml`)
|
||
|
||
```yaml
|
||
# 主 Prompt 路径
|
||
main_prompt_path: "prompts/main_prompt.txt"
|
||
|
||
# RAG 总结 Prompt 路径
|
||
rag_summarize_prompt_path: "prompts/rag_summarize.txt"
|
||
|
||
# 报告 Prompt 路径
|
||
report_prompt_path: "prompts/report_prompt.txt"
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
### 1. 基本问答
|
||
|
||
**用户**:"扫地机器人如何处理毛发?"
|
||
|
||
**系统**:
|
||
```
|
||
我需要从知识库中检索关于扫地机器人处理毛发的专业信息,以便给出准确的回答。
|
||
|
||
[参考资料]: 扫地机器人在处理毛发时,应定期清理滚刷和边刷,建议每使用2-3次清理一次。对于宠物家庭,建议每天清理。部分高端机型配备防缠绕设计,可有效减少毛发缠绕问题。 | 参考源: {'source': 'data/维护保养.txt'}
|
||
|
||
扫地机器人处理毛发的建议:
|
||
1. 定期清理滚刷和边刷,每使用2-3次清理一次
|
||
2. 宠物家庭建议每天清理
|
||
3. 选择配备防缠绕设计的高端机型
|
||
4. 定期检查过滤网,避免毛发堵塞
|
||
```
|
||
|
||
### 2. 个性化报告
|
||
|
||
**用户**:"生成我的使用报告"
|
||
|
||
**系统**:
|
||
```
|
||
我需要为用户生成使用报告,首先获取用户ID,然后获取当前月份,再调用报告上下文工具,最后获取用户的使用数据。
|
||
|
||
[工具调用] get_user_id
|
||
用户ID:1005
|
||
|
||
[工具调用] get_current_month
|
||
当前月份:2025-06
|
||
|
||
[工具调用] fill_context_for_report
|
||
fill_context_for_report已调用
|
||
|
||
[工具调用] fetch_external_data
|
||
用户1005在2025-06的使用数据:{'特征': '高效模式使用频繁', '效率': '平均清洁时间30分钟', '耗材': '滚刷损耗正常', '对比': '比上月提升15%'}
|
||
|
||
根据您的使用数据,以下是您的6月使用报告:
|
||
|
||
**使用特征**:高效模式使用频繁
|
||
**清洁效率**:平均清洁时间30分钟
|
||
**耗材状态**:滚刷损耗正常
|
||
**性能对比**:比上月提升15%
|
||
|
||
建议:继续保持良好的使用习惯,可考虑定期深度清洁机器内部。
|
||
```
|
||
|
||
## 常见问题
|
||
|
||
### Q1: 如何添加新的知识库文件?
|
||
|
||
1. 将 PDF 或 TXT 文件放入 `data/` 目录
|
||
2. 重新运行知识库初始化命令:
|
||
```bash
|
||
python -m rag.vector_store
|
||
```
|
||
|
||
### Q2: 如何修改 Agent 的工具?
|
||
|
||
编辑 `agent/tools/agent_tools.py` 文件,添加或修改工具定义。
|
||
|
||
### Q3: 如何调整 RAG 检索效果?
|
||
|
||
修改 `config/chroma.yaml` 中的配置:
|
||
- `chunk_size`:调整文本分片大小
|
||
- `k`:调整检索的文档数量
|
||
- `separators`:调整文本分割策略
|
||
|
||
### Q4: 如何查看系统日志?
|
||
|
||
日志文件位于 `logs/` 目录,按日期命名。
|
||
|
||
|
||
|