JSON 응답이 유효성 검사를 실패하는 이유
모델이 코드 블록 외부에 대화식 텍스트를 추가하면 JSON 파싱이 실패합니다. Uncensored 모델은 자연어 흐름을 우선시하므로 원본 데이터 앞뒤로 "Here is the JSON"과 같은 텍스트를 추가하는 경우가 많습니다. 이는 객체만 기대하는 엄격한 파서를 깨뜨립니다.
을 사용하세요 response_format 파라미터가 {"type": "json_object"}. 이는 모델이 유효한 JSON만 출력하도록 강제합니다. 코드에서 정규식 정리 스크립트의 필요성을 없앱니다. 단, 모델이 제약되므로 요청당 토큰 소비량이 더 많다는 점에 유의하세요.
- 設定
response_format수신하여json_object요청 페이로드에 포함됩니다. - 시스템 프롬프트가 JSON 출력을 명시적으로 요청하는지 확인하세요.
- 모델이 실수할 때 따옴표나 작은 구문 오류를 유연하게 처리하세요.
from openai import OpenAI
client = OpenAI(base_url="https://api.abliteratedllmonline.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)
コンテキストウィンドウ制限の正しい処理
컨텍스트 윈도우는 입력과 출력을 합쳐 총 100,000 토큰을 지원합니다. 긴 대화 기록을 보내면 최대 출력 길이를 줄여야 합니다. 명시하지 않을 경우 최대 출력 기본값은 2,048 토큰입니다.
입력 크기를 100,000에서 빼서 남은 토큰 수를 계산하세요. 역할극(Roleplay)을 수행한다면 시스템 프롬프트를 간결하게 유지하세요. API 요청에는 최근 대화 턴만 저장하세요. 오래된 컨텍스트는 요약하거나 절단하세요. 이는 생성 중 하드 리밋에 도달하는 것을 방지합니다.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.abliteratedllmonline.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);
Uncensored 모델에서의 함수 호출 오류
함수 호출은 모델이 도구 정의를 무시하거나 유효하지 않은 인수를 반환할 때 실패합니다. Uncensored 모델은 엄격한 도구 사용보다 창의적인 응답을 우선시할 수 있습니다. 스키마에 존재하지 않는 매개변수를 환각할 수 있습니다.
도구를 명확하게 정의하세요. tools 배열입니다. 다음을 사용하세요. tool_choice 특정 동작을 강제합니다. 모델이 도구를 호출하지 않는 경우 시스템 프롬프트에서 충돌하는 지시사항이 있는지 확인하세요. 도구 이름과 설명이 모호하지 않도록 하세요. 통합을 확인하기 위해 먼저 간단한 쿼리로 테스트하세요.
- 명확한 도구 이름과 설명을 제공하세요.
- 사용
tool_choice호출을 제어합니다. - 실행 전에 스키마에 따라 인수를 검증합니다.
curl https://api.abliteratedllmonline.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List the python dependencies for this flask app"}]
}'
스트리밍 중단 및 SSE 처리
Server-Sent Events(SSE)를 통한 스트리밍은 클라이언트가 연결을 끊거나 네트워크 오류가 발생하면 토큰이 손실될 수 있습니다. 마지막 청크에는 토큰 사용량 통계가 포함됩니다. 입력 및 출력 수를 얻으려면 이 청크를 파싱해야 합니다.
재연결 로직을 처리하는 견고한 SSE 클라이언트를 구현하세요. 모든 청크에 데이터가 포함된다고 가정하지 마세요. 일부 청크는 비어 있거나 공백만 포함할 수 있습니다. 최종 청크를 처리하여 크레딧 잔액이나 토큰 카운터를 업데이트하세요. 이는 정확한 청구 및 사용량 추적을 보장합니다.
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)
NSFW 출력에 영향을 미치는 Temperature 설정
Temperature는 모델 출력의 무작위성을 제어합니다. 0.8 또는 0.9과 같은 높은 값은 창의성과 예측 불가능성을 높입니다. 0.2과 같은 낮은 값은 출력을 더 결정적이고 집중적으로 만듭니다. NSFW 역할극에서는 높은 온도가 더 다양하고 강렬한 응답을 생성합니다.
적절한 균형을 찾기 위해 다양한 값을 실험하세요. 온도가 너무 높으면 비문이나 반복적인 텍스트가 생성될 수 있습니다. 온도가 너무 낮으면 기계적이거나 단조로운 대화 결과가 나올 수 있습니다. 원하는 어조와 일관성에 따라 조정하세요. uncensored 모델은 높은 창의성 설정에 잘 반응합니다.
- 창의적인 역할극에는 0.7-0.9를 사용합니다.
- 사실 기반 또는 코딩 작업에는 0.2-0.5를 사용합니다.
- 조정하면서 출력 품질을 모니터링하세요.
롤플레이 생성에서의 Top P와 다양성
Top P (핵심 샘플링)은 모델이 확률 질량의 상위 퍼센트만 고려하도록 제한합니다. 이는 다양성을 제어하기 위해 temperature와 함께 작동합니다. 낮은 Top P 값은 출력을 더 예측 가능하게 만듭니다. 높은 값은 더 다양한 단어 선택을 허용합니다.
미세한 제어를 위해 Top P와 온도를 결합하세요. 예를 들어, 높은 온도와 낮은 Top P는 창의적이지만 집중된 텍스트를 생성할 수 있습니다. 이는 캐릭터의 목소리를 유지하면서 자발적인 동작을 허용하는 데 유용합니다. 내러티브 스타일에 맞게 다양한 조합을 테스트하세요.
from openai import OpenAI
client = OpenAI(base_url="https://api.abliteratedllmonline.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는 입력 토큰 백만 개당 $0.15, 출력 토큰 백만 개당 $0.50을 청구합니다. 출력 토큰은 모델의 작업을 나타내므로 더 비쌉니다. 스트리밍은 비용에 영향을 주지 않습니다. 생성된 모든 토큰에 대해 지불합니다.
예상치 못한 과금을 피하려면 토큰 사용량을 모니터링하세요. 마지막 SSE 청크에는 정확한 토큰 수가 제공됩니다. 이를 사용하여 로컬 잔액이나 청구 대시보드를 업데이트하세요. 오류 및 거절은 무료이므로 성공적인 완료에 대해서만 요금이 부과됩니다. 이 종량제 모델을 통해 과금을 방지할 수 있습니다.
- 입력 토큰은 백만 개당 $0.15입니다.
- 출력 토큰은 100만 토큰당 $0.50입니다.
- 거부 및 오류는 무료입니다.
API 키 교체 및 속도 제한
각 계정에는 활성 API 키가 하나만 허용됩니다. 키를 재생성하면 이전 키가 즉시 무효화됩니다. 이는 보안을 보장하지만 클라이언트를 신속하게 업데이트해야 합니다. 속도 제한은 분당 300개의 요청과 키당 8개의 동시 요청으로 설정됩니다.
이러한 제한을 초과하면 HTTP 429 오류가 발생합니다. 재시도 로직에 지수 백오프를 구현하십시오. 제한 내에 머물기 위해 요청 볼륨을 모니터링하십시오. 더 높은 처리량이 필요하면 워크로드를 여러 계정으로 분산하거나 프롬프트 크기를 최적화하는 것을 고려하십시오. 키는 가입 직후 표시되므로 안전하게 보관하십시오.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.abliteratedllmonline.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);
일반적인 HTTP 오류 문제 해결
HTTP 오류는 요청 또는 서버 응답의 문제를 나타냅니다. 일반적인 오류에는 400 Bad Request, 401 Unauthorized 및 429 Too Many Requests가 포함됩니다. 400 오류는 종종 잘못된 JSON 또는 유효하지 않은 매개변수를 의미합니다. 401 오류는 잘못된 또는 만료된 API 키를 나타냅니다.
요청 헤더와 페이로드의 구문 오류를 확인하세요. API 키가 정확하고 활성화되어 있는지 확인하세요. 429 오류를 받으면 기다렸다가 지수 백오프로 다시 시도하세요. 공식 OpenAI SDK를 사용하여 이러한 오류를 자동으로 처리하세요. 이들은 명확한 오류 메시지와 재시도 로직을 제공합니다. 이는 개발 시간을 줄이고 신뢰성을 향상시킵니다.
- 400: JSON 구문 및 매개변수 확인.
- 401: API 키 유효성 확인.
- 429: 백오프와 함께 재시도 로직 구현.
curl https://api.abliteratedllmonline.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List the python dependencies for this flask app"}]
}'