테마
LLM 호출과 API 키 관리
ChatOllama와 ChatOpenAI로 LLM을 호출하고, API 키를 안전하게 관리하는 방법을 배웁니다
학습 목표
- ChatOllama로 로컬 LLM을 호출하는 방법을 익힌다
- ChatOpenAI로 상용 모델을 연동한다
- API 키를 환경변수로 안전하게 관리하는 방법을 이해한다
- 벤더별 환경변수를 찾는 방법을 익힌다
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-dotenv3.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-xxxxxxxxxxxxxxxxxxxx2단계: 환경변수 로드
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-xxxxxxxxxxxxxxxxxxxx5.3 벤더별 환경변수 요약
| 벤더 | 클래스 | 필수 환경변수 |
|---|---|---|
| OpenAI | ChatOpenAI | OPENAI_API_KEY |
| Azure OpenAI | AzureChatOpenAI | OPENAI_API_KEY, OPENAI_API_VERSION, AZURE_OPENAI_ENDPOINT |
| Anthropic | ChatAnthropic | ANTHROPIC_API_KEY |
| Ollama | ChatOllama | 없음 (로컬 실행) |
핵심 정리
- 모든 LLM은 invoke 메서드로 호출하며, AIMessage 객체를 반환
- API 키는
.env파일 +load_dotenv()로 관리하는 것을 권장 - 벤더별 필요한 환경변수는 에러 메시지나 공식 문서로 확인
- 추론 모델(DeepSeek)은 Think 토큰이 포함되므로 목적에 맞게 모델 선택