当前位置: 首页 > news >正文

基于DeepSeek的AI作文批改系统

一、项目背景

在教育信息化浪潮下,语文教师面临作文批改工作量大、反馈不及时的痛点。大语言模型的兴起为自动化作文批改提供了新的可能。本项目基于硅基流动平台的DeepSeek-R1模型,构建了一个集智能批改、对比分析、语音输入、报告导出于一体的全栈AI作文批改系统。

选题意义

  • 探索AI在教育教学中的实际应用场景

  • 解决教师批改作文效率低下的现实问题

  • 为学生提供即时、客观、多维度的写作反馈


二、技术选型

技术栈选型理由
后端框架Flask轻量灵活,适合快速原型开发
前端方案原生HTML/CSS/JS无框架依赖,部署简单,展示直观
AI模型DeepSeek-R1-0528-Qwen3-8B推理能力强,中文理解优秀,性价比高
API平台硅基流动(SiliconFlow)国内访问稳定,兼容OpenAI接口格式
文档解析python-docx支持Word文档读取与生成
图表可视化Canvas Confetti + CSS动画轻量级特效,无需引入重型图表库

三、核心功能

3.1 智能作文批改

  • 四维评分:从主旨、结构、语言、创意四个维度量化评分

  • 错误标记:自动识别错别字、用词重复、病句,原文红色波浪线高亮

  • 佳句赏析:识别精彩句子并单独展示,绿色下划线标记

  • 修改建议:针对每个错误给出具体修改方案和理由

3.2 对比批改模式

支持上传修改前后的两篇作文,AI对比分析进步之处和仍需改进的地方,帮助学生直观看到自己的成长轨迹。

3.3 语音输入

基于浏览器Web Speech API,支持语音实时转文字输入作文,降低输入门槛。

3.4 对话追问

批改完成后可在聊天区继续追问AI老师,深入探讨写作技巧。

3.5 报告导出

一键生成Word格式的批改报告,包含评分、错误列表、佳句赏析和总体评价。

3.6 其他亮点

  • 🌙 暗黑模式切换

  • 📋 历史记录(本地存储最近10条)

  • 🎉 高分彩带特效

  • ⭐ 星级可视化评分

  • ⌨️ 评语打字机效果


四、项目架构

text

essay-grader/ ├── app.py # Flask后端主程序 ├── config.py # API密钥配置 ├── grader.py # AI批改逻辑 ├── templates/ │ └── index.html # 前端完整页面 ├── requirements.txt # 依赖清单 └── README.md # 项目说明

数据流

text

用户输入 → 前端JS → Flask API → 硅基流动DeepSeek-R1 → 返回JSON → 前端渲染展示

五、详细实现

5.1 环境准备

bash

# 创建虚拟环境 python -m venv venv venv\Scripts\activate # Windows source venv/bin/activate # Mac/Linux # 安装依赖 pip install flask requests python-docx

5.2 配置API密钥

python

# config.py SILICONFLOW_API_KEY = "sk-你的密钥" SILICONFLOW_API_URL = "https://api.siliconflow.cn/v1/chat/completions" MODEL_NAME = "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B"

5.3 核心提示词设计

这是整个系统的灵魂。通过精心设计的System Prompt,让模型返回结构化JSON:

python

system_prompt = """你是一位资深的语文教师,请仔细批改学生作文,必须严格按照以下JSON格式返回: { "scores": {"主旨": 0, "结构": 0, "语言": 0, "创意": 0}, "errors": [{"original": "错误原文", "correct": "修改后", "reason": "错误原因"}], "highlights": [{"original": "优美句子", "comment": "点评理由"}], "overall_advice": "总体评价和建议" } 要求: - scores中每项满分10分 - errors中只列出语法错误、用词重复、错别字、病句 - highlights中列出写得精彩的句子 - errors和highlights分开,不要混在一起 """

设计要点

  1. 角色设定:"资深的语文教师"——让模型以专业视角批改

  2. 严格格式:明确JSON结构,避免模型自由发挥

  3. 分离错误与亮点:errors和highlights分开,便于前端独立展示

  4. 可定位性:要求original是原文真实片段,确保前端能准确高亮

5.4 错误高亮实现

前端收到AI返回的错误列表后,在原文中查找并包裹高亮标签:

javascript

// 标记错误(红色波浪线) errors.forEach(e => { const original = escapeHtml(e.original); const tooltip = escapeHtml(e.reason) + ' → ' + escapeHtml(e.correct); highlightedEssay = highlightedEssay.replace( original, `<span class="highlight-error">${original} <span class="tooltip-text">${tooltip}</span></span>` ); }); // 标记佳句(绿色下划线) highlights.forEach(h => { const original = escapeHtml(h.original); const tooltip = '✨ ' + escapeHtml(h.comment); // 使用正则避免重复标记 const regex = new RegExp(`(?<!<[^>]*)${escapeRegExp(original)}(?![^<]*>)`, 'g'); highlightedEssay = highlightedEssay.replace( regex, `<span class="highlight-good">${original} <span class="tooltip-text">${tooltip}</span></span>` ); });

5.5 语音输入实现

利用浏览器原生Web Speech API,几行代码即可实现:

javascript

