주요 내용
JSON은 LLM 애플리케이션에 필수적이며, 일관성, 데이터 추출 및 원활한 통합을 위한 구조화된 출력을 가능하게 합니다. Pydantic 및 API와 같은 도구는 스키마 검증과 유지보수성을 향상시킵니다.
이러한 이점에도 불구하고 JSON은 부분적인 스키마 지원, 토큰 제한 및 잠재적인 내용 환각과 같은 한계가 있습니다. 강점과 제약 사항을 이해하는 것은 효율적이고 지능적인 시스템을 구축하는 데 중요합니다.
Novita AI는 곧 각 LLM에 대한 지원 기능 설명을 출시할 예정이며, 모델 라이브러리에서 직접 확인할 수 있습니다.
현대 애플리케이션 개발, 특히 고급 LLM(대규모 언어 모델)의 부상과 함께 예측 가능하고 구조화된 데이터 교환의 중요성이 점점 더 분명해지고 있습니다. LLM은 자연어 생성에 탁월하지만, 많은 사용 사례에서는 출력이 특정 형식을 따르도록 요구합니다. 이는 다른 시스템, 데이터베이스 또는 프로세스와의 원활한 통합을 보장합니다. 여기서 구조화된 출력의 개념이 등장하며, JSON(JavaScript Object Notation)이 이러한 구조를 정의하고 강제하는 데 선호되는 형식으로 자리 잡았습니다. 이 글에서는 구조화된 데이터를 위한 JSON 출력의 본질을 살펴보고, 그 이점, 적용 사례 및 한계를 강조합니다.
JSON 출력이란 무엇인가?

