AI大模型教程
一起来学习

山东大学项目实训——基于DeepSeek的智能写作与训练平台(十四)

智能写作引导系统前端设计总结

一、系统概述

智能写作引导系统是融合人工智能与前端交互的创新写作辅助工具,旨在为用户提供实时灵感激发与写作指导,提升智慧教学与创作效率。


二、系统功能模块划分

1. 顶部工具栏模块

  • 提供总控操作。
  • 包括结构分析入口、AI写作助手开关、功能按钮(润色、结构优化、续写、例证、名言警句等)。
  • 支持开启“沉浸写作模式”。

2. 左侧文章结构助手区

  • 分层UI展示全文结构:
    • 包括主题、段落论点、分论点、例证、段落主旨。
  • 实现实时结构分析与更新。

3. 右侧AI写作助手

  • 聊天式界面,支持输入、交互、AI建议呈现。
  • 提供流式响应(打字机效果)、建议采纳、复制、重新生成等功能。

4. 中央写作编辑区

  • 文本编辑功能;
  • 支持自动/主动文本选中并触发写作辅助功能;
  • 弹窗流式输出推荐内容与理由。

三、核心功能实现

1. 文本选择与高亮机制

两种选中模式:
  • 自动选中:鼠标悬停按钮时自动选中句子或段落;
  • 主动选中:用户鼠标拖选文本后激活辅助功能。
核心变量:
  • isUserSelected标记用户主动选中优先级;
  • highlightMode:句子/段落高亮模式;
  • highlightRange:高亮文本范围。
核心函数与事件处理:
  • handleMouseDown():清除预测性高亮;
  • handleHover():调用高亮函数;
  • handleTextSelection():应用高亮并存储旧文本;
  • highlightSentence():根据标点推断句子或段落;
  • applyHighlight():用 添加高亮样式;
  • 鼠标相关事件绑定:mouseenter、mouseleave、click、mousedown 等。

2. AI写作助手实现

核心特点:
  • 即时对话
  • 流式响应
  • 操作集成(一键采纳建议);
  • 上下文感知
主函数 sendAssistantPrompt() 流程:
  1. 校验输入合法;
  2. 构造用户消息并加入对话列表;
  3. 发送API请求;
  4. 接收并流式更新AI返回的消息内容;
  5. 完成或异常处理;
  6. 使用 Fetch API 和 Server-Sent Events 实现流式更新。
后端逻辑:
  • 使用 LangChain 构建 Prompt;
  • 注入文章结构与历史对话,生成上下文相关回答。
def generate_chat_response(self, messages: list):
    dialog_history = "n".join(
        f"{msg['role']}: {msg['content']}"
        for msg in messages[-10:]  # 取最近10条对话
    )

    prompt = f"""
你是一名专业的写作辅导助手,请根据对话历史、当前文段、当前文段主旨和文章结构框架,回答用户问题。

【对话历史】:
{dialog_history}

【当前文段】:
{self.paragraph_text}

【当前文段主旨】:
{self.full_topic}

【文章结构框架】:
{self.paragraph_topic}

请用简洁、专业的语言回复,注意以下几点:
1. 回答要贴近学生实际写作内容;
2. 回应要有逻辑清晰、语言准确;
3. 避免冗长重复,突出重点建议;
4. 如有建议可列条表达。
"""
        llm = model_to_llm(self.model, self.temperature)

        try:
            for chunk in llm.stream(prompt):
                print(chunk)
                yield chunk

        except Exception as e:
            yield f"生成失败: {str(e)}"

左侧文章结构助手设计与实现

设计目标

左侧文章结构助手是智能写作引导系统的核心组件之一,功能包括:

  • 实时分析用户输入的文章内容;
  • 自动生成并展示文章的结构框架和段落主旨;
  • 帮助用户更好地组织和优化文章内容。

核心设计理念

  • 实时分析:定时检测文本变化并触发结构解析;
  • 层次化展示:结构包括标题、主题、子观点、例证、结论;
  • 可视化呈现:使用图标与颜色区分结构要素,增强阅读性;
  • 交互式操作:提供“刷新”按钮手动更新结构分析。

