Django + Celery 打造企業級大模型異步任務管理平臺 —— 從需求到完整實踐(含全模板源碼)

如需完整工程文件(含所有模板),可回復獲取詳細模板代碼。

面向人群:自動化測試工程師、企業中后臺開發人員、希望提升效率的 AI 業務從業者
核心收獲:掌握 Django 三表關系設計、Celery 異步任務實踐、基礎 Web 交互與前后端分離思路,源碼可直接落地,方便二次擴展


一、系統功能全覽

本系統以大模型自動化任務管理為核心,涵蓋了三大業務場景:

1. 大模型任務管理

  • 場景:測試工程師或業務人員通過 Web 頁面向企業內已接入的大模型(如 GPT、阿里百川等)發起任務請求,系統后臺異步執行任務并實時反饋進度與結果。
  • 功能
    • 任務列表:清晰展示任務名稱、創建時間、發起人、提問內容、所用大模型、進度
    • 任務詳情:一鍵查看輸入與大模型返回詳情
    • 一鍵新建任務:彈窗表單,選擇發起人/模型、填寫提示詞,任務異步下發

2. 大模型管理

  • 場景:平臺支持多模型配置、維護,可隨時增刪編輯,靈活應對不同業務需求或供應商切換。
  • 功能
    • 大模型列表:展示所有已接入大模型的關鍵信息
    • 新建/編輯/刪除大模型:表單支持 API Key、Base URL、模型名、維護人,快速擴展和維護

3. 人員管理

  • 場景:平臺中的“發起人”、“維護人”都從人員表下拉選取,方便團隊協作與權限追蹤。
  • 功能
    • 列表、創建、編輯、刪除人員,數據基礎一目了然

二、系統架構與擴展性說明

  • 異步任務:Celery+Redis 組合,任務下發即返回,處理高并發和長耗時 AI 推理毫無壓力。
  • 表單校驗:所有關鍵字段必填,表單錯誤友好提示。
  • 數據解耦:大模型、人員、任務三表設計,方便后續增加權限、標簽等擴展字段。
  • 易于二次開發
    • 任務可輕松拓展為定時任務、批量任務、API 任務
    • 大模型表可加“模型類型”、“狀態”等新字段
    • Celery 任務內可真實調用大模型接口,支持異步回調、失敗重試等企業級需求
  • 權限與安全:可直接結合 Django 用戶系統,擴展為企業級權限管理后臺

環境準備

  1. 安裝依賴

    pip install django celery redis
    
  2. 確保本地 Redis 已啟動(Windows 下可用)


項目結構

bigmodel_proj/
├── bigmodel_proj/
│   ├── __init__.py
│   ├── celery.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── app/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── tasks.py
│   ├── views.py
│   ├── forms.py
│   ├── urls.py
│   └── templates/
│       └── app/
│           └── ...  # 所有前端模板
└── manage.py

四、核心代碼實現

1. bigmodel_proj/settings.py(核心配置)

import os
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent.parentSECRET_KEY = 'your-secret-key'
DEBUG = True
ALLOWED_HOSTS = []INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'bigmodel_proj.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'app' / 'templates'],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'bigmodel_proj.wsgi.application'DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = TrueSTATIC_URL = '/static/'# Celery 配置
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

2. bigmodel_proj/celery.py(Celery 啟動入口)

import os
from celery import Celeryos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigmodel_proj.settings')
app = Celery('bigmodel_proj')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

bigmodel_proj/__init__.py

from .celery import app as celery_app
__all__ = ('celery_app',)

3. app/models.py(三大核心數據模型)

