채팅 프롬프트 요청 보내기(Gemini)

이 페이지에서는 Google Cloud 콘솔, REST API, 지원되는 SDK를 사용하여 Gemini 1.0 Pro(gemini-1.0-pro) 모델에 채팅 프롬프트를 보내는 방법을 보여줍니다. Gemini 1.0 Pro에서는 자연어 작업, 멀티턴 문자 및 코드 채팅, 코드 생성 등의 텍스트 전용 입력으로 프롬프트를 지원합니다. 텍스트와 코드를 출력할 수 있습니다.

Gemini 1.0 Pro 기반 모델은 언어 이해 및 생성에 뛰어난 대규모 언어 모델입니다. 싱글턴 프롬프트 및 응답을 사용하여 Gemini Pro와 상호작용하거나 여러 번 연속으로 진행하는 대화에서 코드 이해 및 생성을 위한 방법으로도 상호작용할 수 있습니다.

Gemini 1.0 Pro에서 지원되는 언어 목록은 모델 정보 언어 지원을 참조하세요.


콘솔에서 이 모델을 살펴보려면 Model Garden에서 gemini-1.0-pro 모델 카드를 선택합니다.

Model Garden으로 이동


모바일 및 웹 앱에서 Gemini를 직접 사용할 수 있는 방법을 찾는 경우에는 Android, Swift, 웹을 위한 Google AI SDK를 참조하세요.

채팅 프롬프트 보내기

채팅 프롬프트에서 테스트하고 반복하려면 Google Cloud 콘솔을 사용하는 것이 좋습니다. 모델에 프로그래매틱 방식으로 메시지를 보내려면 REST API, Python용 Vertex AI SDK 또는 기타 지원되는 라이브러리 및 SDK 중 하나를 사용하면 되며 아래 표에 자세히 나열되어 있습니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드

import vertexai

from vertexai.generative_models import GenerativeModel, ChatSession

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
vertexai.init(project=project_id, location=location)
model = GenerativeModel(model_name="gemini-1.0-pro-002")
chat = model.start_chat()

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat, prompt))

prompt = "What are all the colors in a rainbow?"
print(get_chat_response(chat, prompt))

prompt = "Why does it appear when it rains?"
print(get_chat_response(chat, prompt))

C#

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용C# 설정 안내를 따르세요. 자세한 내용은 Vertex AI C# API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


using Google.Cloud.AIPlatform.V1;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

public class MultiTurnChatSample
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.0-pro"
    )
    {
        // Create a chat session to keep track of the context
        ChatSession chatSession = new ChatSession($"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}", location);

        string prompt = "Hello.";
        Console.WriteLine($"\nUser: {prompt}");

        string response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        prompt = "What are all the colors in a rainbow?";
        Console.WriteLine($"\nUser: {prompt}");

        response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        prompt = "Why does it appear when it rains?";
        Console.WriteLine($"\nUser: {prompt}");

        response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        return response;
    }

    private class ChatSession
    {
        private readonly string _modelPath;
        private readonly PredictionServiceClient _predictionServiceClient;

        private readonly List<Content> _contents;

        public ChatSession(string modelPath, string location)
        {
            _modelPath = modelPath;

            // Create a prediction service client.
            _predictionServiceClient = new PredictionServiceClientBuilder
            {
                Endpoint = $"{location}-aiplatform.googleapis.com"
            }.Build();

            // Initialize contents to send over in every request.
            _contents = new List<Content>();
        }

        public async Task<string> SendMessageAsync(string prompt)
        {
            // Initialize the content with the prompt.
            var content = new Content
            {
                Role = "USER"
            };
            content.Parts.AddRange(new List<Part>()
            {
                new() {
                    Text = prompt
                }
            });
            _contents.Add(content);

            // Create a request to generate content.
            var generateContentRequest = new GenerateContentRequest
            {
                Model = _modelPath,
                GenerationConfig = new GenerationConfig
                {
                    Temperature = 0.9f,
                    TopP = 1,
                    TopK = 32,
                    CandidateCount = 1,
                    MaxOutputTokens = 2048
                }
            };
            generateContentRequest.Contents.AddRange(_contents);

            // Make a non-streaming request, get a response.
            GenerateContentResponse response = await _predictionServiceClient.GenerateContentAsync(generateContentRequest);

            // Save the content from the response.
            _contents.Add(response.Candidates[0].Content);

            // Return the text
            return response.Candidates[0].Content.Parts[0].Text;
        }
    }
}

