偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

FastAPI開發(fā)AI應用一:實現(xiàn)連續(xù)多輪對話

人工智能
本文將通過一個完整的實戰(zhàn)項目,介紹如何使用 FastAPI 框架開發(fā) AI 聊天應用,重點講解連續(xù)多輪對話的實現(xiàn)原理和核心技術。即使你是編程新手,也能跟著本教程一步步構建出功能完整的 AI 聊天應用。

本文將通過一個完整的實戰(zhàn)項目,介紹如何使用 FastAPI 框架開發(fā) AI 聊天應用,重點講解連續(xù)多輪對話的實現(xiàn)原理和核心技術。即使你是編程新手,也能跟著本教程一步步構建出功能完整的 AI 聊天應用。

本項目已經(jīng)開源之 Github,項目地址:https://github.com/wayn111/fastapi-ai-chat-demo

項目概述

想象一下,你正在和一個聰明的 AI 助手對話,它不僅能回答你的問題,還能記住你們之前聊過的內(nèi)容。這就是我們要構建的 AI 聊天應用!

核心功能

  • 連續(xù)多輪對話:AI 能記住對話歷史,就像和真人聊天一樣自然
  • 多角色切換:可以選擇不同的 AI 角色(智能助手、AI 老師、編程專家)
  • 流式響應:AI 回復時有打字機效果,體驗更流暢
  • 會話管理:支持多個對話會話,可以隨時切換
  • Web 界面:簡潔美觀的聊天界面,操作簡單

技術棧

  • 后端框架:FastAPI(Python 的現(xiàn)代 Web 框架)
  • 數(shù)據(jù)存儲:Redis(高性能內(nèi)存數(shù)據(jù)庫)
  • AI 模型:支持 OpenAI 接口請求調用
  • 前端:HTML + CSS + JavaScript
  • 服務器:Uvicorn(高性能 ASGI 服務器)

核心架構

應用初始化

應用啟動時需要完成幾個關鍵的初始化步驟,就像搭建房子需要先打地基一樣:

1. 創(chuàng)建 Web 應用框架

使用 FastAPI 創(chuàng)建應用實例,這是整個系統(tǒng)的核心。FastAPI 會自動生成 API 文檔,讓開發(fā)和調試變得更簡單。

2. 連接數(shù)據(jù)存儲

Redis 就像應用的"大腦記憶",用來存儲所有的對話歷史。選擇 Redis 是因為它速度快、支持數(shù)據(jù)過期,非常適合聊天應用的場景。

3. 連接 AI 服務

這是連接到 OpenAI 的"橋梁",讓我們能夠調用 GPT 模型進行智能對話。通過配置 API 密鑰和基礎 URL,建立與 AI 服務的通信通道。

4. 配置 AI 角色

通過不同的"人設"提示詞,讓 AI 扮演不同的角色:

  • 智能助手:友善專業(yè),適合日常問答
  • AI 老師:耐心教學,善于解釋復雜概念
  • 編程專家:技術專業(yè),提供代碼建議

每個角色都有獨特的回答風格,讓用戶獲得更個性化的體驗。

數(shù)據(jù)模型設計

在聊天應用中,我們需要一個標準的"消息格式"來確保數(shù)據(jù)的一致性。就像寄信需要標準的信封格式一樣:

class ChatMessage(BaseModel):
    role: str        # 誰說的話:"user"(用戶) 或 "assistant"(AI)
    content: str     # 說了什么:具體的對話內(nèi)容
    timestamp: float # 什么時候說的:消息時間戳

為什么需要這個格式?

  • role 字段:幫助 AI 區(qū)分哪些是用戶的問題,哪些是自己的回答
  • content 字段:存儲實際的對話內(nèi)容
  • timestamp 字段:記錄時間,方便按時間順序顯示對話

這種標準化的數(shù)據(jù)格式讓我們的應用更加穩(wěn)定可靠,也方便后續(xù)的功能擴展。

多輪對話實現(xiàn)原理

多輪對話的"秘密"在于讓 AI 能夠"記住"之前聊過的內(nèi)容。就像人類對話一樣,我們需要上下文來理解當前的話題。

工作原理

想象 AI 的"記憶"是這樣工作的:

  1. 系統(tǒng)角色設定:"你是一個友善的 AI 助手"
  2. 歷史對話

用戶:"我叫小明"

AI:"你好小明!"

用戶:"我喜歡編程"

