9.8 KiB
9.8 KiB
智扫通智能客服项目 - 项目大纲
1. 项目概述
项目名称: 智扫通智能机器人客服
项目类型: 基于 LangChain + RAG + Agent 的智能问答系统
核心功能:
- 提供扫地机器人/扫拖一体机器人的专业智能客服
- 支持 ReAct 思考框架的 Agent 自主工具调用
- 基于向量检索(RAG)的专业知识库问答
- 个性化用户报告生成
目标用户: 扫地机器人用户
2. 技术架构
2.1 技术栈
| 层级 | 技术/框架 | 用途 |
|---|---|---|
| 前端 | Streamlit | Web 交互界面 |
| AI Agent | LangChain + LangGraph | Agent 推理与工具调用 |
| LLM | 通义千问 (qwen3-max) | 大语言模型 |
| 向量数据库 | Chroma | 知识向量存储与检索 |
| Embedding | DashScope (text-embedding-v4) | 文本向量化 |
| 配置管理 | YAML | 配置文件管理 |
2.2 系统架构图
┌─────────────────────────────────────────────────────────┐
│ Streamlit Web UI │
└─────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ ReactAgent (Agent) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ ReAct 思考框架 │ │
│ │ Thought → Action → Observation → ... │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────┼─────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌───────────┐ ┌──────────────┐ │
│ │ RAG工具 │ │ 天气工具 │ │ 用户信息工具 │ │
│ │ rag_summarize│ │ get_weather│ │ get_user_id │ │
│ └──────────────┘ └───────────┘ └──────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Middleware 中间件 │ │
│ │ monitor_tool | log_before_model | prompt_switch│ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────┬───────────────────────────────────┘
│
┌───────────┴───────────┐
▼ ▼
┌─────────────────┐ ┌─────────────────────┐
│ VectorStore │ │ 外部数据源 │
│ (Chroma DB) │ │ (CSV 用户记录) │
└─────────────────┘ └─────────────────────┘
3. 目录结构
agent_proj/
├── agent/ # Agent 核心模块
│ ├── tools/
│ │ ├── agent_tools.py # Agent 工具定义
│ │ └── middleware.py # 中间件实现
│ └── react_agent.py # ReAct Agent 封装
│
├── config/ # 配置文件
│ ├── agent.yaml # Agent 配置
│ ├── chroma.yaml # Chroma 向量库配置
│ ├── prompts.yaml # Prompt 路径配置
│ └── rag.yaml # RAG 模型配置
│
├── data/ # 数据目录
│ ├── external/
│ │ └── records.csv # 用户使用记录
│ └── 知识库文件 (pdf/txt) # RAG 知识库
│
├── 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 主应用
├── 01_Agent.py # Agent 基础示例
├── 02_Stream.py # Stream 流式输出示例
├── 03_ReAct.py # ReAct 框架示例
└── 04_middle_ware.py # 中间件示例
4. 核心模块详解
4.1 Agent 模块 (agent/)
react_agent.py
- 职责: 封装 LangChain Agent,提供流式输出能力
- 核心方法:
excute_stream(query)- 流式执行用户查询
agent_tools.py
- 职责: 定义 Agent 可调用的工具
- 工具列表:
rag_summarize: 向量库检索专业资料get_weather: 查询城市天气get_user_location: 获取用户所在城市get_user_id: 获取用户IDget_current_month: 获取当前月份fetch_external_data: 获取外部用户使用记录fill_context_for_report: 触发报告生成上下文
middleware.py
- 职责: 实现 Agent 中间件
- 中间件列表:
monitor_tool: 工具调用监控log_before_model: 模型调用前日志repoet_prompt_switch: 动态提示词切换
4.2 RAG 模块 (rag/)
vector_store.py
- 职责: 向量存储与检索
- 功能:
- 文档加载 (PDF/TXT)
- 文本分片 (RecursiveCharacterTextSplitter)
- 向量入库 (Chroma)
- 相似度检索 (Retriever)
rag_service.py
- 职责: RAG 总结服务
- 流程: 用户查询 → 向量检索 → Prompt 模板 → LLM 总结 → 返回结果
4.3 模型工厂 (model/factory.py)
- ChatModelFactory: 创建通义千问聊天模型
- EmbeddingsFactory: 创建 DashScope Embedding 模型
4.4 工具模块 (utils/)
| 模块 | 功能 |
|---|---|
| config_handler | YAML 配置文件加载 |
| logger_handler | 日志管理 (双写: 控制台+文件) |
| prompt_loader | Prompt 模板加载 |
| file_handler | PDF/TXT 文件加载, MD5 计算 |
| path_tool | 绝对路径获取 |
5. 数据流
5.1 知识库构建流程
知识库文件 (PDF/TXT)
│
▼
文件加载器 (PyPDFLoader/TextLoader)
│
▼
文本分片 (RecursiveCharacterTextSplitter)
│
▼
向量化 (DashScope Embeddings)
│
▼
Chroma 向量库存储
│
▼
MD5 去重记录
5.2 用户问答流程
用户提问
│
▼
Streamlit UI 接收
│
▼
ReactAgent.excute_stream()
│
▼
ReAct Agent 推理循环
│
├─→ 判断是否需要调用工具
├─→ 选择工具 (RAG/天气/用户信息/外部数据)
├─→ 执行工具获取结果
├─→ 观察结果,更新思考
└─→ 生成最终回答
│
▼
流式输出到 UI
6. 配置说明
6.1 rag.yaml
chat_model_name: "qwen3-max" # LLM 模型
embeddings_model_name: "text-embedding-v4" # Embedding 模型
6.2 chroma.yaml
collection_name: "agent" # 向量库集合名
persist_directory: "chroma_db" # 持久化目录
k: 3 # 检索Top-K
chunk_size: 200 # 分片大小
chunk_overlap: 20 # 分片重叠
6.3 agent.yaml
external_data_path: "data/external/records.csv" # 外部数据路径
7. 运行方式
7.1 启动 Web 应用
streamlit run app.py
7.2 知识库初始化
python -m rag.vector_store
8. 面试要点总结
| 知识点 | 项目中的应用 |
|---|---|
| LangChain Agent | create_agent, ReAct 框架 |
| LangGraph | 中间件机制, 动态提示词 |
| RAG | 向量检索, 文档分片, Chain 组合 |
| Chroma | 向量数据库存储与检索 |
| Streamlit | Web 前后端交互 |
| 中间件模式 | 工具调用监控, 动态 Prompt |
| 设计模式 | 工厂模式, 配置中心化 |