Academic Figure Generator 实时进度指南SSE 流式推送与异步后台任务实现【免费下载链接】academic-figure-generatorAI 驱动的学术论文配图生成平台。上传论文 → AI 分析内容生成 Prompt → 一键生成高质量科研配图还有配套的skill可在主流agent中使用项目地址: https://gitcode.com/gh_mirrors/ac/academic-figure-generatorAcademic Figure Generator是一个 AI 驱动的学术论文配图生成平台上传论文 → AI 分析内容生成 Prompt → 一键生成高质量科研配图。配图生成通常需要几十秒为了让你在等待时实时看到生成进度项目用异步后台任务 SSE 流式推送解决了长任务卡住页面、反复刷新页面的体验问题。本文带你快速搞懂这套机制的原理与实现。为什么实时刷新进度很重要科研配图调用外部图像模型耗时普遍远超普通 HTTP 请求。如果采用同步等待的方式页面会一直转圈用户不知道后台是在排队、已经开始生成、还是彻底卡死而传统的过几秒手动刷新一次又会造成大量无效请求。Academic Figure Generator 的方案是前后分离提交生成请求后立即返回 202 状态码和任务 ID接口不阻塞真正的生成工作在异步后台任务中执行状态持续写入数据库前端通过SSEServer-Sent Events服务器发送事件打开一条长连接状态一变服务端就主动推送页面即时刷新。整体流程提交、生成、推送三步走 一次完整的配图生成流程如下前端提交 Prompt │ POST /prompts/{id}/images/generate ▼ 后端创建 Image 记录status pending立即返回 202 image_id │ ├──► 异步后台任务调图像模型 → 状态 generating → completed / failed │ └──► 前端订阅 SSE 流状态变化时实时推送页面即时刷新关键设计接口响应速度与生成耗时彻底解耦用户点完按钮瞬间就能继续操作进度条却仍在自己动。异步后台任务实现不阻塞、独立会话核心代码位于 images.py流程拆解先落库创建一条generation_status pending的图片记录并写入数据库这是后续所有进度查询的依据模型定义见 image.py秒回响应接口立刻返回 202 和image_id不等待任何生成逻辑后台执行通过asyncio.create_task()在事件循环中启动协程images.py项目注释里特意标注了Launch background task (no Celery)—— 单机场景下不引入 Celery/RabbitMQ用原生异步任务即可部署更轻独立数据库会话后台任务通过工厂新建自己的会话images.py不复用请求作用域的 session避免请求结束后会话失效线程池执行耗时调用图像 API 是同步阻塞调用代码用run_in_executor把它丢进线程池不卡住整个事件循环images.py异常即落库生成失败时捕获异常把错误信息写入generation_error并置为failed用户端能看到具体原因。状态机非常简洁状态含义pending已提交等待后台任务启动generating正在调用图像模型completed成功storage_path已写入可下载failed失败generation_error记录原因 除按 Prompt 生成外直接生成与图片编辑接口images.py、images.py也复用同一套后台任务保证所有长任务行为一致。SSE 流式推送实现服务端主动喊话SSE 端点定义在 stream_image_status前端只需对GET /images/{image_id}/stream发起一次请求浏览器即可通过标准EventSourceAPI 持续接收事件。实现上有 4 个值得学习的细节1️⃣ 独立会话轮询状态推送器每 2 秒打开一个新会话查询数据库中的最新状态而不是把状态缓存在内存里——多副本部署时依然准确。2️⃣ 状态去重推送用last_status记录上次推送值只有状态真正变化时才 yield 事件pending → generating → completed避免每 2 秒重复推送同一条消息大幅降低带宽与前端渲染开销。3️⃣ 结构化事件流一次连接中会收到三类事件事件触发时机data 内容status状态每次变化id、status、storage_path、耗时done到达completed或failed终态最终状态随后连接关闭error图片记录不存在错误说明4️⃣ 自然终止到达终态后 yielddone并break生成器结束、连接优雅关闭前端收到done即可渲染最终图片或展示失败原因无需再发任何请求。// 前端消费方式示意 const es new EventSource(/api/v1/images/${id}/stream); es.addEventListener(status, (e) updateProgress(JSON.parse(e.data))); es.addEventListener(done, () es.close());配合前端的请求封装 api.ts 与生成页面 Generate.tsx用户在界面上看到的就是提交 → 实时进度 → 图片出现的流畅体验全程零手动刷新。一张图看懂最终效果经过上面的流水线AI 会为论文生成论文风格的专业配图例如信号处理示意图docs/images/example-signal.png即为平台生成效果的展示图关键模块速查表模块路径作用SSE 端点 后台任务images.py202 快速响应、asyncio.create_task、/stream推送图片数据模型image.pygeneration_status等进度字段图像生成服务image_service.py调用外部图像模型 API本地存储服务local_storage_service.py生成图片落盘与下载前端 API 封装api.ts统一 baseURL 与超时配置生成页Generate.tsx触发生成并刷新结果总结Academic Figure Generator 用一套轻量但完整的实时进度方案证明了长耗时 AI 任务不必依赖重型消息队列asyncio.create_task后台任务提交即返回生成不阻塞、不占连接数据库状态机pending → generating → completed / failed进度单一可信来源SSE 流式推送状态变化即推送、去重降载、done事件自然收尾结果用户获得零刷新的实时进度体验而架构只比同步等待多了一个异步任务和一个流式端点。如果你正在为 AI 绘图、报告导出等长任务设计接口这套202 后台任务 SSE组合拳非常值得直接借鉴。【免费下载链接】academic-figure-generatorAI 驱动的学术论文配图生成平台。上传论文 → AI 分析内容生成 Prompt → 一键生成高质量科研配图还有配套的skill可在主流agent中使用项目地址: https://gitcode.com/gh_mirrors/ac/academic-figure-generator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考