AI:"編程很有趣!"

  1. 當前問題:"你還記得我的名字嗎?"

當 AI 收到新問題時,它會看到完整的對話歷史,所以能回答:"當然記得,你是小明!"

會話管理

會話管理就像給每個用戶分配一個"聊天房間",讓 AI 能夠記住每個用戶的對話歷史。

核心功能說明

1. 生成會話 ID

def generate_session_id() -> str:
    return str(uuid.uuid4())

每個用戶開始聊天時,系統(tǒng)會生成一個唯一的"房間號"(會話 ID),就像酒店給客人分配房間一樣。

2. 保存對話消息

def save_message(user_id: str, session_id: str, message: ChatMessage):
    conversation_key = get_conversation_key(user_id, session_id)
    redis_client.lpush(conversation_key, json.dumps(message_data))
    redis_client.ltrim(conversation_key, 0, 19)  # 只保留最近20條消息

通過 userid + 會話 id 生成 key,將消息保存到 Redis 隊列中

3. 獲取對話歷史

def get_conversation_history(user_id: str, session_id: str):
    conversation_key = get_conversation_key(user_id, session_id)
    messages = redis_client.lrange(conversation_key, 0, -1)
    return [json.loads(msg) for msg in messages]

從 userid + 會話 id 生成 key,從 Redis 中讀取用戶該會話的歷史消息,讓 AI 了解之前聊了什么

為什么這樣設計?

  • 唯一性:每個會話都有獨特的 ID,避免混淆
  • 持久化:消息存儲在 Redis 中,重啟應用也不會丟失
  • 性能優(yōu)化:只保留最近的消息,避免內(nèi)存占用過大
  • 自動清理:每次只保留最近 20 條消息,自動清理舊數(shù)據(jù)

這種設計讓 AI 能夠"記住"每個用戶的對話歷史,實現(xiàn)真正的多輪對話體驗。

流式響應核心

流式響應就像 AI 在"實時打字",讓用戶看到回復逐字出現(xiàn),而不是等待很久后一次性顯示全部內(nèi)容。

?? 工作流程

1. 保存用戶消息

user_msg = ChatMessage(role="user", content=user_message)
save_message(session_id, user_msg)

首先將用戶的問題保存到"聊天記錄本"中。

2. 獲取對話歷史

history = get_conversation_history(session_id, limit=10)

讀取最近 10 條對話記錄,讓 AI 了解聊天的上下文。

3. 構建完整對話

messages = [
    {"role": "system", "content": AI_ROLES[role]},  # AI角色設定
    *history,  # 歷史對話
    {"role": "user", "content": user_message}  # 當前問題
]

將角色設定、歷史對話和當前問題組合成完整的對話上下文。

4. 調用 AI 服務

response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    stream=True  # 關鍵:啟用流式響應
)

在 openAi 接口請求格式中,stream=True 表示啟用流式響應。

5. 實時返回回復

for chunk in response:
    if chunk.choices[0].delta.content:
        content = chunk.choices[0].delta.content
        yield f"data: {json.dumps({'content': content})}\n\n"

AI 每生成一小段文字,就立即發(fā)送給前端顯示。

技術亮點

  • Server-Sent Events (SSE) :使用 SSE 協(xié)議實現(xiàn)服務器向瀏覽器的實時推送
  • 異步處理:不阻塞其他用戶的請求
  • 錯誤恢復:網(wǎng)絡中斷時能夠優(yōu)雅處理
  • 上下文保持:每次對話都能"記住"之前聊過的內(nèi)容

這種設計讓聊天體驗更加自然流暢,就像和真人對話一樣!

核心功能實現(xiàn)

API 接口設計

我們的聊天應用提供了 5 個核心 API 接口,就像一個完整的"聊天服務臺":

1. 開始新對話

@app.post("/chat/start")
async def start_chat(user_id: str):
    session_id = generate_session_id()
    return {"session_id": session_id, "welcome_message": "你好!我是你的AI助手"}

功能:為每個用戶創(chuàng)建一個新的"聊天房間",返回房間號(會話 ID)。

?? 2. 流式聊天

@app.get("/chat/stream")
async def chat_stream(user_id: str, session_id: str, message: str, role: str = "assistant"):
    return StreamingResponse(generate_streaming_response(user_id, session_id, message, role))

功能:這是核心接口!處理用戶消息,調用 AI 生成回復,并實時返回。

3. 獲取聊天歷史

