logo

LLM을 API로 활용하기

LLM API 사용법 실습

OpenAI API 결제 수단 등록

  • https://platform.openai.com
  • 우상단 톱니바퀴 -> 좌측 메뉴의 Billing -> 가운데 메뉴의 Payment methods -> add payment method -> 신용카드 등록
  • Billing 메뉴로 돌아와 Add to credit balance를 누르고 충전(최소 5달러)

OpenAI Project Key

  • 왼쪽 상단 Default project 클릭 -> Create Project
  • 우상단 메뉴 Dashboard -> 왼쪽 메뉴 API Keys -> create new secret key
  • 복사한 비밀 키를 openai-api-key.txt 파일에 붙여 넣고 저장 후 colab에 업로드
  • 키를 환경 변수에 설정
import os

os.environ['OPENAI_API_KEY'] = open('openai-api-key.txt').read()

OpenAI API의 변화

구분Completions APIChat Completions APIResponses API (최신)
주요 입력 구조prompt (단일 문자열)messages[] (역할·내용)input[] (다중 모달) + 서버 측 상태 유지
대화 관리클라이언트가 매번 전체 컨텍스트 포함클라이언트가 매번 전체 컨텍스트 포함서버가 대화 기억
도구 활용지원 안 함함수 호출함수 호출 + 웹 검색, 파일 검색, PC 조작 등 내장 도구

OpenAI API 사용

  • 설치
!pip install openai
  • 클라이언트
from openai import OpenAI

client = OpenAI()
  • 환경변수 OPENAI_API_KEY에서 키를 읽어 옴
  • 클라이언트를 초기화 하기 전에 환경변수 설정 필요

자연어 생성

response = client.responses.create(
    model="gpt-4.1",
    input="'생성형 AI 수업 너무 재밌어요'를 긍정/부정/중립으로 평가해라"
)

print(response)

client.responses.create 인자

  • 필수
    • model: 사용할 모델 이름. 예: "gpt-5.1-mini", "gpt-4.1" 등.
    • input: 모델에 넘길 입력. 간단한 경우엔 문자열 하나, 복잡한 경우 멀티모달/대화형 구조(역할+콘텐츠 배열)를 넣음.
  • 생성 품질/샘플링 관련 옵션
    • max_output_tokens: 한 응답에서 생성할 최대 토큰 수. 너무 작으면 말이 끊김.
    • temperature: 0~2 근처. 높을수록 창의적이고 랜덤함, 낮을수록 결정적·보수적인 답변.
    • top_p: nucleus sampling. 1에 가까우면 다양, 낮추면 보수적. 보통 temperature랑 둘 중 하나만 조정.
  • Reasoning 모델 옵션
    • reasoning: { effort: "low" | "medium" | "high" }. 추론량과 속도·비용 트레이드오프를 제어.
    • gpt-5.1에는 effort: "none" 옵션이 추가(추론을 가장 적게 함)

구조화된 출력

  • 모델이 항상 제공된 내용을 준수하는 응답을 생성하도록 보장하는 기능
  • 장점:
    • 잘못 포맷된 응답을 검증하거나 다시 시도할 필요가 없음
    • 모델이 생성을 거부할 경우는 프로그래밍 방식으로 감지할 수 있음
    • 프롬프트를 간단하게 만들어도 일관된 형식의 답을 얻을 수 있음
  • Python을 이용할 경우 데이터 검증을 위한 라이브러리인 Pydantic을 이용하여 출력 형식을 지정할 수 있음

예시: 수학문제 풀기

  • 답변 형식 정의
from openai import OpenAI
from pydantic import BaseModel

class Step(BaseModel):
    explanation: str
    output: str

class MathReasoning(BaseModel):
    steps: list[Step]
    final_answer: str

response = client.responses.parse(
    model="gpt-4o",
    input="방정식 8x + 7 = -23 을 한국어로 풀어라",
    text_format=MathReasoning,
)

response.output_parsed

예시: 감성 분석

from enum import Enum
from pydantic import BaseModel, Field

class Sentiment(str, Enum):  # 감성은 다음 3가지 중에 하나로 정의
    positive = '긍정'
    negative = '부정'
    neutral = '중립'

class SentimentAnalysis(BaseModel):
    text: str             # 텍스트 문자열
    sentiment: Sentiment  # 감성(긍정/부정/중립)
    keywords: str = Field(description="문장에 포함된 감정 단어 목록")

response = client.responses.parse(
    model="gpt-5",
    input="'생성형 AI 수업 너무 재밌어요'를 긍정/부정/중립으로 평가해라",
    text_format=SentimentAnalysis
)

response.output_parsed

예시: 토큰 분류

class Label(str, Enum):
    DT = '날짜'
    LC = '장소'
    PS = '사람'

class Entity(BaseModel):
    named_entity: str
    label: Label

class NER(BaseModel):
    entities: list[Entity]

response = client.responses.parse(
    model="gpt-5",
    input="""다음 내용을 개체명 인식을 하여 날짜/장소/사람으로 각 토큰을 분류해라
오늘 12시 서울특별시 성북구에 있는 국민대 경영대학원에서
유재명 교수가 1가지 주제로 수업을 한다.""",
    text_format=NER
)

response.output_parsed