본문으로 건너뛰기
&Dolphin
기술 블로그
AI

LLM 응답을 믿을 수 있게 만드는 것은 프롬프트가 아니라 스키마다

"JSON 으로만 답해" 라고 쓰는 대신, JSON 이 아니면 통과하지 못하게 만든다.

목차

문장으로 부탁하는 방식의 한계

프롬프트에 이렇게 적는 방식이 있다.

text
반드시 아래 형식의 JSON 으로만 답하세요. 다른 말은 쓰지 마세요.

잘 동작한다. 99% 정도는. 나머지 1% 가 문제인데, 그 1% 는 트래픽이 늘 때 같이 는다.

구조로 강제한다

모델이 형식을 지키게 만드는 것과, 형식을 지키지 않은 답을 받지 않는 것은 다르다. 후자는 프롬프트가 아니라 코드가 한다.

java
record ExtractedInvoice(String vendor, LocalDate issuedOn, long totalAmount) {}

ExtractedInvoice result = client.structured(prompt, ExtractedInvoice.class);

이렇게 두면 형식 위반이 파싱 실패가 되고, 파싱 실패는 재시도든 사람 검수든 정해진 경로를 탄다. 프롬프트에 "반드시" 를 한 번 더 쓰는 것과는 다른 종류의 보장이다.

스키마를 좁히면 프롬프트가 짧아진다

필드 이름과 타입이 이미 의도를 말하므로 설명할 것이 줄어든다. totalAmount: long 은 "숫자만, 통화 기호 없이" 를 문장으로 쓰지 않아도 된다는 뜻이다.

프롬프트를 길게 쓰는 것으로 해결하려 했던 문제의 상당수가 여기서 사라진다.

LLM 응답을 믿을 수 있게 만드는 것은 프롬프트가 아니라 스키마다 | &Dolphin