KO ▾
NSFW Video Generator

성인 비디오 파이프라인용 무검열 API

Python용 무료 LLM: 로컬 모델 vs 호스팅 API

Python용 무료 LLM은 두 가지 유형으로 나뉩니다: 자체 머신에서 실행하는 오픈 웨이트 모델과 소액의 요금이 부과되는 호스팅 엔드포인트입니다. 이 가이드는 두 가지를 비교하고 호스팅 경로용 작동 코드를 제공합니다.

업데이트

로컬 머신이 호스팅 서버 클러스터에 연결된 등각 도해로, 로컬 및 호스팅 LLM을 비교합니다.

주요 포인트

  1. 로컬 오픈 웨이트 모델은 토큰당 비용이 없지만 메모리, 설정 시간 및 유지보수가 필요합니다.
  2. 호스팅 API는 OpenAI 호환입니다: openai 패키지를 설치하고 Base URL을 설정한 후 모델 ID uncensored를 사용하세요.
  3. 스트리밍, 함수 호출, JSON 모드는 모두 일반적인 chat completions 호출을 통해 작동합니다.
  4. 트라이얼 키는 7일 동안 $0.50의 크레딧을 제공하며, 동시 요청 2개와 분당 60개의 요청이 허용됩니다.

Python 스크립트에 무료 LLM을 가져오는 두 가지 방법

Python용 무료 llms를 검색하는 사람들은 보통 두 가지 중 하나를 의미합니다. 첫 번째는 Ollama, llama.cpp 또는 Hugging Face transformers 라이브러리 같은 도구를 사용하여 다운로드하고 직접 실행하는 오픈 웨이트 모델입니다. 두 번째는 비용이 매우 적거나 충분한 트라이얼 크레딧이 제공되어 프로토타입에는 무료로 느껴지는 호스팅 엔드포인트입니다. 둘 다 타당하며 서로 다른 작업에 적합합니다.

로컬에서 실행하면 토큰당 요금이 없고 데이터가 머신에서 나가지 않습니다. 하지만 선택한 모델에 충분한 RAM 또는 GPU 메모리가 필요하고, 다운로드를 기다려야 하며, 노트북에 들어가는 작은 모델은 대형 모델보다 답변 품질이 낮습니다. 호스팅 API는 하드웨어 문제를 없애지만, 트라이얼이 끝나면 토큰당 비용을 지불해야 합니다. 이 페이지는 두 가지를 정직하게 다루고, 이 사이트의 Python 코드를 보여줍니다. 이 사이트는 OpenAI 호환이며 표준 openai 패키지와 작동합니다.

로컬 모델과 호스팅 API 비교

질문직접 실행호스팅 선불 API
토큰당 비용없음, 하지만 하드웨어와 전력 비용이 발생합니다.입력 1M당 $0.15, 출력 1M당 $0.50
설정 시간런타임 설치, 가중치 다운로드, 설정 조정패키지 하나 설치, 키 붙여넣기
컨텍스트 길이메모리에 의해 제한됨100,000 토큰, 프롬프트 및 완성 포함
동시 요청사용자의 머신이 처리할 수 있는 한도전체 키는 동시 8개 요청, 트라이얼 키는 2개
거부 응답선택한 가중치에 따라 다름법적인 성인 사용에 맞게 콘텐츠 거부 없이 답변하도록 조정됨
오프라인 사용예아니요

성능 좋은 GPU가 있고 작업이 비공개 또는 오프라인이라면 로컬이 좋은 선택이며 여기서 읽기를 중단할 수 있습니다. 머신을 소유하지 않고 더 큰 모델을 원하거나, 노트북, 서버, CI 러너에서 스크립트가 동일하게 작동하기를 원한다면 호스팅 경로가 더 간단합니다. 많은 프로젝트가 둘 다 사용합니다: 개발 중에는 작은 로컬 모델, 프로덕션에서는 호스팅 모델을 사용하며 Base URL 하나 변경으로 전환합니다.

호스팅 엔드포인트를 5분 안에 설정하세요

먼저 키가 필요합니다. Google 또는 이메일과 비밀번호로 가입한 후 API 키 페이지에서 한 번의 클릭으로 $0.50 트라이얼 크레딧을 청구하세요. 트라이얼은 7일 동안 유효하며, 사람당 하나이며 결제가 필요하지 않습니다. 그런 다음 SDK를 설치하고 키를 소스 코드에 포함하지 마세요.

pip install openai
export NOTRACK_API_KEY="sk-your-key-here"

클라이언트는 기본 OpenAI 설정에서 두 가지 변경이 필요합니다: Base URL과 키입니다. 모델 ID는 uncensored이며, 하나의 모델만 제공됩니다.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.nsfwvideogenerator.cc/v1",
    api_key=os.environ["NOTRACK_API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise writing assistant."},
        {"role": "user", "content": "Give me three title ideas for a noir short story."},
    ],
    temperature=0.8,
)

print(resp.choices[0].message.content)
print(resp.usage)

