OpenAI API 如何處理數據,以及為什麼在上傳多個文件時可能會遇到處理速度變慢的情況
API 處理流程
OpenAI API 分幾個階段處理文件:
- 文件上傳和處理
- 文件上傳後會被處理成標記(tokens)
- 每個文件必須小於 512MB 或 200 萬個標記,以先達到的限制為準
- 系統將文本分成稱為標記的小塊進行處理,其中 1 個標記大約等於 4 個字符或 0.75 個英文單詞
- 向量化過程
- 文本被轉換為嵌入式向量表示
- 這些嵌入保留了內容的含義,並允許進行語義搜索
- 相似的內容在向量空間中的嵌入距離會更接近
性能瓶頸
文件處理延遲
- 大文件需要更多時間進行標記化和嵌入生成
- 多個同時上傳可能會耗盡系統資源
- API 的速率限制可能會影響處理速度
向量數據庫操作
- 將向量插入數據庫需要時間
- 大量數據需要更多索引時間
- 隨著數據庫增長,搜索操作變得更慢
優化建議
文件管理
- 實施批量處理多個文件
- 考慮將大文檔分割成較小的段落
- 將文件大小保持在建議限制內以獲得最佳性能
系統架構
- 實施異步處理
- 使用服務器端流式傳輸響應
- 考慮實施緩存層
速率限制
- 通過響應標頭監控 API 速率限制
- 實施具有指數退避的重試機制
- 盡可能使用批處理
性能基準
雖然確切的處理時間取決於多個因素,但以下是一般指導原則:
操作類型 | 平均處理時間 |
---|---|
單個 PDF(1MB) | 2-5 秒 |
多個 PDF(總計 10MB) | 15-30 秒 |
大型數據集(50MB+) | 1-3 分鐘 |
向量搜索 | 100-500 毫秒 |
這些時間可能受以下因素影響:
- 文件大小和複雜度
- 當前 API 負載
- 網絡條件
- 向量數據庫性能
- 並發請求數量
使用 Azure OpenAI API 建立的 ChatGPT App 處理速度較慢的原因:
主要原因
內容過濾機制
- Azure OpenAI API 會執行額外的內容過濾步驟(包括不當用語和不安全內容的檢查),這個步驟在 OpenAI 官方 API 中並不存在[1]
- 即使聯繫 Azure 支援人員,也無法完全禁用這個內容過濾步驟[1]
效能差異
- 根據實際測試,Azure OpenAI API 的響應速度可能比 OpenAI 官方 API 慢 2.5 倍[1]
- GPT-4 模型在 Azure 上的處理速度特別明顯,響應時間較長[1]
影響因素
伺服器負載
- 處理速度受到 GPU 集群負載的影響
- 令牌(tokens)處理量越大,等待時間就越長[1]
- 美國地區的伺服器通常負載最重,因此響應較慢[1]
地理位置影響
- 不同地理區域的響應速度有所不同
- 建議選擇夜間時段的地區來提高速度,例如美國/歐洲用戶可以考慮使用亞洲或澳洲的區域[1]
優化建議
技術層面
- 使用最新的模型版本(如 1106/0125),這些版本通常比舊版本更快[1]
- 實施輸出快取機制,對於常見問題可以直接返回快取的答案[1]
- 避免使用 LangChain 的輸出解析,改用 OpenAI 的函數調用/工具[1]
使用策略
- 控制最大令牌限制,以獲得較短的響應時間[1]
- 對於一般的問答場景,建議使用輸出快取[1]
- 在不使用 PTU(Priority Throughput Units)的情況下,80% 的請求應該在 10 秒內完成[1]
- 使用 PTU 可以將完成率提高到約 90%[1]
雖然 Azure OpenAI API 的處理速度較慢,但它在企業級應用中仍有其優勢,特別是在安全性和合規性方面。根據具體使用場景,這個速度差異可能是可以接受的[1]。
Citations:
[1] https://www.reddit.com/r/AZURE/comments/1c1n48j/the_response_of_the_azure_openai_api_is_much/
[2] openai vs @azure/openai vs chatgpt: Which is Better AI Interaction Libraries?
[3] Slow responce from GPT 3.5 Turbo API - API - OpenAI Developer Forum
[4] Chat GPT's API is significantly slower than the website with GPT Plus - API - OpenAI Developer Forum