【Codex】用学生入学评估模块建立新生能力画像

学生入学评估整合性格测评、入学资料、附件分析和智能体评估结论,是新生画像建立的关键模块。

本文基于 StudentAdmissionAssessment、评估抽屉和腾讯 SSE 调用源码,把问卷、文件、Prompt 和结果回填转换为 Codex 代码生成任务。

文章目录

设计与需求

学生入学评估不能只按普通 CRUD 理解。它连接学生、教师、班级、考试或画像数据,页面操作会影响后续教学管理、班级治理和数据分析。Codex 接收这类任务时,需要拿到真实源码路径、字段约束、接口规则和验收边界,才能生成可落地的项目代码。
#mermaid-svg-MfNfqdCZASjF9VEj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MfNfqdCZASjF9VEj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MfNfqdCZASjF9VEj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MfNfqdCZASjF9VEj .error-icon{fill:#552222;}#mermaid-svg-MfNfqdCZASjF9VEj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MfNfqdCZASjF9VEj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MfNfqdCZASjF9VEj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MfNfqdCZASjF9VEj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MfNfqdCZASjF9VEj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MfNfqdCZASjF9VEj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MfNfqdCZASjF9VEj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MfNfqdCZASjF9VEj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MfNfqdCZASjF9VEj .marker.cross{stroke:#333333;}#mermaid-svg-MfNfqdCZASjF9VEj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MfNfqdCZASjF9VEj p{margin:0;}#mermaid-svg-MfNfqdCZASjF9VEj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MfNfqdCZASjF9VEj .cluster-label text{fill:#333;}#mermaid-svg-MfNfqdCZASjF9VEj .cluster-label span{color:#333;}#mermaid-svg-MfNfqdCZASjF9VEj .cluster-label span p{background-color:transparent;}#mermaid-svg-MfNfqdCZASjF9VEj .label text,#mermaid-svg-MfNfqdCZASjF9VEj span{fill:#333;color:#333;}#mermaid-svg-MfNfqdCZASjF9VEj .node rect,#mermaid-svg-MfNfqdCZASjF9VEj .node circle,#mermaid-svg-MfNfqdCZASjF9VEj .node ellipse,#mermaid-svg-MfNfqdCZASjF9VEj .node polygon,#mermaid-svg-MfNfqdCZASjF9VEj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MfNfqdCZASjF9VEj .rough-node .label text,#mermaid-svg-MfNfqdCZASjF9VEj .node .label text,#mermaid-svg-MfNfqdCZASjF9VEj .image-shape .label,#mermaid-svg-MfNfqdCZASjF9VEj .icon-shape .label{text-anchor:middle;}#mermaid-svg-MfNfqdCZASjF9VEj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MfNfqdCZASjF9VEj .rough-node .label,#mermaid-svg-MfNfqdCZASjF9VEj .node .label,#mermaid-svg-MfNfqdCZASjF9VEj .image-shape .label,#mermaid-svg-MfNfqdCZASjF9VEj .icon-shape .label{text-align:center;}#mermaid-svg-MfNfqdCZASjF9VEj .node.clickable{cursor:pointer;}#mermaid-svg-MfNfqdCZASjF9VEj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MfNfqdCZASjF9VEj .arrowheadPath{fill:#333333;}#mermaid-svg-MfNfqdCZASjF9VEj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MfNfqdCZASjF9VEj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MfNfqdCZASjF9VEj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MfNfqdCZASjF9VEj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MfNfqdCZASjF9VEj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MfNfqdCZASjF9VEj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MfNfqdCZASjF9VEj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MfNfqdCZASjF9VEj .cluster text{fill:#333;}#mermaid-svg-MfNfqdCZASjF9VEj .cluster span{color:#333;}#mermaid-svg-MfNfqdCZASjF9VEj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MfNfqdCZASjF9VEj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MfNfqdCZASjF9VEj rect.text{fill:none;stroke-width:0;}#mermaid-svg-MfNfqdCZASjF9VEj .icon-shape,#mermaid-svg-MfNfqdCZASjF9VEj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MfNfqdCZASjF9VEj .icon-shape p,#mermaid-svg-MfNfqdCZASjF9VEj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MfNfqdCZASjF9VEj .icon-shape .label rect,#mermaid-svg-MfNfqdCZASjF9VEj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MfNfqdCZASjF9VEj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MfNfqdCZASjF9VEj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MfNfqdCZASjF9VEj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-MfNfqdCZASjF9VEj .input>*{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .input span{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .input tspan{fill:#1D39C4!important;}#mermaid-svg-MfNfqdCZASjF9VEj .design>*{fill:#F6FFED!important;stroke:#52C41A!important;color:#237804!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .design span{fill:#F6FFED!important;stroke:#52C41A!important;color:#237804!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .design tspan{fill:#237804!important;}#mermaid-svg-MfNfqdCZASjF9VEj .process>*{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .process span{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .process tspan{fill:#AD4E00!important;}#mermaid-svg-MfNfqdCZASjF9VEj .check>*{fill:#F9F0FF!important;stroke:#722ED1!important;color:#531DAB!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .check span{fill:#F9F0FF!important;stroke:#722ED1!important;color:#531DAB!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .check tspan{fill:#531DAB!important;}#mermaid-svg-MfNfqdCZASjF9VEj .output>*{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .output span{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-MfNfqdCZASjF9VEj .output tspan{fill:#006D75!important;} 教育管理需求
学生入学评估设计
页面结构
数据模型
接口规则
权限验收
Codex生成代码

需求层描述 设计层转换 Codex 代码生成方向
性格测评 问卷答案生成 MBTI 维度结果 生成问卷面板、结果计算和 upsert 接口
入学资料 多条附件记录保存类型、文件和备注 生成上传、分页编辑和载荷构造
智能评估 PromptBuilder 组合学生资料并调用腾讯 SSE 生成 Prompt、SSE 调用、结果解析和状态回填
人工确认 模型结果进入表单和记录,不绕过确认 生成状态、错误、原文和响应载荷追踪

可以直接使用下面的Prompt进行模块功能的设计

text 复制代码
请基于教育管理系统源码设计 学生入学评估 模块,不要编造代码中不存在的能力。

业务范围:维护学生性格测评结果、入学试卷图片、附件记录、评估请求载荷、模型响应、科目评分、总分、评估结论、状态和错误信息。
后端路径:server_backend/modules/User/views_app/StudentAdmissionAssessment.py、server_backend/modules/User/utils.py
前端路径:server_vue3/src/views/modules/User/StudentAdmissionAssessment/index.vue、crud.tsx、StudentManage/Drawers/StudentEntranceAssessmentDrawer/index.vue、StudentPersonalityQuestionnaireDrawer/index.vue
接口入口:/api/User/StudentAdmissionAssessment/、upsert_personality_assessment/、run_entrance_assessment/
核心字段:personality_answers、personality_dimension_scores、personality_type、personality_summary、entrance_exam_image_urls、entrance_attachment_records、entrance_attachment_analysis_items、entrance_exam_request_payload、entrance_exam_response_payload、entrance_assessment_prompt_text、entrance_assessment_model_raw_text、entrance_subject_scores、entrance_total_score、entrance_assessment_text、entrance_assessment_status、entrance_assessment_error、entrance_assessed_at
扩展能力:数据联动、LLM 内容生成、文件管理

请输出模块设计方案,包含页面结构、数据模型、接口规则、权限验收、异常边界和 Codex 分阶段生成项目代码的任务拆分。扩展能力只允许使用源码中已经存在的能力。

后端设计

后端设计重点不是堆接口,而是把学生入学评估沉淀成可复用的数据底座。当前模块基于 CustomModelViewSetCustomModelRefSerializerCustomModelInFilterDefaultRouter 注册接口,结合模型字段、只读字段、范围筛选和动作接口形成稳定契约。

后端设计项 设计重点 Codex 生成方向
性格接口 upsert_personality_assessment 保存问卷与维度分 调用 build_personality_result 和摘要生成
入学评估 run_entrance_assessment 构建请求载荷 支持自定义 api_url 或默认腾讯 SSE
Prompt 构建 StudentEntranceAssessmentPromptBuilder 组织附件上下文 输出可解析 JSON 要求和额外说明
结果落库 apply_entrance_result_payload 保存状态、分数、结论和原始文本 保留错误、模型原文和响应载荷便于复核

可以直接使用下面的Prompt进行后端代码的设计

text 复制代码
请按 学生入学评估 的真实业务补齐或重构后端代码。

需要读取并遵守:
- server_backend/modules/User/views_app/StudentAdmissionAssessment.py、server_backend/modules/User/utils.py
- server_backend/modules/User/models.py
- server_backend/modules/User/urls.py

生成要求:
- 按 StudentAdmissionAssessment 模型字段设计序列化规则,不要新增无来源字段。
- 使用 CustomModelViewSet、CustomModelRefSerializer 和 CustomModelInFilter 保持项目风格。
- 补齐列表查询、详情、新增、编辑、删除或只读接口边界。
- 保留 read_only_fields、search_fields、range_fields 和权限校验逻辑。
- 扩展能力只实现:数据联动、LLM 内容生成、文件管理。
- 输出需要包含模型字段说明、接口清单、路由注册、筛选规则、权限规则和异常处理。

前端设计

前端设计重点不是把字段堆到页面上,而是让管理人员能高效完成学生入学评估的业务操作。当前模块使用 fs-pagefs-crudcreateCrudOptions、接口封装和 Element Plus 组件组织列表、搜索、表单、抽屉或业务操作。

前端设计项 设计重点 Codex 生成方向
测评问卷 PersonalityQuestionnairePanel 分页单选题 生成答案映射、完成度和保存动作
入学资料 StudentEntranceAssessmentDrawerel-upload 上传附件 生成附件类型、文件列表、备注和分页编辑
评估调用 RunEntranceAssessment 调用后端动作接口 生成 loading、成功、失败、状态回显
列表维护 StudentAdmissionAssessment/crud.tsx 展示状态、类型、总分 生成筛选、编辑和结果字段展示

可以直接使用下面的Prompt进行前端代码的设计

text 复制代码
请按 学生入学评估 的真实业务生成或补齐前端代码。

需要读取并遵守:
- server_vue3/src/views/modules/User/StudentAdmissionAssessment/index.vue、crud.tsx、StudentManage/Drawers/StudentEntranceAssessmentDrawer/index.vue、StudentPersonalityQuestionnaireDrawer/index.vue
- server_vue3/src/views/modules/User/StudentAdmissionAssessment/api.ts

生成要求:
- 使用项目现有 fs-crud、Element Plus、request 封装和 api.ts 风格。
- 生成列表查询、筛选区域、新增编辑表单、详情或抽屉交互、权限按钮和保存回显。
- 处理字段转换:问卷答案转 personality_answers,附件记录转 attachment_records/image_urls,模型返回回填状态、总分、科目分、结论和错误信息
- 扩展交互只实现:数据联动、LLM 内容生成、文件管理。
- 不要添加源码中未实现的扩展入口。

扩展功能

学生入学评估的扩展能力同时覆盖数据联动、LLM 内容生成和文件管理。问卷、附件、Prompt、模型响应与人工确认共同构成评估闭环。

扩展功能 主要用途 落地重点
数据联动 学生选择、问卷结果、附件记录和评估状态联动 以 id_student 作为评估记录主线
LLM 内容生成 使用 PromptBuilder 和腾讯 SSE 生成入学评估结论 结果回填后人工确认并保留原始文本
文件管理 上传试卷、评语等入学资料并形成结构化记录 保存附件类型、URL、备注和解析项

数据联动

学生入学评估的数据联动体现在 id_student、personality_type、entrance_attachment_records、entrance_assessment_status、entrance_subject_scores、entrance_total_score。前端选择、搜索或抽屉打开后,会生成接口参数 id_student、personality_answers、attachment_records、image_urls、extra_prompt、api_url,后端按学生、班级、日期或类型筛选,再把结果回填到列表、表单或业务面板中。
#mermaid-svg-luZQfQBGlJErLz2t{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-luZQfQBGlJErLz2t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-luZQfQBGlJErLz2t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-luZQfQBGlJErLz2t .error-icon{fill:#552222;}#mermaid-svg-luZQfQBGlJErLz2t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-luZQfQBGlJErLz2t .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-luZQfQBGlJErLz2t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-luZQfQBGlJErLz2t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-luZQfQBGlJErLz2t .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-luZQfQBGlJErLz2t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-luZQfQBGlJErLz2t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-luZQfQBGlJErLz2t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-luZQfQBGlJErLz2t .marker.cross{stroke:#333333;}#mermaid-svg-luZQfQBGlJErLz2t svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-luZQfQBGlJErLz2t p{margin:0;}#mermaid-svg-luZQfQBGlJErLz2t .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-luZQfQBGlJErLz2t .cluster-label text{fill:#333;}#mermaid-svg-luZQfQBGlJErLz2t .cluster-label span{color:#333;}#mermaid-svg-luZQfQBGlJErLz2t .cluster-label span p{background-color:transparent;}#mermaid-svg-luZQfQBGlJErLz2t .label text,#mermaid-svg-luZQfQBGlJErLz2t span{fill:#333;color:#333;}#mermaid-svg-luZQfQBGlJErLz2t .node rect,#mermaid-svg-luZQfQBGlJErLz2t .node circle,#mermaid-svg-luZQfQBGlJErLz2t .node ellipse,#mermaid-svg-luZQfQBGlJErLz2t .node polygon,#mermaid-svg-luZQfQBGlJErLz2t .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-luZQfQBGlJErLz2t .rough-node .label text,#mermaid-svg-luZQfQBGlJErLz2t .node .label text,#mermaid-svg-luZQfQBGlJErLz2t .image-shape .label,#mermaid-svg-luZQfQBGlJErLz2t .icon-shape .label{text-anchor:middle;}#mermaid-svg-luZQfQBGlJErLz2t .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-luZQfQBGlJErLz2t .rough-node .label,#mermaid-svg-luZQfQBGlJErLz2t .node .label,#mermaid-svg-luZQfQBGlJErLz2t .image-shape .label,#mermaid-svg-luZQfQBGlJErLz2t .icon-shape .label{text-align:center;}#mermaid-svg-luZQfQBGlJErLz2t .node.clickable{cursor:pointer;}#mermaid-svg-luZQfQBGlJErLz2t .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-luZQfQBGlJErLz2t .arrowheadPath{fill:#333333;}#mermaid-svg-luZQfQBGlJErLz2t .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-luZQfQBGlJErLz2t .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-luZQfQBGlJErLz2t .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-luZQfQBGlJErLz2t .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-luZQfQBGlJErLz2t .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-luZQfQBGlJErLz2t .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-luZQfQBGlJErLz2t .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-luZQfQBGlJErLz2t .cluster text{fill:#333;}#mermaid-svg-luZQfQBGlJErLz2t .cluster span{color:#333;}#mermaid-svg-luZQfQBGlJErLz2t div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-luZQfQBGlJErLz2t .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-luZQfQBGlJErLz2t rect.text{fill:none;stroke-width:0;}#mermaid-svg-luZQfQBGlJErLz2t .icon-shape,#mermaid-svg-luZQfQBGlJErLz2t .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-luZQfQBGlJErLz2t .icon-shape p,#mermaid-svg-luZQfQBGlJErLz2t .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-luZQfQBGlJErLz2t .icon-shape .label rect,#mermaid-svg-luZQfQBGlJErLz2t .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-luZQfQBGlJErLz2t .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-luZQfQBGlJErLz2t .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-luZQfQBGlJErLz2t :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-luZQfQBGlJErLz2t .input>*{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-luZQfQBGlJErLz2t .input span{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-luZQfQBGlJErLz2t .input tspan{fill:#1D39C4!important;}#mermaid-svg-luZQfQBGlJErLz2t .process>*{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-luZQfQBGlJErLz2t .process span{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-luZQfQBGlJErLz2t .process tspan{fill:#AD4E00!important;}#mermaid-svg-luZQfQBGlJErLz2t .output>*{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-luZQfQBGlJErLz2t .output span{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-luZQfQBGlJErLz2t .output tspan{fill:#006D75!important;} 结果阶段
处理阶段
输入阶段
筛选条件
表单选择
抽屉打开
生成参数
请求接口
字段转换
刷新列表
表单回显
状态更新

交给 Codex 生成时,要明确联动边界:只处理源码中存在的字段和接口,不把其他学生画像、考试分析或 AI 评估能力塞进本模块。保存动作必须保证 问卷与附件结果回填同一学生评估记录,模型输出保留可追踪状态。

可以直接使用下面的Prompt进行数据联动设计

text 复制代码
请为 学生入学评估 设计数据联动实现。

联动字段:id_student、personality_type、entrance_attachment_records、entrance_assessment_status、entrance_subject_scores、entrance_total_score
接口参数:id_student、personality_answers、attachment_records、image_urls、extra_prompt、api_url
结果回填:问卷与附件结果回填同一学生评估记录,模型输出保留可追踪状态
源码边界:只使用当前模块已经存在的模型字段、api.ts 请求和页面组件,不新增未实现的业务能力。

请输出联动流程、字段映射表、异常处理、保存回显规则和需要修改的文件路径。

LLM 内容生成

学生入学评估的 LLM 能力服务于入学评估结论生成。后端 StudentEntranceAssessmentPromptBuilder 把学生基础信息、性格结果、附件记录和额外要求组合成 Prompt,再通过腾讯 SSE 智能体返回结构化评估结果。生成内容不能直接绕过人工确认成为正式业务数据,页面需要展示状态、分数、结论和错误信息。
#mermaid-svg-Sw6RzWMFv8F6lYGC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Sw6RzWMFv8F6lYGC .error-icon{fill:#552222;}#mermaid-svg-Sw6RzWMFv8F6lYGC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Sw6RzWMFv8F6lYGC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .marker.cross{stroke:#333333;}#mermaid-svg-Sw6RzWMFv8F6lYGC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Sw6RzWMFv8F6lYGC p{margin:0;}#mermaid-svg-Sw6RzWMFv8F6lYGC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .cluster-label text{fill:#333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .cluster-label span{color:#333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .cluster-label span p{background-color:transparent;}#mermaid-svg-Sw6RzWMFv8F6lYGC .label text,#mermaid-svg-Sw6RzWMFv8F6lYGC span{fill:#333;color:#333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .node rect,#mermaid-svg-Sw6RzWMFv8F6lYGC .node circle,#mermaid-svg-Sw6RzWMFv8F6lYGC .node ellipse,#mermaid-svg-Sw6RzWMFv8F6lYGC .node polygon,#mermaid-svg-Sw6RzWMFv8F6lYGC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Sw6RzWMFv8F6lYGC .rough-node .label text,#mermaid-svg-Sw6RzWMFv8F6lYGC .node .label text,#mermaid-svg-Sw6RzWMFv8F6lYGC .image-shape .label,#mermaid-svg-Sw6RzWMFv8F6lYGC .icon-shape .label{text-anchor:middle;}#mermaid-svg-Sw6RzWMFv8F6lYGC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Sw6RzWMFv8F6lYGC .rough-node .label,#mermaid-svg-Sw6RzWMFv8F6lYGC .node .label,#mermaid-svg-Sw6RzWMFv8F6lYGC .image-shape .label,#mermaid-svg-Sw6RzWMFv8F6lYGC .icon-shape .label{text-align:center;}#mermaid-svg-Sw6RzWMFv8F6lYGC .node.clickable{cursor:pointer;}#mermaid-svg-Sw6RzWMFv8F6lYGC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .arrowheadPath{fill:#333333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Sw6RzWMFv8F6lYGC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Sw6RzWMFv8F6lYGC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Sw6RzWMFv8F6lYGC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Sw6RzWMFv8F6lYGC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Sw6RzWMFv8F6lYGC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Sw6RzWMFv8F6lYGC .cluster text{fill:#333;}#mermaid-svg-Sw6RzWMFv8F6lYGC .cluster span{color:#333;}#mermaid-svg-Sw6RzWMFv8F6lYGC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Sw6RzWMFv8F6lYGC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Sw6RzWMFv8F6lYGC rect.text{fill:none;stroke-width:0;}#mermaid-svg-Sw6RzWMFv8F6lYGC .icon-shape,#mermaid-svg-Sw6RzWMFv8F6lYGC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Sw6RzWMFv8F6lYGC .icon-shape p,#mermaid-svg-Sw6RzWMFv8F6lYGC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Sw6RzWMFv8F6lYGC .icon-shape .label rect,#mermaid-svg-Sw6RzWMFv8F6lYGC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Sw6RzWMFv8F6lYGC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Sw6RzWMFv8F6lYGC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Sw6RzWMFv8F6lYGC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-Sw6RzWMFv8F6lYGC .input>*{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .input span{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .input tspan{fill:#1D39C4!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .process>*{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .process span{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .process tspan{fill:#AD4E00!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .output>*{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .output span{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-Sw6RzWMFv8F6lYGC .output tspan{fill:#006D75!important;} 结果阶段
处理阶段
输入阶段
学生信息
附件记录
额外要求
构建Prompt
SSE调用
解析结果
回填表单
人工确认
保存记录

交给 Codex 生成时,要强调模型返回的不确定性。entrance_assessment_statusentrance_assessment_errorentrance_assessment_model_raw_textentrance_exam_response_payload 必须保留,便于追踪失败原因和人工复核。

可以直接使用下面的Prompt进行LLM功能设计

text 复制代码
请为 学生入学评估 设计 LLM 入学评估能力。

真实代码依据:StudentEntranceAssessmentPromptBuilder、run_entrance_assessment_by_tencent、call_tencent_subject_help_sse、parse_entrance_assessment_ai_text。
要求:生成 Prompt、调用腾讯 SSE、解析 subject_scores、total_score、assessment_text、attachment_analysis_items,并把结果回填表单供人工确认。
不要让模型结果绕过页面确认直接成为不可追踪的正式数据。

文件管理

学生入学评估的文件管理体现在入学资料上传与结构化记录。前端通过 el-upload 调用 /api/system/file/,按 attachment_typefilesremark 组织资料;后端归一化 entrance_attachment_recordsentrance_exam_image_urlsentrance_attachment_analysis_items
#mermaid-svg-wJFFBSnu61uR2sCx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wJFFBSnu61uR2sCx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wJFFBSnu61uR2sCx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wJFFBSnu61uR2sCx .error-icon{fill:#552222;}#mermaid-svg-wJFFBSnu61uR2sCx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wJFFBSnu61uR2sCx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wJFFBSnu61uR2sCx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wJFFBSnu61uR2sCx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wJFFBSnu61uR2sCx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wJFFBSnu61uR2sCx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wJFFBSnu61uR2sCx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wJFFBSnu61uR2sCx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wJFFBSnu61uR2sCx .marker.cross{stroke:#333333;}#mermaid-svg-wJFFBSnu61uR2sCx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wJFFBSnu61uR2sCx p{margin:0;}#mermaid-svg-wJFFBSnu61uR2sCx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wJFFBSnu61uR2sCx .cluster-label text{fill:#333;}#mermaid-svg-wJFFBSnu61uR2sCx .cluster-label span{color:#333;}#mermaid-svg-wJFFBSnu61uR2sCx .cluster-label span p{background-color:transparent;}#mermaid-svg-wJFFBSnu61uR2sCx .label text,#mermaid-svg-wJFFBSnu61uR2sCx span{fill:#333;color:#333;}#mermaid-svg-wJFFBSnu61uR2sCx .node rect,#mermaid-svg-wJFFBSnu61uR2sCx .node circle,#mermaid-svg-wJFFBSnu61uR2sCx .node ellipse,#mermaid-svg-wJFFBSnu61uR2sCx .node polygon,#mermaid-svg-wJFFBSnu61uR2sCx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wJFFBSnu61uR2sCx .rough-node .label text,#mermaid-svg-wJFFBSnu61uR2sCx .node .label text,#mermaid-svg-wJFFBSnu61uR2sCx .image-shape .label,#mermaid-svg-wJFFBSnu61uR2sCx .icon-shape .label{text-anchor:middle;}#mermaid-svg-wJFFBSnu61uR2sCx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wJFFBSnu61uR2sCx .rough-node .label,#mermaid-svg-wJFFBSnu61uR2sCx .node .label,#mermaid-svg-wJFFBSnu61uR2sCx .image-shape .label,#mermaid-svg-wJFFBSnu61uR2sCx .icon-shape .label{text-align:center;}#mermaid-svg-wJFFBSnu61uR2sCx .node.clickable{cursor:pointer;}#mermaid-svg-wJFFBSnu61uR2sCx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wJFFBSnu61uR2sCx .arrowheadPath{fill:#333333;}#mermaid-svg-wJFFBSnu61uR2sCx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wJFFBSnu61uR2sCx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wJFFBSnu61uR2sCx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wJFFBSnu61uR2sCx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wJFFBSnu61uR2sCx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wJFFBSnu61uR2sCx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wJFFBSnu61uR2sCx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wJFFBSnu61uR2sCx .cluster text{fill:#333;}#mermaid-svg-wJFFBSnu61uR2sCx .cluster span{color:#333;}#mermaid-svg-wJFFBSnu61uR2sCx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wJFFBSnu61uR2sCx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wJFFBSnu61uR2sCx rect.text{fill:none;stroke-width:0;}#mermaid-svg-wJFFBSnu61uR2sCx .icon-shape,#mermaid-svg-wJFFBSnu61uR2sCx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wJFFBSnu61uR2sCx .icon-shape p,#mermaid-svg-wJFFBSnu61uR2sCx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wJFFBSnu61uR2sCx .icon-shape .label rect,#mermaid-svg-wJFFBSnu61uR2sCx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wJFFBSnu61uR2sCx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wJFFBSnu61uR2sCx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wJFFBSnu61uR2sCx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-wJFFBSnu61uR2sCx .input>*{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-wJFFBSnu61uR2sCx .input span{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-wJFFBSnu61uR2sCx .input tspan{fill:#1D39C4!important;}#mermaid-svg-wJFFBSnu61uR2sCx .process>*{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-wJFFBSnu61uR2sCx .process span{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-wJFFBSnu61uR2sCx .process tspan{fill:#AD4E00!important;}#mermaid-svg-wJFFBSnu61uR2sCx .output>*{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-wJFFBSnu61uR2sCx .output span{fill:#E6FFFB!important;stroke:#13C2C2!important;color:#006D75!important;stroke-width:1.2px!important;}#mermaid-svg-wJFFBSnu61uR2sCx .output tspan{fill:#006D75!important;} 上传资料
分类记录
生成载荷
评估回填

Codex 生成时要保留附件类型校验和分页编辑体验。识别或分析结果不能直接入库为正式结论,需要先进入可编辑结构,由管理人员核对后保存。

可以直接使用下面的Prompt进行文件管理功能设计

text 复制代码
请为 学生入学评估 设计文件管理能力。

真实交互:el-upload 上传入学资料,附件字段包含 attachment_type、files、remark,后端保存 entrance_attachment_records、entrance_exam_image_urls、entrance_attachment_analysis_items。
要求:支持多条资料记录、每条记录多文件、附件类型校验、失败提示、评估结果回显和人工确认。
不要添加源码中未实现的文件归档能力。

Codex开发标准

使用 Codex 开发学生入学评估时,不能直接让模型自由写代码。PDD 定义业务边界和验收口径,SOP 约束目录、文件职责和开发顺序,接口权限规则保证生成代码能进入现有系统。
#mermaid-svg-ftUpgqLK2ohxmSxe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ftUpgqLK2ohxmSxe .error-icon{fill:#552222;}#mermaid-svg-ftUpgqLK2ohxmSxe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ftUpgqLK2ohxmSxe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ftUpgqLK2ohxmSxe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ftUpgqLK2ohxmSxe .marker.cross{stroke:#333333;}#mermaid-svg-ftUpgqLK2ohxmSxe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ftUpgqLK2ohxmSxe p{margin:0;}#mermaid-svg-ftUpgqLK2ohxmSxe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ftUpgqLK2ohxmSxe .cluster-label text{fill:#333;}#mermaid-svg-ftUpgqLK2ohxmSxe .cluster-label span{color:#333;}#mermaid-svg-ftUpgqLK2ohxmSxe .cluster-label span p{background-color:transparent;}#mermaid-svg-ftUpgqLK2ohxmSxe .label text,#mermaid-svg-ftUpgqLK2ohxmSxe span{fill:#333;color:#333;}#mermaid-svg-ftUpgqLK2ohxmSxe .node rect,#mermaid-svg-ftUpgqLK2ohxmSxe .node circle,#mermaid-svg-ftUpgqLK2ohxmSxe .node ellipse,#mermaid-svg-ftUpgqLK2ohxmSxe .node polygon,#mermaid-svg-ftUpgqLK2ohxmSxe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ftUpgqLK2ohxmSxe .rough-node .label text,#mermaid-svg-ftUpgqLK2ohxmSxe .node .label text,#mermaid-svg-ftUpgqLK2ohxmSxe .image-shape .label,#mermaid-svg-ftUpgqLK2ohxmSxe .icon-shape .label{text-anchor:middle;}#mermaid-svg-ftUpgqLK2ohxmSxe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ftUpgqLK2ohxmSxe .rough-node .label,#mermaid-svg-ftUpgqLK2ohxmSxe .node .label,#mermaid-svg-ftUpgqLK2ohxmSxe .image-shape .label,#mermaid-svg-ftUpgqLK2ohxmSxe .icon-shape .label{text-align:center;}#mermaid-svg-ftUpgqLK2ohxmSxe .node.clickable{cursor:pointer;}#mermaid-svg-ftUpgqLK2ohxmSxe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ftUpgqLK2ohxmSxe .arrowheadPath{fill:#333333;}#mermaid-svg-ftUpgqLK2ohxmSxe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ftUpgqLK2ohxmSxe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ftUpgqLK2ohxmSxe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ftUpgqLK2ohxmSxe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ftUpgqLK2ohxmSxe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ftUpgqLK2ohxmSxe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ftUpgqLK2ohxmSxe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ftUpgqLK2ohxmSxe .cluster text{fill:#333;}#mermaid-svg-ftUpgqLK2ohxmSxe .cluster span{color:#333;}#mermaid-svg-ftUpgqLK2ohxmSxe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ftUpgqLK2ohxmSxe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ftUpgqLK2ohxmSxe rect.text{fill:none;stroke-width:0;}#mermaid-svg-ftUpgqLK2ohxmSxe .icon-shape,#mermaid-svg-ftUpgqLK2ohxmSxe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ftUpgqLK2ohxmSxe .icon-shape p,#mermaid-svg-ftUpgqLK2ohxmSxe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ftUpgqLK2ohxmSxe .icon-shape .label rect,#mermaid-svg-ftUpgqLK2ohxmSxe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ftUpgqLK2ohxmSxe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ftUpgqLK2ohxmSxe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ftUpgqLK2ohxmSxe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-ftUpgqLK2ohxmSxe .input>*{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .input span{fill:#EEF4FF!important;stroke:#5B8FF9!important;color:#1D39C4!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .input tspan{fill:#1D39C4!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .design>*{fill:#F6FFED!important;stroke:#52C41A!important;color:#237804!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .design span{fill:#F6FFED!important;stroke:#52C41A!important;color:#237804!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .design tspan{fill:#237804!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .dev>*{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .dev span{fill:#FFF7E6!important;stroke:#FA8C16!important;color:#AD4E00!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .dev tspan{fill:#AD4E00!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .check>*{fill:#F9F0FF!important;stroke:#722ED1!important;color:#531DAB!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .check span{fill:#F9F0FF!important;stroke:#722ED1!important;color:#531DAB!important;stroke-width:1.2px!important;}#mermaid-svg-ftUpgqLK2ohxmSxe .check tspan{fill:#531DAB!important;} 验收交付
Codex开发
模块设计
输入约束
需求边界
PDD设计
SOP目录
接口权限
后端设计
前端设计
扩展功能
读取上下文
生成后端
生成前端
补齐扩展
功能自检
PDD验收
问题修复
模块交付

