AIGC Visual Math 是一个面向中小学平面几何题的移动端数学解析应用。应用支持拍照或从相册导入题目图片,框选题目区域后调用 OCR 与大模型完成题目清洗、启发式解析、动态几何交互生成,并支持历史记录、收藏、动画回放、分步拆解和自由探索。
- 拍照搜题:调用系统相机拍摄纸质题目、试卷或课堂材料。
- 相册导入:从相册选择电子版题目截图。
- 题目框选:对拍摄或导入的图片进行题目区域裁剪,减少 OCR 干扰。
- OCR 清洗:使用 Vivo OCR 获取原始文字,再由大模型整理为规范数学题干。
- 启发式解析:大模型输出结构化 JSON,生成 Markdown/LaTeX 解析内容。
- 动态交互:大模型输出受限 JSXGraph 代码或
geometry_spec,在 WebView 中渲染几何交互图。 - 分步拆解:按关键步骤展示构造、折叠、拉直、验证等过程。
- 动画回放:通过
window.setAnimProgress(ratio)控制动点从初始状态移动到目标状态。 - 自由探索:允许用户拖动指定动点观察几何关系变化。
- 历史与收藏:保存题目图片、识别文本、解析内容、交互代码和步骤名称。
- 调试端口:应用启动后自动开启本机调试服务,便于热推送解析、交互代码和步骤名。
- Flutter / Dart
- Android 包名:
com.aigc.visualmath - Vivo OCR 与 Vivo 大模型接口
- WebView 渲染本地 MathJax 与 JSXGraph
- SharedPreferences 保存模型、Prompt 与调试配置
- 本地文件存储历史记录与题目图片
应用的大模型调用分为三层:
-
OCR 清洗模型
- 输入:Vivo OCR 返回的原始文本。
- 输出:规范数学题干,统一 LaTeX 表达。
- 入口:
ApiService.askLLM(...)
-
数学解析模型
- 输入:清洗后的题目文本。
- 输出:严格 JSON,包含:
latex_steps:解析内容,标题以###开头,并包含### 【交互探索指南】。key_steps:3 到 5 个分步按钮名称。jsx_guidance:给交互生成模型的绘图约束说明。
- 入口:
ApiService.askMathLLM(...)
-
动态交互模型
- 输入:题目文本与
jsx_guidance。 - 输出:
geometry_spec或受限 JSXGraph 代码。 - 运行约束:
- 使用应用注入的
board,不能重新初始化 JSXGraph 容器。 - 必须实现
window.setStep(stepIndex)。 - 必须实现
window.setAnimProgress(ratio)。 - 文字元素固定,不参与拖动。
- 动点必须是真实可见点或 glider,动画必须改变可见几何对象。
- 使用应用注入的
- 入口:
ApiService.askJsxLLM(...)
- 输入:题目文本与
当交互代码运行失败时,应用会调用 ApiService.repairJsxLLM(...) 对 JSXGraph 代码进行修复。
-
lib/api_service.dart- Vivo OCR 请求
- Vivo 大模型请求
- OCR 清洗、数学解析、交互生成、交互修复接口
-
lib/about_page.dart- 默认 Prompt
- 模型选择
- Vivo 通道配置
- 隐藏开发者设置入口
-
lib/result_page.dart- OCR、清洗、解析、交互生成的主流程编排
- MathJax 解析渲染
- JSXGraph 交互渲染
- 调试推送覆盖逻辑
- 历史与收藏保存
-
lib/geometry_spec_compiler.dart- 将模型输出的结构化
geometry_spec编译为受控 JSXGraph 代码 - 降低模型直接生成 JavaScript 的不稳定性
- 将模型输出的结构化
-
lib/debug_server.dart- 应用启动时开启
127.0.0.1:8080调试服务 - 支持分别推送解析内容、交互代码和分步按钮名称
- 应用启动时开启
-
lib/sandbox_page.dart- App 内调试页面
- 可本地预览解析内容和 JSXGraph 交互效果
-
lib/home_page.dart- 首页拍照、相册导入、使用指引、历史、收藏入口
-
lib/crop_page.dart- 图片裁剪与题目框选
-
lib/library_page.dart- 历史记录与收藏页面
-
lib/saved_problem.dart、lib/saved_problem_store.dart- 题目图片、解析内容、交互代码和收藏状态的本地持久化
应用启动后会自动开启本机调试端口。使用 USB 调试连接手机后,在电脑执行:
adb forward tcp:8080 tcp:8080然后在浏览器打开:
http://127.0.0.1:8080/
调试页支持:
- 全局保存模型与 Prompt 配置。
- 只推送解析内容。
- 只推送交互代码。
- 只推送分步按钮名称。
- 同步覆盖 App 内调试页和已打开的解析页。
安装 Flutter SDK 后,在项目根目录执行:
flutter pub get
flutter run构建 Android release APK:
flutter build apk --release构建产物位置:
build/app/outputs/flutter-apk/app-release.apk
默认模型为:
qwen3.5-plus
设置页支持以下模型选项:
qwen3.5-plus
Volc-DeepSeek-V3.2
Doubao-Seed-2.0-pro
请在隐藏设置中配置自己的 Vivo AppID 与 API Key。版本号连续点击六次可开启隐藏开发者设置。
如果只提交“核心功能调用大模型的代码包”,建议至少包含:
lib/api_service.dart
lib/about_page.dart
lib/result_page.dart
lib/geometry_spec_compiler.dart
如果需要可复现调试与演示,建议补充:
lib/debug_server.dart
lib/sandbox_page.dart
pubspec.yaml
assets/web/tex-svg.js
如果需要完整运行项目,则提交整个 Flutter 工程。
- 支持拍照与相册导入。
- 支持题目框选。
- 支持 OCR 清洗、数学解析、动态交互生成。
- 支持横屏与竖屏展示。
- 支持动画回放、分步拆解、自由探索。
- 支持历史记录与收藏。
- 支持调试端口热推送。