tutor-gpt
基于 Theory of Mind 推理的自适应 AI 家教,能读懂学习者的知识缺口并动态调整教学内容
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 Theory of Mind 推理的自适应 AI 家教,能读懂学习者的知识缺口并动态调整教学内容
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:你是一个正在备战高考的高三学生,数学复习到三角函数时,突然卡在了一道综合题上。你打开电脑向 AI 助手求助,但发出去的问题本身就已经带着你的误解——你以为自己不懂的是"辅助角公式",但实际上你真正不懂的是前两章的"相位"概念。AI 照着你错误的理解继续讲解,你越听越糊涂。
Tutor-GPT 正是为了解决这个问题而生。它不仅仅回答问题,它会先停下来,思考"这个学生为什么会问这个问题"——这就是论文标题所说的 Theory of Mind(心理 Theory)。它的核心理念是:在回答之前,先推理学习者的心理状态和知识缺口,然后动态修改自己的提示词,生成真正对症下药的讲解。

图1:Tutor-GPT 界面预览,支持深色模式、文件上传、实时流式对话
Tutor-GPT 起源于 Plastic Labs 团队发表的一篇学术论文(arXiv:2310.06983)。论文的核心发现是:传统 AI 家教系统只是被动响应问题,而加入"心理 Theory"推理后,AI 能够主动识别学习者的误解模式,在响应前先推断"学生真正不理解的是什么"。
这一发现直接驱动了 Tutor-GPT 的产品化。Plastic Labs 将其商业化部署为 Bloom(bloombot.ai),名字源自 Benjamin Bloom 的"Two Sigma Problem"——即优秀家教能让普通学生的表现提升两个标准差。团队希望用 AI 技术让每一个普通学生都能获得"一对一优秀家教"的体验。
开源版本的 Tutor-GPT 就是 Bloom 的底层技术栈,任何人都可以下载源码,部署自己的 AI 家教实例。
Tutor-GPT 的对话流程不是简单的"问答",而是一个三层递进推理链:
当用户发送消息时,系统首先调用 LLM 生成一段"内部思考"(Thought)。这段思考不展示给用户,而是作为后续决策的依据。在 utils/ai/index.ts 中,这段思考通过流式方式实时输出,底层使用 Vercel AI SDK 的 streamText 实现,支持通过 OpenRouter 接入任意主流 LLM 模型。
思考过程用特殊分隔符 ␁(Unicode 记录分隔符)将输出切分为三个语义段:
Honcho(honcho.dev)是 Plastic Labs 自研的用户画像建模服务,专门为 AI 应用设计。每个用户在 Honcho 中有独立的 profile,系统会维护一个长期记忆,记录用户的历史提问模式、知识薄弱点、感兴趣的概念。
在对话过程中,Honcho 实时查询用户的画像数据,生成个性化上下文。团队在 README 中强调:"Honcho 用于构建稳健的用户表征,为每个用户创造个性化体验"。这意味着 Tutor-GPT 不是每次对话都从零开始,它记得你上次卡在哪里,理解你的学习轨迹。
基于第一层的推理结果和第二层的用户画像,系统构建最终响应 prompt,调用 LLM 生成对学习者友好的解答。解答经过精心设计,支持 Markdown 渲染(包含数学公式 KaTeX、代码高亮)和多轮上下文理解。
项目采用 Next.js 15 App Router 架构,是典型的现代全栈 React 应用:
| 技术 | 用途 |
|---|---|
| Next.js 15 App Router | SSR/CSR 混合渲染,API Routes |
| React 19 + TypeScript | 类型安全的 UI 开发 |
| Tailwind CSS + shadcn/ui | 原子化 CSS 组件库 |
| SWR | 客户端数据获取与缓存 |
| React Markdown + KaTeX | 数学公式与 Markdown 渲染 |
| React Resizable Panels | 可拖拽的分栏布局 |
前端的核心页面在 app/Chat.tsx(41KB),包含了完整的聊天 UI 逻辑:消息列表、文件上传(PDF/TXT)、流式响应渲染、表情反应(Emoji reactions)、深色模式切换、用户认证状态管理。文件上传通过 FileUpload 组件支持,最大 5MB,支持 PDF 解析(Mistral OCR API)和纯文本。
对话后端位于 app/api/chat/route.ts,核心逻辑:
Response 构造函数直接返回 SSE(Server-Sent Events),Content-Type: text/event-stream,实现打字机效果的实时输出@mistralai/mistralai SDK 解析Schema 定义在 schema.sql,核心表结构:
conversations:对话会话元信息messages:消息记录(支持 JSONB 存储元数据)thoughts:AI 内部推理记录(存储 Thought 层输出)honcho_messages / pdf_messages:个性化引擎和 PDF 解析的中间结果summaries:对话摘要(用于长对话压缩上下文)通过 Supabase SSR 客户端(@supabase/ssr)实现服务端认证和客户端数据访问。
| 服务 | 用途 |
|---|---|
| OpenRouter | LLM API 网关,接入 GPT-4o、Claude、DeepSeek 等 |
| Honcho | 用户画像与个性化引擎(Plastic Labs 自研) |
| Supabase | PostgreSQL 数据库 + 认证 |
| Stripe | 付费订阅(可选,通过 NEXT_PUBLIC_STRIPE_ENABLED 开关) |
| Langfuse | LLM 可观测性(追踪 Token 消耗、延迟、成本) |
| Arcjet | 机器人检测与速率限制 |
| Sentry | 前端/后端错误监控 |
| Vercel | 托管部署(OSS 赞助计划) |
项目提供了多阶段 Dockerfile(基于 node:18-alpine),支持生产级镜像构建。Dockerfile 逻辑清晰:
deps 阶段:安装 pnpm 依赖(pnpm-lock.yaml frozen install)builder 阶段:运行 next build 编译 Next.js 应用runner 阶段:使用非 root 用户运行 node server.js不过值得注意的是,docker-compose.yaml 文件大小为 0 字节(未提供),意味着项目没有提供一键启动方案,需要自行编写 docker-compose 配置,将 Next.js 容器、Supabase(可选本地)、以及各项 API Key 配置整合起来。
.env.template 列出了 20+ 个必需/可选环境变量,核心依赖包括:
NEXT_PUBLIC_SUPABASE_URL + NEXT_PUBLIC_SUPABASE_ANON_KEY + SUPABASE_SERVICE_ROLE_KEY + JWT_SECRETAI_API_KEY(OpenRouter)、AI_BASE_URL、MODELHONCHO_URL + HONCHO_APP_NAME部署难点不在于 Docker 构建本身,而在于外部服务的申请与配置。如果你已经有 Supabase 和 OpenRouter 账号,理论上 30-60 分钟可以完成部署;如果需要全新注册和配置,可能需要半天到一天。
Tutor-GPT 代表了一个重要趋势:AI 应用从"通用助手"向"垂直专家"的转型。传统的 GPT 类助手对所有人都是同一套 prompt,而 Tutor-GPT 通过 Theory of Mind + 用户画像引擎,让 AI 能够针对每个学习者的具体情况进行自适应教学。
从 Benjamin Bloom 的 Two Sigma Problem 出发——优秀的一对一家教能让普通学生成绩提升两个标准差。Tutor-GPT 团队认为,AI 有潜力让这种个性化教学大规模普及,成本从"每小时数百元"降到趋近于零。
目前 Tutor-GPT(商业版 Bloom)已开放使用,如果你只是想体验功能,直接访问 bloombot.ai 会比自建更省事;如果你想研究其技术实现或在本地部署,开源代码足够完整。