|
|
||
|---|---|---|
| agent | ||
| config | ||
| data | ||
| docs | ||
| lesson | ||
| logs | ||
| model | ||
| prompts | ||
| rag | ||
| utils | ||
| .gitignore | ||
| README.md | ||
| app.py | ||
| md5.txt | ||
| requirements.txt | ||
README.md
智扫通智能机器人客服
基于 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. 安装依赖
# 克隆项目
git clone https://github.zhang-heng.com/czzhangheng/agent_proj
cd agent_proj
# 安装依赖
pip install -r requirements.txt
3. 配置环境变量
在项目根目录创建 .env 文件,添加以下内容:
# DashScope API 密钥
DASHSCOPE_API_KEY=your_api_key_here
4. 知识库初始化
首次运行前需要初始化知识库:
# 加载知识库到向量库
python -m rag.vector_store
快速开始
1. 启动 Web 应用
# 启动 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)
# 大语言模型
chat_model_name: "qwen3-max"
# Embedding 模型
embeddings_model_name: "text-embedding-v4"
2. 向量库配置 (config/chroma.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)
# 外部数据路径
external_data_path: "data/external/records.csv"
4. Prompt 配置 (config/prompts.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: 如何添加新的知识库文件?
- 将 PDF 或 TXT 文件放入
data/目录 - 重新运行知识库初始化命令:
python -m rag.vector_store
Q2: 如何修改 Agent 的工具?
编辑 agent/tools/agent_tools.py 文件,添加或修改工具定义。
Q3: 如何调整 RAG 检索效果?
修改 config/chroma.yaml 中的配置:
chunk_size:调整文本分片大小k:调整检索的文档数量separators:调整文本分割策略
Q4: 如何查看系统日志?
日志文件位于 logs/ 目录,按日期命名。