검증(Validation)
검증(Validation)
Instructor는 구조화된 출력을 받을 뿐만 아니라, 그 출력이 원하는 기준에 맞는지 검증하고 기준을 벗어나면 LLM을 다시 호출해 고치도록 만들 수 있어요. 이건 Pydantic의 검증 기능을 그대로 활용하는 방식이라, 필드 타입·범위·사용자 정의 검증기를 쓰면 돼요.
기본 검증
Pydantic의 Field와 field_validator를 쓰면 필드 단위로 규칙을 걸 수 있어요. 예를 들어 이름 길이, 나이 범위, 이메일 목록 같은 걸 검사할 수 있어요.
from typing import List
from pydantic import BaseModel, Field, field_validator
class User(BaseModel):
name: str = Field(..., min_length=2, description="User's full name")
age: int = Field(..., ge=0, le=150, description="User's age")
emails: List[str] = Field(description="User's emails")
ge(greater or equal)는 최소값, le(less or equal)는 최대값을 뜻해요. 이 필드 제약이 실패하면 Instructor가 자동으로 재시도(reask)를 돌릴 수 있어요.
필드 검증기로 사용자 정의 규칙
field_validator 데코레이터로 복잡한 규칙을 만들 수 있어요. 예를 들어 나이 값이 비정상 범위면 ValueError를 던져서 재시도를 유도할 수 있어요.
from pydantic import BaseModel, field_validator
class UserInfo(BaseModel):
name: str
age: int
@field_validator('age')
@classmethod
def validate_age(cls, v):
if v < 0 or v > 150:
raise ValueError(f"Age {v} is invalid")
return v
검증 실패와 재시도(reask)
검증이 실패하면 ValidationError가 발생해요. 이걸 Tenacity의 retry_if_exception_type(ValidationError)와 엮으면 검증 실패 시에만 재시도하게 할 수 있어요(재시도 문서 참고). 또한 Instructor의 max_retries를 쓰면 검증 실패 메시지를 LLM에 다시 보내 정확한 값을 얻도록 바로 재요청할 수 있어요.
더 알아보기
- 재시도 로직: Retrying
- 응답 모델: Response Model
- 시작하기: Start Here