Gemini API는 텍스트, 이미지, 동영상, 오디오를 입력으로 제공하면 텍스트 출력을 생성할 수 있습니다.
이 가이드에서는 generateContent
및 streamGenerateContent
메서드를 사용하여 텍스트를 생성하는 방법을 보여줍니다. Gemini의 비전 및 오디오 기능을 사용하는 방법을 알아보려면 Vision 및 오디오 가이드를 참고하세요.
텍스트 전용 입력에서 텍스트 생성
Gemini API를 사용하여 텍스트를 생성하는 가장 간단한 방법은 다음 예와 같이 모델에 단일 텍스트 전용 입력을 제공하는 것입니다.
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[{"text": "Write a story about a magic backpack."}]
}]
}' 2> /dev/null
이 경우 프롬프트 ('AI 작동 방식 설명')에 출력 예시, 시스템 안내 또는 형식 지정 정보가 포함되지 않습니다. 제로샷 접근 방식입니다. 일부 사용 사례의 경우 원샷 또는 몇 번의 샷 프롬프트가 사용자 기대치에 더 부합하는 출력을 생성할 수 있습니다. 경우에 따라 모델이 작업을 이해하거나 특정 가이드라인을 따르는 데 도움이 되는 시스템 안내를 제공할 수도 있습니다.
텍스트 및 이미지 입력에서 텍스트 생성
Gemini API는 텍스트와 미디어 파일을 결합한 멀티모달 입력을 지원합니다. 다음 예는 텍스트 및 이미지 입력에서 텍스트를 생성하는 방법을 보여줍니다.
# Use a temporary file to hold the base64 encoded image data
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"
# Use a temporary file to hold the JSON payload
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT
cat > "$TEMP_JSON" << EOF
{
"contents": [{
"parts":[
{"text": "Tell me about this instrument"},
{
"inline_data": {
"mime_type":"image/jpeg",
"data": "$(cat "$TEMP_B64")"
}
}
]
}]
}
EOF
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d "@$TEMP_JSON" 2> /dev/null
텍스트 전용 프롬프트와 마찬가지로 멀티모달 프롬프트에는 다양한 접근 방식과 개선사항이 포함될 수 있습니다. 이 예시의 출력에 따라 프롬프트에 단계를 추가하거나 안내를 더 구체적으로 제공해야 할 수 있습니다. 자세한 내용은 파일 프롬프트 전략을 참고하세요.
텍스트 스트림 생성
기본적으로 모델은 전체 텍스트 생성 프로세스를 완료한 후에 응답을 반환합니다. 전체 결과를 기다리지 않고 대신 스트리밍을 사용하여 부분 결과를 처리하면 더 빠른 상호작용을 실행할 수 있습니다.
다음 예에서는 streamGenerateContent
메서드를 사용하여 스트리밍을 구현하여 텍스트 전용 입력 프롬프트에서 텍스트를 생성하는 방법을 보여줍니다.
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=${GOOGLE_API_KEY}" \
-H 'Content-Type: application/json' \
--no-buffer \
-d '{ "contents":[{"parts":[{"text": "Write a story about a magic backpack."}]}]}'
대화형 채팅 빌드
Gemini SDK를 사용하면 여러 번의 질문과 응답을 수집할 수 있으므로 사용자가 점진적으로 답변을 찾거나 여러 부분으로 구성된 문제와 관련하여 도움을 받을 수 있습니다. 이 SDK 기능은 대화 기록을 추적하는 인터페이스를 제공하지만, 백그라운드에서는 동일한 generateContent
메서드를 사용하여 응답을 만듭니다.
다음 코드 예는 기본 채팅 구현을 보여줍니다.
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{"role":"user",
"parts":[{
"text": "Hello"}]},
{"role": "model",
"parts":[{
"text": "Great to meet you. What would you like to know?"}]},
{"role":"user",
"parts":[{
"text": "I have two dogs in my house. How many paws are in my house?"}]},
]
}' 2> /dev/null | grep "text"
채팅 스트리밍 사용 설정
다음 예와 같이 채팅과 함께 스트리밍을 사용할 수도 있습니다.
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{"role":"user",
"parts":[{
"text": "Hello"}]},
{"role": "model",
"parts":[{
"text": "Great to meet you. What would you like to know?"}]},
{"role":"user",
"parts":[{
"text": "I have two dogs in my house. How many paws are in my house?"}]},
]
}' 2> /dev/null | grep "text"
텍스트 생성 구성
모델에 전송하는 모든 프롬프트에는 모델이 응답을 생성하는 방식을 제어하는 매개변수가 포함됩니다. GenerationConfig
를 사용하여 이러한 매개변수를 구성할 수 있습니다. 매개변수를 구성하지 않으면 모델은 기본 옵션을 사용하며 이는 모델에 따라 다를 수 있습니다.
다음 예는 사용 가능한 여러 옵션을 구성하는 방법을 보여줍니다.
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"text": "Write a story about a magic backpack."}
]
}],
"safetySettings": [
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_ONLY_HIGH"
}
],
"generationConfig": {
"stopSequences": [
"Title"
],
"temperature": 1.0,
"maxOutputTokens": 800,
"topP": 0.8,
"topK": 10
}
}' 2> /dev/null | grep "text"
stopSequences
는 출력 생성을 중지하는 문자 시퀀스 집합 (최대 5개)을 지정합니다. 지정된 경우 API는 stop_sequence
가 처음 표시될 때 중지됩니다. 중지 시퀀스는 응답에 포함되지 않습니다.
temperature
는 출력의 무작위성을 제어합니다. 창의적인 대답을 위해서는 더 높은 값을 사용하고 확정적인 대답을 위해서는 더 낮은 값을 사용합니다. 값의 범위는 [0.0, 2.0]입니다.
maxOutputTokens
는 후보에 포함할 최대 토큰 수를 설정합니다.
topP
는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합계가 topP
값과 같아질 때까지 확률이 가장 높은 순에서 낮은 순으로 선택됩니다. 기본 topP
값은 0.95입니다.
topK
는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. topK
가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미이고, topK
가 3이면 강도를 사용하여 가장 확률이 높은 토큰 3개 중에서 다음 토큰이 선택된다는 의미입니다. 토큰은 topP
을 기준으로 추가로 필터링되고 강도 샘플링을 사용하여 선택된 최종 토큰이 됩니다.
시스템 안내 추가
시스템 안내를 사용하면 특정 요구사항 및 사용 사례에 따라 모델의 동작을 조정할 수 있습니다.
모델에 시스템 안내를 제공하면 작업을 이해하고, 보다 맞춤설정된 대답을 생성하고, 모델과의 전체 사용자 상호작용에 대한 특정 가이드라인을 준수하기 위한 추가 컨텍스트를 모델에 제공할 수 있습니다. 최종 사용자가 제공하는 프롬프트와 별도로 시스템 안내를 설정하여 제품 수준 동작을 지정할 수도 있습니다.
모델을 초기화할 때 시스템 안내를 설정할 수 있습니다.
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
"parts":
{ "text": "You are a cat. Your name is Neko."}},
"contents": {
"parts": {
"text": "Hello there"}}}'
시스템 안내 사용의 대화형 엔드 투 엔드 예시는 시스템 안내 Colab을 참고하세요.
다음 단계
이제 Gemini API의 기본사항을 살펴봤으므로 다음을 시도해 보세요.