# ai_crm **Repository Path**: li-binfeng/ai_crm ## Basic Information - **Project Name**: ai_crm - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-03 - **Last Updated**: 2026-08-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI CRM 智能客服系统 基于 LangChain + Flask + Gradio 构建的智能客服系统,通过意图识别和工具链路实现课程咨询、行业咨询等功能。 ## 功能特点 - 智能意图识别(硅基流动 DeepSeek-V3) - RAG 课程检索(本地知识库 + 关键词匹配向量检索) - 行业信息查询(Tavily API 实时搜索) - 流畅的对话体验(Gradio Web 界面) - 用户认证系统(注册/登录/会话管理) - API 限流保护(flask-limiter) - LLM 调用重试机制 ## 系统架构 ``` 用户输入 → 意图识别(DeepSeek-V3) → Agent路由 → 工具调用 → 响应生成 ↓ 用户认证 ← 聊天历史管理 ← MySQL数据库 ``` **双服务架构:** - **Flask API**(端口 5000):后端 RESTful API,处理业务逻辑 - **Gradio Web**(端口 7863):前端用户界面,登录/注册/聊天 ## 快速开始 ### 1. 环境准备 ```bash python -m venv ai_crm_env ai_crm_env\Scripts\activate # Windows pip install -r requirements.txt ``` ### 2. 配置环境变量 ```bash cp .env.example .env ``` 编辑 `.env`,填入以下配置: | 变量 | 说明 | 示例 | |------|------|------| | `DB_HOST/PORT/USER/PASSWORD/NAME` | MySQL 数据库连接 | `localhost:3306` | | `SILICONFLOW_API_KEY` | 硅基流动 API Key | `sk-xxx` | | `SILICONFLOW_MODEL` | 硅基流动模型名 | `deepseek-ai/DeepSeek-V3` | | `SILICONFLOW_BASE_URL` | 硅基流动 API 地址 | `https://api.siliconflow.cn/v1` | | `TAVILY_API_KEY` | Tavily 搜索 API Key | `tvly-xxx` | ### 3. 启动服务 ```bash python main.py ``` ### 4. 访问系统 - **Web 界面**: http://localhost:7863 (用户访问此地址) - **API 服务**: http://localhost:5000 (仅返回 JSON,无页面) ## 项目结构 ``` ai_crm_system/ ├── main.py # 主程序入口(启动 Flask + Gradio 双服务) ├── app.py # Flask API 服务(登录/注册/聊天等路由) ├── ui.py # Gradio Web 界面(登录/注册/聊天 UI) ├── config.py # 配置文件(数据库/API密钥/模型配置) ├── models.py # SQLAlchemy 数据模型(User/Session/ChatHistory等) ├── database.py # 数据库管理类(DatabaseManager) ├── tools.py # LangChain Agent 工具(意图识别/RAG/行业搜索) ├── prompts.py # 提示词模板 ├── utils.py # 工具函数 ├── vectorstore.py # 向量数据库管理 ├── simple_vectorstore.py # 简化向量存储(关键词匹配) ├── simple_text_splitter.py # 文本分割器 ├── recreate_database.py # 数据库重建脚本 ├── setup.py # 项目初始化脚本 ├── requirements.txt # 依赖包 ├── knowledge.txt # 课程知识库 ├── .env # 环境变量配置 ├── .env.example # 环境变量模板 ├── static/css/ # 自定义 CSS 样式 ├── logs/ # 日志目录 └── data/vectorstore/ # 向量数据库存储 ``` ## API 文档 ### 用户认证 ``` POST /user/register Body: {"username": "xxx", "password": "xxx"} Response: {"success": true, "user_id": 1, "message": "注册成功"} POST /user/login Body: {"username": "xxx", "password": "xxx"} Response: {"success": true, "user_id": 1, "username": "xxx", "session_id": "uuid"} ``` ### 聊天接口 ``` POST /chat Body: {"query": "Python课程怎么报名?", "phone": "13800138000", "session_id": "uuid"} Response: { "success": true, "response": "课程信息...", "session_id": "uuid", "intent_code": 1, "response_time": 1200 } ``` `phone` 和 `session_id` 均为可选,系统通过 `session_id` 查找关联用户。 ### 会话管理 ``` POST /session/create Body: {"phone_number": "13800138000"} Response: {"success": true, "session_id": "uuid"} GET /sessions/{session_id}/history Response: {"success": true, "history": [...]} ``` ### 其他接口 | 路由 | 方法 | 说明 | |------|------|------| | `/` | GET | API 状态信息 | | `/init` | POST | 初始化系统(数据库+向量库) | | `/health` | GET | 健康检查 | | `/vectorstore/update` | POST | 更新向量库 | | `/vectorstore/clear/{collection}` | POST | 清空向量库 | | `/user/{phone}/history` | GET | 获取用户历史 | ## Agent 工具链 | 工具 | 意图编号 | 说明 | |------|----------|------| | `detect_intent` | - | 意图识别,返回 1/2/3 | | `course_rag_search` | 1 | 基于本地知识库检索课程信息 | | `industry_search` | 2 | 通过 Tavily API 检索行业信息 | | `general_response` | 3 | 通用回复(闲聊/其他) | ## 模型配置 | 用途 | 模型 | 平台 | 参数 | |------|------|------|------| | 意图识别 | DeepSeek-V3 | 硅基流动 | temperature=0.0, max_tokens=10, timeout=15s | | 对话生成 | DeepSeek-V3 | 硅基流动 | temperature=0.7, max_tokens=1024, timeout=30s | ## 数据库设计 | 表 | 说明 | |----|------| | `users` | 用户表(id, username, password, phone_number, email, created_at, last_login, is_active) | | `sessions` | 会话表(id/UUID, user_id, phone_number, created_at, last_activity, is_active) | | `chat_history` | 聊天记录表(user_id, session_id, query, response, intent_code, tool_used, response_time) | | `knowledge_base` | 知识库表(collection_name, content, metadata_json) | | `api_logs` | API 日志表(endpoint, method, user_id, request_data, response_data, status_code, response_time) | 密码使用 SHA256 哈希存储。 ## 许可证 MIT License ┌─────────────────────────────────────────────────────┐ │ main.py(启动入口) │ │ ┌──────────────────┐ ┌──────────────────────┐ │ │ │ Flask API :5000 │ │ Gradio Web UI :7863 │ │ │ │ (app.py) │ │ (ui.py) │ │ │ └────────┬─────────┘ └──────────┬───────────┘ │ │ │ │ │ │ ┌────────▼────────────────────────▼───────────┐ │ │ │ tools.py(Agent 核心) │ │ │ │ ┌──────────┐ ┌────────────┐ ┌──────────┐ │ │ │ │ │ course_ │ │ industry_ │ │ general_ │ │ │ │ │ │ rag_ │ │ search │ │ response │ │ │ │ │ │ search │ │ (Tavily) │ │ (LLM直答) │ │ │ │ │ └────┬─────┘ └─────┬──────┘ └────┬─────┘ │ │ │ │ │ │ │ │ │ │ │ ┌────▼─────┐ ┌─────▼──────┐ │ │ │ │ │ │vector- │ │ Tavily API │ │ │ │ │ │ │store │ │ (联网搜索) │ │ │ │ │ │ └──────────┘ └────────────┘ │ │ │ │ └──────────────────────────────────┼──────────┘ │ │ │ │ │ ┌──────────────────────────────────▼───────────┐ │ │ │ MySQL (SQLAlchemy ORM) │ │ │ │ users / sessions / chat_history / │ │ │ │ knowledge_base / api_logs │ │ │ └──────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