装闭 RenoPit 源码解析(05):FastAPI与Celery如何执行AI装修分析

发布时间:2026/7/24 17:52:07

装闭 RenoPit 源码解析(05):FastAPI与Celery如何执行AI装修分析
AI 装修闭坑分析可能包含多张图片、多份合同以及多次大模型调用不适合让 FastAPI 请求一直阻塞。装闭 RenoPit 在 fthux/RenoPit 中使用 Celery 和 Redis 编排这条长任务链本篇分析任务从入队到结束的全过程。一、FastAPI 只负责启动任务用户点击“开始分析”后ProjectPage向POST /api/projects/{id}/analyze发送请求。trigger_analysis()首先查询项目、图片和文件并判断三类输入是否至少存在一种可分析图片已上传文档非空的用户补充说明。输入为空时返回 400项目已经处于analyzing时返回 409。校验通过后接口先把项目状态提交为analyzing再投递任务from..tasks.analysisimportrun_analysis_task run_analysis_task.delay(project_id)如果入队失败接口会把状态恢复为pending。因此浏览器收到成功响应时数据库已经记录了分析中的状态任务也已经进入 Redis。二、Celery 如何连接 Redistasks/celery_app.py创建 Celery 实例Broker 使用 Redis 0 号库结果后端使用 1 号库celery_appCelery(renovation_analyzer,brokersettings.CELERY_BROKER_URL,backendsettings.CELERY_RESULT_BACKEND,include[app.tasks.analysis],)任务消息和结果采用 JSON 序列化。task_acks_lateTrue表示任务执行完成后才确认消息worker_prefetch_multiplier1让 Worker 每次只预取一个长任务。软、硬时间限制都设置为 1200 秒以容纳串行的图片和文档分析。Docker Compose 中的backend与celery_worker使用同一份代码和环境变量但启动命令不同。Worker 不接收 HTTP 请求只监听 Redis 队列。三、run_analysis_task 是总编排器Celery 实际执行的是run_analysis_task(project_id)。它不是直接调用一次 LLM 就结束而是按六个阶段组织任务是否验证项目状态改为 analyzing设计图综合分析逐份文档分析成功文档是否不少于两份跨文档核查汇总状态completed 或 failed第三步调用run_analysis_sync()处理图片、已提取文本和用户说明。设计图分析失败不会立刻终止整个任务因为合同与报价单分析可以独立完成。四、文档分析按文件串行执行任务会查询当前项目中extracted_text非空且类型为 PDF、DOCX、TXT 或 Markdown 的文件。每份文件调用一次run_document_analysis_sync()结果追加到doc_results。单份文档异常会被捕获并记录为失败不会阻断下一份文件。这样一份无法解析的合同不会让其他报价单全部失去分析机会。当文档结果数量不少于两份时任务继续调用run_cross_check_sync()。该阶段会比较合同和报价单中的金额、项目、责任条款等信息并把差异写回综合分析结果。五、项目完成状态如何判定任务结束时分别计算design_okresult.get(status)completeddoc_ok_countsum(1foritemindoc_resultsifitem.get(status)completed)只要设计分析成功或者至少一份文档分析成功项目就被标记为completed。完成消息会汇总设计问题数、文档成功数和跨文档差异数。只有设计分析与全部文档分析都失败时项目状态才写为failed。最外层异常同样会落入失败分支并把错误信息提供给后续 SSE 接口读取。六、停止分析如何改变状态POST /projects/{id}/stop只接受当前状态为analyzing的项目。接口把项目恢复为pending再找到最近一条processing或pending的Analysis将其标为failed错误信息写成“用户手动停止”。状态提交后SSE 轮询会观察到pending并发送stopped事件。项目页据此关闭进度条并恢复开始分析按钮。七、异步任务调用链小结RenoPit 把 HTTP 请求和 AI 计算分成两个进程FastAPI 完成输入校验、状态更新和任务投递Celery Worker 完成设计分析、文档分析、交叉核查和最终状态汇总。Redis 负责传递任务PostgreSQL 则是两个进程共同认可的业务状态来源。这条任务链的完整代码可以在 fthux/RenoPit 中查看。下一篇将继续分析浏览器如何通过 SSE 观察数据库状态并把后台任务转换为实时进度条和完成跳转。

相关新闻

百度网盘下载速度突然很慢怎么回事?2026还有解除限制的方法吗

百度网盘下载速度突然很慢怎么回事?2026还有解除限制的方法吗

2026/7/24 17:52:07