Node.js

이 샘플을 사용해 보기 전에 생성형 AI 빠른 시작: Node.js SDK 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Gemini용 Node.js SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContentStream(request);
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContent(request);
  

샘플 코드

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function createStreamChat(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  // Instantiate the model
  const generativeModel = vertexAI.getGenerativeModel({
    model: model,
  });

  const chat = generativeModel.startChat({});
  const chatInput1 = 'How can I learn more about that?';

  console.log(`User: ${chatInput1}`);

  const result1 = await chat.sendMessageStream(chatInput1);
  for await (const item of result1.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작의 Java 설정 안내를 따르세요. 자세한 내용은 Gemini용 Vertex AI Java SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  public ResponseStream generateContentStream(Content content)
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  public GenerateContentResponse generateContent(Content content)
  

샘플 코드

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ChatSession;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class ChatDiscussion {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.0-pro";

    chatDiscussion(projectId, location, modelName);
  }

  // Ask interrelated questions in a row using a ChatSession object.
  public static void chatDiscussion(String projectId, String location, String modelName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerateContentResponse response;

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      // Create a chat session to be used for interactive conversation.
      ChatSession chatSession = new ChatSession(model);

      response = chatSession.sendMessage("Hello.");
      System.out.println(ResponseHandler.getText(response));

      response = chatSession.sendMessage("What are all the colors in a rainbow?");
      System.out.println(ResponseHandler.getText(response));

      response = chatSession.sendMessage("Why does it appear when it rains?");
      System.out.println(ResponseHandler.getText(response));
      System.out.println("Chat Ended.");
    }
  }
}

Go

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작의 Go 설정 안내를 따르세요. 자세한 내용은 Gemini용 Vertex AI Go SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍된 응답을 생성할지 아니면 스트리밍되지 않은 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 GenerateContentStream 메서드를 사용합니다.

  iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
  

비스트리밍 응답의 경우 GenerateContent 메서드를 사용합니다.

  resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
  

샘플 코드

import (
	"context"
	"encoding/json"
	"fmt"

	"cloud.google.com/go/vertexai/genai"
)

var projectId = "PROJECT_ID"
var region = "us-central1"
var modelName = "gemini-1.0-pro-vision"

func makeChatRequests(projectId string, region string, modelName string) error {
	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectId, region)
	if err != nil {
		return fmt.Errorf("error creating client: %v", err)
	}
	defer client.Close()

	gemini := client.GenerativeModel(modelName)
	chat := gemini.StartChat()

	r, err := chat.SendMessage(
		ctx,
		genai.Text("Hello"))
	if err != nil {
		return err
	}
	rb, _ := json.MarshalIndent(r, "", "  ")
	fmt.Println(string(rb))

	r, err = chat.SendMessage(
		ctx,
		genai.Text("What are all the colors in a rainbow?"))
	if err != nil {
		return err
	}
	rb, _ = json.MarshalIndent(r, "", "  ")
	fmt.Println(string(rb))

	r, err = chat.SendMessage(
		ctx,
		genai.Text("Why does it appear when it rains?"))
	if err != nil {
		return err
	}
	rb, _ = json.MarshalIndent(r, "", "  ")
	fmt.Println(string(rb))

	return nil
}

REST

