OpenAIã¯ã©ã€ã¢ã³ãç§»è¡ã¯ã2ã€ã®èšå®å€æŽã ãã§å®äºããããã«èŠããããšããããŸããAPIããŒã眮ãæããSDKã®åãå ãæ°ããããŒã¹URLã«å€ããã ãã§ããæåã®ãªã¯ãšã¹ãã¯æåããã¬ã¹ãã³ã¹ã®åœ¢ãèŠæ £ãããã®ã§ããã«ãªã¯ãšã¹ãã¯ãã®ãŸãŸããŒãžã§ãããã«èŠããŸãã
ããã¯ã€ã³ã¿ãŒãã§ãŒã¹äºææ§ãããããšã蚌æããã ãã§ããæ¬çªåäœãç¶æãããããšã蚌æãããã®ã§ã¯ãããŸããã
OpenAIã¯ã©ã€ã¢ã³ãç§»è¡ã§ããé£ããã®ã¯ããã©ãã£ãã¯ãåã£ããšãã«äœãèµ·ããããç¶æããããšã§ãããªã¯ãšã¹ããããŒã¹ãã§å°çãããããã³ããã倧ãããªããã¹ããªãŒã ãæ³å®ããé·ãç¶ãããããã€ãã429ãè¿ãããŸãã¯åŠçããã§ã«å§ãŸã£ãŠããå¯èœæ§ãããã®ã«ã¬ã¹ãã³ã¹ãã¿ã€ã ã¢ãŠãããââããããç¶æ³ã§ããSDKãã¢ããªã±ãŒã·ã§ã³ããžã§ããã¥ãŒãããããç¬ç«ã«å詊è¡ãããšã1åã®å€±æãã»ãŒåæã®è€æ°åã®è©Šè¡ã«å€ããåŸãŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãæ¢åã®OpenAI颚ã®PythonãŸãã¯TypeScriptçµ±åããã¬ãŒãå¶éãšå詊è¡åäœãæç€ºããªããçµ±åã²ãŒããŠã§ã€ãžç§»è¡ããæ¹æ³ã瀺ããŸããäŸã§ã¯Flatkeyã®OpenAIäºæããŒã¹URLã䜿çšããŸãããã¬ãã¥ãŒææ³ã¯ã©ã®ã²ãŒããŠã§ã€ç§»è¡ã«ãé©çšã§ããŸãã
ã¯ã€ãã¯ã¢ã³ãµãŒ: äœã倿Žãã¹ãã?
å®å šãªOpenAIã¯ã©ã€ã¢ã³ãç§»è¡ã®ããã«ã¯ãããŒã¹URLã倿Žã®ãã¹ãŠãšã¿ãªãã®ã§ã¯ãªãããããã®èšå®ããŸãšããŠç¢ºèªããŠãã ããã
| ç§»è¡å¯Ÿè±¡ | 確èªãã¹ãå 容 | å®å šãªéå§æã®å€æ |
|---|---|---|
| APIãšã³ããã€ã³ã | ããŒã¹URLãšèªèšŒ | ã³ãŒãäžã«æ£åšãããªãã©ã«ã§ã¯ãªããç°å¢å€æ°çµç±ã§å€æŽãã |
| ã¢ãã«éžæ | æ£ç¢ºãªã¢ãã«èå¥åãšãµããŒãããããã©ã¡ãŒã¿ | ã«ããªã¢çšã«æ¢ç¥ã®ã¢ãã«ã1ã€åºå®ãã |
| SDKã®åè©Šè¡ | èªåå詊è¡åæ°ãšå詊è¡å¯Ÿè±¡ã®ã¹ããŒã¿ã¹ã³ãŒã | å詊è¡ãSDKã«æãããããã¢ããªã±ãŒã·ã§ã³ã«æãããããæ±ºãã |
| ã¢ããªã±ãŒã·ã§ã³ã®åè©Šè¡ | ããã¯ãªãããžãã¿ãŒã詊è¡åæ°äžéãå詊è¡äºç® | å詊è¡ã®è²¬ä»»è ã1ã€ã«ãããã¹ãŠã®è©Šè¡ããã°ã«èšé²ãã |
| RPMå¶åŸ¡ | ãªã¯ãšã¹ãå°ççãšããŒã¹ããµã€ãº | åãæ¿ãåã«åæå®è¡æ°ãŸãã¯ãã¥ãŒã®äžéã远å ãã |
| TPMå¶åŸ¡ | ããã³ãããšäºæ³åºåããŒã¯ã³æ° | 1è¡ã®ã¹ã¢ãŒã¯ãã¹ãã ãã§ãªããçŸå®çãªå€§ããªããã³ããããã¹ããã |
| ã¿ã€ã ã¢ãŠã | æ¥ç¶ãèªã¿åããåèšãªã¯ãšã¹ãæé | åæåŒã³åºããšã¹ããªãŒãã³ã°åŒã³åºãã«æç€ºçãªå€ãèšå®ãã |
| å¯èŠ³æž¬æ§ | ãªã¯ãšã¹ãIDã詊è¡åæ°ãããŒã¯ã³ãã¬ã€ãã³ã·ãæçµçµæ | ã¯ã©ã€ã¢ã³ãã®ãã°ãšã²ãŒããŠã§ã€ã®äœ¿çšãã°ãæ¯èŒãã |
ãŸãç¥èªã¬ãã«ã®èª¬æãå¿ èŠãªããLLM rate limits explained: RPM, TPM, and retriesãèªãã§ãã ããããã®ã¬ã€ãã¯ããã®è§£èª¬ã®ç¶ããã€ãŸãç§»è¡å·®åãšæ¬çªãã¹ãèšç»ã®æ®µéããå§ããŸãã
ããŒã¹URLã®å·®ãæ¿ãã¯å¿ èŠã ããããã ãã§ã¯äžååãªçç±
Flatkeyã®ã¯ã€ãã¯ã¹ã¿ãŒãã§ã¯ãæå°éã®ã¯ã©ã€ã¢ã³ã倿ŽãèšèŒãããŠããŸããOpenAI SDKã®ãªã¯ãšã¹ããã¿ãŒã³ã¯ç¶æããããŒã¹URLãhttps://router.flatkey.ai/v1ã«èšå®ããŸãããŸãããªã¯ãšã¹ãåŸã«Usage Logsã確èªããã¢ãã«ãããŒã¯ã³æ°ãã¬ã€ãã³ã·ãã³ã¹ããæ€èšŒããããšãæšå¥šããŠããŸãã
ããã¯æ£ããã¹ã¢ãŒã¯ãã¹ãã§ããæ¬çªã®OpenAIã¯ã©ã€ã¢ã³ãç§»è¡ã§ã¯ãããã«4ã€ã®è³ªåãå¿ èŠã§ã:
- SDK ã¯
429ãã¿ã€ã ã¢ãŠãããŸãã¯ãµãŒããŒãšã©ãŒãèªåçã«å詊è¡ããŸãã? - å¥ã®å±€ãåã倱æããæäœãå詊è¡ããŸãã?
- åæå®è¡æ°ã¯ãªã¯ãšã¹ãã¬ãŒããããŒã¯ã³ã¬ãŒãããŸãã¯ãã®äž¡æ¹ã§å¶éãããŠããŸãã?
- 1 ã€ã®è«çæäœãšããã®åã ã®è©Šè¡ãåºå¥ã§ããŸãã?
å
¬åŒã® OpenAI Python ããã³ Node SDK ã®ããã¥ã¡ã³ãã§ã¯ãçŸåšã429 å¿çãæ¥ç¶ãšã©ãŒãã¿ã€ã ã¢ãŠããããã€ãã®ãµãŒããŒãšã©ãŒãå«ãç¹å®ã®å€±æã¯ãããã©ã«ãã§ 2 åå詊è¡ããããšèšèŒãããŠããŸããã©ã¡ãã® SDK ãå詊è¡ãšã¿ã€ã ã¢ãŠãã®èšå®ãå
¬éããŠããŸãããã®ããã©ã«ãã¯çŽæ¥çµ±åããå Žåã«ã¯äŸ¿å©ã§ãããèªåã®ã³ãŒãã§ãã§ã«ããã¯ãªããå®è£
ããŠãããšãèŠããªãå¢å¹
ã«ãªãããšããããŸãã
ç§»è¡ã®ç®çã¯ããã¹ãŠã®å詊è¡ãç¡å¹åãããããšã§ã¯ãããŸãããç®çã¯ãã©ã®å±€ãå詊è¡ãæ åœããã®ããææ¡ãããããšã§ãã
Step 1: ã³ãŒãã倿Žããåã«ããã¹ãŠã®å詊è¡ã¬ã€ã€ãŒãæ£åžããã
ãŸããå®éã®åŒã³åºãçµè·¯ãæãåºããŸãã
user action or job
-> application retry wrapper
-> queue delivery retry
-> OpenAI SDK retry
-> gateway
-> provider
åã¬ã€ã€ãŒããšã«ã次ãèšé²ããŸãã
- ã©ã®ãšã©ãŒã§å詊è¡ãçºçãããã
- æå€§è©Šè¡åæ°ã
- é å»¶ãåºå®ã¹ãªãŒããææ°ããã¯ãªãããŸãã¯ãžãã¿ãŒã®ã©ãã䜿ããã
- ãµãŒããŒãæäŸãã
Retry-Afterå€ãå°éãããã - åãæäœ ID ã詊è¡éã§ä¿æããããã
- ã¿ã€ã ã¢ãŠããããªã¯ãšã¹ãããå®éã®åŠçãå§ãŸãåã«å€±æãããšèŠãªããã
æåŸã®åæã¯å±éºã§ããã¯ã©ã€ã¢ã³ãã®ã¿ã€ã ã¢ãŠãã¯ãã¯ã©ã€ã¢ã³ããåŸ æ©ããããããšã瀺ãã ãã§ããäžæµã·ã¹ãã ã¯ããŸã ãªã¯ãšã¹ããåãä»ããŠããããå®äºããŠãããããå¯èœæ§ããããŸããçæã³ã³ãã³ãã§ã¯ããã®ããå詊è¡ã«ãã£ãŠå¥ã®çµæãšå¥ã®èª²é察象ãªã¯ãšã¹ããçºçããã¢ããªã±ãŒã·ã§ã³äžã§ã¯ 1 ã€ã®è«çã¿ã¹ã¯ããèŠããŠããªããŠããããªãããŸãã
ææªæã®å¢å¹ ãèŠç©ãã
ãã¥ãŒã 1 ã€ã®ãžã§ãã 3 åé ä¿¡ã§ããã¢ããªã±ãŒã·ã§ã³ã®ã©ãããŒã 3 åã®è©Šè¡ãèš±å¯ããSDK ãåååŒã³åºãã«å ã㊠2 åã®å詊è¡ãè¡ããšããŸããææªã®å Žåã1 ã€ã®è«çãžã§ãã¯æ¬¡ãåŒãèµ·ãããŸãã
3 queue deliveries à 3 application attempts à 3 SDK attempts = 27 HTTP attempts
å®éã«ãã®æå€§å€ã«éããªãããšã¯ãã£ãŠãããã®æãç®ã¯ãçã 429 ãå詊è¡ã®åµã«å€ããçç±ã説æããŸãããã®æ°ãç§»è¡ã¬ãã¥ãŒã«æžã蟌ã¿ãŸããããé ããããã©ã«ããèŠããããã«ãªããŸãã
Step 2: ãšã³ããã€ã³ãèšå®ãæ§æã«ç§»ã
ç§»è¡å·®åã¯å ã«æ»ããããã«ããŠãããŸããã³ãŒãããŒã¹å šäœã§ãšã³ããã€ã³ãæååã眮ãæããªãã§ãã ããã
Python ã®ååŸ
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["LLM_API_KEY"],
base_url=os.environ.get("LLM_BASE_URL", "https://api.openai.com/v1"),
max_retries=0,
timeout=45.0,
)
Flatkey ã®ã«ããªã¢ã§ã¯ã次ã®ããã«èšå®ããŸãã
export LLM_API_KEY="$FLATKEY_API_KEY"
export LLM_BASE_URL="https://router.flatkey.ai/v1"
TypeScript ã®ååŸ
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.LLM_API_KEY,
baseURL: process.env.LLM_BASE_URL ?? "https://api.openai.com/v1",
maxRetries: 0,
timeout: 45_000,
});
ãããã®äŸã§ã¯ SDK ã®å詊è¡åæ°ã 0 ã«èšå®ããŠããŸããããã¯ã次ã®ã»ã¯ã·ã§ã³ã§ã¢ããªã±ãŒã·ã§ã³ã«æç€ºçãªå詊è¡ã®è²¬ä»»ãæãããããã§ããã¢ããªã±ãŒã·ã§ã³åŽã«å詊è¡ã¬ã€ã€ãŒããªãå Žåã¯ã代ããã« SDK ã®å詊è¡ãäžéä»ãã§ç¶æã§ããŸãã誀ã£ãŠäž¡æ¹ãæå¹ã«ããªãã§ãã ããã
ããåºãäºææ§ãã§ãã¯ãªã¹ãã«ã€ããŠã¯ãOpenAI Compatible API Gateway: Migration Checklist for Minimal Code Changes ãåç §ããŠãã ããã
Step 3: 1 ã€ã®ã¬ã€ã€ãŒã«æç€ºçã«å詊è¡ã®è²¬ä»»ãæããã
æçšãªå詊è¡ããªã·ãŒã¯æ¬¡ã® 5 ã€ã®èŠçŽ ã§æ§æãããŸãã
- å詊è¡å¯èœãªé害ã®çãäžèЧã
- 峿 Œãªè©Šè¡äžéã
- æå€§ç·åè©Šè¡æéã
- ãžãã¿ãŒä»ãææ°ããã¯ãªãã
- ãã¹ãŠã®è©Šè¡ã«å¯Ÿããæ§é åãã°ã
以äžã¯ãåæãã£ããåŒã³åºãçšã®å°ã㪠Python ã©ãããŒã§ãã
import random
import time
from openai import APITimeoutError, APIConnectionError, APIStatusError, RateLimitError
RETRYABLE_STATUS_CODES = {408, 409, 429, 500, 502, 503, 504}
def create_chat_with_retry(client, *, model, messages, max_attempts=4):
started_at = time.monotonic()
for attempt in range(1, max_attempts + 1):
try:
return client.chat.completions.create(
model=model,
messages=messages,
)
except (RateLimitError, APITimeoutError, APIConnectionError) as error:
retryable = True
caught_error = error
except APIStatusError as error:
retryable = error.status_code in RETRYABLE_STATUS_CODES
caught_error = error
if not retryable or attempt == max_attempts:
raise caught_error
exponential_delay = min(2 ** (attempt - 1), 16)
jitter = random.uniform(0, 0.5 * exponential_delay)
sleep_seconds = exponential_delay + jitter
print({
"event": "llm_retry",
"attempt": attempt,
"next_delay_seconds": round(sleep_seconds, 2),
"elapsed_seconds": round(time.monotonic() - started_at, 2),
"error_type": type(caught_error).__name__,
})
time.sleep(sleep_seconds)
raise RuntimeError("unreachable")
ããã¯ãã¬ãã¥ãŒå¯èœãªåºçºç¹ãšããŠæ±ã£ãŠãã ãããæ®éçãªããªã·ãŒã§ã¯ãããŸãããæ¬çªç°å¢ã§ã¯ãããŒã«ã«ã§èšç®ããé
å»¶ã«ãã©ãŒã«ããã¯ããåã«ãæå¹ãª Retry-After ã¬ã¹ãã³ã¹ããããŒãè§£æããŠå°éããŠãã ãããå詊è¡ã補åã§èš±å®¹ã§ããã¬ã€ãã³ã·ãè¶
ããªãããã«ãç·çµéæéã®äºç®ã远å ããŠãã ããã
ãã¹ãŠã®ãšã©ãŒãå詊è¡ããªã
| Failure | Default action | Why |
|---|---|---|
400 invalid request |
倿Žããã«å詊è¡ããªã | ãã€ããŒãã倿Žããå¿ èŠããããã |
401 authentication |
倿Žããã«å詊è¡ããªã | ããŒãŸãã¯ããããŒã倿Žããå¿ èŠããããã |
404 model not found |
倿Žããã«å詊è¡ããªã | ã¢ãã«èå¥åãŸãã¯ã¢ã¯ã»ã¹æš©ã倿Žããå¿ èŠããããã |
429 rate limit |
é å»¶ãšãžãã¿ãŒãä»ããŠå詊è¡ãã | 空ã容éãå©çšå¯èœã«ãªãå¯èœæ§ããããã |
500 or 503 |
å°ããªäºç®å ã§å詊è¡ãã | é害ãäžæçã§ããå¯èœæ§ããããã |
| Client timeout | æ éã«å詊è¡ãã | äžæµã®ãªã¯ãšã¹ãã¯ãã§ã«å®è¡ãããŠããå¯èœæ§ããããã |
Flatkey ã®ã¯ã€ãã¯ã¹ã¿ãŒãã§ã¯ã429 ã«å¯ŸããŠåãé«ã¬ãã«ã®ã¬ã€ãã³ã¹ã瀺ãããŠããŸããã€ãŸããææ°ããã¯ãªããšãžãã¿ãŒã䜿ã£ãŠå詊è¡ãããšããããšã§ããç§»è¡ã«ç¹æã®è¿œå ç¹ã¯ããã®ããªã·ãŒãå®è¡ããã¬ã€ã€ãŒã 1 ã€ã ãã«ããããšã§ãã
ã¹ããã 4: RPM ãš TPM ã®äž¡æ¹ã®åæå®è¡ã®ãµã€ãºãèšå®ãã
OpenAI client migration ã§ã¯ããªã¯ãšã¹ãæ§æãç¶æããªãã容éã®äžéãå€ããå ŽåããããŸããRPM ãš TPM ã¯ç°ãªãã¯ãŒã¯ããŒããå¶çŽããŸãã
- å°éã®ãªã¯ãšã¹ãã倿°éãå Žåã¯ãRPM ãããã«ããã¯ã«ãªããŸãã
- ããã³ãããåºåã䞊åè©äŸ¡ã倧ããå Žåã¯ãTPM ãããã«ããã¯ã«ãªããŸãã
åäžã®å¹³åå€ã§ã¯ãªãã芳枬ããããã©ãã£ãã¯ã䜿ããŸããå°ãªããšã次ãåéããŠãã ããã
- äžå€®å€ãšããŒã¯æã® 1 åããããªã¯ãšã¹ãæ°ã
- p50ãp95ãæå€§å€ã®å ¥åããŒã¯ã³æ°ã
- p50 ãš p95 ã®åºåããŒã¯ã³æ°ã
- ãªã¯ãšã¹ãæèŠæéã®äžå€®å€ãš p95ã
- åæã¹ããªãŒã æ°ã
æŠç®ã®åæå®è¡äžéã¯ãåå¶éããæ¬¡ã®ããã«èŠç©ãããŸãã
RPM ããŒã¹ã®åæå®è¡æ° â (RPM / 60) à 平åãªã¯ãšã¹ãç§æ°
TPM ããŒã¹ã®åæå®è¡æ° â (TPM / ãªã¯ãšã¹ããããã®å¹³åããŒã¯ã³æ° / 60)
à 平åãªã¯ãšã¹ãç§æ°
åæäžéãšããŠã¯äœãæ¹ã®çµæã䜿ãããã®åŸãããŒã¹ããå詊è¡ã®ããã®äœè£ãæ®ããŠãã ããã
äŸ: ããã«ãŒãã 600 RPM ãš 300,000 TPM ã蚱容ããå¹³åãªã¯ãšã¹ããåèš 1,500 ããŒã¯ã³ã䜿çšããå¹³åæèŠæéã 3 ç§ã ãšããŸãã
RPM äžé: (600 / 60) à 3 = 30 åæãªã¯ãšã¹ã
TPM äžé: (300,000 / 1,500 / 60) à 3 = 10 åæãªã¯ãšã¹ã
ãã®äŸã§ã¯ãããå³ããå¶çŽã¯ TPM ã§ããRPM ãååã«å€§ããèŠãããããšãã£ãŠ 30 åæãªã¯ãšã¹ãããå§ãããšãåé¿å¯èœãª 429 å¿çãçºçããŸãã
ãã®èšç®ã¯æ¹åæ§ã瀺ããã®ã§ããããããã€ããŒã®ä¿èšŒã§ã¯ãããŸããããããã€ããŒã¯ãããŒãªã³ã°ãŠã£ã³ããŠãããŒã¯ã³ãã±ãããå ¥åããŒã¯ã³ãšåºåããŒã¯ã³ã®åå¥å¶éãã¢ãã«åºæã®ããŒã«ããŸãã¯ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³å¶åŸ¡ã䜿çšããå ŽåããããŸãããã¹ãèšç»ã§ã¯ãéžæããã¢ãã«ãšã¢ã«ãŠã³ãã«å¯Ÿããå®éã®åäœãæ€èšŒããå¿ èŠããããŸãã
ã¹ããã 5: ã¹ããªãŒãã³ã°ãšã¿ã€ã ã¢ãŠãã®åäœãåå¥ã«ãã¹ããã
ã¹ããªãŒãã³ã°ã§ã¯ãªãåŒã³åºããæåãããããšãã£ãŠãã¹ããªãŒãã³ã°ãå®å šã ãšå€æããªãã§ãã ããã
ã¹ããªãŒãã³ã°èŠæ±ã§ã¯ã次ããã¹ãããŠãã ããã
- æåã®ããŒã¯ã³ãŸã§ã®æéã
- ãã£ã³ã¯éã®æå€§ç¡éä¿¡ééã
- ã¯ã©ã€ã¢ã³ãã®èªã¿åãã¿ã€ã ã¢ãŠãã
- ã³ã³ã·ã¥ãŒããŒãåæããããšãã®åäœã
- å詊è¡ã©ãããŒã誀ã£ãŠ 2 æ¬ç®ã®ã¹ããªãŒã ãéå§ããªããã
- éšåçãªåºåãä¿æãããããç Žæ£ããããããŠãŒã¶ãŒã«è¡šç€ºããããã
éšåçãªåºåã®åŸã«å€±æããã¹ããªãŒã ã¯ãäœãåºåãããåã«å€±æãããªã¯ãšã¹ããšã¯åçã§ã¯ãããŸãããèªåã§å詊è¡ãããšãéè€ããããã¹ãã衚瀺ãããããç°ãªãç¶ããçæãããããå¯èœæ§ããããŸãã補åãšããŠå詊è¡ããã®ãããŠãŒã¶ãŒã«ç¢ºèªããã®ãããããšãéšåçµæã衚瀺ããã®ããæ±ºããŠãã ããã
ãŸããSDK ã®ã¿ã€ã ã¢ãŠããšã€ã³ãã©ã®ã¿ã€ã ã¢ãŠãã¯ç°ãªãå Žåãããããšãå¿ããªãã§ãã ããããªããŒã¹ãããã·ããµãŒããŒã¬ã¹ãã©ãããã©ãŒã ããžã§ãã¯ãŒã«ãŒããŸãã¯ãã©ãŠã¶ãŒæ¥ç¶ã¯ãã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªãèªèº«ã®ã¿ã€ã ã¢ãŠãã«éããåã«çµäºããããšããããŸããOpenAI client migration ã®éã¯ãå®å šãªãªã¯ãšã¹ãçµè·¯ã«ãããæå°ã®ã¿ã€ã ã¢ãŠããèšé²ããŠãã ããã
ã¹ããã 6: åºç¯å²ã®ãã©ãã£ãã¯ã®åã«ã«ããªã¢ ãããªãã¯ã¹ãå®è¡ãã
1 ã€ã®åºå®ã¢ãã«ãšå°éã®ãã©ãã£ãã¯ã䜿çšããŠãã ãããæåã®ã«ããªã¢ã§çããã¹ããªã®ã¯ãæ°ããã«ãŒããåäœãç¶æãããã©ããã§ããããã¹ãŠã®ã¢ãã«ãåäœãããã©ããã§ã¯ãããŸããã
| ãã¹ãã±ãŒã¹ | å ¥å | æåŸ ããã蚌跡 |
|---|---|---|
| èªèšŒ | æå¹ãªããŒãšç¡å¹ãªã㌠| æåã«å ããå詊è¡ãããªã 401 |
| ã¢ãã«æ€èšŒ | æå¹ãªã¢ãã«IDãšã¹ãã«ãã¹ã®ããã¢ãã«ID | æåã«å ããå詊è¡ãããªãã¢ãã«ãšã©ãŒ |
| å°èŠæš¡ãªã¯ãšã¹ãããŒã¹ã | 倿°ã®çãããã³ãã | å詊è¡ã¹ãã€ã¯ã®ãªãå¶åŸ¡ããããã¥ãŒã€ã³ã° |
| å€§èŠæš¡ããã³ããããŒã¹ã | ããå°æ°ã®é«ããŒã¯ã³ããã³ãã | TPM ãžã®å§åãå¯èŠåããããã€äžéããã |
åŒ·å¶ 429 |
ã«ããªã¢ã®äžéãäžæçã«è¶ ãã | 1ã€ã®åè©Šè¡ææè ããžãã¿ãŒä»ãé å»¶ãäžéä»ã詊è¡åæ° |
| 匷å¶ã¿ã€ã ã¢ãŠã | æå³çã«çãã¯ã©ã€ã¢ã³ãã¿ã€ã ã¢ãŠããèšå®ãã | ç¡å¶éã®åå®è¡ã䌎ããªãã¿ã€ã ã¢ãŠãã®èšé² |
| ã¹ããªãŒãã³ã°äžæ | ã¹ããªãŒã äžã«åæãã | æç€ºçãªéšååºåã®æå |
| ãµãŒããŒãšã©ãŒ | 503 ãæ³šå
¥ãŸãã¯ã·ãã¥ã¬ãŒããã |
äžéä»ãå詊è¡ãšæçµãšã©ãŒå ±å |
| ããŒã«ãã㯠| 以åã®ããŒã¹URLã埩å ãã | èšå®ã®ã¿ã®ããŒã«ããã¯ãæåãã |
åè«çæäœã«ã€ããŠã次ããã°ã«èšé²ããŸãã
operation_id
attempt_number
base_url_name
model_requested
http_status
input_tokens
output_tokens
latency_ms
retry_delay_ms
final_outcome
次ã«ãã¢ããªã±ãŒã·ã§ã³ãã°ãš Flatkey Usage Logs ãæ¯èŒããŸããä»¶æ°ã¯æŽåããŠããã¯ãã§ãã1ã€ã®ã¢ããªã±ãŒã·ã§ã³æäœãè€æ°ã®ã²ãŒããŠã§ã€ãªã¯ãšã¹ãã«å¯Ÿå¿ããå Žåã¯ãå詊è¡ã®èšæž¬ããã®çç±ã説æã§ããå¿ èŠããããŸãã
ã¹ããã 7: ããŒã«ã¢ãŠããšããŒã«ããã¯ã®ãããå€ãå®çŸ©ãã
OpenAI client migration ã«ã¯ãæåã®ã«ããªã¢éå§åã«æ°å€ããŒã¹ã®åæ¢æ¡ä»¶ãèšå®ããŠããå¿ èŠããããŸãã
ãããå€ã®äŸ:
- æçµãšã©ãŒçãåææžã¿ã®å²åãã€ã³ããè¶ ããŠäžæããå Žåã¯ããŒã«ããã¯ããã
- 1æäœãããã®è©Šè¡åæ°ãæ³å®å詊è¡äºç®ãè¶ ããå Žåã¯äžæåæ¢ããã
- p95 ã¬ã€ãã³ã·ã補åã®ã¿ã€ã ã¢ãŠãäºç®ãè¶ ããå Žåã¯äžæåæ¢ããã
- æåããæäœãããã®ããŒã¯ã³äœ¿çšéãäºæããå€åããå Žåã¯äžæåæ¢ããã
- ã¹ããªãŒãã³ã°çµè·¯ãšéã¹ããªãŒãã³ã°çµè·¯ã®äž¡æ¹ãåæ ŒããŠãããã©ãã£ãã¯ãæ¡å€§ããã
çã® 429 ä»¶æ°ã ããæ¯èŒããã®ã¯é¿ããŠãã ãããé©åãªãã¥ãŒã«ãããé
å»¶ãªã¯ãšã¹ããäžæçã«å¢ããŠãæçµãšã©ãŒã¯æžãå¯èœæ§ããããŸãã詊è¡ã¬ãã«ãšæäœã¬ãã«ã®äž¡æ¹ã®çµæã远跡ããŠãã ããã
ç§»è¡PRãã§ãã¯ãªã¹ã
ãã®ãã§ãã¯ãªã¹ããå®è£ PRã«ã³ããŒããŠãã ããã
- ããŒã¹URLãšããŒã¯ç°å¢å€æ°ããååŸããã
- ã«ããªã¢ã¯æ£ç¢ºã«æ€èšŒæžã¿ã®ã¢ãã«èå¥åã䜿çšããã
- å詊è¡ãæ åœããå±€ã¯1ã€ã ãã«ããã
- SDK ã®å詊è¡ããã©ã«ãã¯PRå ã§ææžåããã
-
429ãã¿ã€ã ã¢ãŠãã5xxã®æåã«ã¯äžéä»ã詊è¡åæ°ãèšå®ããã - ããã¯ãªãã«ã¯ãžãã¿ãŒãå«ããååšããå Žåã¯
Retry-Afterãå°éããã - RPM ãš TPM ã®äžéã¯èŠ³æž¬æžã¿ãã©ãã£ãã¯ããèŠç©ããã
- ã¹ããªãŒãã³ã°ã«ã¯å¥ã®é害ãã¹ããçšæããã
- å詊è¡ã¯1ã€ã®è«ç
operation_idãå ±æããã - Usage logs ãšã¢ããªã±ãŒã·ã§ã³ãã°ãæ¯èŒããã
- ããŒã«ã¢ãŠããšããŒã«ããã¯ã®ãããå€ãéå§åã«èšèŒããã
- 远å ã®ã³ãŒã倿Žãªãã§ä»¥åã®ãšã³ããã€ã³ãã埩å ã§ããã
äžè¬çãªç§»è¡ãã¹
SDK ã®å詊è¡ãšã¢ããªã±ãŒã·ã§ã³ã®å詊è¡ãåèšå€ãèšç®ããã«äœµçšãã
ããã¯æãéèŠãªã¬ãã¥ãŒææã§ããããã©ã«ãã¯ãããŒã«ã«é¢æ°å ã§èŠããªããŠããäŸç¶ãšããŠæ¯ãèããã®ãã®ã§ãã
å°ããªããã³ããã ãããã¹ããã
1è¡ã®ãªã¯ãšã¹ãã§ã¯ãèªèšŒæ å ±ãšã¬ã¹ãã³ã¹ã®äºææ§ã¯ç¢ºèªã§ããŸããããããTPM ã®å§è¿«ãåºåäžéãé·ãã¹ããªãŒã ãp95 ã¬ã€ãã³ã·ã«ã€ããŠã¯ã»ãšãã©äœãåãããŸããã
èªèšŒãšã©ãŒãšæ€èšŒãšã©ãŒãå詊è¡ãã
ããã¯ãªãã§ã¯ãç¡å¹ãªããŒãæªå¯Ÿå¿ã®ãã©ã¡ãŒã¿ãã¹ãã«ãã¹ã®ããã¢ãã«ã¯ä¿®åŸ©ã§ããŸããã倿ŽãããŠããªããã€ããŒããå詊è¡ãããšã容éãç¡é§ã«ããå®éã®æ¬ é¥ãé ããŠããŸããŸãã
ã¿ã€ã ã¢ãŠããããªã¯ãšã¹ããå®è¡ãããªãã£ã蚌æ ã ãšã¿ãªã
äžæµåŽãåŒã³åºããåãä»ããåŸã§ããã¯ã©ã€ã¢ã³ãã¯åŸ æ©ããããããšããããŸãããã®ææ§ããåæã«ãå詊è¡ãšéèšãèšèšããŠãã ããã
ãšã³ããã€ã³ããã¢ãã«ãããã³ãããå詊è¡ããªã·ãŒã1åã®ãªãªãŒã¹ã§å€æŽãã
ãããããšã倱æã®åå ãåãåãã«ãããªããŸãããŸãã¯æ¢ç¥ã®1ã€ã®ãªã¯ãšã¹ã圢ç¶ãç§»è¡ãããã®åŸãã«ãŒãã®æåãå¯èŠåã§ããŠããã¢ãã«éžæãåºããŠãã ããã
âOpenAIäºæâã®ããå®å šãªå®çŸ©
ç§»è¡èšç»ã«ãããŠãâOpenAIäºæâãšã¯ãã³ãŒã倿ŽãæžãããçšåºŠã«ã€ã³ã¿ã©ã¯ã·ã§ã³ã®ãã¿ãŒã³ãååã«éŠŽæã¿æ·±ãããšãæå³ãã¹ãã§ãããã¹ãŠã®ãããã€ããŒãåäžã®ã¯ã©ãŒã¿ãããŒã¯ã³ã«ãŠã³ãããšã©ãŒæå³è«ãã¬ã€ãã³ã·ãã¹ããªãŒãã³ã°åäœããŸãã¯ãã©ã¡ãŒã¿å¯Ÿå¿ãå ±æããŠãããšããçŽæãšããŠè§£éãã¹ãã§ã¯ãããŸããã
ãã®åºå¥ããããšãOpenAIã¯ã©ã€ã¢ã³ãç§»è¡ã®ã¬ãã¥ãŒã¯ãããããªããŸãã圹ç«ã€å Žæã§ã¯å®å®ããã€ã³ã¿ãŒãã§ãŒã¹ãç¶æãã€ã€ããããã€ããŒãã«ãŒãã«ãã£ãŠå·®ãåºãéçšäžã®å¥çŽã¯ãã¹ãããŠãã ããã
Flatkey ã¯ã1ã€ã® OpenAI äºæããŒã¹URLã®èåŸã§ã¢ã¯ã»ã¹ãšèª²éã à€à¥à€à€ŠéçŽããã¯ã©ã€ã¢ã³ãã®å·®åãåŸç¶ã®ã¢ãã«æ¡åŒµãç°¡åã«ã§ããŸããããã§ãå¿ èŠãªãšã³ãžãã¢ãªã³ã°äœæ¥ã¯ãæ¬çªãã©ãã£ãã¯ãç§»ãåã«ãå詊è¡ãã¹ã«ãŒããããå¯èŠ³æž¬æ§ãæç€ºããããšã§ãã
ããããæ¬çªã®OpenAIã¯ã©ã€ã¢ã³ãç§»è¡ãæºããã¹ãåºæºã§ããã€ãŸããæç€ºçãªéçšèšŒæ ã«è£ä»ããããå°ããªã€ã³ã¿ãŒãã§ãŒã¹å€æŽã§ãã
ã«ããªã¢çšã®ã¢ãã«ãéžã¶éã¯Flatkey ã®æéããŒãžã確èªããã³ãŒãã¬ãã¥ãŒã§ãã§ãã¯ãªã¹ããééããã«ãŒãã®æåããã°ã§ç¢ºèªã§ããŠããç§»è¡ãæ¿èªããŠãã ããã
ãããã質å
ç§»è¡äžã« OpenAI SDK ã®å詊è¡ãç¡å¹åãã¹ãã§ããïŒ
ã¢ããªã±ãŒã·ã§ã³ããã¥ãŒããã§ã«å詊è¡ãæ ã£ãŠãããªãç¡å¹åããŠãã ãããã»ãã®ã¬ã€ã€ãŒãå詊è¡ããªããªããäžéä»ãã® SDK å詊è¡ã¯åŠ¥åœãªå ŽåããããŸããéèŠãªã®ã¯ãç¬ç«ããå詊è¡ã®è²¬ä»»è ãè€æ°æããªãããšã§ãã
ç§»è¡æã® RPM ãš TPM ã®éãã¯äœã§ããïŒ
RPM ã¯ãªã¯ãšã¹ãé »åºŠãå¶éããTPM ã¯ããŒã¯ã³ã¹ã«ãŒããããå¶éããŸããå°ããé«é »åºŠã®åŒã³åºãã¯ãŸã RPM ã«éããããšããããå°æ°ã®å€§ããªããã³ãããåºåã¯ãŸã TPM ã«éããããšããããŸããäž¡æ¹ã®ã¯ãŒã¯ããŒã圢ç¶ããã¹ãããŠãã ããã
429 ã¯åžžã«å詊è¡ãã¹ãã§ããïŒ
å詊è¡ãšã¬ã€ãã³ã·ã®äºç®å
ã«åãŸãå Žåã«éããŸããå©çšå¯èœãªã Retry-After ãå°éããããã§ãªããã°ãžãã¿ãŒä»ãææ°ããã¯ãªãã䜿ã£ãŠãã ãããæäœããã¯ã補åã®ã¬ã€ãã³ã·ç®æšãæºãããªããªã忢ããŠãã ããã
ã¿ã€ã ã¢ãŠãããçæã¯å®å šã«å詊è¡ã§ããŸããïŒ
確å®ã«ã¯ã§ããŸãããã¯ã©ã€ã¢ã³ããã¿ã€ã ã¢ãŠãããŠããäžæµã®ãªã¯ãšã¹ãã¯å®è¡ãããŠããå¯èœæ§ããããŸããå詊è¡ã¯éè€ãªã¯ãšã¹ãã®å¯èœæ§ãšããŠæ±ããå詊è¡ã®é¢ä¿ããã°ã«èšé²ããŠãã ããã
æå°éã§å®å šãªã«ããªã¢ãšã¯äœã§ããïŒ
1ã€ã®åºå®ã¢ãã«ã1ã€ã®ãªã¯ãšã¹ã圢ç¶ãæç€ºçãªå詊è¡ã®è²¬ä»»åæ
ãåæå®è¡æ°ã®äžéããã㊠429ãã¿ã€ã ã¢ãŠããã¹ããªãŒãã³ã°äžæãããŒã«ããã¯ã®ãã¹ãã䜿çšããŸãããã©ãã£ãã¯ãæ¡å€§ããåã«ãã¯ã©ã€ã¢ã³ãåŽã®è©Šè¡åæ°ãã²ãŒããŠã§ã€ã®äœ¿çšãã°ãšæ¯èŒããŠãã ããã



