저번에 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 루프를 구현해 보도록 하자.
'AI' 카테고리의 다른 글
| 6. 에이전트 코드 리팩터링: 계층 분리와 이벤트 기반 루프 (1) | 2026.07.25 |
|---|---|
| 5. Python으로 병렬 도구 호출(Parallel Tool Use) 구현하기 (0) | 2026.07.25 |
| 4. Python으로 Tool Use 루프 구현하기 (0) | 2026.07.25 |
| 2. HTTP로 Claude API 호출하기 (0) | 2026.07.24 |
| 1. 언리얼에서 동작하는 테스트 AI 에이전트 만들기 (0) | 2026.07.24 |