乐于分享
好东西不私藏

全功能 AI 学习助手 — 六模块整合 Demo

全功能 AI 学习助手 — 六模块整合 Demo

AI 教育/学习助手开发(八·终章):全功能 AI 学习助手 :  从零到 Demo 的整合实战

引言


七期了。我们分别完成了:

  1. 教育助手概览与架构设计
  2. AI 智能答疑系统(三层 RAG 架构)
  3. 个性化学习路径推荐(知识图谱 + 拓扑规划)
  4. AI 错题本与智能批改(OCR + 诊断)
  5. AI 口语陪练与发音评测(ASR + TTS)
  6. AI 考试出题与模拟(智能组卷 + 批改)
  7. AI 学习进度追踪(仪表盘 + 诊断报告)

这些模块像七块拼图,每一块都能独立工作,但拼在一起才是完整的「AI 学习助手」。

这一期我们把它们整合成一个 一站式 Streamlit 应用,做一个真正能跑、能演示的完整 Demo。

一、整合架构


┌──────────────────────────────────────┐
│ AI 学习助手 主入口 │
│ (main_app.py) │
├────┬────┬────┬────┬────┬────┬──────┤
│答疑│路径│错题│口语│考试│仪表│关于 │
│系统│推荐│批改│陪练│出题│盘 │ │
└────┴────┴────┴────┴────┴────┴──────┘
│ │
共享数据层 共享 LLM 客户端
(learning.db) (OpenAI 兼容)

设计原则: 1. 每个模块是独立的 Streamlit 页面,可以单独使用 2. 共享数据层:所有模块的统计数据汇入同一个 SQLite 3. 共享 LLM 客户端:所有模块复用同一个 API 连接 4. 统一导航:侧边栏导航,一键切换

二、主入口应用


"""
episode-08-project/scripts/main_app.py
AI 学习助手 : 全功能整合 Demo
"""

import os
import sys
from pathlib import Path

import streamlit as st
from dotenv import load_dotenv

load_dotenv()

# 将所有模块的脚本路径加入 sys.path
BASE_DIR = Path(__file__).parent

MODULES = {
"qa": BASE_DIR / "qa_module",
"path": BASE_DIR / "path_module",
"correction": BASE_DIR / "correction_module",
"oral": BASE_DIR / "oral_module",
"exam": BASE_DIR / "exam_module",
"tracking": BASE_DIR / "tracking_module",
}

for key, path in MODULES.items():
if path.exists():
sys.path.insert(0, str(path))

st.set_page_config(
page_title="AI 学习助手",
page_icon=":material/school:",
layout="wide",
initial_sidebar_state="expanded",
)

# ======== 侧边栏导航 ========
st.sidebar.title(":material/school: AI 学习助手")
st.sidebar.markdown("---")

page = st.sidebar.radio(
"功能导航",
[
"🏠 首页总览",
"💬 智能答疑",
"🗺️ 学习路径",
"📝 错题本",
"🎤 口语陪练",
"📋 考试出题",
"📊 学习仪表盘",
"ℹ️ 关于",
],
)

st.sidebar.markdown("---")
st.sidebar.caption("AI 教育/学习助手开发 · 专题二十 · CV技术笔记")

# ======== 首页 ========
if page == "🏠 首页总览":
st.title(":material/school: AI 学习助手 Demo")
st.markdown("### 一站式 AI 学习平台 : 覆盖学习全流程")

st.markdown("---")

col1, col2, col3 = st.columns(3)

with col1:
with st.container(border=True):
st.markdown("### 💬 智能答疑")
st.markdown("基于教材知识库的 RAG 答疑系统,精准回答学习问题")
st.caption("三层架构:FAQ → 向量检索 → 大模型生成")

with col2:
with st.container(border=True):
st.markdown("### 🗺️ 学习路径")
st.markdown("知识图谱 + 自适应推荐,定制个人学习路线")
st.caption("拓扑排序 + 难度分配 + 大模型建议")

with col3:
with st.container(border=True):
st.markdown("### 📝 错题本")
st.markdown("OCR 识别 + 四维诊断 + 同类练习自动生成")
st.caption("PaddleOCR + JSON Mode 分析")