from django.db import modelsclass Person(models.Model):name = models.CharField(max_length=50, verbose_name="姓名")created_at = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")def __str__(self):return self.nameclass BigModel(models.Model):api_key = models.CharField(max_length=128, verbose_name="API Key")base_url = models.URLField(verbose_name="Base URL")model_name = models.CharField(max_length=100, verbose_name="模型名")maintainer = models.ForeignKey(Person, on_delete=models.SET_NULL, null=True, verbose_name="維護人")created_at = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")updated_at = models.DateTimeField(auto_now=True, verbose_name="修改時間")def __str__(self):return self.model_nameclass BigModelTask(models.Model):STATUS_CHOICES = (('PENDING', '待處理'),('RUNNING', '進行中'),('SUCCESS', '成功'),('FAILURE', '失敗'),)name = models.CharField(max_length=100, verbose_name="任務名稱")creator = models.ForeignKey(Person, on_delete=models.SET_NULL, null=True, verbose_name="發起人")prompt = models.TextField(verbose_name="用戶提問信息")big_model = models.ForeignKey(BigModel, on_delete=models.SET_NULL, null=True, verbose_name="大模型")status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='PENDING', verbose_name="任務進度")created_at = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")detail = models.TextField(blank=True, null=True, verbose_name="大模型請求詳情")def __str__(self):return self.name

4. app/tasks.py(Celery 異步任務)

from celery import shared_task
import time
from .models import BigModelTask@shared_task(bind=True)
def execute_bigmodel_task(self, task_id):try:task = BigModelTask.objects.get(id=task_id)task.status = 'RUNNING'task.save(update_fields=['status'])# 模擬大模型請求耗時time.sleep(5)# 假裝請求大模型并返回結果result_detail = f"請求大模型[{task.big_model.model_name}]完成,提示詞:{task.prompt}"task.status = 'SUCCESS'task.detail = result_detailtask.save(update_fields=['status', 'detail'])except Exception as e:if task:task.status = 'FAILURE'task.detail = f"異常:{str(e)}"task.save(update_fields=['status', 'detail'])raise

5. app/forms.py(前端表單)

from django import forms
from

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83001.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83001.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83001.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

創建對象

雖然Object構造函數或對象字面量可以方便地創建對象,但這些方式也有明顯不足: 創建具有同樣接口的多個對象需要重復編寫很多代碼 1.工廠模式 工廠模式是一種眾所周知的設計模式,廣泛應用于軟件工程領域,用于抽象創建特定對象的過程 function createPerson(name,age){let…

深度理解指針(2)

🎁個人主頁:工藤新一 🔍系列專欄:C面向對象(類和對象篇) 🌟心中的天空之城,終會照亮我前方的路 🎉歡迎大家點贊👍評論📝收藏?文章 深入理解指…

數據科學和機器學習的“看家兵器”——pandas模塊 之一

目錄 pandas 模塊介紹 4.1 pandas 數據結構 一、課程目標 二、Series 對象介紹 三、DataFrame 對象介紹 四、Series 和 DataFrame 在具體應用中的注意事項 (一)Series 注意事項 (二)DataFrame 注意事項 五、實戰案例 案例 1:學生成績分析 案例 2:銷售數據分析 案例 3:股…

STM32CubeMX HAL庫 串口的使用

1.配置 2.開啟中斷后,生成代碼 3.串口的接收 1).開啟空閑中斷接收 __HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); // 關鍵步驟:啟用空閑中斷 2). 啟動接收 調用 HAL_UARTEx_ReceiveToIdle_IT 啟動異步接收,可以使用…

IIS服務器URL重寫配置完整教程

1.下載URL Rewrite Module 2.1 https://www.iis.net/downloads/microsoft/url-rewrite https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_zh-CN.msi 2.安裝

vite+vue建立前端工程

? 參考 開始 | Vite 官方中文文檔 VUE教程地址 https://cn.vuejs.org/tutorial/#step-1 第一個工程 https://blog.csdn.net/qq_35221977/article/details/137171497 腳本 chcp 65001 echo 建立vite工程 set PRO_NAMEmy-vue-appif not exist %PRO_NAME% (call npm i…

負進制轉換

當一個數的基數是負數時,將這個數轉換為負進制數時,大體思路和正數的情況一樣,但是因為基數是負數,所以計算出來的余數就有可能是負數所以,需要在余數是負數時:將余數 基數的絕對值,商 1。 代…

K8S已經成為了Ai應用運行的平臺工具

AI應用與K8s的深度融合:加速云原生時代的智能運維與業務創新 摘要: 隨著人工智能(AI)技術的飛速發展,Kubernetes(K8s)作為容器編排領域的領軍者,正逐步成為承載AI應用的核心基礎設施…

NVMe簡介1