@app.get("/chat/history")
async def get_chat_history(user_id: str, session_id: str):
    history = await get_conversation_history(user_id, session_id)
    return {"messages": history, "total": len(history)}

功能:查看之前的聊天記錄,就像翻看聊天記錄本。

4. 清除對話歷史

@app.delete("/chat/history/{session_id}")
async def clear_conversation_history(session_id: str, user_id: str):
    redis_client.delete(get_conversation_key(user_id, session_id))
    return {"message": "對話歷史已清除"}

功能:清空聊天記錄,重新開始對話。

5. 獲取 AI 角色列表

@app.get("/roles")
async def get_roles():
    return {"roles": AI_ROLES, "default_role": "assistant"}

功能:獲取所有可用的 AI 角色(助手、老師、程序員等)。

安全特性

  • 參數(shù)驗證:檢查輸入?yún)?shù)的有效性
  • 錯誤處理:優(yōu)雅處理各種異常情況
  • CORS 支持:允許跨域訪問
  • 速率限制:防止惡意請求(可選)

前端實現(xiàn)

前端就是用戶看到和操作的界面,我們用 HTML、CSS 和 JavaScript 構建了一個現(xiàn)代化的聊天界面。

界面結構

我們的聊天界面包含幾個主要部分:

<div class="chat-container">
    <!-- 1. 頭部:顯示標題和角色選擇 -->
    <div class="chat-header">
        <h1>?? AI智能助手</h1>
        <select id="roleSelect">
            <option value="assistant">?? 智能助手</option>
            <option value="teacher">???? AI老師</option>
            <option value="programmer">???? 編程專家</option>
        </select>
    </div>

    <!-- 2. 消息區(qū)域:顯示對話內(nèi)容 -->
    <div class="messages-container" id="messagesContainer">
        <!-- 消息會動態(tài)添加到這里 -->
    </div>

    <!-- 3. 輸入?yún)^(qū)域:用戶輸入消息 -->
    <div class="input-container">
        <input type="text" id="messageInput" placeholder="輸入你的消息...">
        <button onclick="sendMessage()">?? 發(fā)送</button>
    </div>

    <!-- 4. 工具欄:常用功能按鈕 -->
    <div class="toolbar">
        <button onclick="clearHistory()">??? 清除歷史</button>
        <button onclick="newChat()">?? 新對話</button>
    </div>
</div>

樣式設計特點

  • 現(xiàn)代化外觀:使用漸變色和圓角設計
  • 消息氣泡:用戶消息在右邊(藍色),AI 消息在左邊(白色)
  • 響應式布局:在手機和電腦上都能正常顯示
  • 動畫效果:按鈕懸停效果和打字指示器
  • 清晰層次:不同區(qū)域有明確的視覺分割

JavaScript 核心邏輯

JavaScript 負責處理用戶交互和與后端的通信,就像聊天應用的"大腦"。

核心功能實現(xiàn)

1. 開始新對話

async function startNewChat() {
    // 調用后端API創(chuàng)建新會話
    const response = await fetch('/api/chat/start', { method: 'POST' });
    const data = await response.json();
    currentSessionId = data.session_id;

    // 顯示歡迎消息
    addMessage('assistant', '你好!我是你的AI助手,有什么可以幫助你的嗎?');
}

2. 發(fā)送消息

async function sendMessage() {
    const message = document.getElementById('messageInput').value;

    // 顯示用戶消息
    addMessage('user', message);

    // 使用EventSource接收流式響應
    const eventSource = new EventSource(`/api/chat/stream?session_id=${currentSessionId}&message=${message}`);

    eventSource.onmessage = function(event) {
        const data = JSON.parse(event.data);
        if (data.content) {
            // 實時顯示AI回復
            updateAIMessage(data.content);
        }
    };
}

3. 添加消息到界面

function addMessage(role, content) {
    const messageDiv = document.createElement('div');
    messageDiv.className = `message ${role}`;

    // 用戶消息顯示在右邊,AI消息顯示在左邊
    const icon = role === 'user' ? '??' : '??';
    messageDiv.innerHTML = `${icon} ${content}`;

    document.getElementById('messagesContainer').appendChild(messageDiv);

    // 自動滾動到最新消息
    messageDiv.scrollIntoView({ behavior: 'smooth' });
}

4. 清除歷史記錄

async function clearHistory() {
    if (confirm('確定要清除所有對話歷史嗎?')) {
        await fetch(`/api/chat/history/${currentSessionId}`, { method: 'DELETE' });
        document.getElementById('messagesContainer').innerHTML = '';
        addMessage('system', '對話歷史已清除');
    }
}

