| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- """
- AI 自动出题器
- 基于药典原文 + 考试大纲知识点,使用 LLM 自动生成 A/B/X 型试题
- """
- import json
- import logging
- from typing import Optional
- from dataclasses import dataclass
- logger = logging.getLogger(__name__)
- @dataclass
- class GeneratedQuestion:
- question_type: str # A / B / X
- subject: str
- chapter_id: str
- difficulty: int
- content: str
- options: list[str]
- answer: str
- explanation: str
- source: str
- knowledge_point_ids: list[str]
- class QuestionGenerator:
- def __init__(self, llm_client=None):
- self.llm = llm_client
- def generate(
- self,
- knowledge_point: dict,
- drug_reference: Optional[dict] = None,
- question_type: str = "A",
- count: int = 3,
- ) -> list[GeneratedQuestion]:
- """
- Phase 2 实现。
- 基于知识点 + 药典原文,生成指定类型和数量的题目。
- """
- return []
- def generate_batch(
- self,
- knowledge_points: list[dict],
- question_counts: dict = None,
- ) -> list[GeneratedQuestion]:
- """批量出题,按题型比例分配"""
- if question_counts is None:
- question_counts = {"A": 4, "B": 3, "X": 3}
- return []
- def validate_answer(self, question: GeneratedQuestion) -> bool:
- """
- 验证答案是否能在原文中找到明确依据。
- 若验证失败,标记需要人工审核。
- """
- return True
- def export_jsonl(self, questions: list[GeneratedQuestion], output_path: str):
- """导出为 JSONL 格式,用于人工审核"""
- with open(output_path, "w", encoding="utf-8") as f:
- for q in questions:
- f.write(json.dumps({
- "question_type": q.question_type,
- "subject": q.subject,
- "chapter_id": q.chapter_id,
- "difficulty": q.difficulty,
- "content": q.content,
- "options": q.options,
- "answer": q.answer,
- "explanation": q.explanation,
- "source": q.source,
- "knowledge_point_ids": q.knowledge_point_ids,
- }, ensure_ascii=False) + "\n")
- logger.info(f"Exported {len(questions)} questions to {output_path}")
|