[后端快速搭建]基于 Django+DeepSeek API 快速搭建智能問答后端

在 AI 應用開發中,將大模型 API 與 Web 框架結合是常見需求。本文將詳細記錄如何使用 Django 搭建后端服務,并集成 DeepSeek API 實現智能問答功能,包含環境配置、路由設計、API 調用及異常處理的完整流程,適合需要快速搭建 AI 問答后端的開發者參考。

【實現效果】

【這是博主寫的微信小程序前端實現效果】

一、環境準備:從 Conda 到 PyCharm

搭建后端的第一步是配置開發環境,我們將使用 Conda 管理依賴,PyCharm 作為 IDE(也可使用 VS Code 等工具,流程類似)。

1.1 安裝依賴(Conda 環境內)

首先確保已激活目標 Conda 環境(如無專門環境,可先通過conda create -n django-ai python=3.10創建),激活后執行以下命令安裝 Django:

pip install Django openai

1.2 PyCharm 創建 Django 項目

注意必須要是專業版的pycharm才有django

二、項目結構設計:拆分功能模塊

為了讓代碼結構更清晰,我們將「智能問答」功能拆分為獨立模塊chat,包含次級路由、API 調用腳本兩個核心文件,整體項目結構如下:

三、路由配置:主路由與次級路由關聯

Django 通過「路由分發」實現模塊化管理,我們需要先配置chat模塊的次級路由,再將其關聯到主路由。

3.1 編寫 chat 模塊的次級路由(chat/urls.py)

創建chat/urls.py文件,定義問答接口和健康檢查接口的路由,代碼如下:

from django.urls import path
from . import deepseekAsk  # 導入API調用腳本中的視圖函數# 次級路由映射:URL路徑 → 視圖函數
urlpatterns = [# 問答接口:前端發送POST請求到/chat/ask/,觸發deepseekAsk.deepseekGet函數path('ask/', deepseekAsk.deepseekGet, name='deepseek_ask'),# 健康檢查接口:前端發送GET請求到/chat/health/,觸發deepseekAsk.health_check函數path('health/', deepseekAsk.health_check, name='health_check'),
]

3.2 主路由關聯次級路由(項目配置目錄 /urls.py)

打開項目默認的主路由文件(如Django-DeepSeek-Chat/urls.py),通過include函數將chat模塊的路由集成進來,代碼如下:

from django.contrib import admin
from django.urls import path, include  # 導入include用于關聯次級路由urlpatterns = [path('admin/', admin.site.urls),  # Django默認后臺管理路由# 關聯chat模塊的次級路由:所有以/chat/開頭的請求,都轉發到chat/urls.py處理path('chat/', include('chat.urls')),
]

四、核心邏輯:DeepSeek API 調用與視圖函數

deepseekAsk.py是整個后端的核心,負責接收前端請求、調用 DeepSeek API、處理異常并返回結果,我們將分模塊解析其實現邏輯。

4.1 導入依賴與配置項

首先導入 Django 視圖相關工具、OpenAI SDK 及異常類,并配置 DeepSeek API 的關鍵參數(需替換為個人實際信息):

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt  # 解決前后端分離跨域問題
from django.views.decorators.http import require_POST  # 限制請求方法為POST
from openai import OpenAI
from openai import APIError, AuthenticationError, RateLimitError  # API異常類# -------------------------- 配置項(需替換為你的信息)--------------------------
DEEPSEEK_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # 從DeepSeek控制臺獲取
DEEPSEEK_BASE_URL = "https://api.deepseek.com"  # DeepSeek官方API基座地址
SYSTEM_PROMPT = "你是我的私人助理,回答問題可以有性格一點,富有人情味,語言默認使用中文。"  # 定義AI角色
# -----------------------------------------------------------------------------------# 初始化DeepSeek客戶端(兼容OpenAI SDK格式)
client = OpenAI(api_key=DEEPSEEK_API_KEY,base_url=DEEPSEEK_BASE_URL
)
  • API Key 獲取:訪問DeepSeek 控制臺,注冊登錄后在「API 密鑰」頁面創建密鑰;
  • System Prompt 作用:通過指令定義 AI 的角色和回答風格,避免 AI 回答偏離預期(如 “專業技術顧問”“幽默助手” 等)。