它分為兩部分,這里是第一部分。 NVM Express(NVMe)是一種高性能、可擴展的接口協議,用于通過PCI express(PCIe)總線,實現主機軟件與NVM設備之間的通信。目前,由于NVMe SSD相比于SATA…

微服務商城(1)開篇、服務劃分

參考:https://mp.weixin.qq.com/s?__bizMzg2ODU1MTI0OA&mid2247485597&idx1&sn7e85894b7847cc50df51d66092792453&scene21#wechat_redirect 為什么選擇go-zero go-zero 為我們提供了許多高并發場景下的實用工具,比如為了降低接口耗時…

《隱私計算:數據安全與隱私保護的新希望》

一、引言 在數字化時代,數據已成為企業和組織的核心資產。然而,數據的收集、存儲和使用過程中面臨著諸多隱私和安全挑戰。隱私計算作為一種新興技術,旨在解決數據隱私保護和數據共享之間的矛盾。本文將深入探討隱私計算的基本概念、技術原理、…

MySQL 學習(九)bin log 與 redo log 的區別有哪些,為什么快速恢復使用 redo log 而不用 bin log?

目錄 一、bin log 與 redo log 的區別1)實現方式不同:2)日志內容不同:3)記錄方式不同:4)使用場合不同: 二、為什么快速恢復使用 redo log 而不用 bin log? 面試題&#x…

用Array.from實現創建一個1-100的數組

一、代碼實現 let arr Array.from({length: 100}, (_, i) > i 1); 二、代碼分析 1、Array.from(arrayLike, mapFn) (1)arrayLike 類數組對象(如 { length: 100 })本身沒有索引屬性(如 0: undefined, 1: undefi…

javaScript簡單版

簡介 JavaScript(簡稱:JS)是一門跨平臺、面向對象的腳本語言,是用來控制網頁行為,實現頁面的交互效果。 JavaScript和Java是完全不同的語言,不論是概念還是設計。但是基礎語法類似。 組成: ECMAScript:規定了JS基礎語法核心知…

Python刷題練習

文章目錄 1.尋找相同字串2.密鑰格式化3.五鍵鍵盤的輸出4.單詞重量5.輸出指定字母在字符串的中的索引6.污染水域7.九宮格按鍵輸入8.任務最優調度9.高效的任務規劃 1.尋找相同字串 題目描述: 給你兩個字符串t和p,要求從t中找到一個和p相同的連續子串,并輸…

MATLAB實現振幅調制(AM調制信號)

AM調制是通信專業非常重要的一個知識點。今天我們使用MATLAB編程實現AM調制。 我們實現輸入一個載波信號的頻率與調制信號的頻率后,再輸入調幅度,得到已調信號的波形與包絡信號的波形,再使用FFT算法分析出已調信號的頻譜圖。 源代碼&#x…

JJJ:linux ida

文章目錄 1.總結2.各類函數2.1 分配一個倉庫2.2 銷毀倉庫2.3 從倉庫里面分配一個整數id2.4 將上面分配的整數id從倉庫里面刪除2.5 在指定范圍內分配一個id 1.總結 ida使用起來很簡單,就是先分配一個倉庫一樣的實例,再從這個倉庫里面分配一個獨一無二的整…

FastByteArrayOutputStream和ByteArrayInputStream有什么區別

FastByteArrayOutputStream 和 ByteArrayInputStream 是兩種完全不同的 Java I/O 類,它們的主要區別體現在 設計目的 和 使用場景 上。以下是詳細對比: 1. 核心區別總結 特性FastByteArrayOutputStream (Spring框架)ByteArrayInputStream (JDK原生)所屬…

docker-compose——安裝redis

文章目錄 一、編寫docker-compose.yaml文件二、編寫redis.conf文件三、啟動docker-compose 一、編寫docker-compose.yaml文件 version: 3.3 services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis/data:/data- ./redis/…

東芝推出新的SCiB模塊,散熱性能加倍,適用于電動公交車、電動船舶和固定應用

東京—東芝公司推出了一種新的SCiB模塊,這是一種專為電動汽車、電動船舶和固定應用而設計的鋰離子電池。新產品采用鋁制底板,散熱量約為當前模塊的兩倍。它將于2025年4月中旬在日本和全球上市。 鋰離子電池的使用越來越多,而且越來越多樣化&a…