Spaces:
Sleeping
Sleeping
| # api/courseware/activity_designer.py | |
| """ | |
| Activity & Assignment Designer:课堂活动、作业及评分标准(Rubric);从上传资料提取核心知识点。 | |
| """ | |
| from typing import Optional, List, Tuple | |
| from api.config import client, DEFAULT_MODEL, USE_WEAVIATE | |
| from api.courseware.rag import get_rag_context_with_refs, inject_refs_instruction | |
| from api.courseware.references import append_references_to_content | |
| from api.courseware.prompts import ACTIVITY_DESIGNER_SYSTEM, ACTIVITY_DESIGNER_USER_TEMPLATE | |
| def design_activities_and_assignments( | |
| topic: str, | |
| learning_objectives: Optional[str] = None, | |
| rag_context_override: Optional[str] = None, | |
| max_tokens: int = 2200, | |
| history: Optional[list] = None, | |
| ) -> str: | |
| """ | |
| 设计课堂活动、作业及 Rubric;支持从上传资料提取核心知识点并与目标一致。 | |
| """ | |
| query = f"{topic}\n{learning_objectives or ''}"[:1500] | |
| rag_context, refs = get_rag_context_with_refs(query, top_k=8, max_context_chars=5000) | |
| if rag_context_override: | |
| rag_context = rag_context_override | |
| ref_instruction = inject_refs_instruction(refs) | |
| user_content = ACTIVITY_DESIGNER_USER_TEMPLATE.format( | |
| topic=topic.strip() or "(未提供主题)", | |
| learning_objectives=(learning_objectives or "(未提供,请根据主题推断)").strip(), | |
| rag_context=rag_context or "(无检索到知识库摘录,将基于通用教学设计回答。)", | |
| ref_instruction=ref_instruction, | |
| ) | |
| messages = [{"role": "system", "content": ACTIVITY_DESIGNER_SYSTEM}] | |
| if history: | |
| for user_msg, assistant_msg in history[-10:]: | |
| if user_msg: | |
| messages.append({"role": "user", "content": user_msg}) | |
| if assistant_msg: | |
| messages.append({"role": "assistant", "content": assistant_msg}) | |
| messages.append({"role": "user", "content": user_content}) | |
| try: | |
| resp = client.chat.completions.create( | |
| model=DEFAULT_MODEL, | |
| messages=messages, | |
| temperature=0.5, | |
| max_tokens=max_tokens, | |
| timeout=90, | |
| ) | |
| out = (resp.choices[0].message.content or "").strip() | |
| except Exception as e: | |
| out = f"生成失败:{e}。请稍后重试。" | |
| if refs and "## References" not in out and "[Source:" not in out: | |
| out = append_references_to_content(out, refs) | |
| return out | |