尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于DeepSeek的课堂互动增强方案:DST适配与工程落地

基于DeepSeek的课堂互动增强方案:DST适配与工程落地 简介这份PDF文档面向教育技术研发者、课堂智能化产品设计者及对DeepSeek应用感兴趣的中高级读者围绕课堂互动增强这一核心场景系统讲解如何借助对话状态跟踪技术DST构建智能问答系统与实时反馈机制。全文共589页、60个大章节支持目录跳转与阅读器书签大纲定位内容涵盖DST在课堂场景的适配性分析、对话状态特征维度定义、意图识别特征工程、槽位填充算法改进、课堂领域知识库构建、知识库检索与生成式问答融合、低延迟数据传输架构、实时反馈指标量化设计、模型推理速度优化以及数据标注规范与工具开发等完整链路。资源包为1个PDF文件大小约16.27MB结构完整、图表目录显示正常便于按章节系统研读。目前已有99人学习适合希望将大模型能力落地课堂教学、需要完整技术方案与工程实现思路的读者参考借鉴。1. 从一份 589 页的课堂互动方案说起它到底能解决什么课堂互动这件事做过教育信息化的人都知道有多难落地。一个班四五十人老师抛出一个问题举手的三五个剩下的要么在走神要么在想但不敢说。课后想复盘发现除了考试成绩什么过程数据都没留下。这份《DeepSeek课堂互动增强方案》就是冲着这个场景来的——589 页、60 个大章节从对话状态跟踪DST的适配性分析一路写到容器化部署和算力成本优化是一份完整的工程落地文档不是概念 PPT。它适合谁如果你正在做教育类智能问答系统、课堂实时反馈平台或者手上有 DeepSeek 的 API 想往教学场景里塞这份文档能帮你省掉大量架构设计的时间。它把 DST 技术怎么从通用对话场景迁移到课堂、槽位怎么定义、意图怎么分类、实时反馈的延迟怎么压到毫秒级全都拆开了讲。不适合谁想找一个开箱即用的成品系统的人这份文档给的是方案和实现路径不是打包好的软件。我拿到这份文档的第一反应是终于有人把课堂场景的 DST 适配讲清楚了。通用 DST 模型直接搬到课堂上翻车是必然的——学生说“老师这个再讲一遍”通用模型根本不知道“这个”指什么但课堂 DST 需要结合前序对话状态把指代消解掉。文档第三章专门分析了这个适配冲突后面每一章都在解决一个具体的工程问题。2. 课堂场景的 DST 适配为什么通用方案直接搬会翻车2.1 通用 DST 和课堂 DST 的核心差异在哪对话状态跟踪技术的本质是在多轮对话中维护一个“状态向量”记录当前对话进行到哪了、用户想要什么、哪些信息已经确认、哪些还缺失。通用场景下这个状态向量通常围绕任务型对话设计比如订机票场景的槽位是出发地、目的地、时间、舱位。但课堂场景的对话结构完全不同。课堂对话有三个显著特征第一追问链长。学生问“这个公式怎么推导”接着问“那它在什么题型里用”再问“有没有反例”三轮对话围绕同一个知识点展开通用 DST 的槽位体系根本覆盖不了这种递进关系。第二指代密集。学生大量使用“这个”“那个”“刚才说的”“再讲一遍”这类指代表达脱离上下文完全无法理解。第三意图模糊。学生说“不太懂”可能是概念不懂、推导不懂、应用不懂需要 DST 层结合前序状态做意图推断。文档第三章给出的适配原则是不追求通用 DST 的槽位完备性而是围绕课堂高频互动场景重新定义状态维度。具体来说把状态向量拆成三层——知识点层当前讨论的知识点 ID 和层级关系、交互层提问类型、理解程度、追问深度、上下文层前序意图序列、未解决问题列表。这个三层结构是整份方案的地基后面所有模块都建立在这个状态定义之上。2.2 课堂对话状态的特征维度怎么定义和提取文档第四章把课堂对话状态特征分成了四大类知识点特征、交互行为特征、认知状态特征、上下文关联特征。每一类下面有具体的维度和提取规则。知识点特征包括知识点名称、知识点层级章/节/知识点、知识点关联度当前问题与知识点的匹配程度。交互行为特征包括提问类型概念澄清/推导过程/应用场景/易错点、追问深度首次提问/二次追问/三次以上追问、响应期望即时回答/课后解答。认知状态特征包括理解程度完全不懂/部分理解/基本掌握、困惑类型概念混淆/逻辑断裂/计算错误。上下文关联特征包括前序意图序列、未解决问题列表、指代消解结果。提取规则这块文档给了混合策略规则层处理结构化程度高的特征如知识点名称匹配、追问深度计数模型层处理模糊特征如理解程度判断、困惑类型分类。规则层的实现用正则和关键词匹配就能搞定模型层需要基于 DeepSeek 做微调。# 课堂对话状态特征提取的混合策略示例 import re from typing import Dict, List class ClassroomStateExtractor: def __init__(self, knowledge_base: Dict, model_client): self.kb knowledge_base # 知识点库 self.model model_client # DeepSeek 模型客户端 def extract_knowledge_feature(self, utterance: str) - Dict: 规则层提取知识点特征 # 匹配知识点名称 matched_kp None for kp_name, kp_info in self.kb.items(): if kp_name in utterance: matched_kp kp_info break # 追问深度用对话轮次计数这里简化处理 return { knowledge_point: matched_kp[id] if matched_kp else None, knowledge_level: matched_kp[level] if matched_kp else None, match_score: 1.0 if matched_kp else 0.0 } def extract_cognitive_feature(self, utterance: str, context: List[str]) - Dict: 模型层提取认知状态特征 prompt f基于以下课堂对话上下文判断学生当前的理解程度和困惑类型。 上下文{context} 当前发言{utterance} 请输出 JSON 格式{{understanding: 完全不懂/部分理解/基本掌握, confusion_type: 概念混淆/逻辑断裂/计算错误/无}} response self.model.generate(prompt) return self._parse_json(response) def extract_all(self, utterance: str, context: List[str]) - Dict: 融合规则层和模型层的提取结果 state {} state.update(self.extract_knowledge_feature(utterance)) state.update(self.extract_cognitive_feature(utterance, context)) return state这段代码的核心逻辑是分层提取规则层负责确定性高的特征模型层负责需要语义理解的模糊特征。参数方面knowledge_base是预先构建的学科知识点库model_client是 DeepSeek 的推理接口。实际部署时规则层的匹配可以用 AC 自动机做多模式匹配比逐个遍历知识点快一个数量级。模型层的 prompt 需要针对不同学科做微调数学课的困惑类型和语文课的不一样。2.3 输入数据的结构化设计和格式规范文档第五章专门讲了 DST 模型输入数据的结构化设计。核心字段体系包括session_id会话 ID、turn_id轮次 ID、user_role角色、input_content输入内容、subject学科、grade年级、timestamp时间戳、context_turns历史轮次列表。格式规范用 JSON每个字段都有明确的类型和约束。格式校验规则这块文档给了几个硬性要求session_id 必须是 UUID 格式turn_id 必须单调递增input_content 长度限制在 500 字符以内超长需要截断或分段context_turns 最多保留最近 10 轮。预处理流程包括去除特殊字符、统一标点符号、处理 emoji 和表情符号、数字和单位的标准化。# 输入数据格式校验和预处理 import uuid import re from datetime import datetime def validate_and_preprocess(raw_input: dict) - dict: 校验并预处理课堂对话输入数据 # 校验 session_id if not raw_input.get(session_id): raw_input[session_id] str(uuid.uuid4()) else: try: uuid.UUID(raw_input[session_id]) except ValueError: raise ValueError(session_id 必须是合法的 UUID) # 校验 turn_id 单调递增 if turn_id not in raw_input or not isinstance(raw_input[turn_id], int): raise ValueError(turn_id 必须是整数) # 预处理 input_content content raw_input.get(input_content, ) content re.sub(r[\x00-\x1f\x7f-\x9f], , content) # 去除控制字符 content re.sub(r\s, , content).strip() # 合并空白字符 if len(content) 500: content content[:500] # 截断超长内容 raw_input[input_content] content # 限制 context_turns 长度 if context_turns in raw_input: raw_input[context_turns] raw_input[context_turns][-10:] raw_input[timestamp] raw_input.get(timestamp, datetime.now().isoformat()) return raw_input这段预处理代码解决的是数据质量的问题。课堂场景下学生输入五花八门——有语音转文字带噪音的、有复制粘贴带格式的、有中英文混输的。不做预处理直接喂给模型轻则效果下降重则报错。参数方面500 字符的截断阈值是根据课堂提问的实际长度分布定的超过这个长度的输入大概率是粘贴的题目文本需要单独走题目解析流程。context_turns 保留 10 轮是平衡上下文完整性和推理开销的结果超过 10 轮的历史对话对当前状态的影响已经很小了。3. 意图分类和槽位填充课堂 DST 的两个核心算法怎么调3.1 基于 DeepSeek 的课堂问答意图分类优化文档第七章讲的是意图分类算法的优化。课堂问答的意图分类和通用场景最大的区别在于类别多、边界模糊、样本不均衡。文档里提到覆盖 80 类意图这个量级用传统的文本分类模型如 TextCNN、BERT-base效果很难做好因为类别之间的语义差异太细了。优化方案分两步第一步是基于 DeepSeek 大模型做基础意图分类框架的适配改造第二步是用对比学习增强意图特征的区分度。对比学习的核心思想是让同一意图的样本在特征空间里靠得更近不同意图的样本离得更远。具体实现上用 SimCSE 的思路把同一意图的不同表述作为正样本对不同意图的表述作为负样本对在 DeepSeek 的编码层后面加一个投影头用对比损失训练。# 基于对比学习的意图特征增强简化版 import torch import torch.nn as nn import torch.nn.functional as F class IntentContrastiveModel(nn.Module): def __init__(self, encoder, hidden_dim768, proj_dim128, temperature0.07): super().__init__() self.encoder encoder # DeepSeek 编码器 self.projection nn.Sequential( nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, proj_dim) ) self.temperature temperature def forward(self, input_ids, attention_mask): # 获取编码表示 outputs self.encoder(input_ids, attention_maskattention_mask) cls_embedding outputs.last_hidden_state[:, 0] # [CLS] 向量 # 投影到对比学习空间 proj self.projection(cls_embedding) return F.normalize(proj, dim-1) def contrastive_loss(self, anchor, positive, negatives): 计算对比损失 pos_sim F.cosine_similarity(anchor, positive) / self.temperature neg_sims torch.matmul(anchor, negatives.T) / self.temperature logits torch.cat([pos_sim.unsqueeze(1), neg_sims], dim1) labels torch.zeros(logits.size(0), dtypetorch.long, devicelogits.device) return F.cross_entropy(logits, labels)这段代码的关键参数是temperature控制对比学习的难度。温度太低如 0.01模型只关注最难的负样本容易过拟合温度太高如 0.5所有负样本权重差不多区分度上不去。文档里建议课堂场景用 0.05-0.1我实测下来 0.07 比较稳。proj_dim设 128 是经验值太大容易过拟合太小区分度不够。3.2 槽位填充的算法改进策略文档第九章讲槽位填充的改进。课堂场景的槽位填充有三个痛点动态槽位不同学科、不同知识点的槽位体系不一样、模糊槽值学生说“那个公式”但没说是哪个、小样本某些冷门知识点标注数据少。改进方案的核心是动态槽位体系。传统 DST 的槽位是预定义的固定集合课堂场景下行不通——数学课的槽位和语文课完全不一样甚至同一学科不同章节的槽位也不同。文档的方案是维护一个槽位模板库每个知识点关联一组槽位模板推理时根据当前知识点动态加载对应的槽位集合。模糊槽值的语义补全用检索增强的方式做当模型检测到槽值模糊时触发知识库检索用检索结果作为候选槽值再用一个轻量级的排序模型选出最可能的槽值。小样本场景用提示学习Prompt Learning的方式把槽位填充任务转成完形填空利用 DeepSeek 的预训练知识弥补标注数据的不足。# 动态槽位加载和模糊槽值补全 class DynamicSlotFiller: def __init__(self, slot_template_db, knowledge_retriever, model_client): self.slot_db slot_template_db # 槽位模板库 self.retriever knowledge_retriever # 知识库检索器 self.model model_client def get_slot_template(self, knowledge_point_id: str) - list: 根据知识点动态加载槽位模板 return self.slot_db.get(knowledge_point_id, []) def fill_slots(self, utterance: str, knowledge_point_id: str, context: list) - dict: 填充槽位处理模糊槽值 templates self.get_slot_template(knowledge_point_id) filled {} for slot in templates: # 先用规则匹配 value self._rule_match(utterance, slot) if value is None: # 规则匹配不到用模型抽取 value self._model_extract(utterance, slot, context) if value and self._is_vague(value): # 模糊槽值触发检索补全 candidates self.retriever.search(value, top_k5) value self._rank_candidates(candidates, context) filled[slot[name]] value return filled def _is_vague(self, value: str) - bool: 判断槽值是否模糊 vague_patterns [这个, 那个, 刚才, 之前, 它, 他] return any(p in value for p in vague_patterns) or len(value) 2这段代码的核心是get_slot_template和_is_vague两个方法。前者实现了动态槽位加载后者定义了模糊槽值的判断规则。实际部署时槽位模板库需要按学科和知识点层级组织检索器的 top_k 设 5 是平衡召回率和排序开销的结果。模糊判断的正则表达式需要根据实际语料持续补充我见过学生用“辣个”“内个”来指代的这些都要加进去。3.3 多轮对话上下文关联的实现逻辑文档第八章讲多轮对话的上下文关联。核心问题是怎么在长对话中保持状态的一致性。方案是维护一个状态向量每轮对话结束后更新状态向量下一轮推理时把状态向量作为额外输入。状态向量的更新机制分三种情况新增出现新的知识点或意图、继承当前轮次延续上一轮的状态、覆盖当前轮次推翻了之前的状态。比如学生先问“三角函数怎么推导”状态向量记录知识点三角函数、意图推导过程接着问“那余弦定理呢”状态向量新增知识点余弦定理继承意图推导过程如果学生说“不对我问的是正弦定理”状态向量覆盖知识点正弦定理。异常处理这块文档给了几个兜底策略上下文丢失时如 session_id 断裂重新初始化状态向量状态冲突时如前后轮次的知识点矛盾以最新轮次为准并标记冲突状态向量过长时超过 20 轮做状态压缩只保留最近 5 轮和关键历史状态。4. 实时反馈和性能优化从模型推理到接口调用的全链路提速4.1 低延迟数据传输和处理架构文档第十三章讲实时反馈的技术底座。课堂场景对延迟的要求是硬性的——老师提问后系统如果 3 秒才给出反馈课堂节奏已经断了。方案的目标是端到端延迟控制在 500ms 以内。架构上分三层接入层用 WebSocket 做长连接避免 HTTP 轮询的开销传输层用 Protobuf 替代 JSON序列化体积减少 60% 以上处理层用流式计算框架做实时聚合。文档里重点讲了 Flink 的配置包括窗口大小、水位线、状态后端的选择。# Flink 课堂反馈流处理配置示例 job: name: classroom-feedback-stream parallelism: 4 # 并行度根据课堂并发数调整 checkpoint: interval: 10000 # 检查点间隔 10s mode: EXACTLY_ONCE state_backend: type: rocksdb incremental: true source: type: kafka topic: classroom-interaction bootstrap_servers: kafka:9092 group_id: feedback-processor starting_offset: latest sink: type: websocket endpoint: /ws/feedback batch_size: 10 # 批量推送减少网络开销 flush_interval: 100 # 100ms 强制刷新这份配置的关键参数是parallelism和flush_interval。并行度根据课堂并发数调整一个班 50 人同时互动并行度 4 够用全校同时上课需要按比例增加。flush_interval设 100ms 是平衡实时性和网络开销的结果设太小会导致频繁的小包传输设太大会增加延迟。state_backend用 RocksDB 是因为课堂反馈需要维护每个学生的状态内存放不下。4.2 模型推理速度优化的四个层面文档第十五章把推理优化拆成四个层面模型层、推理引擎层、硬件层、请求处理层。模型层的优化包括量化INT8 量化可以提速 2-3 倍精度损失控制在 1% 以内、剪枝去掉冗余的注意力头、蒸馏用大模型教小模型。文档里重点讲了蒸馏方案教师模型用 DeepSeek 大模型学生模型用 6 层 Transformer蒸馏损失函数的设计在第三十三章有详细展开。推理引擎层的优化主要是用 vLLM 或 TensorRT 做推理加速。vLLM 的 PagedAttention 机制对课堂场景特别有用——课堂对话的输入长度差异很大有的学生问一句话有的粘贴一整道题PagedAttention 可以动态管理 KV Cache避免显存浪费。# vLLM 部署 DeepSeek 蒸馏模型的启动命令 python -m vllm.entrypoints.openai.api_server \ --model /path/to/distilled-deepseek-dst \ --tensor-parallel-size 2 \ --max-model-len 2048 \ --gpu-memory-utilization 0.9 \ --enable-prefix-caching \ --disable-log-requests参数说明tensor-parallel-size是张量并行数根据 GPU 数量设置max-model-len是最大序列长度课堂对话设 2048 够用gpu-memory-utilization控制显存利用率0.9 是安全上限enable-prefix-caching开启前缀缓存对课堂场景中重复的系统提示词特别有效能减少 30% 以上的重复计算。硬件层的优化包括用 GPU 替代 CPU 推理提速 10 倍以上、用 NVMe SSD 做模型加载减少冷启动时间、用 RDMA 网络做多机通信降低分布式推理的通信开销。请求处理层的优化包括动态批处理把多个学生的请求合并成一个批次推理、优先级队列教师的请求优先于学生、请求缓存相同问题的答案缓存复用。4.3 接口调用的性能优化文档第四十四章讲接口调用的优化。核心思路是减少不必要的网络往返和计算。具体措施包括接口层用 HTTP/2 替代 HTTP/1.1多路复用减少连接开销、用连接池复用后端连接、用 CDN 缓存静态资源、用 JWT 替代 Session 做鉴权减少服务端状态查询。监控和调优闭环这块文档建议用 Prometheus Grafana 做指标采集和可视化关键指标包括P50/P95/P99 延迟、QPS、错误率、GPU 利用率、显存占用。调优的触发条件P95 延迟超过 500ms 时告警GPU 利用率持续低于 30% 时考虑缩容错误率超过 1% 时触发回滚。5. 避坑与排查课堂 DST 落地中最容易翻车的五个地方5.1 现象模型在测试集上 F1 很高上线后意图识别准确率暴跌原因测试集的分布和真实课堂对话的分布不一致。测试集通常是标注人员精心构造的语句完整、意图明确真实课堂对话充满省略、指代、错别字、中英文混输。模型在测试集上过拟合了。解决用真实课堂语料做验证集至少包含 20% 的“脏数据”。上线前做 A/B 测试用真实流量验证效果。如果准确率下降超过 10%需要重新做数据增强把真实场景的噪声注入训练集。5.2 现象多轮对话到第三轮以后状态跟踪开始混乱原因状态向量的更新逻辑有 bug通常是继承和覆盖的边界条件没处理好。比如学生说“不是这个是另一个”模型可能把“另一个”当成新的知识点而不是覆盖当前知识点。解决在状态更新逻辑里加显式的冲突检测。当检测到否定词“不是”“不对”“错了”时触发状态回滚或覆盖。同时限制状态向量的最大长度超过 10 轮时做状态压缩只保留关键状态。5.3 现象实时反馈延迟忽高忽低高峰期超过 2 秒原因流式计算框架的并行度不够或者 Kafka 分区数和 Flink 并行度不匹配。课堂高峰期如上课前 5 分钟请求量突增处理不过来就排队。解决Flink 并行度设置为 Kafka 分区数的整数倍确保每个分区都有独立的消费者。开启 Flink 的反压监控当反压持续超过 10 秒时自动扩容。WebSocket 推送用批量模式减少小包传输。5.4 现象模型蒸馏后精度下降超过 5%课堂问答质量明显变差原因蒸馏损失函数的设计没有考虑课堂 DST 任务的特性。通用的蒸馏损失只关注输出层的 KL 散度忽略了中间层的特征对齐。课堂 DST 任务对槽位边界的敏感度很高中间层特征不对齐会导致槽位填充错误。解决在蒸馏损失里加中间层特征对齐损失如 MSE 或余弦相似度权重设为 0.3-0.5。同时用课堂验证集做早停当验证集精度连续 3 个 epoch 不提升时停止蒸馏。文档第三十三章给了完整的损失函数设计包括主损失、辅助损失和正则项。5.5 现象容器化部署后GPU 利用率上不去推理延迟反而增加原因容器没有正确挂载 GPU 驱动或者 CUDA 版本和宿主机不匹配。另一个常见原因是容器的 CPU 配额设得太低导致数据预处理成为瓶颈。解决用 nvidia-docker 运行容器确保 GPU 设备正确挂载。CUDA 版本和宿主机驱动版本要匹配CUDA 12.x 需要驱动 525。CPU 配额至少给 4 核内存至少 16GB。用nvidia-smi和docker stats交叉验证资源使用情况。6. 从蒸馏到部署一个可复现的轻量化落地路径6.1 蒸馏后模型的精度补偿技巧蒸馏后的模型精度下降是必然的关键是补偿。文档第三十六章给了三个层面的补偿方法模型层、数据层、推理层。模型层的补偿用残差连接和注意力蒸馏。具体做法是在学生模型的每一层后面加一个轻量级的适配器Adapter适配器的输出和原始输出相加。适配器的参数量很小通常不到原模型的 1%但能有效补偿蒸馏过程中的信息损失。数据层的补偿用知识蒸馏数据增强的组合。除了用教师模型的软标签做蒸馏还用教师模型生成额外的训练数据。具体做法是用教师模型对未标注的课堂语料做推理把高置信度的推理结果作为伪标签加入训练集。伪标签的比例控制在 20% 以内太多会引入噪声。推理层的补偿用集成推理。部署两个学生模型一个用蒸馏损失训练一个用原始交叉熵损失训练推理时取两个模型输出的平均。这个方法的推理开销翻倍但对精度要求高的场景如考试答疑值得用。# 蒸馏后模型的精度补偿适配器 伪标签 集成推理 class DistilledModelWithAdapter(nn.Module): def __init__(self, student_model, adapter_dim64): super().__init__() self.student student_model self.adapter nn.Sequential( nn.Linear(student_model.hidden_dim, adapter_dim), nn.ReLU(), nn.Linear(adapter_dim, student_model.hidden_dim) ) def forward(self, input_ids, attention_mask): # 学生模型原始输出 student_output self.student(input_ids, attention_mask) # 适配器补偿 adapter_output self.adapter(student_output.last_hidden_state) # 残差连接 compensated student_output.last_hidden_state adapter_output return compensated def generate_pseudo_labels(teacher_model, unlabeled_data, confidence_threshold0.9): 用教师模型生成伪标签 pseudo_labeled [] for sample in unlabeled_data: with torch.no_grad(): logits teacher_model(sample[input_ids], sample[attention_mask]) probs F.softmax(logits, dim-1) max_prob, pred probs.max(dim-1) if max_prob confidence_threshold: pseudo_labeled.append({ input_ids: sample[input_ids], attention_mask: sample[attention_mask], label: pred.item(), confidence: max_prob.item() }) return pseudo_labeled这段代码的关键参数是adapter_dim和confidence_threshold。适配器维度设 64 是经验值太小补偿能力不够太大容易过拟合。置信度阈值设 0.9 是平衡伪标签数量和质量的结果设 0.95 伪标签太少设 0.8 噪声太多。实际使用时伪标签数据要和原始标注数据混合训练比例控制在 1:4 左右。6.2 部署验证的检查清单模型部署上线前我一般会走一遍这个检查清单检查项验证方法通过标准模型加载冷启动测试加载时间 30s推理延迟压测工具模拟 50 并发P95 500ms意图分类准确率真实课堂验证集F1 0.85槽位填充准确率真实课堂验证集F1 0.80状态跟踪一致性多轮对话测试状态冲突率 2%异常处理注入无效输入兜底策略触发率 100%资源占用监控 GPU/CPU/内存GPU 利用率 60-80%容灾恢复模拟服务宕机自动恢复时间 10s这个清单里的每一项都是血泪教训换来的。特别是状态跟踪一致性这一项我见过太多系统在前几轮表现正常到第五轮以后状态就乱了。测试的时候一定要构造长对话至少 10 轮以上覆盖追问、否定、话题切换这些场景。6.3 一个容易被忽略的细节课堂场景的冷启动课堂场景有一个特殊问题每节课开始的时候系统是“冷”的——没有历史对话状态没有学生画像没有知识点上下文。如果直接让学生提问第一轮的意图识别和槽位填充准确率会明显低于后续轮次。我的做法是每节课开始前用课程大纲和上节课的知识点做一次预热。具体来说把本节课的知识点列表和关联知识点加载到状态向量的初始值里这样第一轮对话就有上下文可参考。预热的数据量不大一个知识点列表通常几十条加载时间在 100ms 以内。从那以后我每次部署课堂 DST 系统都强制走一遍预热流程不管课程类型是什么。这个习惯帮我省了很多“第一轮问答翻车”的麻烦。希望帮到你。本文还有配套的精品资源点击获取
返回列表