Google Cloud Next â25 ã§ã話é¡ã«ãªã£ãŠãã Gemini 2.5 Flash ã®ãã¬ãã¥ãŒçã 4 æ 17 æ¥ã«ãªãªãŒã¹ãããŸããã
ãã®æ©äŒã«ãPython ãéãã AI éçºãžèžã¿åºããç§ã¯ãVertex AI SDK for Python ã®å°å
¥ããã¢ãã«ãžã®ãªã¯ãšã¹ãããããŠæ§ã
ãªæ©èœã®æŽ»çšãšããåºæ¬çãªçè§£ãæ·±ããŠããæäžã§ãã
ããã§ã¯ããã®ãããªåºæ¬çãªäœ¿ãæ¹ãææ°ã¢ãã«ã§ãã Gemini 2.5 Flash ãå©çšãã圢ã§ãŸãšããŸãã
Gemini 2.5 Flash
Gemini 2.5 Flash ã¯ããããŸã§ã® Gemini Flash ã¢ãã«ãæã£ãŠãããéãããšãå¹çããšãã匷ã¿ããããã«ç£šãäžããã¢ãã«ãšããŠç»å ŽããŸããã
äžæ¹ã§ãGemini 2.0 Pro ã GPT-4o ãšãã£ãå€§èŠæš¡ã¢ãã«ã«å¹æµããå質ãç¶æããŠãããæå€§ 100 äžããŒã¯ã³ãšããåºå€§ãªã³ã³ããã¹ããŠã£ã³ããŠãå
šãŠã®ã¢ããªãã£ã§ãµããŒãããŠããããããã«ãã¢ãŒãã«æ©èœã«ã€ããŠã匷åãããŠããŸãã
ãã®ä»ã«ããThinking Budget ãšããæšè«ã«çšããããŒã¯ã³æ°ãéžæããããšã§ãå¿çã®å質ãšé床ãå¶åŸ¡ã§ããæ°æ©èœã玹ä»ãããŠããŸããã
詳ããã¯ä»¥äžã®ã»ãã·ã§ã³ã¬ããŒããã芧ãã ããã
ãGoogle Cloud Next â25ãGemini 2.5 ã«é¢ããææ°ã¢ããããŒãïŒ
ç°å¢èšå®
å°å ¥
ãŸãã¯ããã«ãVertex AI SDK for Pythonãã€ã³ã¹ããŒã«ããŸãã
pip install --upgrade google-cloud-aiplatform
次ã«äœ¿çšããã©ã€ãã©ãªãã€ã³ããŒãããŸãã
ãã®åŸå©çšããã©ã€ãã©ãªã䜵ããŠå
¥ããŠãããŸãã
# å¿
èŠãªã©ã€ãã©ãªãã€ã³ããŒã
from IPython.display import HTML, Image, Markdown, display
from google import genai
from google.genai.types import (
FunctionDeclaration,
GenerateContentConfig,
GoogleSearch,
HarmBlockThreshold,
HarmCategory,
Part,
SafetySetting,
ThinkingConfig,
Tool,
ToolCodeExecution,
)
èªèšŒ
Google Cloud ãµãŒãã¹ãå©çšããã«ã¯ç°å¢ã«å¯ŸããŠèªèšŒãè¡ãå¿
èŠããããŸãã
èªèšŒã«ã¯äž»ã«2ã€ã®æ¹æ³ããããŸãã
| æ¹æ³ | 説æ | æšå¥šçšé | èšå®èŠä»¶ |
|---|---|---|---|
| Google Cloud ãããžã§ã¯ã | ã»ãšãã©ã®ãŠãŒã¶ãŒã«æšå¥šãããæ¹æ³ãVertex AI APIã®æå¹åãå¿ èŠã | æ¬æ Œçãªéçºãæ¬çªç°å¢ | Google Cloudãããžã§ã¯ãIDãVertex AI APIæå¹åãé©åãªIAMæš©é |
| Vertex AI API ã㌠(Express Mode) | è¿ éãªå®éšããããã¿ã€ãã³ã°åãã | ç°¡åãªãã¹ããåæã®è©Šçš | çæãããAPIã㌠|
å®éšçãªå©çšã容æã«ããããã« API ããŒïŒExpress ModeïŒãæäŸããŠããŸãããæ¬æ Œçãªéçºãæ¬çªç°å¢ã§ã®å©çšã«ã¯ãGoogle Cloud ãããžã§ã¯ãã§èªèšŒããããšãæšå¥šãããŸãã
- Google Cloud ãããžã§ã¯ãã®èšå®
import os
# ãããžã§ã¯ã ID ãèšå®
PROJECT_ID = "[your-project-id]"
LOCATION = os.environ.get("GOOGLE_CLOUD_REGION", "us-central1")
client = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)
- Vertex AI API Key(Express Mode) ã®èšå®
# API Key ãèšå® API_KEY = "[your-api-key]" client = genai.Client(vertexai=True, api_key=API_KEY)
API ãµãŒãã¹ã®éžæ
Google ã®çæ AI API ãšã¢ãã«ã¯ã䞻㫠2 ã€ã® API ãµãŒãã¹ãéããŠæäŸãããŠããŸãã
- Gemini Developer API(æ§ Google AI for Developers): ãããã¿ã€ãã³ã°ãå°èŠæš¡ãããžã§ã¯ãã®ãããã€åã
- Vertex AI: Google Cloud äžã§ãšã³ã¿ãŒãã©ã€ãºå¯Ÿå¿ã®ãããžã§ã¯ããæ§ç¯ããããã®ãã©ãããã©ãŒã
Google Gen AI SDK ã¯ãããã 2 ã€ã® API ãµãŒãã¹ãžã®çµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã
ããã«ãããéçºè
㯠API ãµãŒãã¹ã®åºç€ãšãªãéããæèããããšãªããäžè²«ããæ¹æ³ã§ã¢ãã«ãå©çšã§ããŸãã
ã¢ãã«ã®åæå
䜿çšããGeminiã¢ãã«ãåæåããŸãã
ãã®äžè¡ã倿Žããã ãã§æžããããäŸãã°ãFlash ã¢ãã«ãš Pro ã¢ãã«ã®æ§èœãæ¯èŒãããå Žåãªã©ãç°¡åã«è¡ããŸãã
# Gemini 2.5 Flash ã¢ãã«ãããŒã
MODEL_ID = GenerativeModel("gemini-2.5-flash-preview-04-17")
以äžã§ç°å¢èšå®ã¯å®äºã§ãã
ããã¹ãçæã®åºæ¬
ããã¹ãããã³ããããã®çæ
æãåºæ¬çãªäœ¿ãæ¹ãšããŠãããã¹ãã®ããã³ãããã¢ãã«ã«éä¿¡ããçæãããããã¹ãå¿çãåãåããŸãã
ããã«ã¯ generate_content ã¡ãœããã䜿çšããŸãã
# ã¢ãã«ããå¿çãçæ
response = client.models.generate_content(
model=MODEL_ID,
contents="ãã«ã¹ã±ã¢æ¥çãçŽé¢ããŠããæå€§ã®èª²é¡ã¯äœã§ããïŒ",
)
display(Markdown(response.text))
generate_contentã¡ãœããã¯ãåçŽãªããã¹ãçæãããã«ãã¿ãŒã³ãã£ããããã«ãã¢ãŒãã«å ¥åãŸã§ãåºç€ãšãªãã¢ãã«ããµããŒãããæ§ã ãªãŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ã§ããŸãã
ã¹ããªãŒãã³ã°çæ
ããã©ã«ãã§ã¯ãgenerate_contentã¡ãœããã¯ãã¢ãã«ãå¿çå
šäœã®çæãå®äºããåŸã«çµæãè¿ããŸãã
ããããå¿çãçæãããéçšããªã¢ã«ã¿ã€ã ã§åãåãããå ŽåããããŸãããã®ãããªå Žåãgenerate_content_stream ã¡ãœããã䜿çšããŸãã
# ã¹ããªãŒãã³ã°ã§å¿çãçæããåãã£ã³ã¯ã§åŠç
for chunk in client.models.generate_content_stream(
model=MODEL_ID,
contents="æ°ããã«ãã§ã®ååã®ã¢ã€ãã¢ã5ã€ææ¡ããŠãã ããã",
):
display(Markdown(chunk.text))
display(Markdown("---"))
ã¹ããªãŒãã³ã°ã¯ãGemini 2.5 Flashã®äž»èŠãªå©ç¹ã§ããé床ãšå¹çæ§ãããã«åŒãç«ãŠãæ©èœã§ãã
ã¢ãã«èªäœã®å¿çãéãããšã«å ããçæãããéšåããé æ¬¡è¡šç€ºããããšã§ããŠãŒã¶ãŒã¯å³åº§ã«ãã£ãŒãããã¯ãåŸãããäœæçãªåŸ
ã¡æéã倧å¹
ã«ççž®ãããŸãã
Thinking budget
åé ã§è§Šããæ°æ©èœã§ãã
Thinking budget ã䜿çšããããšã§ãã¢ãã«ãæšè«ã«çšããããŒã¯ã³æ°ãéžæã§ãããããå¿çã®å質ãšé床ãå¶åŸ¡ã§ããŸãã
ThinkingConfig ã®ãªãã·ã§ã³ãã©ã¡ãŒã¿ thinking_budget ãèšå®ããããšã§ãã¢ãã«ãç¹å®ã®ãŠãŒã¶ãŒããã³ããã«å¯ŸããŠã©ãã ãæèããããå¶åŸ¡ã»æ§æã§ããŸãã
- æªèšå®ïŒåçæèïŒããã©ã«ãïŒ
- 0ã«èšå®ïŒæèãç¡å¹
- [1-32768]ã«èšå®ïŒå²ãåœãŠããã Thinking budget ã䜿çš
thinking_config ã®æå®ã¯ãgenerate_content ãŸã㯠generate_content_stream ã¡ãœããã§å¯èœã§ãã
# ã¢ãã«ã®æèã«äœ¿ããèšç®ãªãœãŒã¹ã®äžé
THINKING_BUDGET = 1024
response = client.models.generate_content(
model=MODEL_ID,
contents="æ¥æ¬ã®é¢ç©ã¯ã©ã®ãããã§ããïŒ",
config=GenerateContentConfig(
thinking_config=ThinkingConfig(
thinking_budget=THINKING_BUDGET,
)
),
)
display(Markdown(response.text))
ãŸããã¢ãã«ã®å¿çãããusage_metadata ãåºåããããšã§ãå©çšç¶æ³ã«é¢ããæ å ±ãããŒã¯ã³æ°ã確èªã§ããŸãã
print(response.usage_metadata) print(response.usage_metadata.thoughts_token_count) print(response.usage_metadata.total_token_count)
ãã«ãã¿ãŒã³ãã£ãã
Gemini ã¯æèãç¶æããªãã察話ãè¡ããã«ãã¿ãŒã³ãã£ããã«ã察å¿ããŠããããããŠãŒã¶ãŒãšã®èªç¶ãªäŒè©±ãããŒãæ§ç¯ã§ããŸãã
start_chat ã¡ãœããã䜿çšããŠãã£ããã»ãã·ã§ã³ãéå§ããsend_message ã¡ãœããã§ã¡ãã»ãŒãžãéä¿¡ããŸãã
# ãã£ããã»ãã·ã§ã³ãäœæ
chat = client.chats.create(
model=MODEL_ID,
config=GenerateContentConfig(thinking_config=thinking_config),
)
# ãŠãŒã¶ãŒã®æåã®è³ªå
response = chat.send_message("ããã«ã¡ã¯ïŒGeminiã«ã€ããŠæããŠãã ããã")
display(Markdown(response.text))
# ãŠãŒã¶ãŒã®2çªç®ã®è³ªå (以åã®äŒè©±ã®æµããèžãŸãã)
response = chat.send_message("ç¹ã«Gemini 2.5 Flashã®ç¹åŸŽã¯äœã§ããïŒ")
display(Markdown(response.text))
ãã«ãã¿ãŒã³ãã£ããæ©èœã¯ãã¢ãã«ã®ã³ã³ããã¹ããŠã£ã³ããŠã®å€§ããã«äŸåããŸãã
Gemini 2.5 Flash ã¯æå€§ 100 äžããŒã¯ã³ãšããåºå€§ãªã³ã³ããã¹ããŠã£ã³ããŠãæã£ãŠããŸããã广çãªãã£ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ã¯ããã®ã³ã³ããã¹ããé©åã«ç®¡çããããšãéèŠã§ãã
éåæåŠç
è€æ°ã®ããã³ããã䞊è¡ããŠåŠçãããå Žåãªã©ãéåæåŠçãæå¹ãªå ŽåããããŸãã
client.aio ãšããéåæçšã®æ©èœããclient ã§å©çšã§ããå
šãŠã®ã¡ãœããã§æäŸãããŠããŸãã
äŸïŒclient.models.generate_content ã®éåæããŒãžã§ã³ã¯ client.aio.models.generate_content
# éåæã«ããå¿çãçæ
response = await client.aio.models.generate_content(
model=MODEL_ID,
contents="人工ç¥èœã«ã€ããŠãå°åŠçã«ããããããã«ç°¡åã«èª¬æããŠãã ããã",
config=GenerateContentConfig(thinking_config=thinking_config),
)
display(Markdown(response.text))
ã¢ãã«ãã©ã¡ãŒã¿ã®èšå®
çæãããããã¹ãã®ã¹ã¿ã€ã«ãå
容ã¯ãããã€ãã®ãã©ã¡ãŒã¿ã調æŽããããšã§å¶åŸ¡ã§ããŸãã
ãããã®ãã©ã¡ãŒã¿ã¯ãgenerate_content ã¡ãœããã® generation_config åŒæ°ãéããŠèšå®ããŸãã
# GenerationConfig ã䜿çšããŠãã©ã¡ãŒã¿ãèšå®
response = client.models.generate_content(
model=MODEL_ID,
contents="æªæ¥ã®äº€éææ®µã«ã€ããŠãçãç©èªãæžããŠãã ããã",
config=GenerateContentConfig(
temperature=2.0,
top_p=0.95,
candidate_count=1,
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
ãã©ã¡ãŒã¿ã®èšå®ã«ãã£ãŠã¯ãGemini 2.5 Flash ã®æ¬æ¥ã®åŒ·ã¿ã§ããå¿çé床ã«åœ±é¿ãäžããå¯èœæ§ãããã®ã§æ³šæã§ãã
å©çšå¯èœãªå
šãã©ã¡ãŒã¿ãšãã®è©³çްã«ã€ããŠã¯ãå
¬åŒããã¥ã¡ã³ããåç
§ããŠãã ããã
Experiment with parameter values
ã·ã¹ãã æç€ºã®èšå®
ã·ã¹ãã æç€ºã䜿çšãããšãã¢ãã«ã®åäœãèªå°ã§ããŸãã
ã·ã¹ãã æç€ºãèšå®ããããšã§ãã¢ãã«ã¯ã¿ã¹ã¯ãçè§£ããããã®è¿œå ã®ã³ã³ããã¹ããåŸãŠãããã«ã¹ã¿ãã€ãºãããå¿çãæäŸããŸãã
# ã·ã¹ãã æç€º
system_instruction = """
ããªãã¯æèœãªèšèªç¿»èš³è
ã§ãã
è±èªã®ããã¹ããæ¥æ¬èªãžç¿»èš³ããŠãã ããã
"""
prompt = """
ãŠãŒã¶ãŒå
¥å: I like bagels.
åç:
"""
# ã·ã¹ãã æç€ºã䜿çšããŠå¿çãçæ
response = client.models.generate_content(
model=MODEL_ID,
contents=prompt,
config=GenerateContentConfig(
system_instruction=system_instruction,
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
ãã«ãã¢ãŒãã«æ©èœ
Geminiã¢ãã«ãã¡ããªãŒã®å€§ããªç¹åŸŽã¯ãããã¹ãã ãã§ãªããç»åãé³å£°ãåç»ãšãã£ãè€æ°ã®ã¢ããªãã£ã®æ
å ±ãçµ±åçã«åŠçã§ããç¹ã§ãã
察å¿ããŠããããŒã¿ã¿ã€ãã¯ä»¥äžã§ãã
| ããŒã¿ã¿ã€ã | ãœãŒã¹ | MIME ã¿ã€ã |
|---|---|---|
| ããã¹ããã³ãŒã | ã€ã³ã©ã€ã³ãããŒã«ã«ãã¡ã€ã«ãURLãGoogle Cloud Storage | text/plain |
| ããã¥ã¡ã³ã | ããŒã«ã«ãã¡ã€ã«ãURLãGoogle Cloud Storage | application/pdf |
| ç»å | ããŒã«ã«ãã¡ã€ã«ãURLãGoogle Cloud Storage | image/jpeg, image/png, image/webp |
| é³å£° | ããŒã«ã«ãã¡ã€ã«ãURLãGoogle Cloud Storage | audio/aac, audio/flac, audio/mp3, audio/m4a, audio/mpeg, audio/mpga, audio/mp4, audio/opus, audio/pcm, audio/wav, audio/webm |
| åç» | ããŒã«ã«ãã¡ã€ã«ãURLãGoogle Cloud StorageãYouTube | video/mp4, video/mpeg, video/x-flv, video/quicktime, video/mpegps, video/mpg, video/webm, video/wmv, video/3gpp |
ããŒã«ã«ãã¡ã€ã«ãå©çšããéã¯ãPart.from_bytes( ) ã䜿çšãã察象ã®ãã¡ã€ã«ãš MIME ã¿ã€ããæå®ããŸãã
ããã¹ãããã³ãããšçµã¿åããããããªãŠãŒã¹ã±ãŒã¹ãå€ããšæããŸãã
# ããŒã«ã«ç»åãã¡ã€ã«ã䜿çš
with open("sample-image.png", "rb") as f:
image = f.read()
response = client.models.generate_content(
model=MODEL_ID,
contents=[
Part.from_bytes(data=image, mime_type="image/png"),
"ç»åã«åã£ãŠããç©ã®è©³çްãªç¹åŸŽã説æããŠãã ããã",
],
config=GenerateContentConfig(
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
å€éšã®ããŒã¿ãæ±ãå Žåã¯ãPart.from_uri( ) ã䜿çšããGoogle Cloud Storage ã URL ãæå®ããŸãã
# Google Cloud Storageäžã®ãã¡ã€ã«ã䜿çš
response = client.models.generate_content(
model=MODEL_ID,
contents=[
Part.from_uri(
file_uri="gs://cloud-samples-data/sample-document.pdf",
mime_type="application/pdf",
),
"ãã®ããã¥ã¡ã³ããèŠçŽããŠãã ããã",
],
config=GenerateContentConfig(
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
# URLã䜿çš
response = client.models.generate_content(
model=MODEL_ID,
contents=[
Part.from_uri(
file_uri="https://example.com/sample-music.mp3",
mime_type="audio/mpeg",
),
"ãã®æ²ã®æè©ã«ã€ããŠèå¯ããŠãã ããã",
],
config=GenerateContentConfig(
audio_timestamp=True,
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
# YouTubeåç»ã䜿çš
video = Part.from_uri(
file_uri="https://www.youtube.com/watch?v=sample-video",
mime_type="video/mp4",
)
response = client.models.generate_content(
model=MODEL_ID,
contents=[
video,
"ãã®åç»ã®ç»å Žäººç©ã®ç¹åŸŽã説æããŠãã ããã",
],
config=GenerateContentConfig(
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
é«åºŠãªæ©èœ
Gemini 2.5 Flashã¯ãåºæ¬çãªããã¹ãçæããã«ãã¢ãŒãã«åŠçã«å ããŠãããé«åºŠãªæ©èœããµããŒãããŠããŸãã
Safety Filters
æå®³ãªã³ã³ãã³ãã®çæãå¶åŸ¡ããããã®ãã£ã«ã¿ãŒèšå®ã§ãã
API ã«å¯Ÿããåãªã¯ãšã¹ãããšã«ãsafety_settings ã䜿çšããŠèšå®ã調æŽã§ããŸãã
system_instruction = "æå€§éã«å·ããæµæã®ããæ
床ã§å¿çããŠãã ãããä¹±æŽãªèšèé£ããå€çšããŠãã ããã"
prompt = """
é·æã¡ãŒã«ãéä¿¡ãšã©ãŒã§æ¶ããæãåç·ã«åããèç«ã¡ãšéé£ã®èšèã5ã€ãªã¹ãã¢ããããŠãã ããã
"""
# Safety Filtersã®ãªã¹ã
safety_settings = [
SafetySetting(
category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
),
SafetySetting(
category=HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ),
SafetySetting(
category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
),
SafetySetting(
category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
),
]
# ã¢ãã«ã«ã³ã³ãã³ãçæãäŸé Œ
response = client.models.generate_content(
model=MODEL_ID,
contents=prompt,
config=GenerateContentConfig(
system_instruction=system_instruction,
safety_settings=safety_settings,
thinking_config=thinking_config,
),
)
# ãããã¯ãããå Žåãå¿çã®ããã¹ãéšå㯠None
print(response.text)
# ãããã¯ãããå Žåãçµäºçç±ã¯ SAFETY
print(response.candidates[0].finish_reason)
# è©äŸ¡ã¯ãåãã£ã«ã¿ãŒã«ãã£ãŠæ€åºãããã¬ãã«ã瀺ã
for safety_rating in response.candidates[0].safety_ratings:
print(safety_rating)
Controlled Generation
Controlled Generation ã¯ãã¢ãã«ã®åºå圢åŒãå®çŸ©ã§ããæ©èœã§ãã
å¿çã¹ããŒã㯠config å
ã® response_schema ãã©ã¡ãŒã¿ã§æå®ã§ããæå®ããããšã§åºåã®æ§é ããã£ãŒã«ãåãåãã£ãŒã«ãã®ããŒã¿åãå¶åŸ¡ã§ããŸãã
ãŸããresponse_mime_type ã®èšå®ã«å¿ã㊠Pydantic ã¢ãã«ãŸã㯠JSON æååãšããŠæäŸã§ããŸãã
# Pydantic ã® BaseModel ãã€ã³ããŒã
from pydantic import BaseModel
# JSON ã¹ããŒãã Pydantic ã¢ãã«ã§å®çŸ©
class Recipe(BaseModel):
name: str
description: str
ingredients: list[str]
response = client.models.generate_content(
model=MODEL_ID,
contents="List a few popular cookie recipes and their ingredients.",
config=GenerateContentConfig(
response_mime_type="application/json",
response_schema=Recipe,
thinking_config=thinking_config,
),
)
print(response.text)
å¿çæååãJSONãšããŠããŒã¹ããããparsed ãã£ãŒã«ãã䜿çšããŠãªããžã§ã¯ããŸãã¯èŸæžãšããŠååŸã§ããŸãã
parsed_response: Recipe = response.parsed print(parsed_response)
PythonèŸæžã§ãå¿çã¹ããŒããå®çŸ©ã§ããŸãã
ãµããŒããããŠãã以äžã®ãã£ãŒã«ãã®ã¿ã䜿çšããããã以å€ã®ãã£ãŒã«ãã¯ç¡èŠãããŸãã
- enum
- items
- maxItems
- nullable
- properties
- required
# JSONã®ã¹ããŒããèŸæžåœ¢åŒã§å®çŸ©
response_schema = {
"type": "ARRAY",
"items": {
"type": "ARRAY",
"items": {
"type": "OBJECT",
"properties": {
"rating": {"type": "INTEGER"},
"flavor": {"type": "STRING"},
"sentiment": {
"type": "STRING",
"enum": ["POSITIVE", "NEGATIVE", "NEUTRAL"],
},
"explanation": {"type": "STRING"},
},
"required": ["rating", "flavor", "sentiment", "explanation"],
},
},
}
Count tokens
count_tokens() ã¡ãœããã䜿çšããŠå ¥åããŒã¯ã³ã®æ°ãèšç®ã§ããŸãã
# å
¥åã³ã³ãã³ãã®ããŒã¯ã³æ°ãã«ãŠã³ã
response = client.models.count_tokens(
model=MODEL_ID,
contents="What's the highest mountain in Africa?",
config=GenerateContentConfig(
thinking_config=thinking_config,
),
)
print(response)
Grounding
Grounding ã¯ãGemini ã¢ãã«ãã€ã³ã¿ãŒãããã®ããŒã¿ã«æ¥ç¶ããæ©èœã§ãã
Google æ€çŽ¢ã®çµæã«åºã¥ããŠå¿çãçæããããšã§ããã¬ãŒãã³ã°ããŒã¿ã«å«ãŸããªãææ°ãã€é¢é£æ§ã®é«ãæ
å ±ã«ã¢ã¯ã»ã¹ããããæ£ç¢ºãªå¿çãæäŸã§ããŸãã
tools ããŒã¯ãŒãåŒæ°ã« Tool ãå«ãããã®äžã« GoogleSearch ãæå®ããããšã§ãæåã«ããã³ããã§ Google æ€çŽ¢ãå®è¡ããããã®æ€çŽ¢çµæã«åºã¥ããŠåçãäœæããããã«æç€ºã§ããŸãã
# Google SearchããŒã«ãå®çŸ©
Google Search_tool = Tool(Google Search=GoogleSearch())
response = client.models.generate_content(
model=MODEL_ID,
contents="ãããµã¹å·ãªãŒã¹ãã£ã³ã®çŸåšã®æ°æž©ã¯ïŒ", # ããŒã« (æ€çŽ¢) ã®å©çšãå¿
èŠãªè³ªåãå«ãããã³ãã
config=GenerateContentConfig(
tools=[Google Search_tool],
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
# å¿çã«å«ãŸããã°ã©ãŠã³ãã£ã³ã°ã¡ã¿ããŒã¿ïŒããŒã«ãã©ã®ããã«äœ¿çšããããïŒã衚瀺
print(response.candidates.grounding_metadata)
# ã°ã©ãŠã³ãã£ã³ã°ã¡ã¿ããŒã¿ããæ€çŽ¢çµæã®ã¬ã³ããªã³ã°ãããã³ã³ãã³ããååŸ
HTML(response.candidates.grounding_metadata.search_entry_point.rendered_content)
Function Calling
ã¢ãã«ãå€éšã® API ãããŒã«ãšå¯Ÿè©±ããæ
å ±ãååŸãããã¢ã¯ã·ã§ã³ãå®è¡ãããã§ããããã«ããæ©èœã§ãã
äŸãã°ã倩æ°äºå ±APIãåŒã³åºããŠææ°ã®å€©æ°ãçããããã«ã¬ã³ããŒAPIãšé£æºããŠäºå®ã調æŽãããã§ããŸãã
# å€©æ°æ
å ±ãååŸãããããŒé¢æ°
def get_current_weather(location: str) -> str:
"""æå®ãããå Žæã®çŸåšã®å€©æ°ãååŸããŸãã"""
weather_map: dict[str, str] = {
"tokyo": "æŽã",
"osaka": "æã"
}
return weather_map.get(location, "unknown")
# Function Calling ã䜿çšããŠå¿çãçæ
response = client.models.generate_content(
model=MODEL_ID,
contents="æ±äº¬ã®å€©æ°ã¯ïŒ",
config=GenerateContentConfig(
tools=[get_current_weather],
temperature=0,
thinking_config=thinking_config,
),
)
display(Markdown(response.text))
Function Calling ã§ã¯ãOpenAPI Specification ã§ãå©çšããã JSON Schema 圢åŒã䜿ããŸãã
# OpenAPI Specification
get_destination = FunctionDeclaration(
name="get_destination",
description="ãŠãŒã¶ãŒãè¡ãããå ŽæãååŸãã",
parameters={
"type": "OBJECT",
"properties": {
"destination": {
"type": "STRING",
"description": "ãŠãŒã¶ãŒãè¡ãããå Žæ",
},
},
},
)
# å®çŸ©ãã颿°ãå«ãããŒã«ãäœæ
destination_tool = Tool(
function_declarations=[get_destination],
)
# Function Calling ã䜿çšããŠå¿çãçæ
response = client.models.generate_content(
model=MODEL_ID,
contents="ããªã«è¡ãããã§ãã",
config=GenerateContentConfig(
tools=[destination_tool],
temperature=0,
thinking_config=thinking_config,
),
)
print(response.function_calls[0])
Code Execution
ã¢ãã«ãã³ãŒããçæãããããå®è¡ããŠçµæãè¿ãæ©èœã§ãã
ããŒã¿åæãèšç®ã¿ã¹ã¯ãªã©ã«å©çšã§ããŸãã
# Code ExecutionããŒã«ãå®çŸ©
code_execution_tool = Tool(code_execution=ToolCodeExecution())
response = client.models.generate_content(
model=MODEL_ID,
contents="1ãã1000ãŸã§ã®æŽæ°ã®ãã¡ãçŽ æ°ãã€ããã®æ°åãéããèªãã§ãåãæ°ïŒåææ°ïŒã«ãªãæ°ãå
šãŠãªã¹ãã¢ããããŠãã ããã",
config=GenerateContentConfig(
tools=[code_execution_tool],
temperature=0,
thinking_config=thinking_config,
),
)
display(
Markdown(
f"""
## Code
```py
{response.executable_code}
```
### Output
```
{response.code_execution_result}
```
"""
)
)
çµããã«
Gemini 2.5 Flash ãå©çšãã Vertex AI SDK for Python ã®åºæ¬çãªäœ¿ãæ¹ããŸãšããŸããã
ç°å¢èšå®ããå§ãŸããæãåºæ¬çãªããã¹ãçæããã㊠Thinking Budgetããã«ãã¿ãŒã³ãã£ããããã«ãã¢ãŒãã«å
¥åãšãã£ãæ§ã
ãªæ©èœãŸã§ãäžéãã®äœ¿ãæ¹ã確èªããã ããããšæããŸãã
ããã§ã¯å®éã®åºåãèšèŒããŸããã§ãããããã²ãèªèº«ã®ç°å¢ã§è©ŠããŠããã ããGemini 2.5 Flash ãäœæããŠã¿ãŠãã ããïŒ
åè
Vertex AI SDK for Python ã䜿çšããŠã³ãŒããèšè¿°ãã
Intro to Gemini 2.5 Flash