Skip to content
바람부는 자유
Go back
LLM Engineering

LLM API 기초 (Part 1/3)

LLM Engineering (4/21)

  1. LLM 토큰 기본 개념
  2. LLM Tokenizer 추가 학습
  3. LLM Inference 이해하기: 토큰 예측의 마법
  4. LLM API 기초 (Part 1/3)
  5. LLM API 중급 (Part 2/3)
  6. LLM API 고급 (Part 3/3)
  7. System Message 활용하기
  8. LLM을 활용한 회의록 자동 요약 시스템
  9. Multi-Modal AI 기초
  10. Gradio 기본 사용법
  11. Hugging Face 완전 정복: AI 모델의 GitHub
  12. Google Colab 사용해보기: 무료로 GPU 환경에서 AI 모델 실행하기
  13. Tool Use (Function Calling)
  14. LLM 벤치마크 완전 가이드: 모델 성능 평가의 모든 것
  15. Vector Embeddings와 RAG 기초
  16. LangChain vs LiteLLM 비교 가이드
  17. 고급 RAG: 벡터 데이터베이스를 활용한 문서 검색 시스템
  18. RAG 기반 고객 상담 챗봇 만들기
  19. RAG 시스템 평가 (RAG Evaluation)
  20. 고급 RAG 기법 (Advanced RAG Techniques)
  21. 08-1. 데이터셋 개념 정리

이 노트북은 LLM API 시리즈의 첫 번째 파트로, 대형 언어 모델 API의 기본 개념과 사용법을 다룹니다.

학습 목표

목표설명
LLM API 이해대형 언어 모델 API의 개념과 구조
환경 설정API 키 발급 및 설정 방법
메시지 구조role과 messages 배열 이해
첫 API 호출OpenAI API 기본 사용법
기본 활용요약, 번역, Q&A 예시

시리즈 구성

사전 요구사항


1. LLM API란?

대형 언어 모델(LLM) API는 HTTP 요청을 통해 AI 모델에 접근하는 인터페이스입니다. 텍스트 생성, 요약, 번역, 코드 작성 등 다양한 작업을 수행할 수 있습니다.

주요 LLM 제공업체

제공업체대표 모델특징
OpenAIGPT-4o, GPT-4.1업계 표준 API, 가장 널리 사용
AnthropicClaude 3.5/4긴 컨텍스트(200K), 안전성 강조
GoogleGemini 2.0멀티모달, 무료 티어 제공
MetaLlama 3오픈소스, 로컬 실행 가능

API 호출 흐름

[사용자 코드] → HTTP POST 요청 → [LLM 서버] → JSON 응답 → [결과 처리]

2. 환경 설정

API 키 발급

각 서비스에서 API 키를 발급받아야 합니다:

서비스발급 링크무료 티어
OpenAIhttps://platform.openai.com유료
Anthropichttps://console.anthropic.com유료
Google AIhttps://aistudio.google.com무료 티어 있음

.env 파일 설정

프로젝트 루트에 .env 파일을 생성하고 API 키를 추가합니다:

OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=AI...

주의: .env 파일은 절대 Git에 커밋하지 마세요! .gitignore에 추가하세요.

# 필요한 라이브러리 설치 (필요시 주석 해제)
# !pip install openai anthropic python-dotenv
import os
from dotenv import load_dotenv
from openai import OpenAI
from IPython.display import Markdown, display

# 환경변수 로드
load_dotenv(override=True)
True
# API 키 확인 함수
def check_api_key(name: str, key: str | None, prefix_len: int = 5) -> None:
    """API 키 존재 여부를 확인하고 앞부분만 출력합니다."""
    if key:
        print(f"  {name}: {key[:prefix_len]}...")
    else:
        print(f"  {name}: 설정되지 않음")

# API 키 로드 및 확인
openai_api_key = os.getenv("OPENAI_API_KEY")
anthropic_api_key = os.getenv("ANTHROPIC_API_KEY")
google_api_key = os.getenv("GOOGLE_API_KEY")

print("=== API 키 상태 ===")
check_api_key("OPENAI_API_KEY", openai_api_key)
check_api_key("ANTHROPIC_API_KEY", anthropic_api_key)
check_api_key("GOOGLE_API_KEY", google_api_key)
=== API 키 상태 ===
  OPENAI_API_KEY: sk-pr...
  ANTHROPIC_API_KEY: sk-an...
  GOOGLE_API_KEY: AIzaS...
# OpenAI 클라이언트 초기화
client = OpenAI()  # OPENAI_API_KEY 환경변수를 자동으로 사용

3. 메시지 구조 이해

LLM API 를 사용하여 전송되는 메세지는 일반적으로 아래와 같이 메시지 배열 형태로 구성됩니다..

기본 구조

{
  "model": "gpt-4o-mini",
  "messages": [
    {"role": "system", "content": "당신은 친절한 AI입니다."},
    {"role": "user", "content": "안녕하세요!"},
    {"role": "assistant", "content": "안녕하세요! 무엇을 도와드릴까요?"},
    {"role": "user", "content": "파이썬에 대해 알려주세요."}
  ]
}

메시지 역할(Role)

역할설명필수 여부
systemAI의 행동 지침, 페르소나 설정선택
user사용자의 질문이나 요청필수
assistantAI의 이전 응답 (대화 이력)선택

핵심 포인트

# 메시지 구조 예시
messages = [
    {"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다. 간결하게 답변하세요."},
    {"role": "user", "content": "파이썬이란 무엇인가요?"}
]

# 메시지 구조 확인
print("=== 메시지 구조 ===")
for i, msg in enumerate(messages):
    print(f"[{i}] role: {msg['role']}, content: {msg['content'][:30]}...")
=== 메시지 구조 ===
[0] role: system, content: 당신은 친절한 AI 어시스턴트입니다. 간결하게 답변하세...
[1] role: user, content: 파이썬이란 무엇인가요?...

4. 첫 번째 API 호출

이제 실제로 OpenAI API를 호출해봅니다.

# 기본 API 호출
client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다."},
        {"role": "user", "content": "안녕하세요! 간단히 자기소개 해주세요."}
    ]
)

# 응답 출력
print("=== AI 응답 ===")
print(response.choices[0].message.content)
=== AI 응답 ===
안녕하세요! 저는 AI 어시스턴트입니다. 다양한 질문에 답하고, 정보를 제공하며, 여러 주제에 대해 대화할 수 있도록 도와드립니다. 필요하신 내용이 있으면 언제든지 말씀해 주세요!

응답 객체 구조

API 응답에는 생성된 텍스트 외에도 다양한 메타데이터가 포함됩니다.

필드설명
id요청 고유 식별자
model실제 사용된 모델명
choices[0].message.content생성된 응답 텍스트
choices[0].finish_reason종료 이유 (stop, length 등)
usage.prompt_tokens입력 토큰 수
usage.completion_tokens출력 토큰 수
# 응답 객체 상세 확인
print("=== 응답 객체 상세 ===")
print(f"ID: {response.id}")
print(f"Model: {response.model}")
print(f"Finish Reason: {response.choices[0].finish_reason}")
print(f"\n--- 토큰 사용량 ---")
print(f"입력 토큰: {response.usage.prompt_tokens}")
print(f"출력 토큰: {response.usage.completion_tokens}")
print(f"총 토큰: {response.usage.total_tokens}")
=== 응답 객체 상세 ===
ID: chatcmpl-D7wAcrmOpfFrh7QH7AD9qSP4OXYxf
Model: gpt-4o-mini-2024-07-18
Finish Reason: stop

--- 토큰 사용량 ---
입력 토큰: 36
출력 토큰: 50
총 토큰: 86
# 전체 응답을 JSON으로 확인
print("=== 전체 응답 (JSON) ===")
print(response.model_dump_json(indent=2))
=== 전체 응답 (JSON) ===
{
  "id": "chatcmpl-D7wAcrmOpfFrh7QH7AD9qSP4OXYxf",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "안녕하세요! 저는 AI 어시스턴트입니다. 다양한 질문에 답하고, 정보를 제공하며, 여러 주제에 대해 대화할 수 있도록 도와드립니다. 필요하신 내용이 있으면 언제든지 말씀해 주세요!",
        "refusal": null,
        "role": "assistant",
        "annotations": [],
        "audio": null,
        "function_call": null,
        "tool_calls": null
      }
    }
  ],
  "created": 1770784274,
  "model": "gpt-4o-mini-2024-07-18",
  "object": "chat.completion",
  "service_tier": "default",
  "system_fingerprint": "fp_f4ae844694",
  "usage": {
    "completion_tokens": 50,
    "prompt_tokens": 36,
    "total_tokens": 86,
    "completion_tokens_details": {
      "accepted_prediction_tokens": 0,
      "audio_tokens": 0,
      "reasoning_tokens": 0,
      "rejected_prediction_tokens": 0
    },
    "prompt_tokens_details": {
      "audio_tokens": 0,
      "cached_tokens": 0
    }
  }
}

5. 기본 활용 예시

LLM API의 대표적인 활용 사례를 살펴봅니다.

활용 사례 요약

활용 사례system prompt 역할특징
텍스트 요약요약 전문가 역할핵심 내용 추출
번역번역가 역할문맥 유지
Q&A특정 분야 전문가정확한 답변
# 공통 헬퍼 함수
def ask_llm(system_prompt: str, user_message: str, model: str = "gpt-4o-mini") -> str:
    """시스템 프롬프트와 사용자 메시지로 LLM을 호출합니다."""
    response = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_message}
        ]
    )
    return response.choices[0].message.content

5.1 텍스트 요약

긴 텍스트에서 핵심 내용만 추출합니다.

# 텍스트 요약
summarize_prompt = """당신은 텍스트 요약 전문가입니다.
주어진 텍스트를 3문장 이내로 핵심만 요약해주세요."""

long_text = """
인공지능(AI)은 인간의 학습능력, 추론능력, 지각능력, 자연언어 이해능력 등을 
컴퓨터 프로그램으로 실현한 기술입니다. 최근 딥러닝의 발전으로 AI는 이미지 인식, 
자연어 처리, 게임, 자율주행 등 다양한 분야에서 인간을 능가하는 성능을 보여주고 있습니다.
특히 GPT, Claude 등 대형 언어 모델(LLM)의 등장으로 AI는 글쓰기, 코딩, 분석 등 
지식 노동 영역에서도 활용되고 있습니다.
"""

summary = ask_llm(summarize_prompt, long_text)
print("=== 요약 결과 ===")
print(summary)
=== 요약 결과 ===
인공지능(AI)은 학습, 추론, 지각 및 언어 이해 능력을 컴퓨터 프로그램으로 구현한 기술이다. 최근 딥러닝 발전 덕분에 AI는 이미지 인식, 자연어 처리 등에서 뛰어난 성능을 보이고 있다. 특히 대형 언어 모델(LLM)의 등장으로 AI는 글쓰기, 코딩, 분석 등 지식 노동 분야에서도 활용되고 있다.

5.2 번역

한국어를 영어로 자연스럽게 번역합니다.

# 번역
translate_prompt = """당신은 전문 번역가입니다.
한국어를 영어로 자연스럽게 번역해주세요.
직역보다는 의역을 선호하며, 원문의 뉘앙스를 살려주세요."""

korean_text = "오늘 날씨가 정말 좋네요. 산책하기 딱 좋은 날이에요!"

translation = ask_llm(translate_prompt, korean_text)
print("=== 번역 결과 ===")
print(f"원문: {korean_text}")
print(f"번역: {translation}")
=== 번역 결과 ===
원문: 오늘 날씨가 정말 좋네요. 산책하기 딱 좋은 날이에요!
번역: The weather is absolutely wonderful today. It's a perfect day for a walk!

5.3 Q&A (질문-답변)

특정 분야의 전문가로 설정하여 질문에 답변합니다.

# Q&A
qa_prompt = """당신은 Python 프로그래밍 튜터입니다.
초보자도 이해할 수 있도록 쉽고 명확하게 설명해주세요.
필요하면 간단한 예시 코드도 포함해주세요."""

question = "파이썬에서 리스트와 튜플의 차이점이 뭔가요?"

answer = ask_llm(qa_prompt, question)
print("=== Q&A 결과 ===")
print(f"Q: {question}\n")
display(Markdown(answer))
=== Q&A 결과 ===
Q: 파이썬에서 리스트와 튜플의 차이점이 뭔가요?
<IPython.core.display.Markdown object>

6. 실습: 나만의 프롬프트 만들기

아래 셀을 수정하여 다양한 system prompt를 실험해보세요.

# 실습: 나만의 프롬프트
my_system_prompt = """당신은 _____입니다.
_____ 방식으로 답변해주세요."""

my_question = "여기에 질문을 입력하세요"

# 실행
# result = ask_llm(my_system_prompt, my_question)
# display(Markdown(result))

7. 요약

이번 노트북에서 학습한 내용:

주제핵심 내용
LLM APIHTTP 요청으로 AI 모델에 접근하는 인터페이스
환경 설정.env 파일에 API 키 저장, python-dotenv로 로드
메시지 구조system/user/assistant 역할로 대화 구성
응답 객체choices[0].message.content로 텍스트, usage로 토큰 확인
활용 예시요약, 번역, Q&A 등 system prompt로 역할 지정

다음 단계

Part 2 (중급) 에서 다룰 내용:


Share this post on:

Previous Post
LLM API 중급 (Part 2/3)
Next Post
LLM Inference 이해하기: 토큰 예측의 마법