通信制高校向け自動採点システム REST API — 記述式を含む5タイプの問題に対応
JWT トークン取得 — {"username": "...", "password": "..."}
トークンリフレッシュ — {"refresh": "..."}
全APIリクエストに Authorization: Bearer <access_token> ヘッダーが必要です(health を除く)。
回答提出(全5タイプ対応)— 問題IDと回答データを送信し、自動採点結果を取得
記述式の単一採点 — 問題文・模範解答・生徒回答を直接送信して採点
記述式のバッチ採点 — 複数の生徒回答を一括採点
記述式の詳細採点 — 6観点スコア+フィードバック付き
CSV一括採点 — CSVファイルをアップロードして一括採点
模範解答の自動生成 — 問題文とキーワードから模範解答を生成
表現レベル変換 — テキストの難易度を平易/標準/高度に変換
問題一覧 — ?subject=理科&question_type=essay でフィルタ可能
問題作成 — 5タイプ(単一選択・正誤・短答・穴埋め・記述)に対応
/api/v1/questions/{id}/
問題の詳細取得・更新・削除
/api/v1/questions/{id}/status/ステータス変更 — {"status": "active"} で実施中に変更
採点結果一覧 — ?question_id=1&student_id=S001 でフィルタ可能
/api/v1/results/{id}/採点結果の詳細(6観点スコア・フィードバック含む)
CSV エクスポート — 採点結果をCSV形式でダウンロード
スコア統計 — 平均・最高・最低・回答数
観点別統計 — C1〜C6 各観点の平均スコア
パフォーマンス分析 — 得点分布
トレンド分析 — 日別スコア推移
生徒別サマリー — 各生徒の平均点・回答数
ユーザー一覧
類義語辞書一覧 — ?keyword=光合成 でフィルタ
RAGドキュメント一覧
RAG検索 — クエリに関連するドキュメントをTF-IDFで検索
採点ウェイト設定 — 6観点の重み(C1〜C6)を取得・変更
ヘルスチェック — 認証不要
POST /api/v1/token/
{"username": "teacher1", "password": "pass1234"}
POST /api/v1/questions/create/
Authorization: Bearer <token>
{
"question_type": "essay",
"title": "地球温暖化について",
"question_text": "地球温暖化の原因と対策を300字で論じなさい。",
"model_answer": "地球温暖化の主な原因は...",
"keywords": ["温室効果ガス", "二酸化炭素", "省エネルギー"],
"subject": "理科", "grade": "1年",
"max_score": 100, "difficulty": 2
}
POST /api/v1/questions/{id}/status/
{"status": "active"}
POST /api/v1/answer/
{
"question_id": 1,
"answer_data": {"answer": "地球温暖化は二酸化炭素の排出が原因で..."},
"student_id": "S001",
"student_name": "伊藤翔太"
}
レスポンスに採点結果(score, criterion_details, feedback)が含まれます。
POST /api/v1/answer/
{
"question_id": 5,
"answer_data": {"selected_choice": "ア"},
"student_id": "S002"
}
正解なら "is_correct": true, "score": 100.0、不正解なら "is_correct": false, "score": 0.0
POST /api/v1/answer/
{
"question_id": 10,
"answer_data": {"blanks": {"1": "立法権", "2": "行政権", "3": "司法権"}},
"student_id": "S002"
}
各空欄の正誤と部分点が返されます。
GET /api/v1/analytics/scores/?question_id=1
平均点・最高点・最低点・回答数を取得。
GET /api/v1/analytics/criteria/?question_id=1
C1〜C6 各観点の平均スコア。「論理構成」が低い生徒が多い、など。
GET /api/v1/analytics/students/
GET /api/v1/results/export/?question_id=1
Excel等で分析可能なCSVをダウンロード。
POST /api/v1/model-answer/generate/
{
"question_text": "メディアリテラシーの重要性を論じなさい。",
"subject": "公民",
"keywords": ["フェイクニュース", "批判的思考", "情報リテラシー"],
"max_length": 400
}
POST /api/v1/expression/convert/
{
"text": "フェイクニュースの蔓延は...",
"target_level": "easy"
}
レベル: easy(平易)/ standard(標準)/ advanced(高度)
| ID | 観点 | ウェイト | 評価内容 |
|---|---|---|---|
C1 | 主張の明確さ | 15% | 冒頭・末尾に明確な主張があるか |
C2 | 理由の妥当性 | 15% | 「なぜなら」等の接続表現で具体的な根拠を示しているか |
C3 | 論理構成 | 15% | 導入→本論→結論の3部構成、5文以上 |
C4 | 意味類似度 | 20% | 模範解答との内容の一致度(意味的類似性) |
C5 | キーワード網羅性 | 15% | 指定キーワード(+類義語)の使用率 |
C6 | 文法・語彙 | 20% | 文法の正確さ+語彙の豊かさ(TTR) |
QOOP Scoring System © 2025 — Powered by Django REST Framework + llama.cpp