重要变量

currentStructure = {
  title: "",
  themes: [],
  conclusion: ""
}

paragraphSummary // 当前段落的主旨摘要

// 定时总结相关状态变量
lastUpdatedText: ''               // 上次更新的文本
lastUpdatedTime: 0                // 上次更新时间戳
isWaitingForResponse: false       // 是否等待响应
summaryTimer: null                // 总结定时器
checkTimer: null                  // 检查定时器
paragraphEnd: false               // 是否为段落结束
charCountSinceLastUpdate: 0       // 新增字符数
isSummaryActive: true             // 总结功能是否启用

核心方法说明

1. sendSummaryRequest()
async sendSummaryRequest() {
  if (!this.lastUpdatedText.trim() || this.isWaitingForResponse) return;

  this.isWaitingForResponse = true;

  try {
    const payload = {
      text: this.lastUpdatedText,
      isParagraphEnd: this.paragraphEnd,
      currentStructure: this.currentStructure
    };

    const response = await fetch('/api/summarize-text', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(payload)
    });

    if (response.ok) {
      const data = await response.json();
      if (data.status === 'ok') {
        this.currentStructure = data.full_structure;
        this.paragraphSummary = data.paragraph_summary;
        this.charCountSinceLastUpdate = 0;
        this.paragraphEnd = false;
      }
    }

  } catch (error) {
    console.error('总结请求失败:', error);
  } finally {
    this.isWaitingForResponse = false;
  }
}
功能说明:
  • 将当前输入内容发送后端进行结构总结;
  • 成功后更新结构信息和段落主旨;
  • 避免重复请求,提升效率。

2. checkTextUpdates()
function checkTextUpdates() {
  const newText = getCurrentText();
  const charDelta = newText.length - lastUpdatedText.length;

  if (charDelta > 10 || isNewParagraph(newText)) {
    lastUpdatedText = newText;
    paragraphEnd = isNewParagraph(newText);
    sendSummaryRequest();
  }
}
功能说明:
  • 每 3 秒定时触发;
  • 若字符增量 > 10 或换行,立即总结;
  • 保证响应灵敏且性能稳定。

3. toggleSummaryFeature()
function toggleSummaryFeature() {
  isSummaryActive = !isSummaryActive;
  if (!isSummaryActive && summaryTimer) {
    clearInterval(summaryTimer);
    summaryTimer = null;
  } else {
    summaryTimer = setInterval(checkTextUpdates, 3000);
  }
}
功能说明:
  • 切换自动总结开关;
  • 允许用户自由控制自动结构更新行为。

文章来源于互联网:山东大学项目实训——基于DeepSeek的智能写作与训练平台(十四)

相关推荐: 【stable diffusion原理】一文读懂Stable Diffusion论文原理+代码超详细解读_stablediffusion是基于哪个模型

前言 摘要 Stable Diffusion是一个基于Latent Diffusion Models(LDMs)实现的以文生图(text-to-image generation)模型,能够生成高分辨率图像。它的原理涉及Diffusion Model(DDPM)…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 山东大学项目实训——基于DeepSeek的智能写作与训练平台(十四)

山东大学项目实训——基于DeepSeek的智能写作与训练平台(十)

这一部分主要是关于教师端。

在项目任务书中,关于教师端部分的需求(部分)如下:

智能批改评阅

OCR识别

多模态输入

多层次批改:错别字识别与纠正,病句/语法错误识别与纠正,标点误用识别与纠正

直接批改并生成评语

  1. 智能识别 :识别比喻/拟人/排比等常见修辞,同时提供高阶修辞识别(通感、反讽、层递)
  2. 智能作文训练命题:教师+AI自定义题目,发布后供学生进行针对性场景写作训练。

需要注意的是,教师端与学生端是可交互的,其基本业务流程应该为:

学生进行作文训练->作文交给老师批改->老师可使用上述功能点辅助批改

