对还没有完整简历的学生来说,“上传简历,获得建议”往往跳过了最困难的一步:不知道哪些经历值得写。职芽 CareerSprout 把入口放在经历整理上,再逐步连接岗位准备、简历修改和面试练习,而不是一次生成一份看似完整的材料。
项目基于 MIT 许可的 Career Pilot 改造。上游平台与第三方能力不属于个人原创;本文讨论的是当前本地校园版本,不代表已经完成公网运营或商业化验收。
一条可确认的材料链路
前端采用 React、Vite 与 React Router,后端为 Express,配合 MongoDB、Redis 和 Clerk 身份认证。文本模型通过 OpenAI 兼容接口接入,语音转写使用 Qwen ASR。仓库保留的 Firebase 配置及支付、社区等历史模块,不等于当前校园入口已经开放这些能力。
学生可以从交流兴趣和经历开始,也可以导入文字型 PDF、DOCX 或图片。后端保留原件,分块解析,记录来源和待确认问题,再交给模型整理。解析失败时不会拿残缺材料继续生成,已完成的分块则可以保存下来。
生成结果要经过预览与确认,才写入档案或简历。岗位材料、真实经历和简历版本随后用于定向准备与面试;语音转写同样进入可编辑答案,而不是直接变成学生的最终表达。模型负责帮助整理,人仍然负责确认事实。
失败恢复不是一个重试按钮
材料导入涉及解析、模型调用和保存,任何一步中断都可能让用户不知道结果是否落库。代码使用处理租约与确认账本区分处理中、保存结果未知和可恢复等状态,并保存原件、来源块与修改计划。
这使恢复过程有东西可核对,而不必让用户重新上传、重新生成,再猜测哪份才是有效版本。PDF 压缩也尽量选择完整原文段落,并检查结果的来源依据;不能可靠压缩时保留原文,不让版式需求悄悄改变经历事实。
授权要跟着材料版本走
荐才不是给教师增加一个下载按钮。服务端会检查教师资格、学生授权或班级荐才同意,并核对定向版本及来源材料是否仍然一致。个人授权与班级同意是不同路径,不能概括成所有访问都只依赖逐份确认。
这里的关键是避免旧确认自动覆盖新内容:材料变了,原有授权条件也需要重新判断。否则,即使页面上保留了“已确认”标记,也未必对应当前准备分享的版本。
已实现与仍待验收
前端将非首页页面按需加载,同时保留导航、身份会话和未保存内容保护。加载失败有恢复入口,不通过自动刷新冒险丢掉编辑内容。校园服务独立装配路由并提供数据库健康检查,隔离未开放的上游能力。
这些代码机制已经存在,但正式账号、多用户协作和真实新手使用仍需专项验收。页面分包也不自动解决发布问题:HTML 更新、哈希资源缓存与旧资源保留需要在部署时落实。本文没有复用历史测试数量,也不承诺模型建议的准确率或语音体验。
实现线索
导入恢复见 backend/src/campus/imports.js,授权规则见 backend/src/campus/sharing.js。职芽值得继续打磨的不是生成按钮,而是每一步都能知道材料来自哪里、谁确认过,以及失败后如何继续。