Vertex AI SDK의 생성형 AI 모듈은 지원 중단되었으며 2026년 6월 24일 이후에는 더 이상 사용할 수 없습니다. Google 생성형 AI SDK에는 Vertex AI SDK의 모든 기능이 포함되어 있으며 다양한 추가 기능을 지원합니다.
이 마이그레이션 가이드를 사용하여 Vertex AI SDK를 사용하는 Python, Java, JavaScript, Go 코드를 Google 생성형 AI SDK로 변환하세요.
주요 변경사항
Vertex AI SDK의 다음 네임스페이스는 지원 중단 단계에 있습니다. 2026년 6월 24일 이후에 출시되는 SDK에는 이러한 모듈이 포함되지 않습니다. 지원 중단된 모듈 및 패키지와 완전한 기능 패리티가 있는 Google 생성형 AI SDK의 동등한 네임스페이스를 사용하세요.
Vertex AI SDK | 영향을 받는 코드 | Google Gen AI SDK 대체 |
---|---|---|
google-cloud-aiplatform |
삭제된 모듈: |
google-genai |
cloud.google.com/go/vertexai/genai |
삭제된 패키지: |
google.golang.org/genai |
@google-cloud/vertexai |
삭제된 모듈: |
@google/genai |
com.google.cloud:google-cloud-vertexai |
삭제된 패키지: |
com.google.genai:google-genai |
코드 마이그레이션
다음 섹션을 사용하여 Vertex AI SDK에서 Google Gen AI SDK로 특정 코드 스니펫을 이전하세요.
설치
Vertex AI SDK 종속 항목을 Google Gen AI SDK 종속 항목으로 바꿉니다.
이전
Python
pip install -U -q "google-cloud-aiplatform"
자바
Gradle:
gradle:
implementation 'com.google.cloud:google-cloud-vertexai:1.26.0'
maven:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-vertexai</artifactId>
<version>1.26.0</version>
</dependency>
자바스크립트
npm install @google-cloud/vertexai
Go
go get cloud.google.com/go/vertexai/genai
이후
Python
pip install -U -q "google-genai"
자바
gradle:
implementation 'com.google.genai:google-genai:1.5.0'
maven:
<dependency>
<groupId>com.google.genai</groupId>
<artifactId>google-genai</artifactId>
<version>1.5.0</version>
</dependency>
자바스크립트
npm install @google/genai
Go
go get google.golang.org/genai
컨텍스트 캐싱이
컨텍스트 캐싱은 유사한 요청에 대해 모델 프롬프트의 자주 사용되는 부분을 저장하고 재사용하는 것을 의미합니다. Vertex AI SDK 구현을 Google Gen AI SDK 종속 항목으로 대체합니다.
이전
Python
가져오기
from google.cloud import aiplatform
import vertexai
import datetime
만들기
vertexai.init(project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION)
cache_content = vertexai.caching.CachedContent.create(
model_name=MODEL_NAME,
system_instruction='Please answer my question formally',
contents=['user content'],
ttl=datetime.timedelta(days=1),
)
가져오기
vertexai.init(project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION)
cache_content = vertexai.caching.CachedContent.get(cached_content_name="projects/{project}/locations/{location}/cachedContents/{cached_content}")
삭제
cache_content.delete()
업데이트
cache_content.update(ttl=datetime.timedelta(days=2))
목록
cache_contents = vertexai.caching.CachedContent.list()
자바
컨텍스트 캐싱은 Java Vertex AI SDK에서는 지원되지 않지만 Google 생성형 AI SDK에서는 지원됩니다.
자바스크립트
컨텍스트 캐싱은 JavaScript Vertex AI SDK에서 지원되지 않지만 Google 생성형 AI SDK에서는 지원됩니다.
Go
가져오기
package contextcaching
// [START generativeaionvertexai_gemini_create_context_cache]
import (
"context"
"fmt"
"io"
"time"
"cloud.google.com/go/vertexai/genai"
)
만들기
content := &genai.CachedContent{
Model: modelName,
SystemInstruction: &genai.Content{
Parts: []genai.Part{genai.Text(systemInstruction)},
},
Expiration: genai.ExpireTimeOrTTL{TTL: 60 * time.Minute},
Contents: []*genai.Content{
{
Role: "user",
Parts: []genai.Part{part1, part2},
},
},
}
result, err := client.CreateCachedContent(context, content)
가져오기
cachedContent, err := client.GetCachedContent(context, contentName)
삭제
err = client.DeleteCachedContent(context, contentName)
업데이트
newExpireTime := cc.Expiration.ExpireTime.Add(15 * time.Minute)
ccUpdated := client.UpdateCachedContent(context, cc, &genai.CachedContentToUpdate{
Expiration: &genai.ExpireTimeOrTTL{ExpireTime: newExpireTime},
})
목록
iter, err := client.ListCachedContents(context, contentName)
이후
Python
가져오기
from google import genai
from google.genai.types import Content, CreateCachedContentConfig, HttpOptions, Part
만들기
client = genai.Client(http_options=HttpOptions(api_version="v1"))
content_cache = client.caches.create(
model="gemini-2.5-flash",
config=CreateCachedContentConfig(
contents=contents,
system_instruction=system_instruction,
display_name="example-cache",
ttl="86400s",
),
)
가져오기
content_cache_list = client.caches.list()
# Access individual properties of a ContentCache object(s)
for content_cache in content_cache_list:
print(f"Cache `{content_cache.name}` for model `{content_cache.model}`")
print(f"Last updated at: {content_cache.update_time}")
print(f"Expires at: {content_cache.expire_time}")
삭제
client.caches.delete(name=cache_name)
업데이트
content_cache = client.caches.update(
name=cache_name, config=UpdateCachedContentConfig(ttl="36000s")
)
목록
cache_contents = client.caches.list(config={'page_size': 2})
자바
가져오기
import com.google.genai.types.CachedContent;
import com.google.genai.types.Content;
import com.google.genai.types.CreateCachedContentConfig;
import com.google.genai.types.DeleteCachedContentResponse;
import com.google.genai.types.ListCachedContentsConfig;
만들기
Content content =
Content.fromParts(
fetchPdfPart(
"https://storage.googleapis.com/cloud-samples-data/generative-ai/pdf/2403.05530.pdf"));
CreateCachedContentConfig config =
CreateCachedContentConfig.builder()
.systemInstruction(Content.fromParts(Part.fromText("summarize the pdf")))
.expireTime(Instant.now().plus(Duration.ofHours(1)))
.contents(content)
.build();
CachedContent cachedContent1 = client.caches.create("gemini-2.5-flash", config);
가져오기
CachedContent cachedContent2 = client.caches.get(cachedContent1.name().get(), null);
System.out.println("get cached content: " + cachedContent2);
삭제
DeleteCachedContentResponse unused = client.caches.delete(cachedContent1.name().get(), null);
System.out.println("Deleted cached content: " + cachedContent1.name().get());
업데이트
CachedContent cachedContentUpdate =
client.caches.update(
cachedContent.name().get(),
UpdateCachedContentConfig.builder().ttl(Duration.ofMinutes(10)).build());
System.out.println("Update cached content: " + cachedContentUpdate);
목록
System.out.println("List cached contents resrouce names: ");
for (CachedContent cachedContent :
client.caches.list(ListCachedContentsConfig.builder().pageSize(5).build())) {
System.out.println(cachedContent.name().get());
}
자바스크립트
가져오기
import {GoogleGenAI, Part} from '@google/genai';
만들기
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const cachedContent1: Part = {
fileData: {
fileUri: 'gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf',
mimeType: 'application/pdf',
},
};
const cachedContent2: Part = {
fileData: {
fileUri: 'gs://cloud-samples-data/generative-ai/pdf/2312.11805v3.pdf',
mimeType: 'application/pdf',
},
};
const cache = await ai.caches.create({
model: 'gemini-1.5-pro-002',
config: {contents: [cachedContent1, cachedContent2]},
});
가져오기
const getResponse = await ai.caches.get({name: cacheName});
삭제
await ai.caches.delete({name: cacheName});
업데이트
const updateResponse = await ai.caches.update({
name: cacheName,
config: {ttl: '86400s'},
});
목록
const listResponse = await ai.caches.list();
let i = 1;
for await (const cachedContent of listResponse) {
console.debug(`List response ${i++}: `, JSON.stringify(cachedContent));
}
Go
가져오기
import (
"context"
"encoding/json"
"fmt"
"io"
genai "google.golang.org/genai"
)
만들기
cacheContents := []*genai.Content{
{
Parts: []*genai.Part{
{FileData: &genai.FileData{
FileURI: "gs://cloud-samples-data/generative-ai/pdf/2312.11805v3.pdf",
MIMEType: "application/pdf",
}},
{FileData: &genai.FileData{
FileURI: "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf",
MIMEType: "application/pdf",
}},
},
Role: "user",
},
}
config := &genai.CreateCachedContentConfig{
Contents: cacheContents,
SystemInstruction: &genai.Content{
Parts: []*genai.Part{
{Text: systemInstruction},
},
},
DisplayName: "example-cache",
TTL: "86400s",
}
res, err := client.Caches.Create(ctx, modelName, config)
가져오기
cachedContent, err := client.GetCachedContent(ctx, contentName)
삭제
_, err = client.Caches.Delete(ctx, result.Name, &genai.DeleteCachedContentConfig{})
업데이트
result, err = client.Caches.Update(ctx, result.Name, &genai.UpdateCachedContentConfig{
ExpireTime: time.Now().Add(time.Hour),
})
목록
// List the first page.
page, err := client.Caches.List(ctx, &genai.ListCachedContentsConfig{PageSize: 2})
// Continue to the next page.
page, err = page.Next(ctx)
// Resume the page iteration using the next page token.
page, err = client.Caches.List(ctx, &genai.ListCachedContentsConfig{PageSize: 2, PageToken: page.NextPageToken})
구성 및 시스템 요청 사항
구성에서는 모델 동작을 제어하는 매개변수를 정의하고, 시스템 안내에서는 모델 응답을 특정 페르소나, 스타일 또는 작업으로 유도하는 안내 지시문을 제공합니다. Vertex AI SDK의 구성 및 시스템 명령어를 Google 생성형 AI SDK를 사용하는 다음 코드로 바꿉니다.
이전
Python
model = generative_models.GenerativeModel(
GEMINI_MODEL_NAME,
system_instruction=[
"Talk like a pirate.",
"Don't use rude words.",
],
)
response = model.generate_content(
contents="Why is sky blue?",
generation_config=generative_models.GenerationConfig(
temperature=0,
top_p=0.95,
top_k=20,
candidate_count=1,
max_output_tokens=100,
stop_sequences=["STOP!"],
response_logprobs=True,
logprobs=3,
),
safety_settings={
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_NONE,
},
)
자바
import com.google.cloud.vertexai.api.GenerationConfig;
GenerationConfig generationConfig =
GenerationConfig.newBuilder().setMaxOutputTokens(50).build();
// Use the builder to instantialize the model with the configuration.
GenerativeModel model =
new GenerativeModel.Builder()
.setModelName("gemino-pro")
.setVertexAi(vertexAi)
.setGenerationConfig(generationConfig)
.build();
자바스크립트
const {VertexAI} = require('@google-cloud/vertexai');
const generativeModel = vertexAI.getGenerativeModel({
model: 'gemini-2.5-flash',
systemInstruction: {
parts: [
{text: 'You are a helpful language translator.'},
{text: 'Your mission is to translate text in English to French.'},
],
},
});
const textPart = {
text: `
User input: I like bagels.
Answer:`,
};
const request = {
contents: [{role: 'user', parts: [textPart]}],
};
const resp = await generativeModel.generateContent(request);
const contentResponse = await resp.response;
console.log(JSON.stringify(contentResponse));
Go
import (
"context"
"cloud.google.com/go/vertexai/genai"
)
model := client.GenerativeModel(modelName)
model.GenerationConfig = genai.GenerationConfig{
TopP: proto.Float32(1),
TopK: proto.Int32(32),
Temperature: proto.Float32(0.4),
MaxOutputTokens: proto.Int32(2048),
}
systemInstruction := fmt.Sprintf("Your mission is to translate text from %xs to %s", sourceLanguageCode, targetLanguageCode)
model.SystemInstruction = &genai.Content{
Role: "user",
Parts: []genai.Part{genai.Text(systemInstruction)},
}
이후
Python
from google.genai import types
response = client.models.generate_content(
model='gemini-2.5-flash',
contents='high',
config=types.GenerateContentConfig(
system_instruction='I say high, you say low',
max_output_tokens=3,
temperature=0.3,
response_logprobs=True,
logprobs=3,
),
)
자바
GenerateContentConfig
가져오기:
import com.google.genai.types.GenerateContentConfig;
시스템 요청 사항을 만듭니다.
Content systemInstruction = Content.fromParts(Part.fromText("You are a history teacher."));
콘텐츠 구성에 시스템 안내를 추가합니다.
GenerateContentConfig config =
GenerateContentConfig.builder()
...
.systemInstruction(systemInstruction)
.build();
전체 구현은 GenerateContentWithConfigs.java를 참고하세요.
자바스크립트
import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: 'high',
config: {systemInstruction: 'I say high you say low.'},
});
console.debug(response.text);
await generateContentFromVertexAI().catch((e) =>
console.error('got error', e),
);
Go
import (
"context"
genai "google.golang.org/genai"
)
config := &genai.GenerateContentConfig{
SystemInstruction: &genai.Content{
Parts: []*genai.Part{
{Text: "You're a language translator. Your mission is to translate text in English to French."},
},
},
}
resp, err := client.Models.GenerateContent(ctx, modelName, contents, config)
임베딩
임베딩은 고차원 공간에서 텍스트, 이미지 또는 동영상의 의미 또는 시각적 의미와 관계를 포착하는 수치 벡터 표현입니다. Vertex AI SDK의 임베딩 구현을 Google 생성형 AI SDK를 사용하는 다음 코드로 바꿉니다.
이전
Python
model = vertexai.vision_models.MultiModalEmbeddingModel.from_pretrained("multimodalembedding@001")
image = Image.load_from_file("image.png")
video = Video.load_from_file("video.mp4")
embeddings = model.get_embeddings(
# One of image, video or contextual_text is required.
image=image,
video=video,
contextual_text="Hello world",
)
image_embedding = embeddings.image_embedding
video_embeddings = embeddings.video_embeddings
text_embedding = embeddings.text_embedding
자바
삽입은 Java Vertex AI SDK에서 지원되지 않지만 Google Gen AI SDK에서는 지원됩니다.
자바스크립트
JavaScript Vertex AI SDK에서는 임베딩이 지원되지 않지만 Google Gen AI SDK에서는 지원됩니다.
Go
Go Vertex AI SDK에서는 임베딩이 지원되지 않지만 Google 생성형 AI SDK에서는 지원됩니다.
이후
Python
from google.genai.types import EmbedContentConfig
client = genai.Client()
response = client.models.embed_content(
model="gemini-embedding-001",
contents="How do I get a driver's license/learner's permit?",
config=EmbedContentConfig(
task_type="RETRIEVAL_DOCUMENT", # Optional
output_dimensionality=3072, # Optional
title="Driver's License", # Optional
),
)
자바
import com.google.genai.Client;
import com.google.genai.types.EmbedContentResponse;
EmbedContentResponse response =
client.models.embedContent("text-embedding-005", "why is the sky blue?", null);
자바스크립트
import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.embedContent({
model: 'text-embedding-005',
contents: 'Hello world!',
});
console.debug(JSON.stringify(response));
await embedContentFromVertexAI().catch((e) =>
console.error('got error', e),
);
Go
import (
"context"
"fmt"
"google.golang.org/genai"
)
result, err := client.Models.EmbedContent(ctx, *model, genai.Text("What is your name?"), &genai.EmbedContentConfig{TaskType: "RETRIEVAL_QUERY"})
fmt.Printf("%#v\n", result.Embeddings[0])
fmt.Println("Embed content RETRIEVAL_DOCUMENT task type example.")
result, err = client.Models.EmbedContent(ctx, *model, genai.Text("What is your name?"), &genai.EmbedContentConfig{TaskType: "RETRIEVAL_DOCUMENT"})
fmt.Printf("%#v\n", result.Embeddings[0])
함수 호출
함수 호출을 사용하면 모델이 외부 도구 또는 API를 호출해야 하는 시점을 식별한 다음 실행에 필요한 함수와 인수가 포함된 구조화된 데이터를 생성할 수 있습니다. 함수 호출 구현을 Vertex AI SDK로 바꾸고 Google Gen AI SDK를 사용하는 다음 코드를 사용합니다.
이전
Python
get_current_weather_func = generative_models.FunctionDeclaration(
name="get_current_weather",
description="Get the current weather in a given location",
parameters=_REQUEST_FUNCTION_PARAMETER_SCHEMA_STRUCT,
)
weather_tool = generative_models.Tool(
function_declarations=[get_current_weather_func],
)
model = generative_models.GenerativeModel(
GEMINI_MODEL_NAME,
tools=[weather_tool],
)
chat = model.start_chat()
response1 = chat.send_message("What is the weather like in Boston?")
assert (
response1.candidates[0].content.parts[0].function_call.name
== "get_current_weather"
)
response2 = chat.send_message(
generative_models.Part.from_function_response(
name="get_current_weather",
response={
"content": {"weather": "super nice"},
},
),
)
assert response2.text
자바
Tool tool =
Tool.newBuilder()
.addFunctionDeclarations(
FunctionDeclarationMaker.fromJsonString(jsonString)
)
.build();
// Start a chat session from a model, with the use of the declared
// function.
GenerativeModel model =
new GenerativeModel.Builder()
.setModelName(MODEL_NAME)
.setVertexAi(vertexAi)
.setTools(Arrays.asList(tool))
.build();
ChatSession chat = model.startChat();
System.out.println(String.format("Ask the question: %s", TEXT));
GenerateContentResponse response = chat.sendMessage(TEXT);
// Provide an answer to the model so that it knows what the result of a
// "function call" is.
Content content =
ContentMaker.fromMultiModalData(
PartMaker.fromFunctionResponse(
"getCurrentWeather", Collections.singletonMap("currentWeather", "snowing")));
response = chat.sendMessage(content);
자바스크립트
const {
VertexAI,
FunctionDeclarationSchemaType,
} = require('@google-cloud/vertexai');
const functionDeclarations = [
{
function_declarations: [
{
name: 'get_current_weather',
description: 'get weather in a given location',
parameters: {
type: FunctionDeclarationSchemaType.OBJECT,
properties: {
location: {type: FunctionDeclarationSchemaType.STRING},
unit: {
type: FunctionDeclarationSchemaType.STRING,
enum: ['celsius', 'fahrenheit'],
},
},
required: ['location'],
},
},
],
},
];
async function functionCallingBasic(
projectId = 'PROJECT_ID',
location = 'us-central1',
model = 'gemini-2.5-flash'
) {
// Initialize Vertex with your Cloud project and location
const vertexAI = new VertexAI({project: projectId, location: location});
// Instantiate the model
const generativeModel = vertexAI.preview.getGenerativeModel({
model: model,
});
const request = {
contents: [
{role: 'user', parts: [{text: 'What is the weather in Boston?'}]},
],
tools: functionDeclarations,
};
const result = await generativeModel.generateContent(request);
console.log(JSON.stringify(result.response.candidates[0].content));
}
Go
package functioncalling
import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
"cloud.google.com/go/vertexai/genai"
)
funcName := "getCurrentWeather"
funcDecl := &genai.FunctionDeclaration{
Name: funcName,
Description: "Get the current weather in a given location",
Parameters: &genai.Schema{
Type: genai.TypeObject,
Properties: map[string]*genai.Schema{
"location": {
Type: genai.TypeString,
Description: "location",
},
},
Required: []string{"location"},
},
}
// Add the weather function to our model toolbox.
model.Tools = []*genai.Tool{
{
FunctionDeclarations: []*genai.FunctionDeclaration{funcDecl},
},
}
prompt := genai.Text("What's the weather like in Boston?")
resp, err := model.GenerateContent(ctx, prompt)
if len(resp.Candidates) == 0 {
return errors.New("got empty response from model")
} else if len(resp.Candidates[0].FunctionCalls()) == 0 {
return errors.New("got no function call suggestions from model")
}
funcResp := &genai.FunctionResponse{
Name: funcName,
Response: map[string]any{
"content": mockAPIResp,
},
}
// Return the API response to the model allowing it to complete its response.
resp, err = model.GenerateContent(ctx, prompt, funcResp)
if err != nil {
return fmt.Errorf("failed to generate content: %w", err)
}
if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
return errors.New("got empty response from model")
}
이후
Python
from google.genai import types
def get_current_weather(location: str) -> str:
"""Returns the current weather.
Args:
location: The city and state, e.g. San Francisco, CA
"""
return 'sunny'
response = client.models.generate_content(
model='gemini-2.5-flash',
contents='What is the weather like in Boston?',
config=types.GenerateContentConfig(tools=[get_current_weather]),
)
자바
Chat
또는 GenerateContent
메서드를 사용하여 함수 호출을 구현합니다.
Chat
사용
호출 가능 함수가 될 메서드를 선언합니다.
Method method1 =
ChatWithFunctionCall.class.getDeclaredMethod("getCurrentWeather", String.class);
Method method2 =
ChatWithFunctionCall.class.getDeclaredMethod("divideTwoIntegers", int.class, int.class);
콘텐츠 구성 내 도구에 두 메서드를 호출 가능한 함수로 추가합니다.
GenerateContentConfig config =
GenerateContentConfig.builder().tools(Tool.builder().functions(method1, method2)).build();
다음 구성으로 채팅 세션을 만듭니다.
Chat chatSession = client.chats.create("gemini-2.5-flash", config);
GenerateContentResponse response1 =
chatSession.sendMessage("what is the weather in San Francisco?");
전체 구현은 ChatWithFunctionCall.java를 참고하세요.
GenerateContent
사용
호출 가능 함수가 될 메서드를 선언합니다.
Method method1 =
GenerateContentWithFunctionCall.class.getMethod(
"getCurrentWeather", String.class, String.class);
Method method2 =
GenerateContentWithFunctionCall.class.getMethod(
"divideTwoIntegers", Integer.class, Integer.class);
콘텐츠 구성 내 도구에 두 메서드를 호출 가능한 함수로 추가합니다.
GenerateContentConfig config =
GenerateContentConfig.builder().tools(Tool.builder().functions(method1, method2)).build();
구성과 함께 generateContent
를 사용합니다.
GenerateContentResponse response =
client.models.generateContent(
"gemini-2.5-flash",
"What is the weather in Vancouver? And can you divide 10 by 0?",
config);
전체 구현은 GenerateContentWithFunctionCall.java를 참고하세요.
자바스크립트
import {
FunctionCall,
FunctionCallingConfigMode,
FunctionDeclaration,
GoogleGenAI,
Type,
} from '@google/genai';
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const controlLightFunctionDeclaration: FunctionDeclaration = {
name: 'controlLight',
parameters: {
type: Type.OBJECT,
description: 'Set the brightness and color temperature of a room light.',
properties: {
brightness: {
type: Type.NUMBER,
description:
'Light level from 0 to 100. Zero is off and 100 is full brightness.',
},
colorTemperature: {
type: Type.STRING,
description:
'Color temperature of the light fixture which can be `daylight`, `cool` or `warm`.',
},
},
required: ['brightness', 'colorTemperature'],
},
};
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: 'Dim the lights so the room feels cozy and warm.',
config: {
tools: [{functionDeclarations: [controlLightFunctionDeclaration]}],
toolConfig: {
functionCallingConfig: {
mode: FunctionCallingConfigMode.ANY,
allowedFunctionNames: ['controlLight'],
},
},
},
});
console.debug(response.functionCalls);
Go
package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"log"
"google.golang.org/genai"
)
var model = flag.String("model", "gemini-2.5-flash", "the model name, e.g. gemini-2.5-flash")
func run(ctx context.Context) {
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
funcName := "getCurrentWeather"
funcDecl := &genai.FunctionDeclaration{
Name: funcName,
Description: "Get the current weather in a given location",
Parameters: &genai.Schema{
Type: genai.TypeObject,
Properties: map[string]*genai.Schema{
"location": {
Type: genai.TypeString,
Description: "location",
},
},
Required: []string{"location"},
},
}
// Add the weather function to our model toolbox.
var config *genai.GenerateContentConfig = &genai.GenerateContentConfig{
Tools: []*genai.Tool{
{
FunctionDeclarations: []*genai.FunctionDeclaration{funcDecl},
},
},
}
// Call the GenerateContent method.
result, err := client.Models.GenerateContent(ctx, *model, genai.Text("What's the weather like in Boston?"), config)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Candidates[0].Content.Parts[0].FunctionCall.Name)
// Use synthetic data to simulate a response from the external API.
// In a real application, this would come from an actual weather API.
mockAPIResp, err := json.Marshal(map[string]string{
"location": "Boston",
"temperature": "38",
"temperature_unit": "F",
"description": "Cold and cloudy",
"humidity": "65",
"wind": `{"speed": "10", "direction": "NW"}`,
})
if err != nil {
log.Fatal(err)
}
funcResp := &genai.FunctionResponse{
Name: funcName,
Response: map[string]any{
"content": mockAPIResp,
},
}
// Return the API response to the model allowing it to complete its response.
mockedFunctionResponse := []*genai.Content{
&genai.Content{
Role: "user",
Parts: []*genai.Part{
&genai.Part{Text: "What's the weather like in Boston?"},
},
},
result.Candidates[0].Content,
&genai.Content{
Role: "tool",
Parts: []*genai.Part{
&genai.Part{FunctionResponse: funcResp},
},
},
}
result, err = client.Models.GenerateContent(ctx, *model, mockedFunctionResponse, config)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text())
}
func main() {
ctx := context.Background()
flag.Parse()
run(ctx)
}
그라운딩
그라운딩은 모델에 외부 도메인별 정보를 제공하여 응답의 정확성, 관련성, 일관성을 개선하는 프로세스입니다. 그라운딩 구현을 Vertex AI SDK로 대체하고 Google Gen AI SDK를 사용하는 다음 코드를 사용합니다.
이전
Python
model = generative_models.GenerativeModel(GEMINI_MODEL_NAME)
google_search_retriever_tool = (
generative_models.Tool.from_google_search_retrieval(
generative_models.grounding.GoogleSearchRetrieval()
)
)
response = model.generate_content(
"Why is sky blue?",
tools=[google_search_retriever_tool],
generation_config=generative_models.GenerationConfig(temperature=0),
)
자바
import com.google.cloud.vertexai.api.GroundingMetadata;
Tool googleSearchTool =
Tool.newBuilder()
.setGoogleSearch(GoogleSearch.newBuilder())
.build();
GenerativeModel model =
new GenerativeModel(modelName, vertexAI)
.withTools(Collections.singletonList(googleSearchTool));
GenerateContentResponse response = model.generateContent("Why is the sky blue?");
GroundingMetadata groundingMetadata = response.getCandidates(0).getGroundingMetadata();
String answer = ResponseHandler.getText(response);
자바스크립트
const {VertexAI} = require('@google-cloud/vertexai');
const vertexAI = new VertexAI({project: projectId, location: location});
const generativeModelPreview = vertexAI.preview.getGenerativeModel({
model: model,
generationConfig: {maxOutputTokens: 256},
});
const googleSearchTool = {
googleSearch: {},
};
const request = {
contents: [{role: 'user', parts: [{text: 'Why is the sky blue?'}]}],
tools: [googleSearchTool],
};
const result = await generativeModelPreview.generateContent(request);
const response = await result.response;
const groundingMetadata = response.candidates[0].groundingMetadata;
console.log(
'Response: ',
JSON.stringify(response.candidates[0].content.parts[0].text)
);
console.log('GroundingMetadata is: ', JSON.stringify(groundingMetadata));
Go
그라운딩은 Go Vertex AI SDK에서는 지원되지 않지만 Google Gen AI SDK에서는 지원됩니다.
이후
Python
from google.genai import types
from google.genai import Client
client = Client(
vertexai=True,
project=GOOGLE_CLOUD_PROJECT,
location=GOOGLE_CLOUD_LOCATION
)
response = client.models.generate_content(
model='gemini-2.5-flash-exp',
contents='Why is the sky blue?',
config=types.GenerateContentConfig(
tools=[types.Tool(google_search=types.GoogleSearch())]),
)
자바
Tool
모듈을 가져옵니다.
import com.google.genai.types.Tool;
구성에서 Google 검색 도구를 설정합니다.
Tool googleSearchTool = Tool.builder().googleSearch(GoogleSearch.builder()).build();
콘텐츠 구성에 도구를 추가합니다.
GenerateContentConfig config =
GenerateContentConfig.builder()
...
.tools(googleSearchTool)
.build();
전체 구현은 GenerateContentWithConfigs.java를 참고하세요.
자바스크립트
import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents:
'What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50.',
config: {
tools: [{googleSearch: {}}],
},
});
console.debug(JSON.stringify(response?.candidates?.[0]?.groundingMetadata));
Go
package main
import (
"context"
"flag"
"fmt"
"log"
"google.golang.org/genai"
)
var model = flag.String("model", "gemini-2.5-flash", "the model name, e.g. gemini-2.5-flash")
func run(ctx context.Context) {
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
// Add the Google Search grounding tool to the GenerateContentConfig.
var config *genai.GenerateContentConfig = &genai.GenerateContentConfig{
Tools: []*genai.Tool{
{
GoogleSearch: &genai.GoogleSearch{},
},
},
}
// Call the GenerateContent method.
result, err := client.Models.GenerateContent(ctx, *model, genai.Text("Why is the sky blue?"), config)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text())
}
func main() {
ctx := context.Background()
flag.Parse()
run(ctx)
}
안전 설정
안전 설정은 사용자가 증오심 표현, 성적인 콘텐츠, 폭력과 같은 특정 유해 카테고리와 관련된 콘텐츠를 필터링하거나 차단하여 모델 응답을 관리할 수 있는 구성 가능한 매개변수입니다. 안전 설정 구현을 Google Gen AI SDK를 사용하는 다음 코드로 Vertex AI SDK와 함께 바꿉니다.
이전
Python
model = generative_models.GenerativeModel(
GEMINI_MODEL_NAME,
system_instruction=[
"Talk like a pirate.",
"Don't use rude words.",
],
)
response = model.generate_content(
contents="Why is sky blue?",
generation_config=generative_models.GenerationConfig(
temperature=0,
top_p=0.95,
top_k=20,
candidate_count=1,
max_output_tokens=100,
stop_sequences=["STOP!"],
response_logprobs=True,
logprobs=3,
),
safety_settings={
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_NONE,
},
)
자바
import com.google.cloud.vertexai.api.SafetySetting;
import com.google.cloud.vertexai.api.SafetySetting.HarmBlockThreshold;
SafetySetting safetySetting =
SafetySetting.newBuilder()
.setCategory(HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT)
.setThreshold(HarmBlockThreshold.BLOCK_LOW_AND_ABOVE)
.build();
GenerateContentResponse response =
model
.withSafetySetting(Arrays.asList(SafetySetting))
.generateContent("Please explain LLM?");
자바스크립트
const {
VertexAI,
HarmCategory,
HarmBlockThreshold,
} = require('@google-cloud/vertexai');
// Initialize Vertex with your Cloud project and location
const vertexAI = new VertexAI({project: PROJECT_ID, location: LOCATION});
// Instantiate the model
const generativeModel = vertexAI.getGenerativeModel({
model: MODEL,
safetySettings: [
{
category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
],
});
const request = {
contents: [{role: 'user', parts: [{text: 'Tell me something dangerous.'}]}],
};
console.log('Prompt:');
console.log(request.contents[0].parts[0].text);
console.log('Streaming Response Text:');
// Create the response stream
const responseStream = await generativeModel.generateContentStream(request);
// Log the text response as it streams
for await (const item of responseStream.stream) {
if (item.candidates[0].finishReason === 'SAFETY') {
console.log('This response stream terminated due to safety concerns.');
break;
} else {
process.stdout.write(item.candidates[0].content.parts[0].text);
}
}
console.log('This response stream terminated due to safety concerns.');
Go
package safetysettings
import (
"context"
"fmt"
"io"
"cloud.google.com/go/vertexai/genai"
)
// generateContent generates text from prompt and configurations provided.
func generateContent(w io.Writer, projectID, location, modelName string) error {
// location := "us-central1"
// model := "gemini-2.5-flash"
ctx := context.Background()
client, err := genai.NewClient(ctx, projectID, location)
if err != nil {
return err
}
defer client.Close()
model := client.GenerativeModel(modelName)
model.SetTemperature(0.8)
// configure the safety settings thresholds
model.SafetySettings = []*genai.SafetySetting{
{
Category: genai.HarmCategoryHarassment,
Threshold: genai.HarmBlockLowAndAbove,
},
{
Category: genai.HarmCategoryDangerousContent,
Threshold: genai.HarmBlockLowAndAbove,
},
}
res, err := model.GenerateContent(ctx, genai.Text("Hello, say something mean to me."))
if err != nil {
return fmt.Errorf("unable to generate content: %v", err)
}
fmt.Fprintf(w, "generate-content response: %v\n", res.Candidates[0].Content.Parts[0])
fmt.Fprintf(w, "safety ratings:\n")
for _, r := range res.Candidates[0].SafetyRatings {
fmt.Fprintf(w, "\t%+v\n", r)
}
return nil
}
이후
Python
from google.genai import types
response = client.models.generate_content(
model='gemini-2.5-flash',
contents='Say something bad.',
config=types.GenerateContentConfig(
safety_settings=[
types.SafetySetting(
category='HARM_CATEGORY_HATE_SPEECH',
threshold='BLOCK_ONLY_HIGH',
)
]
),
)
자바
HarmBlockThreshold
, HarmCategory
, SafetySetting
모듈을 가져옵니다.
import com.google.genai.types.HarmBlockThreshold;
import com.google.genai.types.HarmCategory;
import com.google.genai.types.SafetySetting;
구성에서 안전 설정을 설정합니다.
ImmutableList<SafetySetting> safetySettings =
ImmutableList.of(
SafetySetting.builder()
.category(HarmCategory.Known.HARM_CATEGORY_HATE_SPEECH)
.threshold(HarmBlockThreshold.Known.BLOCK_ONLY_HIGH)
.build(),
SafetySetting.builder()
.category(HarmCategory.Known.HARM_CATEGORY_DANGEROUS_CONTENT)
.threshold(HarmBlockThreshold.Known.BLOCK_LOW_AND_ABOVE)
.build());
콘텐츠 구성에 안전 설정을 추가합니다.
GenerateContentConfig config =
GenerateContentConfig.builder()
...
.safetySettings(safetySettings)
.build();
전체 구현은 GenerateContentWithConfigs.java를 참고하세요.
자바스크립트
import {
GoogleGenAI,
HarmBlockMethod,
HarmBlockThreshold,
HarmCategory,
} from '@google/genai';
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: 'say something bad',
config: {
safetySettings: [
{
method: HarmBlockMethod.SEVERITY,
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
{
method: HarmBlockMethod.SEVERITY,
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
],
},
});
console.debug(JSON.stringify(response?.candidates?.[0]?.safetyRatings));
Go
package main
import (
"context"
"flag"
"fmt"
"log"
"google.golang.org/genai"
)
var model = flag.String("model", "gemini-2.5-flash", "the model name, e.g. gemini-2.5-flash")
func run(ctx context.Context) {
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
var safetySettings []*genai.SafetySetting = []*genai.SafetySetting{
{
Category: genai.HarmCategoryHarassment,
Threshold: genai.HarmBlockThresholdBlockMediumAndAbove,
},
{
Category: genai.HarmCategoryDangerousContent,
Threshold: genai.HarmBlockThresholdBlockMediumAndAbove,
},
}
var config *genai.GenerateContentConfig = &genai.GenerateContentConfig{
SafetySettings: safetySettings,
}
// Call the GenerateContent method.
result, err := client.Models.GenerateContent(ctx, *model, genai.Text("What is your name?"), config)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text())
}
func main() {
ctx := context.Background()
flag.Parse()
run(ctx)
}
채팅 세션
채팅 세션은 모델이 이전 메시지를 기억하고 이를 사용하여 현재 응답을 알림으로써 여러 턴에 걸쳐 컨텍스트를 유지하는 대화형 상호작용입니다. Vertex AI SDK의 구현을 Google 생성형 AI SDK를 사용하는 다음 코드로 바꿉니다.
이전
Python
model = GenerativeModel(
"gemini-2.5-flash",
# You can specify tools when creating a model to avoid having to send them with every request.
tools=[weather_tool],
tool_config=tool_config,
)
chat = model.start_chat()
print(chat.send_message("What is the weather like in Boston?"))
print(chat.send_message(
Part.from_function_response(
name="get_current_weather",
response={
"content": {"weather_there": "super nice"},
}
),
))
자바
import com.google.cloud.vertexai.generativeai.ChatSession;
GenerativeModel model = new GenerativeModel("gemini-2.5-flash", vertexAi);
ChatSession chat = model.startChat();
ResponseStream<GenerateContentResponse> response = chat
.sendMessageStream("Can you tell me a story about cheese in 100 words?");
ResponseStream<GenerateContentResponse> anotherResponse = chat
.sendMessageStream("Can you modify the story to be written for a 5 year old?");
자바스크립트
const {VertexAI} = require('@google-cloud/vertexai');
const chat = generativeModel.startChat({});
const result1 = await chat.sendMessage('Hello');
const response1 = await result1.response;
console.log('Chat response 1: ', JSON.stringify(response1));
const result2 = await chat.sendMessage(
'Can you tell me a scientific fun fact?'
);
const response2 = await result2.response;
console.log('Chat response 2: ', JSON.stringify(response2));
Go
import (
"context"
"errors"
"fmt"
"cloud.google.com/go/vertexai/genai"
)
prompt := "Do you have the Pixel 8 Pro in stock?"
fmt.Fprintf(w, "Question: %s\n", prompt)
resp, err := chat.SendMessage(ctx, genai.Text(prompt))
이후
Python
동기
chat = client.chats.create(model='gemini-2.5-flash')
response = chat.send_message('tell me a story')
print(response.text)
response = chat.send_message('summarize the story you told me in 1 sentence')
print(response.text)
비동기
chat = client.aio.chats.create(model='gemini-2.5-flash')
response = await chat.send_message('tell me a story')
print(response.text)
동기 스트리밍
chat = client.chats.create(model='gemini-2.5-flash')
for chunk in chat.send_message_stream('tell me a story'):
print(chunk.text, end='')
비동기 스트리밍
chat = client.aio.chats.create(model='gemini-2.5-flash')
async for chunk in await chat.send_message_stream('tell me a story'):
print(chunk.text, end='') # end='' is optional, for demo purposes.
자바
Chat
및 GenerateContentResponse
모듈을 가져옵니다.
import com.google.genai.Chat;
import com.google.genai.types.GenerateContentResponse;
채팅 세션을 만듭니다.
Chat chatSession = client.chats.create("gemini-2.5-flash");
GenerateContentResponse
를 사용하여 프롬프트를 제공합니다.
GenerateContentResponse response =
chatSession
.sendMessage("Can you tell me a story about cheese in 100 words?");
// Gets the text string from the response by the quick accessor method `text()`.
System.out.println("Unary response: " + response.text());
GenerateContentResponse response2 =
chatSession
.sendMessage("Can you modify the story to be written for a 5 year old?");
// Gets the text string from the second response.
System.out.println("Unary response: " + response2.text());
전체 구현은 ChatWithHistory.java를 참고하세요.
자바스크립트
import {GoogleGenAI} from '@google/genai';
const chat = ai.chats.create({model: 'gemini-2.5-flash'});
const response = await chat.sendMessage({message: 'Why is the sky blue?'});
console.debug('chat response 1: ', response.text);
const response2 = await chat.sendMessage({message: 'Why is the sunset red?'});
console.debug('chat response 2: ', response2.text);
const history = chat.getHistory();
for (const content of history) {
console.debug('chat history: ', JSON.stringify(content, null, 2));
}
Go
package main
import (
"context"
"flag"
"fmt"
"log"
"google.golang.org/genai"
)
var model = flag.String("model", "gemini-2.5-flash", "the model name, e.g. gemini-2.5-flash")
var config *genai.GenerateContentConfig = &genai.GenerateContentConfig{Temperature: genai.Ptr[float32](0.5)}
// Create a new Chat.
chat, err := client.Chats.Create(ctx, *model, config, nil)
// Send first chat message.
result, err := chat.SendMessage(ctx, genai.Part{Text: "What's the weather in San Francisco?"})
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text())
// Send second chat message.
result, err = chat.SendMessage(ctx, genai.Part{Text: "How about New York?"})
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text())
멀티모달 입력
멀티모달 입력은 모델이 텍스트를 넘어 이미지, 오디오, 동영상과 같은 데이터 유형의 정보를 처리하고 이해할 수 있는 기능을 의미합니다. Vertex AI SDK를 사용하는 구현을 Google Gen AI SDK를 사용하는 다음 코드로 바꿉니다.
이전
Python
from vertexai.generative_models import GenerativeModel, Image
vision_model = GenerativeModel("gemini-2.5-flash-vision")
# Local image
image = Image.load_from_file("image.jpg")
print(vision_model.generate_content(["What is shown in this image?", image]))
# Image from Cloud Storage
image_part = generative_models.Part.from_uri("gs://download.tensorflow.org/example_images/320px-Felis_catus-cat_on_snow.jpg", mime_type="image/jpeg")
print(vision_model.generate_content([image_part, "Describe this image?"]))
# Text and video
video_part = Part.from_uri("gs://cloud-samples-data/video/animals.mp4", mime_type="video/mp4")
print(vision_model.generate_content(["What is in the video? ", video_part]))
자바
import com.google.cloud.vertexai.generativeai.ContentMaker;
GenerativeModel model = new GenerativeModel("gemini-2.5-flash-vision", vertexAi);
ResponseStream<GenerateContentResponse> stream =
model.generateContentStream(ContentMaker.fromMultiModalData(
"Please describe this image",
PartMaker.fromMimeTypeAndData("image/jpeg", IMAGE_URI)
));
자바스크립트
const {VertexAI, HarmBlockThreshold, HarmCategory} = require('@google-cloud/vertexai');
// Initialize Vertex with your Cloud project and location
const vertex_ai = new VertexAI({project: project, location: location});
// Instantiate the model
const generativeVisionModel = vertex_ai.getGenerativeModel({
model: 'gemini-ultra-vision',
});
async function multiPartContent() {
const filePart = {file_data: {file_uri: "gs://sararob_imagegeneration_test/kitten.jpeg", mime_type: "image/jpeg"}};
const textPart = {text: 'What is this picture about?'};
const request = {
contents: [{role: 'user', parts: [textPart, filePart]}],
};
const resp = await generativeVisionModel.generateContentStream(request);
const contentResponse = await resp.response;
console.log(JSON.stringify(contentResponse));
}
multiPartContent();
Go
이미지
import (
"context"
"encoding/json"
"fmt"
"io"
"cloud.google.com/go/vertexai/genai"
)
img := genai.FileData{
MIMEType: "image/jpeg",
FileURI: "gs://generativeai-downloads/images/scones.jpg",
}
prompt := genai.Text("What is in this image?")
resp, err := gemini.GenerateContent(ctx, img, prompt)
if err != nil {
return fmt.Errorf("error generating content: %w", err)
}
동영상
package multimodalvideoaudio
import (
"context"
"errors"
"fmt"
"io"
"mime"
"path/filepath"
"cloud.google.com/go/vertexai/genai"
)
part := genai.FileData{
MIMEType: mime.TypeByExtension(filepath.Ext("pixel8.mp4")),
FileURI: "gs://cloud-samples-data/generative-ai/video/pixel8.mp4",
}
res, err := model.GenerateContent(ctx, part, genai.Text(`
Provide a description of the video.
The description should also contain anything important which people say in the video.
`))
이후
Python
from google import genai
from google.genai.types import HttpOptions, Part
client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=[
Part.from_uri(
file_uri="gs://cloud-samples-data/generative-ai/video/ad_copy_from_video.mp4",
mime_type="video/mp4",
),
"What is in the video?",
],
)
print(response.text)
자바
GenerateContentResponse
모듈을 가져옵니다.
import com.google.genai.types.GenerateContentResponse;
멀티모달 프롬프트를 위해 텍스트, 이미지, 동영상을 조합하여 제공합니다.
Content content =
Content.fromParts(
Part.fromText("describe the image"),
Part.fromUri("gs://cloud-samples-data/generative-ai/image/scones.jpg", "image/jpeg"));
결합된 프롬프트를 모델에 제공합니다.
GenerateContentResponse response =
client.models.generateContent("gemini-2.5-flash", content, null);
전체 구현은 GenerateContentWithImageInput.java를 참고하세요.
자바스크립트
const filePart = {file_data: {file_uri: "gs://sararob_imagegeneration_test/kitten.jpeg", mime_type: "image/jpeg"}};
const textPart = {text: 'What is this picture about?'};
const contents = [{role: 'user', parts: [textPart, filePart]}];
const response = await ai.models.generateContentStream({
model: 'gemini-2.5-flash-exp',
contents: contents,
});
let i = 0;
for await (const chunk of response) {
const text = chunk.text;
if (text) {
console.debug(text);
}
}
Go
이미지
package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"log"
"google.golang.org/genai"
)
config := &genai.GenerateContentConfig{}
config.ResponseModalities = []string{"IMAGE", "TEXT"}
// Call the GenerateContent method.
result, err := client.Models.GenerateContent(ctx, *model, genai.Text("Generate a story about a cute baby turtle in a 3d digital art style. For each scene, generate an image."), config)
if err != nil {
log.Fatal(err)
}
동영상 및 오디오
package multimodalvideoaudio
import (
"context"
"errors"
"fmt"
"io"
"mime"
"path/filepath"
"cloud.google.com/go/vertexai/genai"
)
part := genai.FileData{
MIMEType: mime.TypeByExtension(filepath.Ext("pixel8.mp4")),
FileURI: "gs://cloud-samples-data/generative-ai/video/pixel8.mp4",
}
res, err := model.GenerateContent(ctx, part, genai.Text(`
Provide a description of the video.
The description should also contain anything important which people say in the video.
`))
텍스트 생성
텍스트 생성은 모델이 주어진 프롬프트를 기반으로 사람과 유사한 텍스트 콘텐츠를 생성하는 프로세스입니다. Vertex AI SDK를 Google Gen AI SDK를 사용하는 다음 코드로 바꿉니다.
동기 생성
이전
Python
response = model.generate_content(
"Why is sky blue?",
generation_config=generative_models.GenerationConfig(temperature=0),
)
assert response.text
자바
import com.google.cloud.vertexai.api.GenerateContentResponse;
GenerativeModel model = new GenerativeModel("gemini-2.5-flash", vertexAi);
GenerateContentResponse response = model.generateContent("How are you?");
자바스크립트
Vertex AI SDK와 Google Gen AI SDK 모두 JavaScript의 비동기 텍스트 생성만 지원합니다.
Go
gemini := client.GenerativeModel(modelName)
prompt := genai.Text(
"What's a good name for a flower shop that specializes in selling bouquets of dried flowers?")
resp, err := gemini.GenerateContent(ctx, prompt)
이후
Python
response = client.models.generate_content(
model='gemini-2.5-flash', contents='Why is the sky blue?'
)
print(response.text)
자바
GenerateContentResponse
모듈을 가져옵니다.
import com.google.genai.types.GenerateContentResponse;
generateContent
로 텍스트를 생성합니다.
GenerateContentResponse response =
client.models.generateContent("gemini-2.5-flash", "What is your name?", null);
전체 구현은 GenerateContent.java를 참고하세요.
자바스크립트
Vertex AI SDK와 Google Gen AI SDK 모두 JavaScript의 비동기 텍스트 생성만 지원합니다.
Go
var config *genai.GenerateContentConfig = &genai.GenerateContentConfig{Temperature: genai.Ptr[float32](0)}
// Call the GenerateContent method.
result, err := client.Models.GenerateContent(ctx, *model, genai.Text("What is your name?"), config)
비동기 생성
이전
Python
response = await model.generate_content_async(
"Why is sky blue?",
generation_config=generative_models.GenerationConfig(temperature=0),
)
자바
import com.google.cloud.vertexai.api.GenerateContentResponse;
GenerativeModel model = new GenerativeModel("gemini-2.5-flash", vertexAi);
ApiFuture<GenerateContentResponse> future = model.generateContentAsync("How are you?");
GenerateContentResponse response = future.get();
자바스크립트
const {VertexAI} = require('@google-cloud/vertexai');
// 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 request = {
contents: [
{
role: 'user',
parts: [
{
text: 'Write a story about a magic backpack.',
},
],
},
],
};
console.log(JSON.stringify(request));
const result = await generativeModel.generateContent(request);
console.log(result.response.text);
Go
해당 사항 없음: Go는 비동기 작업 없이 동시 작업을 관리합니다.
이후
Python
response = await client.aio.models.generate_content(
model='gemini-2.5-flash', contents='Tell me a story in 300 words.'
)
print(response.text)
자바
GenerateContentResponse
모듈을 가져옵니다.
import com.google.genai.types.GenerateContentResponse;
비동기식으로 텍스트를 생성합니다.
CompletableFuture<GenerateContentResponse> responseFuture =
client.async.models.generateContent(
"gemini-2.5-flash", "Introduce Google AI Studio.", null);
responseFuture
.thenAccept(
response -> {
System.out.println("Async response: " + response.text());
})
.join();
전체 구현은 GenerateContentAsync.java를 참고하세요.
자바스크립트
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: 'why is the sky blue?',
});
console.debug(response.text);
Go
해당 사항 없음: Go는 비동기 작업 없이 동시 작업을 관리합니다.
스트리밍
이전
Python
동기 스트리밍
stream = model.generate_content(
"Why is sky blue?",
stream=True,
generation_config=generative_models.GenerationConfig(temperature=0),
)
for chunk in stream:
assert (
chunk.text
or chunk.candidates[0].finish_reason
is generative_models.FinishReason.STOP
)
비동기 스트리밍
async_stream = await model.generate_content_async(
"Why is sky blue?",
stream=True,
generation_config=generative_models.GenerationConfig(temperature=0),
)
async for chunk in async_stream:
assert (
chunk.text
or chunk.candidates[0].finish_reason
is generative_models.FinishReason.STOP
)
자바
import com.google.cloud.vertexai.generativeai.ResponseStream;
import com.google.cloud.vertexai.api.GenerateContentResponse;
GenerativeModel model = new GenerativeModel("gemini-2.5-flash", vertexAi);
ResponseStream<GenerateContentResponse> responseStream = model.generateContentStream("How are you?");
자바스크립트
// 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 request = {
contents: [{role: 'user', parts: [{text: 'What is Node.js?'}]}],
};
console.log('Prompt:');
console.log(request.contents[0].parts[0].text);
console.log('Streaming Response Text:');
// Create the response stream
const responseStream = await generativeModel.generateContentStream(request);
// Log the text response as it streams
for await (const item of responseStream.stream) {
process.stdout.write(item.candidates[0].content.parts[0].text);
}
Go
package streamtextbasic
import (
"context"
"errors"
"fmt"
"io"
"cloud.google.com/go/vertexai/genai"
"google.golang.org/api/iterator"
)
model := client.GenerativeModel(modelName)
iter := model.GenerateContentStream(
ctx,
genai.Text("Write a story about a magic backpack."),
)
for {
resp, err := iter.Next()
fmt.Fprint(w, "generated response: ")
for _, c := range resp.Candidates {
for _, p := range c.Content.Parts {
fmt.Fprintf(w, "%s ", p)
}
}
}
이후
Python
동기 스트리밍
for chunk in client.models.generate_content_stream(
model='gemini-2.5-flash', contents='Tell me a story in 300 words.'
):
print(chunk.text, end='')
비동기 스트리밍
async for chunk in await client.aio.models.generate_content_stream(
model='gemini-2.5-flash', contents='Tell me a story in 300 words.'
):
print(chunk.text, end='')
자바
ResponseStream
및 GenerateContentResponse
모듈을 가져옵니다.
import com.google.genai.ResponseStream;
import com.google.genai.types.GenerateContentResponse;
모델에 프롬프트를 제공하고 결과를 스트리밍합니다.
ResponseStream<GenerateContentResponse> responseStream =
client.models.generateContentStream(
"gemini-2.5-flash", "Tell me a story in 300 words.", null);
System.out.println("Streaming response: ");
for (GenerateContentResponse res : responseStream) {
System.out.print(res.text());
}
전체 구현은 GenerateContentAsync.java를 참고하세요.
자바스크립트
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.generateContentStream({
model: 'gemini-2.5-flash-exp',
contents:
'Generate a story about a cute baby turtle in a 3d digital art style. For each scene, generate an image.',
config: {
responseModalities: [Modality.IMAGE, Modality.TEXT],
},
});
let i = 0;
for await (const chunk of response) {
const text = chunk.text;
const data = chunk.data;
if (text) {
console.debug(text);
} else if (data) {
const fileName = `generate_content_streaming_image_${i++}.png`;
console.debug(`Writing response image to file: ${fileName}.`);
fs.writeFileSync(fileName, data);
}
}
Go
client, err := genai.NewClient(ctx, nil)
var config *genai.GenerateContentConfig = &genai.GenerateContentConfig{SystemInstruction: &genai.Content{Parts: []*genai.Part{&genai.Part{Text: "You are a story writer."}}}}
// Call the GenerateContent method.
for result, err := range client.Models.GenerateContentStream(ctx, *model, genai.Text("Tell me a story in 300 words."), config) {
if err != nil {
log.Fatal(err)
}
fmt.Print(result.Text())
}
이미지 생성
이미지 생성은 모델이 텍스트 설명이나 기타 입력 모달리티에서 이미지를 생성하는 프로세스입니다. Vertex AI SDK를 Google Gen AI SDK를 사용하는 다음 코드로 바꿉니다.
이전
Python
model = ImageGenerationModel.from_pretrained("imagegeneration@002")
response = model.generate_images(
prompt="Astronaut riding a horse",
# Optional:
number_of_images=1,
seed=0,
)
response[0].show()
response[0].save("image1.png")
자바
이미지 생성은 Java Vertex AI SDK에서 지원되지 않지만 Google 생성형 AI SDK에서는 지원됩니다.
자바스크립트
이미지 생성은 JavaScript Vertex AI SDK에서 지원되지 않지만 Google 생성형 AI SDK에서는 지원됩니다.
Go
이미지 생성은 Go Vertex AI SDK에서 지원되지 않지만 Google 생성형 AI SDK에서는 지원됩니다.
이후
Python
from google.genai import types
# Generate Image
response1 = client.models.generate_images(
model='imagen-3.0-generate-002',
prompt='An umbrella in the foreground, and a rainy night sky in the background',
config=types.GenerateImagesConfig(
number_of_images=1,
include_rai_reason=True,
output_mime_type='image/jpeg',
),
)
response1.generated_images[0].image.show()
자바
import com.google.genai.types.GenerateImagesConfig;
import com.google.genai.types.GenerateImagesResponse;
import com.google.genai.types.Image;
GenerateImagesConfig generateImagesConfig =
GenerateImagesConfig.builder()
.numberOfImages(1)
.outputMimeType("image/jpeg")
.includeSafetyAttributes(true)
.build();
GenerateImagesResponse generatedImagesResponse =
client.models.generateImages(
"imagen-3.0-generate-002", "Robot holding a red skateboard", generateImagesConfig);
Image generatedImage = generatedImagesResponse.generatedImages().get().get(0).image().get();
자바스크립트
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.generateImages({
model: 'imagen-3.0-generate-002',
prompt: 'Robot holding a red skateboard',
config: {
numberOfImages: 1,
includeRaiReason: true,
},
});
console.debug(response?.generatedImages?.[0]?.image?.imageBytes);
Go
import (
"encoding/json"
"google.golang.org/genai"
)
fmt.Println("Generate image example.")
response1, err := client.Models.GenerateImages(
ctx, "imagen-3.0-generate-002",
/*prompt=*/ "An umbrella in the foreground, and a rainy night sky in the background",
&genai.GenerateImagesConfig{
IncludeRAIReason: true,
IncludeSafetyAttributes: true,
OutputMIMEType: "image/jpeg",
},
)
제어 생성
제어된 생성은 자유 형식 텍스트를 생성하는 대신 모델 출력이 특정 제약 조건, 형식, 스타일 또는 속성을 준수하도록 안내하는 프로세스를 말합니다. Vertex AI SDK를 사용하는 구현을 Google 생성형 AI SDK를 사용하는 다음 코드로 바꿉니다.
이전
Python
_RESPONSE_SCHEMA_STRUCT = {
"type": "object",
"properties": {
"location": {
"type": "string",
},
},
"required": ["location"],
}
response = model.generate_content(
contents="Why is sky blue? Respond in JSON Format.",
generation_config=generative_models.GenerationConfig(
...
response_schema=_RESPONSE_SCHEMA_STRUCT,
),
)
자바
import com.google.cloud.vertexai.api.Schema;
import com.google.cloud.vertexai.api.Type;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.PartMaker;
GenerationConfig generationConfig = GenerationConfig.newBuilder()
.setResponseMimeType("application/json")
.setResponseSchema(Schema.newBuilder()
.setType(Type.ARRAY)
.setItems(Schema.newBuilder()
.setType(Type.OBJECT)
.putProperties("object", Schema.newBuilder().setType(Type.STRING).build())
.build())
.build())
.build();
GenerativeModel model = new GenerativeModel(modelName, vertexAI)
.withGenerationConfig(generationConfig);
GenerateContentResponse response = model.generateContent(
ContentMaker.fromMultiModalData(
PartMaker.fromMimeTypeAndData("image/jpeg",
"gs://cloud-samples-data/generative-ai/image/office-desk.jpeg"),
PartMaker.fromMimeTypeAndData("image/jpeg",
"gs://cloud-samples-data/generative-ai/image/gardening-tools.jpeg"),
"Generate a list of objects in the images."
)
);
자바스크립트
// Initialize Vertex with your Cloud project and location
const vertex_ai = new VertexAI({project: project, location: location});
// Instantiate the model
const responseSchema = {
type: 'ARRAY',
items: {
type: 'OBJECT',
properties: {
'recipeName': {
type: 'STRING',
description: 'Name of the recipe',
nullable: false,
},
},
required: ['recipeName'],
},
};
const generativeModel = vertex_ai.getGenerativeModel({
model: 'gemini-2.5-flash',
generationConfig: {
responseSchema: responseSchema,
responseMimeType: 'application/json',
}
});
async function generateContentControlledOutput() {
const req = {
contents: [{role: 'user', parts: [{text: 'list 3 popular cookie recipe'}]}],
};
const resp = await generativeModel.generateContent(req);
console.log('aggregated response: ', JSON.stringify(resp.response));
};
generateContentControlledOutput();
Go
import (
"context"
"cloud.google.com/go/vertexai/genai"
)
model.GenerationConfig.ResponseMIMEType = "application/json"
// Build an OpenAPI schema, in memory
model.GenerationConfig.ResponseSchema = &genai.Schema{
Type: genai.TypeArray,
Items: &genai.Schema{
Type: genai.TypeArray,
Items: &genai.Schema{
Type: genai.TypeObject,
Properties: map[string]*genai.Schema{
"object": {
Type: genai.TypeString,
},
},
},
},
}
img1 := genai.FileData{
MIMEType: "image/jpeg",
FileURI: "gs://cloud-samples-data/generative-ai/image/office-desk.jpeg",
}
img2 := genai.FileData{
MIMEType: "image/jpeg",
FileURI: "gs://cloud-samples-data/generative-ai/image/gardening-tools.jpeg",
}
prompt := "Generate a list of objects in the images."
res, err := model.GenerateContent(ctx, img1, img2, genai.Text(prompt))
이후
Python
response_schema = {
"type": "ARRAY",
"items": {
"type": "OBJECT",
"properties": {
"recipe_name": {"type": "STRING"},
"ingredients": {"type": "ARRAY", "items": {"type": "STRING"}},
},
"required": ["recipe_name", "ingredients"],
},
}
prompt = """
List a few popular cookie recipes.
"""
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt,
config={
"response_mime_type": "application/json",
"response_schema": response_schema,
},
)
자바
Schema
및 Type
모듈을 가져옵니다.
import com.google.genai.types.Schema;
import com.google.genai.types.Type;
응답 스키마를 만듭니다.
Schema schema =
Schema.builder()
.type(Type.Known.ARRAY)
.items(
Schema.builder()
.type(Type.Known.OBJECT)
.properties(
ImmutableMap.of(
"recipe_name",
Schema.builder().type(Type.Known.STRING).build(),
"ingredients",
Schema.builder()
.type(Type.Known.ARRAY)
.items(Schema.builder().type(Type.Known.STRING))
.build()))
.required("recipe_name", "ingredients"))
.build();
콘텐츠 구성에 스키마를 추가합니다.
GenerateContentConfig config =
GenerateContentConfig.builder()
.responseMimeType("application/json")
.candidateCount(1)
.responseSchema(schema)
.build();
다음 구성으로 응답을 생성합니다.
GenerateContentResponse response =
client.models.generateContent(
"gemini-2.5-flash", "List a few popular cookie recipes.", config);
전체 구현은 GenerateContentWithResponseSchema.java를 참고하세요.
자바스크립트
const ai = new GoogleGenAI({
vertexai: true,
project: GOOGLE_CLOUD_PROJECT,
location: GOOGLE_CLOUD_LOCATION,
});
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: 'List 3 popular cookie recipes.',
config: {
responseMimeType: 'application/json',
responseSchema: {
type: Type.ARRAY,
items: {
type: Type.OBJECT,
properties: {
'recipeName': {
type: Type.STRING,
description: 'Name of the recipe',
nullable: false,
},
},
required: ['recipeName'],
},
},
},
});
console.debug(response.text);
Go
import (
"context"
"encoding/json"
genai "google.golang.org/genai"
)
cacheContents := []*genai.Content{
{
Parts: []*genai.Part{
{FileData: &genai.FileData{
FileURI: "gs://cloud-samples-data/generative-ai/pdf/2312.11805v3.pdf",
MIMEType: "application/pdf",
}},
{FileData: &genai.FileData{
FileURI: "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf",
MIMEType: "application/pdf",
}},
},
Role: "user",
},
}
config := &genai.CreateCachedContentConfig{
Contents: cacheContents,
SystemInstruction: &genai.Content{
Parts: []*genai.Part{
{Text: systemInstruction},
},
},
DisplayName: "example-cache",
TTL: "86400s",
}
res, err := client.Caches.Create(ctx, modelName, config)
if err != nil {
return "", fmt.Errorf("failed to create content cache: %w", err)
}
cachedContent, err := json.MarshalIndent(res, "", " ")
if err != nil {
return "", fmt.Errorf("failed to marshal cache info: %w", err)
}
토큰 집계
토큰은 모델이 처리, 분석, 생성하는 텍스트 (글자, 단어, 구문)의 기본 단위입니다. 대답에서 토큰을 계산하려면 Vertex AI SDK를 사용하는 구현을 Google Gen AI SDK를 사용하는 다음 코드로 대체하세요.
이전
Python
content = ["Why is sky blue?", "Explain it like I'm 5."]
response = model.count_tokens(content)
자바
import com.google.cloud.vertexai.api.CountTokensResponse;
CountTokensResponse response = model.countTokens(textPrompt);
int promptTokenCount = response.getTotalTokens();
int promptCharCount = response.getTotalBillableCharacters();
GenerateContentResponse contentResponse = model.generateContent(textPrompt);
int tokenCount = contentResponse.getUsageMetadata().getPromptTokenCount();
int candidateTokenCount = contentResponse.getUsageMetadata().getCandidatesTokenCount();
int totalTokenCount = contentResponse.getUsageMetadata().getTotalTokenCount();
자바스크립트
const request = {
contents: [{role: 'user', parts: [{text: 'How are you doing today?'}]}],
};
const response = await generativeModel.countTokens(request);
console.log('count tokens response: ', JSON.stringify(response));
Go
package tokencount
import (
"context"
"fmt"
"cloud.google.com/go/vertexai/genai"
)
resp, err := model.CountTokens(ctx, prompt)
fmt.Fprintf(w, "Number of tokens for the prompt: %d\n", resp.TotalTokens)
resp2, err := model.GenerateContent(ctx, prompt)
fmt.Fprintf(w, "Number of tokens for the prompt: %d\n", resp2.UsageMetadata.PromptTokenCount)
fmt.Fprintf(w, "Number of tokens for the candidates: %d\n", resp2.UsageMetadata.CandidatesTokenCount)
fmt.Fprintf(w, "Total number of tokens: %d\n", resp2.UsageMetadata.TotalTokenCount)
이후
Python
토큰 집계
response = client.models.count_tokens(
model='gemini-2.5-flash',
contents='why is the sky blue?',
)
print(response)
컴퓨팅 토큰
response = client.models.compute_tokens(
model='gemini-2.5-flash',
contents='why is the sky blue?',
)
print(response)
자바
CountTokensResponse
및 ComputeTokensResponse
모듈을 가져옵니다.
import com.google.genai.types.CountTokensResponse;
import com.google.genai.types.ComputeTokensResponse;
countTokens
를 사용하여 프롬프트에 사용된 토큰 수를 계산합니다.
CountTokensResponse response =
client.models.countTokens("gemini-2.5-flash", "What is your name?", null);
프롬프트가 토큰화되는 방식을 더 세부적으로 분석하려면 computeTokens
를 사용하세요.
ComputeTokensResponse response =
client.models.computeTokens("gemini-2.5-flash", "What is your name?", null);
전체 구현은 CountTokens.java를 참고하세요.
자바스크립트
const response = await ai.models.countTokens({
model: 'gemini-2.5-flash',
contents: 'The quick brown fox jumps over the lazy dog.',
});
Go
import (
"context"
"flag"
"fmt"
"log"
"google.golang.org/genai"
)
client, err := genai.NewClient(ctx, &genai.ClientConfig{Backend: genai.BackendVertexAI})
fmt.Println("Count tokens example.")
countTokensResult, err := client.Models.CountTokens(ctx, *model, genai.Text("What is your name?"), nil)
fmt.Println(countTokensResult.TotalTokens)