技術亮點

  • EventSource:實現(xiàn)服務器推送,讓 AI 回復實時顯示
  • DOM 操作:動態(tài)添加和更新聊天消息
  • 用戶體驗:自動滾動、按鈕狀態(tài)管理、錯誤提示
  • 響應式設計:適配不同設備和屏幕尺寸

這些 JavaScript 代碼讓聊天界面變得生動有趣,用戶可以流暢地與 AI 進行對話!

如何開始項目

環(huán)境準備

在開始之前,請確保你的電腦已安裝:

  1. Python 3.8+ :編程語言環(huán)境
  2. Redis:數(shù)據(jù)存儲服務
  3. OpenAI API 密鑰:用于調用 AI 模型

項目結構

讓我們先了解一下項目的文件組織結構:

fastapi-ai-chat-demo/
├── main.py              # ?? 主應用文件(核心邏輯)
├── config.py            # ?? 配置文件(參數(shù)設置)
├── start_server.py      # ?? 服務器啟動腳本
├── requirements.txt     # ?? 依賴包列表
├── .env.example         # ?? 環(huán)境變量模板
├── static/
│   └── index.html      # ?? 前端聊天界面
└── README.md           # ?? 項目說明文檔

文件說明:

  • main.py:包含所有的 API 接口和核心業(yè)務邏輯
  • config.py:存放配置參數(shù),如 Redis 連接信息、OpenAI 設置等
  • static/index.html:聊天界面的前端代碼
  • requirements.txt:列出了項目需要的所有 Python 包

安裝步驟

1. 克隆項目

git clone git@github.com:wayn111/fastapi-ai-chat-demo.git
cd fastapi-ai-chat-demo

2. 安裝依賴包

pip install -r requirements.txt

這會安裝以下核心包:

  • fastapi:Web 框架
  • uvicorn:ASGI 服務器
  • redis:Redis 客戶端
  • openai:OpenAI API 客戶端
  • pydantic:數(shù)據(jù)驗證庫

3. 配置環(huán)境變量

復制 .env.example 為 .env 并填入你的配置:

# OpenAI配置
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1

# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379

4. 啟動 Redis 服務

# Windows
redis-server

# Linux/macOS
sudo systemctl start redis

5. 運行應用

python start_server.py

6. 訪問應用

打開瀏覽器訪問:http://localhost:8000

圖片圖片

恭喜!你的 AI 聊天應用已經(jīng)運行起來了!

總結

本項目展示了使用 FastAPI 構建 AI 聊天應用的完整流程,核心技術包括:

  • 異步編程:提升并發(fā)處理能力
  • 流式響應:改善用戶體驗
  • 會話管理:實現(xiàn)多輪對話記憶
  • 角色系統(tǒng):支持多樣化 AI 交互

這個架構具有良好的擴展性,可以輕松添加用戶認證、多模態(tài)交互等高級功能。FastAPI 的高性能和完善的類型系統(tǒng)使其成為構建現(xiàn)代 AI 應用的理想選擇。

最后覺得本文寫的不錯的話,可以關注我,我會繼續(xù)更新 FastAPI 框架開發(fā) AI 聊天應用代碼。

責任編輯:武曉燕 來源: 程序員wayn
相關推薦

2020-04-23 13:51:05

AI管理GUI

2023-04-28 09:02:24

智能客服人工智能Siri

2024-12-05 08:15:00

2023-04-21 15:54:46

AI開源

2024-11-07 15:40:00

2025-04-21 08:13:58

ChatGPTAINLP

2023-01-14 14:59:05

達摩院

2025-06-09 08:30:00

2025-03-07 10:36:21

DeepSeekAI對話應用AI

2021-06-22 09:37:51

數(shù)字化

2021-01-15 09:50:06

鴻蒙HarmonyOSAI應用

2021-07-01 15:56:42

深度學習人工智能互聯(lián)網(wǎng)

2024-01-08 13:33:00

數(shù)據(jù)訓練

2025-06-17 17:16:51

LLMChatGPTAI

2025-03-24 12:42:52

2024-11-25 15:30:00

語言模型數(shù)據(jù)

2025-05-30 09:15:00

2023-04-04 19:09:20

ChatGPT開源

2009-02-26 16:32:58

SaaS開發(fā)SaaS應用Open API
點贊
收藏

51CTO技術棧公眾號