Gemini : Tutorials : Google AI Studio クイックスタート (1) 自由形式の日本語プロンプト & コード生成
作成 : クラスキャット セールスインフォメーション
作成日時 : 04/09/2024
* 本ページは、ai.google.dev の以下のページを参考にしてまとめ直し、適宜、補足説明したものです :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Website: www.classcat.com ; ClassCatJP
Gemini : Tutorials : Google AI Studio クイックスタート (1) 自由形式の日本語プロンプト & コード生成
Google AI Studio は生成モデルを使用してプロトタイピングするためのブラウザベースの IDE です。Google AI Studio は素早くモデルを試して様々なプロンプトで実験することを可能にします。満足できるものを構築した場合、Gemini API で強化された、好みのプログラミング言語でそれをコードにエクスポートできます。
プロンプトとモデル・チューニング
Google AI Studio は様々なユースケースのために設計されたプロンプト用の幾つかのインターフェイスを提供しています :
- 自由形式 (Freeform) プロンプト – これらのプロンプトは、コンテンツを生成して指示へ応答するための制限のないプロンプト・エクスペリエンスを提供します。プロンプト用に画像とテキストデータの両方が使用できます。Learn more
- 構造化プロンプト – このプロンプト・テクニックはリクエストと応答のサンプルのセットを提供することでモデル出力をガイドできます。モデル出力の構造をより制御する必要がある場合にこのアプローチを使用します。Learn more
- チャット・プロンプト – チャットプロンプトを使用して会話的エクスペリエンスを構築します。このプロンプトテクニックは出力を生成するのに複数の入力と応答ターンを可能にします。Learn more
Google AI Studio はまたチューニングと呼ばれるテクニックを使用して、モデルの動作を変更することも可能です :
- チューニング済みモデル – この高度なテクニックを使用してより多くの例を提供することで、特定のタスク用にモデルの応答を改良できます。チューニングはレガシーな PaLM モデルについてのみ利用可能です。このプロンプトを有効にするには Settings で Show legacy models を有効にします。Learn more
自由形式のプロンプト例: 建物について更に知る
Gemini のマルチモーダル機能は画像とテキストの組み合わせを使用してモデルにプロンプトを供給することを可能にします。例えば、この機能を使用して画像で示される建物について更に知ることができます。
ステップ 1 – テキストと画像を使用してプロンプトを作成する
マルチモーダル・プロンプトを作成するには :
- Google AI Studio にアクセスする。
- 左側のパネルで、Create new > Freeform prompt を選択します。
- 右側のカラムの Model フィールドで、Gemini Pro Vision モデルのような、画像をサポートするモデルを選択します。
- プロンプトテキスト領域では、以下のテキストを入力します :
look at the following picture and tell me who is the architect
- プロンプト領域の上の Insert バーから、Image を選択し、そして建物のサンプル画像の一つを選択します。
- アプリケーションウィンドウの下部で、Run を実行してこのリクエストへの応答を生成します。
日本語で試してみましょう :
次の写真を見て、建築家が誰なのか教えてください
この写真はタージ・マハルです。ムガル帝国皇帝シャー・ジャハーンによって、亡き妻ムムターズ・マハルの霊廟として建てられました。ウスタッド・アフマド・ラハウリはタージ・マハルの主任建築家であると考えられています。
ステップ 2 – プロンプトに置き換え可能な変数を追加する
ステップ 1 では、モデルにテキストの固定文字列と画像を使用してプロンプトを提供しました。しかし時に、プロンプトの一部を動的に変更できることを望むでしょう。例えば、対話的なアプリケーションを構築している場合、プロンプトを様々なユーザ入力で変更したいかもしれません。そのため、変数 を使用してプロンプトをパラメータ化できます。
プロンプトに変数を追加するには :
- プロンプトで置き換えたい単語や句を選択します。この場合、テキスト: “who is the architect.” を選択します。
- プロンプトの上の Insert: ヘッダから、{{ }} Test input を選択します。
- プロンプトの下の Test your prompt テーブルで、Add test example を選択して追加のプロンプト値を入力することにより、プロンプトに追加の値を追加します。自由に幾つかの新しい入力値を追加してください。
- アプリケーション・ウィンドウの下部で、Run を選択すると様々なリクエストの各々に対して応答を生成します。
日本語でも試してみましょう :
次の写真を見て、建築家が誰なのか教えてください
建築家が誰なのか
建築はいつ始まったのか
建築はいつ完成したのか
1 建築家が誰なのか 写真に写っているのは、エジプトのギザにあるクフ王のピラミッドです。このピラミッドは、古代エジプトの第4王朝時代のファラオであるクフ王のために建設されました。建築家はヘミウヌという人物で、クフ王の宰相を務めていたとされています。 2 建築はいつ始まったのか 紀元前2700年頃、古代エジプトで建築が始まりました。 古代エジプトの建築は、巨大な石材を積み上げて作られるピラミッドが有名です。ピラミッドは、王の墓として建設されました。ピラミッドは、古代エジプトの建築技術の高さを見せつけるものです。ピラミッドは、何千年もの間、その姿を保ち続けています。古代エジプトの建築は、後の建築に大きな影響を与えました。ギリシャ建築やローマ建築は、古代エジプトの建築を参考にしています。古代エジプトの建築は、世界の歴史の中で最も重要な建築の一つです。ピラミッドは、古代エジプトの文明の偉大さを象徴するものです。 3 建築はいつ完成したのか 写真に写っているのは、エジプトのギザにあるクフ王のピラミッドです。建築家は不明ですが、紀元前2580年頃に完成したとされています。
ステップ 3 – モデルパラメータを実験する
プロンプトをプロトタイピングする際に、アプリケーションの右側のモデル run settings で遊ぶこともできます。これらは知るべき主要な設定です :
- Model – どのモデルがプロンプトに応答することを望むかを選択します。利用可能なモデルと機能についての詳細は モデル をご覧ください。
- Temperature – モデルの応答でどの程度ランダム性が許容されるかを制御します。この値を上げるとモデルがより予期しない創造性のある応答を生成することを可能にします。
- Max outputs – 各リクエストに対してモデルが返す応答の数を増やします。このオプションは、単一のプロンプトに対して複数の応答を生成することによりプロンプトを素早くテストするために役立ちます。
- Safety settings – モデル応答を管理するためのセーフティ設定を調整します。制御の詳細は、セーフティ設定 をご覧ください。
ステップ 4 – 次のステップ
生成 AI アプリケーションのプロトタイプを行った今、そのワークをセーブしたり、独自の開発環境でこのプロンプトを使用するためのコードを生成することができます。
作成したプロンプトを保存するには :
- Google AI Studio アプリケーションの右上で、Save を選択します。
- アプリケーションを貴方の Google Drive アカウントに接続します、まだ行っていないのであれば。
- Save Prompt ダイアログで、プロンプト名をとオプションの説明を入力してから、Save を選択します。
作成したプロンプトをコードとしてエクスポートするには :
- Google AI Studio アプリケーションの右上で、Get code を選択します。
- プログラミング言語タブを選択します。
- Copy を選択してコードをクリップボードにコピーします。
Python
"""
At the command line, only need to run once to install the package via pip:
$ pip install google-generativeai
"""
from pathlib import Path
import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")
# Set up the model
generation_config = {
"temperature": 0.4,
"top_p": 1,
"top_k": 32,
"max_output_tokens": 4096,
}
safety_settings = [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
]
model = genai.GenerativeModel(model_name="gemini-1.0-pro-vision-latest",
generation_config=generation_config,
safety_settings=safety_settings)
# Validate that an image is present
if not (img := Path("image0.jpeg")).exists():
raise FileNotFoundError(f"Could not find image: {img}")
image_parts = [
{
"mime_type": "image/jpeg",
"data": Path("image0.jpeg").read_bytes()
},
]
prompt_parts = [
"次の写真を見て、建築家が誰なのか教えてください",
image_parts[0],
"建築はいつ完成したのか",
]
response = model.generate_content(prompt_parts)
print(response.text)
JavaSceript
// node --version # Should be >= 18
// npm install @google/generative-ai
const {
GoogleGenerativeAI,
HarmCategory,
HarmBlockThreshold,
} = require("@google/generative-ai");
const fs = require("fs");
const MODEL_NAME = "gemini-1.0-pro-vision-latest";
const API_KEY = "YOUR_API_KEY";
async function run() {
const genAI = new GoogleGenerativeAI(API_KEY);
const model = genAI.getGenerativeModel({ model: MODEL_NAME });
const generationConfig = {
temperature: 0.4,
topK: 32,
topP: 1,
maxOutputTokens: 4096,
};
const safetySettings = [
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
{
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
{
category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
{
category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
];
if (!fs.existsSync("image0.jpeg")) {
throw new Error("Could not find images in current directory.");
}
const parts = [
{text: "次の写真を見て、建築家が誰なのか教えてください"},
{
inlineData: {
mimeType: "image/jpeg",
data: Buffer.from(fs.readFileSync("image0.jpeg")).toString("base64")
}
},
{text: "建築はいつ完成したのか"},
];
const result = await model.generateContent({
contents: [{ role: "user", parts }],
generationConfig,
safetySettings,
});
const response = result.response;
console.log(response.text());
}
run();
Curl
#!/bin/bash
# Run this from the directory in which you saved your input images
# This script was written to run on Debian Linux. It may require updates
# to run on other platforms
# Test that the first image is present
if [ ! -f "image0.jpeg" ]; then
echo "Could not find images in the current directory." >&2
exit 1
fi
API_KEY="YOUR_API_KEY"
curl \
-X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-vision-latest:generateContent?key=${API_KEY} \
-H 'Content-Type: application/json' \
-d @<(echo '{
"contents": [
{
"parts": [
{
"text": "次の写真を見て、建築家が誰なのか教えてください"
},
{
"inlineData": {
"mimeType": "image/jpeg",
"data": "'$(base64 -w0 image0.jpeg)'"
}
},
{
"text": "建築はいつ完成したのか"
}
]
}
],
"generationConfig": {
"temperature": 0.4,
"topK": 32,
"topP": 1,
"maxOutputTokens": 4096,
"stopSequences": []
},
"safetySettings": [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
}
]
}')
以上