4.2 問答接口視圖函數(deepseekGet)

該函數是問答功能的核心,負責處理前端 POST 請求,流程分為「解析請求→參數校驗→調用 API→返回結果→異常處理」5 步:

@csrf_exempt  # 前后端分離時,前端無CSRF Token,需關閉校驗(生產環境需配置跨域白名單)
@require_POST  # 僅允許POST請求(符合RESTful規范,提交數據用POST)
def deepseekGet(request):try:# 1. 解析前端JSON格式請求import jsonrequest_data = json.loads(request.body)  # 讀取并解析請求體中的JSON數據# 2. 校驗請求參數(確保前端傳遞了"message"字段)user_message = request_data.get("message")if not user_message or not user_message.strip():  # 排除空消息或純空格return JsonResponse({"status": "error","message": "請輸入有效的問題內容"}, status=400)  # 400:HTTP狀態碼,代表請求參數錯誤# 3. 調用DeepSeek API獲取AI響應response = client.chat.completions.create(model="deepseek-chat",  # DeepSeek官方聊天模型名(固定值)messages=[{"role": "system", "content": SYSTEM_PROMPT},  # 系統角色指令{"role": "user", "content": user_message.strip()}  # 用戶輸入(去除首尾空格)],stream=False  # 非流式返回(前端需等待完整響應,適合簡單問答場景))# 4. 解析API響應,返回給前端ai_response = response.choices[0].message.content  # 提取AI回答內容return JsonResponse({"status": "success","response": ai_response  # 前端通過res.response獲取AI回答})# 5. 異常處理:覆蓋常見錯誤場景,給前端明確提示except AuthenticationError:  # API密鑰無效/過期return JsonResponse({"status": "error","message": "DeepSeek API密鑰無效或已過期,請檢查密鑰配置"}, status=401)  # 401:身份認證失敗except RateLimitError:  # API調用頻率超限return JsonResponse({"status": "error","message": "API調用頻率超限,請稍后再試"}, status=429)  # 429:請求過于頻繁except APIError as e:  # DeepSeek API服務異常return JsonResponse({"status": "error","message": f"DeepSeek API服務異常:{str(e)}"}, status=500)  # 500:服務器內部錯誤except json.JSONDecodeError:  # 前端請求格式不是JSONreturn JsonResponse({"status": "error","message": "請求格式錯誤,請使用JSON格式提交數據"}, status=400)except Exception as e:  # 捕獲其他未預料的異常(避免服務崩潰)return JsonResponse({"status": "error","message": f"服務器處理失敗:{str(e)}"}, status=500)

4.3 健康檢查接口(health_check)

為了方便前端或運維人員確認后端服務狀態,添加一個簡單的健康檢查接口,支持 GET 請求:

@csrf_exempt
def health_check(request):"""處理/chat/health請求,返回后端運行狀態"""if request.method == "GET":return JsonResponse({"status": "success","message": "Backend service is running normally"})# 非GET請求返回“方法不允許”return JsonResponse({"status": "error","message": "Only GET method is allowed"}, status=405)  # 405:HTTP標準狀態碼,代表請求方法不允許

