项目

Zrobot:能语音讲题、同步写板书的 AI 学习平板

围绕拍题、作业批改和实时讲解组织学习流程,将语音对话与板书生成分流,兼顾讲话节奏和可回看的推导内容。

更新于

目录

一段语音解释很难承载所有解题信息。学生可以听见老师在说什么,但公式、步骤和几何关系需要留在屏幕上,才能回看和比较。相反,如果只把完整解答铺成一页文字,学生又需要自己判断哪里没懂,再重新组织问题。

Zrobot 把这两种交互放在一起:学生可以拍下题目,听 AI 讲解并继续追问;屏幕则显示与讲解相关的板书。作业批改、题目记录和学习记录围绕同一个学生身份组织。它是一套 Android 学习平板应用与后端系统,设计从 2026 年 1 月展开。

Zrobot 在 Android 平板上的讲解与板书界面
作者保留的短演示视频截帧。画面有反光与失焦,仅用于呈现实际设备和界面形态,不据此判断讲解准确性或响应速度。

从桌面上的题目进入学习

应用入口按学生当下要做的事情区分:写作业、题目答疑、作业检查和 AI 老师。拍题入口连接摄像头,经过取景与裁剪后将题目交给识别和解答流程;作业检查则面向整份作业,批改结果可以进入详情与记录。这样的区分让“我想问一道题”和“我想检查已经写完的作业”不必共用一套含糊的操作。

摄像头也不只是手机自拍摄像头的默认能力。移动端包含 USB 摄像头的发现、权限、预览与选择逻辑,为桌面学习设备的取景方式提供支持;音频端另有对外部采集与原生 RTC 接口的处理。让设备看清纸面、让声音从正确的输入进入系统,都是学习流程的一部分。

账户层区分家长与学生,通过绑定关系连接学习记录。图片和媒体文件由对象存储承接,后端组织作业、题目与会话。这些记录使一次拍题之后的解释有机会被找回,而不是结束语音后只留下一个已经消失的答案。

语音基础设施与教学判断分开

实时语音不只涉及语音识别、文本生成和语音合成三个接口。回声、弱网络、打断、声音播放以及会话结束的时机,都可能影响学生能否自然追问。Zrobot 的设计经历了自行串接语音服务、RTC 接入,再到接入 AIConversation 的调整。

后续架构将实时媒体处理交给语音基础设施,把教学上下文、模型回复、记忆和板书保留在自己的后端。服务通过兼容的模型入口请求流式回答,回答中的可说文本进入语音链路;平板另外接收板书事件。这样可以更换或调整教学逻辑,而不必同时重写整条音频传输链路。

会话使用临时身份把媒体侧任务和后端对话关联起来。一次语音通话与其中每一轮回答不是同一个层级:前者负责持续连接,后者需要自己的标识,以便知道某张板书对应哪一次提问,也便于在打断后区分仍然有效与已经过期的内容。

为什么板书不能全部等另一个 Agent 画完

早期设计考虑由教师模型发出绘图指令,再调用板书 Agent。这个分工清楚,但如果每一段讲解都必须等待第二次模型生成,语音的节奏就会被板书拖慢。后来的版本进一步区分了板书复杂度。

普通板书由主模型随讲解一起输出。流中使用专门标记区分要说的句子与要显示的内容,解析器把板书部分从语音文本中分离,再立即推送到客户端。步骤标题、重点、高亮、提示框与公式,不需要再调用一个模型“重新写一遍”。

对于 SVG 图形和 HTML 内容,主模型提供生成指令,由独立任务处理。这些任务可以晚于语音完成,不阻塞主要回答,并设置超时。这里接受了一个明确取舍:复杂图形与说话不必每个瞬间严格同步,但不能为了等图形,把整个讲解停住。

因此,系统不是给每个输出格式都配一个同等地位的 Agent,而是按生成成本和交互时效分工。简单板书尽量跟随主回答,复杂视觉内容异步生成,平板根据内容类型选择渲染方式。

