429를 반환하면 지수 백오프와 지터를 사용해 재시도하고, 재시도가 반복해서 발생하면 버스트 트래픽을 줄이세요.
동시성 제한
다음 Python 예시는 async semaphore를 사용해 동시에 실행되는 채팅 요청 수를 제한합니다:속도 제한 재시도
다음 JavaScript 예시는 지터를 사용해429 응답을 재시도합니다:
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
요청 동시성을 제한하고, 지터와 함께 429 응답을 재시도하며, model 및 route별 사용량을 모니터링하여 CometAPI 속도 제한을 처리하세요.
429를 반환하면 지수 백오프와 지터를 사용해 재시도하고, 재시도가 반복해서 발생하면 버스트 트래픽을 줄이세요.
import asyncio
import os
from openai import AsyncOpenAI
client = AsyncOpenAI(
api_key=os.environ["COMETAPI_KEY"],
base_url="https://api.cometapi.com/v1",
)
semaphore = asyncio.Semaphore(5)
async def ask(prompt):
async with semaphore:
completion = await client.chat.completions.create(
model="your-model-id",
messages=[{"role": "user", "content": prompt}],
)
return completion.choices[0].message.content
async def main():
prompts = ["Say hello.", "Write a title.", "Return one JSON key."]
results = await asyncio.gather(*(ask(prompt) for prompt in prompts))
print(results)
asyncio.run(main())
[
"Hello.",
"A concise title",
"{\"key\":\"value\"}"
]
429 응답을 재시도합니다:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.COMETAPI_KEY,
baseURL: "https://api.cometapi.com/v1",
});
async function sleep(milliseconds) {
return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
async function createCompletion() {
for (let attempt = 0; attempt < 5; attempt += 1) {
try {
return await client.chat.completions.create({
model: "your-model-id",
messages: [{ role: "user", content: "Say hello." }],
});
} catch (error) {
if (error.status !== 429 || attempt === 4) {
throw error;
}
const delay = Math.min(30000, 1000 * 2 ** attempt);
await sleep(delay + Math.random() * 1000);
}
}
}
const completion = await createCompletion();
console.log(completion.choices[0].message.content);
{
"choices": [
{
"message": {
"content": "Hello."
}
}
]
}
| Error | Fix |
|---|---|
| 무제한 병렬 요청 | semaphore, 큐 또는 worker pool을 추가하세요. |
| 모든 실패 재시도 | 429 및 일시적인 서버 실패에 대해서만 재시도하세요. |
| model별 메트릭 부재 | 각 요청에 대해 route, model ID, status, latency를 기록하세요. |
| 재시도 폭주 | 지터를 추가하고 최대 재시도 지연 시간을 제한하세요. |