[파이썬 15] 파이썬으로 Claude/ChatGPT API 써보기


지금까지는 AI를 웹사이트나 앱에서 대화하듯 썼다면, 이번 편은 그 AI를 내가 만드는 프로그램 안에 직접 붙이는 방법이다. Claude나 ChatGPT 같은 모델은 API(응용 프로그램 인터페이스)로 제공되며, 파이썬 코드에서 이 API를 호출하면 AI의 응답을 자동으로 받아 다른 로직과 조합할 수 있다.


1. API 키 발급받기


Claude API를 쓰려면 Anthropic 콘솔에 가입하고 API 키를 발급받아야 한다. 새 계정에는 무료 크레딧이 제공되어 곧바로 테스트해볼 수 있다. 발급받은 키는 sk-ant-로 시작하는 문자열 형태이며, 코드에 직접 적지 않고 환경변수(ANTHROPIC_API_KEY)로 저장해서 쓰는 것이 표준적인 방식으로 안내된다. 키가 코드나 깃허브에 그대로 노출되면 다른 사람이 그 키로 요청을 보내고 비용이 내 계정에 청구될 수 있기 때문에, 이 보안 수칙은 반드시 지켜야 한다.


2. 라이브러리 설치와 첫 호출


pip install anthropic


import os

from anthropic import Anthropic


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


message = client.messages.create(

model="claude-sonnet-4-6",

max_tokens=1024,

messages=[

{"role": "user", "content": "파이썬으로 크롤링하는 법 3줄로 설명해줘"}

]

)


print(message.content[0].text)


max_tokens는 응답으로 받을 수 있는 최대 길이를 지정하는 값이고, messages는 대화 내용을 리스트 형태로 담는 부분이다. 앞서 배운 "리스트 안에 딕셔너리" 구조가 여기서도 그대로 쓰이는 걸 볼 수 있다.


3. 시스템 프롬프트로 AI의 역할 지정하기


system 파라미터를 쓰면 AI가 어떤 역할로 답변할지 미리 지정할 수 있다.


message = client.messages.create(

model="claude-sonnet-4-6",

max_tokens=1024,

system="당신은 친절한 고객상담 직원입니다. 항상 공손하고 간결하게 답하세요.",

messages=[

{"role": "user", "content": "환불 규정이 어떻게 되나요?"}

]

)


4. 대화 맥락 유지하기, 멀티턴 대화


API 자체는 상태를 저장하지 않기 때문에, 이전 대화 내용을 기억하게 하려면 매 요청마다 지금까지의 대화 기록 전체를 함께 보내야 한다. 사용자와 AI가 주고받은 메시지를 리스트에 계속 쌓아가면서 전체를 통째로 보내는 방식이다.


conversation = []


def chat(user_input):

conversation.append({"role": "user", "content": user_input})

response = client.messages.create(

model="claude-sonnet-4-6",

max_tokens=1024,

messages=conversation

)

reply = response.content[0].text

conversation.append({"role": "assistant", "content": reply})

return reply


print(chat("파이썬이 뭐야?"))

print(chat("그럼 자바스크립트랑 차이가 뭐야?")) # 이전 대화 맥락 기억함


대화가 길어질수록 매번 보내는 토큰(글자 단위 처리량) 수도 늘어나서 비용과 처리 시간이 증가하기 때문에, 오래된 메시지를 요약해서 대체하거나 최근 몇 개 메시지만 유지하는 방식으로 관리하는 게 실무에서 흔히 쓰이는 전략으로 소개된다.


5. 오류 처리하기


API 호출은 네트워크나 요청 한도 문제로 실패할 수 있기 때문에, try-except로 감싸서 오류에 대응하는 코드를 짜는 게 일반적이다.


from anthropic import APIError, RateLimitError

import time


try:

response = client.messages.create(

model="claude-sonnet-4-6",

max_tokens=1024,

messages=[{"role": "user", "content": "안녕"}]

)

except RateLimitError:

time.sleep(60) # 요청 한도 초과시 잠시 대기 후 재시도

except APIError as e:

print(f"API 오류: {e}")


6. 정리


AI API를 쓰는 흐름은 키 발급 → 환경변수로 안전하게 보관 → messages.create()로 호출 → 응답 텍스트 추출, 이 네 단계로 요약된다. 대화 맥락을 유지하려면 이전 메시지 전체를 매번 함께 보내야 한다는 점, 그리고 API는 클라우드 사용량 기반 과금이라 무분별한 반복 호출은 비용으로 이어진다는 점을 유의해야 한다.