基於作業批改資料的學情分析系統,構建學生能力畫像、班級整體表現看板、教學建議引擎。實現從資料收集到教學決策的完整閉環。
生成班級學情資料看板
引數:
- class_id (string): 班級ID
- time_range (string): 時間範圍,"week"、"month"、"semester"
- include_metrics (array): 包含的指標列表
- visualization_type (string): 視覺化型別,"summary"、"detailed"、"export"
返回:
{
"dashboard_id": "db_20260416_001",
"class_info": {
"class_id": "math2024-01",
"student_count": 45,
"time_range": "2026-04-01 至 2026-04-15"
},
"overview_metrics": {
"submission_rate": 92.3,
"average_score": 78.5,
"completion_rate": 85.7,
"improvement_rate": 12.3
},
"knowledge_heatmap": [
{
"topic": "導數計算",
"mastery_rate": 88.2,
"common_errors": ["鏈式法則", "隱函式求導"]
},
{
"topic": "定積分應用",
"mastery_rate": 72.5,
"common_errors": ["積分上下限", "面積計算"]
}
],
"ability_radar": {
"concept_understanding": 75.3,
"computation_ability": 82.1,
"logical_reasoning": 68.7,
"problem_solving": 71.2,
"mathematical_modeling": 65.4
},
"visualizations": {
"heatmap_url": "https://example.com/heatmap.png",
"radar_chart_url": "https://example.com/radar.png",
"trend_chart_url": "https://example.com/trend.png"
}
}
深度分析學生個人學習畫像
引數:
- student_id (string): 學生ID
- analysis_depth (string): 分析深度,"basic"、"standard"、"deep"
- include_comparison (boolean): 是否包含班級對比
- generate_recommendations (boolean): 是否生成學習建議
返回:
{
"student_id": "stu001",
"basic_info": {
"name": "張三",
"class": "math2024-01",
"total_assignments": 24,
"average_score": 81.5
},
"learning_trend": {
"score_trend": [75, 78, 82, 85, 81, 83, 86],
"submission_trend": [1, 1, 1, 1, 0, 1, 1], # 1=提交,0=未提交
"time_spent_trend": [45, 50, 48, 52, 0, 55, 53] # 分鐘
},
"knowledge_mastery": {
"strong_topics": [
{"topic": "導數計算", "mastery": 92, "rank": "top10%"},
{"topic": "函式極限", "mastery": 88, "rank": "top20%"}
],
"weak_topics": [
{"topic": "微分中值定理", "mastery": 62, "rank": "bottom30%"},
{"topic": "泰勒公式", "mastery": 58, "rank": "bottom25%"}
],
"improving_topics": [
{"topic": "不定積分", "from": 65, "to": 78, "improvement": 13}
]
},
"error_patterns": {
"most_common": "計算粗心錯誤",
"frequency": 8,
"contexts": ["積分計算", "導數運算"],
"time_pattern": "作業後半段出現較多"
},
"personalized_recommendations": {
"immediate": [
"重點複習微分中值定理的應用場景",
"完成泰勒公式專項練習5題"
],
"short_term": [
"每週增加30分鐘證明題練習",
"建立錯題本,記錄計算粗心錯誤"
],
"long_term": [
"參加數學建模興趣小組",
"閱讀《微積分的歷程》拓展視野"
]
},
"comparison_with_class": {
"score_percentile": 75.3,
"submission_rank": "前30%",
"improvement_rank": "前20%"
}
}
生成教學建議和課堂最佳化方案
引數:
- class_id (string): 班級ID
- focus_topics (array): 重點關注知識點
- time_constraint (number): 課堂時間約束(分鐘)
- teaching_style (string): 教學風格,"traditional"、"interactive"、"flipped"
返回:
{
"recommendation_id": "rec_001",
"class_analysis": {
"overall_level": "中等偏上",
"main_challenges": ["抽象概念理解", "證明題邏輯"],
"learning_characteristics": "計算能力強,邏輯推理需加強"
},
"next_class_focus": {
"primary_topic": "微分中值定理應用",
"time_allocation": {
"concept_explanation": 20,
"example_demonstration": 15,
"student_practice": 25,
"qna_discussion": 10
},
"key_points": [
"羅爾定理與拉格朗日定理的聯絡",
"中值定理的幾何解釋",
"典型應用場景分析"
]
},
"differentiated_instruction": {
"advanced_students": [
"挑戰題:中值定理的推廣形式",
"閱讀材料:《微積分發展史》相關章節"
],
"average_students": [
"鞏固練習:標準題型訓練",
"小組討論:定理應用例項"
],
"struggling_students": [
"基礎回顧:定理條件理解",
"一對一輔導:具體問題解答"
]
},
"resource_recommendations": {
"videos": [
{
"title": "微分中值定理直觀解釋",
"url": "https://example.com/video1",
"duration": 8,
"suitable_for": "all"
}
],
"interactive_tools": [
{
"name": "GeoGebra中值定理演示",
"url": "https://geogebra.org/...",
"activity": "拖動觀察定理條件變化"
}
],
"practice_sets": [
{
"name": "中值定理基礎練習",
"difficulty": "基礎",
"count": 6,
"estimated_time": 30
}
]
},
"assessment_suggestions": {
"formative": [
"課堂小測:定理條件判斷",
"小組展示:應用例項分享"
],
"summative": [
"單元測試:包含證明和應用題",
"專案作業:實際問題建模"
]
}
}
# 生成月度班級學情看板
openclaw skill calculus-learning-analytics generate_class_dashboard \
--class-id "math2024-01" \
--time-range "month" \
--include-metrics "['submission_rate','average_score','knowledge_mastery']" \
--visualization-type "detailed"
# 深度分析學生學習情況
openclaw skill calculus-learning-analytics analyze_student_profile \
--student-id "stu001" \
--analysis-depth "deep" \
--include-comparison true \
--generate-recommendations true
# 為下週課堂生成教學方案
openclaw skill calculus-learning-analytics generate_teaching_recommendations \
--class-id "math2024-01" \
--focus-topics "['微分中值定理','泰勒公式']" \
--time-constraint 90 \
--teaching-style "interactive"
class AbilityModel:
"""學生能力多維度建模"""
def __init__(self):
self.dimensions = {
'concept_understanding': {
'indicators': ['定義記憶', '定理理解', '概念應用'],
'weight': 0.3
},
'computation_ability': {
'indicators': ['計算速度', '計算準確率', '複雜計算'],
'weight': 0.25
},
'logical_reasoning': {
'indicators': ['證明邏輯', '問題分析', '推理能力'],
'weight': 0.25
},
'problem_solving': {
'indicators': ['策略選擇', '方法創新', '結果驗證'],
'weight': 0.2
}
}
def calculate_ability_scores(self, student_data):
"""計算各維度能力分數"""
scores = {}
for dim_name, dim_config in self.dimensions.items():
dimension_score = 0
total_weight = 0
for indicator in dim_config['indicators']:
# 從學生資料中提取指標分數
indicator_score = self.extract_indicator_score(
student_data, dim_name, indicator
)
dimension_score += indicator_score
total_weight += 1
scores[dim_name] = dimension_score / total_weight
return scores
class KnowledgeGraphAnalyzer:
"""知識點關聯關係分析"""
def __init__(self):
self.graph = KnowledgeGraph()
def analyze_prerequisites(self, weak_topic):
"""分析薄弱知識點的前置依賴"""
prerequisites = self.graph.get_prerequisites(weak_topic)
# 檢查學生是否掌握前置知識點
missing_prereqs = []
for prereq in prerequisites:
if not self.check_mastery(prereq):
missing_prereqs.append({
'topic': prereq,
'mastery_level': self.get_mastery_level(prereq),
'recommendation': f'先複習{prereq}'
})
return missing_prereqs
def find_related_errors(self, error_type):
"""發現關聯錯誤模式"""
related_errors = []
# 基於知識圖譜查詢關聯錯誤
for topic in self.graph.get_related_topics(error_type):
similar_errors = self.find_similar_errors(topic, error_type)
if similar_errors:
related_errors.append({
'topic': topic,
'error_count': len(similar_errors),
'common_pattern': self.extract_pattern(similar_errors)
})
return related_errors
class PerformancePredictor:
"""學生表現預測模型"""
def __init__(self):
self.model = self.load_prediction_model()
def predict_future_score(self, student_history, upcoming_topic):
"""預測學生在未來知識點上的表現"""
# 特徵工程
features = self.extract_features(student_history)
# 新增知識點特徵
topic_features = self.get_topic_features(upcoming_topic)
features.update(topic_features)
# 模型預測
predicted_score = self.model.predict(features)
confidence = self.model.predict_proba(features)
return {
'predicted_score': predicted_score,
'confidence': confidence,
'key_factors': self.explain_prediction(features)
}
def identify_at_risk_students(self, class_data, threshold=60):
"""識別風險學生"""
at_risk = []
for student in class_data:
# 預測未來表現
prediction = self.predict_future_score(
student['history'],
student['next_topic']
)
if prediction['predicted_score'] < threshold:
at_risk.append({
'student_id': student['id'],
'predicted_score': prediction['predicted_score'],
'risk_factors': prediction['key_factors'],
'intervention_suggested': self.suggest_intervention(student)
})
return at_risk
# 獲取深度錯誤分析
from calculus_error_analyzer import get_error_insights
error_insights = get_error_insights(
class_id="math2024-01",
time_range="month",
analysis_depth="deep"
)
# 整合到學情報告
dashboard_data['error_analysis'] = error_insights
# 基於薄弱點生成練習
from question_type_generator import generate_targeted_practice
practice_set = generate_targeted_practice(
weak_topics=student_profile['weak_topics'],
difficulty="adaptive",
count=10
)
def generate_knowledge_heatmap(self, class_data):
"""生成知識點掌握熱力圖"""
heatmap_data = []
for topic in self.knowledge_topics:
# 計算班級平均掌握率
mastery_rates = [
student['knowledge_mastery'].get(topic, 0)
for student in class_data
]
avg_mastery = sum(mastery_rates) / len(mastery_rates)
# 識別常見錯誤
common_errors = self.identify_common_errors(topic, class_data)
heatmap_data.append({
'topic': topic,
'mastery_rate': avg_mastery,
'common_errors': common_errors,
'color_intensity': self.calculate_color(avg_mastery)
})
return heatmap_data
def generate_ability_radar(self, student_scores, class_average):
"""生成能力維度雷達圖"""
radar_data = {
'dimensions': list(student_scores.keys()),
'student_scores': list(student_scores.values()),
'class_average': list(class_average.values()),
'max_score': 100
}
# 計算相對優勢
relative_strengths = []
for dim in student_scores:
relative = student_scores[dim] - class_average[dim]
relative_strengths.append({
'dimension': dim,
'difference': relative,
'strength': '優勢' if relative > 5 else '劣勢' if relative < -5 else '平均'
})
radar_data['relative_analysis'] = relative_strengths
return radar_data
analytics_settings:
scoring_weights:
concept_understanding: 0.30
computation_ability: 0.25
logical_reasoning: 0.25
problem_solving: 0.20
prediction_settings:
model: "xgboost"
features: ["historical_scores", "submission_pattern", "error_types"]
horizon: 7 # 預測未來7天
visualization:
color_scheme: "viridis"
chart_types: ["heatmap", "radar", "line", "bar"]
export_formats: ["png", "pdf", "html"]
alert_thresholds:
performance:
at_risk: 60 # 低於60分預警
significant_drop: 15 # 分數下降15分以上
engagement:
missing_submissions: 3 # 連續3次未提交
late_submissions: 5 # 5次以上遲交
progress:
stagnation: 7 # 7天無進步
regression: 10 # 退步10分以上
小蔥技能7w4.net有完整的技能分類。
```python class AnalyticsCache: """學情資料快取管理"""
def __init__(self):
self.cache_ttl = {
'dashboard': 300, # 5分鐘
'student_profile': 600, # 10分鐘
'predictions': 1800, # 30分鐘
'recommendations': 3600 # 1小時
}
async def get_cached_analysis(self, cache_key, analysis_type):
"""獲取快取的分析結果"""
ttl = self.cache_ttl.get(analysis_type, 300)
這個 Skill 質量中等偏上。優點是文件寫得很詳細,中文說明清晰易懂,工具功能劃分合理(看板、分析、建議),示例豐富,容易上手。不足是隻有使用說明,沒有實際的程式程式碼可用;很多功能依賴外部模型,但沒說怎麼獲取;如果想真正用起來,還需要自己補充不少東西。文件完整性不錯,但實用性還需要加強。