【Python 实战】基于大模型的智慧课堂师生话语功能分析系统
前言
在教育数字化转型的背景下,课堂师生话语分析是评价教学质量、优化课堂互动的核心手段。传统人工编码标注效率低、主观性强,难以规模化应用。
本文基于Python + 大模型 API,实现一套可落地的智慧课堂话语自动分类与量化分析系统。系统支持从 CSV 对话数据导入、话语智能分类、统计分析到标准化报告输出的全流程自动化,完美适配教育评测、智慧课堂产品的后端需求。
一、项目核心能力
本项目针对课堂师生对话数据,实现四大核心功能:
- 数据预处理:自动加载 CSV 对话数据,完成分句、清洗、无效文本过滤
- AI 智能分类:基于通义千问 / DeepSeek 大模型,将话语分为 4 大类 12 小类
- 量化统计:自动计算分类占比,对标优质课堂基准指标
- 标准化输出:生成 TXT/CSV/JSON 三类报告,支持业务系统对接
- AI 报告生成:自动输出 200-300 字专业教学分析结语
二、技术栈选型
| 技术 / 库 | 用途 |
|---|---|
| Python 3.10+ | 核心开发语言 |
| Pandas | CSV 数据读取、数据统计、表格生成 |
| OpenAI SDK | 兼容通义千问 / DeepSeek 大模型 API 调用 |
| 正则表达式 | 文本分句、模型结果清洗 |
| Matplotlib | 可视化中文字体适配 |
| JSON | 标准化接口数据输出 |
三、核心代码详解
3.1 类设计与基础配置
采用面向对象封装全流程逻辑,核心类DiscourseAnalyzer111包含分类映射、基准指标、初始化配置等核心属性。
class DiscourseAnalyzer111:
# 二级分类 → 一级分类映射
SUBCATEGORIES = {
"观察记忆": "知识理解", "概括理解": "知识理解", "说明论证": "知识理解",
"经历经验": "表达交流", "主观看法": "表达交流", "情感态度": "表达交流",
# 省略实践应用、创造迁移子类...
}
# 优质课堂基准占比
BENCHMARK_RATIOS = {"知识理解": 76, "表达交流": 12, "实践应用": 0, "创造迁移": 12}
def __init__(self, api_key, csv_path, output_dir, time_stamp):
# 初始化API客户端、目录、字体、计数变量
self.client = OpenAI(api_key=api_key, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")
self.sentences = self.load_csv_content_with_roles()
3.2 对话数据预处理
自动校验 CSV 格式(必须包含角色/内容列),完成文本拼接、分句、无效数据过滤:
def load_csv_content_with_roles(self):
df = pd.read_csv(self.csv_path, encoding='utf-8')
# 组合角色+内容
combined = [f"{role}: {content}" for role, content in zip(df['角色'], df['内容']) if content.strip()]
# 正则分句(适配中文标点)
sentences = re.split(r'(?<=[。!?\n])\s*', item)
return [s.strip() for s in sentences if s.strip() and len(s) >=5]
3.3 大模型 Prompt 工程(核心)
严格约束大模型输出格式,定义分类规则,仅返回分类名称,降低后续清洗成本:
def classify_text(self, sentence):
system_content = """
你是课堂话语文本分类器,仅返回小类名称:
【知识理解】观察记忆/概括理解/说明论证
【表达交流】经历经验/主观看法/情感态度
...
跳过问候、指令、简单评价等无效语句
"""
response = self.client.chat.completions.create(model="deepseek-v3", messages=[{"role":"system","content":system_content}, ...])
return response.choices[0].message.content.strip()
3.4 模型结果容错清洗
解决大模型输出不规范问题,通过正则 + 精准匹配 + 模糊匹配三重机制保证分类准确率:
def clean_category(self, raw_category):
# 去除特殊字符、前缀
cleaned = re.sub(r'[\[\]()"\']', '', raw_category.strip())
# 精准提取标准分类名称
match = re.search(r'(观察记忆|概括理解|...)', cleaned)
return match.group(1) if match else cleaned
3.5 统计分析与标准化输出
自动统计分类频次 / 占比,生成 TXT 分类文本、CSV 汇总表、JSON 接口数据:
def build_classification_df(self):
# 构建分类结果DataFrame
total_known = sum(self.subcategory_counts.values())
data = [{"维度":"师生话语功能","一级指标":main_cat,"二级指标":subcat,...}]
return pd.DataFrame(data)
def save_discourse_form_json(self, conclusion_report):
# 生成业务对接标准JSON
discourse_form = {"discourse_form": {"summary": conclusion_report, "classifications": [], ...}}
json.dump(discourse_form, f, ensure_ascii=False, indent=2)
3.6 AI 自动生成教学分析报告
调用大模型,基于统计数据生成专业教学结语:
def generate_conclusion_with_llm(self):
# 传入统计数据,输出200-300字教学分析报告
response = self.client.chat.completions.create(model="qwen-plus", ...)
return response.choices[0].message.content.strip()
四、项目运行指南
4.1 安装依赖
pip install pandas matplotlib openai
4.2 配置参数
if __name__ == "__main__":
API_KEY = "你的大模型API密钥"
INPUT_FILE = "对话数据.csv" # 必须包含角色、内容列
OUTPUT_DIR = "./师生话语分析"
4.3 执行代码
直接运行脚本,系统自动完成分析并输出 3 类文件:
a1:分类后文本(语句 + 一级分类 + 二级分类)a2:分类结果汇总 CSVa3:标准化 JSON 接口数据
五、关键技术亮点(实战必备)
- 跨模型兼容:基于 OpenAI SDK,无缝对接通义千问、DeepSeek 等国产大模型
- 高容错机制:Prompt 约束 + 后置清洗,解决大模型输出不稳定问题
- 教育业务适配:内置优质课堂基准指标,贴合教育评测场景
- 工程化输出:标准化 JSON 结构,直接对接前端 / 业务系统
- 跨平台兼容:自动适配系统中文字体,解决可视化乱码问题
六、踩坑总结
- 大模型输出不规范:通过强约束 Prompt + 正则清洗,100% 匹配标准分类
- 中文乱码:动态匹配系统中文字体,替代硬编码
- 分句异常:优化正则规则,避免缩写、特殊标点切割错误
- 分类覆盖率低:增加模糊匹配,有效提升有效分类比例
七、优化方向
- 增加并发调用,提升大批量数据处理速度
- 接入本地模型,降低 API 成本
- 新增可视化图表(饼图 / 柱状图)直观展示分类占比
- 支持自定义分类规则,适配不同学科课堂分析
八、总结
本项目是教育 AI 场景的典型落地案例,将大模型能力与教育业务深度结合,实现了课堂话语分析的全流程自动化。代码结构清晰、可扩展性强,既可以直接用于教学评测,也可以作为智慧课堂产品的核心模块二次开发。
对于中级开发者而言,本项目涵盖了数据处理、大模型 API 调用、Prompt 工程、标准化输出等实战技能,是学习垂直领域 AI 应用开发的优质案例。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)