← AI 용어집

AI 용어집 · 기초 · 언어 모델 · 에이전트

구조화된 출력 Structured Output

구조화된 출력은 AI 모델이 자유로운 문장 대신 JSON처럼 정해진 틀(스키마)에 맞춘 데이터로 답하게 하는 기능입니다. 프로그램이 모델의 답을 바로 읽어서 쓸 수 있게 해 줍니다.

쉽게 말하면 손님에게 "자유롭게 적어 주세요" 대신 이름·전화번호·주소 칸이 나뉜 신청서를 건네는 것과 같습니다. 칸이 정해져 있으니 받는 쪽이 정리하기가 훨씬 쉽습니다.

어떻게 작동하나

개발자는 먼저 답에 들어가야 할 항목과 각 항목의 형태(글자, 숫자, 목록 등)를 적은 스키마를 정합니다. 이 스키마를 요청과 함께 모델에 넘기면, 모델은 그 틀에 맞는 데이터를 만들어 냅니다. 일부 서비스는 모델이 글자를 하나씩 만들어 낼 때 스키마에 맞지 않는 토큰은 아예 고르지 못하게 막아서 형식을 보장합니다. 이런 장치가 없을 때는 결과를 검사해 형식이 틀리면 다시 요청하는 방식을 씁니다.

구조화된 출력의 흐름스키마 → LLM; 사용자 요청 → LLM; LLM → 형식 검사(JSON); 형식 검사 → 프로그램(통과); 형식 검사 → LLM(다시 요청)스키마항목·형태 정의LLM틀에 맞춰 생성형식 검사스키마와 대조프로그램JSON 데이터 사용사용자 요청JSON통과다시 요청
구조화된 출력의 흐름 왼쪽에서 오른쪽으로 읽습니다. 형식 검사에서 틀리면 다시 요청하는 고리가 아래쪽 점선입니다.

왜 중요한가

사람은 문장을 읽고 이해하지만, 프로그램은 정해진 형식이 아니면 데이터를 제대로 꺼내지 못합니다. 프롬프트로 "JSON으로 답해"라고 부탁만 하면 가끔 괄호가 빠지거나 쓸데없는 설명이 붙어 프로그램이 멈출 수 있습니다. 구조화된 출력은 이런 실수를 줄여 AI를 실제 서비스나 업무 시스템에 안정적으로 연결하게 해 줍니다. Function Calling이나 AI 에이전트의 도구 사용도 같은 원리에 기대고 있습니다.

알아 둘 점

형식이 맞는다고 내용까지 맞는 것은 아닙니다. 모델은 칸을 채우려고 그럴듯한 값을 지어낼 수 있어 환각 문제는 그대로 남습니다. 너무 복잡하거나 엄격한 스키마는 오히려 답의 품질을 떨어뜨릴 수 있습니다. 그래서 정답이 없을 때 비워 둘 수 있는 칸을 마련하고, 중요한 값은 따로 검증하는 것이 좋습니다.

예시

이 용어집 페이지도 비슷한 방식으로 만들어집니다. 모델에게 '짧은 정의', '비유', '섹션 목록', '관련 용어' 같은 칸이 정해진 스키마를 주고, 모델은 그 칸을 채운 JSON으로 답합니다. 프로그램은 이 JSON을 받아 바로 웹페이지 형태로 보여 줄 수 있습니다.

함께 보면 좋은 용어