0Pricing
AI Prompt Engineering · 강의

수정 및 검증 반복 과정

잘못된 출력 수정

수정 및 검증 반복 과정은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

복구 루프가 필요한 이유

스키마가 있어도 출력은 실패할 수 있습니다. 토큰 제한으로 JSON이 잘리거나, 모델이 존재하지 않는 추가 필드를 만들어 내거나, 숫자가 필요한 곳에 문자열을 내놓거나, 비즈니스 규칙을 위반할 수 있습니다. 복구 루프는 실패를 감지하고 모델에 다시 전달하여 수정하도록 합니다.

이는 성공률을 98%에서 99.9%로 높여 주는 안전망입니다.

검증-복구 주기

표준적인 흐름은 생성하고, validate하고, 유효하지 않으면 구체적인 오류를 포함해 다시 프롬프트를 보내는 것입니다. 이 작업은 시도 횟수를 제한하여 수행합니다.

def generate_valid(prompt, schema, max_tries=3):
    msgs = [{'role': 'user', 'content': prompt}]
    for _ in range(max_tries):
        out = call_model(msgs)
        ok, err = validate(out, schema)
        if ok:
            return out
        msgs.append({'role': 'assistant', 'content': out})
        msgs.append({'role': 'user',
                     'content': 'Invalid. Fix this error and resend JSON only: ' + err})
    raise ValueError('repair budget exhausted')

구체적인 오류가 일반적인 오류보다 낫습니다

복구 품질은 피드백의 정확성에 달려 있습니다. ‘JSON이 유효하지 않습니다’라는 메시지는 도움이 거의 되지 않지만, ‘평점 필드는 1에서 5 사이의 정수여야 하는데 7을 받았습니다’라는 메시지는 거의 항상 한 번의 차례에 문제를 해결합니다.

검증기의 정확한 오류 메시지(경로와 이유를 포함)를 모델에 다시 전달하십시오.

def validate(obj, schema):
    v = jsonschema.Draft202012Validator(schema)
    errs = sorted(v.iter_errors(obj), key=lambda e: e.path)
    if not errs:
        return True, None
    msg = '; '.join(f"{list(e.path)}: {e.message}" for e in errs)
    return False, msg

계층화된 검증

검증에는 여러 계층이 있으므로 가장 비용이 적은 항목부터 check하십시오.

  • 문법적 — JSON으로 파싱되는가?
  • 구조적 — 스키마와 일치하는가?
  • 의미론적 — 값이 비즈니스 규칙과 필드 간 불변 조건을 만족하는가?

할인액은 두 값이 모두 유효한 숫자라도 소계를 초과할 수 없습니다. 이것이 의미론적 check입니다.

def semantic_ok(o):
    return o['discount'] <= o['subtotal'] and o['total'] == o['subtotal'] - o['discount']

결정론적 사전 복구

모델 호출에 비용을 쓰기 전에 흔한 결함에 대해 저렴한 결정론적 수정을 시도하십시오.

  • 마크다운 코드 펜스를 제거하십시오.
  • 주변 설명에서 가장 바깥쪽 JSON 객체를 추출하십시오.
  • 후행 쉼표를 제거하십시오.

결정론적 정리로 해결되지 않을 때만 모델 복구로 넘어가십시오.

def extract_json(text):
    text = text.strip().removeprefix('json').strip()
    start, end = text.find('{'), text.rfind('}')
    if start != -1 and end != -1:
        return text[start:end + 1]
    return text

잘림 처리

finish_reason == 'length'이면 JSON이 잘린 것이므로 조각을 복구하는 것은 의미가 없습니다. 대신 max_tokens를 늘리거나, 요청한 데이터의 크기를 줄이거나, 스트리밍한 뒤 계속 생성을 요청하십시오. 잘림과 잘못된 출력을 구분해야 합니다. 두 경우에 필요한 대응이 서로 반대이기 때문입니다.

if resp.choices[0].finish_reason == 'length':
    # do NOT feed truncated JSON back; regenerate with more room
    return retry_with(max_tokens=resp_max * 2)

루프에 한계를 두십시오

제한 없는 복구는 비용과 지연 시간의 위험 요소이며, 멈춘 모델은 영원히 반복할 수 있습니다. 항상 시도 횟수에 상한을 두고, 요청별 예산을 추가하며, 대체 경로를 정의하십시오. 예를 들어 정상적으로 기능을 축소하거나, 사람의 검토를 위해 대기열에 넣거나, 안전한 기본값을 반환할 수 있습니다.

try:
    data = generate_valid(prompt, schema, max_tries=3)
except ValueError:
    log_for_review(prompt)
    data = SAFE_DEFAULT

도구 호출 내부의 복구

함수 호출에서 복구 채널은 도구 결과입니다. 구조화된 오류를 반환하면 모델이 다음 차례에 스스로 수정하므로 별도의 루프가 필요하지 않습니다.

msgs.append({'role': 'tool', 'tool_call_id': call.id,
  'content': json.dumps({'error': 'amount must be positive', 'got': args['amount']})})
# next model turn will re-issue the call with a corrected argument

멱등성과 부작용

복구 루프가 단순한 생성이 아니라 작업을 감싸는 경우, 재시도가 멱등성을 갖도록 하십시오. 멱등성 키를 사용하면 호출을 다시 보내도 요금이 이중으로 청구되거나 기록이 중복 생성되지 않습니다. 부작용을 적용하기 전에 검증하고, 적용한 뒤에는 절대 검증하지 마십시오.

복구율 관찰

복구율은 품질을 조기에 알려 주는 중요한 신호입니다. 복구율이 상승한다면 프롬프트 회귀, 지나치게 엄격한 스키마 또는 모델 드리프트를 의미할 수 있습니다. 성공당 시도 횟수와 주요 오류 경로를 기록하고, 급증할 때 경고를 보내십시오.

metrics.histogram('llm.repair.attempts', tries)
metrics.increment('llm.repair.error', tags={'path': top_error_path})

제약 조건과 복구 결합

가장 강력한 처리 흐름은 여러 방어 계층을 결합합니다. 제약 디코딩이나 엄격한 스키마 모드로 실패를 최소화하고, 저렴한 수정에는 결정론적 정리를 사용하며, 드물게 남은 오류에는 시도 횟수가 제한된 모델 복구 루프를 사용합니다. 어느 한 계층만으로는 충분하지 않습니다.

빠른 확인

API가 종료 이유가 길이로 표시된 잘린 JSON을 반환합니다. 올바른 대응은 무엇입니까?

요약

견고한 복구 처리 흐름:

  • 검증을 문법적, 구조적, 의미론적 계층으로 나누십시오.
  • 정확하고 경로 수준의 오류를 모델에 다시 전달하십시오.
  • 모델 호출에 비용을 지불하기 전에 결정론적 정리를 시도하십시오.
  • 잘림을 별도로 감지하고 다시 생성하십시오.
  • 시도 횟수에 제한을 두고, 멱등성을 보장하며, 복구율을 모니터링하십시오.

구조화된 생성을 완료했습니다. 다음 과정은 안전장치와 출력 검증입니다.

자주 묻는 질문

“수정 및 검증 반복 과정” 강의는 무료인가요?

네 — “수정 및 검증 반복 과정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

“수정 및 검증 반복 과정”에서 뭘 배우나요?

잘못된 출력 수정 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“수정 및 검증 반복 과정” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 구조화된 출력이 필요한 이유
  2. 프롬프트의 JSON 스키마
  3. 도구 및 함수 스키마
  4. 수정 및 검증 반복 과정
← AI Prompt Engineering(으)로 돌아가기