Spaces:
Sleeping
Sleeping
File size: 2,434 Bytes
0cde401 6a91b07 0cde401 6a91b07 0cde401 6a91b07 0cde401 6a91b07 0cde401 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # 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
|