Python & AI Tutorials Logo
LangChain & LangGraph

1. 설정과 첫 성공

Python으로 AI 에이전트(agent)를 구축하는 여정에 오신 것을 환영합니다! 이 장을 마치면 대규모 언어 모델(LLM, Large Language Model)에 대한 첫 번째 성공적인 호출을 수행하고, 그 뒤에서 정확히 어떤 일이 일어났는지 이해하게 됩니다. 이는 이후 모든 내용을 위한 기반이 됩니다.

사전 준비 사항

대상 독자 & 전제

이 책은 AI 에이전트를 만들고 싶지만 LLM이나 AI 프레임워크 경험이 없는 Python 개발자를 위해 작성되었습니다. 여러분이 다음에 익숙하다고 가정합니다:

  • Python 기본기: 함수, 클래스, import, 기본 자료구조
  • Python 3.10 이상: 시스템에 Python 3.10 또는 그 이상 버전이 설치되어 있어야 합니다
  • 가상 환경: python -m venv로 venv 생성 및 활성화
  • 패키지 관리: pip로 패키지 설치
  • 환경 변수: 셸에서 환경 변수 설정 및 읽기
  • API 키: API 키가 무엇인지와 서비스 제공자에게서 발급받는 방법 이해

이 중 어떤 개념이 낯설다면, 계속하기 전에 별도로 복습하는 것을 권장합니다. Python 문서와 가상 환경 및 pip 튜토리얼은 훌륭한 시작점입니다.

우리가 가정하지 않는 것: 머신러닝, 신경망, 트랜스포머(transformer), AI 이론에 대한 배경지식은 필요하지 않습니다. LLM 관련 개념은 마주칠 때마다 설명하되, 항상 익숙한 프로그래밍 패턴과 연결해 설명하겠습니다.

모델 규칙

이 책 전반에서 예제의 기본 모델로 GPT-5-mini를 사용합니다. 이유는 다음과 같습니다:

  • 폭넓은 사용 가능성: OpenAI API는 전 세계에서 간단한 가입 절차로 접근할 수 있습니다
  • 적절한 속도: minimal reasoning 설정에서는 반복 개발에 충분히 빠른 응답을 제공합니다
  • 비용 효율적: (2026년 기준) 입력 토큰 100만 개당 $0.25, 출력 토큰 100만 개당 $2.00으로 학습과 실험에 적합한 가격입니다
  • 충분한 성능: 실용적인 AI 에이전트 작업의 대다수를 잘 처리합니다

명시적으로 모델을 지정하지 않은 코드 예제를 보게 되면 GPT-5-mini를 사용한다고 가정하세요. 2장에서는 사용 가능한 모델의 전체 지형(Claude, Gemini, 기타 GPT 변형)을 살펴보고, 컨텍스트 윈도우 크기, 비용, 특화된 기능에 따라 언제 대안을 선택할지 논의하겠습니다.

1.1) LLM이란 무엇인가?

코드를 작성하기 전에, 우리가 실제로 무엇을 다루는지부터 정리해 보겠습니다. 대규모 언어 모델(LLM, Large Language Model)은 방대한 텍스트 데이터로 학습되어, 시퀀스에서 다음에 어떤 텍스트가 와야 하는지 예측하는 신경망입니다.

이를 아주 정교한 자동완성 시스템이라고 생각해 보세요. 휴대폰에 타이핑할 때 다음 단어를 제안해 주는 것은 LLM이 하는 일의 단순한 버전입니다. 하지만 LLM은 규모와 정교함이 달라 다음과 같은 일을 가능하게 합니다:

  • 질문에 대해 일관성 있고 맥락에 맞는 응답 생성
  • 코드, 에세이, 이메일 및 기타 구조화된 콘텐츠 작성
  • 언어 간 번역
  • 긴 문서 요약
  • 비정형 텍스트에서 정보 추출
  • 그리고 훨씬 더 많은 것들

LLM은 전통적인 소프트웨어와 어떻게 다른가

전통적인 소프트웨어는 여러분이 프로그래밍한 명시적인 규칙을 따릅니다:

python
def calculate_discount(price, customer_type):
    if customer_type == "premium":
        return price * 0.8  # 프리미엄 20% 할인
    elif customer_type == "regular":
        return price * 0.95  # 일반 5% 할인
    else:
        return price

이 함수는 같은 입력에 대해 언제나 같은 출력을 생성합니다. 로직이 명확하고 예측 가능합니다.

LLM은 다르게 동작합니다. 명시적인 규칙 대신, 학습 데이터에서 배운 패턴을 사용해 응답을 생성합니다. 여러분은 입력 텍스트(이를 프롬프트(prompt)라고 함)를 제공하고, 모델은 출력 텍스트(이를 컴플리션(completion) 또는 응답(response)이라고 함)를 생성합니다.

python
# 개념적 예시 - 곧 실제 코드를 작성할 것입니다
response = llm.generate("프리미엄 고객에게 적합한 할인율은 무엇인가요?")
# 출력 예시: "프리미엄 고객은 일반적으로 15-25%의 할인을 받습니다..."

LLM에는 하드코딩된 할인율이 없습니다. 학습 과정에서 익힌 패턴을 바탕으로 응답을 생성합니다. 이는 다음을 의미합니다:

  1. 응답은 달라질 수 있습니다: 같은 프롬프트라도 매번 약간씩 다른 응답이 나올 수 있습니다
  2. 행동은 프로그래밍되는 것이 아니라 학습됩니다: 명시적 로직을 쓰는 대신 프롬프트로 모델을 유도합니다
  3. 능력은 스케일에서 발현됩니다: 명시적으로 학습되지 않은 작업도 처리할 수 있습니다

핵심 용어

앞으로 계속 마주치게 될 용어들을 정의해 보겠습니다:

  • 프롬프트(prompt): 모델에 보내는 입력 텍스트입니다. "질문" 또는 "지시"라고 생각하면 됩니다
  • 컴플리션/응답(completion/response): 프롬프트에 대한 응답으로 모델이 생성한 텍스트입니다
  • 토큰(token): LLM이 다루는 기본 단위입니다. 대략 1 토큰 ≈ 4글자 또는 단어의 ¾ 정도입니다. "Hello world"는 약 2토큰입니다
  • 컨텍스트 윈도우(context window): 모델이 한 번에 처리할 수 있는 텍스트의 최대량(토큰 기준)입니다. GPT-5-mini는 400K 토큰 컨텍스트 윈도우를 가집니다
  • 온도(temperature): 무작위성을 제어하는 파라미터입니다. 낮을수록(0.0-0.3) 더 집중되고 결정적입니다. 높을수록(0.7-1.0) 더 창의적이고 다양합니다

LLM이 할 수 있는 것과 할 수 없는 것

LLM이 실제로 무엇을 하는지, 그리고 단지 할 수 있는 것처럼 보이는 것은 무엇인지 이해하는 것은 견고한 AI 에이전트를 구축하는 데 필수적입니다.

LLM이 뛰어난 것:

  • 자연어 이해 및 생성: 의도를 파악하고, 일관성 있는 응답을 생성하며, 복잡한 표현을 다룰 수 있습니다
"환불을 원합니다" → 의도 인식: refund_request
"이 문서를 요약해주세요" → 간결한 요약 생성
  • 프롬프트의 지시 따르기: 명확한 지시가 주어지면 JSON이나 형식화된 텍스트 같은 구조화된 출력을 생성할 수 있습니다
"JSON으로 변환: John Smith, 32살, Boston 거주"
→ {"name": "John Smith", "age": 32, "city": "Boston"}
  • 텍스트의 패턴 인식: 감정 분석, 분류, 정보 추출 작업을 신뢰성 있게 수행합니다

  • 코드 및 구조화된 콘텐츠 생성: 적절히 프롬프트하면 유효한 Python, SQL 또는 기타 형식의 출력을 작성할 수 있습니다

  • 단계별 추론: "단계별로 생각하라"고 명시적으로 지시하면, 문제를 체계적으로 분해합니다

LLM의 한계:

  • 데이터베이스가 아님: 사실을 검색하는 것이 아니라 통계적으로 그럴듯한 텍스트를 생성합니다. 권위 있어 보이지만 잘못된 정보를 자신 있게 진술할 수 있습니다.
"Python 4.0은 언제 출시되었나요?"
→ "Python 4.0은 2023년에 출시되었습니다" (거짓이지만 그럴듯함)
  • 계산기가 아님: 계산하기보다는 답이 어떻게 보여야 하는지 예측합니다. 간단한 산술은 종종 작동하지만, 복잡한 수학은 예측 불가능하게 실패합니다.
"8,247 × 6,839는?" → 그럴듯해 보이지만 틀린 결과를 낼 수 있음
  • 결정적(deterministic)이지 않음: 동일한 프롬프트에도 매번 다른 결과가 나올 수 있습니다. 이 변동성은 temperature 파라미터로 조절됩니다.

  • 항상 정확하지는 않음: 사실 여부와 무관하게 그럴듯한 텍스트를 만들어냅니다. "환각(hallucination)"—구체적이고 확신에 찬, 그러나 완전히 지어낸 정보—이 자주 나타납니다.

핵심 통찰: LLM(이해와 의사결정용)과 전통적 도구(계산, 데이터 검색, 사실 작업용)를 결합하는 에이전트를 구축하세요. 이 패턴은 13장부터 구현하며, LLM이 수학을 직접 시도하기보다 계산기를 언제 사용할지 결정하게 됩니다.

이 책에서 배울 내용

이 책에서는 AI 에이전트를 구축하는 방법을 배웁니다. 미리 정해진 로직을 따르는 대신, LLM이 목표를 달성하기 위해 어떤 행동을 취할지 자율적으로 결정하는 시스템입니다. 2장에서 이 패러다임을 깊이 있게 탐구합니다.

1.2) 의존성 설치

이제 개발 환경을 설정해 보겠습니다. 깔끔한 프로젝트 구조를 만들고, AI 에이전트를 구축하는 데 사용할 프레임워크인 LangChain을 설치합니다.

Python 설치 확인

먼저 시스템에 Python이 설치되어 있는지 확인하세요. Python 3.10 이상을 권장합니다(2026년 기준, Python 3.13 또는 3.14가 좋은 선택입니다).

Python 버전을 확인하세요:

bash
python --version
# 또는
python3 --version

Python 3.13.x 또는 Python 3.14.x 같은 출력이 보여야 합니다.

Python이 설치되지 않은 경우:

  • macOS:

    • python.org에서 다운로드
    • 또는 Homebrew 사용: brew install python@3.14
  • Windows:

    • python.org에서 다운로드
    • 설치 중 "Add Python to PATH" 체크
  • Linux:

    • Ubuntu/Debian: sudo apt update && sudo apt install python3.14
    • Fedora: sudo dnf install python3.14

설치 후 다시 python --version으로 확인하세요.

참고: 일부 시스템에서는 python 대신 python3를 사용해야 할 수 있습니다. 이 책 전체에서 python이 작동하지 않으면 python3를 시도하세요.

프로젝트 생성

터미널을 열고 프로젝트용 새 디렉터리를 만드세요:

bash
mkdir agentic-ai-project
cd agentic-ai-project

의존성을 분리하기 위해 가상 환경을 생성합니다:

bash
python -m venv venv

가상 환경을 활성화합니다:

bash
# macOS/Linux:
source venv/bin/activate
 
# Windows:
venv\Scripts\activate

터미널 프롬프트에 (venv)가 표시되어 가상 환경이 활성화되었음을 알 수 있을 것입니다.

LangChain과 OpenAI 설치

OpenAI 모델을 사용하는 데 필요한 모든 것이 포함된 LangChain의 OpenAI 통합을 설치합니다:

bash
pip install langchain-openai

이는 langchain-openai를 의존성들과 함께 설치하며, 여기에는 langchain-core(핵심 LangChain 추상화)와 OpenAI Python 클라이언트가 포함됩니다. 여러 패키지의 설치를 확인하는 출력이 보일 것입니다.

설치를 확인합니다:

bash
pip show langchain-openai

버전 번호와 위치를 포함한 설치된 패키지의 상세 정보가 보일 것입니다. 이것으로 설치가 성공했음을 확인할 수 있습니다.

OpenAI API 키 받기

OpenAI 모델을 호출하려면 API 키가 필요합니다:

  1. platform.openai.com으로 이동
  2. 가입 또는 로그인
  3. 계정 설정에서 API Keys로 이동
  4. "Create new secret key" 클릭
  5. 키를 복사(sk-로 시작합니다)

⚠️ 보안 경고: 이 키는 비밀번호처럼 다루세요. 버전 관리 시스템에 커밋하거나 공개적으로 공유하지 마세요. 누구든 당신의 키를 가지고 있으면 당신의 계정으로 청구되는 API 호출을 할 수 있습니다.

API 키를 환경 변수로 설정하기

API 키를 제공하는 권장 방법은 환경 변수를 사용하는 것입니다:

bash
# macOS/Linux:
export OPENAI_API_KEY='sk-your-actual-key-here'
 
# Windows (Command Prompt):
set OPENAI_API_KEY=sk-your-actual-key-here
 
# Windows (PowerShell):
$env:OPENAI_API_KEY='sk-your-actual-key-here'

참고: 이 설정은 임시이며 터미널을 닫으면 사라집니다. 영구적인 해결책으로는 다음을 선택할 수 있습니다:

  • export 명령을 셸 설정 파일(.bashrc, .zshrc 등)에 추가
  • .env 파일 사용(더 나은 프로젝트 구성을 위해 3장에서 설정합니다)

지금은 임시 설정으로 계속 진행하기에 충분합니다.

설정되었는지 확인합니다:

bash
# macOS/Linux:
echo $OPENAI_API_KEY
 
# Windows (Command Prompt):
echo %OPENAI_API_KEY%
 
# Windows (PowerShell):
echo $env:OPENAI_API_KEY

API 키가 출력되어야 합니다. 출력되지 않으면 export/set 명령을 반복하고 오타가 없는지 확인하세요.

1.3) 첫 번째 LLM 호출

이제 흥미로운 부분입니다. LLM에 대한 첫 호출을 해보겠습니다. first_call.py라는 파일을 만드세요:

python
# first_call.py
from langchain_openai import ChatOpenAI
 
# LLM을 초기화합니다
llm = ChatOpenAI(model="gpt-5-mini")
 
# 프롬프트를 보내고 응답을 받습니다
response = llm.invoke("LangChain이란 무엇인가요?")
 
# 응답을 출력합니다
print(response.content)

실행합니다:

bash
python first_call.py

다음과 유사한 출력을 볼 수 있습니다 (정확한 표현은 다를 수 있습니다):

LangChain은 대규모 언어 모델(LLM) 기반 애플리케이션 개발을 단순화하도록 설계된 프레임워크입니다. LLM 호출을 체인으로 구성하고, 외부 데이터 소스를 통합하며, 프롬프트를 관리하고, 다양한 API 및 데이터베이스와 상호작용할 수 있는 에이전트를 만드는 도구와 추상화를 제공합니다. LangChain은 재사용 가능한 컴포넌트와 패턴을 제공하여 복잡한 AI 애플리케이션을 더 쉽게 구축할 수 있게 해줍니다.

축하합니다! 첫 번째 LLM 호출을 해냈습니다. 이제 이 코드에서 어떤 일이 일어났는지 자세히 살펴보겠습니다.

문제 해결: 오류가 발생한다면:

  • AuthenticationError: API 키가 잘못되었거나 설정되지 않음 → 1.2절을 참고하여 OPENAI_API_KEY 환경 변수를 확인하세요
  • RateLimitError: 요청 속도가 너무 빠르거나 사용량 한도 초과 → 몇 초 기다렸다가 다시 시도하거나 platform.openai.com/usage에서 사용량을 확인하세요
  • APIConnectionError: 네트워크 연결 문제 → 인터넷 연결을 확인하세요

코드 이해하기

LLM 래퍼(wrapper) 임포트:

python
from langchain_openai import ChatOpenAI

ChatOpenAI는 OpenAI의 채팅 모델에 대한 LangChain의 래퍼입니다. API 인증, 요청 포맷팅, 응답 파싱을 대신 처리해 줍니다.

모델 초기화:

python
llm = ChatOpenAI(model="gpt-5-mini")

이는 GPT-5-mini를 사용하도록 설정된 인스턴스를 생성합니다. 내부적으로 LangChain은 인증을 위해 OPENAI_API_KEY 환경 변수를 읽습니다. 키를 명시적으로 전달할 수도 있습니다:

python
llm = ChatOpenAI(model="gpt-5-mini", api_key="sk-your-key")

하지만 환경 변수를 사용하는 편이 더 안전하고 유연합니다.

모델 호출:

python
response = llm.invoke("LangChain이란 무엇인가요?")

invoke() 메서드는 프롬프트를 OpenAI API로 보내고, 전체 응답이 올 때까지 기다립니다. 이는 동기(synchronous) 호출이므로, 응답이 도착할 때까지 프로그램이 멈춰 있습니다.

응답 콘텐츠 접근:

python
print(response.content)

응답 객체에는 여러 필드가 있습니다. .content 필드는 모델이 생성한 실제 텍스트를 담고 있습니다. 다음 섹션에서 다른 필드들도 살펴보겠습니다.

다른 프롬프트 시도하기

프롬프트를 바꿔서 모델이 다른 입력에 어떻게 반응하는지 확인해 보세요:

python
# first_call.py
from langchain_openai import ChatOpenAI
 
llm = ChatOpenAI(model="gpt-5-mini")
 
# 서로 다른 프롬프트를 시도해 봅니다
prompts = [
    "Python 데코레이터를 한 문장으로 설명해 주세요.",
    "15 * 23은 얼마인가요?",
    "Python에서 타입 힌트를 사용하는 세 가지 이점을 나열해 주세요.",
]
 
for prompt in prompts:
    response = llm.invoke(prompt)
    print(f"Prompt: {prompt}")
    print(f"Response: {response.content}\n")

설명, 계산, 구조화된 목록 등 서로 다른 유형의 요청을 모델이 어떻게 처리하는지 확인할 수 있습니다. 같은 프롬프트를 여러 번 실행하면 응답이 약간씩 달라질 수 있습니다. 이는 정상적인 동작입니다 - 왜 이런 일이 일어나는지와 이를 제어하는 방법은 2장에서 살펴보겠습니다.

1.4) 방금 무슨 일이 일어난 걸까요? (요청 → 모델 → 응답 흐름)

llm.invoke()를 호출했을 때 정확히 무슨 일이 일어났는지 살펴보겠습니다. 이 흐름을 이해하는 것은 신뢰할 수 있는 AI 에이전트를 구축하는 데 매우 중요합니다.

전체 요청-응답 사이클

GPT-5-miniOpenAI APILangChain Library내 코드GPT-5-miniOpenAI APILangChain Library내 코드llm.invoke("LangChain이란 무엇인가요?")API 키로 요청 포맷팅POST /v1/chat/completions프롬프트 처리응답 생성JSON 응답 반환응답 파싱AIMessage 객체 반환

각 단계를 따라가 보겠습니다:

1단계: 내 코드가 invoke() 호출

python
response = llm.invoke("LangChain이란 무엇인가요?")

invoke() 메서드는 LLM에 접근하는 주요 인터페이스입니다. 프롬프트 문자열을 넘기면 모델의 답변을 담은 응답 객체를 돌려받습니다. 이 단순한 호출 뒤에서 여러 단계가 자동으로 진행됩니다.

2단계: LangChain이 요청을 포맷팅

LangChain은 문자열을 구조화된 API 요청으로 변환합니다. 내부적으로는 다음과 같은 JSON 페이로드를 만듭니다:

json
{
  "model": "gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "LangChain이란 무엇인가요?"
    }
  ],
  "temperature": 1.0
}

messages 배열은 채팅 모델이 입력을 받는 방식입니다. 각 메시지는 role(user, assistant, system)과 content(텍스트)를 가집니다. 메시지 역할은 4장에서 다룹니다.

3단계: OpenAI API 호출

LangChain은 OpenAI API 엔드포인트로 HTTPS POST 요청을 보냅니다:

POST https://api.openai.com/v1/chat/completions
Authorization: Bearer sk-your-api-key
Content-Type: application/json
 
{request payload}

API 키가 요청을 인증합니다. OpenAI 서버는 요청을 받고 지정된 모델로 라우팅합니다.

4단계: 모델이 프롬프트를 처리

GPT-5-mini는 프롬프트를 받아 토큰 단위로 응답을 생성합니다. 모델은:

  1. 텍스트를 토큰(숫자 표현)으로 변환합니다
  2. 토큰을 신경망 레이어를 통해 처리합니다
  3. 가장 가능성이 높은 다음 토큰을 예측합니다
  4. 완성된 응답을 생성하거나 중지 조건에 도달할 때까지 반복합니다

이 과정은 OpenAI 서버에서 일어나며, 여러분의 코드는 결과를 기다리기만 합니다.

5단계: API가 응답을 반환

OpenAI API는 JSON 응답을 돌려줍니다:

json
{
  "id": "chatcmpl-8x7y9z",
  "object": "chat.completion",
  "created": 1704067200,
  "model": "gpt-5-mini",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "LangChain은 LLM 기반 애플리케이션 개발을 단순화하도록 설계된 프레임워크입니다..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 58,
    "total_tokens": 70
  }
}

핵심 필드:

  • message.content: 생성된 텍스트
  • usage: 과금 및 모니터링을 위한 토큰 수
  • finish_reason: 생성이 멈춘 이유("stop" = 자연스럽게 완료, "length" = 토큰 제한 도달)

6단계: LangChain이 응답을 파싱

LangChain은 JSON을 여러분이 다룰 수 있는 Python 객체로 변환합니다:

python
from langchain_openai import ChatOpenAI
 
llm = ChatOpenAI(model="gpt-5-mini")
response = llm.invoke("LangChain이란 무엇인가요?")
 
# 응답 객체를 살펴봅니다
print(f"Content: {response.content}")
print(f"Type: {type(response)}")
print(f"Response metadata: {response.response_metadata}")

출력:

Content: LangChain은 ... 단순화하도록 설계된 프레임워크입니다...
Type: <class 'langchain_core.messages.ai.AIMessage'>
Response metadata: {'token_usage': {'completion_tokens': 58, 'prompt_tokens': 12, 'total_tokens': 70}, 'model_name': 'gpt-5-mini', 'finish_reason': 'stop'}

응답은 여러 유용한 속성을 가진 AIMessage 객체입니다:

  • content: 생성된 텍스트(대부분 이것이 필요합니다)
  • response_metadata: 토큰 사용량, 모델 이름, 종료 사유
  • id: 이 응답의 고유 식별자
  • usage_metadata: 상세 토큰 분해 정보

토큰 사용량 이해하기

토큰 수를 살펴보기 전에 짧은 참고: 토큰(tokens)은 LLM이 처리하는 기본 단위입니다. 영어 텍스트는 일반적으로 단어당 1개를 약간 넘는 토큰을 사용합니다(예: "explain quantum computing" = 3 단어, 4-5 토큰). 하지만 한국어나 중국어 같은 비영어권 언어는 같은 텍스트를 표현하는 데 훨씬 더 많은 토큰이 필요합니다. 토큰에 대해서는 2장에서 더 자세히 살펴보겠습니다.

토큰 소비를 더 자세히 살펴보겠습니다:

python
from langchain_openai import ChatOpenAI
 
llm = ChatOpenAI(model="gpt-5-mini")
response = llm.invoke("양자 컴퓨팅을 간단한 용어로 설명해 주세요.")
 
usage = response.response_metadata['token_usage']
print(f"Input tokens: {usage['prompt_tokens']}")
print(f"Output tokens: {usage['completion_tokens']}")
print(f"Total tokens: {usage['total_tokens']}")

출력:

Input tokens: 11
Output tokens: 95
Total tokens: 106

참고: prompt_tokens = 입력 토큰(프롬프트), completion_tokens = 출력 토큰(모델의 응답), total_tokens = 둘의 합계.

토큰 소비는 다음에 따라 달라집니다:

  • 프롬프트 길이: 프롬프트가 길수록 입력 토큰을 더 많이 사용합니다
  • 응답 상세도: 자세한 응답일수록 더 많은 출력 토큰을 생성합니다
  • 언어 복잡도: 기술 용어와 코드는 토큰화 방식이 다를 수 있습니다

예를 들어, "2+2는?"처럼 짧은 프롬프트는 입력 토큰 5-6개와 출력 토큰 8-10개만 사용하는 반면, "Python 프로그래밍 언어의 역사에 대해 자세한 에세이를 써 주세요"는 입력 토큰 15-20개와 출력 토큰 500개 이상을 사용할 수 있습니다.

위 예제의 비용 계산:

GPT-5-mini의 가격(입력 토큰 100만 개당 $0.25, 출력 토큰 100만 개당 $2.00) 기준:

  • 입력: 11 토큰 × $0.25 / 1,000,000 = $0.00000275
  • 출력: 95 토큰 × $2.00 / 1,000,000 = $0.00019
  • 합계: ~$0.0002 (0.02센트)

입력 토큰과 출력 토큰 모두에 비용이 들지만, 출력 토큰이 더 비쌉니다(이 경우 8배).

배운 내용

이제 LLM 호출의 전체 라이프사이클을 이해했습니다:

  1. 내 코드가 프롬프트 문자열을 제공합니다
  2. LangChain이 인증을 포함한 API 요청으로 포맷팅합니다
  3. OpenAI API가 요청을 모델로 라우팅합니다
  4. 모델이 토큰 단위로 응답을 생성합니다
  5. API가 응답과 메타데이터를 포함한 구조화된 JSON을 반환합니다
  6. LangChain이 이를 Python 객체로 파싱합니다
  7. 내 코드가 콘텐츠와 메타데이터에 접근합니다

또한 다음을 배웠습니다:

  • 응답 객체를 검사하고 메타데이터를 추출하는 방법
  • 토큰 사용량이 비용에 미치는 영향

이 기반은 2장을 준비해 줍니다. 2장에서는 LLM이 내부적으로 실제로 어떻게 동작하는지, 다양한 모델을 비교하는 방법, 더 나은 결과를 얻기 위한 프롬프트 엔지니어링 기법을 살펴보겠습니다.