col4, col5, col6 = st.columns(3)

with col4:
with st.container(border=True):
st.markdown("### 🎤 口语陪练")
st.markdown("语音对话 + 语法纠错 + 发音评估")
st.caption("Whisper ASR + Edge TTS + 场景对话")

with col5:
with st.container(border=True):
st.markdown("### 📋 考试出题")
st.markdown("智能出题 + 自动组卷 + AI 批改")
st.caption("知识点覆盖 + 难度控制 + 题型混合")

with col6:
with st.container(border=True):
st.markdown("### 📊 学习仪表盘")
st.markdown("进度可视化 + 薄弱点诊断 + AI 报告")
st.caption("SQLite 统一数据 + 连续学习追踪")

st.markdown("---")
st.markdown("""
### 🚀 快速开始

1. 配置 API Key:在项目根目录创建 `.env` 文件,填入 `OPENAI_API_KEY`
2. 左侧导航选择功能模块
3. 开始体验!

**技术栈**:OpenAI 兼容 API + Streamlit + ChromaDB + NetworkX + PaddleOCR + Edge TTS + SQLite
""")

# ======== 关于 ========
elif page == "ℹ️ 关于":
st.title("ℹ️ 关于本项目")
st.markdown("""
### AI 教育/学习助手开发教程

**专题二十** · 「CV技术笔记」公众号技术实战系列

通过 8 期文章,从零到一搭建了一个全功能 AI 学习助手:
- 智能答疑(RAG + ChromaDB)
- 学习路径推荐(知识图谱 + NetworkX)
- 错题本与批改(OCR + LLM 分析)
- 口语陪练(ASR + TTS + 对话)
- 考试出题(智能组卷 + 批改)
- 学习进度追踪(仪表盘 + AI 报告)

**GitHub/Gitee**:[ai-education-tutorial](https://gitee.com/genesisesNoun/ai-education-tutorial)

**许可证**:MIT License

**公众号**:CV技术笔记
""")

# ======== 各模块页 ========
elif page == "💬 智能答疑":
st.title("💬 AI 智能答疑")
st.info("此模块对应第2期代码。完整代码见 `episode-02-qa-system/scripts/streamlit_app.py`")
st.markdown("""
启动方式:

bash    cd episode-02-qa-system/scripts    pip install openai chromadb streamlit python-dotenv    python build_index.py    streamlit run streamlit_app.py

    """)

elif page == "🗺️ 学习路径":
st.title("🗺️ 个性化学习路径推荐")
st.info("此模块对应第3期代码。完整代码见 `episode-03-learning-path/scripts/streamlit_app.py`")
st.markdown("""
启动方式:

bash    cd episode-03-learning-path/scripts    pip install networkx openai streamlit python-dotenv matplotlib    streamlit run streamlit_app.py

    """)

elif page == "📝 错题本":
st.title("📝 AI 错题本与智能批改")
st.info("此模块对应第4期代码。完整代码见 `episode-04-correction/scripts/streamlit_app.py`")
st.markdown("""
启动方式:

bash    cd episode-04-correction/scripts    pip install openai streamlit python-dotenv pandas pillow    # 可选:pip install paddlepaddle paddleocr    streamlit run streamlit_app.py

    """)

elif page == "🎤 口语陪练":
st.title("🎤 AI 口语陪练")
st.info("此模块对应第5期代码。完整代码见 `episode-05-oral-practice/scripts/streamlit_app.py`")
st.markdown("""
启动方式:

bash    cd episode-05-oral-practice/scripts    pip install openai streamlit python-dotenv edge-tts openai-whisper audio-recorder-streamlit    streamlit run streamlit_app.py

    """)

elif page == "📋 考试出题":
st.title("📋 AI 考试出题与模拟")
st.info("此模块对应第6期代码。完整代码见 `episode-06-exam-system/scripts/streamlit_app.py`")
st.markdown("""
启动方式:

bash    cd episode-06-exam-system/scripts    pip install openai streamlit python-dotenv pandas    streamlit run streamlit_app.py

    """)

