Skip to content

About

一个基于 Dify Chatflow 的错题学习应用。项目通过两个共享 MySQL 错题库的工作流,完成“图片/PDF 错题采集 → 结构化入库 → 历史错题查询 → 同类型练习题生成”的完整链路。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dify 多模态错题智能学习助手

一个基于 Dify Chatflow 的错题学习应用。项目通过两个共享 MySQL 错题库的工作流,完成“图片/PDF 错题采集 → 结构化入库 → 历史错题查询 → 同类型练习题生成”的完整链路。

当前仓库提供可导入的 DSL、数据库脚本、示例图片和实际运行截图。项目在本地 Dify 环境完成验证,仓库不包含任何模型密钥或数据库凭据。

功能概览

1. 错题收集助手

  • 接收试卷图片或 PDF 文件;
  • 使用多模态模型识别题目、学生答案和正确答案;
  • 提取学科、题型、难度、答案及解析等结构化字段;
  • 通过迭代节点逐题写入 MySQL;
  • 在对话界面生成可阅读的错题整理报告。

2. 错题智能学习助手

  • 按时间、学科、题型和难度查询历史错题;
  • 将数据库查询结果转换为对话可读内容;
  • 根据历史错题生成指定数量的同类型练习题;
  • 输出练习题、参考答案与解析,并支持 Markdown/PDF 结果处理。

系统流程

flowchart LR
    A["错题图片 / PDF"] --> B["多模态识别"]
    B --> C["结构化错题提取"]
    C --> D["迭代写入 MySQL"]
    D --> E[("error_questions")]
    E --> F["条件查询历史错题"]
    F --> G["生成同类型练习题"]
    G --> H["题目、答案与解析"]
Loading

两个 Chatflow 通过同一张 dify_database.error_questions 表协作,彼此不需要直接调用。

运行效果

错题采集工作流

错题采集工作流

图片识别、入库与整理结果

错题采集运行结果

查询与同类型题生成工作流

错题智能学习工作流

历史错题查询

历史错题查询结果

同类型题生成

同类型题生成结果

MySQL 持久化结果

数据库记录

技术组成

模块 使用方式
Dify Chatflow 工作流编排、条件分支、迭代和变量管理
通义千问 图片理解、错题结构化与同类型题生成
MySQL 错题持久化、条件检索
Database 插件 在 Chatflow 内执行查询与写入 SQL
PDF Process 插件 将 PDF 试卷转换为可识别的图片
Markdown Exporter 处理练习结果的 Markdown/PDF 导出

本项目在 Dify 1.16.0-rc1 上完成验证,两个 DSL 的导出格式版本均为 0.6.0。

仓库结构

dify-error-question-assistant/
├── dsl/
│   ├── error-question-collector.yml
│   └── error-question-learning-assistant.yml
├── sql/
│   └── schema.sql
├── docs/
│   ├── collector-workflow.png
│   ├── collector-run-result.png
│   ├── learning-workflow.png
│   ├── query-result.png
│   ├── similar-question-result.png
│   ├── database-records.png
│   └── troubleshooting.md
├── examples/
│   └── sample-error-sheet.png
├── .env.example
├── .gitignore
└── README.md

本地运行

前置条件

  • 已部署并能够访问 Dify;
  • 已准备 MySQL 8.x;
  • 已在 Dify 中配置可用的通义千问模型凭据;
  • Dify 能够访问 MySQL 的主机地址和端口。

导入 DSL 时,Dify 会提示安装或确认下列插件依赖:

  • langgenius/tongyi:0.2.4
  • hjlarry/database:0.0.6
  • kalochin/pdf_process:1.0.0(错题收集助手)
  • bowenliang123/md_exporter:3.6.9(错题智能学习助手)

1. 初始化数据库

在 MySQL 中执行:

mysql -u <username> -p < sql/schema.sql

也可以登录 MySQL 后复制执行 sql/schema.sql 中的语句。

2. 导入两个 Chatflow

在 Dify 工作室中选择“导入 DSL 文件”,依次导入:

  1. error-question-collector.yml
  2. error-question-learning-assistant.yml

导入后检查模型节点,确保所选模型支持对应能力。错题收集工作流的图片识别节点必须使用支持视觉输入的模型。

3. 配置数据库连接

分别打开两个应用中的 SQL Execute 节点,在 Database 插件中配置 MySQL 连接。目标数据库为:

dify_database

连接信息应在 Dify 凭据界面中配置,不要直接写进 DSL 或提交到 GitHub。

4. 验证错题采集

  1. 打开“错题收集助手”;
  2. 上传 示例错题图片;
  3. 等待图片识别、结构化解析和迭代写库完成;
  4. 使用以下 SQL 检查记录:
SELECT *
FROM dify_database.error_questions
ORDER BY created_at DESC
LIMIT 10;

5. 验证查询和同类型题生成

  1. 打开“错题智能学习助手”;
  2. 选择覆盖已入库记录的时间范围;
  3. 使用与数据库记录一致的学科、题型和难度进行查询;
  4. 查询成功后选择“生成同类型错题”。

例如,示例数据中的数学选择题难度为 3。如果查询难度选择 2,SQL 正常执行但会返回空结果。

数据结构

error_questions 表保存以下核心字段:

字段 说明
question_text 题目内容
subject 学科
question_type 题型
difficulty 难度等级 1~5
answer 正确答案
user_answer 学生答案
explanation 错题解析
created_at 入库时间

项目设计要点

  • 多模态输入分流:根据图片或 PDF 类型进入不同处理分支,再统一聚合识别结果。
  • 结构化输出校验:将模型文本整理为固定字段,降低后续 SQL 写入的不确定性。
  • 批量数据处理:通过迭代节点逐条处理错题,避免把多条记录拼成一次不稳定的数据库操作。
  • 工作流解耦:采集和学习两个 Chatflow 独立运行,通过共享数据库形成完整业务闭环。
  • 可观察的运行结果:在 Dify 预览中保留节点状态、Token、耗时、SQL 执行和最终回复,便于排障与演示。

安全说明

  • 仓库不包含模型 API Key、数据库密码或 Dify API Key;
  • .env.example 仅展示需要准备的配置项,不包含真实值;
  • 提交新版本 DSL 前,建议再次搜索 api_key、password、secret、token 和数据库 URI;
  • 不建议将本地 MySQL 端口直接暴露到公网。

当前限制

  • 当前 Web App 地址基于本地 Dify,localhost 链接只能在部署机器上访问;
  • OCR 与题目结构化结果受图片清晰度和模型能力影响;
  • 查询采用精确条件组合,没有匹配记录时会返回空结果;
  • 导入到不同 Dify 版本后,可能需要重新选择模型或升级插件依赖。

常见问题及处理记录见 docs/troubleshooting.md。

About

一个基于 Dify Chatflow 的错题学习应用。项目通过两个共享 MySQL 错题库的工作流,完成“图片/PDF 错题采集 → 结构化入库 → 历史错题查询 → 同类型练习题生成”的完整链路。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors