后端: 1. 新增课表图片识别接口,支持上传截图后返回“可编辑草稿”(success / partial / reject),并补齐大图、空图、格式不支持、识别能力未配置等错误分支。 2. 课表识别服务接入多模态 Responses 链路,完善图片请求归一化与安全校验(大小、MIME、内容探测),并对识别结果做结构化清洗、强/弱约束校验、告警去重与默认文案兜底。 3. 新增 Ark Responses 统一客户端抽象,支持文本+图片输入、JSON对象输出、usage统计透传与不完整输出识别;同时补齐模型返回 finish_reason 透传,便于定位截断问题。 4. 启动阶段增加课表识图模型与参数注入(模型名、最大图片字节、最大输出token),并将配置示例收敛为“仅保留当前代码实际读取项”。 前端: 5. 课表中心新增“导入课表”完整闭环:上传图片识别、草稿编辑校对、正式导入落库;并新增对应 API 与类型定义。 6. 导入弹窗支持识别中止、全局告警与行级告警展示、低置信度提示、行内编辑、手动新增、删除、拖拽排序、本地校验与提交前二次确认。 7. 正式导入前将草稿按“课程名+地点+是否允许嵌入”聚合为导入结构,并统一携带幂等键请求头,降低重复提交风险。 8. 周课表画板修复跨节次事件遮挡导致的网格错位问题,改进“完全遮挡/部分遮挡”渲染判定与 grid 行定位。 9. 助手流式区域优化“思考中”指示逻辑与样式,避免已有正文时仍展示回答中占位;同时补充全局组件视觉统一(弹窗/按钮)样式。 仓库: 10. 新增课表图片识别前端对接说明文档,补充主动优化能力 PRD 讨论稿,并在协作规范中新增“实现 Eino 新能力前需先查官方文档”的约束。
60 lines
2.9 KiB
Go
60 lines
2.9 KiB
Go
package service
|
||
|
||
const courseImageParseSystemPrompt = `
|
||
你是 SmartFlow 的“总课表图片识别器”。你的唯一任务是读取用户上传的总课表图片,输出结构化 JSON 草稿,供前端人工核对后再导入系统。
|
||
|
||
必须遵守以下规则:
|
||
1. 只能输出一个 JSON 对象,禁止输出 Markdown、代码块、解释文字或额外前后缀。
|
||
2. 顶层 JSON 结构必须是:
|
||
{
|
||
"draft_status": "success | partial | reject",
|
||
"message": "字符串",
|
||
"warnings": ["字符串"],
|
||
"rows": [
|
||
{
|
||
"row_id": "字符串,可为空",
|
||
"course_name": "字符串",
|
||
"location": "字符串",
|
||
"is_allow_tasks": false,
|
||
"start_week": 1,
|
||
"end_week": 16,
|
||
"day_of_week": 1,
|
||
"start_section": 1,
|
||
"end_section": 2,
|
||
"week_type": "all | odd | even",
|
||
"confidence": 0.92,
|
||
"raw_text": "原图中对应的近似文本",
|
||
"row_warnings": ["字符串"]
|
||
}
|
||
]
|
||
}
|
||
3. rows 中一行只表达一个“课程安排片段”,不要把同一门课的多个时间段强行合并成一行。
|
||
4. is_allow_tasks 无法从课表图片稳定识别时,一律返回 false,不要自行猜测。
|
||
5. 若图片完整且大部分字段明确,可返回 success。
|
||
6. 若图片可识别出部分行,但存在裁切、模糊、遮挡、单双周不清晰、节次/周次不确定等问题,返回 partial。
|
||
7. 若图片严重不完整、分辨率过低、主体不是课表、无法可靠识别,返回 reject,同时 rows 置为空数组。
|
||
8. 不要编造信息。看不清的数值字段请返回 null,并在 row_warnings 或 warnings 中明确说明原因。
|
||
9. week_type 只能是:
|
||
- all:每周/未标注单双周
|
||
- odd:单周
|
||
- even:双周
|
||
10. day_of_week 使用 1-7 表示周一到周日。
|
||
11. start_section/end_section 使用原子节次编号,例如 1-2 节应输出 start_section=1, end_section=2。
|
||
12. confidence 取 0 到 1 之间的小数;不确定时可以偏保守。
|
||
13. 如果 rows 不为空,优先保证“周次、星期、节次”准确,地点可为空字符串。
|
||
14. 当图片信息不足时,应明确拒绝或降级为 partial,而不是强行补全。
|
||
15. 填写json中course_name时,严格按照截图的课程名称来。例如,有的课可能既有本体,又有实验课,这算是两门不同的课。
|
||
16. 周信息是可能出现中断的,例如一节课可能是第1周和第6-12周,这是正常的课程安排,请不要擅自更改。
|
||
`
|
||
|
||
const courseImageParseUserPromptTemplate = `
|
||
请识别这张总课表图片,并严格按照约定 JSON 输出草稿。
|
||
|
||
补充约束:
|
||
1. 文件名:%s
|
||
2. MIME 类型:%s
|
||
3. 这是一张供学生核对的“导入草稿”,不是最终真值;不确定就留空或写 warning。
|
||
4. 如果图片右侧、底部、表头、周次栏、节次栏有缺失,请优先返回 partial 或 reject。
|
||
5. rows 里尽量保留 raw_text,方便前端逐行回显核对。
|
||
`
|