向一整个教研组借脑,但脑子和笔,永远在你手里。
百师阁是一个 AI+教育 多师并行辅导系统:同时召唤多位具有独立学科视角的大师(称为"师魂"),围绕同一个学习问题并行讲授、碰撞与综合。它把"向一个人提问"升级为"向一整个教研组借脑"——不同学科、不同教学法、不同思维风格的老师同时为你答疑、辩论,而判断与结论永远由你自己作出。
学习效果指数的意义:用量化数据如实告诉你——你是在真正掌握知识,还是只停留在"看过"。
📌 GOAI 世界人工智能开源大赛 · 无界应用赛道(AI+教育赛题)参赛作品 初赛材料见
docs/competition/:作品简介、参赛方案 PPT;代码与运行演示见下文。
| 首页 · 多入口 | 问学 · 多师会诊入口 |
|---|---|
![]() |
![]() |
| 师览 · 30 位师魂 | 学习效果 · 学习效果指数 |
|---|---|
![]() |
![]() |
截图来自本地运行实例(Docker 或源码启动,见「快速开始」)。
| 对比 | 传统聊天界面 | 百师阁 |
|---|---|---|
| 交互模式 | 单列时间线 | 多列并行流 |
| 辅导方式 | 一问一答 | 一问多师 + 多学科综合 |
| 控制节奏 | 学习者主导 | 各师魂并行推进,教员可实时干预 |
| 历史回溯 | 往上翻 | 每位老师有独立记忆图谱、修正历史、盲区记录 |
| 反馈闭环 | 无 | 学习效果指数跟踪学习闭环完成度 |
| 入口 | 输入框 | 师魂状态、知识库检索、历史回溯、@mention 都是入口 |
┌──────────────────┐
│ 教员(教研负责人) │
│ 课前追问 → 整合议题 → 把关 │
└────────┬─────────┘
│ refined_task
┌─────────────┐ ┌──────────────┐ │ ┌───────────────┐
│ Next.js 前端│───▶│ Axum API │───▶│ AI Gateway │
│ (shadcn/ui) │ │ (端口 3096) │ │ Claude/GPT/DS │
└─────────────┘ └──────┬───────┘ └───────────────┘
│
┌───────────────┼───────────────────────┐
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Registry │ │Possession│ │ Archive │ │Foundation│
│ 师魂注册表 │ │ 辅导引擎 │ │ 归档分析 │ │ 基础设施 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
| 模式 | 描述 |
|---|---|
| 一对一辅导 | 一位老师独立辅导,适合快速答疑 |
| 多师会诊 | 多位老师并行流式输出 + 实时碰撞检测 + 多学科综合 |
| 课堂辩论 | 两列对立 + 中间裁定栏,训练批判性思维 |
| 章节递进 | 横向时间轴,阶段卡片传递,逐层深入复杂主题 |
| 费曼学习法 | 老师检验并深化你的理解——讲不清楚就是没真懂 |
| 练习测评 | 学练结合四步:收集→消化→修订→练习 |
苏格拉底、柏拉图、亚里士多德、孔子、孟子、朱熹、王阳明、陶行知、叶圣陶、杜威、蒙台梭利、费曼、爱因斯坦、图灵、Karpathy、马克思、列宁、毛泽东、鲁迅、尼采、黑格尔、庄子、波伏娃、胡塞尔、稻盛和夫、乔布斯、马斯克、黄仁勋、伊本赫勒敦、Aaron Swartz……等 30 个预设师魂。
每个师魂有独立的教学法四维坐标(学科领域/认知层次/教学风格/学习目标)、专属教学风格、适用场景和自我声明。
后端:Rust
- Web 框架:Axum 0.7 + WebSocket + SSE
- 数据库:SQLite(WAL 模式)+ FTS5 全文搜索
- AI 网关:Claude / OpenAI / DeepSeek / LM Studio 多提供商 + 模型智能路由
- 图数据库:petgraph(师魂记忆图谱)
- 异步运行时:Tokio
前端:Next.js 16
- UI 框架:shadcn/ui + Tailwind CSS
- WebSocket 实时流式通信
- React 19 + TypeScript
- SearXNG 联网搜索集成
- 从 GitHub Releases 下载安装包
- 双击安装,按向导操作
- 安装完成后,从开始菜单启动「百师阁」
- 首次启动前,编辑安装目录下的
data/apikeys.json,填入 API Key - 浏览器自动打开 http://localhost:3000
# 1. 克隆项目
git clone https://github.com/Azhu9701/baishige.git
cd baishige
# 2. 一键构建并启动(首次约 15-20 分钟编译 Rust)
bash scripts/start-local.sh
# 3. 访问
# http://localhost:8088启动后包含 5 个服务:Caddy(反向代理 + 端口 8088)、API(Rust 后端)、Web(Next.js 前端)、SearXNG(联网搜索)、Cloudflare Tunnel(可选公网访问)。
如需配置 AI 提供商,复制环境变量模板并编辑:
cp deploy/.env.example .env
# 编辑 .env 填入 API Key 或 LM Studio 地址然后重启容器:
docker compose -f docker-compose.local.yml restart api常用命令:
# 查看日志
docker compose -f docker-compose.local.yml logs -f
# 停止
docker compose -f docker-compose.local.yml down
# 重新构建(代码更新后)
docker compose -f docker-compose.local.yml up --build -dbash install.sh脚本会自动完成:依赖检查、数据目录初始化、后端编译、前端构建、启动脚本生成。
安装完成后用开发模式启动:
bash start.sh无需云端 API Key,完全使用本地 GPU/CPU 运行大模型。
1. 安装 LM Studio
下载地址:https://lmstudio.ai
2. 加载模型
打开 LM Studio,在左侧模型浏览器下载或导入模型(推荐 Qwen3.6-27B(如 Youssofal/Qwen3.6-27B-MTPLX-Optimized-Speed-FP16)、Qwen3.5-14B、DeepSeek-R1-Distill 等中文友好模型;27B 需约 16GB 内存/显存,14B 及以下约 6-10GB)。
3. 启动本地服务器
点击左侧「Developer」→ 选择模型 → 启动服务器(默认端口 1234)。
4. 配置百师阁
打开 /models 页面:
- 选择「LM Studio」
- 填入模型名(如
Youssofal/Qwen3.6-27B-MTPLX-Optimized-Speed-FP16) - 源码模式填入
http://localhost:1234/v1,Docker 模式填入http://host.docker.internal:1234/v1 - 如有 API Key 则填入(LM Studio 默认无认证)
- 点击「测试」验证连通性
- 点击「设为活跃」切换 provider
5. 开始使用
返回首页,点击「问学」即可使用本地模型进行多师辅导。
模型选择直接影响分析深度。核心指标不是总参数量,而是每 token 激活参数量——MoE 模型(如 qwen3.6-35b-a3b,激活 3B)的知识虽宽但推理浅,密集模型(如 qwen3.6-27b,激活 27B)在同一 prompt 下能产出更深的结构化分析。
以下测试使用费曼师魂回答一个科学思维问题,温度 0.9,深度协议一致:
| 模型 | 类型 | 激活参数 | 字数 | 内存需求 | 深度协议 | 推荐场景 |
|---|---|---|---|---|---|---|
| qwen3-4b | 密集 | 4B | ~975 | ~4GB | L4-L5 缺失,自相矛盾 | 不推荐—深度协议失效 |
| qwen3.6-35b-a3b | MoE | 3B | 500-700 | ~20GB | L4 浅,重复凑数 | 不推荐 |
| qwen3.5-9b | 密集 | 9B | ~1300 | ~6GB | 六层全到 ✓ | 入门首选 |
| qwen3.6-27b | 密集 | 27B | ~1600 | ~16GB | 六层全到 + 自我打断 + 更深层分析 | 最优深度 |
| DeepSeek V4 / Claude Opus | 云端 | — | ~1500 | — | 六层全到 + 自我打断 + 自审 | 追求极致时 |
关键发现:
- 4B 密集是深度协议的下界。4B 能产出文本但不能产出深层思考——L4(立场反转)和 L5(历史与情境)结构性缺失,模型记不住自己前面写了什么所以末段与首段自相矛盾。往下不建议跑。
- 9B 密集 > 35B MoE(3B active)。总参数量是虚的,每 token 参与推理的参数量决定分析深度。9B 密集在 L1-L3(事实澄清、机制理解、前提追问)上不输 27B,每层论证完整、无重复注水。
- 27B 密集追上云端的关键:L4 拆成两步。 把立场反转拆为"推到极端"+"你必须实际打断自己的论证",27B 从 1300 字涨到 1600 字,做到了论证中段自我打断并从打断里长出更深一层分析——这个能力之前只有云端有。两步指令让本地模型执行了它原本有能力但不会主动做的动作。
- 去掉「每段不超过3句话」规则后,本地模型篇幅涨 35%+。模型自己分段能力足够,不需要指令代管。当前深度协议已移除该限制。
- max_output_tokens 不是瓶颈。8000 tokens 对 1500-2000 字的中文分析绰绰有余,实际输出由模型推理能力和 prompt 结构决定。
硬件参考:
| 目标 | 方案 | 参考价 |
|---|---|---|
| 跑 9B 密集(推荐入门) | Mac Mini M4 16GB 或 16GB 笔记本 | ¥3,500-5,000 |
| 跑 27B 密集(追求深度) | Mac Mini M4 32GB 或二手 RTX 3090 24GB | ¥4,500-6,500 |
| 零成本立即用 | LM Studio 云端代理 或 DeepSeek API | ¥0(API 按量付费) |
配置 API Key
将 API Key 写入 data/apikeys.json(此文件已在 .gitignore 中排除):
{
"deepseek": "your-deepseek-api-key",
"openai": "your-openai-api-key",
"claude": "your-claude-api-key"
}或打开 /models 页面选择对应 provider 并「设为活跃」。
前置条件
- Rust 工具链(1.75+)
- Node.js 18+ 和 pnpm
- 至少一个 AI 提供商的 API Key(DeepSeek / Claude / OpenAI),或本地 LM Studio
编译后端
cargo build --package api --release编译前端
cd nextjs && pnpm install && pnpm build启动
# 终端 1:启动 API 服务(端口 3096)
cd rust && cargo run --package api
# 终端 2:启动前端(端口 3000)
cd nextjs && pnpm start- Docker 模式:http://localhost:8088(Caddy 统一代理前端和 API)
- 源码开发模式:前端 http://localhost:3000,API http://127.0.0.1:3096
- API 健康检查:
/api/v1/health
编辑 config/default.yaml 自定义路径和行为:
data_dir: "./data"
souls_dir: "./data/souls"
archive_dir: "./data/archive"
db_path: "./data/baishige.db"
server_host: "127.0.0.1"
server_port: 3096
nextjs_port: 3000├── rust/
│ ├── api/ # Axum HTTP API + WebSocket + SSE
│ ├── possession/ # 辅导引擎(会诊/辩论/递进/费曼学习法等模式)
│ ├── ai-gateway/ # AI 模型网关(Claude/OpenAI/DeepSeek + 路由)
│ ├── registry/ # 师魂注册表 + 全文检索 + 冷启动 boost
│ ├── archive/ # 归档 + 成本追踪 + Token 统计
│ └── foundation/ # 基础设施(SQLite/存储/错误处理)
├── nextjs/ # Next.js 前端
├── config/ # 配置文件
├── data/ # 数据目录(souls/archive/db)
├── deploy/ # Docker 部署配置(Caddyfile, SearXNG, docker-compose)
├── scripts/ # 辅助脚本(start-local.sh 等)
├── install.sh # 源码一键安装脚本
└── start.sh # 开发模式一键启动
- 师魂长驻进程:每个师魂作为独立 tokio task,
tokio::select!竞态监听干预信号 - 三级追问门控:L1 关键词规则(微秒) → L2 trigram Jaccard 相似度(毫秒) → L3 Flash LLM 判定(秒)
- 实时干预注入:碰撞检出后立即通过 intervention 通道打断师魂推理,重新生成带冲突上下文的回应
- 三路径并行:关键词规则 + trigram 语义相似度 + 教学法坐标距离
- 滑动窗口:每 N tokens 捕获片段,冗余抑制,盲区互补检测
- 碰撞类型:矛盾 / 视角差异 / 前提分歧 / 补充挑战 / 冗余 / 盲区互补
- 基于 petgraph 的有向图:前提 → 结论的推导链、跨师魂 Integrates 融合边
- BFS 矛盾检测(O(n),零 LLM 成本)、DFS 前提动摇传播
- 支持图合并、盲区发现
- 5 种拓扑:Minimal / ClusteredParallel / FullMesh / Oppositional / SequentialLadder
- 基于师魂多样性 + 任务复杂度 + 预算约束的决策树
- 30 秒无碰撞自动降级,节省 LLM 成本
- 信誉系统:加权评分 0.3A+0.25(1-C)+0.25P+0.2N,驱动审核优先级/辩论权重/休眠判定
- 师魂杂交:四维方法论签名匹配,自动发现互补师魂对生成融合 prompt
- 师间教学:费曼学习法流程,老师分析盲区 → 出题 → 评分反馈
- 追问不是审问:教员围绕议题追问只有学习者才能提供的具体信息——已知什么、卡在哪里、目标是什么
- 没有裁决:学习者回答即放行,不再用 LLM 判断"是否可以入场"
- 议题整合:学习者的回答被 LLM 融进原始议题,生成更完整的任务描述供会诊使用
- 学习目标澄清:当学习者出现"学不会""没天赋"表述时,温和追问卡点与方法,定位真正的学习障碍
- 教员把关:把关阶段由教员审核师魂组合、分派差异化子任务,
verified_souls为唯一权威
- 全文 + 向量检索:SQLite FTS5 + 余弦相似度向量检索
- 冷启动 boost:summon_count < 3 的师魂获得 relevance 加分,打破马太效应
- 教学法坐标:四维坐标距离搜索(学科领域/认知层次/教学风格/学习目标)
- 工具意识分数:
Ismism(40%) + 工具意识(15%) + 领域(20%) + 关键词(10%) + FT(15%)——self_declare 越具体、"我不做"边界越清楚的师魂越靠前 - 多因子混合匹配:教学法坐标邻近度 + 领域术语命中 + 触发关键词 + 全文相关性 + 实践反馈加权
- Token 消耗追踪:学习效果统计/会话历史/师魂效能表三处可见
- 模型智能路由:根据任务类型自动选择模型和推理强度
- 实时成本统计:含 DeepSeek 缓存折扣预估
- 闭环 vs 低效:未走反馈闭环的会话计为低效学习——只学未练,未形成掌握
- 公式:
(扎实掌握 + 部分掌握 × 0.5) / 总会话 × 100— 数字越高,说明你的学习闭环完成度越高 - 层级:扎实(≥70) / 良好(40-69) / 一般(15-39) / 待提升(<15)
- 设计动机:学习效果指数不是为了优化数字,是为了让你每次打开百师阁时问自己——这次是真的掌握了,还是只是"看过了"?
- 推荐师魂召唤:综合官推荐补充师魂,点击"直接加入会诊"即作为子 agent 输出
- @mention:追问输入框输入
@师魂名触发自动补全,选中后该师魂以完整身份直接回复 - 课前追问:辅导启动前教员追问,学习者的回答被整合进议题描述,注入师魂共用上下文
- 五步综合法:共识 → 分歧 → 盲区 → 工具性分析 → 行动建议
- 工具性分析:各师魂的发言暴露了学习者在这个议题里被什么因素左右——哪些是学科视角差异,哪些是方法选择问题
- 结构性预设承认:每个师魂的召唤 prompt 要求:如果你察觉到自己正在被某个思维定式支配,把它说出来
- SearXNG 集成:自托管元搜索引擎,支持多引擎聚合
- 追问搜索:追问时可开启联网搜索,搜索结果注入师魂的上下文
- 独立搜索页:通过 SearXNG 搜索互联网资源
- 反剧场式旁白:system prompt 层面强制约束,严禁第三人称叙事/动作描写/场景表演
- 角色一致性:师魂的 voice 转化为教学风格而非戏剧表演——"用角色的思维方式思考,不是演角色"
- @mention 师魂召唤:追问框输入 @ 触发师魂名自动补全,已参会师魂优先展示
- ↑ 输入历史:主输入框和追问框支持 ↑↓ 键回显历史
- 双层加载:digest 摘要(5-10 observation)+ 按需展开完整对话
- 消息分叉:从任意用户消息分叉新会话,保留历史上下文
- 卡片下载:师魂回应和综合报告弹窗支持下载 .md
- 思考过程折叠:深度思考模型的推理链默认一行,点击展开
- WebSocket 流式渲染:50ms 批量刷新,useMemo 优化
- 会话重命名:侧栏和会话历史支持内联重命名
- 数据来源:师魂定义基于公开历史人物与其公开著作整理;学习记录为用户自产数据,本地 SQLite 存储,不上传;演示/评测使用项目自带模拟数据。
- 隐私保护:API Key 仅存于用户本地配置文件;会话数据可删除;最小化收集。
- 边界声明:系统定位为学习辅导辅助工具,不替代教师、学校的最终教学评价;AI 输出可能存在幻觉,请结合教材与教师意见判断。
- 详细说明见
docs/competition/数据来源与合规说明.md。
AGPL-3.0(详见 LICENSE)



