Gemini 모델은 기본적으로 비구조화된 텍스트로 대답을 반환합니다. 하지만 일부 사용 사례에서는 JSON과 같은 구조화된 텍스트가 필요합니다. 예를 들어 기존 데이터 스키마가 필요한 다른 다운스트림 작업에 대답을 사용할 수 있습니다.
모델에서 생성된 출력이 항상 특정 스키마를 준수하도록 하려면 모델 대답 청사진처럼 작동하는 스키마를 정의합니다. 그러면 후처리를 덜 거쳐 모델 출력에서 데이터를 직접 추출할 수 있습니다.
예를 들면 다음과 같습니다.
모델의 대답이 유효한 JSON을 생성하고 제공된 스키마를 준수하도록 합니다.
예를 들어 모델은 항상 레시피 이름, 재료 목록, 단계를 포함하는 레시피의 구조화된 항목을 생성할 수 있습니다. 그러면 앱의 UI에서 이 정보를 더 쉽게 파싱하고 표시할 수 있습니다.분류 작업 중에 모델이 응답하는 방식을 제한합니다.
예를 들어 모델이 생성하는 라벨 (good,positive,negative,bad와 같이 어느 정도 가변성이 있을 수 있음) 대신 특정 라벨 세트 (예:positive,negative와 같은 특정 enum 세트)로 텍스트에 주석을 달도록 할 수 있습니다.
이 페이지에서는 웹 앱의 하이브리드 환경에서 구조화된 출력 (예: JSON 및 enum)을 생성하는 방법을 설명합니다.
시작하기 전에
하이브리드 환경 빌드 시작 가이드를 완료했는지 확인하세요.
구조화된 출력의 구성 설정
클라우드 호스팅 모델과 온디바이스 모델을 모두 사용하여 추론할 때 구조화된 출력 (예: JSON 및 enum) 생성이 지원됩니다.
하이브리드 추론의 경우 inCloudParams 및 onDeviceParams를 모두 사용하여 구조화된 출력으로 응답하도록 모델을 구성합니다. 다른 모드의 경우 적용 가능한 구성만 사용하세요.
inCloudParams: 적절한responseMimeType(예:application/json)과 모델이 사용할responseSchema을 지정합니다.onDeviceParams의 경우: 모델에서 사용할responseConstraint를 지정합니다.
JSON 출력
다음 예에서는 일반 JSON 출력 예를 조정하여 하이브리드 추론 (이 예에서는 PREFER_ON_DEVICE)을 수용합니다.
import {
getAI,
getGenerativeModel,
Schema
} from "firebase/ai";
const jsonSchema = Schema.object({
properties: {
characters: Schema.array({
items: Schema.object({
properties: {
name: Schema.string(),
accessory: Schema.string(),
age: Schema.number(),
species: Schema.string(),
},
optionalProperties: ["accessory"],
}),
}),
}
});
const model = getGenerativeModel(ai, {
mode: InferenceMode.PREFER_ON_DEVICE,
inCloudParams: {
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
// ...
열거형 출력
다음 예에서는 하이브리드 추론 (이 예에서는 PREFER_ON_DEVICE)을 수용하도록 일반 열거형 출력 예를 적용합니다.
import {
getAI,
getGenerativeModel,
Schema
} from "firebase/ai";
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"],
});
const model = getGenerativeModel(ai, {
mode: InferenceMode.PREFER_ON_DEVICE,
inCloudParams: {
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: enumSchema
}
}
});
// ...