Jeason 45badfee82 v2.0: 架构大版本升级
任务 3.2+3.3: 飞书入口迁移到 MessagePipeline
- feishu_bot.py 改用 pipeline.handle_message(去掉 30 行会话管理代码)
- feishu_longconn_service.py 改用 pipeline.handle_message(去掉 25 行)
- 各入口只负责协议适配,业务逻辑统一在 Pipeline

任务 5: 统一配置管理
- 新增 src/config/config_service.py(ConfigService 单例)
- 优先级:环境变量 > system_settings.json > 代码默认值
- 支持点号分隔的嵌套 key、自动类型转换

任务 8: 密码哈希升级
- SHA-256  bcrypt(User.set_password/check_password)
- AuthManager.hash_password/verify_password 同步升级
- 兼容旧密码:登录时检测 SHA-256 格式,验证通过后自动升级为 bcrypt
- auth_manager.secret_key 改为从环境变量读取

任务 9: 前端事件总线
- TSPDashboard 新增 on/off/emit 方法
- 模块间可通过事件通信,不再只靠直接读写共享状态

README.md 重写
- 功能概览、技术栈、快速开始、项目结构
- 架构要点、多租户、飞书机器人、环境变量
- 开发和部署说明
2026-04-08 08:53:43 +08:00
2026-02-11 14:41:37 +08:00
2026-04-08 08:53:43 +08:00
2026-04-08 08:53:43 +08:00
2025-11-05 10:43:36 +08:00
2026-04-08 08:53:43 +08:00
2026-03-20 16:50:26 +08:00

TSP 智能助手

AI 驱动的多租户客服与工单管理系统支持飞书机器人、WebSocket 实时对话、知识库语义搜索。

功能概览

  • 智能对话 — WebSocket 实时聊天 + 飞书机器人(长连接模式),按租户隔离知识库
  • 工单管理 — 创建、编辑、删除、飞书多维表格双向同步AI 生成处理建议
  • 知识库 — TF-IDF + 可选 Embedding 语义搜索,支持文件导入、人工验证
  • 多租户 — 数据按 tenant_id 隔离,每个租户独立的系统提示词和飞书群绑定
  • 数据分析 — 工单趋势、预警统计、满意度分析,支持按租户筛选
  • 预警系统 — 自定义规则、多级别预警、批量管理
  • 系统管理 — 模块权限控制、流量/成本/安全配置、Token 监控

技术栈

技术
Web Flask 3.x + Blueprint 架构
数据库 SQLAlchemy 2.xSQLite 开发 / MySQL 生产)
实时通信 websockets独立服务端口 8765
缓存 内存缓存 + Redis可选
LLM OpenAI 兼容 API默认通义千问
Embedding sentence-transformers BGE本地可选
飞书 lark-oapi SDK事件订阅 2.0 长连接)
前端 Bootstrap 5 + 模块化 JS无框架

快速开始

# 1. 安装依赖
pip install -r requirements.txt

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 填入 LLM API Key、飞书凭证等

# 3. 初始化数据库
python init_database.py

# 4. 启动服务
python start_dashboard.py

访问 http://localhost:5000默认账号 admin / admin123

项目结构

src/
├── config/              # 配置管理unified_config + config_service
├── core/                # 基础设施数据库、LLM、缓存、认证
├── dialogue/            # 对话管理realtime_chat、message_pipeline
├── knowledge_base/      # 知识库(搜索、导入、验证)
├── repositories/        # 数据访问层(自动 tenant_id 过滤)
├── analytics/           # 监控与分析预警、Token、AI 成功率)
├── integrations/        # 外部集成(飞书客户端、工单同步)
├── agent/               # ReAct Agent工具调度
├── vehicle/             # 车辆数据管理
└── web/                 # Web 层
    ├── app.py           # Flask 应用(页面路由 + Blueprint 注册)
    ├── blueprints/      # API 蓝图(每个领域一个文件)
    ├── service_manager.py  # 服务注册(线程安全懒加载)
    ├── static/js/       # 前端模块
    │   ├── dashboard.js # 核心(类定义、事件总线、路由)
    │   └── modules/     # 功能模块chat、alerts、knowledge 等)
    └── templates/       # Jinja2 模板

架构要点

  • Repository 模式src/repositories/ 封装数据访问,自动附加 tenant_id 过滤
  • MessagePipelinesrc/dialogue/message_pipeline.py 统一消息处理流程,各入口只做协议适配
  • 统一 LLM 客户端src/core/llm_client.py 同时支持同步和异步调用
  • 配置三层 — 环境变量 > system_settings.json > 代码默认值
  • 前端模块化 — Object.assign(prototype) 扩展,事件总线通信

多租户

每个租户拥有独立的:

  • 知识库数据
  • 对话历史
  • 工单数据
  • 系统提示词(机器人角色设定)
  • 飞书群绑定(不同群自动路由到不同租户的知识库)

在「租户管理」页面创建租户、绑定飞书群、设置提示词。

飞书机器人

支持两种接入模式(建议只启用一种):

模式 说明 配置
长连接 无需公网 IP推荐 python start_feishu_bot.py
Webhook 需要公网域名 飞书后台配置回调 URL

机器人收到消息后自动:

  1. 根据群 ID 查找绑定的租户
  2. 使用该租户的知识库搜索
  3. 使用该租户的系统提示词生成回复

环境变量

变量 说明 默认值
SECRET_KEY Flask session 密钥 随机生成
LLM_BASE_URL LLM API 地址 DashScope
LLM_API_KEY LLM API 密钥 -
LLM_MODEL 模型名称 qwen-plus-latest
FEISHU_APP_ID 飞书应用 ID -
FEISHU_APP_SECRET 飞书应用密钥 -
REDIS_HOST Redis 地址 localhost
REDIS_PASSWORD Redis 密码 -
ADMIN_PASSWORD 默认管理员密码 admin123

完整变量列表见 .env.example

开发

# 代码格式化
black . && isort .

# 类型检查
mypy .

# 运行测试
pytest

部署

# Docker 部署
docker-compose up -d

# 包含Flask + MySQL + Redis + Nginx + Prometheus + Grafana

详见 nginx.confdocker-compose.yml

Description
No description provided
Readme 9.6 MiB
Languages
Python 57%
JavaScript 20.7%
HTML 17.8%
CSS 4.5%