首页/新闻资讯/正文详情

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

发布时间:2026/9/25 17:54:36 来源:云帆数科 栏目:资讯中心
装闭 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 观察数据库状态并把后台任务转换为实时进度条和完成跳转。

相关推荐

零基础玩转虚拟显示器:Parsec VDD让你的电脑屏幕随心扩展
零基础玩转虚拟显示器:Parsec VDD让你的电脑屏幕随心扩展

零基础玩转虚拟显示器:Parsec VDD让你的电脑屏幕随心扩展 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 你是否曾经因为显示器数量不足而感到工作空间受限&#xff1… · 2026/8/13 12:08:30

TranslucentTB 开机启动设置:3步解决灰色选项问题,让透明任务栏自动运行
TranslucentTB 开机启动设置:3步解决灰色选项问题,让透明任务栏自动运行

TranslucentTB 开机启动设置:3步解决灰色选项问题,让透明任务栏自动运行 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentT… · 2026/9/20 8:55:59

跑通 Demo 只是热身:为什么权限与日志才是你进大模型产线的生死线?
跑通 Demo 只是热身:为什么权限与日志才是你进大模型产线的生死线?

聊《我重新梳理AI大模型就业后,先删掉了这些无效投入》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要摘要 很多初级和大模型方向求职者在面试中最大的误区,是把“能运行”等同于“能上线… · 2026/8/3 13:13:10

从 PyTorch 模型到多设备本地推理:OpenVINO 快速上手指南
从 PyTorch 模型到多设备本地推理:OpenVINO 快速上手指南

从 PyTorch 模型到多设备本地推理:OpenVINO 快速上手指南 【免费下载链接】openvino OpenVINO™ is an open source toolkit for optimizing and deploying AI inference 项目地址: https://gitcode.com/GitHub_Trending/op/openvino OpenVINO 是 Intel 开源… · 2026/9/25 17:54:33

手写ReAct循环:不靠框架,用while循环搭建Agent推理核心
手写ReAct循环:不靠框架,用while循环搭建Agent推理核心

还在纠结要不要给项目引入 Agent 的时候,我第一个跳出来的念头就是:别给项目加一堆东西,先把你头脑里的推理过程翻译成一个循环。ReAct 这个名字一旦出现,网上搜出来的全是框架、库、Agent 中间件,搞得人以为这是什么重… · 2026/9/25 17:54:09

YOLOV5自动驾驶小车8类交通指示牌数据集与训练部署实践
YOLOV5自动驾驶小车8类交通指示牌数据集与训练部署实践

简介:面向智能小车赛道自动驾驶场景,提供了一套已标注的交通指示牌目标检测数据集,按YOLOv5目录格式整理完毕,可直接用于模型训练和验证,免去自行采集与标注图像的繁琐过程。整套压缩包共2000个文件,以txt标… · 2026/9/25 17:54:03

Buildah 入门实战:从 scratch 到 Dockerfile,构建可移植 OCI 镜像的完整工作流
Buildah 入门实战:从 scratch 到 Dockerfile,构建可移植 OCI 镜像的完整工作流

云原生 【免费下载链接】buildah A tool that facilitates building OCI images. 项目地址: https://gitcode.com/gh_mirrors/bu/buildah 点击查看 免费下载 本文基于 Buildah 官方入门教程(docs/tutorials/01-intro.md)整理并深入扩展&… · 2026/9/25 17:54:03

Atlas 300V 24G推理卡如何高效部署YOLO目标检测
Atlas 300V 24G推理卡如何高效部署YOLO目标检测

1. Atlas 300V 24G的真实定位:它是一张推理卡,不是训练卡最近在群里看到好几个朋友在问同一个问题:“Atlas 300V 24G是运算加速卡吗?”还有人直接拿它对标GPU跑训练,问能不能用来部署YOLO。这个问题其实问到了很多刚接… · 2026/9/25 17:54:03

Atlas 300V实战:CANN部署与YOLO推理全流程
Atlas 300V实战:CANN部署与YOLO推理全流程

1. 拿到Atlas 300V,先搞清楚它到底是一张什么卡如果你最近在搞边缘AI或者服务器端推理,国内市场的视野里大概绕不开昇腾系的产品。我第一次拿到Atlas 300V 24G的时候,心里其实是有个问号的——这玩意儿到底算不算一张“运算加速卡”&#xff… · 2026/9/25 17:53:57

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码