不少人可能会遇到这样的困扰:在日常日常使用网络存储服务时,原本几兆甚至几十兆每秒的传输速度,忽然降到了几十KB,或者出现速度忽高忽低、频繁波动的状况。这种现象通常由多重因素共同作用产生,下面梳理了常见的原因及…

2026年录音转换文字的软件深度测评:成本分析维度下,谁才是王者

2026年录音转换文字的软件深度测评:成本分析维度下,谁才是王者

2026/7/24 17:52:07

先说明白核心判断 从企业决策记录、会议管理、行业峰会内容消化这些高频场景出发,以全链路综合成本为判断维度,没有通吃所有场景的王者,只匹配你的使用频次:低频单次需求选网易见外,飞书生态内企业协作选飞书妙记&…

华为MetaERP Oracle Fusion Financials 会计核算架构深度分析报告基于 Oracle Fusion Cloud Financials 26C 官方文档体系整理,涵盖设计哲

华为MetaERP Oracle Fusion Financials 会计核算架构深度分析报告基于 Oracle Fusion Cloud Financials 26C 官方文档体系整理,涵盖设计哲

2026/7/24 17:52:07

Oracle Fusion Financials 会计核算架构深度分析报告基于 Oracle Fusion Cloud Financials 26C 官方文档体系整理,涵盖设计哲学、业务流程、实现步骤、组织架构成熟度对比,以及 PTP 端到端业务场景的核算与预算控制逻辑。一、Fusion Accounting 的设计哲…

配置系统策略禁用u盘等外设

配置系统策略禁用u盘等外设

2026/7/24 18:52:09

在日常办公或公共电脑维护中,我们经常面临这样的困扰:公司内部资料需要严防外泄,可总有员工随手插U盘拷贝文件;学校机房的电脑病毒泛滥,源头往往就是学生带来的个人U盘;甚至有些场景下,我们希望…

PyTorch 神经网络基础(模型构建,参数构造...)

PyTorch 神经网络基础(模型构建,参数构造...)

2026/7/24 18:52:09

PyTorch 神经网络基础模型构造(层和块):MLP 的本质(显示定义):自定义块需要实现的功能: (1)将输入数据作为其前向传播函数的参数。(2)通过前向传播…

Low-Rank Few-Shot Adaptation of Vision-Language Models论文阅读

Low-Rank Few-Shot Adaptation of Vision-Language Models论文阅读

2026/7/24 18:52:09

视觉语言模型的低秩少样本自适应code: https://github.com/MaxZanella/CLIP-LoRA摘要背景:视觉语言模型的少样本自适应提升了模型的泛化能力,少量标注样本即可在下游任务适配。现有问题:现有研究集中在 提示学习,Adapter方向, 忽…

魔兽争霸III终极优化指南:用WarcraftHelper插件让经典游戏在现代电脑重生

魔兽争霸III终极优化指南:用WarcraftHelper插件让经典游戏在现代电脑重生

2026/7/24 18:52:09

魔兽争霸III终极优化指南:用WarcraftHelper插件让经典游戏在现代电脑重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争…

终极AMD Ryzen调试神器:免费开源SMUDebugTool完全使用指南

终极AMD Ryzen调试神器:免费开源SMUDebugTool完全使用指南

2026/7/24 18:52:09

终极AMD Ryzen调试神器:免费开源SMUDebugTool完全使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…

Tmux 完全使用指南(含命令简写速查)

Tmux 完全使用指南(含命令简写速查)

2026/7/24 18:42:09

Tmux 的核心价值:关闭终端窗口后,任务依然在后台运行。核心逻辑为 会话(Session) > 窗口(Window) > 窗格(Pane)。 默认前缀快捷键为 Ctrl b(下文简称 前缀&#x…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/24 4:17:29

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/23 4:40:05

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/23 1:54:13

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

Django毕设项目:基于 Django 的 智能化学生综合素质测评审核系统 校园学生评优评奖综合管理系统(源码+文档,讲解、调试运行,定制等)

Django毕设项目:基于 Django 的 智能化学生综合素质测评审核系统 校园学生评优评奖综合管理系统(源码+文档,讲解、调试运行,定制等)

2026/7/24 0:01:07

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

[具身智能-634]:Python 封装的地平线 VIO 多媒体库:libsrcampy库详解

[具身智能-634]:Python 封装的地平线 VIO 多媒体库:libsrcampy库详解

2026/7/24 0:01:07

srcampy /libsrcampy 名称释义先明确结论: 官方文档没有公布标准化英文全称,是地平线内部项目缩写;行业公认拆解如下:srcampy Source Amplifier Python bindingsrc Source(图像源:MIPI Sensor、视频源&am…

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

2026/7/24 0:01:07

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…