init_chat_model로 시작하기 #
LangChain을 처음 쓰다 보면 프로바이더마다 다른 클래스를 import하는 일이 생깁니다.
# 🔴 과거 방식: 프로바이더마다 다른 클래스
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_google_genai import ChatGoogleGenerativeAI
openai_model = ChatOpenAI(model="gpt-4.1")
anthropic_model = ChatAnthropic(model="claude-sonnet-4-5-20250929")
google_model = ChatGoogleGenerativeAI(model="gemini-2.5-flash-lite")
모델을 바꿀 때마다 import 문도, 클래스 이름도, 파라미터 구조도 달라집니다.
init_chat_model은 이 불편함을 해소하기 위해 도입된 통합 팩토리 함수입니다.
💡 LangChain v1 공식 권장 방식
LangChain 공식 문서는
init_chat_model을 “The easiest way to get started with a standalone model” 로 소개하며, v1부터 표준 진입점으로 권장합니다. 프로바이더 전환이 쉽고, 런타임에 모델을 동적으로 변경할 수 있어 프로덕션 환경에 특히 유용합니다.
1. 기본 사용법 #
모델 이름 하나만 넘기면 됩니다.
from langchain.chat_models import init_chat_model
# OPENAI_API_KEY 환경변수가 설정되어 있으면 바로 사용 가능
model = init_chat_model("gpt-4.1")
response = model.invoke("한국의 수도는 어디인가요?")
print(response.content) # 서울입니다.
ChatOpenAI, ChatAnthropic 같은 클래스 이름을 외울 필요 없이, 모델 이름만 알면 됩니다.
2. 다양한 프로바이더 사용하기 #
프로바이더를 지정하는 방법은 두 가지입니다.
방법 A — 프로바이더:모델명 형식
from langchain.chat_models import init_chat_model
# gpt- 접두사는 자동으로 OpenAI로 인식
openai_model = init_chat_model("gpt-4.1")
# claude- 접두사는 자동으로 Anthropic으로 인식
claude_model = init_chat_model("claude-sonnet-4-5-20250929")
# 콜론(:)으로 프로바이더를 명시
gemini_model = init_chat_model("google_genai:gemini-2.5-flash-lite")방법 B — model_provider 파라미터
# AWS Bedrock처럼 자동 감지가 안 되는 경우
bedrock_model = init_chat_model(
"anthropic.claude-3-5-sonnet-20240620-v1:0",
model_provider="bedrock_converse"
)
지원 프로바이더 목록 #
| 프로바이더 | 설치 패키지 | 필요 환경변수 | 모델 예시 |
|---|---|---|---|
| OpenAI | langchain-openai | OPENAI_API_KEY | gpt-4.1, gpt-4.1-mini |
| Anthropic | langchain-anthropic | ANTHROPIC_API_KEY | claude-sonnet-4-5-20250929 |
langchain-google-genai | GOOGLE_API_KEY | google_genai:gemini-2.5-flash-lite | |
| AWS Bedrock | langchain-aws | AWS 자격증명 | bedrock_converse:anthropic.claude-3-5-sonnet |
| Azure OpenAI | langchain-openai | AZURE_OPENAI_API_KEY | azure_openai:gpt-4 |
3. 파라미터 설정 #
temperature, max_tokens 등 기존 클래스에서 쓰던 파라미터를 그대로 사용할 수 있습니다.
from langchain.chat_models import init_chat_model
model = init_chat_model(
"gpt-4.1",
temperature=0.7, # 창의성 조절 (0~1)
max_tokens=1000 # 최대 응답 토큰 수
)
response = model.invoke("짧은 SF 소설의 도입부를 써주세요.")
print(response.content)
4. 런타임에 모델 바꾸기 #
init_chat_model의 핵심 기능입니다. 코드 수정 없이 호출 시점에 모델을 바꿀 수 있습니다.
from langchain.chat_models import init_chat_model
# 모델명 없이 생성 → 호출 시 지정
configurable_model = init_chat_model(temperature=0)
# 같은 인스턴스로 GPT 호출
response_gpt = configurable_model.invoke(
"당신의 이름은 무엇인가요?",
config={"configurable": {"model": "gpt-4.1-nano"}}
)
# 같은 인스턴스로 Claude 호출
response_claude = configurable_model.invoke(
"당신의 이름은 무엇인가요?",
config={"configurable": {"model": "claude-sonnet-4-5-20250929"}}
)
print(f"GPT 응답: {response_gpt.content}")
print(f"Claude 응답: {response_claude.content}")
이 패턴은 A/B 테스트, 모델 성능 비교, 사용자별 모델 선택 시나리오에서 유용합니다.
5. 고급: 여러 모델을 체인에서 독립적으로 설정 #
하나의 체인 안에 모델이 여러 개라면, configurable_fields와 config_prefix로 각각 다른 설정을 주입할 수 있습니다.
from langchain.chat_models import init_chat_model
# 요약 전용 모델 (낮은 temperature)
summary_model = init_chat_model(
model="gpt-4.1-mini",
temperature=0,
configurable_fields=("model", "model_provider", "temperature", "max_tokens"),
config_prefix="summary" # config 키 앞에 붙을 접두사
)
# 창작 전용 모델 (높은 temperature)
creative_model = init_chat_model(
model="gpt-4.1",
temperature=0.9,
configurable_fields=("model", "model_provider", "temperature"),
config_prefix="creative"
)
# 런타임에 summary_model만 Claude로 교체, temperature도 조정
response = summary_model.invoke(
"다음 회의록을 3줄로 요약해주세요: ...",
config={
"configurable": {
"summary_model": "claude-sonnet-4-5-20250929",
"summary_temperature": 0.2,
"summary_max_tokens": 500
}
}
)
print(response.content)
config_prefix 덕분에 summary_model, creative_model 설정이 서로 충돌하지 않습니다.
6. 실무 패턴: 환경변수로 모델 분기 #
개발·스테이징·프로덕션 환경마다 다른 모델을 쓰는 가장 간단한 방법입니다.
import os
from langchain.chat_models import init_chat_model
# 환경변수가 없으면 기본값으로 저렴한 모델 사용
MODEL_NAME = os.getenv("LLM_MODEL", "gpt-4.1-mini")
model = init_chat_model(MODEL_NAME, temperature=0)
response = model.invoke("이번 주 할 일 목록을 정리해줘.")
print(response.content)
# 개발 환경 (.env 또는 shell)
export LLM_MODEL="gpt-4.1-mini"
# 프로덕션 환경
export LLM_MODEL="gpt-4.1"
코드는 그대로 두고, 환경변수 하나만 바꾸면 됩니다.
개별 클래스 방식 vs init_chat_model #
| 항목 | 개별 클래스 (ChatOpenAI 등) | init_chat_model (v1 권장) |
|---|---|---|
| import | 프로바이더마다 별도 import | from langchain.chat_models import init_chat_model 하나 |
| 프로바이더 전환 | 클래스·파라미터 모두 수정 | 모델명 문자열만 변경 |
| 런타임 설정 | 불가 | config로 동적 변경 |
| 여러 모델 관리 | 인스턴스를 각각 따로 관리 | config_prefix로 한 곳에서 관리 |
| 적합한 상황 | 단일 프로바이더 고정 사용 | 멀티 프로바이더, A/B 테스트, 환경별 분기 |