문제점
LLM은 텍스트 생성에 뛰어나지만, 애플리케이션은 종종 JSON 객체, 배열, 타입 값 등 구조화된 데이터가 필요합니다. 신뢰할 수 있는 구조화된 출력을 얻으려면 구체적인 기법이 필요합니다.
접근 1: 프롬프트 엔지니어링
모델에게 JSON 형식으로 응답하도록 요청하세요:
- 프롬프트에서 정확한 스키마를 명시하세요.
- 입출력 쌍의 예시를 포함하세요.
- "유효한 JSON 로만 응답하세요. 설명은 없어."
접근법 2: 함수 호출 / 도구 사용
대부분의 주요 API는 이제 함수 호출을 지원합니다:
- 기대 출력에 대한 JSON 스키마를 정의합니다.
- 모델은 스키마에 맞는 출력으로 제한됩니다.
- OpenAI, Anthropic, Google 및 대부분의 제공업체와 협력합니다.
접근법 3: 제한된 디코딩
아웃라인과 LMQL과 같은 라이브러리는 모델이 유효한 출력을 내도록 강제합니다:
- Pydantic 모델 또는 JSON 스키마를 정의합니다.
- 디코딩 과정은 토큰 방식으로 스키마 토큰을 강제합니다.
- 유효한 출력 구조의 100% 보장.
접근 4: 강사 도서관
Instructor 라이브러리는 모든 LLM API를 Pydantic 검증으로 감싸줍니다:
- Pydantic으로 데이터 모델을 정의하세요.
- 강사는 재시도와 검증을 자동으로 처리합니다.
- OpenAI, Anthropic, Gemini, 로컬 모델을 지원합니다.
모범 사례
- 항상 출력을 스키마와 대조하여 검증합니다.
- 제한된 옵션이 있는 필드에는 열거 유형을 사용한다.
- 잘못된 응답에 대한 재시도 논리를 포함합니다.
- 스키마를 단순하게 유지하세요 — 중첩된 구조는 오류율을 증가시킵니다.
- 신뢰성을 측정하기 위해 50+ 예제로 테스트합니다.