출처: Langchain
JSON 소개
JSON 구조화된 출력은 대규모 언어 모델(LLM) 과 함께 사용되는 기법으로, 모델의 응답이 일반적으로 JSON 형식으로 표현되는 사전 정의된 스키마를 따르도록 보장합니다.
- LLM에는 원하는 출력 구조에 대한 상세 설명 이 제공됩니다:
- 필드
- 데이터 유형
- 제약 조건
구현을 위한 도구 활용
Pydantic(Python 라이브러리)과 같은 도구를 사용하여:
- 유형 힌트로 스키마를 정의합니다.
- 이러한 스키마를 JSON 스키마로 변환합니다.
Pydantic과 같은 도구 사용의 이점:
- 구조화된 출력 보장.
- 코드 가독성 및 유지보수성 향상.
구현을 위한 API 활용
- OpenAI의 ChatCompletions API 와 같은 일부 API는 JSON 스키마 기능을 지원하여 개발자가 구조화된 출력을 강제할 수 있도록 합니다.
- 이러한 API는 다양한 수준의 기능을 제공할 수 있습니다:
- 예를 들어, OpenAI의 API는 JSON 스키마 기능의 제한된 하위 집합 을 지원합니다.
- 다른 API는 더 광범위한 스키마 지원을 제공할 수 있습니다.
OpenAI 예시
입력:
from pydantic import BaseModel
from openai import OpenAI
client = OpenAI()
class Step(BaseModel):
explanation: str
output: str
class MathReasoning(BaseModel):
steps: list[Step]
final_answer: str
completion = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=[
{"role": "system", "content": "You are a helpful math tutor. Guide the user through the solution step by step."},
{"role": "user", "content": "how can I solve 8x + 7 = -23"}
],
response_format=MathReasoning,
)
math_reasoning = completion.choices[0].message.parsed
출력:
{
"steps": [
{
"explanation": "Start with the equation 8x + 7 = -23.",
"output": "8x + 7 = -23"
},
{
"explanation": "Subtract 7 from both sides to isolate the term with the variable.",
"output": "8x = -23 - 7"
},
{
"explanation": "Simplify the right side of the equation.",
"output": "8x = -30"
},
{
"explanation": "Divide both sides by 8 to solve for x.",
"output": "x = -30 / 8"
},
{
"explanation": "Simplify the fraction.",
"output": "x = -15 / 4"
}
],
"final_answer": "x = -15 / 4"
}
JSON 형식이 가져오는 이점은 무엇인가?
JSON(JavaScript Object Notation)은 구조화된 출력과 데이터 교환에 널리 사용되며, 현대 애플리케이션 개발에서 없어서는 안 될 다양한 장점을 제공합니다. 주요 이점을 간략히 살펴보겠습니다:
1. 예측 가능하고 일관된 출력
- JSON은 출력이 사전 정의된 스키마를 엄격히 따르도록 보장하여 변형을 제거하고 다운스트림 시스템이 데이터를 안정적으로 처리할 수 있도록 합니다.
- 엄격한 스키마 준수는 LLM이 예상치 못하거나 “환각된” 필드를 생성할 가능성을 줄여 일관되고 정확한 결과를 보장합니다.
2. 안정적인 데이터 추출 및 기계 가독성
- JSON의 구조화되고 계층적인 특성은 데이터 분석, 보고 또는 애플리케이션 통합을 위해 출력에서 특정 정보를 추출하는 데 이상적입니다.
- 기계가 쉽게 구문 분석하고 처리할 수 있어 원활한 자동화와 워크플로우를 가능하게 합니다.
3. 구문 분석 및 통합의 용이성
- JSON의 가볍고 텍스트 기반 형식은 사람이 읽고 기계가 구문 분석하기 쉬워 사용성을 높입니다.
- 대부분의 현대 프로그래밍 언어는 JSON을 기본적으로 또는 라이브러리를 통해 지원하여 통합을 간소화합니다. 예를 들면:
- Python:
json모듈 - Go:
encoding/json패키지 - Node.js: 내장
JSON객체 - Java: Jackson 및 Gson 라이브러리
- ASP.NET:
System.Text.Json또는Newtonsoft.Json - Ruby:
json라이브러리
- Python:
4. 스키마 정의 및 검증
- JSON Schema는 출력의 예상 구조와 데이터 유형을 정의하는 표준화된 방법을 제공합니다.
- 검증을 통해 출력이 사전 정의된 스키마를 준수하는지 확인하여 자동 오류 감지와 잘못된 데이터 방지가 가능합니다.
5. 선택적 매개변수를 통한 유연성
- JSON은 선택적 필드를 지원하여 스키마 설계에 유연성을 제공합니다.
- Python의 Pydantic 과 같은 도구를 사용하면 개발자가 선택적 유형 주석으로 스키마를 정의하여 특정 필드가 항상 존재하지 않는 경우를 처리할 수 있습니다.
6. 효율성 및 성능
- JSON의 미니멀한 구문은 간결하고 효율적인 데이터 표현을 보장하여 대역폭이 제한된 환경에 이상적입니다.
- Baseten 과 같은 구현에서는 스키마에 대해 미리 계산된 토큰 마스크를 사용하여 이후 호출의 지연 시간을 최소화하여 성능을 더욱 향상시킵니다.
7. 상호 운용성 및 확장성
- JSON은 다양한 프로그래밍 언어, 프레임워크 및 도구와 호환되어 서로 다른 시스템과 플랫폼 간의 원활한 통합을 보장합니다.
- 유연한 구조를 통해 개발자는 기존 워크플로우나 호환성을 깨뜨리지 않고 데이터 형식을 확장하거나 수정할 수 있습니다.
8. API 및 데이터베이스와의 통합
- JSON은 많은 최신 API의 기본 데이터 형식으로, 클라이언트와 서버 간의 일관되고 예측 가능한 통신을 가능하게 합니다.
- 또한 MongoDB, PostgreSQL과 같은 많은 데이터베이스에서 기본적으로 지원되어 구조화된 데이터를 효율적으로 저장하고 검색할 수 있습니다.
9. 사람이 읽을 수 있는 형식
JSON의 단순하고 직관적인 구조는 개발자와 비기술적 이해 관계자 모두가 읽고 이해하기 쉽게 하여 디버깅과 협업을 간소화합니다.
**예측 가능성 **, ** 효율성 **, ** 사용성 , ** 유연성을 결합한 JSON은 현대 애플리케이션 개발의 초석이 되었습니다. 구조화된 출력을 강제하고, 안정적인 데이터 교환을 보장하며, 도구, API 및 데이터베이스와 원활하게 통합할 수 있는 능력은 개발자와 조직 모두에게 매우 귀중한 형식입니다.
JSON 형식의 응용 분야
JSON을 구조화된 출력에 사용하는 것은 다양한 영역에서 다양하게 활용되며 계속해서 성장하고 있습니다:
1. 웹 스크래핑
- 웹 페이지에서 제목, 단락, 링크, 이미지와 같은 특정 요소를 추출하여 구조화된 JSON 형식으로 제공합니다.
2. 텍스트에서 데이터 추출
- 비정형 텍스트를 구조화된 JSON 객체로 변환하여 정보 검색, 데이터 분석 또는 콘텐츠 구성과 같은 작업에 사용합니다.
3. 챗봇 및 대화형 에이전트 구축
- 특히 백엔드 시스템이나 API와 통합할 때 챗봇 응답이 사전 정의된 JSON 구조를 따르도록 보장합니다.
Novita AI는 각 LLM에 대한 지원 기능 설명을 이미 출시했으며, 콘솔과 문서에서 직접 확인할 수 있습니다.
JSON 형식의 한계
장점에도 불구하고 JSON을 구조화된 출력에 사용할 때는 특정 한계가 있습니다:
1. 부분적인 JSON 스키마 지원
- OpenAI의 ChatCompletions API와 같은 일부 LLM API는 전체 JSON Schema 사양의 하위 집합만 지원합니다. 숫자에 대한
minimum및maximum또는 배열에 대한minItems및maxItems와 같은 기능이 지원되지 않아 적용할 수 있는 제약 조건이 제한될 수 있습니다.
2. 형식 지정 제한
- Pydantic 스키마의 datetime 형식과 같은 특정 형식 지정은 API에서 직접 처리되지 않아 추가 사후 검증 단계가 필요할 수 있습니다.
3. 환각 가능성
- JSON은 출력의 구조를 보장하지만, 구조화된 필드 내의 내용은 여전히 환각될 수 있습니다. 예를 들어, 제품 ID가 문자열로 올바르게 형식화될 수 있지만 ID 자체가 유효하지 않거나 의미가 없을 수 있습니다.
4. 출력 토큰 제한
- JSON 출력은 LLM 토큰 제한(예: 16,384 토큰 제한이 있는 OpenAI 모델)에 의해 제한됩니다. 구조화된 출력이 제한을 초과하면 잘려서 유효하지 않은 JSON이 발생할 수 있습니다.
5. 스키마 복잡성 제한
- 깊게 중첩된 스키마와 많은 객체 속성은 API 오류를 유발할 수 있습니다. 더 나은 성능과 오류 방지를 위해 스키마를 비교적 평탄하고 단순하게 유지하는 것이 좋습니다.
6. 동적 스키마 기능 제한
- 키가 사전 정의되지 않은 키-값 쌍 목록과 같이 매우 동적이거나 임의적인 스키마는 구조화된 출력으로 구현하기 어렵습니다. 이러한 경우 시스템 프롬프트의 지침과 함께 표준 JSON 모드가 더 효과적일 수 있습니다.
7. 지연 시간 오버헤드
- 구조화된 스키마를 처리하면 초기 요청에 지연 시간이 발생할 수 있으며, 스키마를 처리하고 잠재적으로 캐시해야 합니다.
8. 기본 주석 부족
- JSON은 데이터 내에 주석을 지원하지 않으므로 외부 문서 없이는 복잡한 구조를 이해하기 어려울 수 있습니다.
JSON은 LLM을 사용한 현대 애플리케이션 개발의 초석으로, 구조화된 출력을 위한 강력하고 널리 채택된 형식을 제공합니다. 사전 정의된 스키마를 강제함으로써 일관성을 보장하고 데이터 추출을 용이하게 하며 시스템 간 통합을 간소화합니다. 부분적인 JSON 스키마 지원 및 잠재적인 내용 환각과 같은 한계에도 불구하고, 예측 가능성, 사용 용이성 및 호환성은 지능적이고 통합된 애플리케이션을 구축하는 데 필수적입니다. 강점과 제약 사항을 명확히 이해하는 것은 LLM 기반 솔루션을 최적화하는 데 중요합니다.
자주 묻는 질문
JSON을 사용한 구조화된 출력이 오류 없는 것이 보장되나요?
구조화된 출력은 응답이 스키마를 따르는 유효한 JSON 객체임을 보장하지만, 해당 구조 내의 콘텐츠의 정확성이나 유효성을 보장하지는 않습니다. 환각은 여전히 발생할 수 있습니다.
JSON을 사용한 구조화된 출력이 LLM 응답 속도를 늦추나요?
스키마가 처리됨에 따라 초기에 약간의 지연 시간 오버헤드 가 있을 수 있습니다. 그러나 일부 구현에서는 처음 몇 번의 요청 후 캐싱 및 기타 최적화로 인해 이 오버헤드가 최소화됩니다.
JSON 모드와 JSON 스키마 모드의 차이점은 무엇인가요?
**JSON 모드 ** 에서는 상세한 스키마를 지정하지 않고 LLM에 유효한 JSON 객체를 반환하도록 지시합니다. JSON 스키마 모드 에서는 특정 JSON 스키마를 제공하고 LLM이 출력에서 이 구조를 따르도록 강제합니다.
Novita AI는 AI 비전을 실현하는 올인원 클라우드 플랫폼입니다. 통합 API, 서버리스, GPU 인스턴스 — 필요한 비용 효율적인 도구를 제공합니다. 인프라를 제거하고 무료로 시작하여 AI 비전을 현실로 만드세요.


