Skip to content

LLM 호출과 API 키 관리

ChatOllama와 ChatOpenAI로 LLM을 호출하고, API 키를 안전하게 관리하는 방법을 배웁니다

학습 목표

  1. ChatOllama로 로컬 LLM을 호출하는 방법을 익힌다
  2. ChatOpenAI로 상용 모델을 연동한다
  3. API 키를 환경변수로 안전하게 관리하는 방법을 이해한다
  4. 벤더별 환경변수를 찾는 방법을 익힌다

1. LLM 호출의 기본 흐름

LangChain에서 LLM을 호출하는 과정은 항상 동일합니다:

모든 LLM은 invoke 메서드로 호출합니다. 어떤 모델이든 사용법이 같습니다.


2. ChatOllama - 로컬 모델 호출

최신 LangChain Python 환경에서 Ollama 연동은 langchain-ollama 패키지의 ChatOllama 클래스를 사용한다.

2.1 기본 호출

python
from langchain_ollama import ChatOllama

# 모델 지정
llm = ChatOllama(model="llama3.2:1b")

# 호출
response = llm.invoke("What is the capital of France?")
print(response)          # AIMessage 전체
print(response.content)  # "The capital of France is Paris."

2.2 추론(Reasoning) 모델 주의점

DeepSeek 같은 추론 모델은 응답에 Think 토큰이 포함됩니다:

python
llm = ChatOllama(model="deepseek-r1:1.5b")
response = llm.invoke("What is the capital of France?")
print(response.content)
# <think>Let me think about this...</think>
# The capital of France is Paris.

Think 토큰은 모델의 사고 과정을 보여주지만, 단순 질의응답에는 불필요합니다. 목적에 맞는 모델을 선택하는 것이 중요합니다.


3. ChatOpenAI - 상용 모델 호출

3.1 패키지 설치

bash
pip install langchain-openai python-dotenv

3.2 기본 호출

python
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke("What is the capital of France?")
print(response.content)

처음 실행하면 에러가 발생합니다:

AuthenticationError: API Key가 없습니다

4. API 키 관리

API 키를 관리하는 방법은 두 가지입니다:

4.1 방법 1: 코드에 직접 입력 (비권장)

python
llm = ChatOpenAI(
    model="gpt-4o-mini",
    api_key="sk-xxxxxxxxxxxxxxxxxxxx"  # 보안 위험!
)

이 방법의 문제점:

  • OpenAI의 다른 모델(Whisper, Embedding, TTS)을 사용할 때마다 매번 키를 입력해야 함
  • 코드에 API 키가 그대로 노출됨

4.2 방법 2: 환경변수로 관리 (권장)

1단계: .env 파일 생성

bash
# 프로젝트 루트에 .env 파일 생성
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx

2단계: 환경변수 로드

python
from dotenv import load_dotenv

# .env 파일에서 환경변수 불러오기
result = load_dotenv()
print(result)  # True면 성공

3단계: LLM 호출

python
from langchain_openai import ChatOpenAI

# 환경변수가 로드되어 있으면 api_key를 명시하지 않아도 됨
llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke("What is the capital of France?")
print(response.content)  # "Paris"

환경변수를 사용하면 OPENAI_API_KEY가 자동으로 모든 OpenAI 관련 클래스에 주입됩니다.


5. 벤더별 환경변수 찾기

OpenAI 외에도 Azure, Anthropic, Upstage 등 다양한 벤더를 사용할 수 있습니다. 각 벤더가 요구하는 환경변수는 어떻게 알 수 있을까요?

5.1 Azure OpenAI 예시

python
from langchain_openai import AzureChatOpenAI

llm = AzureChatOpenAI()
llm.invoke("Hello")
# Error: OPENAI_API_VERSION 환경변수가 필요합니다

에러 메시지가 알려줍니다. .env에 추가하고 다시 시도합니다:

bash
OPENAI_API_VERSION=2024-02-15-preview
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/

5.2 Anthropic 예시

Anthropic은 에러 메시지가 친절하지 않을 수 있습니다. 이때는 공식 문서를 참고합니다:

bash
# Anthropic이 요구하는 환경변수
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxx

5.3 벤더별 환경변수 요약

벤더클래스필수 환경변수
OpenAIChatOpenAIOPENAI_API_KEY
Azure OpenAIAzureChatOpenAIOPENAI_API_KEY, OPENAI_API_VERSION, AZURE_OPENAI_ENDPOINT
AnthropicChatAnthropicANTHROPIC_API_KEY
OllamaChatOllama없음 (로컬 실행)

핵심 정리

  • 모든 LLM은 invoke 메서드로 호출하며, AIMessage 객체를 반환
  • API 키는 .env 파일 + load_dotenv() 로 관리하는 것을 권장
  • 벤더별 필요한 환경변수는 에러 메시지공식 문서로 확인
  • 추론 모델(DeepSeek)은 Think 토큰이 포함되므로 목적에 맞게 모델 선택