这一业务流程目前已经基本完成,以下各部分的详细介绍:

一、(模拟考场)作文训练与提交:

首先是ai生成三个可供选择的题目这一功能,使用deepseekAPI生成三个题目并不难,重点在于编辑prompt格式要求并按照相关字段对生成的三个题目进行准确裁取划分:

      # 从开始标识之后的内容开始查找题目

  content_after_start = full_result[start_index + len(“作文题如下:”):]

first_index = content_after_start.find(“一、”)

  second_index = content_after_start.find(“二、”)

  third_index = content_after_start.find(“三、”)

if first_index == -1 or second_index == -1 or third_index == -1:

        raise ValueError(“未找到完整的题目标识”)

result1 = content_after_start[first_index + len(“一、”):second_index].strip()

  result2 = content_after_start[second_index + len(“二、”):third_index].strip()

  result3 = content_after_start[third_index + len(“三、”):].strip()

同时模拟考场还需要定时功能。倒计时机制:借助 setInterval 以每秒(1000 毫秒)为间隔来减少剩余时间(this.remainingTime)。终止条件:一旦剩余时间变为 0,就会清除计时器,并且更新状态变量。倒计时结束后将不能再输入,实现如下:

  remainingTime: 3600, // 初始化为一小时(单位:秒)

isTimeUp: false,

startCountdown() {

      this.countdownInterval = setInterval(() => {

          if (this.remainingTime > 0) {

              this.remainingTime–;

          } else {

              clearInterval(this.countdownInterval);

              this.isTimeUp = true;

           }

            }, 1000);

        },

  formatTime(seconds) {

const minutes = Math.floor(seconds / 60);

    const remainingSeconds = seconds % 60;

    return

`${String(minutes).padStart(2, ‘0’)}:${String(remainingSeconds).padStart(2, ‘0’)}`;

},

相应地还需要能够提交保存作文,对应的数据库表字段为(record_id,student_id,teacher_id,essay_topic,essay_text),相应的后端方法逻辑较为简单,故不再给出。

前端部分相关界面:

二、 多模态输入:OCR与pdf的上传与识别。

目前python主流的OCR库有三种,我们选择使用使用pytesseract以及tesseract来实现(后端)。

从 GitHub 下载并安装 Tesseract OCR 引擎,在安装是选择中文支持。

调用其方法即可完成识别:

# 使用Tesseract进行OCR识别

img = Image.open(filepath)

img = img.convert(‘L’).point(lambda x: 255 if x > 180 else 0) #这一句是为了提高识别率,也有其他方法。

text = pytesseract.image_to_string(img, lang=’chi_sim’)

print(text) #测试用

目前测试发现正确率90%左右,所以这是一个可能的后续测试与优化点。

Pdf的识别(后端):使用pdfplumber库即可。

# 提取PDF文本

text = “”

with pdfplumber.open(filepath) as pdf:

for page in pdf.pages:

text += page.extract_text() + “n”

可以把pdf内容识别为完整的文字。

前端部分:

调用接口:

const response = await axios.post('http://localhost:5000/api/ocr', formData, {

      headers: {

         'Content-Type': 'multipart/form-data'

      }

});