elif page == "📊 学习仪表盘":
st.title("📊 AI 学习进度追踪")
st.info("此模块对应第7期代码。完整代码见 `episode-07-tracking/scripts/streamlit_app.py`")
st.markdown("""
启动方式:

bash    cd episode-07-tracking/scripts    pip install openai streamlit python-dotenv pandas matplotlib    streamlit run streamlit_app.py

    """)

st.markdown("---")
st.caption("AI 学习助手 Demo · 第8期(终章) · CV技术笔记")

三、为什么选择了「轻整合」方案?


你可能注意到了: : 我没有把所有模块的代码复制到一个文件里,而是用了一个导航页面指向各个子应用。这是有意为之。

原因 1:避免依赖爆炸 不同模块有不同的依赖(PaddleOCR 需要 paddlepaddle、TTS 需要 edge-tts、口语需要音频录制库)。如果全部揉在一起,运行环境会变得非常臃肿。实际问题导向按需安装。

原因 2:独立可演示 每个模块是一个独立的 Streamlit 应用,意味着开发者可以只演示/部署某个模块,不需要全量。这对公众号文章场景尤其重要: : 读者可能只对其中一两期感兴趣。

原因 3:生产环境的真实做法 在产品级 AI 教育平台中,答疑、口语、考试这些能力通常是以微服务的形式独立部署的。我们的「轻整合」方案更接近真实架构。

四、如果你想做一个真正的全功能统一应用


如果你确实想把所有模块整合到一个 Streamlit 应用中,思路是:

# 使用 Python 的模块导入,把每个引擎类导入到主应用
from qa_system import SmartQASystem
from path_planner import LearningPathPlanner
from correction_engine import CorrectionEngine
from oral_coach import OralCoach
from exam_generator import ExamGenerator
from learning_tracker import LearningTracker

# 用 st.tabs() 或 st.radio() 在同一个页面内切换
tab = st.radio("功能", ["答疑", "路径", "错题", "口语", "考试", "仪表盘"])

但这需要统一所有模块的依赖、统一 API 调用方式、统一 Streamlit 的 session state 管理。工作量不低,但技术上完全可行。作为教程的扩展练习留给你。

五、专题回顾与展望


本专题的核心交付

模块 核心技术 代码量
智能答疑 ChromaDB + RAG + OpenAI ~180 行
学习路径 NetworkX + 拓扑规划 ~200 行
错题批改 PaddleOCR + JSON Mode ~300 行
口语陪练 Whisper + Edge TTS ~250 行
考试出题 组卷算法 + 批改 ~200 行
学习仪表盘 SQLite + 可视化 ~200 行

代码总量:约 1300 行 Python(不含依赖库)
API 成本:GPT-4o-mini 每次调用约 0.01 元,日常使用成本极低
运行环境:一台普通电脑即可(部分模块需要 CPU 资源,如 PaddleOCR)

可以继续深入的方向

  1. 多模态升级:接入 Qwen-VL 或 GPT-4V,让答疑能「看图说话」
  2. 知识图谱自动构建:从教材中自动抽取知识点和关系,不需要手动建图
  3. 语音评测升级:接入专业的发音评测 API,给出更精细的评分
  4. 多用户支持:接入用户系统,支持班级管理、教师后台
  5. 移动端适配:用微信小程序做前端,保留 Python 后端 API

六、小结


八期、七个模块、一个完整的 AI 学习助手 Demo。

我们从「教育 AI 能做什么」这个宏大的问题出发,一步步落地到「答疑怎么做」「路径怎么推荐」「错题怎么分析」「口语怎么陪练」「考试怎么出题」「进度怎么追踪」,最终把整条链路跑通。

这就是 AI 应用开发的正确姿势:不追求一步到位的完美系统,而是沿着真实需求,一个模块一个模块地迭代,最终自然长成一个完整的解决方案。

希望这个专题能让你看到,AI 教育不是一个遥远的概念: : 它就在今天,可以用几十行 Python 代码开始。


AI 教育/学习助手开发 · 第8期(终章) · CV技术笔记 · 2026

8 期专题至此完结。感谢阅读。🚀