ChatGPT API 문서: 빠른 참조 및 첫 호출
대부분의 채팅 API는 ChatGPT API가 대중화한 요청 형식을 공유합니다. 이 페이지는 이 사이트의 호환 엔드포인트를 위한 짧은 참조로, 복사-붙여넣기 예제를 포함합니다.
마지막 업데이트

요약
- 베이스 URL https://api.gptsemfiltro.com/v1, 베어러 토큰 인증, 모델 ID uncensored.
- 세 가지 방법: 채팅 완성, 응답 및 모델 목록; 잔액에는 전용 엔드포인트가 있습니다.
- 스트리밍, 도구 호출 및 JSON 모드를 지원하며 컨텍스트는 100,000 토큰입니다.
- 429 오류에는 rate_limited 또는 concurrency 코드가 포함됩니다.
이 페이지에서 다루는 내용
chatgpt api documentation을 검색하셨다면, OpenAI의 자체 모델에 대한 OpenAI의 공식 문서를 원하실 수 있습니다. 이 페이지는 그와 다른 것입니다: 이 사이트에서 호스팅되는 OpenAI 호환 API를 위한 실제 레퍼런스입니다. 이 서비스는 합법적인 성인용 목적으로 콘텐츠 거부 없이 답변하도록 조정된 오픈 웨이트 모델 uncensored를 실행합니다. 이 API는 OpenAI나 다른 벤더의 공식 API가 아닙니다.
요청 및 응답 구조는 익숙한 OpenAI 형식을 따르므로 베이스 URL과 키를 변경하면 공식 SDK 및 대부분의 도구가 작동합니다. 전체 참조는 API 문서에 있습니다. 이 페이지는 실행 가능한 예제와 함께 빠른 버전을 제공합니다.
연결 기본 사항 및 첫 호출
연결 기본 사항
| 항목 | 내용 |
|---|---|
| 기본 URL | https://api.gptsemfiltro.com/v1 |
| 인증 | Authorization: Bearer YOUR_KEY |
| 모델 ID | uncensored |
| 채팅 엔드포인트 | POST /v1/chat/completions |
| 응답 엔드포인트 | POST /v1/responses |
| 모델 목록 | GET /v1/models |
| 잔액 | GET /v1/balance 또는 GET /v1/dashboard/billing/credit_grants |
| 최대 요청 본문 | 8 MB |
| 컨텍스트 창 | 100,000 토큰, 프롬프트 및 완성 포함 |
API 키 페이지에서 키를 받으세요. 신규 사용자는 클릭 한 번으로 $0.50 체험 크레딧을 청구할 수 있으며, 이는 7일 동안 유효하고 결제가 필요하지 않습니다. 키는 언제든지 재생성할 수 있으며, 충전한 계정은 최대 5개의 키를 보유, 레이블 지정 및 취소할 수 있습니다.
첫 번째 호출
curl https://api.gptsemfiltro.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"}
],
"temperature": 0.7
}'
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"},
],
)
print(resp.choices[0].message.content)
print(resp.usage)
응답에는 choices[0].message.content와 프롬프트 및 완성 토큰 수를 포함하는 usage 객체가 포함됩니다.
요청 매개변수
가장 많이 사용할 매개변수:
model: 항상uncensored입니다.messages:role(system,user,assistant또는tool) 및content을 가진 객체 목록입니다.max_tokens: 선택 사항. 생략하면 완성이 100,000토큰 창을 모두 사용할 수 있습니다.temperature,top_p,stop,seed,frequency_penalty,presence_penalty: 모델에 전달됩니다.stream: 서버 전송 이벤트를 위해true로 설정하며, 사용량 통계가 끝에 도착합니다.tools및tool_choice: 모델이 호출할 수 있는 함수를 설명합니다.response_format:{"type": "json_object"}은 JSON 모드를 활성화합니다.
사용 불가: 이미지, 오디오 또는 비디오 생성, 임베딩 및 파인튜닝. 이 서비스는 텍스트만 처리합니다.
역할은 OpenAI 형식과 동일하게 작동합니다. system 메시지는 전체 채팅의 동작을 설정하고, user 메시지는 사용자 입력을 담으며, assistant 메시지는 이전 응답을 포함하고, tool 메시지는 함수 결과를 반환합니다. API는 호출 간에 메모리를 유지하지 않으므로 모든 요청에는 모델이 볼 역사 기록을 포함해야 합니다. 프롬프트와 완성은 100,000토큰 창을 공유하므로 긴 역사는 답변에 더 적은 공간을 남깁니다.
스트리밍, 함수 호출 및 JSON 모드
스트리밍
stream을 true로 설정하고 이벤트가 도착하는 대로 읽으세요. 각 청크에는 작은 텍스트 델타가 포함되며, 사용량 통계가 끝에 도착합니다.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.gptsemfiltro.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "List five uses of a context window." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
스트리밍 요청은 스트림이 끝날 때까지 동시 요청 슬롯을 유지하므로 더 이상 필요하지 않은 스트림을 닫으세요.
도구 호출 및 JSON 모드
tools로 함수를 선언하세요. 모델이 이를 요청할 때, 응답에는 텍스트 대신 tool_calls이 포함됩니다. 함수를 실행하고 결과를 role: "tool" 메시지로 다시 보냅니다.
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What is the weather in Lisbon?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"city": "Lisbon", "temp_c": 21}),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
프로덕션에서는 모델이 일반 텍스트로 응답할 수 있으므로 읽기 전에 tool_calls이 존재하는지 확인하세요. 도구를 사용하지 않고 구조화된 출력을 위해 "response_format": {"type": "json_object"}을 추가하고 프롬프트에서 JSON을 원한다고 명시하세요.
제한, 오류 및 헤더
| 제한 | 전체 키 | 체험 키 |
|---|---|---|
| 동시 요청 | 8 | 2 |
| 분당 요청 수 | 300 | 60 |
| 본문 크기 | 8 MB | 8 MB |
한도를 초과하면 API는 HTTP 429를 반환합니다. 오류 코드 rate_limited은 분당 요청 수가 많음을 의미하며, concurrency은 동시 요청 수가 많음을 의미합니다. 일시적 과부하 상태에서도 429가 발생하며, Retry-After: 5 헤더가 포함됩니다. 실패하거나 거부된 요청에는 요금이 부과되지 않습니다.
유용한 응답 헤더: X-Request-Id (지원에 문의할 때 인용), X-Balance-USD, X-RateLimit-Limit-Requests 및 X-RateLimit-Limit-Concurrency.
Node의 작은 재시도 도우미는 Retry-After의 시간을 기다리고 각 시도마다 조금 더 백오프합니다:
async function chat(messages, tries = 4) {
for (let n = 0; n < tries; n++) {
const res = await fetch("https://api.gptsemfiltro.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ model: "uncensored", messages: messages }),
});
if (res.status === 429) {
const wait = Number(res.headers.get("Retry-After") || 5);
await new Promise(function (r) { setTimeout(r, wait * 1000 * (n + 1)); });
continue;
}
return res.json();
}
throw new Error("still rate limited");
}기존 코드 이동 및 잔액 확인
기존 코드를 이 엔드포인트로 이동
코드가 이미 OpenAI 스타일 채팅 엔드포인트를 호출한다면 마이그레이션은 작습니다. 다음 세 값을 변경하고 나머지는 그대로 두세요:
- 베이스 URL은
https://api.gptsemfiltro.com/v1이 됩니다. - 키는 API 키 페이지에서 얻은 것으로 바뀝니다.
- 모델은
uncensored이 됩니다.
그런 다음 코드가 의존하는 것을 확인하세요. 텍스트 기반이고 채팅 형태인 모든 것은 이어집니다: 시스템 프롬프트, 대화 기록, 스트리밍, 도구 호출 및 JSON 모드. 나머지는 여기 존재하지 않습니다. 이미지 생성, 오디오 또는 비디오, 임베딩 및 파인튜닝이 없으므로 이러한 라우트를 호출하는 코드는 다른 공급자를 사용해야 합니다.
Responses 엔드포인트도 제공되므로 해당 형식을 선호하는 클라이언트를 위해:
curl https://api.gptsemfiltro.com/v1/responses \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "uncensored", "input": "Summarise what a context window is in one sentence."}'
출시 전에 테스트하세요. 서로 다른 모델은 동일한 프롬프트에서 다르게 동작하기 때문입니다. 거부, 어조 및 길이는 모두 변경될 수 있으므로 관심 있는 프롬프트를 다시 실행하세요.
코드에서 잔액 확인하기
잔액은 세 가지 방법으로 확인할 수 있습니다. 모든 응답에는 X-Balance-USD 헤더가 포함됩니다. 또한 GET /v1/balance를 호출하거나 일부 대시보드에서 이미 읽는 방법을 알고 있는 OpenAI 스타일의 GET /v1/dashboard/billing/credit_grants를 사용할 수 있습니다.
curl https://api.gptsemfiltro.com/v1/balance \
-H "Authorization: Bearer YOUR_KEY"
유용한 패턴은 각 호출 후 헤더를 읽고 저장한 후 선택한 임계값 아래로 떨어지면 알림을 보내는 것입니다. 크레딧은 선불이며 만료되지 않으므로 잔액이 낮으면 마감일이 아니라 충전할 시기입니다.
가격 요약
입력은 토큰 1M당 $0.15, 출력은 토큰 1M당 $0.50이며 선불 크레딧에서 차감됩니다. 예시: 입력 토큰 3,000개와 출력 토큰 600개의 비용은 3,000 x $0.15 / 1M + 600 x $0.50 / 1M = $0.00045 + $0.0003 = $0.00075입니다. 충전 금액은 $20부터 $500까지 정수 단위로 이루어지며, $50부터 +5%, $100부터 +10%, $200부터 +15%의 보너스가 제공됩니다. USDT(TRC20) 또는 USDC(Base)로 결제합니다. 가격 페이지에서 더 많은 세부 정보를 확인하세요. 프롬프트는 학습에 사용되지 않습니다.
첫 통합을 위한 문제 해결 체크리스트
대부분의 첫 호출 실패는 짧은 원인 목록에서 비롯됩니다. 서비스 문제를 의심하기 전에 순서대로 확인하세요.
- 상태 401. 키가 누락되었거나 오타가 있습니다. 클라이언트가 실제로 보내는 헤더를 출력하고
Authorization: Bearer YOUR_KEY와 비교하세요. 키가 공개된 곳에 붙여넣은 경우 API 키 페이지에서 재생성하세요. 이전 키는 즉시 작동하지 않게 됩니다. - 상태 404. 경로가 잘못되었습니다. 베이스 URL은
/v1로 끝나며 SDK는/chat/completions을 자동으로 추가합니다. 일반 HTTP로 API를 호출하는 경우 전체 경로를 작성하세요. - 모델 관련 오류. 유일한 모델 ID는
uncensored입니다. 다른 제공업체의 문서에서 복사한 이름은 일치하지 않습니다.GET /v1/models는 키가 사용할 수 있는 모델을 나열합니다. - 매우 큰 요청 실패. 본문 한도는 8 MB입니다. 긴 대화 기록은 그 크기에 도달하기 훨씬 전에 잘라내거나 요약하는 것이 좋습니다. 또한 100,000개의 토큰 창은 프롬프트와 응답 모두에 공유됩니다.
- 간헐적 429 오류. 오류 코드를 확인하세요.
concurrency는 너무 많은 동시 요청을 의미하므로 워커 수를 줄이세요.rate_limited은 분당 요청이 너무 많음을 의미합니다.Retry-After: 5헤더는 일시적인 과부하를 의미하며, 짧은 대기 시간으로 해결됩니다. - 응답 잘림.
max_tokens을 설정하면 응답이 해당 지점에서 중단되고finish_reason은length로 표시됩니다. 한도를 높이거나 제거하세요.
설명할 수 없는 모든 호출에서 X-Request-Id 값을 유지하세요. 이는 지원에 문의할 때 정확한 요청을 가리키는 가장 빠른 방법입니다.
더 많은 가이드
자주 묻는 질문
이것이 공식 ChatGPT API인가요?
아니요. 이는 독립적으로 호스팅된 오픈 웨이트 모델로 OpenAI 호환 인터페이스를 제공합니다. OpenAI에서 운영하지 않습니다.
지원되는 엔드포인트는 무엇인가요?
POST /v1/chat/completions, POST /v1/responses, GET /v1/models 및 /v1/balance, /v1/dashboard/billing/credit_grants의 잔액 엔드포인트.
다른 SDK가 필요한가요?
아니요. Python 및 Node용 공식 OpenAI SDK는 베이스 URL, 키 및 모델 이름을 변경한 후 작동합니다.
남은 크레딧을 어떻게 확인하나요?
모든 응답에서 X-Balance-USD 헤더를 읽거나 GET /v1/balance를 호출하세요.
API 키 받기
등록하고 키를 복사한 후 베이스 URL을 업데이트하세요. 설정이 완료됩니다.