const response = await axios.post('http://localhost:5000/api/pdf', formData, {

      headers: {

          'Content-Type': 'multipart/form-data'

      }

 });

    目前,我们暂定的实现方案为prompt+deepseekAPI来实现。

    所以这部分的主要工作为写合适的prompt:

    后端Api方法将多层次(三个)批改功能和为一体,前端通过不同的参数即可实现不同的批改类型。

    方法大概如下:

    @app.route(‘/api/recognize’, methods=[‘POST’])

    def recognize_text():

    # 此方法需要传入的参数:

    # 1.文本 2.一个int变量function_id

    # 文本就是作文,id用于选择不同的功能

    # id=1:识别修辞手法

    # id=2:识别错别字与标点符号错误,并提供改正建议

    # id=3:识别语法错误与病句并提供修改建议

    根据不同的_id,我们选择不同的prompt与user_context:

    一个例子如下:

    elif function_id == 2:

        prompt = “你是一位专业的语文老师,你的任务是检查以下作文中的错别字与标点符号误用,并提供详细的改正建议。”

        “请注意以下几点:n”

        “1. 识别作文中的书写错误与标点符号的不恰当使用。n”

        “2. 提供每个错误的改正建议。n”

        “3. 在必要时,简要解释错误的原因。n”

        “4. 保持对作文整体内容的理解,确保建议符合语境。”

        “5. 无需给出你的思考过程”

        user_context = “请帮我检测这篇作文中的错别字与标点符号误用的情况。”

    前端部分:

    调用接口:

    const response = await axios.post('http://localhost:5000/api/recognize', {
    
           text: essayDetails.value.essay_text,
    
           function_id: functionId
    
        });
    
        apiResult.value = response.data.result;

    相关界面:

    (此界面数据通过传入 teacher_id查询数据库essay_rate为null的record记录获得,由于实现逻辑较简单所以不再阐述)

    至此,本项目已大致完成任务书中教师端部分,学生->教师的业务链也大致构造完成(还需要完善学生端和教师端对于考试作文以及批改记录的各类筛选查询功能)。

    三、 学生端与教师端的互通

    设计了 student 和 teacher 数据库表,以实现学生与教师的多对一关系。以下是 student 表的 SQL 设计:

    CREATE TABLE `student` (
    
      `student_id` int NOT NULL AUTO_INCREMENT,
    
      `username` varchar(255) NOT NULL,
    
      `password` varchar(255) NOT NULL,
    
      `email` varchar(255) DEFAULT NULL,
    
      `teacher_id` int DEFAULT NULL,
    
      PRIMARY KEY (`student_id`),
    
      KEY `teacher_id` (`teacher_id`),
    
      CONSTRAINT `student_ibfk_1` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`teacher_id`)
    
    );

      目前的功能逻辑为学生端在注册账号时绑定教师,相关的学生注册接口代码如下:

    @auth_bp.route('/register-student', methods=['POST'])
    
    def student_register():
    
        data = request.get_json()
    
        username = data.get('username')
    
        password = data.get('password')
    
        email = data.get('email')
    
        teacher_id = data.get('teacher_id')
    
        if not username or not password:
    
            return jsonify({'status': 'error', 'message': '用户名和密码不能为空'}), 400
    
        try:
    
            cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
    
            # 检查用户名是否已存在
    
            cursor.execute('SELECT student_id FROM student WHERE username = %s', (username,))
    
            existing_account = cursor.fetchone()
    
            if existing_account:
    
                cursor.close()
    
                return jsonify({'status': 'error', 'message': '用户名已存在,请选择其他用户名'}), 409
    
            # 插入新学生信息
    
            cursor.execute(
    
                'INSERT INTO student (username, password, email, teacher_id) VALUES (%s, %s, %s, %s)',
    
                (username, password, email, teacher_id)
    
            )
    
            mysql.connection.commit()
    
            new_student_id = cursor.lastrowid
    
            cursor.close()

    前端界面如下:

    设计了 test_record 数据库表用于存储作文相关信息。test_record与teacher、student为多对一关系。test_record 表的 SQL 设计如下:

    CREATE TABLE `test_record` (
    
      `record_id` int NOT NULL AUTO_INCREMENT,
    
      `essay_topic` varchar(666) NOT NULL,
    
      `essay_text` longtext NOT NULL,
    
      `essay_rate` longtext,
    
      `teacher_id` int DEFAULT NULL,
    
      `student_id` int DEFAULT NULL,
    
      `rate_time` datetime DEFAULT NULL,
    
      PRIMARY KEY (`record_id`),
    
      KEY `teacher_id` (`teacher_id`),
    
      KEY `student_id` (`student_id`),
    
      CONSTRAINT `test_record_ibfk_1` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`teacher_id`),
    
      CONSTRAINT `test_record_ibfk_2` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)
    
    );

    目前阶段根据以上数据库表设计以及相关的查询逻辑实现教师端与学生端的互通。

    文章来源于互联网:山东大学项目实训——基于DeepSeek的智能写作与训练平台(十)

    相关推荐: 英文论文降重翻译器 ai写作

    大家好,今天来聊聊英文论文降重翻译器 ai写作,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 英文论文降重翻译器 如果你正在为英文论文的降重问题而苦恼,那么你一定需要一款实用的工具来帮助你。而小发猫论文降…

    赞(0)
    未经允许不得转载:5bei.cn大模型教程网 » 山东大学项目实训——基于DeepSeek的智能写作与训练平台(十)

    山东大学项目实训——基于DeepSeek的智能写作与训练平台(八)

    智能写作练习平台学生端开发工作总结

    在近期的工作中,围绕AI智能写作练习平台学生端的前端开发及AI考场训练模拟功能实现,完成了一系列核心功能的开发与优化,具体工作成果总结如下:

    一、工作内容概述

    (一)前端基础架构搭建

    1. 路由与页面布局:基于Vue Router实现页面路由配置,完成了LoginPage.vue(登录页)、MainPage.vue(主页面)、TestPage.vue(模拟考场)等基础页面的开发。使用createRoutercreateWebHistory配置路由,将LoginPage.vue设为默认首页及/login路由对应组件,同时定义/MainPage/TestPage等路由。在App.vue中通过渲染对应组件,实现页面间的无缝跳转。
    2. 组件化开发

      • 开发LeftMenu.vue作为左侧导航菜单,基于Element Plus的el-menu组件,支持点击切换页面,并通过active类名高亮当前选中项。菜单点击后通过自定义事件menu-click通知父组件(MainPage.vue)切换页面。
      • 实现HomePage.vue(作文批改)、TitlePage.vue(抽取题目)、TestPage.vue(模拟考场)等功能页面,包含输入、提交、结果展示等交互逻辑。其中,HomePage.vue实现作文输入、提交按钮交互及结果展示,通过axios调用后端API(http://localhost:5000/api/rate-essay)获取批改结果,通过v-html渲染格式化后的批改结果,并支持保存结果功能(暂为模拟实现);TitlePage.vue点击“抽取”按钮触发rollTopic方法,模拟抽取逻辑并跳转至TestPage.vueTestPage.vueHomePage.vue逻辑相似,支持作文输入、提交及结果展示,适配考场场景。
    3. 样式与交互优化:通过CSS与Vue组件的scoped属性,实现页面响应式布局,打造了圆角、阴影等视觉效果,并对按钮交互状态进行优化,包括禁用态、hover效果等,提升整体用户体验。

    (二)AI考场训练模拟功能开发

    1. 模拟考试功能:实现AI随机结合热门话题出题,模拟真实考试场景。在该场景下,学生无法使用修改与优化功能,提交作文后由AI进行评审,AI会依据评分标准评估作文并给出修改建议。
    2. 题目生成功能:考场训练模拟可生成不少于3个关于当前社会热点的新闻与观点题目供学生选择练习,并且教师可设置时间限制(目前默认一小时)。
    3. 结果保存功能:将学生考试相关信息,包括student_idteacher_idessay_textessay_topic等,保存到数据库表test_record中。

    二、核心代码实现

    (一)前端代码(倒计时实现关键代码)

    TitlePage.vue中,点击 “生成题目” 按钮,通过Axios向后端/create-topic接口发送请求,获取生成的三个作文题目并展示,点击 “选择” 按钮可携带题目参数跳转到TestPage.vue

    TestPage.vue中实现了模拟考场的倒计时功能,具体代码如下:

    export default {
        data() {
            return {
                remainingTime: 3600, // 初始化为一小时(单位:秒)
                isTimeUp: false,
                countdownInterval: null // 用于存储倒计时定时器的引用
            };
        },
        created() {
            this.startCountdown();
        },
        methods: {
            startCountdown() {
                this.countdownInterval = setInterval(() => {
                    if (this.remainingTime > 0) {
                        this.remainingTime--;
                    } else {
                        clearInterval(this.countdownInterval);
                        this.isTimeUp = true;
                    }
                }, 1000);
            },
            formatTime(seconds) {
                const minutes = Math.floor(seconds / 60);
                const remainingSeconds = seconds % 60;
                return `${String(minutes).padStart(2, '0')}:${String(remainingSeconds).padStart(2, '0')}`;
            }
        }
    };
    

    上述代码在页面创建时调用startCountdown方法启动倒计时,每秒减少remainingTime的值,当时间减为0时,清除定时器并设置isTimeUptrue,同时formatTime方法用于将剩余秒数格式化为mm:ss的形式展示在页面上。此外,TestPage.vue还实现了学生输入作文内容后点击 “提交” 按钮,通过Axios向后端/rate-essay接口提交作文进行AI评审;评审完成后点击 “保存结果” 按钮,通过Axios向后端/save-result接口保存考试结果,以及退出确认及倒计时结束禁用输入等功能。

    (二)后端代码

    1. /create-topic接口:接收前端请求后,构造DeepSeek API请求参数,获取AI生成的作文题目。对返回结果进行解析处理,关键代码如下:
    @rater_bp.route('/create-topic', methods=['POST'])
    def create_topic():
        # 省略前面的请求构造和发送部分代码
    
        try {
            result = response.json()
            if "choices" not in result:
                raise ValueError("响应中缺少 'choices' 字段")
    
            full_result = result["choices"][0]["message"]["content"]
            start_index = full_result.find("作文题如下:")
            if start_index == -1:
                raise ValueError("未找到'作文题如下:'标识")
    
            # 从开始标识之后的内容开始查找题目
            content_after_start = full_result[start_index + len("作文题如下:"):]
    
            first_index = content_after_start.find("一、")
            second_index = content_after_start.find("二、")
            third_index = content_after_start.find("三、")
    
            if first_index == -1 or second_index == -1 or third_index == -1:
                raise ValueError("未找到完整的题目标识")
    
            result1 = content_after_start[first_index + len("一、"):second_index].strip()
            result2 = content_after_start[second_index + len("二、"):third_index].strip()
            result3 = content_after_start[third_index + len("三、"):].strip()
    
            return jsonify({
                "result": full_result,
                "result1": result1,
                "result2": result2,
                "result3": result3
            })
    
        except ValueError as e:
            logger.error(f"JSON 解析或题目格式错误: {str(e)}")
            return jsonify({
                "error": f"API 返回的结果格式不正确: {response.text[:200]}"
            }), 500
    
        # 省略后面的异常处理部分代码
    }
    

    该部分代码首先找到结果中特定标识的位置,然后通过字符串索引操作,从标识后的内容中提取出三个作文题目,并返回给前端。
    2. /save-result接口:接收前端传递的学生ID、作文内容和作文评分,将数据插入到MySQL数据库的test_record表中,保存考试结果,关键代码如下:

    @rater_bp.route('/save-result', methods=['POST'])
    def save_result():
        try {
            data = request.get_json()
            student_id = data.get('student_id')
            essay_text = data.get('essay_text')
            essay_rate = data.get('essay_rate')
    
            if not student_id or not essay_text or not essay_rate:
                return jsonify({"error": "缺少必要参数"}), 400
            cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
            cursor.execute(
                'INSERT INTO test_record (student_id, essay_text, essay_rate) VALUES (%s, %s, %s)',
                (student_id, essay_text, essay_rate)
            )
            mysql.connection.commit()  # 提交事务
            cursor.close()  # 重要:关闭游标
            return jsonify({"message": "结果保存成功"}), 200
    
        except Exception as e:
            print(f"未知错误: {e}")
            return jsonify({"error": "服务器内部错误"}), 500
    

    上述代码首先从请求中获取学生ID、作文内容和作文评分,进行参数校验,然后使用数据库游标执行插入语句,将数据插入到test_record表中,提交事务并关闭游标,最后返回保存结果的响应。

    通过上述工作,完成了AI智能写作练习平台学生端从基础架构搭建到核心业务功能实现的一系列开发任务,为后续平台的进一步完善和优化奠定了坚实基础 。

    三、运行截图


    文章来源于互联网:山东大学项目实训——基于DeepSeek的智能写作与训练平台(八)

    相关推荐: GPUStack正式发布: 为大模型而生的开源GPU集群管理器

    经过 Seal 研发团队几个月来持续的开发和测试,我们满怀期待及热情地发布新的产品 GPUStack,GPUStack 是一个用于运行LLM(大型语言模型)的开源GPU集群管理器。尽管如今大语言模型作为公共的云上服务已经被广泛推广并在公有云上变得更加易于使用,…

    赞(0)
    未经允许不得转载:5bei.cn大模型教程网 » 山东大学项目实训——基于DeepSeek的智能写作与训练平台(八)

    山东大学项目实训——基于DeepSeek的智能写作与训练平台(五)

    ​一、学生写作画像与学习路线后端功能实现

    根据对小组项目实现现状的分析,暂时将开发方向定在对后端功能的实现,因此选择了完善项目任务书中规划好的功能:绘制学生个人画像,定制学习路线——绘制学生个人写作画像,根据学生个人写作评分将作文质量分解为6个维度(语法、立意、结构、修辞、情感、创新)进行针对性训练建议。

    写作画像分析:

        六个维度评分:语法、立意、结构、修辞、情感、创新
        每个维度 0-100 分的量化评估
        自动生成评分和建议

    学习路线生成:

        基于评分生成个性化建议
        按维度分类的改进建议
        优先级排序的学习计划

    数据存储:

        评分数据持久化
        学习建议记录
        历史数据追踪

    首先新增学生写作画像表与学习路线表:

    -- 学生写作画像表
    CREATE TABLE IF NOT EXISTS student_writing_profile (
        id INT PRIMARY KEY AUTO_INCREMENT,
        student_id INT NOT NULL,
        grammar_score FLOAT,
        idea_score FLOAT,
        structure_score FLOAT,
        rhetoric_score FLOAT,
        emotion_score FLOAT,
        innovation_score FLOAT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        FOREIGN KEY (student_id) REFERENCES accounts(id)
    );
    
    -- 学习路线表
    CREATE TABLE IF NOT EXISTS learning_path (
        id INT PRIMARY KEY AUTO_INCREMENT,
        student_id INT NOT NULL,
        dimension VARCHAR(20),
        suggestion TEXT,
        priority INT,
        status VARCHAR(20),
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (student_id) REFERENCES accounts(id)
    );
    

    新增student_profile.pyprofile_routes.py:

    1.student_profile.py

    • 定义数据模型

    • 包含 StudentWritingProfile 和 LearningPath 两个类

    • 定义了六个维度的评分字段和学习路径相关字段

    2.profile_routes.py 

    • 实现API路由

    • 包含作文分析功能

    • 提供更新和获取画像的接口

    • 集成 DeepSeek API 进行智能分析

    在model.py中新增函数:

    1.获取写作画像

        # 添加获取学生写作画像的方法
        def get_writing_profile(self, student_id: int) -> Dict:
            cursor = self.db.connection.cursor(MySQLdb.cursors.DictCursor)
            cursor.execute('''
                SELECT * FROM student_writing_profile 
                WHERE student_id = %s 
                ORDER BY created_at DESC 
                LIMIT 1
            ''', (student_id,))
            profile = cursor.fetchone()
            cursor.close()
            return profile

    功能:获取学生最新的写作评分数据
    实现特点:
    使用 ORDER BY created_at DESC 确保获取最新记录
    LIMIT 1 限制只返回最新一条
    返回完整的画像数据字典

    2.更新写作画像

        # 添加更新写作画像的方法
        def update_writing_profile(self, student_id: int, scores: Dict):
            cursor = self.db.connection.cursor()
            cursor.execute('''
                INSERT INTO student_writing_profile 
                (student_id, grammar_score, idea_score, structure_score, 
                 rhetoric_score, emotion_score, innovation_score) 
                VALUES (%s, %s, %s, %s, %s, %s, %s)
            ''', (
                student_id,
                scores.get('grammar'),
                scores.get('idea'),
                scores.get('structure'),
                scores.get('rhetoric'),
                scores.get('emotion'),
                scores.get('innovation')
            ))
            self.db.connection.commit()
            cursor.close()

    功能:插入新的写作评分记录
    实现特点:
    支持六个维度的评分数据
    使用 scores.get() 安全获取数据
    自动处理数据插入

    3. 获取学习路线

        # 添加获取学习路线的方法
        def get_learning_paths(self, student_id: int) -> List[Dict]:
            cursor = self.db.connection.cursor(MySQLdb.cursors.DictCursor)
            cursor.execute('''
                SELECT * FROM learning_path 
                WHERE student_id = %s 
                ORDER BY priority DESC, created_at DESC
            ''', (student_id,))
            paths = cursor.fetchall()
            cursor.close()
            return paths

    功能:获取学生的所有学习建议
    实现特点:
    按优先级和时间排序
    返回多条建议记录
    支持完整的路径查询

    4.创建学习路线

        # 添加创建学习路线的方法
        def create_learning_path(self, student_id: int, dimension: str, 
                               suggestion: str, priority: int = 1):
            cursor = self.db.connection.cursor()
            cursor.execute('''
                INSERT INTO learning_path 
                (student_id, dimension, suggestion, priority, status) 
                VALUES (%s, %s, %s, %s, 'active')
            ''', (student_id, dimension, suggestion, priority))
            self.db.connection.commit()
            cursor.close()

    功能:添加新的学习建议
    实现特点:
    支持维度分类
    默认优先级设置
    自动设置活动状态

    提供两个用于更新画像的接口:

    POST /api/update-profile
    
    Content-Type: application/json
    
    {
    
        "student_id": 1,
    
        "essay_text": "作文内容..."
    
    }

    获取画像:

    GET /api/get-profile/{student_id}

    二、测试结果

    当前成功实现:

    • 作文分析和评分
    • 数据库存储
    • API响应
    • 学习建议生成

    三、后续开发

    之后完成系统核心功能升级,在原有六维评分体系基础上实现四大创新突破:
        多维分析体系:新增写作风格识别与错误模式诊断
        智能学习规划:基于AI分析的个性化路径推荐
        长期成长追踪:支持连续学习趋势分析
        系统集成优化:构建完整API服务体系

    核心功能升级

    多维写作分析体系

    分析维度

    评估指标

    技术实现

    典型输出示例

    基础评分

    语法/立意/结构等6维度评分

    DeepSeek多级提示词设计

    情感表达90分,结构完整性87分

    风格特征

    词汇多样性/句式复杂度等5项特征

    数据库扩展+API特征提取

    “理性条理型”写作风格识别

    错误诊断

    语法错误分类/结构弱点分析

    JSON结构化存储

    主谓不一致错误频次统计

    动态学习建议

    优先级排序+可执行改进步骤

    自动评分阈值判定

    高优先级:句式多样化训练

    文章来源于互联网:山东大学项目实训——基于DeepSeek的智能写作与训练平台(五)

    相关推荐: 笔灵AI写作适合哪些人群?各类写作者必备,从政府文案到小说创作

    在数字化信息爆炸的当今社会,掌握写作技巧对每一位个体而言显得尤为重要。然而,当面对着空白的页面或是不断闪烁的文本光标,人们往往会在创意的荒漠中迷失方向,难以找到下笔的起点。在此,本人将向您推荐一款能够高效助力您产出高品质文本的智能写作助手——笔灵AI写作!这款…

    赞(0)
    未经允许不得转载:5bei.cn大模型教程网 » 山东大学项目实训——基于DeepSeek的智能写作与训练平台(五)
    分享到: 更多 (0)

    AI大模型,我们的未来

    小欢软考联系我们