HuiBrain - 中文直播教育知识库系统
基于 FastAPI 的中文直播教育知识库系统,支持直播文字稿导入、OCR 截图识别、AI 语义搜索、企业微信机器人等功能。
功能特性
知识库管理
- 多格式导入: Markdown / 纯文本 / Word 文档(.docx),自动按标题分页
- 批量导入: 支持多文件批量导入,实时进度显示
- 智能分块: 按段落边界切分文本,保留重叠区域
- 向量嵌入: 支持 MiniMax / OpenAI / 智谱 / DashScope / 本地 BGE 五种嵌入模型
图片 OCR
- OCR 识别: DeepSeek Vision 模型识别图片文字
- 关键词提取: MiniMax M2.7 自动提取内容标签
- 批量处理: 支持拖拽上传、选择文件、选择文件夹
- 上传去重: OCR 识别后自动检查内容是否已存在,避免重复录入
- 图片管理: 网页端管理所有图片,支持一键去重、手动删除
- BM25 索引: 内置倒排索引搜索引擎,jieba 中文分词
AI 搜索
- 知识库搜索: 关键词搜索
- 图片搜索: MiniMax M2.7 语义匹配,SSE 流式实时返回结果
- 并发池: 最多 10 个 LLM 请求并发,每批数量可配置
- 可配置参数: 搜索返回数量、LLM 批量判断数量、OCR 并发数量均可在网页端设置
企业微信机器人
- WebSocket 长连接: 基于官方 SDK,无需公网 IP
- 关键词搜索: 用户发文字 → 搜索图片 → 返回匹配结果
- 图片自动入库: 用户发图片 → 自动 OCR 识别 → 录入知识库(自动去重)
- 集成启动: 后端启动时自动检测配置并拉起机器人
- 网页端管理: 在设置页面配置 Bot ID / Secret,支持在线重启
其他
- MCP 协议: 支持 Model Context Protocol,可被 AI Agent 调用
- Docker 部署: 单容器部署,轻量级
技术栈
| 层级 |
技术 |
| 后端框架 |
FastAPI + Uvicorn |
| ORM |
SQLAlchemy 2.0 (async) |
| 数据库 |
SQLite |
| 前端 |
纯 HTML + CSS + JS(苹果风格 SPA) |
| OCR |
DeepSeek Vision / PaddleOCR / 阿里云 / 腾讯云 |
| LLM |
MiniMax M2.7 / DeepSeek / Qwen3-8B |
| 搜索 |
BM25 倒排索引 + 关键词搜索 |
| 企业微信 |
wecom-aibot-python-sdk (WebSocket 长连接) |
| 部署 |
Docker |
项目结构
快速开始
1. 环境准备
2. 配置 .env
编辑 .env 文件,至少配置以下项:
3. 启动服务
启动后会自动检测企业微信机器人配置,如果 WEWORK_BOT_ENABLED=true 且 WEWORK_BOT_ID / WEWORK_BOT_SECRET 已配置,机器人会自动在后台线程启动。
访问 http://localhost:8765 即可使用。
4. Docker 部署
图片搜索工作流
企业微信机器人
功能
| 场景 |
说明 |
| 单聊发关键词 |
搜索图片知识库,返回匹配结果(图片+预览文字) |
| 单聊发图片 |
自动 OCR 识别并录入知识库(自动去重) |
| 进入会话 |
自动发送欢迎语 |
配置
- 在企业微信管理后台创建智能机器人,开启 API 模式(长连接)
- 获取 Bot ID 和 Secret
- 在
.env 中配置或通过网页端设置页面配置
注意事项
- 图片消息仅支持单聊,群聊中发图片不会触发机器人
- 机器人支持多人同时使用(asyncio 异步架构)
- 配置修改后可通过网页端「重启机器人」按钮生效
API 概览
| 方法 |
路径 |
说明 |
| POST |
/api/v1/images/recognize-direct |
上传并识别图片 |
| POST |
/api/v1/images/batch-recognize |
批量上传并识别 |
| GET |
/api/v1/images/search |
AI 搜索图片(SSE 流式) |
| GET |
/api/v1/images |
获取图片列表(分页) |
| GET |
/api/v1/images/{id} |
获取图片识别结果 |
| DELETE |
/api/v1/images/{id} |
删除图片 |
| POST |
/api/v1/images/dedup |
一键去重 |
| GET |
/api/v1/pages |
知识页面列表 |
| POST |
/api/v1/pages |
创建知识页面 |
| POST |
/api/v1/search |
关键词搜索知识库 |
| POST |
/api/v1/import/file |
导入文件 |
| GET |
/api/v1/settings |
获取系统设置 |
| PUT |
/api/v1/settings |
更新系统设置 |
| GET |
/api/v1/settings/bot/status |
获取机器人状态 |
| POST |
/api/v1/settings/bot/restart |
重启机器人 |
配置说明
OCR Provider
| Provider |
说明 |
额外配置 |
deepseek |
DeepSeek Vision(推荐) |
DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL |
paddleocr |
本地 PaddleOCR |
无 |
aliyun |
阿里云 OCR |
ALIYUN_OCR_ACCESS_KEY, ALIYUN_OCR_SECRET |
tencent |
腾讯云 OCR |
TENCENT_OCR_SECRET_ID, TENCENT_OCR_SECRET_KEY |
auto |
自动 fallback |
配置多个 Provider |
嵌入模型
| Provider |
说明 |
额外配置 |
minimax |
MiniMax 嵌入 |
MINIMAX_API_KEY |
openai |
OpenAI 嵌入(兼容硅基流动等第三方接口) |
OPENAI_API_KEY |
zhipu |
智谱 AI 嵌入 |
ZHIPU_API_KEY |
dashscope |
阿里云 DashScope |
DASHSCOPE_API_KEY |
local_bge |
本地 BGE 模型 |
LOCAL_BGE_MODEL_PATH |
网页端可配置参数
| 参数 |
说明 |
默认值 |
范围 |
| 搜索返回数量 |
每次搜索最多返回多少条匹配结果 |
3 |
1-10 |
| LLM 批量判断数量 |
每批发给 LLM 判断的图片数量 |
10 |
1-50 |
| OCR 并发数量 |
多用户同时上传时 OCR 并发识别数量 |
1 |
1-10 |