SOP 标准

SOP 用来约束代码目录、文件职责和开发顺序。学生入学评估的目录结构需要贴合现有 User 模块,不应为单篇文章另起一套风格。

text 复制代码
server_backend/modules/User/
  models.py
  views_app/StudentAdmissionAssessment.py
  utils.py
  urls.py
server_vue3/src/views/modules/User/StudentAdmissionAssessment/
  index.vue
  crud.tsx
  api.ts
server_vue3/src/views/modules/User/StudentManage/Drawers/
  StudentPersonalityQuestionnaireDrawer/index.vue
  StudentEntranceAssessmentDrawer/index.vue
server_vue3/src/views/modules/User/StudentManage/components/PersonalityQuestionnairePanel/
  index.vue
docs/modules/学生入学评估/
  pdd.md
  api.md
  test-cases.md
  codex-sop.md
开发阶段 Codex 执行目标 输出结果
模块设计 读取模型、视图、路由和前端页面 pdd.md 明确业务边界
目录规划 对齐后端 views_app、前端模块目录和接口封装 codex-sop.md 明确文件职责
后端实现 生成模型序列化、视图接口、筛选和权限校验 后端接口可被前端稳定调用
前端实现 生成列表、表单、抽屉、按钮和接口调用 页面操作闭环可运行
功能补齐 按真实扩展能力补齐联动、批量、文件或生成逻辑 扩展能力与源码一致
验收修复 根据 PDD 和测试用例修复偏差 test-cases.md 与代码一致