인증은 표준 Authorization: Bearer 헤더이며 SDK가 자동으로 추가합니다. 두 가지 방법이 있습니다: POST /v1/chat/completions 및 GET /v1/models. 사용 가능한 모델 ID를 반환하는 client.models.list()로 연결을 확인할 수 있습니다. 전체 매개변수 목록은 문서 페이지에 있습니다.

스트리밍 응답

사람이 보는 모든 것에 대해 스트리밍을 사용하세요. stream=True을 설정하고 서버 전송 이벤트가 도착할 때 청크를 반복하세요. 사용량은 스트림 끝에 보고되므로 토큰 수를 여전히 로깅할 수 있습니다.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a four-line poem about rain on a tin roof."}],
    stream=True,
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    usage = getattr(chunk, "usage", None)
    if usage:
        print("\n", usage)

사람들이 실수하는 한 가지 세부 사항: 스트리밍 요청은 스트림이 끝날 때까지 동시 요청 슬롯을 유지합니다. 2개의 슬롯이 있는 트라이얼 키에서 두 개의 열린 스트림은 세 번째 호출이 concurrency 코드와 함께 429 오류를 받습니다. 항상 스트림을 소비하거나 닫으세요.

도구 호출 및 JSON 모드

엔드포인트는 tools, tool_choice, 스트리밍 tool_calls 및 role: "tool"로 반환되는 결과를 지원합니다. 여기 함수 하나를 사용한 전체 라운드 트립이 있습니다.

import json

tools = [{
    "type": "function",
    "function": {
        "name": "word_count",
        "description": "Count the words in a piece of text.",
        "parameters": {
            "type": "object",
            "properties": {"text": {"type": "string"}},
            "required": ["text"],
        },
    },
}]

