🗒️
Gemini APIのメモ(REST API利用)
Gemini APIのREST APIを触ってみた。自分用にメモ。
ドキュメント
API利用方法
VS CodeのREST Clientを利用したので、その際の記述を記載していきます。
{{apikey}}
には、APIキーが入ります。
モデル一覧を取得する
APIで利用する際のモデル名やトークンの制限、利用できるメソッドが取得できます。
GET https://generativelanguage.googleapis.com/v1beta/models?key={{apikey}}
Content-Type: application/json
レスポンス
resonse
{
"models": [
{
"name": "models/gemini-1.5-pro-latest",
"version": "001",
"displayName": "Gemini 1.5 Pro",
"description": "Mid-size multimodal model that supports up to 1 million tokens",
"inputTokenLimit": 1048576,
"outputTokenLimit": 8192,
"supportedGenerationMethods": [
"generateContent",
"countTokens"
],
"temperature": 1,
"topP": 0.95
},...
}
Gemini 1.5 Proを利用する
まずはシンプルに
POST https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key={{apikey}}
Content-Type: application/json
{
"contents": [{
"parts":[{
"text": "こんにちは"
}],
}]
}
レスポンス
resonse
{
"candidates": [
{
"content": {
"parts": [
{
"text": "こんにちは! 😊\n\n今日はどうされましたか? \n"
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE"
}
]
}
]
}
役割を指定する
ChatGPTでいうところのrole=systemをプロンプトとは別に指定することができます。
この機能は1.5から利用できます。 systemInstructionで役割を定義することができます。
URLは同じなので、JSONのみを記載します。
request
{
"contents": [{
"parts":[{
"text": "東京都新宿区大京町22-1 グランファースト新宿御苑3F/4F"
}],
"role": "user"
}],
"systemInstruction": {
"parts":[{
"text": "与えられた住所を、都道府県、市区町村、番地、建物名の4つに分解してください。"
}],
"role": "model"
}
}
レスポンス
resonse
{
"candidates": [
{
"content": {
"parts": [
{
"text": "都道府県:東京都\n市区町村:新宿区\n番地:大京町22-1\n建物名:グランファースト新宿御苑3F/4F \n"
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE"
}
]
}
]
}
レスポンスのJSONフォーマットを指定する
response_mime_type
を利用することでレスポンスのJSONの形式を指定することができます。
同じように住所分割してもらいますが、以下のようなJSONで出力してもらいましょう。
{
"都道府県": "東京都",
"市区町村": "新宿区",
"番地" : "大京町22-1",
"建物名": "グランファースト新宿御苑3F/4F"
}
JSONスキーマを以下のように定義します。
スキーマ
{
"type": "object",
"properties": {
"都道府県": {
"type": "string"
},
"市区町村": {
"type": "string"
},
"番地": {
"type": "string"
},
"建物名": {
"type": "string"
}
}
}
あとは、これをsystemInstruction内に記述し、generationConfig内にJSON形式でレスポンスするように指定します。具体的には以下のようになります。
request
{
"contents": [{
"parts":[{
"text": "東京都新宿区大京町22-1 グランファースト新宿御苑3F/4F"
}],
"role": "user"
}],
"systemInstruction": {
"parts":[{
"text": "与えられた住所を、都道府県、市区町村、番地、建物名の4つに分解してください。次のJSON Schemaで出力してください。{\"type\":\"object\",\"properties\":{\"都道府県\":{\"type\":\"string\"},\"市区町村\":{\"type\":\"string\"},\"番地\":{\"type\":\"string\"},\"建物名\":{\"type\":\"string\"}}}"
}],
"role": "model"
},
"generationConfig": {
"responseMimeType": "application/json"
}
}
意図した形でデータが生成されています。
レスポンス
resonse
{
"candidates": [
{
"content": {
"parts": [
{
"text": "{\"都道府県\":\"東京都\",\"市区町村\":\"新宿区\",\"番地\":\"大京町22-1\",\"建物名\":\"グランファースト新宿御苑3F/4F\"}\n\n"
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE"
}
]
}
]
}
まとめ
- Gemini APIで役割をプロンプトとは別に指定することができる
- promptとは別になるので、役割の定義についてはトークンのカウントに入らなそう。(トークンの節約になる
- レスポンスのJSONのフォーマットを指定することで、その後の処理で扱いやすくなる
Discussion