AI 开发
AI 简历优化与模拟面试工作流
追踪结构化输出、原文证据校验、会话版本与面试状态转换。
输入与会话
工作流使用 kind: resume 或 kind: interview,输入包含岗位、简历文字、可选 JD 与来源名称。简历最长 30,000 字符,JD 最长 20,000 字符。附件在浏览器提取文字,提交前由用户核对。
会话通过 D1 保存,包含结果、对话和面试状态。与通用聊天的浏览器本地历史不同。
任务与状态
每轮题目要求 5 个不同 ID。主问题可产生一次追问;追问回答完成后进入下一题。新一轮清空旧轮次结果与对话。状态由 transitions.ts 控制,不能靠按钮是否可点作为唯一校验。
结构化生成与证据
generateText 配合 Output.object 和任务 Schema 生成对象。随后再执行领域校验:建议 before 必须出现在原文,岗位证据必须能对应简历文字,回答优势引用必须来自实际回答。
无 JD 时不能生成岗位需求分析。输出不完整或引用无法对应原文时返回 INVALID_AI_OUTPUT,不保存此次结果。优化建议只对用户选择且仍匹配原文的片段应用。
并发与保存
服务端预留会话版本,生成后按预留 token 写入;失败或取消走退款并释放预留。面试回答在生成反馈前保存为 pendingAnswer,便于错误后恢复。
当前生成最大输出 10,000 Token,超时 60 秒,关闭自动重试。对话与结果各保留最近 40 条,整个状态序列化大小有上限。
实现入口
contracts.ts:输入与结果 Schema。service.ts:provider、提示词、计费与 AI SDK 组合。service-core.ts:可注入生成与失败处理。transitions.ts:业务状态与证据校验。session-service.ts:所有权、版本、预留与保存。resume-service.ts:结果转入简历。
以上文件均位于 src/features/career/api/。