Pydantic 팀이 만든 Python 에이전트 프레임워크로, 입력·출력·의존성에 타입을 걸어 모델 응답과 도구 인자를 자동으로 검증한다. FastAPI를 쓰듯 깔끔한 코드로 결과를 정해진 구조로 받는 에이전트를 만들 때 쓴다.
| 방식 | 강점 | 이럴 때 쓴다 |
|---|---|---|
| 모델 SDK 직접 호출 | 가장 단순하다 | 한두 번 호출하고 끝나는 스크립트 |
| Pydantic AI | 타입 검증, 의존성 주입 | 구조화된 출력, 도구를 쓰는 에이전트 |
| LangGraph | 상태와 분기를 그래프로 관리 | 여러 단계가 얽힌 복잡한 흐름 |
LLM 에이전트는 응답 형식이 틀리거나 도구 인자가 어긋나도 실행해 보기 전까지 모르는 경우가 많다. Pydantic AI에서는 코드를 쓰는 동안 IDE가 타입 오류를 먼저 알려 주고, 실행할 때는 Pydantic이 모델 응답을 자동으로 검증한다. 검증에 실패하면 오류 내용을 모델에 돌려보내 다시 답하게 할 수 있다.
pip install pydantic-ai로 설치한 뒤 에이전트를 만든다. 결과 타입에 Pydantic 모델을 지정하면 응답이 그 스키마에 맞는지 검증되고, 에이전트는 Agent[MyDeps, MyResult]처럼 타입이 붙은 객체가 된다.
| 단계 | 하는 일 | 핵심 요소 |
|---|---|---|
| 1. 정의 | 모델, 결과 타입, 의존성 타입 지정 | Agent(...) |
| 2. 도구 등록 | 함수에 데코레이터를 붙인다 | @agent.tool, RunContext[MyDeps] |
| 3. 실행 | 의존성을 넣고 실행한다 | agent.run_sync(), agent.run() |
모델은 '공급자:모델이름' 형식의 문자열로 지정한다. OpenAI, Anthropic, Gemini 같은 공급자를 바꿔도 에이전트 코드는 거의 그대로 둘 수 있다.
DB 커넥션이나 API 클라이언트 같은 외부 자원을 데이터클래스로 묶어 에이전트에 넣는다. 도구 함수는 RunContext로 이 자원을 타입에 맞게 꺼내 쓴다. 테스트할 때는 목(mock) 객체를, 실제 서비스에서는 진짜 객체를 넣으면 되니 로직과 환경이 깔끔하게 나뉜다. 테스트용 가짜 모델로 바꿀 수도 있어서 실제 API 비용 없이 에이전트 흐름을 확인할 수 있다.
타입 안전성이 강점인 만큼 Python 타입 힌트에 익숙해야 제대로 쓸 수 있다. 분기와 상태가 많이 얽힌 워크플로우는 Pydantic AI 하나로는 부족할 수 있어서, LangGraph 같은 그래프 도구로 흐름을 짜고 각 단계의 에이전트를 Pydantic AI로 만드는 조합을 많이 쓴다. 단순히 모델을 한 번 부르는 정도라면 SDK를 직접 쓰는 편이 더 가볍다.
가장 흔한 건 자유로운 텍스트에서 정해진 형식의 데이터를 뽑아내는 일이다. 결과 타입만 정해 두면 검증과 재시도를 프레임워크가 맡아 줘서 응답을 파싱하는 코드를 따로 짤 필요가 없다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 문서·메일 정보 추출 | 이름·날짜·금액 같은 필드를 Pydantic 모델로 정의해 결과 타입으로 지정 |
| Python 백엔드 서비스 | 웹 서버 안에서 DB·API 클라이언트를 의존성으로 넣고 도구를 쓰는 에이전트로 호출 |
| 사내 문서 검색·챗봇 | 검색 함수를 도구로 등록해 모델이 필요할 때 문서를 찾아 답하게 함 |
| 에이전트 테스트 | 테스트용 가짜 모델과 목 의존성으로 API 비용 없이 흐름 검증 |