messages = [{"role": "user", "content": "How many words are in: the quick brown fox jumps"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message

if msg.tool_calls:
    messages.append(msg)
    for call in msg.tool_calls:
        args = json.loads(call.function.arguments)
        result = len(args["text"].split())
        messages.append({
            "role": "tool",
            "tool_call_id": call.id,
            "content": str(result),
        })
    final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
    print(final.choices[0].message.content)

항상 arguments을 방어적으로 구문 분석하세요. 모델은 이를 JSON 문자열로 반환하며 모든 모델은 가끔 잘못 구성된 것을 생성할 수 있습니다. 도구 없이 구조화된 출력이 필요하면 JSON 모드를 사용하세요.

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply with a JSON object with keys title and tags (list of strings)."},
        {"role": "user", "content": "Describe a lighthouse keeper's diary."},
    ],
    response_format={"type": "json_object"},
    temperature=0.2,
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

프롬프트에서 JSON이라는 단어와 키 이름을 지정하고 온도를 낮게 유지하세요. 프로덕션 코드에서는 json.loads을 try 블록으로 감싸세요.

속도 제한, 오류 및 재시도

전체 키는 동시 요청 8개와 분당 300개의 요청을 허용합니다. 트라이얼 키는 2개와 60개를 허용합니다. 초과하면 분당 너무 많음(rate_limited) 또는 동시 너무 많음(concurrency) 코드와 함께 HTTP 429 오류가 발생합니다. 일시적 과부하 시 API는 Retry-After: 5 헤더와 함께 429도 반환합니다. SDK는 일부 오류를 자동으로 재시도합니다. 병렬로 실행되는 스크립트의 경우 작은 명시적 래퍼가 더 명확합니다.

import time
from concurrent.futures import ThreadPoolExecutor
from openai import RateLimitError

def ask(prompt, tries=4):
    for attempt in range(tries):
        try:
            r = client.chat.completions.create(
                model="uncensored",
                messages=[{"role": "user", "content": prompt}],
                max_tokens=300,
            )
            return r.choices[0].message.content
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited")

prompts = [f"Summarize idea number {i} in one sentence." for i in range(20)]
with ThreadPoolExecutor(max_workers=2) as pool:   # 8 on a full key
    results = list(pool.map(ask, prompts))

max_workers을 키의 동시 요청 한도에 맞추면 대부분의 429 오류를 사전에 방지합니다. 각 응답에는 X-Request-Id, X-Balance-USD 및 두 개의 속도 제한 헤더가 포함되어 있으며, 디버깅 또는 지원이 필요할 때 client.chat.completions.with_raw_response.create(...)를 통해 읽을 수 있습니다.

로컬과 호스팅 중 선택하는 방법

이데올로기를 건너뛰고 프로젝트에 대한 네 가지 질문에 답하세요.

  1. 데이터가 머신에 남아야 하나요? 계약이나 습관이 그렇다면 로컬에서 실행하세요. 호스팅 프롬프트는 학습에 사용되지 않지만 네트워크를 통해 이동합니다.
  2. 메모리가 얼마나 있나요? 모델 크기가 품질을 결정합니다. 전용 GPU가 없는 노트북은 작은 모델로 제한되며 답변에 그 영향이 나타납니다. 호스팅 모델은 100,000 토큰 컨텍스트 창을 제공하는 대형 모델을 제공하며 이는 가정에서 따라잡기 어렵습니다.
  3. 얼마나 많은 요청을 보내야 하나요? 주당 몇 백 건은 어느 쪽에서나 사소합니다. 월간 수십만 건은 호스팅 요금을 실제 숫자로 만듭니다. 그렇지 않으면 유휴 상태인 로컬 박스가 매력적으로 보일 수 있습니다. 계산을 해보세요: 1,000개의 입력 토큰과 500개의 출력 토큰으로 100,000개의 요청은 100,000 x $0.0004 = $40가 비용이 듭니다.
  4. 거부 처리를 특정 방식으로 필요로 하나요? 많은 오픈 웨이트 모델은 내장된 거부 동작을 제공하며, 다른 모델은 이를 제거하도록 조정됩니다. 호스팅 모델은 합법적인 성인 사용에 콘텐츠 거부 없이 답변하도록 조정되었으므로 올바른 가중치를 찾을 필요가 없습니다.

답변이 양쪽을 가리킨다면 첫 주에는 호스팅으로 시작하세요. 트라이얼은 무료이며, 하드웨어를 구매하거나 다른 수기가바이트 파일을 다운로드하기 전에 프롬프트가 무엇을 필요로 하는지 알 수 있습니다.

Python 스크립트의 일반적인 실수

사람들이 겪는 대부분의 문제는 작고 수정 가능합니다.

  • 잘못된 Base URL. /v1로 끝나야 합니다. 접미사가 없으면 404 오류가 발생하며 도움이 되는 메시지가 아닙니다. 의심스러우면 client.base_url을 출력하세요.
  • 코드에 키 포함. 환경 변수에서 읽으세요. 위와 같이 .env 파일을 .gitignore에 추가하세요.
  • 잘못된 모델 이름. 유일한 모델 ID는 uncensored입니다. 다른 제공업체의 이름은 작동하지 않으므로 코드를 포팅할 때 변경하세요.
  • 무한 루프. 끝없이 이어지는 함수 호출 루프는 비용이 많이 드는 버그입니다. 5단계 정도로 제한하세요.
  • 컨텍스트 예산 무시. 프롬프트와 완성본은 100,000 토큰을 공유합니다. 모든 턴을 무한히 추가하면 결국 한도에 도달합니다. 오래된 메시지를 자르거나 요약하세요.
  • JSON이 항상 유효하다고 가정. JSON 모드에서도 사용 전에 필요한 키를 확인하세요.

서버 측에서 문제가 발생하면 support에 문의할 때 응답의 X-Request-Id 값을 인용하세요. 이 값으로 운영팀이 귀하의 정확한 호출을 찾을 수 있습니다.

Python 작업에 대한 호스팅 옵션 비용은 얼마입니까?

입력 토큰 1,000개와 출력 토큰 500개를 사용한 일반적인 스크립트 호출 비용은 $0.00015에 $0.00025를 더해 총 $0.0004입니다. $0.50 무료 체험 크레딧로는 약 1,250회를 사용할 수 있습니다. 최소 충전 금액인 $20로는 50,000회를 사용할 수 있습니다. 크레딧은 만료되지 않으며, 실패하거나 거절된 요청에는 요금이 부과되지 않고 프롬프트는 학습에 사용되지 않습니다. 충전 금액은 최대 $500까지 가능하며 $50 이상 충전 시 보너스가 제공되며, 암호화폐(TRC20 네트워크의 USDT 또는 Base의 USDC)로 결제할 수 있습니다. 자세한 내용은 가격 책정 페이지를 참조하십시오.

텍스트 전용입니다: 이미지, 오디오, 비디오, 임베딩 또는 파인튜닝이 없습니다. 그리고 유일한 엄격한 규칙은 미성년자가 포함된 성적인 콘텐츠가 금지된다는 것입니다. 거절이 적게 발생하는 텍스트 생성이 필요한 Python 프로젝트라면 이것이 전체 기능입니다.

질문과 답변

어떤 Python 패키지가 필요한가요?

공식 openai 패키지입니다. base_url을 https://api.nsfwvideogenerator.cc/v1,로 설정하고 api_key로 키를 전달한 후, 모델 ID uncensored를 사용하십시오.

LangChain이나 다른 프레임워크를 사용할 수 있나요?

API가 chat completions 형식을 따르므로, OpenAI 호환 base URL과 키를 설정할 수 있는 클라이언트는 모두 작동합니다. base URL을 지정하고 모델 이름으로 uncensored를 사용하세요.

무료 로컬 모델이 호스팅 모델만큼 좋은가요?

모델과 하드웨어에 따라 다릅니다. 노트북에 설치할 수 있는 모델은 일반적으로 대형 호스팅 모델보다 작고 성능이 낮지만, 토큰당 비용이 무료이며 오프라인에서도 작동합니다.

Python에서 429 오류를 피하는 방법은 무엇인가요?

작업자 스레드를 동시 요청 한도(시험용 키는 2, 전체 키는 8) 이하로 유지하고, rate_limited, concurrency 또는 Retry-After: 5 응답을 받으면 짧은 대기 시간 후 재시도하세요.

키는 양식 하나만 작성하면 받을 수 있습니다

계정을 생성하고 키를 복사한 후 기본 URL을 변경하세요. 설정은 이것으로 끝입니다.