一套以 LLM + 知识图谱为核心的多教材整合系统:把多本教材压缩到原始内容 30% 以内的精华版本,并通过对话让教师持续优化整合方案。
- 多格式教材解析: PDF / Markdown / DOCX / TXT / Excel;PDF 流式逐页解析,可处理 400MB+ 教材
- 单本知识图谱: 自动抽取知识点与四类关系(前置 / 包含 / 并列 / 应用)
- 跨教材整合: 嵌入聚类 + LLM 判同 + 表述择优 + 低优先级剪枝;可调压缩比目标
- 图谱可视化: D3 力导向,节点颜色区分教材,大小映射频次
- RAG 精准问答: 章节切块 (600/100) + 向量 + BM25 (jieba 分词) 混合检索,回答附
[#编号]引用 - 多轮对话: 教师可质疑、调整决策,助手输出
actions命令直接落库 - 整合报告: Markdown 一键导出,含整合概览/决策摘要/重点案例/图谱统计/教学完整性
- Web SPA: React + TypeScript + Vite + D3.js 三栏布局
- 模型无关: Claude / OpenAI / DeepSeek / Mock 运行时切换;Mock 默认开启
- 图谱多视图切换: 力导向 / 树状 / 热力图,每种视图都可点击节点查看详情
- 图谱搜索 + 筛选: 按节点名/别名搜索,按教材来源、关系类型、重要度多维筛选
- 混合检索升级: jieba 分词 + top-N-per-channel union + min-max 加权融合(vs 单字 regex 提升 25% 关键词召回)
- RAG Benchmark: 10 道医学问题自动评测,输出关键词命中率 / 引用准确率 / 响应时间
- Token 用量统计: 全局调用追踪 + 按模块归因 (extract/integrate/rag/chat) + 饼图 + 时间线
- Docker 一键部署: 单容器统一打包前后端,
docker compose up即用
├── backend/ FastAPI + Python 服务端
├── frontend/ React + TypeScript + Vite 前端
├── data/ 示例教材(数据结构与算法 5 本)
├── docs/ 需求分析 / 系统设计 / 开发文档
├── docker-compose.yml
├── deploy.sh / deploy.ps1
单容器统一打包,前端 + 后端都在 :7860 :
cd frontend && npm install && npm run build && cd .. # 先构建前端 dist
docker compose up --build -d # 启动启动后访问 http://localhost:7860 — 完整 SPA + API + Gradio 状态面板都在这一个端口。
默认 Mock 模式,无需任何 API key。 想接真实模型,把
.env填上ANTHROPIC_API_KEY/OPENAI_API_KEY/DEEPSEEK_API_KEY后重启 compose。
⚙️ 旧的双容器布局(backend:8000 + frontend:5173)仍在
backend/Dockerfile+frontend/Dockerfile,如需可切回旧docker-compose.yml版本。
# 后端
cd backend
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env
uvicorn main:app --reload --port 8000
# 前端 (另开终端)
cd frontend
npm install
npm run dev# 把 PDF 放到 data/textbooks/,然后:
python backend/scripts/ingest_textbooks.py逐本流式解析 + 建 RAG 索引,对 400MB+ 单本教材也是内存安全的。
python benchmark/run_benchmark.py # 默认混合检索
python benchmark/run_benchmark.py --no-bm25 # 消融:纯向量
# 输出 benchmark/results.md (markdown 报告) + results.json (原始数据)- 进入 http://localhost:5173
- 点击左侧「🧪 示例」一键导入 5 本算法教材(或自行拖拽上传)
- 对每本教材点击「🧠 提取」生成单本知识图谱(可视化即刻可见)
- 勾选 ≥ 2 本教材,在右侧调整压缩目标后点「🔗 跨教材整合」
- 切换到「🔍 问答」点「建立索引」,索引完成后基于教材原文提问,每个回答都会附带可展开的引用来源
- 切换到「💬 对话」与助手讨论,例如"为什么把最速下降法和梯度下降法合并?"
- 切换到「📝 报告」一键下载完整 Markdown
| 路径 | 说明 |
|---|---|
POST /api/textbooks/upload |
上传教材 |
POST /api/graphs/extract |
提取单本图谱 |
POST /api/integration/run |
跨教材整合 |
POST /api/chat/message |
多轮对话 |
POST /api/rag/index |
建立 / 重建 RAG 索引(不传 textbook_ids 则索引全部) |
POST /api/rag/query |
基于已索引教材的引用式问答 |
GET /api/rag/status |
RAG 索引覆盖与后端信息 |
DELETE /api/rag/index |
清空 RAG 索引(可指定 textbook_id) |
GET /api/reports/{id}/markdown |
渲染整合报告 |
GET /api/stats/tokens |
Token 用量统计(按模块/provider/时间线) |
DELETE /api/stats/tokens |
清空 token 统计 |
GET/POST /api/config |
切换 LLM 提供方 |
MIT