모델별 실행 레시피

최종 업데이트

OpenRouter 무료 오픈 웨이트 모델로 코드 리뷰 API 연결하기

공개 코드와 리뷰 지시문을 보내면 OpenRouter가 오픈 웨이트 모델의 검토 답변을 돌려줘요.

OpenRouter는 여러 모델 제공자의 추론 API1를 한 요청 형식으로 연결해요. 이 레시피는 Meta Llama 3.3 70B Instruct의 :free 변형을 고정해 공개 Python 코드를 검토하고, 요청 본문·무료 상한·제공자 개인정보 정책을 함께 확인해요.

실행 조건과 핵심 내용
  • 모델 ID 끝의 :free는 무료 API 변형이고 openrouter/free는 요청에 맞는 무료 모델을 골라주는 동적 라우터예요.
  • OpenRouter 무료 모델은 기본 계정에서 분당 20회·하루 50회 요청할 수 있고, 누적 구매 크레딧이 10달러 이상이면 하루 한도가 1,000회로 올라가요.
  • OpenRouter는 자체적으로 입력·출력을 학습에 쓰지 않는다고 밝히지만, 실제 요청은 선택된 모델 제공자에게 전달돼요. 코드 리뷰 예제에는 공개 코드만 넣고 제공자 정책을 확인하세요.

공개 코드 조각을 보내 리뷰 답변을 받아요

OpenRouter는 여러 모델 제공자의 추론 API를 한 요청 형식으로 연결해 주는 서비스예요. 공개 코드 조각과 리뷰 지시문을 보내면 모델의 검토 의견을 응답으로 받을 수 있어요. 이 글에서는 Llama 3.3 70B Instruct의 무료 변형을 지정해 Python 코드 한 조각을 검토하는 API 요청을 만들어 봅니다.

Llama 3.3은 가중치가 공개된 모델이고 Meta Llama 3.3 Community License를 따라 사용해요. OpenRouter의 :free 표시는 호스팅 API의 토큰2 가격이 0이라는 뜻이에요. Meta Llama 3.3 모델 카드 · OpenRouter 무료 모델 페이지

노트북의 코드 화면과 주변에 배치된 여러 인터페이스가 중앙 장치와 연결된 작업대 일러스트
API는 리뷰할 코드와 지시문을 보내고 모델 답변을 받아요.

모델 이름과 무료 경로를 골라요

모델 ID 끝에 :free가 붙은 변형은 해당 모델의 무료 제공 경로예요. openrouter/free는 매 요청에 맞는 무료 모델을 선택하는 라우터라서 실제 응답 모델이 요청마다 달라질 수 있어요. 코드 리뷰 결과를 비교하거나 같은 모델로 재현하려면 이번 예제처럼 구체적인 무료 모델 ID를 적으세요. 자동 선택을 원할 때는 openrouter/free를 쓸 수 있지만, 오픈 웨이트 여부까지 고정해 주지는 않아요. 예제의 리뷰 지시문은 영어로 작성했어요.

Python 표준 라이브러리로 첫 요청을 보내요

Python 3과 인터넷 연결, OpenRouter 계정에서 만든 API 키가 필요해요. 아래 스크립트는 별도 SDK를 설치하지 않고 표준 라이브러리 urllib로 요청을 보내요. getpass가 키를 입력할 때 화면에 표시하지 않으므로 명령 기록이나 코드 파일에 키를 적지 않아도 돼요. 이 예제에서는 공개해도 되는 짧은 Python 함수만 API에 보내요.

코드를 review.py로 저장하고 터미널에서 python3 review.py를 실행해요. 프롬프트3가 나타나면 API 키를 입력하고 Enter를 눌러요.

키를 공유 문서나 저장소에 저장하지 마세요. 이미 노출했다면 OpenRouter 대시보드에서 해당 키를 폐기하고 새 키를 만들어 주세요.

공개 Python 함수에 리뷰 요청 보내기
import getpass
import json
import urllib.request