板书需要可组织的内容,也需要轮次身份

发送到客户端的板书事件包含会话、轮次、段落、内容类型和追加或替换方式。普通板书与 SVG 可以追加到已有内容中,完整 HTML 内容可以替换对应区域。客户端据此展示带编号的步骤、不同层级的标题、重点文字、提示块、公式和图形,而不是把所有结果当成一张图片。

这样的结构有两个作用。首先,讲解可以逐段到达,学生不必等整份答案完成后才看见第一步。其次,视觉内容能够与对话状态对应:当学生打断当前讲解并提出新问题,系统有轮次标识可以标记旧回答过期,客户端也有依据区分旧板书与新回答。

对异步任务尤其如此。旧问题的图可能比新问题的文字更晚到达,如果只按到达顺序显示,屏幕就会倒退到已经结束的话题。架构中的轮次与取消机制,处理的正是这种“生成完成”和“现在仍然相关”之间的区别。它也是语音与视觉分流后必须补上的协调工作。

讲解、板书和记录共同构成一次学习

Zrobot 的前端使用 React Native 组织 Android 界面,原生模块承接摄像头与实时音频等设备能力;后端用 FastAPI 组织业务接口、对话和板书事件,数据库与缓存分别承担长期记录和实时状态。

这套拆分服务于一种具体的学习体验:题目先从纸面进入系统,讲解通过声音展开,关键推导留在屏幕上,学生可以随时追问。图片识别、语音传输、教学回答和板书渲染不需要使用同一种技术,但必须围绕同一道题、同一轮对话工作。

这里的设计重点也不是让屏幕尽可能丰富。需要留下的是帮助学生回看推导的内容,需要保持流畅的是可以继续追问的对话。当学生看着某一步说“这里为什么这样”,系统应有足够清楚的题目、会话与板书上下文,继续解释这一步。

所有项目

AI 助手与对话数据

团子是 AI 角色,不是本人。掷骰子等开场互动使用预先整理的公开资料,不调用模型。实时对话是否可用,以聊天框中的状态说明为准。

启用实时对话后,发送问题会将问题、当前文章的标识,以及服务器保存的近期对话与早期对话目录发送到本站后端;后端会将这些内容和检索到的公开资料发送给阿里云百炼生成回答。首次建立会话时使用 Cloudflare Turnstile 验证访客,无需注册。不要输入密钥或私人信息。模型与验证服务的数据处理适用各服务商的政策。

浏览器使用当前标签页的会话存储保存最近十条互动,便于在文章和对话间返回;清空对话会清除这些本地记录。服务器会话有效期为一小时,最多保存二十轮已完成对话;最近三轮直接作为上下文,较早记录按需读取。过期记录在后续请求时清理。“重新开始”会放弃当前会话,但不会立即删除服务器上的记录。在同一标签页的 HTTPS 页面间切换时,一小时会话凭证保存在该标签页的会话存储中,供后端恢复近期上下文和早期对话目录;它不是模型服务的 API 密钥。凭证过期或存储不可用时,需要重新验证,之前显示的记录不会自动进入新会话。

服务器另保存额度、预算和短期请求限制记录;连接标识经过带密钥的哈希处理。应用不额外记录问题日志,但服务器会话存储中包含上述对话文本。模型请求失败时,仅记录随机请求编号、错误类别、处理阶段、调用次数及是否已有部分输出,不记录问题、回答、IP 地址或密钥。AI 只能使用网站提供的公开资料工具,不能访问个人文件、私人聊天或密钥。来源链接不保证每句话准确;请检查原文,并区分作者观点、引用观点与模型推断。

嗨,我在。

不知道从哪里开始?我们可以掷个骰子。

我是 AI 角色,不是煜欣本人。当前可以玩开场互动;自由对话尚未接通。