可以直接使用下面的Prompt进行SOP撰写

text 复制代码
请为 学生入学评估 编写 Codex 开发 SOP。

要求:
- 先输出目录结构,不要直接写代码。
- 先生成 docs/modules/学生入学评估/pdd.md、api.md、test-cases.md 和 codex-sop.md。
- 目录必须贴合现有路径:server_backend/modules/User/views_app/StudentAdmissionAssessment.py、server_backend/modules/User/utils.py、server_vue3/src/views/modules/User/StudentAdmissionAssessment/index.vue、crud.tsx、StudentManage/Drawers/StudentEntranceAssessmentDrawer/index.vue、StudentPersonalityQuestionnaireDrawer/index.vue。
- SOP 需要约束模型字段、接口视图、路由注册、前端 crud 配置、接口封装、权限按钮、保存回显和扩展能力。
- 扩展能力只包含:数据联动、LLM 内容生成、文件管理。
- 文档完成后,再按 SOP 分阶段生成项目代码。

PDD 标准

PDD 是学生入学评估的设计与验收文档,用于判断 Codex 输出是否符合真实业务。验收不能只看页面能否打开,还要检查字段、接口、权限、筛选、联动和扩展能力是否匹配源码。

验收维度 验收重点 通过标准
业务目标 维护学生性格测评结果、入学试卷图片、附件记录、评估请求载荷、模型响应、科目评分、总分、评估结论、状态和错误信息。 页面和接口能支撑模块业务闭环
页面结构 server_vue3/src/views/modules/User/StudentAdmissionAssessment/index.vue、crud.tsx、StudentManage/Drawers/StudentEntranceAssessmentDrawer/index.vue、StudentPersonalityQuestionnaireDrawer/index.vue 列表、表单、抽屉或操作按钮与源码一致
数据模型 personality_answers、personality_dimension_scores、personality_type、personality_summary、entrance_exam_image_urls、entrance_attachment_records、entrance_attachment_analysis_items、entrance_exam_request_payload、entrance_exam_response_payload、entrance_assessment_prompt_text、entrance_assessment_model_raw_text、entrance_subject_scores、entrance_total_score、entrance_assessment_text、entrance_assessment_status、entrance_assessment_error、entrance_assessed_at 字段类型、只读字段、唯一约束不偏离模型
接口规则 /api/User/StudentAdmissionAssessment/、upsert_personality_assessment/、run_entrance_assessment/ 列表、保存、删除、动作接口请求参数正确
权限控制 登录用户、班级范围或系统权限 非授权数据不可越权访问
测试用例 正常、异常、空数据、回显和删除 test-cases.md 覆盖主要路径
数据联动 学生、问卷、附件、评估状态联动 评估记录按 id_student 唯一回显
LLM 生成 Prompt、SSE、解析、回填 结果有状态、有原文、有错误追踪
文件管理 附件上传、分类、载荷构造 文件 URL 和附件记录保存正确

可以直接使用下面的Prompt进行PDD 验收

text 复制代码
请根据 docs/modules/学生入学评估/pdd.md 对 学生入学评估 进行验收。

验收范围:业务目标、页面结构、数据模型、接口规则、权限控制、测试用例、数据联动、LLM 内容生成、文件管理。

请输出验收结果表,字段包含:验收项、通过状态、发现问题、涉及文件、修复建议。不要只给结论;必须指出未通过项的具体文件位置和建议改法。

总结

学生入学评估把新生基础信息、性格测评、入学资料和智能体评估组织成可复核记录,是新生画像和后续教学支持的入口模块。

Codex 生成该模块时,应由 PDD 约束问卷、附件、Prompt 和回填字段,由 SOP 约束后端动作接口与前端抽屉流程,再用 Prompt 分阶段实现 LLM 与文件管理。

相关推荐
2601_9620562332 分钟前
Spring Boot 入门 与 无法解析符号 springframework 的解决
java·spring boot·后端
Mr数据杨38 分钟前
【Codex】用部门管理模块维护组织架构与管理层级
架构·django·codex·项目开发
Mr数据杨39 分钟前
【Codex】用附件管理模块统一维护系统文件资源
django·codex·项目开发
●VON40 分钟前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑
Thomas21431 小时前
Java scala 数组 链表
java·链表·scala
刃神太酷啦1 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
里欧跑得慢1 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
亚历克斯神1 小时前
低代码与 AI 的融合趋势——从可视化搭建到自然语言生成应用
java·spring·微服务
IT毕设实战小研1 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计