AI

3. Python으로 Claude API 호출하기

영넨이 2026. 7. 24. 21:34
반응형

저번에 curl을 사용해 HTTP 요청으로 Claude API를 호출해봤는데, 이번에는 파이썬(Python)으로 구현을 해보려고 한다.

 

직접 curl로 매번 터미널에서 요청을 보낼 수는 없으니까..

파이썬 스크립트로 만들어서 우리가 원할 때 질문을 인자로 넘겨 호출할 수 있게 구현했다.

 

이번 파이썬 스크립트 작성에 필요한 패키지는 requests.env 파일을 로드하기 위한 python-dotenv이다.

 

가장 먼저 패키지들을 설치해준다.

 

pip install requests python-dotenv

 

그리고 프로젝트 폴더 안에 .env 파일을 만들어서 API 키를 저장해둔다.

(이렇게 해야 보안적으로도 안전하고 코드에 API 키가 노출되지 않는다.)

 

ANTHROPIC_API_KEY=발급받은_API_키

 

그 다음 파이썬 코드를 작성해본다. 파일 이름은 hello.py로 지었다.

 

import os
import sys

import requests
from dotenv import load_dotenv

load_dotenv()

API_URL = "https://api.anthropic.com/v1/messages"
MODEL = "claude-haiku-4-5"

def main() -> None:

    if len(sys.argv) < 2:
        print('사용법 : python hello.py "claude에게 보낼 질문"')
        sys.exit(1)

    question = " ".join(sys.argv[1:])

    api_key = os.environ.get("ANTHROPIC_API_KEY")

    if not api_key:
        print("ANTHROPIC_API_KEY 환경 변수가 설정되지 않았습니다.")
        sys.exit(1)


    headers = {
        "x-api-key": api_key,
        "anthropic-version": "2023-06-01",
        "content-type": "application/json",
    }

    body = {
        "model" : MODEL,
        "max_tokens" : 500,
        "messages" : [
            {
                "role": "user",
                "content": question
            }
        ]
    }

    try:
        response = requests.post(
            API_URL,
            headers=headers,
            json=body,
            timeout=60
        )

        response.raise_for_status()

    except requests.RequestException as error:
        print(f"API 요청 실패 : {error}")

        if "response" in locals():
            print(response.text)

        sys.exit(1)

    data = response.json()

    for block in data.get("content", []):
        if block.get("type") == "text":
            print(block.get("text", ""))

    usage = data.get("usage", {})

    print("\n=== 사용량 정보 ===")
    print(f"입력 토큰: {usage.get('input_tokens', 0)}")
    print(f"출력 토큰: {usage.get('output_tokens', 0)}")
    print(f"종료 이유 : {data.get('stop_reason')}")

    return;

if __name__ == "__main__":
    main()

 

코드를 작성하고 실행하는 방법 is 다음과 같다.

 

python hello.py "안녕, 파이썬에서 보내는 첫 메시지야!"

 

이렇게 터미널에 입력하면 Claude의 응답과 함께 사용량 정보(입력 토큰, 출력 토큰, 종료 이유)가 예쁘게 출력되는 것을 볼 수 있다.

 

이번 코드에서 핵심적인 부분은:

- dotenv를 사용해서 환경변수에 있는 API 키를 안전하게 불러오는 것

- requests를 사용해 post 요청을 보낼 때 API 스키마(model, max_tokens, messages)를 맞춰주는 것

- 마지막으로 응답 데이터에서 실제 텍스트 블록(content)과 토큰 사용 정보(usage)를 파싱해서 보여주는 것

 

파이썬으로 API 호출하는 것도 생각보다 간단하다^.

 

다음에는 에이전트 개발 단계의 두 번째인, 로컬 도구를 연동해서 작동하게 만드는 Tool Use 루프를 구현해 보도록 하자.

반응형