遷移 API:常見 LLM 整合錯誤疑難排解
遷移您的 LLM 整合通常會因細微的設定錯誤而非複雜的邏輯錯誤而失敗。本指南解決遷移至新無審查 AI API 時最常遇到的陷阱,確保您的程式碼從第一天起就能可靠運作。
最後更新
摘要
- 基礎 URL 設定錯誤是導致立即連線失敗的最常見原因。
- 忽略 100,000 Token 的上下文窗口會導致長對話靜默截斷。
- 串流需要特定的標頭和事件處理,這是標準同步呼叫所不需要的。
- 每分鐘 300 次請求的速率限制需要強大的重試邏輯以避免 429 錯誤。
誤配基礎 URL
第一個失敗點幾乎總是基礎 URL。當您切換供應商時,必須更新您的 SDK 所連線的端點。錯誤的 URL 會在您的有效載荷離開機器之前就導致 404 或 403 錯誤。
確保您的客戶端指向正確的網域。對於我們的服務,基礎 URL 為 https://api.apimigration.com/v1. 此 URL 透過簡單更改 base_url 參數。
- 驗證協議(HTTPS 與 HTTP)。
- 檢查客戶端配置中的尾隨斜線。
- 確認版本路徑(
/v1) 符合您的 API 規範。
curl https://api.apimigration.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Run the latest migration script for the user table"}]
}'
忽略上下文視窗限制
您的模型對於提示與補全的總和有 100,000 個 token 的硬性限制。若超過此限制,API 將拒絕請求或根據實作方式靜默截斷您的歷史記錄。請務必追蹤您的 token 使用量,以避免觸及此上限。
此外,每次請求的最大輸出為 16,000 個權重。如果您沒有設置 max_tokens, 預設值為 2,048 個 token。對於長篇生成任務,此差異顯著的。
- 監控每個請求的總 Token 數量。
- 設定
max_tokens明確指定以用於長輸出。 - 針對非常長的對話實施滑動視窗邏輯。
from openai import OpenAI
client = OpenAI(base_url="https://api.apimigration.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)
不正確的流式傳輸實現
串流回應需要特定處理伺服器發送事件(SSE)。如果您將串流視為單一 JSON 物件,您的程式碼將掛起或崩潰。每個區塊包含部分資料,而最後一個區塊包含權杖使用統計數據。
依序讀取串流。隨著每個事件到達進行處理。這可降低最終使用者的感知延遲。不要等待整個回應完成後再進行處理。
- 開啟連線並逐行讀取。
- 解析
data:行作為 JSON。 - 處理
[DONE]正確地發出訊號。
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
忽略速率限制
我們的 API 每金鑰每分鐘允許 300 次請求。如果您的應用程式出現尖峰流量,您將收到 429 Too Many Requests 錯誤。您必須實施指數退避機制以優雅地處理這些錯誤。
每個金鑰的並行請求也限制為同時 8 個。超過此限制可能會導致連線池耗盡。請密切監控您的並行連線。
- 為 429 錯誤實作指數退避。
- 將並發連接限制為 8。
- 在高負載情況下使用電路斷路器模式。
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.apimigration.com/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);
假設標準 JSON 格式
雖然我們遵循 OpenAI 相容格式,但某些假設可能會導致整合失敗。確保您請求 json_object in response_format 如果您需要嚴格的 JSON。否則,模型可能會返回 Markdown 或純文字。
仔細解析回應。在使用之前驗證 JSON 結構。這可防止下游服務發生執行階段錯誤。
- 設定
response_format以{"type": "json_object"}. - 解析前驗證 JSON。
- 優雅地處理格式錯誤的回應。
curl https://api.apimigration.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Run the latest migration script for the user table"}]
}'
忽略錯誤處理
API 會失敗。網路超時、伺服器錯誤和無效的載體都會發生。您的程式碼必須在不崩潰的情況下處理這些錯誤。記錄錯誤詳細資訊以進行除錯。
檢查錯誤碼和訊息。對暫時性錯誤進行重試。對永久性錯誤快速失敗。這種區別可以節省時間和資源。
- 記錄錯誤代碼和訊息。
- 在 5xx 錯誤時重試並退避。
- 4xx 錯誤時快速失敗。
from openai import OpenAI
client = OpenAI(base_url="https://api.apimigration.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)
付款與金鑰輪換問題
我們的 API 透過加密貨幣提供預付費信用額度。信用額度不會過期。如果您信用額度用盡,請求將失敗。請監控您的餘額,並在歸零前充值。
每個帳戶擁有一個有效金鑰。生成新金鑰將立即使舊金鑰失效。請確保您的部署以原子方式更新金鑰,以避免服務中斷。
- 定期監控信用餘額。
- 原子旋轉密鑰。
- 同時更新所有實例。
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.apimigration.com/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);
最佳實踐摘要
遷移成功取決於對細節的關注。請驗證您的基礎 URL。遵守上下文限制。正確處理串流。管理速率限制。驗證 JSON。處理錯誤。管理付款和金鑰。遵循這些步驟可確保順利過渡。
上線前請徹底測試您的整合。使用試用額度驗證您的設定。這可防止生產環境中昂貴的停機時間。
- 驗證基礎 URL。
- 遵守上下文限制。
- 正確處理串流。
- 管理速率限制。
- 驗證 JSON。
- 處理錯誤。
- 管理付款和金鑰。
curl https://api.apimigration.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Run the latest migration script for the user table"}]
}'常見問題
上下文視窗的大小是多少?
提示與補全的上下文視窗總計為 100,000 個 token。每次請求的最大輸出為 16,000 個 token。若未設定 max_tokens,預設值為 2,048 個 token。
我如何串流回應?
使用 Server-Sent Events (SSE)。讀取每一行並解析 JSON 數據。最終塊包含 token 使用量。不要等待整個響應。
速率限制為何?
每個金鑰每分鐘可發送 300 次請求。每個金鑰最多可有 8 個併發請求。超出這些限制將返回 429 錯誤。
我如何為 API 付費?
僅接受加密貨幣付款。您可以使用 USDT (TRC20) 或 USDC (Base)。充值金額範圍為 $20 至 $500。贈金永不過期。
取得您的 API 金鑰
註冊、複製金鑰、更新基礎 URL。設定已完成。