4.4完整代碼

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt  # 解決跨域CSRF問題(前后端分離場景)
from django.views.decorators.http import require_POST  # 只允許POST請求(符合RESTful規范)
from openai import OpenAI
from openai import APIError, AuthenticationError, RateLimitError  # 捕獲常見API異常# -------------------------- 配置項(請替換為你的實際信息)--------------------------
DEEPSEEK_API_KEY = "++++++++++++++++++++++++++"  # 從DeepSeek控制臺獲取:https://platform.deepseek.com/
DEEPSEEK_BASE_URL = "https://api.deepseek.com"  # DeepSeek官方API基座地址
SYSTEM_PROMPT = "你是我的私人助理,回答問題可以有性格一點,富有人情味,語言默認使用中文。"  # 系統角色定義
# -----------------------------------------------------------------------------------# 初始化DeepSeek客戶端
client = OpenAI(api_key=DEEPSEEK_API_KEY,base_url=DEEPSEEK_BASE_URL
)@csrf_exempt  # 前后端分離時,前端無CSRF Token,需關閉CSRF校驗(生產環境可配置跨域白名單)
@require_POST  # 僅允許POST請求(發送消息需提交數據,符合HTTP規范)
def deepseekGet(request):try:# 1. 解析前端請求數據(前端用JSON格式發送,需先加載JSON體)import jsonrequest_data = json.loads(request.body)  # 讀取并解析前端POST的JSON數據# 2. 校驗必要參數(確保前端傳遞了"message"字段)user_message = request_data.get("message")if not user_message or not user_message.strip():  # 排除空消息return JsonResponse({"status": "error","message": "請輸入有效的問題內容"}, status=400)  # 400:請求參數錯誤# 3. 調用DeepSeek API獲取響應response = client.chat.completions.create(model="deepseek-chat",  # DeepSeek官方聊天模型名(固定值)messages=[{"role": "system", "content": SYSTEM_PROMPT},  # 系統角色(定義助手行為){"role": "user", "content": user_message.strip()}  # 用戶輸入(去除首尾空格)],stream=False  # 非流式返回(前端需等待完整響應,符合當前前端邏輯))# 4. 解析API響應,返回給前端ai_response = response.choices[0].message.content  # 提取AI回答內容return JsonResponse({"status": "success","response": ai_response  # 前端通過resData.response獲取AI回答})# 5. 異常處理(覆蓋常見錯誤場景,給前端明確提示)except AuthenticationError:return JsonResponse({"status": "error","message": "DeepSeek API密鑰無效或已過期,請檢查密鑰配置"}, status=401)  # 401:身份認證失敗except RateLimitError:return JsonResponse({"status": "error","message": "API調用頻率超限,請稍后再試"}, status=429)  # 429:請求過于頻繁except APIError as e:return JsonResponse({"status": "error","message": f"DeepSeek API服務異常:{str(e)}"}, status=500)  # 500:服務器內部錯誤except json.JSONDecodeError:return JsonResponse({"status": "error","message": "請求格式錯誤,請使用JSON格式提交數據"}, status=400)except Exception as e:# 捕獲其他未預料的異常(避免服務崩潰)return JsonResponse({"status": "error","message": f"服務器處理失敗:{str(e)}"}, status=500)# -------------------------- 健康檢查接口 --------------------------
@csrf_exempt  # 前后端分離需關閉CSRF校驗
def health_check(request):"""處理前端/chat/health的GET請求,返回后端狀態"""# 只允許GET方法(健康檢查無需提交數據)if request.method == "GET":return JsonResponse({"status": "success","message": "Backend service is running normally"})# 非GET請求返回“方法不允許”return JsonResponse({"status": "error","message": "Only GET method is allowed"}, status=405)  # 405是HTTP標準狀態碼:Method Not Allowed

五、功能測試:驗證接口可用性

完成代碼編寫后,需要測試接口是否正常工作,推薦使用 Postman 或 curl 工具(這里以 Postman 為例)。

5.1 啟動 Django 開發服務器

在項目根目錄執行命令:

python manage.py runserver

也可以使用pycharm啟動django服務器,確認啟動成功

5.2 測試健康檢查接口

1.打開 Postman,選擇「GET」方法,輸入 URL:

http://127.0.0.1:8000/chat/health/

2.點擊「Send」,若返回以下響應,說明后端服務正常:

{"status": "success","message": "Backend service is running normally"
}

5.3 測試問答接口

1.選擇「POST」方法,輸入 URL:

http://127.0.0.1:8000/chat/ask/

