본문 바로가기
프로그래밍/AI

LLM 앱 개발의 첫걸음 LangChain(랭체인) 0.3 버전 출시 Pydantic 2 란?

by K-인사이터 2025. 2. 6.
반응형
반응형

LangChain 0.3 버전에서 변화 

랭체인 0.3 버전은 0.2 버전과 비교하여 여러가지 중요한 변화와 개선이 포함되었습니다. 통합 패키지 관리, 에러 처리 복구, 응답 메타데이터 제공, 도구 통합 및 표준화, 스트리밍 및 비동기 지원 강화, 성능 및 안정성 개선 그리고 마지막으로 Pydantic 2로 전환되었습니다. 

 

Pydantic 이란? 

Pydantic이란 Python의 데이터 유효성 검사와 설정 관리를 위한 라이브러리입니다. 타입 힌트(type hints)를 기반으로 데이터 모델을 정의하고 자동으로 데이터의 변환, 검증 및 직렬화를 수행합니다. 개발자는 Pydantic 을 사용해 명확하고 안전한 코드를 작성할 수 있습니다. Pydantic 의 예시를 통해 라이브러리의 개념과 철학을 이해할 수 있습니다. 

 

아래의 예시를 통해 Pydantic 에 대한 여러가지 사실을 알 수 있습니다. 

from pydantic import BaseModel, EmailStr, Field
from typing import Optional

class User(BaseModel):
    id: int
    name: str = Field(..., min_length=3, max_length=50)
    email: EmailStr
    age: Optional[int] = Field(None, ge=18)
    is_active: bool = True

user_data = {
    "id": 1,
    "name": "John Doe",
    "email": "johndoe@example.com",
    "age": 25,
}

user = User(**user_data)
print(user)
print(user.dict())

 

아래의 표는 Pydantic 라이브러리의 특징을 정리한 표입니다.

특징 설명
타입 기반 유효성 검사 파이썬의 내장 타입 힌트를 활용하여 입력된 데이터가 정의한 타입의 조건과 부합하는지 자동으로 검사할 수 있음
예시. 문자열 필드에 정수형 데이터를 입력하면 자동 변환 또는 오류가 발생
자동 데이터 변환 모델 정의 단계에서 정의한 필드의 타입에 맞추어 자동 변환을 시도합니다. 
JSON 과 같은 다른 데이터 포맷으로의 직렬화/역직렬화를 지원합니다.
간결한 코드 작성 BaseModel 클래스를 상속받아 클래스 변수로 필드와 기본값을 정의하면 자동으로 __init__ 메소드가 생서외며 코드가 간결해집니다. 

 

랭체인 0.3버전에서 Pydantic 2로 업그레이드 후 변화는? 

Pydantic 2에서는 내부 검증 로직을 Rust로 재작성하여 기존 Pydantic 1보다 5~50배 빠른 성능을 제공하도록 업그레이드 되었습니다. 이로 인해 데이터 유효성 검증과 직렬화 과정에서의 성능이 크게 향상되었습니다. 

 

pydantic 라이브러리로부터 BaseModel 임포트 

또한, 0.2 버전과 달리 랭체인에서 import 하는 BaseModel 사용 대신 pydantic 라이브러리로부터 BaseModel 을 임포트해야 합니다. 

# 기존 랭체인 0.2 버전의 코드
from langchain_core.pydantic_v1 import BaseModel

# 랭체인 0.3 버전에서는 pydantic 로부터 BaseModel 를 임포트함. 
from pydantic import BaseModel

 

랭체인 API에 대해 Pydantic 2 객체를 인자로 전달해야만 함

꽤 중요한 대목입니다. 0.2 버전의 코드를 0.3 버전에서 사용하려면 다음의 API들을 사용할 때 반드시 Pydantic 2 객체를 인자로 전달하도록 변경해야 합니다. 

  • BaseChatModel.bind_tools
  • BaseChatModel.with_structured_output
  • Tool.from_function
  • StructuredTool.from_function

공식 가이드에는 v1 객체를 일부 API가 그대로 수용할 수도 있다고 말하지만 안정성과 미래 이슈를 위해서는 수정해야 한다고 주의를 줍니다. 

 

랭체인 모델 상속하는 코드의 Pydantic 2 를 사용하도록 업그레이드 

기존에 랭체인에서 제공하는 모델(BaseTool, BaseChatModel, LLM)을 상속하는 코드들은 Pydantic 2 기능을 사용하도록 업그레이드 해야합니다. 아래 예시를 보면 BaseTool 모델이 랭체인 코어 라이브러리의 pydantic_v1 에서 임포트되고 상속되었다면 validator 와 같은 데코레이터는 pydantic 2 의 기능을 사용하도록 마이그레이션 해야합니다. 

 

즉, 아래의 랭체인 0.2 이하 코드가 있다면 

from pydantic.v1 import validator, Field # if pydantic 2 is installed
# from pydantic import validator, Field # if pydantic 1 is installed
# from langchain_core.pydantic_v1 import validator, Field
# from langchain.pydantic_v1 import validator, Field

class CustomTool(BaseTool): # BaseTool is v1 code
    x: int = Field(default=1)

    def _run(*args, **kwargs):
        return "hello"

    @validator('x') # v1 code
    @classmethod
    def validate_x(cls, x: int) -> int:
        return 1

 

랭체인 0.3 버전에서는 아래와 같이 변경되어야 합니다.

from pydantic import Field, field_validator # pydantic v2
from langchain_core.pydantic_v1 import BaseTool

class CustomTool(BaseTool): # BaseTool is v1 code
    x: int = Field(default=1)

    def _run(*args, **kwargs):
        return "hello"

    @field_validator('x') # v2 code
    @classmethod
    def validate_x(cls, x: int) -> int:
        return 1


CustomTool(
    name='custom_tool',
    description="hello",
    x=1,
)

 

Pydantic 예제코드 플레이그라운드 

 

 

Pydantic 마이그레이션 가이드

https://docs.pydantic.dev/latest/migration/

 

Migration Guide - Pydantic

Migrating from Pydantic V1.

docs.pydantic.dev

 

끝.

반응형