function toggleVoice() { const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; recognition = new SpeechRecognition(); recognition.lang = 'zh-CN'; // 中文识别 recognition.interimResults = true; // 实时显示 recognition.continuous = true; // 持续监听 recognition.onresult = function(event) { let transcript = ''; for (let i = event.resultIndex; i < event.results.length; i++) { transcript += event.results[i][0].transcript; } document.getElementById('essay').value += transcript; }; recognition.start(); }

5.6 评分动画与彩带特效

javascript

// 数字跳动动画 keys.forEach((key, i) => { const targetScore = scores[key] || 0; let current = 0; const step = targetScore / 20; const timer = setInterval(() => { current += step; if (current >= targetScore) { current = targetScore; clearInterval(timer); el.style.transform = 'scale(1.4)'; // 到达时放大 el.style.color = '#2e7d32'; // 变绿 } el.textContent = Math.round(current); }, 40); }); // 均分≥9分触发彩带 if (avgScore >= 9) { confetti({ particleCount: 150, spread: 80, origin: { y: 0.6 } }); }

六、效果展示

6.1 批改主界面

  • 左侧:作文输入区(支持粘贴、上传TXT/Word、语音输入)

  • 右侧:批改结果区(评分、错误标记、修改建议、佳句赏析、追问聊天)

6.2 错误标记展示

  • 🔴红色波浪线:语法错误、错别字、用词重复

  • 🟢绿色下划线:精彩句子

鼠标悬停可查看具体修改建议和点评。

6.3 评分可视化

  • 数字从0跳动到目标分数

  • 星级展示(满分5星)

  • 高分触发彩带庆祝特效

6.4 暗黑模式

一键切换暗黑/明亮主题,偏好自动保存。


七、踩坑记录

7.1 DeepSeek-R1返回格式不稳定

问题:模型有时在JSON外包裹思考过程文字。

解决:增加容错处理,提取json...代码块:

python

try: return json.loads(ai_message) except json.JSONDecodeError: if "```json" in ai_message: json_str = ai_message.split("```json")[1].split("```")[0] return json.loads(json_str)

7.2 前端高亮重复标记

问题:先用字符串替换标错误,再标佳句时可能误替换已标记的span内容。

解决:使用负向前瞻正则,只匹配未被HTML标签包裹的纯文本。

7.3 语音识别兼容性

问题:Web Speech API仅Chrome/Edge支持良好。

解决:增加浏览器检测,不支持时隐藏语音按钮并给出提示。

7.4 Word文档段落读取

问题:python-docx读取的段落可能为空。

解决:过滤空段落,paragraphs = [p.text for p in doc.paragraphs if p.text.strip()]


八、项目总结

8.1 技术收获

  1. 掌握了大模型API调用提示词工程的实战技巧

  2. 深入理解了前后端分离的协作模式

  3. 学会了Web API(语音识别)和Canvas(粒子背景)的使用

  4. 积累了用户体验设计经验(动画、暗黑模式、骨架屏)

8.2 不足与展望

  1. 批量批改:目前仅支持单篇批改,可扩展为批量上传

  2. 更细粒度分析:可增加段落结构分析、论证逻辑检测

  3. 学生画像:积累批改数据后,可生成学生写作能力成长曲线

  4. 多模型对比:可接入多个模型对比批改效果

http://www.cnnetsun.cn/news/3026674.html

相关文章:

  • 公共子序列(动态规划)
  • Agent Harness:2026 年 AI 工程最重要的概念,一篇文章讲透
  • AI 写小说能力深度评测与实战指南
  • 这9款开发工具夯爆了,用了都说好
  • AI漫剧剪辑生成主流AI创作工具与工作流盘点
  • 告别随手记事杂乱无章,一站式收纳生活工作任务,条理规划日程完整步骤
  • 快手Keye-VL-2.0从零上手:30B模型看懂2小时视频,256K上下文+Agent能力部署全指南
  • Spring AI 实战指南(十七):企业级 Multi-Agent 协作体系设计与任务分解实践
  • 626:内存流;bitmapImage.CacheOption;类级变量释放;噪点;_halconControl
  • 鸿蒙(HarmonyOS)- 怎么在DevEcoStudio中通过真机操作日志相关
  • 每日 AI 研究简报 · 2026-06-26
  • 2026开学季语音识别工具深度盘点 务实选择指南
  • 动图魔方技术拆解 15:ArkTS 深浅色与跟随系统的应用级 ColorMode 实战
  • AI 推理成本治理:从模型量化到请求调度的全链路降本策略
  • 实战:怎么把设备树和 /dev 节点真正连起来
  • 暑假30天,普通大学生如何把Java水平直接提升一个档次
  • Prompt 已经不够用了:复杂 AI 任务真正需要的是任务接口设计
  • NCU性能分析工具使用指南:从安装到结果解读
  • MyBatis-Plus环境搭建和单表的curd操作
  • AI 创意工具产品化:从技术 Demo 到可交付产品的三道坎
  • HypoMux | 多网卡带宽并发聚合下载加速工具
  • 隧道代理和普通代理有什么区别?看完秒懂选对不踩坑
  • MyBatis-Plus 通用 Service 与常用注解
  • 【数据库系统原理】第35篇:自主访问控制与强制访问控制:权限传递与安全标记
  • 用Matlab进行无线电信号逆向实战2——立体声 FM 广播的分离与解密 从频谱迷宫到相干解调的避坑指南
  • 数据分析转大模型:从工具接入到项目提效
  • OWTB 3PL 智慧仓储管理系统 - AI员工增强版工种清单
  • 滑动文本控件样例工程以及使用详解
  • 2026年下半年量化工具怎么选,先匹配能力基础
  • Vatee:用框架方式看外汇市场服务体验,更容易形成稳定判断