2.添加請求頭Content-Type:application/json

3.在「Body」→「raw」→「JSON」中輸入請求數據:

4.點擊send返回結果:

【感謝你的觀看!歡迎關注一起學習!!!】

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

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

相關文章

R 語言 + 卒中 Meta 分析

R 語言 卒中 Meta 分析:4 類核心場景完整代碼(含藥物對比 / 劑量風險) 卒中(缺血性 / 出血性)的臨床決策高度依賴循證證據,而 Meta 分析是整合多中心研究結果的核心工具。本文以卒中臨床研究為核心&#x…

Goframe 框架下HTTP反向代理并支持MCP所需的SSE協議的實現

一、需求背景 Go 語言開發 MCP 服務,并在 Goframe 框架下實現 Http 反向代理,代理該 MCP 服務。 二、效果演示 三、Goframe框架簡介 GoFrame 是一款模塊化、低耦合設計、高性能的Go 語言開發框架。包含了常用的基礎組件和開發工具,既可以作…

Git將多筆patch合并成一筆

一、方法1、在你的代碼中把這多筆patch都打上2、git reset到origin那一筆(默認模式,不帶soft或者hard)3、再add和commit,push二、種模式對比模式命令示例影響范圍適用場景--softgit reset --soft HEAD~1僅移動 HEAD,保留修改在暫存區修改提交…

【SpringBoot】Dubbo、Zookeeper

