LangChain 구조화 출력
LangChain 구조화 출력 (Structured Output)
LLM은 자유롭게 텍스트를 생성하지만, 애플리케이션에서는 종종 정해진 포맷의 응답이 필요해요. 예를 들어 함수 인자로 쓸 JSON이나, 데이터베이스 스키마에 맞는 레코드 같은 것들이요. LangChain의 구조화 출력(structured output)은 모델의 응답을 정의된 스키마에 강제해서, 검증된 데이터를 안정적으로 받을 수 있게 해줘요.
구조화 출력은 에이전트의 response_format= 파라미터로 지정할 수 있어요. Pydantic 모델이나 JSON 스키마를 넘기면, 모델이 그 규격을 지키는 응답을 만들어요.
Pydantic 모델로 구조화 출력 만들기
create_agent에 response_format=으로 Pydantic 모델을 넘기면, 에이전트가 그 스키마에 맞는 응답을 반환해요.
from pydantic import BaseModel
from langchain.agents import create_agent
class Answer(BaseModel):
summary: str
confidence: float
agent = create_agent(
model="openai:gpt-5.5",
tools=tools,
response_format=Answer,
)
result = agent.invoke({"messages": [{"role": "user", "content": "Summarize AI trends"}]})
result["structured_response"] # Answer(summary=..., confidence=...)
호출 결과의 structured_response 키에 검증된 Pydantic 객체가 들어와요. 이렇게 하면 자유 텍스트를 파싱하면서 생기는 오류를 줄일 수 있어요.
JSON 스키마 방식
Pydantic 대신 JSON 스키마를 넘길 수도 있어요. 모델 응답이 해당 JSON 스키마를 만족하도록 강제할 때 유용해요.
{
"type": "object",
"properties": {
"summary": {"type": "string"},
"confidence": {"type": "number"}
},
"required": ["summary", "confidence"]
}
구조화 출력이 유용한 상황
- API 응답: 클라이언트가 파싱하기 쉬운 고정 포맷
- 함수/도구 인자: 도구 호출 시 모델이 정확한 스키마의 인자를 넘기도록 보장
- 데이터 추출: 문서에서 특정 필드를 일관된 구조로 추출
- 데이터베이스 연동: 스키마에 맞는 레코드를 그대로 저장
구조화 출력과 도구 호출
구조화 출력은 도구 호출과도 자연스럽게 얽혀요. 모델이 도구를 호출할 때도 인자를 정의된 스키마에 맞춰야 하므로, 에이전트가 여러 도구를 번갈아 쓰면서도 각 호출의 인자가 정확히 검증되도록 해줘요.
더 알아보기
- LangChain Agents 문서:
create_agent와response_format= - LangChain Tools 문서: Pydantic 모델 기반 도구 스키마
- LangChain Models 문서: 모델의 구조화 출력 기능