agent_proj/README.md

275 lines
7.4 KiB
Markdown
Raw Permalink 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 + 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
用户ID1005
[工具调用] 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/` 目录,按日期命名。