GetAiApiKey/프로덕션용 AI API 체크리스트
Python에서 LLM 설치 방법: 로컬 또는 API
모델을 자체 머신에서 실행하거나, 작은 Python 패키지를 설치해 HTTP를 통해 호스팅된 모델에 접속할 수 있습니다. 이 페이지에서는 두 가지 방법을 모두 다루며 API 경로를 단계별로 안내합니다.
업데이트

주요 포인트
- 로컬 설치는 모델 가중치와 충분한 메모리가 필요하며, API 경로는 openai 패키지와 키만 필요합니다.
- base URL을 https://api.getaiapikey.com/v1으로 설정하고 모델을 uncensored로 설정하세요.
- 스트리밍, 함수 호출 및 JSON 모드는 모두 표준 OpenAI 클라이언트를 통해 작동합니다.
- HTTP 429를 짧은 재시도로 처리하고 동시 호출을 8개 이하로 유지하세요.
LLM 설치의 두 가지 의미
Python에서 llm을 설치하는 방법을 묻는 질문은 보통 두 가지 의미입니다. 첫 번째는 로컬에서 모델을 실행하는 것으로, 가중치를 다운로드하고 라이브러리를 사용하여 자체 CPU 또는 GPU에서 로드하는 것입니다. 두 번째는 클라이언트 라이브러리를 설치해 Python 코드가 다른 곳에서 실행되는 모델과 통신하게 하는 것입니다. 둘 다 유효하며, 올바른 선택은 하드웨어와 구축하려는 내용에 따라 달라집니다.
API 라우트는 훨씬 짧습니다. pip install openai를 실행하고, 클라이언트를 base URL로 설정한 다음 모델을 호출합니다. 가중치나 GPU 드라이버, 메모리 계획이 필요 없습니다. 이 페이지의 나머지 부분에서는 해당 라우트에 대한 단계와 코드를 제공하고, 비교할 수 있도록 로컬 라우트에 대한 짧은 섹션을 포함합니다.
로컬 설치 또는 호스팅 API: 선택 방법
| 질문 | 로컬 설치 | 호스팅 API |
|---|---|---|
| 설치 항목 | 추론 라이브러리 및 모델 가중치 | openai 패키지 |
| 하드웨어 | 모델에 적합한 메모리와 일반적으로 GPU | HTTPS 호출이 가능한 모든 컴퓨터 |
| 비용 | 하드웨어 및 전기 요금 | 토큰당, 선불 크레딧에서 |
| 오프라인에서 작동 | 예 | 아니요 |
| 첫 번째 응답까지 걸리는 시간 | 다운로드, 설정, 튜닝 | 몇 분 |
모든 데이터를 한 대의 머신에 유지해야 하거나 오프라인으로 작업해야 하거나 가중치를 다루려는 경우 로컬 실행이 적합합니다. llama.cpp 바인딩이나 Hugging Face transformers 같은 라이브러리가 일반적인 시작점이며, 선택한 모델 크기에 따라 하드웨어 요구사항이 다르므로 해당 문서에서 확인하세요.
빠른 결과를 원하거나 노트북에 큰 모델을 담을 수 없거나 앱이 많은 사용자에게 서비스를 제공해야 하는 경우 API가 적합합니다. 하드웨어를 구매하는 대신 토큰당 요금을 지불합니다. 이 서비스는 입력 토큰 100만 개당 $0.15, 출력 토큰 100만 개당 $0.50이며 구독료가 없습니다. 가격 책정 페이지에 자세한 내용이 있습니다.
1단계: 가상 환경 생성 및 패키지 설치
설치가 깔끔하게 유지되도록 가상 환경을 사용하세요. 최신 Python 3 릴리스는 모두 openai 패키지와 호환됩니다.
python3 -m venv .venv
source .venv/bin/activate
pip install openai
다음으로 키가 필요합니다. Google 또는 이메일과 비밀번호로 API 키 페이지에 가입하세요. 새 사용자는 한 번의 클릭으로 7일 동안 유효하며 카드가 필요 없는 무료 체험 크레딧 $0.50을 받을 수 있습니다. 키를 소스 파일 대신 환경 변수에 저장하세요:
export API_KEY="paste-your-key-here"2단계: 첫 번째 호출 만들기
서비스는 OpenAI와 호환되므로 기본 OpenAI 스크립트에서 변경해야 할 것은 base URL과 모델 ID뿐입니다. 모델 ID는 uncensored입니다.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.getaiapikey.com/v1",
api_key=os.environ["API_KEY"],
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a context window is in two sentences."},
],
temperature=0.7,
max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
이것이 답변과 두 토큰 수를 출력하면 설치가 완료된 것입니다. 키가 작동하는지 확인하고 모델 ID를 확인하려면 GET /v1/models를 호출할 수도 있습니다:
for m in client.models.list():
print(m.id)
Python 없이 셸에서 동일한 요청은 단일 curl 호출로 https://api.getaiapikey.com/v1/chat/completions에 대한 것입니다. 헤더 Authorization: Bearer 다음에 키가 옵니다. 문서 빠른 시작에서 전체를 확인할 수 있습니다.
3단계: 도착하는 토큰 스트리밍
긴 응답이 끝날 때까지 기다린 후 아무것도 출력하면 느리게 느껴집니다. stream=True을 설정하면 서버가 서버 전송 이벤트를 통해 토큰을 보냅니다. stream_options을 사용하여 마지막 청크에서 사용량 요약을 요청할 수 있습니다.
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage.total_tokens, "tokens")
프로덕션 환경에서는 한 가지 세부 사항이 중요합니다. 스트리밍 요청은 스트림이 끝날 때까지 동시성 슬롯을 점유합니다. 전체 키는 8개의 동시 요청을 허용하므로, 앱에서 긴 스트림을 여러 개 열 경우 사용자가 연결을 끊을 때 스트림을 종료하세요.
4단계: JSON 모드 및 함수 호출
구조화된 출력을 위해 response_format을 JSON 객체로 설정합니다. 또한 프롬프트에서 모델이 JSON으로 답변하도록 지시하세요. 이 설정은 유효한 JSON 구문을 보장하지만 원하는 필드명은 보장하지 않기 때문입니다.
import json
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
{"role": "user", "content": "Give me a title and tags for a post about slow travel."},
],
response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])
도구 호출은 표준 패턴을 따릅니다. 함수를 설명하고, 모델이 호출을 요청할 수 있으며, 직접 실행하고 role: "tool"로 결과를 다시 보냅니다.
tools = [{
"type": "function",
"function": {
"name": "get_time",
"description": "Return the current time for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
messages.append(msg)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"time": "14:05"}),
})
final = client.chat.completions.create(
model="uncensored", messages=messages, tools=tools
)
print(final.choices[0].message.content)
의존하기 전에 몇 가지 프롬프트에서 함수 호출을 테스트하세요. 모든 모델은 잘못된 함수를 선택하거나 인수를 잘못 채울 수 있으므로 부작용이 있는 모든 것을 실행하기 전에 코드에서 인수를 검증하세요.
5단계: 제한 및 오류 처리
전체 키는 8개의 동시 요청과 분당 300개의 요청을 허용합니다. 체험 키는 2개와 60개를 허용합니다. 이러한 제한을 초과하면 HTTP 429가 발생합니다. 오류 코드 rate_limited은 분당 요청이 너무 많음을 의미하고, concurrency은 동시에 너무 많음을 의미합니다. 일시적인 과부하 시 API는 Retry-After: 5 헤더와 함께 429도 반환합니다.
OpenAI Python 클라이언트는 자체적으로 일부 실패를 재시도하지만 명시적인 래퍼는 동작을 명확하게 유지합니다:
import time
from openai import RateLimitError
def ask(messages, tries=4):
for attempt in range(tries):
try:
return client.chat.completions.create(model="uncensored", messages=messages)
except RateLimitError:
time.sleep(5 * (attempt + 1))
raise RuntimeError("still rate limited after retries")
각 응답에는 X-Request-Id, X-Balance-USD 및 속도 제한 헤더가 포함되어 있으므로 로깅할 수 있습니다. 지원에 문의할 때 요청 ID를 포함하세요. 실패하거나 거부된 요청은 요금이 부과되지 않으므로 재시도해도 추가 비용이 들지 않습니다.
크기 제한도 계획하세요. 컨텍스트 창은 프롬프트와 응답을 합쳐서 100,000 토큰이며 최대 요청 본문은 8 MB입니다. 긴 채팅 기록은 해당 숫자에 도달하기 전에 잘라내거나 요약해야 합니다.
호출이 작동하지 않을 때
대부분의 첫 실행 문제는 몇 가지 실수에서 비롯됩니다. 다른 것을 의심하기 전에 다음을 순서대로 확인하세요.
- 버전 경로가 없는 base URL. 값은
/v1로 끝나야 합니다. 클라이언트는/chat/completions을 추가하므로 누락된/v1은 잘못된 라우트로 요청을 보냅니다. - 잘못되거나 누락된 키. 키는
Authorization: Bearer헤더에 들어가며, 클라이언트는api_key에서 이를 빌드합니다. 환경 변수가 비어 있으면 클라이언트는 시작 시 오류를 발생시키거나 빈 키를 보냅니다.bool(os.environ.get("API_KEY"))를 출력하여 확인하세요. - 다른 서비스의 모델 이름. 여기서 유일한 모델 ID는
uncensored입니다. 다른 튜토리얼의 이름과 같은 이름은 일치하지 않습니다. - 잔액 없음.
X-Balance-USD헤더를 확인하세요. 7일 체험 기간이 지났거나 잔액이 모두 소진된 경우, $20부터 충전해야 합니다. - 오래된 패키지. 예제에서
OpenAI(를 사용하고 Python에서 해당 이름을 가져올 수 없다고 표시되면 1.0 이전 패키지가 있습니다.pip install --upgrade openai를 실행하세요.
헤더를 포함한 원본 응답을 보려면 클라이언트의 raw-response 래퍼를 사용하세요:
raw = client.chat.completions.with_raw_response.create(
model="uncensored",
messages=[{"role": "user", "content": "ping"}],
max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)
이것은 요청 ID와 남은 잔액을 출력하여 크론 작업 또는 시작 스크립트에서 실행할 수 있는 빠른 상태 확인입니다.
다른 도구에서 사용
엔드포인트가 OpenAI 형식을 따르므로 다른 Python 라이브러리도 동일한 두 설정으로 이를 사용할 수 있습니다. 사용자 지정 OpenAI base URL을 허용하는 프레임워크는 base_url과 api_key만 필요합니다. Node의 경우 공식 openai 패키지는 동일한 필드를 사용합니다:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getaiapikey.com/v1",
apiKey: process.env.API_KEY,
});
const r = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);
이것은 텍스트 전용 서비스입니다: 이미지 또는 오디오 생성, 임베딩 또는 파인 튜닝이 없습니다. 프로젝트에 이러한 기능이 필요한 경우 해당 부분에 대해 다른 도구와 함께 이 API를 사용하세요. 이 모델은 독립적인 제공자가 실행하는 오픈 웨이트 모델이며 합법적인 성인 사용에 대해 콘텐츠 거부 없이 답변하도록 조정되었습니다. 미성년자가 관련된 성 콘텐츠는 절대 허용되지 않습니다.
더 많은 가이드
질문과 답변
Python에서 LLM을 이 방식으로 사용하려면 GPU가 필요합니까?
아니요. 모델은 제공업체 측에서 실행됩니다. 엔드포인트를 호출하려면 컴퓨터에 Python과 인터넷 연결만 있으면 됩니다.
어떤 패키지를 설치해야 합니까?
pip로 공식 openai 패키지를 설치합니다. 그런 다음 base URL을 https://api.getaiapikey.com/v1으로 설정하고 모델을 uncensored로 설정합니다.
무료로 사용해 볼 방법이 있나요?
신규 사용자는 가입 후 한 번의 클릭으로 무료 체험 크레딧 $0.50을 받을 수 있습니다. 유효 기간은 7일이며, 카드가 필요 없고 사람당 1회로 제한됩니다.
요청 비용은 얼마입니까?
입력 토큰 2,000개와 출력 토큰 500개로 구성된 요청은 토큰 100만 개당 $0.15와 $0.50 기준 $0.00055가 발생하며, 성공한 요청에 대해서만 요금이 부과됩니다.
스트리밍과 함수 호출을 지원합니까?
네. SSE를 통한 스트리밍, 함수 호출 및 JSON 모드는 모두 표준 OpenAI 클라이언트를 통해 작동합니다.