형식이 잘못된 출력을 위한 수정 반복
JSON을 구문 분석할 수 없으면 오류를 모델에 다시 보내 출력을 수정하도록 요청해보세요.
형식이 잘못된 출력을 위한 수정 반복은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
엄격 모드도 때때로 실패합니다
오래된 모델, 예외적인 경우 또는 엄격하지 않은 제공자는 가끔 잘못된 JSON을 반환합니다. 견고한 에이전트는 모델에 출력을 수정하도록 요청하여 복구합니다.
Basic Repair Loop
from pydantic import ValidationError
import json
def call_with_repair(messages, schema, max_attempts=3):
for attempt in range(max_attempts):
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=messages,
response_format={'type': 'json_object'}
)
raw = response.choices[0].message.content
try:
return schema.model_validate_json(raw)
except (json.JSONDecodeError, ValidationError) as e:
messages.append({'role': 'assistant', 'content': raw})
messages.append({
'role': 'user',
'content': f'That output failed to validate: {e}.\nReturn ONLY valid JSON that matches the schema. No prose, no markdown fences.'
})
raise RuntimeError('Could not get valid output after repair attempts.')작동하는 이유
모델은 오류 메시지를 확인하고 대개 다음 차례에 수정합니다. 다음과 같은 명시적인 지침을 추가하십시오:
- "설명문을 작성하지 마십시오"
- "마크다운 펜스를 사용하지 마십시오"
- "다음의 정확한 형태와 일치시키십시오: ..."
마크다운 펜스 제거하기
모델은 JSON을 ```json ... ```으로 감싸는 경우가 많습니다. 구문 분석 전에 제거하십시오:
import re
def extract_json(text):
m = re.search(r'```(?:json)?\s*(.*?)```', text, re.S)
if m:
return m.group(1).strip()
return text.strip()
sample = '```json\n{"name": "Alice"}\n```'
print(extract_json(sample))
첫 괄호부터 잘라내기
불필요한 설명문이 있다면 첫 번째 {부터 일치하는 마지막 }까지 잘라내십시오:
def find_json_slice(text):
start = text.find('{')
if start == -1:
return None
depth = 0
for i, c in enumerate(text[start:], start):
if c == '{': depth += 1
if c == '}':
depth -= 1
if depth == 0:
return text[start:i+1]
return None
sample = 'Here is your answer: {"name": "Alice", "age": 30} - hope that helps!'
print(find_json_slice(sample))
대신 처리해 주는 도구
- 인스트럭터 — 파이단틱, 수정 반복문, 재시도를 하나로 묶습니다
- 아웃라인스 — 유도 디코딩을 통한 구조화된 출력을 보장합니다
- 제이슨포머 — 토큰 단위로 JSON을 강제합니다(HF 모델)
효과적인 수정 프롬프트
구체적인 오류 메시지와 간단한 형식 안내를 포함하십시오:
repair_prompt = f'''
Your previous output had this error: {error}
Fix the output. Requirements:
- Valid JSON only
- Match this schema: {json.dumps(schema)}
- No prose, no markdown fences
'''수정 반복문의 비용
수정할 때마다 LLM을 한 번 더 호출합니다. 재시도 횟수를 제한하십시오(2~3회면 충분합니다. 그 이상이면 모델이 복구할 가능성이 낮습니다). 또한 품질 지표로 수정 비율을 기록하십시오.
품질 신호로서의 수정
수정 비율이 5%를 초과한다면 문제가 있는 것입니다. 프롬프트가 불명확하거나, 스키마가 너무 복잡하거나, 모델이 너무 작을 수 있습니다. 원인을 조사하십시오.
대안: 제약 디코딩
오픈 소스 모델은 문법 제약 디코딩을 지원하므로 모델이 잘못된 출력을 전혀 생성할 수 없습니다. 아웃라인스, 제이슨포머, llama.cpp 문법이 이 기능을 제공합니다.
대안: 스키마 대신 함수 사용하기
엄격 모드로 도구 호출을 강제하는 방식은 JSON 모드와 수정 과정을 함께 사용하는 것보다 깔끔한 대안입니다. 제공자가 지원한다면 항상 사용하십시오.
잘못된 출력 기록하기
패턴을 분석할 수 있도록 수정된 출력을 모두 기록하십시오:
log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})포기해야 할 때
N번 수정한 후에도 출력이 여전히 유효하지 않다면 사용자에게 오류를 반환하십시오. 대체값을 지어내지 마십시오. 조용히 데이터를 손상시키는 것보다 정직하게 실패하는 편이 낫습니다.
수정 반복문 패턴
수정 반복문에서 가장 먼저 수행할 간단한 단계는 무엇인가요?
복습
구문 분석 오류를 감지하고 도구 또는 사용자 메시지로 추가한 다음, 모델에 수정을 요청하십시오. 재시도 횟수를 제한하십시오. 수정 과정 자체를 없애려면 엄격 모드의 도구 호출을 우선 사용하십시오.
자주 묻는 질문
“형식이 잘못된 출력을 위한 수정 반복” 강의는 무료인가요?
네 — “형식이 잘못된 출력을 위한 수정 반복” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
“형식이 잘못된 출력을 위한 수정 반복”에서 뭘 배우나요?
JSON을 구문 분석할 수 없으면 오류를 모델에 다시 보내 출력을 수정하도록 요청해보세요. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Agents을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“형식이 잘못된 출력을 위한 수정 반복” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- JSON 모드 및 도구 호출 출력
- Pydantic 스키마 검증
- 형식이 잘못된 출력을 위한 수정 반복
- 보장된 구조를 위한 Instructor / Outlines