Spaces:
Running
Running
| # api/courseware/vision_builder.py | |
| """ | |
| Course Vision & Structure Builder:课程定位、学习目标、层级化知识树。 | |
| """ | |
| 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 COURSE_VISION_SYSTEM, COURSE_VISION_USER_TEMPLATE | |
| def build_course_vision( | |
| course_info: str, | |
| syllabus: str, | |
| max_tokens: int = 2000, | |
| history: Optional[list] = None, | |
| ) -> str: | |
| """ | |
| 输入:课程基本信息 + 教学大纲。 | |
| 输出:课程定位、学习目标、层级化知识树;含 References。 | |
| """ | |
| query = f"{course_info}\n{syllabus}"[:2000] | |
| rag_context, refs = get_rag_context_with_refs(query, top_k=8, max_context_chars=5000) | |
| ref_instruction = inject_refs_instruction(refs) | |
| user_content = COURSE_VISION_USER_TEMPLATE.format( | |
| course_info=course_info.strip() or "(未提供)", | |
| syllabus=syllabus.strip() or "(未提供)", | |
| rag_context=rag_context or "(无检索到知识库摘录,将基于通用课程设计经验回答。)", | |
| ref_instruction=ref_instruction, | |
| ) | |
| messages = [{"role": "system", "content": COURSE_VISION_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.4, | |
| 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 | |