홈/API 참조
Uncensored API 참조, 필드별 설명
이 페이지는 Uncensored API에 보내거나 받는 모든 필드를 문서화합니다: 채팅 완료 요청 본문, 응답 객체, finish_reason 값, 사용량 블록, 스트리밍 청크 및 모델 목록입니다. 각 섹션은 터미널에 붙여넣고 실행할 수 있는 주석이 달린 예제와 함께 짧은 명세를 제공합니다.
업데이트
핵심 사항
- 두 가지 엔드포인트가 있습니다: POST /v1/chat/completions 및 GET /v1/models. 둘 다 Bearer 키로 인증합니다.
- 응답은 익숙한 채팅 완료 형태를 따릅니다: id, choices[].message, finish_reason 및 usage.
- 스트리밍은 서버 전송 이벤트를 사용하며, 마지막 청크에는 사용량이 자동으로 포함되어 데이터: [DONE]로 스트림이 종료됩니다.
- 요청에 영향을 미치는 제한 사항: 100,000토큰 컨텍스트 창, 기본 max_tokens 2048 및 최대 32,000, 8 MB 본문.
규약 및 전송
베이스 URL은 https://api.uncensoredapis.com/v1입니다. 모든 본문은 JSON과 UTF-8입니다. 모든 요청에는 Authorization: Bearer <key>이 포함되며, 키가 누락되었거나 잘못되면 401이 반환됩니다. 두 개의 라우트만 존재하며, 다른 모든 경로는 404를 반환합니다.
| 메서드 | 경로 | 목적 |
|---|---|---|
| POST | /v1/chat/completions | 어시스턴트 메시지 생성 (스트리밍 가능) |
| GET | /v1/models | 요청 가능한 모델 ID 나열 |
API는 텍스트 전용입니다. 임베딩, 이미지, 오디오 또는 비디오 경로와 파인튜닝이 없으며, 정확히 하나의 모델만 있습니다. 주소는 uncensored입니다. 와이어 형식이 채팅 완료 규약과 호환되므로 base_url을 재정의할 때 공식 Python 및 Node SDK가 작동합니다. 문서에는 첫 실행 설정이 포함되어 있습니다. 이 페이지는 필드 수준의 companion입니다.
요청 본문 필드
표는 엔드포인트가 이해하는 필드를 나열합니다. 샘플링 필드는 생성에 변경 없이 전달되므로 선택한 값은 모든 채팅 완료 스타일 API에서 작동하는 방식과 동일하게 동작합니다.
| 필드 | 유형 | 참고 |
|---|---|---|
model | 문자열 | 항상 "uncensored"입니다. |
messages | 배열 | role(system, user, assistant, tool)과 content이 있는 순서가 있는 객체들입니다. |
max_tokens | 정수 | 완료 한도. 기본값 2048, 최대 32,000. |
temperature | 숫자 | 무작위성. 낮을수록 결정론적입니다. |
top_p | 숫자 | 핵심 샘플링 컷오프. |
stop | 문자열 또는 배열 | 생성을 종료하는 시퀀스. |
stream | 불리언 | true로 설정하면 서버 전송 이벤트로 응답이 전환됩니다. |
tools | 배열 | 표준 JSON 스키마 형식의 함수 정의입니다. |
전체 주석이 달린 요청 예시입니다. 시스템 메시지는 동작을 설정하고, 사용자 메시지는 작업을 전달하며, stop은 첫 번째 빈 줄에서 생성을 종료합니다.
curl https://api.uncensoredapis.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a terse release-notes writer."},
{"role": "user", "content": "Summarize: fixed login bug, added dark mode."}
],
"max_tokens": 120,
"temperature": 0.4,
"stop": ["\n\n"]
}'두 가지 예산 규칙이 중요합니다. 첫째, 프롬프트와 완성 텍스트의 합계가 100,000 토큰을 초과할 수 없으므로, 프롬프트 토큰 수에 max_tokens을 더한 값이 이를 초과하는 요청은 400 에러로 거부됩니다. 둘째, 직렬화된 본문 크기는 8 MB를 초과할 수 없습니다. 긴 대화 기록을 전송할 경우, 한계치에 도달하기 전에 클라이언트 측에서 이전 턴을 제거하십시오.
응답 객체
스트리밍이 아닌 호출은 하나의 JSON 객체를 반환합니다. 다음 순서로 위에서 아래로 읽으십시오.
{
"id": "chatcmpl-example123",
"object": "chat.completion",
"created": 1767225600,
"model": "uncensored",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "v1.4: Login bug fixed. Dark mode added."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 38,
"completion_tokens": 14,
"total_tokens": 52
}
}- id: 완성의 고유 식별자입니다. 이벤트 간 상관관계를 확인해야 할 경우, 고유 요청 ID와 함께 기록하십시오.
- object: 상수 값
chat.completion입니다. - created: 초 단위의 유닉스 타임스탬프입니다.
- model:
uncensored값을 복사합니다. - choices: 배열입니다. 하나의 항목만 반환되므로
choices[0]이 정답입니다.index은 해당 항목의 위치입니다. - choices[].message:
role은assistant입니다.content에는 텍스트가 포함되며, 모델이 함수 호출을 반환한 경우null입니다. - choices[].finish_reason: 생성이 종료된 이유입니다. 다음 섹션을 참조하십시오.
- usage: 청구를 위한 토큰 계산입니다. 아래에서 설명합니다.
finish_reason 값
내용을 신뢰하기 전에 finish_reason에 따라 분기하십시오. 잘린 답변과 완전한 답변은 확인하기 전까지 동일하게 보입니다.
| 값 | 의미 | 코드에서 수행해야 할 작업 |
|---|---|---|
stop | 모델이 자연스러운 종료 지점에 도달하거나 stop 시퀀스 중 하나에 도달했습니다. | 내용을 그대로 사용하십시오. |
length | max_tokens 한도(또는 컨텍스트 창)가 답변 생성 중 도달했습니다. | max_tokens 값을 늘리거나, 프롬프트를 줄이거나, 모델에 계속 생성을 요청하십시오. |
tool_calls | 모델이 하나 이상의 함수 실행을 요청합니다. | 이들을 실행하고 결과를 tool 메시지 형태로 반환합니다. |
값이 tool_calls일 때 메시지는 다음과 같은 형태를 띠며, 인수는 직접 구문 분석해야 하는 JSON string로 전달됩니다:
{
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc1",
"type": "function",
"function": {"name": "get_order", "arguments": "{\"order_id\": 8841}"}
}]
},
"finish_reason": "tool_calls"
}]
}json.loads 또는 JSON.parse을 오류 처리 시 arguments에 대해 항상 감싸십시오. 생성된 JSON은 때때로 형식이 잘못될 수 있습니다.
사용량 블록 및 비용
usage은 prompt_tokens, completion_tokens 및 total_tokens을 제공합니다. 이는 잔액이 차감되는 기준 숫자입니다: 입력은 토큰 100만 개당 $0.25, 출력은 토큰 100만 개당 $1.00입니다. 선불 잔액은 구독 없이 요청마다 차감됩니다.
주어진 가정 하의 작업 예시: 요청이 2,000개의 프롬프트 토큰과 500개의 completion 토큰을 사용한다고 가정합니다. 입력 비용은 2,000 / 1,000,000 x $0.25 = $0.0005입니다. 출력 비용은 500 / 1,000,000 x $1.00 = $0.0005입니다. 요청 총액은 $0.0010입니다. 이 토큰 수는 실제 워크로드 측정이 아닌 산수를 위한 가정입니다. 가격 책정 페이지에 모든 요금이 한 곳에 정리되어 있습니다.
출력 토큰 비용이 입력 토큰 비용의 4배이므로, 엄격한 max_tokens 설정이 비용 통제에 가장 직접적인 방법입니다.
스트리밍 청크 형식
"stream": true를 설정하면 응답은 text/event-stream이 됩니다. 각 이벤트는 data: 로 시작하는 줄이며, 그 뒤에 JSON이 오고 빈 줄로 구분됩니다. 객체 유형은 chat.completion.chunk로 변경되며, message은 delta로 대체됩니다.
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"v1.4: "},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Login bug fixed."},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":38,"completion_tokens":14,"total_tokens":52}}
data: [DONE]- 첫 번째 청크는 일반적으로
delta.role을assistant로 설정하고 내용은 비워 둡니다. - 내용 청크는
delta.content에 단편을 포함합니다. 도착 순서대로 연결하십시오. - 마지막 내용 청크는 빈
delta와 null이 아닌finish_reason을 가집니다. - 빈
choices배열을 가진 최종 청크에는usage이 포함됩니다. 이는 요청하지 않아도 자동으로 추가됩니다. - 리터럴
data: [DONE]이 스트림을 종료합니다.
빈 choices 배열에 대비하십시오: 사용량 청크에서 choices[0]에 접근하면 단순한 루프에서 오류가 발생합니다. 아래 SDK 예제에서는 이를 처리합니다.
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.uncensoredapis.com/v1", api_key=os.environ["API_KEY"])
reason, usage = None, None
for chunk in client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Name three uses of a rubber duck in debugging."}],
stream=True,
):
if chunk.choices:
piece = chunk.choices[0].delta.content
if piece:
print(piece, end="", flush=True)
if chunk.choices[0].finish_reason:
reason = chunk.choices[0].finish_reason
if getattr(chunk, "usage", None):
usage = chunk.usage
print("\nfinish:", reason, "| tokens:", usage.total_tokens if usage else "n/a")스트리밍 함수 호출의 경우, delta.tool_calls는 단편으로 도착합니다. 각 호출 인덱스에 대해 arguments 문자열을 누적하고, finish_reason이 tool_calls이 될 때 한 번에 구문 분석하십시오.
모델 엔드포인트
GET /v1/models은 Bearer 헤더만 필요하며 목록 객체를 반환합니다. 모델이 하나뿐이므로 data에는 uncensored라는 하나의 항목이 포함됩니다. 이 라우트에서 모델 드롭다운을 채우는 클라이언트는 따라서 단 하나의 옵션만 표시합니다.
curl https://api.uncensoredapis.com/v1/models -H "Authorization: Bearer $API_KEY"
{
"object": "list",
"data": [
{"id": "uncensored", "object": "model"}
]
}이것은 키를 검증하는 가장 저렴한 방법이기도 합니다: 200은 키가 유효함을 의미하고, 401은 키가 잘못되었거나 재생성되었음을 의미합니다. 이 라우트를 호출해도 토큰이 생성되지 않습니다. 상태 처리 및 재시도 규칙에 대해서는 오류 및 속도 제한 안내서를 참조하십시오.
클라이언트 작성자를 위한 참조 체크리스트
클라이언트 라이브러리를 작성하거나 게이트웨이에서 엔드포인트를 래핑하는 경우, 출시 전에 위의 명세에 따라 다음 동작들을 모두 확인하십시오.
- 헤더 위생. 키는 Authorization 헤더에만 전송하고, 쿼리 문자열에는 전송하지 않으며, 헤더 값은 로그에 기록하지 마십시오.
- 방어적 구문 분석. 응답의 알려지지 않은 추가 필드는 무시할 수 있는 것으로 처리하십시오. JSON 키 순서가 아닌, 여기에 문서화된 필드에 파서를 고정하십시오.
- 모든 응답에서 finish_reason을 확인하십시오. 사용자에게 잘린 텍스트가 전체 답변으로 읽히는 것을 방지하기 위해 finish_reason이
length일 때 이를 사용자에게 노출하는 표시를 제공하십시오. - 전송 전 예산 확인. 프롬프트 토큰을 추정하고
max_tokens을 더한 후 합계가 100,000을 초과하는지 비교하십시오. 로컬에서 거부하는 것이 400 응답을 기다리는 것보다 빠릅니다. - 스트림 꼬리 처리. 빈
choices목록과usage객체를 가진 청크, 그리고[DONE]을 예상하십시오. 신호가 도착한 후 연결을 종료하십시오. - 사용량 기록. 요청당
total_tokens을 저장하여 나중에 선불 잔액과 자체 미터링을 조정하십시오. - 상한을 준수하십시오. 계정은 키당 분당 300개의 요청을 허용하므로, 여러 사용자에게 분산하는 게이트웨이는 자체 큐가 필요합니다.
이러한 모든 단계는 벤더 SDK에 의존하지 않습니다. Bearer 헤더를 설정하고 JSON을 디코딩하는 일반 HTTP 클라이언트면 충분하며, 이 페이지의 SDK 예제는 필수 사항이 아니라 편의 기능입니다. 이 체크리스트를 가이드의 오류 테이블과 함께 사용하면 빌드, 전송, 스트리밍, 파싱, 계정 처리 및 복구를 포함한 전체 요청 수명 주기를 다룰 수 있습니다.
질문과 답변
요청당 여러 선택을 받을 수 있나요?
choices에 단일 항목이 있음을 예상하고 choices[0]을 읽으십시오. 대안을 원한다면 별도의 요청을 수행하십시오.
message.content가 null인 이유는 무엇입니까?
모델이 텍스트 대신 tool_calls를 반환했습니다. finish_reason을 확인하고 함수를 실행한 후 결과를 다시 전송하십시오.
프롬프트와 max_tokens의 합이 100,000을 초과하면 어떻게 되나요?
요청이 400 bad request 오류로 거부됩니다. 프롬프트를 줄이거나 max_tokens 값을 낮추십시오.
스트리밍이 가격에 영향을 미치나요?
아니요. 청구는 동일한 프롬프트 및 완성 토큰 수를 사용하며, 최종 사용량 청크에서 이를 보고합니다.