api_key = getpass.getpass("OpenRouter API key: ")
payload = {
    "model": "meta-llama/llama-3.3-70b-instruct:free",
    "messages": [
        {
            "role": "user",
            "content": (
                "Review this public Python example for correctness. State one concrete issue, "
                "if any, and suggest a minimal fix:\n\n"
                "def percentage(part, total):\n"
                "    return part / total * 100\n"
            ),
        }
    ],
    "max_tokens": 200,
}
request = urllib.request.Request(
    "https://openrouter.ai/api/v1/chat/completions",
    data=json.dumps(payload).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
with urllib.request.urlopen(request, timeout=60) as response:
    result = json.load(response)
print(result["choices"][0]["message"]["content"])
모델 ID와 공개 코드가 요청 본문에 들어가고, API 키는 입력창에서만 읽어요.

정상 응답과 첫 오류를 구분해요

요청이 성공하면 터미널에는 코드 검토 문장이 출력돼요. 응답 JSON의 choices[0].message.content에 리뷰가 들어 있고, usage에는 요청·생성 토큰 정보가 들어갈 수 있지만 지금 코드는 리뷰 문장만 출력해요.

토큰 정보도 보려면 코드 끝의 print(result["choices"][0]["message"]["content"]) 다음 줄에 print(result.get("usage"))를 추가하세요.

예제 함수의 total이 0일 때 나눗셈 오류가 생기는지 짚고 조건 검사를 제안하는 답을 기대할 수 있지만, 모델은 틀릴 수 있으니 코드와 테스트로 수정 근거를 확인하세요.

HTTP Error 401이면 키가 정확한지, 폐기된 키가 아닌지, Bearer 뒤에 공백이 있는지 확인하세요. HTTP Error 429이면 분당 20회 또는 하루 요청 한도에 닿았을 수 있어요. 무료 한도가 회복될 때까지 재시도 루프를 멈추고 요청 횟수를 줄이세요. No endpoints found나 모델 오류가 나오면 모델 페이지에서 해당 :free 엔드포인트가 현재 제공되는지, 요청 기능과 공급자 필터가 맞는지 확인한 뒤 무료 모델 ID를 다시 선택하세요.

소형 데스크톱 컴퓨터에 연결된 모니터에 코드 편집기와 대화 패널이 함께 보인다
요청에는 모델 ID, 메시지, 결과 길이 제한을 함께 지정해요.

하루 무료 한도 안에서 비용을 고정해요

2026년 10월 16일 OpenRouter 요금 안내에서 무료 모델은 기본 계정 기준 분당 20회, 하루 50회까지예요. 실패한 요청도 일일 한도에 포함돼요. 계정이 크레딧을 누적 10달러 이상 구매하면 무료 모델 요청 한도가 하루 1,000회로 올라가요. 무료 범위에서 시험한다면 크레딧을 구매하지 않는 편이 비용을 관리하기 쉬워요.

OpenRouter 무료 모델 요청 상한 · 2026년 10월 16일 확인
계정 조건무료 모델 한도확인할 점
기본 무료 계정20회/분 · 50회/일오류 요청도 하루 한도에 포함
크레딧 10달러 이상 누적 구매20회/분 · 1,000회/일기존 누적 구매액 기준

이 예제의 모델 문자열을 meta-llama/llama-3.3-70b-instruct:free 그대로 유지하고, 다른 모델을 고를 때도 페이지 가격이 무료인지 확인하세요. meta-llama/llama-3.3-70b-instruct처럼 :free가 없는 모델 ID는 유료 경로일 수 있어요. OpenRouter 무료 플랜에는 예산·지출 제어 기능이 표시되어 있지 않으므로, 테스트 중에는 크레딧이나 자동 충전을 설정하지 말고 활동 내역에서 사용 모델과 비용을 확인하세요. 다른 유료 모델을 자동 대체 모델로 넣지 마세요.

모델 제공자에게 전달되는 코드와 개인정보를 관리해요

OpenRouter는 입력·출력을 자체 모델 학습에 사용하지 않는다고 밝히지만, 요청 내용은 선택한 모델 제공자에게 전달돼요. 제공자마다 입력 보관과 학습 정책이 다를 수 있으니 Llama 3.3 모델 페이지의 제공자 안내를 읽고, 공개 코드만 보내세요. OpenRouter 개인정보 정책 · Llama 3.3 무료 모델 페이지

제공자 필터를 적용하려면 요청 본문에 provider 설정을 추가해요. data_collection: "deny"는 데이터를 수집하는 제공자를 제외하고, zdr: true는 Zero Data Retention 정책을 둔 제공자만 선택해요.

조건에 맞는 무료 제공자가 없으면 요청을 멈추고, 유료 모델로 자동 전환하는 fallback은 설정하지 않아요. Python 예제에서는 payload를 만든 다음 request = urllib.request.Request( 줄 바로 앞에 코드를 추가해요. 제공자 데이터 수집 제어

payload 뒤, API 요청 앞에 넣는 선택형 개인정보 필터
payload["provider"] = {
    "data_collection": "deny",
    "zdr": True,
}
필터를 추가하면 조건에 맞는 무료 제공자가 없어 요청이 실패할 수 있어요.

무료 API로 확인할 작업과 다른 경로를 나눠요

하루 50회 안에서 공개 코드의 버그 후보를 묻고, 출력 형식이나 프롬프트를 다듬는 실험에는 무료 API가 맞아요.

요청량이 늘거나 지연 시간·제공자·데이터 보존 조건을 일정하게 관리해야 한다면 현재 모델 페이지와 유료 플랜의 제어 기능을 비교하세요. 비용을 들이지 않고 내부 코드를 검토해야 한다면 저장소 밖으로 코드가 나가지 않는 로컬 모델 경로가 더 적합해요. 무료 모델 목록과 제공자는 바뀔 수 있으니, 실제 적용 전에는 무료 모델 목록과 요금·한도 안내를 다시 확인하세요.

책상 위 모니터에 대화 패널과 코드 편집기가 나란히 표시되어 있다
모델 답변은 코드 화면과 나란히 두고 수정 근거를 검토할 수 있어요.

용어 각주

  1. API — 프로그램의 기능을 다른 코드에서 호출하기 위한 약속된 인터페이스입니다.

    본문으로 돌아가기
  2. 토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.

    본문으로 돌아가기
  3. 프롬프트 — 모델에 보내는 입력문입니다. 생성 모델에서는 만들 결과를 설명하는 문장이 되어 출력의 구성과 내용을 크게 좌우합니다.

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
OpenRouter는 여러 모델 제공자의 추론 API를 한 요청 형식으로 연결해요. 이 레시피는 Meta Llama 3.3 70B Instruct의 `:free` 변형을 고정해 공개 Python 코드를 검토하고, 요청 본문·무료 상한·제공자 개인정보 정책을 함께 확인해요.
선택하지 않는 편이 좋은 경우는 언제인가요?
키를 공유 문서나 저장소에 저장하지 마세요. 이미 노출했다면 OpenRouter 대시보드에서 해당 키를 폐기하고 새 키를 만들어 주세요.
조건과 출처는 어디서 확인하나요?
Llama 3.3은 가중치가 공개된 모델이고 Meta Llama 3.3 Community License를 따라 사용해요. OpenRouter의 `:free` 표시는 호스팅 API의 토큰 가격이 0이라는 뜻이에요. [Meta Llama 3.3 모델 카드](https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct) · [OpenRouter 무료 모델 페이지](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free)