Vertex AI API를 사용하여 게시자 모델 엔드포인트에 POST 요청을 보내면 REST를 사용하여 채팅 프롬프트를 보낼 수 있습니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • GENERATE_RESPONSE_METHOD: 모델에서 생성하려는 응답 유형입니다. 모델의 응답 반환 방법을 생성하는 메서드를 선택합니다.
    • streamGenerateContent: 지연 시간에 대한 인식을 줄이기 위해 응답이 생성되는 동안 스트리밍됩니다.
    • generateContent: 완전히 생성된 후 응답이 반환됩니다.
  • LOCATION: 요청을 처리하는 리전입니다. 사용 가능한 옵션은 다음과 같습니다.

    클릭하여 사용 가능한 리전 펼치기

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: 프로젝트 ID
  • MODEL_ID: 사용할 멀티모달 모델의 모델 ID입니다. 옵션은 다음과 같습니다.
    • gemini-1.0-pro-002
    • gemini-1.0-pro-vision-001
    • gemini-1.5-pro-preview-0409
  • ROLE: 콘텐츠와 연결된 대화의 역할입니다. 싱글턴 사용 사례에서도 역할을 지정해야 합니다. 허용되는 값은 다음과 같습니다.
    • USER: 전송한 콘텐츠를 지정합니다.
    • MODEL: 모델의 응답을 지정합니다.
  • TEXT: 프롬프트에 포함할 텍스트 안내입니다.
  • SAFETY_CATEGORY: 기준점을 구성할 안전 카테고리입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 안전 카테고리 펼치기

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: 확률에 따라 지정된 안전 카테고리에 속할 수 있는 응답 차단의 기준점입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 차단 기준점 펼치기

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE(기본)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE는 가장 많이 차단하며 BLOCK_ONLY_HIGH는 가장 적게 차단합니다.
  • SYSTEM_INSTRUCTION: (선택사항) gemini-1.0-pro-002gemini-1.5-pro-preview-0409에 사용할 수 있습니다. 모델이 성능을 향상할 수 있도록 안내합니다. 예를 들어 '가능한 한 간결하게 답변' 또는 'JSON 형식으로 결과 출력'이라고 쓸 수 있습니다.
  • TEMPERATURE: 강도는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 강도는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 강도가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

    모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

  • TOP_P: Top-P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 Top-P 값과 같아질 때까지 확률이 가장 높은 것부터(Top-K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 Top-P 값이 0.5이면 모델이 강도를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • TOP_K: Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 강도를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

    각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • MAX_OUTPUT_TOKENS: 응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

    응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

  • STOP_SEQUENCES: 문자열 중 하나가 응답에서 발견되면 모델에 텍스트 생성을 중지하도록 지시하는 문자열 목록을 지정합니다. 문자열이 응답에 여러 번 표시되면 처음 발견된 위치에서 응답이 잘립니다. 문자열은 대소문자를 구분합니다.

    예를 들어 stopSequences가 지정되지 않았을 때 다음이 반환되면:

    public static string reverse(string myString)

    이 때 stopSequences["Str", "reverse"]로 설정된 응답이 다음과 같이 반환됩니다.

    public static string

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD

JSON 요청 본문:

{
  "contents": {
    "role": "ROLE",
    "parts": { "text": "TEXT" }
  },
  "system_instruction":
  {
    "parts": [
      {
        "text": "SYSTEM_INSTRUCTION"
      }
    ]
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
  "generation_config": {
    "temperature": TEMPERATURE,
    "topP": TOP_P,
    "topK": TOP_K,
    "candidateCount": 1,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "stopSequences": STOP_SEQUENCES,
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

다음과 비슷한 JSON 응답이 수신됩니다.

curl 명령어 예시

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro"
PROJECT_ID="test-project"
GENERATE_RESPONSE_METHOD="generateContent"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
  "contents": [
    {
    "role": "user",
    "parts": { "text": "Hello!" }
    },
    {
    "role": "model",
    "parts": { "text": "Argh! What brings ye to my ship?" }
    },
    {
    "role": "user",
    "parts": { "text": "Wow! You are a real-life pirate!" }
    }
  ],
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.9,
    "topP": 1,
    "candidateCount": 1,
    "maxOutputTokens": 2048
  }
}'

콘솔

Vertex AI Studio를 사용하여 Google Cloud 콘솔에서 채팅 프롬프트를 보내려면 다음을 수행합니다.

  1. Google Cloud 콘솔의 Vertex AI 섹션에서 Vertex AI Studio언어 섹션으로 이동합니다.

    Vertex AI Studio로 이동

  2. 문자 채팅을 클릭합니다.
  3. 모델 및 매개변수를 구성합니다.

    • 리전: 사용할 리전을 선택합니다.
    • 모델: Gemini Pro를 선택합니다.
    • 강도: 슬라이더 또는 텍스트 상자를 사용해서 강도 값을 입력합니다.

      강도는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 온도(temperature)는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 온도(temperature)가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

      모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

    • 토큰 제한: 슬라이더 또는 텍스트 상자를 사용하여 최대 출력 한도의 값을 입력합니다.

      응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

      응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

    • 중지 시퀀스 추가: 모델이 발생할 경우 응답 생성을 중지하는 일련의 문자(공백 포함)인 중지 시퀀스를 입력합니다. 이 시퀀스는 응답에 포함되지 않습니다. 최대 5개의 중지 시퀀스를 추가할 수 있습니다.
  4. 선택사항: 고급 매개변수를 구성하려면 고급을 클릭하고 다음과 같이 구성합니다.

    클릭하여 고급 구성 펼치기

    • Top-K: 슬라이더 또는 텍스트 상자를 사용하여 Top-K의 값을 입력합니다.

      Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 온도(temperature)를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

      각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

      임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

    • Top-P: 슬라이더 또는 텍스트 상자를 사용하여 Top-P의 값을 입력합니다. 토큰의 확률 합계가 Top-P 값과 같아질 때까지 확률이 가장 높은 순에서 낮은 순으로 토큰이 선택됩니다. 최소 변수 결과의 경우 Top-P를 0으로 설정합니다.
  5. Google Cloud 콘솔은 생성되는 프롬프트에 대한 응답을 수신하는 스트리밍만 지원합니다. 모델과 대화를 시작하기 위해 메시지 상자에 메시지를 입력할 준비가 되었습니다.

    모델은 이전 메시지를 새 응답의 컨텍스트로 사용합니다.

  6. 선택사항: 프롬프트를 내 프롬프트에 저장하려면 저장을 클릭합니다.
  7. (선택사항) 프롬프트에 대해 Python 코드 또는 curl 명령어를 가져오려면 코드 가져오기를 클릭합니다.
  8. (선택사항) 이전 메시지를 모두 지우려면 대화 지우기를 클릭합니다.

시스템 안내 사용

시스템 안내를 사용하면 사용자가 특정 요구사항 및 사용 사례에 따라 모델의 동작을 조정할 수 있습니다. 시스템 안내를 설정하면 태스크를 이해하고, 보다 맞춤설정된 응답을 제공하고, 모델과의 전체 사용자 상호작용에 대한 특정 가이드라인을 준수할 수 있는 추가 컨텍스트를 모델에 제공할 수 있습니다. 개발자의 경우 제품 수준 동작을 최종 사용자가 제공하는 프롬프트와 별도로 시스템 안내에 지정할 수 있습니다.

다음과 같은 다양한 방법으로 시스템 안내를 사용할 수 있습니다.

  • 캐릭터 또는 역할 정의(예: 챗봇)
  • 출력 형식 정의(마크다운, YAML 등)
  • 출력 스타일 및 어조 정의(예: 세부정보 수준, 형식, 대상 읽기 수준)
  • 태스크의 목표 또는 규칙 정의(예: 추가 설명 없이 코드 스니펫 반환)
  • 프롬프트에 대한 추가 컨텍스트 제공(예: 지식 컷오프)

시스템 안내가 설정되면 전체 요청에 적용됩니다. 프롬프트에 포함되면 여러 사용자 및 모델 차례에서 작동합니다.

시스템 안내 코드 샘플

다음은 Vertex AI Python SDK를 사용하여 간단한 시스템 안내를 지정하는 예시입니다.

from vertexai.generative_models import GenerativeModel
model = GenerativeModel(
    "gemini-1.0-pro-002",
    system_instruction=[
        "Don't use technical terms in your response",
    ],
)
print(model.generate_content("Explain gravity"))

다음은 curl 명령어에 간단한 시스템 안내를 포함하는 예시입니다.

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-002"
PROJECT_ID="test-project"
GENERATE_RESPONSE_METHOD="generateContent"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models:generateContent" -d \
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "randomly select 10 words from a history book"
        }
      ]
    }
  ],
  "system_instruction":
    {
      "parts": [
        {
          "text": "please print the results in json format."
        }
      ]
    },
  "generation_config": {
    "maxOutputTokens": 2048,
    "temperature": 0.4,
    "topP": 1,
    "topK": 32
  }
}

