Files
HuiBrain/README.md
EduBrain Dev b17786b57b feat: v1.2.0 - 图片去重与管理、微信机器人优化、搜索设置可配置
主要功能:
- 图片上传时 OCR 内容去重(3个上传端点统一使用公共函数 _check_ocr_duplicate)
- 图片管理 Tab:展示所有图片、手动删除、一键去重
- 搜索结果详情弹窗增加删除按钮(带确认弹窗)
- 图片管理卡片点击查看详情(复用 showOcrDetailModal)
- 搜索限制和 LLM 批量判断数量可通过网站设置
- MiniMax API 调用添加 reasoning_split=True
- 企业微信机器人:WebSocket 长连接、图片搜索、配置化搜索数量
- 版本号升级至 1.2.0
2026-04-13 22:25:08 +08:00

177 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# EduBrain - 中文直播教育知识库系统
基于 FastAPI 的中文直播教育知识库系统支持直播文字稿导入、OCR 截图识别、AI 语义搜索等功能。
## 功能特性
### 知识库管理
- **多格式导入**: Markdown / 纯文本 / Word 文档(.docx自动按标题分页
- **批量导入**: 支持多文件批量导入,实时进度显示
- **智能分块**: 按段落边界切分文本,保留重叠区域
- **向量嵌入**: 支持 MiniMax / OpenAI / 智谱 / DashScope / 本地 BGE 五种嵌入模型
### 图片 OCR
- **OCR 识别**: DeepSeek Vision 模型识别图片文字
- **关键词提取**: MiniMax M2.7 自动提取内容标签
- **批量处理**: 支持拖拽上传、选择文件、选择文件夹,按文件名去重
- **BM25 索引**: 内置倒排索引搜索引擎jieba 中文分词
### AI 搜索
- **知识库搜索**: 向量语义搜索 + 全文检索混合排序
- **图片搜索**: MiniMax M2.7 语义匹配SSE 流式实时返回结果
- **并发池**: 最多 10 个 LLM 请求并发,每批 10 张图片判断
### 其他
- **MCP 协议**: 支持 Model Context Protocol可被 AI Agent 调用
- **Docker 部署**: 完整的 Docker Compose 编排(应用 + PostgreSQL + pgvector
## 技术栈
| 层级 | 技术 |
|------|------|
| 后端框架 | FastAPI + Uvicorn |
| ORM | SQLAlchemy 2.0 (async) |
| 数据库 | PostgreSQL (pgvector) / SQLite |
| 前端 | 纯 HTML + CSS + JS苹果风格 SPA |
| OCR | DeepSeek Vision / PaddleOCR / 阿里云 / 腾讯云 |
| LLM | MiniMax M2.7 / DeepSeek / Qwen3-8B |
| 搜索 | BM25 倒排索引 + 向量语义搜索 |
| 部署 | Docker + Docker Compose |
## 项目结构
```
edu-brain/
├── app/
│ ├── main.py # FastAPI 入口,路由注册,生命周期管理
│ ├── config.py # pydantic-settings 配置管理
│ ├── database.py # 数据库连接PG/SQLite 双后端)
│ ├── models/base.py # ORM 模型KnowledgePage, OCRImage 等)
│ ├── schemas/ # Pydantic 请求/响应 Schema
│ ├── api/v1/ # API 路由
│ │ ├── pages.py # 知识页面 CRUD
│ │ ├── search.py # 语义搜索
│ │ ├── images.py # 图片 OCR + AI 搜索SSE
│ │ ├── import_export.py # 文件导入导出
│ │ └── settings.py # 系统设置
│ ├── services/
│ │ ├── ocr_service.py # OCR 识别服务(多 Provider
│ │ ├── llm_service.py # LLM 服务(标签提取/搜索匹配)
│ │ ├── search_engine.py # BM25 倒排索引引擎
│ │ ├── search_service.py # 混合搜索服务
│ │ ├── embedding_service.py # 嵌入模型服务
│ │ ├── import_service.py # 文件导入服务
│ │ └── page_service.py # 页面 CRUD 服务
│ └── mcp/server.py # MCP Server 实现
├── static/index.html # 前端单页应用
├── data/images/ # 图片存储目录
├── .env.example # 环境变量模板
├── requirements.txt # Python 依赖
├── Dockerfile # 应用镜像
├── Dockerfile.db # 数据库镜像PG + pgvector
└── docker-compose.yml # Docker 编排
```
## 快速开始
### 1. 环境准备
```bash
# 克隆项目
git clone <repo-url>
cd edu-brain
# 复制配置文件
cp .env.example .env
# 安装依赖
pip install -r requirements.txt
```
### 2. 配置 .env
编辑 `.env` 文件,至少配置以下项:
```env
# 数据库(默认 SQLite无需额外配置
DATABASE_URL=sqlite+aiosqlite:///edu_brain.db
# OCR使用 DeepSeek Vision
OCR_PROVIDER=deepseek
DEEPSEEK_API_KEY=your-deepseek-api-key
DEEPSEEK_BASE_URL=http://your-ollama-host:11434/v1
DEEPSEEK_OCR_MODEL=deepseek-ocr:latest
# LLM用于标签提取和搜索匹配
MINIMAX_API_KEY=your-minimax-api-key
MINIMAX_BASE_URL=https://api.minimaxi.com/v1
MINIMAX_CHAT_MODEL=MiniMax-M2.7
```
### 3. 启动服务
```bash
uvicorn app.main:app --host 0.0.0.0 --port 8765
```
访问 http://localhost:8765 即可使用。
### 4. Docker 部署
```bash
docker-compose up -d
```
## 图片搜索工作流
```
用户上传图片
→ DeepSeek Vision OCR 识别文字
→ MiniMax M2.7 提取关键词标签
→ 存入 SQLite + BM25 索引
用户搜索 "孩子不想上学"
→ 从 DB 倒序取图片(每批 10 张)
→ 并发池(最多 10 个请求)发给 MiniMax M2.7 判断
→ 匹配结果通过 SSE 实时推送到前端
→ 找够指定数量或遍历完 DB 后结束
```
## API 概览
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/v1/images/recognize-direct` | 上传并识别图片 |
| POST | `/api/v1/images/batch-recognize` | 批量上传并识别 |
| GET | `/api/v1/images/search` | AI 搜索图片SSE 流式) |
| GET | `/api/v1/images/{id}` | 获取图片识别结果 |
| GET | `/api/v1/pages` | 知识页面列表 |
| POST | `/api/v1/pages` | 创建知识页面 |
| POST | `/api/v1/search` | 语义搜索知识库 |
| POST | `/api/v1/import/file` | 导入文件 |
| GET | `/api/v1/settings` | 获取系统设置 |
## 配置说明
### 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` |