文章目錄前提知識概要分布式系統單體架構垂直應用架構分布式架構流式架構RPCDubbo概念Dubbo環境搭建Zookeeper測試 ZookeeperWindow環境下使用Dubbo-admin版本匹配不對服務注冊實戰內容總結導入相關依賴選擇 Zookeeper 版本配置并啟用 Zookeeper創建服務接口和實現(DubboServic…

【不說廢話】pytorch張量相對于numpy數組的優勢

核心關系 我們首先需要了解:PyTorch 張量在設計上深受 NumPy 數組的影響,它們共享許多相似的 API 和概念。實際上,PyTorch 張量可以看作是支持 GPU 加速和自動求導功能的 NumPy 數組。PyTorch 張量的主要優勢 1. GPU 加速支持(最重…

拼團小程序源碼分享拼團余額提現小程序定制教程開發源碼二開

功能詳細說明(一)首頁功能進入首頁,可看到以下核心功能:1、優惠券,錢包,簽到,拼團,分銷等各種功能入口2、推薦的商品和活動3、下方功能欄的各種功能(二)客服功…

pikachu之XSS

XSS(跨站腳本)概述Cross-Site Scripting 簡稱為“CSS”,為避免與前端疊成樣式表的縮寫"CSS"沖突,故又稱XSS。一般XSS可以分為如下幾種常見類型:1.反射性XSS;2.存儲型XSS;3.DOM型XSS;XSS漏洞一直被評估為web漏…

【Element Plus `el-select` 下拉菜單響應式定位問題深度解析】

Element Plus el-select 下拉菜單響應式定位問題深度解析 本文檔旨在深入剖析一個在響應式布局中常見的 UI 問題:如何確保一個靠近屏幕邊緣的 el-select 組件的下拉菜單,在任何屏幕尺寸下都能以預期的、優雅的方式顯示。 1. 需求背景 在一個大屏數據展示…

Qt 項目文件(.pro)中添加 UI 文件相關命令

在 Qt 的 .pro 項目文件中,處理 UI 文件(.ui 文件)通常需要以下配置: 基本 UI 文件配置 自動包含 UI 文件: qmake FORMS yourfile.ui \anotherfile.ui Qt 構建系統會自動使用 uic(用戶界面編譯器&#xff…

展會回顧 | 聚焦醫療前沿 , 禮達先導在廣州醫博會展示類器官自動化培養技術

8月22-24日,廣州醫博會在廣交會展館B區圓滿落幕。此次盛會匯聚了來自全球醫療健康領域的頂尖專家學者、企業代表與合作伙伴。展會內容涵蓋基礎研發、臨床應用、前沿技術、產業轉化、醫療服務及金融支持,全景呈現醫療健康產業的創新生態,成為連…

華為eNSP防火墻綜合網絡結構訓練.docx

1.IP及VLAN規劃情況 設備 接口 IP vlan 備注 AR1 g0/0/0 1.1.1.2/28 PPPOE g0/0/1 3.3.3.1/30 g0/0/2 114.114.114.254/24 AR2 g0/0/0 2.2.2.2/28 DHCP g0/0/1 3.3.3.2/30 g0/0/2 100.100.100.254/24 FW1 g1/0/0 10.0.0.1/30 tr…

從 Oracle 到 TiDB,通過ETL工具,高效實現數據拉通

在當前企業數字化轉型的浪潮中,打破數據孤島、實現異構數據庫間的數據高效流轉已成為提升業務敏捷性與決策效率的關鍵。許多企業在要將 Oracle 數據庫中的海量數據準確地同步至TiDB 分布式數據庫時遇到了挑戰。這一過程不僅要求數據的絕對一致性,還對同步…

Effective c++ 35條款詳解

您問到了最關鍵的一點!這正是策略模式的精妙之處——它通過組合(composition)而非繼承(inheritance)來實現多態效果。讓我詳細解釋這是如何工作的,以及它與傳統繼承多態的區別。🔄 策略模式如何…

51c自動駕駛~合集19

自己的原文哦~ https://blog.51cto.com/whaosoft/11793894 #DRAMA 首個基于Mamba的端到端運動規劃器 運動規劃是一項具有挑戰性的任務,在高度動態和復雜的環境中生成安全可行的軌跡,形成自動駕駛汽車的核心能力。在本文中,我…

大數據新視界 -- Hive 數據倉庫:架構深度剖析與核心組件詳解(上)(1 / 30)

💖💖💖親愛的朋友們,熱烈歡迎你們來到 青云交的博客!能與你們在此邂逅,我滿心歡喜,深感無比榮幸。在這個瞬息萬變的時代,我們每個人都在苦苦追尋一處能讓心靈安然棲息的港灣。而 我的…

軟考 系統架構設計師系列知識點之雜項集萃(137)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(136) 第253題 在面向對象設計中,用于描述目標軟件與外部環境之間交互的類被稱為( ),它可以( )。 第1空 A. 實體類 B. 邊界類 C. 模型類 D. 控制類 正確答案:B。 第2空 A. 表示目標軟件系統中具有持久…

(附源碼)基于Spring Boot公務員考試信息管理系統設計與實現

摘 要 隨著公務員考試日益受到社會的廣泛關注,一個高效、便捷的公務員考試信息管理系統顯得尤為重要。本文設計并實現了一個基于前端Vue框架,后端采用Java與Spring Boot技術,數據庫選用MySQL,并部署在Tomcat服務器上的信息管理系統…

學習JavaScript的第一個簡單程序:Hello World

在JavaScript中,最簡單的程序是打印"Hello World"。可以通過以下方式實現: console.log("Hello World");將上述代碼保存為hello.js文件,通過Node.js運行或在瀏覽器控制臺中執行。 瀏覽器環境實現 在HTML文件中嵌入Jav…

【Big Data】Alluxio 首個基于云的數據分析和開源AI數據編排技術

目錄 1. 什么是 Alluxio?? 2. Alluxio 的誕生背景:為什么需要數據編排層?? 痛點 1:計算與存儲強耦合,適配成本高? 痛點 2:跨集群 / 跨云數據移動效率低? 痛點 3:數據訪問延遲高&#x…

uniApp App 嵌入 H5 全流程:通信與跳轉細節拆解

在 uniApp App 開發中,通過 WebView 嵌入 H5 頁面是常見需求(如活動頁、第三方頁面),核心需解決「H5 與 App 通信」「H5 操作后返回/跳轉 App」兩大問題。本文基于 DCloud 官方方案(原文鏈接),對…