시스템 안내 예시

다음은 모델의 예상 동작을 정의하는 시스템 프롬프트의 예시입니다. 첫 번째는 프런트엔드 코드 생성을 위한 시스템 프롬프트, 두 번째는 시장 감정 분석 사용 사례 예시, 세 번째는 소비자 챗봇입니다.

코드 생성

  • 시스템: 프런트엔드 인터페이스의 코드 렌더링을 전문으로 하는 코딩 전문가입니다. 빌드하고자 하는 웹사이트의 구성요소를 설명할 때 빌드에 필요한 HTML과 CSS를 반환해 주세요. 이 코드에 대한 설명을 제공하지 마세요. 몇 가지 UI 디자인 제안도 제공합니다.
  • 사용자: 페이지 중간에 회전하는 이미지를 포함하는 상자를 만들고 각 이미지에 캡션을 포함시킵니다. 페이지 중앙의 이미지에는 눈에 띄게 하기 위한 그림자 효과가 있어야 합니다. 사이트의 다른 페이지로도 연결되어야 합니다. 입력할 수 있도록 URL은 비워둡니다.

시장 감정 분석

  • 시스템: 사용자는 뉴스 스니펫을 통해 시장 감정을 분석하는 주식 시장 분석가입니다. 뉴스 스니펫을 기반으로 투자자 감정에 영향을 미치는 문을 추출합니다.

    JSON 형식으로 각 문에 대해 응답합니다.

    • 감정이 부정적 또는 긍정적인지를 점수로 1~10점으로 표시합니다(1이 가장 부정적, 10이 가장 긍정적, 5는 중립적).
    • 해당 문을 반복합니다.
    • 한 문장으로 설명합니다.
  • 사용자: Mobileye는 최근 몇 년 동안 공급망 제약조건으로 인해 최상위 고객이 과잉 재고를 축적했다고 보고했습니다. Mobileye는 올해 첫 분기 매출이 전년도에 발생한 4억 5,800만 달러에서 약 50% 감소할 것으로 예상되며, 2024년 나머지 기간에 정상화될 것이라고 밝혔습니다. Mobileye는 2024년 연간 매출을 18억 3천만 달러에서 19억 6천만 달러로 예상했는데, 이는 현재 2023년에 예상하는 약 20억 8천만 달러보다 감소한 수치입니다.

음악 챗봇

  • 시스템: 음악 역사가로서 다양한 음악 장르에 대한 포괄적인 지식을 보여주고 관련 예시를 제공합니다. 흥미진진하고 열정적인 어조가 음악의 즐거움을 퍼뜨립니다. 음악과 관련된 질문이 아닌 경우 '그것은 제가 모르는 부분입니다'라고 응답해야 합니다.
  • 사용자: 어떤 사람이 60년대에 태어났다면 가장 인기 있는 음악 장르가 무엇이었나요? 글머리 기호별로 5개의 노래를 나열합니다.

다음 단계