게시일: 2025년 5월 13일
대규모 언어 모델 (LLM)은 때때로 긴 대답을 제공하는 것으로 악명이 높습니다. 모델에 'true' 또는 'false'로만 답변하도록 지시하더라도 모델은 '정확히, 답은 true입니다.'와 같이 친근한 출력과 요청한 것 이상의 내용으로 응답할 수 있습니다.
이 문제를 해결하기 위해 Prompt API를 사용하면 LanguageModel.prompt()
및 LanguageModel.promptStreaming()
메서드에 JSON 스키마를 전달하여 모델 응답의 JSON 출력 형식을 지정할 수 있습니다. 구조화된 출력 지원은 Chrome 버전 137부터 사용할 수 있습니다.
JSON 스키마란 무엇인가요?
JSON 스키마는 대규모로 JSON 데이터 일관성, 유효성, 상호 운용성을 지원하는 어휘입니다. 데이터 교환의 경우 JSON 스키마는 JSON 데이터의 구조와 규칙을 정의하는 강력한 표준으로 돋보입니다. 키워드 집합을 사용하여 데이터의 속성을 정의합니다.
JSON 스키마는 구조화된 출력을 보장하기 위한 업계 표준으로, OpenAI API 및 Gemini API에서 사용합니다.
예를 들어 Mastodon과 같은 온라인 소셜 네트워크의 게시물에 최대 3개의 해시태그를 할당하도록 모델에 프롬프트를 표시할 수 있습니다. 이상적인 출력은 다음 JSON과 유사할 수 있습니다.
{
"hashtags": [
"#pottery",
"#dyi"
]
}
그러면 요청된 출력 객체 도형에 해당하는 JSON 스키마는 다음과 같습니다.
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
이 JSON 스키마는 다음과 같은 제약 조건이 있는 hashtags
필드를 포함해야 하는 객체의 구조를 정의합니다.
"type": "object"
: 루트 값은 JSON 객체여야 합니다."properties": { "hashtags": ... }
: 객체에hashtags
라는 속성이 있을 수 있으며 (이 경우에는 있어야 함)"hashtags":
"type": "array"
: 값은 배열이어야 합니다."maxItems": 3
: 배열은 최대 3개의 항목을 포함할 수 있습니다."items": { "type": "string", "pattern": "^#[^\\s#]+$" }
: 배열의 각 항목은 지정된 정규 표현식 패턴(^#[^\\s#]+$
)과 일치하는 문자열이어야 합니다.^#
→#
로 시작해야 합니다.[^\\s#]+
→ 공백 (\s
) 또는 다른#
가 아닌 하나 이상의 문자가 뒤에 옵니다.$
→ 여기에서 끝나야 합니다.
"required": ["hashtags"]
: 객체에hashtags
속성이 포함되어야 합니다."additionalProperties": false
: 해시태그 이외의 다른 속성은 허용되지 않습니다.
형식의 기능에 관한 전체 설명은 JSON 스키마 기본사항 문서를 참고하세요.
실제로 LLM은 JSON 스키마를 만드는 데 탁월합니다. 프롬프트에서 자연어로 제약 조건을 설명하고 유효한 JSON 객체 예시를 제공하면 됩니다. 그런 다음 JSON 스키마 검사기(예: 온라인 Newtonsoft JSON 스키마 검사기) 중 하나를 사용하여 생성된 JSON 스키마에 대해 JSON 객체의 유효성을 검사할 수 있습니다.
Prompt API에 JSON 스키마 전달
모델이 요청된 JSON 스키마를 준수하도록 하려면 JSON 스키마를 prompt()
메서드의 인수로 전달하거나 promptStreaming()
메서드의 옵션 객체에 responseConstraint
필드의 값으로 전달해야 합니다.
다음은 Mastodon 게시물과 같은 특정 메시지가 도자기와 관련이 있는지 분류할 때 모델이 true
또는 false
으로 응답하도록 하는 매우 기본적인 JSON 스키마 예입니다.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
예측 가능한 출력 지원
Prompt API의 구조화된 출력 지원을 사용하면 LLM의 응답을 훨씬 더 예측할 수 있습니다. 이제 개발자는 마크다운 응답이나 기타 후처리에서 객체를 추출하는 대신 모델의 응답이 유효한 JSON이라고 가정할 수 있습니다.
이렇게 하면 로컬 클라이언트 측 AI를 실행하는 모든 이점을 활용하여 빌트인 AI를 클라우드 기반 API에 한 걸음 더 가깝게 가져올 수 있습니다.