Skip to content

Latest commit

 

History

83 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

百师阁

向一整个教研组借脑,但脑子和笔,永远在你手里。

License: AGPL-3.0 Rust Next.js Docker GOAI 无界应用 · AI+教育赛道

百师阁是一个 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 联网搜索集成

快速开始

Windows 用户(MSI 安装包)

  1. GitHub Releases 下载安装包
  2. 双击安装,按向导操作
  3. 安装完成后,从开始菜单启动「百师阁」
  4. 首次启动前,编辑安装目录下的 data/apikeys.json,填入 API Key
  5. 浏览器自动打开 http://localhost:3000

macOS / Linux 用户

方式一:Docker 一键启动(推荐)

前置条件DockerOrbStack

# 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 -d

方式二:源码安装

bash install.sh

脚本会自动完成:依赖检查、数据目录初始化、后端编译、前端构建、启动脚本生成。

安装完成后用开发模式启动:

bash start.sh

运行方式

方式 A:本地算力(LM Studio — 推荐,零 API 费用)

无需云端 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/v1Docker 模式填入 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 按量付费)

方式 B:云端 API(DeepSeek / Claude / OpenAI)

配置 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

访问

配置

编辑 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)
  • 设计动机:学习效果指数不是为了优化数字,是为了让你每次打开百师阁时问自己——这次是真的掌握了,还是只是"看过了"?

师魂召唤与 @mention

  • 推荐师魂召唤:综合官推荐补充师魂,点击"直接加入会诊"即作为子 agent 输出
  • @mention:追问输入框输入 @师魂名 触发自动补全,选中后该师魂以完整身份直接回复
  • 课前追问:辅导启动前教员追问,学习者的回答被整合进议题描述,注入师魂共用上下文

多学科综合与工具性分析

  • 五步综合法:共识 → 分歧 → 盲区 → 工具性分析 → 行动建议
  • 工具性分析:各师魂的发言暴露了学习者在这个议题里被什么因素左右——哪些是学科视角差异,哪些是方法选择问题
  • 结构性预设承认:每个师魂的召唤 prompt 要求:如果你察觉到自己正在被某个思维定式支配,把它说出来

联网搜索

  • SearXNG 集成:自托管元搜索引擎,支持多引擎聚合
  • 追问搜索:追问时可开启联网搜索,搜索结果注入师魂的上下文
  • 独立搜索页:通过 SearXNG 搜索互联网资源

输出质量控制

  • 反剧场式旁白:system prompt 层面强制约束,严禁第三人称叙事/动作描写/场景表演
  • 角色一致性:师魂的 voice 转化为教学风格而非戏剧表演——"用角色的思维方式思考,不是演角色"

前端体验

  • @mention 师魂召唤:追问框输入 @ 触发师魂名自动补全,已参会师魂优先展示
  • ↑ 输入历史:主输入框和追问框支持 ↑↓ 键回显历史
  • 双层加载:digest 摘要(5-10 observation)+ 按需展开完整对话
  • 消息分叉:从任意用户消息分叉新会话,保留历史上下文
  • 卡片下载:师魂回应和综合报告弹窗支持下载 .md
  • 思考过程折叠:深度思考模型的推理链默认一行,点击展开
  • WebSocket 流式渲染:50ms 批量刷新,useMemo 优化
  • 会话重命名:侧栏和会话历史支持内联重命名

数据与合规

  • 数据来源:师魂定义基于公开历史人物与其公开著作整理;学习记录为用户自产数据,本地 SQLite 存储,不上传;演示/评测使用项目自带模拟数据。
  • 隐私保护:API Key 仅存于用户本地配置文件;会话数据可删除;最小化收集。
  • 边界声明:系统定位为学习辅导辅助工具,不替代教师、学校的最终教学评价;AI 输出可能存在幻觉,请结合教材与教师意见判断。
  • 详细说明见 docs/competition/数据来源与合规说明.md

License

AGPL-3.0(详见 LICENSE

About

百师阁 — AI+教育多师并行辅导系统(GOAI 无界应用大赛 · AI+教育赛道)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages