LangChain

LangChain 1.0 시작하기

빌드 피벗(Build Pivot) 2026. 6. 21. 10:10
반응형
LANGCHAIN 실전 1.0 · 01
LangChain 1.0 시작하기 — 옛 튜토리얼대로 하면 왜 ImportError가 날까
패키지 4계층·버전 타임라인·폐기 지도, 그리고 1.0 코어 진입점(init_chat_model · with_structured_output)까지
🟢 입문~중급 ⏱️ 약 12분 🔧 LangChain 1.x 🗓️ 최종 검토 2026-06-21

TL;DR — LangChain은 1.0(2025-10-22 GA)부터 단일 패키지가 아니라 langchain-core · langchain · langchain-community · 파트너 패키지 4계층 + 레거시 langchain-classic으로 나뉩니다. 옛 튜토리얼의 LLMChain · RetrievalQA · ConversationBufferMemory · AgentExecutor는 대부분 폐기되어 classic으로 옮겨졌습니다. 새 코드는 init_chat_model · with_structured_output · create_agent를 씁니다. 그래서 옛 코드를 최신 설치에서 그대로 돌리면 ImportError가 납니다.

이 글은 옛 LangChain 자료(0.1~0.2)로 입문했거나 1.0을 처음 보는 개발자1.0이 무엇을 바꿨는지(패키지·버전·폐기)를 이해하도록 돕습니다. 나아가 새 코드의 진입점(init_chat_model · 메시지 · 구조화 출력)으로 갈아탈 기준을 얻도록 돕습니다.

이 글에서 다루는 것

  • 패키지 4계층 + langchain-classic 분리 구조
  • 버전 진화 타임라인과 1.0 안정성(LTS) 정책
  • 코어 진입점: init_chat_model · 메시지 · with_structured_output
  • 레거시 → 현행 마이그레이션 지도

이 글에서 다루지 않는 것

  • LCEL·LangGraph·에이전트·RAG 상세 (2~5편에서)
  • 관측·평가(LangSmith) (6편에서)

1. 왜 LangChain 1.0이 분기점인가

LangChain으로 검색해서 나온 블로그 글을 따라 쳤는데 ImportError가 났다면, 코드를 잘못 친 게 아닐 가능성이 큽니다. 그 글이 0.1~0.2 시절에 쓰였기 때문입니다. 지금 설치되는 LangChain은 1.0(2025-10-22 GA) 이후입니다.

이 시리즈는 Chapters_RAG/LangChain의 1.x 기준 통합 정리를 6편으로 나눠, LangChain을 지금 버전 기준으로 다시 익히는 과정입니다. 첫 편의 목표는 단 하나, "내가 보는 코드가 현행인지 레거시인지" 구분하는 눈을 갖는 것입니다. 그 기준이 서면 나머지 편(LCEL · LangGraph · 에이전트 · RAG · LangSmith)이 훨씬 빠르게 읽힙니다.

비유하면 LangChain 1.0은 이사를 끝낸 집과 같습니다. 가구(클래스)는 대부분 그대로지만, 방 배치(패키지)가 바뀌었습니다. 짐을 못 찾는 이유는 짐이 사라져서가 아니라 다른 방으로 옮겨졌기 때문입니다. 그래서 먼저 집 구조부터 봅니다.

2. 흔한 오해 — "langchain 하나만 설치하면 끝"

가장 흔한 오해는 "pip install langchain 하나면 모든 게 들어온다"는 생각입니다. 0.0.x 모놀리식 시절에는 어느 정도 맞았지만, 지금은 다릅니다.

❌ 오해
"langchain만 깔면 LLMChain·RetrievalQA·OpenAI 모델·벡터스토어가 다 import된다." → 1.x에서는 모델은 파트너 패키지에, 레거시 클래스는 langchain-classic에 따로 있어 추가 설치가 필요합니다.

즉 1.0은 무거운 단일 패키지를 역할별로 쪼갠 4계층 + 레거시 분리 구조로 바뀌었습니다. 이걸 모르면 "분명 문서에 있는 클래스인데 import가 안 된다"는 상황에 계속 부딪힙니다. 다음 절에서 그 구조를 봅니다.

3. 패키지 4계층 + langchain-classic

1.0의 패키지는 아래처럼 역할별로 나뉩니다. 무엇이 어느 패키지에 있는지가 곧 "import가 되느냐"를 결정합니다.

① langchain-core · 기반 추상
BaseMessage · Runnable · BaseChatModel · 출력 파서 · 도구 인터페이스 등 핵심 추상
② langchain · 오케스트레이션
create_agent · init_chat_model · init_embeddings. 1.0에서 슬림화되어 agents/messages/tools/chat_models/embeddings 5개 모듈에 집중(langchain.messages·langchain.tools는 core 재export)
③ langchain-community · 커뮤니티 통합
다수 서드파티 통합 — 문서 로더 · 일부 벡터스토어 · BM25Retriever · 캐시 등
④ 파트너 패키지 · 벤더별
langchain-openai · langchain-anthropic · langchain-google-genai · langchain-ibm(watsonx) 등. 모델·임베딩은 여기서 온다
⑤ langchain-classic · 레거시 분리
LLMChain · SequentialChain · RetrievalQA · 옛 메모리 · AgentExecutor · hub · langchain.retrievers · evaluation · indexes. 별도 pip install langchain-classic 필요
그림 1. LangChain 1.0 패키지 4계층 + 레거시 분리(langchain-classic)

여기에 더해 에이전트 런타임인 langgraph가 별도 패키지로 있습니다. 뒤에서 보겠지만 1.0의 create_agent는 내부적으로 LangGraph 그래프로 컴파일됩니다. 그래서 에이전트를 쓰면 langgraph도 함께 깔립니다.

4. 버전 진화 타임라인 & 1.0 안정성 정책

내가 보는 자료가 "언제 것"인지 가늠하려면 버전 분기점을 알아야 합니다. 굵직한 흐름은 이렇습니다.

0.1.0
2024-01
첫 stable · LCEL 권장 · LLMChain 폐기 시작
0.2.0
2024-05
AgentExecutor 폐기
0.3.0
2024-09
Pydantic v2 필수 · Py3.8 종료
1.0.0 GA
2025-10-22
create_agent · classic 분리 · Py3.10+
1.3.x
2026-06
검증 시점 최신
자료에 0.1~0.2 API가 보이면 레거시 신호 · 1.0은 LangGraph 1.0과 동시 GA
그림 2. LangChain 버전 진화 타임라인(통합정리 기준)

📌 안정성 정책 — 1.0은 첫 메이저 안정 릴리스로 2.0까지 breaking change가 없습니다(LTS). 폐기(deprecated) ≠ 즉시 제거입니다. 실제 제거는 2.0에서만 일어납니다. 즉 폐기 API도 1.x 동안은 동작합니다. 다만 새 코드는 현행을 쓰는 게 맞습니다. 또한 1.x는 Python 3.10~3.14를 요구합니다(3.9는 1.0에서 종료).

5. 코어 진입점 ① — 모델 초기화 init_chat_model

현행 코드의 사실상 진입점은 벤더 클래스를 직접 import 하는 게 아니라 프로바이더 무관 초기화입니다.

PYTHON · 프로바이더 무관 모델 초기화
from langchain.chat_models import init_chat_model model = init_chat_model("openai:gpt-5.5", temperature=0) # 'provider:model' prefix model = init_chat_model("gemini-2.5-flash-lite", model_provider="google_genai") # 해당 파트너 패키지(langchain-openai 등)가 설치돼 있어야 함

이렇게 쓰는 이유는 프로바이더 교체 비용 때문입니다. "openai:gpt-5.5""anthropic:..."로 바꾸기만 하면 모델이 교체됩니다. 공통 파라미터(temperature · max_tokens · timeout · max_retries)도 한 자리에서 다룹니다. 다만 모델 자체는 해당 파트너 패키지에서 오므로, 그 패키지 설치는 전제입니다. 임베딩도 같은 방식으로 init_embeddings(...)를 씁니다.

6. 코어 진입점 ② — 메시지 & 구조화 출력

대화는 역할이 다른 메시지의 리스트입니다. import는 from langchain.messages import ...(core 재export)로 합니다.

메시지 역할
HumanMessage사용자 입력
AIMessage모델 응답(도구 호출 시 .tool_calls 보유)
SystemMessage모델 동작 지시
ToolMessage도구 실행 결과(tool_call_id로 연결)

옛 자료의 FunctionMessage는 옛 functions API 잔재입니다. 현행 tools API에서는 AIMessage.tool_calls → ToolMessage 흐름을 씁니다. 텍스트 외에 이미지·오디오·파일을 함께 보낼 때는 content_blocks로 멀티모달 입력을 구성합니다.

검증된 객체를 받고 싶다면 1순위는 with_structured_output입니다. 옛 자료의 JSON/CSV 파서로 텍스트를 후처리하던 방식보다 신뢰도가 높습니다.

PYTHON · 구조화 출력(Pydantic v2)
from pydantic import BaseModel, Field # Pydantic v2 직접 class Joke(BaseModel): setup: str = Field(description="농담의 도입 질문") punchline: str = Field(description="농담의 펀치라인") structured = model.with_structured_output(Joke) joke = structured.invoke("고양이 농담 하나 해줘") # → 검증된 Joke 인스턴스

여기서 한 가지가 중요합니다. 1.0은 Pydantic v2를 전제하므로 스키마는 from pydantic import BaseModel로 직접 import 합니다. 옛 자료의 langchain_core.pydantic_v1은 폐기 경로이며, 구조화 출력·도구 스키마가 전부 v2 기반이라 영향이 광범위합니다.

7. 레거시 → 현행 마이그레이션 지도

옛 코드를 1.0에서 만났을 때 무엇으로 바꿔야 하는지, 같은 작업을 두 시대의 코드로 나란히 보면 한눈에 들어옵니다.

❌ 레거시 (0.1~0.2)
from langchain.chains import LLMChain
from langchain.chains import RetrievalQA
from langchain_core.pydantic_v1 import BaseModel
✅ 현행 (1.x)
prompt | model | parser (LCEL)
2-step LCEL RAG / create_agent
from pydantic import BaseModel
그림 3. 같은 작업, 레거시 코드 vs 1.0 코드
레거시 (옛 자료) 현행 (1.x)
LLMChain / SequentialChainLCEL prompt | model | parser (호환: langchain-classic)
RetrievalQA2-step LCEL RAG / Agentic RAG (5편)
ConversationBufferMemoryLangGraph checkpointer + thread_id (3편)
AgentExecutor + 텍스트 ReActlangchain.agents.create_agent (4편)
JsonOutputParser(스키마 강제)model.with_structured_output(Schema)
langchain_core.pydantic_v1from pydantic import BaseModel (v2)
벤더 클래스 직접 import만init_chat_model("provider:model")

표에서 "(N편)"으로 표시한 항목은 이 시리즈 뒤 편에서 본격적으로 다룹니다. 당장 옛 코드를 살려야 한다면 langchain-classic을 설치해 import 경로만 바꾸면 동작은 합니다. 다만 그건 임시방편이고, 신규 코드는 오른쪽(현행)으로 쓰는 것을 권합니다.

8. 시작하기 — 설치와 첫 코드

환경

  • 언어/런타임: Python 3.10 이상(1.x 요구)
  • 핵심: langchain · langchain-core · 파트너 패키지(예: langchain-openai)
  • 선택: langgraph(에이전트) · langchain-classic(레거시 호환)
BASH · 설치
pip install langchain langchain-openai # 에이전트를 쓸 거면: pip install langgraph # 옛 클래스가 필요하면: pip install langchain-classic
PYTHON · 첫 호출(모델 → 프롬프트 → 구조화 출력)
from langchain.chat_models import init_chat_model from langchain_core.prompts import ChatPromptTemplate model = init_chat_model("openai:gpt-5.5", temperature=0) prompt = ChatPromptTemplate.from_messages([ ("system", "너는 친절한 비서다."), ("user", "{question}"), ]) chain = prompt | model # LCEL 파이프(2편에서 상세) print(chain.invoke({"question": "LangChain 1.0이 뭐야?"}).content)

이 다섯 줄에 1.0의 진입점이 다 들어 있습니다. init_chat_model로 모델을 잡습니다. ChatPromptTemplate로 메시지를 구성한 뒤 파이프(|)로 잇는 LCEL입니다. 파이프가 왜 이렇게 강력한지는 다음 편에서 다룹니다. 지금은 "옛 LLMChain 대신 이렇게 쓴다"만 기억하면 충분합니다.

시리즈: 01 LangChain 1.0 시작하기 → 02 LCEL & Runnable → 03 LangGraph → 04 create_agent → 05 현대 RAG → 06 LangSmith

9. 정리 · 다음 편

✅ 1.0 코드인지 가르는 체크리스트
모델을 init_chat_model("provider:model")로 잡는가
체인을 파이프(|)로 잇는가 (LLMChain ❌)
구조화 출력에 with_structured_output를 쓰는가
스키마를 from pydantic import BaseModel(v2)로 만드는가
에이전트에 create_agent를 쓰는가 (AgentExecutor ❌)
★ 마치며

LangChain 1.0은 가구를 버린 게 아니라 방을 새로 나눈 집입니다. 어느 방에 무엇이 있는지(패키지 4계층)와, 언제부터 그렇게 됐는지(버전 타임라인)를 알면, 옛 자료와 새 자료를 헷갈리지 않고 읽을 수 있습니다. 다음 편에서는 그 집의 배관 역할을 하는 LCEL과 Runnable — 파이프(|) 하나로 모델·프롬프트·파서를 잇는 표준 인터페이스를 봅니다.

#LangChain #LangChain1_0 #langchain_classic #init_chat_model #구조화출력 #생성형AI #LLM #기술블로그
📚 참고 자료 · 공식 문서
본문 버전·API는 공식 문서 기반이며 LangChain API는 버전에 따라 변동될 수 있습니다(검증: LangChain 1.x, 2026-06).
안내 · 본 글은 LangChain 공식 문서·저장소를 기준으로 정리한 교육용 콘텐츠입니다. 코드는 개념 설명용 예시이며 LangChain API는 버전에 따라 달라질 수 있습니다.
반응형