返回项目列表

高中学习 RAG 问答助手

在普通 Windows 电脑上,把九科教材与 Obsidian 笔记接入 AnythingLLM,形成带引用的本地检索与云端生成问答链路。

项目状态:已完成本地落地与小规模问答抽查。当前版本属于 RAG 问答助手,尚未实现自主规划、工具选择和连续任务执行。

项目背景

高中学习资料分散在九科教材 PDF、Obsidian 笔记和速记手册中。这个项目希望在不改变原有笔记习惯的前提下,增加一个可以检索教材与笔记、生成回答并标注来源的问答入口。

运行机器是普通 Windows 10 电脑,没有适合本地大模型推理的高性能独立显卡。因此系统把文档、嵌入和向量检索留在本机,把生成回答交给 MiMo API。

已交付结果

项目本次落地记录
知识来源127 篇 Obsidian 笔记、九科 40 本教材
数据规模780 个文档、7,059 个向量块,原始材料约 500 万字
本地组件AnythingLLM Desktop、multilingual-e5-small、LanceDB
云端组件小米 MiMo API,用于生成回答
首次搭建本次记录约半天,包括下载、配置和教材入库
问答延迟本机抽查约 3–6 秒
当前验证5 个跨学科问题命中预期教材或笔记,相似度约 0.87–0.91

这些数字来自 2026 年 9 月的指定机器和材料,不代表其他环境或模型版本。相似度只能说明检索排序信号,不能单独证明答案准确率。

技术架构

flowchart LR A["Obsidian 笔记"] --> C["解析与分节"] B["九科教材 PDF"] --> C C --> D["multilingual-e5-small 本地向量化"] D --> E["LanceDB 本地向量库"] Q["学生问题"] --> F["AnythingLLM 检索"] E --> F F --> G["问题 + 召回片段 发送至 MiMo API"] G --> H["带来源的回答"]
组件选型作用
问答界面与 RAG 管理AnythingLLM Desktop v1.16.1文档管理、检索、对话和引用展示
嵌入模型multilingual-e5-small(本地 ONNX)把中文教材和笔记转换成向量
向量数据库LanceDB在本机保存与检索向量
生成模型MiMo API根据问题与召回片段生成回答

数据与隐私边界

教材、笔记、解析文本、嵌入模型和向量数据库保存在本机。使用 MiMo API 生成回答时,用户问题与检索命中的文本片段会发送给模型服务商。因此本项目是“本地存储与检索 + 云端生成”,不能描述为全部数据不出机。

API Key 只通过 AnythingLLM 配置或本地环境变量保存,不写入脚本、截图和版本库。涉及个人信息、未公开试卷或其他敏感资料时,应先脱敏,或改用经过验证的本地模型。

实施过程

1. 配置中文检索

AnythingLLM 默认嵌入模型对本项目的中文材料表现不理想,因此切换为本地 multilingual-e5-small。模型文件约 470 MB;本次环境无法稳定访问官方 CDN,改从可用镜像下载后放入本地模型目录。

2. 批量导入笔记

少量文件可以通过界面上传。127 篇 Markdown 笔记使用本地脚本调用 AnythingLLM API 批量上传、加入工作区并写入导入台账,避免重复处理未变化文件。

3. 修复教材 PDF 丢正文

部分文字版教材由 AnythingLLM 直接解析时丢失大量正文。一个约 15 万字的样本只得到约 4 千词,主要剩下封面和版权页。

处理方式改为:使用 pypdf 按页提取文本,每 10 页组成一个带原始页码标记的 Markdown 分节,再上传并建立向量。这样既保留了正文,也让引用能够回到教材页段。扫描页没有可靠文本层时,仍需要单独走 OCR 和人工抽检。

4. 增量维护

导入脚本用文件路径、哈希和处理状态记录增量台账。新增或修改笔记后重新扫描,只处理变化项;完成后核对源文件、台账、工作区文档和向量状态,而不是只相信上传接口返回成功。

真实踩坑

问题表现本次处理
PDF 解析不完整大量教材正文缺失pypdf 按页提取并保留页码,再分节入库
中文召回不理想问题与教材语义相关但排序靠后改用 multilingual-e5-small,并重新建立向量
模型下载失败下载长期停留在 0%使用可访问镜像下载并核对模型文件
批量上传文件名异常含逗号的文件名导致 multipart 处理失败改用脚本构造上传请求,避免命令行参数歧义
同步状态不透明上传成功不代表已加入工作区并生成向量分别核对上传、工作区文档和向量状态

当前实践边界

本次实践用语文、历史、生物和政治等 5 个问题检查了检索、回答和引用链路,均找到预期教材或笔记,检索相似度约为 0.87–0.91。这些结果用于记录本机搭建效果,不代表所有学科问题都能达到相同表现,也不把相似度解释成答案准确率。

配套脚本

脚本用途
import_vault.py增量导入 Markdown 笔记并维护台账
import_all_textbooks.py提取教材 PDF、按页段切分、上传与嵌入
archive_pdfs.py按科目整理教材文件
ask*.py调用指定工作区进行问答与引用抽查
stats.py统计文档、向量块和磁盘占用

下一步

  • 按学科拆分工作区,减少跨学科检索干扰;
  • 对扫描教材增加 OCR,并改善公式、表格和多栏排版处理;
  • 为不同学科设计回答模板,继续保留教材引用;
  • 自动同步新增笔记,并完善失败重试、去重和备份;
  • 在验证稳定后加入自动出题、错题整理和笔记回写;
  • 只有形成自主规划与工具执行闭环后,再升级为学习 Agent。

工具配置会随版本变化。复现前请核对 AnythingLLM Desktop 官方说明MiMo API 官方快速开始。本文中的版本、成本和性能数字均为本次环境记录。

搭建过程和关键取舍可继续阅读实战文章