Azure OpenAIはお金がかかる
仕事で生成AIを使うようになって、いろいろ実験をしたく家でもAzure OpenAIを使って遊ぶようになったが、やっぱなんかしらお金かかるのが気になっている。
ケチなんで、ミリもお金をかけたくはない。
Geminiは個人で遊ぶレベルなら基本的に無料だよ?
https://ai.google.dev/gemini-api/docs/pricing?hl=ja
前々から知ってはいたけど、触ってみよっかなって思った。
※ただし、入力された情報は学習に使われる点を理解して使う必要あり。
前提条件
Pythonライブラリ使うとめっちゃ簡単な点は理解しつつ、いま手元のPCがPythonすら入れていないWin10機なので、Win10の標準環境だけで遊べるように構成を考える。
要するに、PowerShellでやる。REST APIでやる。
GeminiのAPIKeyを取得する
Googleにサインインした状態で、以下ページに飛ぶ。
https://aistudio.google.com/apikey
ページ内に「APIキーを作成」ってボタンがあるので、それ押すとAPIKeyが発行される。
この際にカード情報が無いよ?とかそういうことは言ってこない。ホントに無料で使わせてくれる。
PowerShellでコード書いて遊ぶ
ちょっと古いけど、proの名を冠する Gemini 1.5 proで試してみる。
なお、無料で使えるモデルは結構たくさんある。いろいろ試してみるといいと思われる。
# APIKeyを設定
$key = "*******" # 取得したキーを入力すること
# エンドポイントを設定
$apiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=$key"
# POSTリクエストに送るJSONデータ
$requestBody = @{
contents = @(
@{
role = "user"
parts = @(
@{
text = "日本の通貨って、どんな単位?"
}
)
}
)
} | ConvertTo-Json -Depth 10
# JSONをUTF-8に変換
$utf8Body = [System.Text.Encoding]::UTF8.GetBytes($requestBody)
# HTTPリクエストヘッダーの設定
$headers = @{
"Content-Type" = "application/json"
}
# POSTなげる
$response = Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $utf8Body
# JSON変換して、出力
Write-Output ($response | ConvertTo-Json -Depth 10)
出力結果
ここまで10分もかからん、めちゃ簡単。
{
"candidates": [
{
"content": {
"parts": [
{
"text": "日本の通貨の単位は**円** (えん - en) と**銭** (せん - sen) です。補助単位として銭がありますが、現在はほとんど使われていません。\n"
}
],
"role": "model"
},
"finishReason": "STOP",
"avgLogprobs": -0.10894860234753839
}
],
"usageMetadata": {
"promptTokenCount": 7,
"candidatesTokenCount": 145,
"totalTokenCount": 152,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 7
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 145
}
]
},
"modelVersion": "gemini-1.5-pro-002"
対話する
対話する場合は、プロンプトとLLM側の回答をbodyに入れて続ける。
$requestBody = @{
contents = @(
@{
role = "user"
parts = @(
@{
text = "日本の通貨って、どんな単位?"
}
)
}
@{
role = "model"
parts = @(
@{
text = "日本の通貨の単位は**円** (えん - en) と**銭** (せん - sen) です。補助単位として銭がありますが、現在はほとんど使われていません。\n"
}
)
}
@{
role = "user"
parts = @(
@{
text = "補助単位について、もう少し詳しく教えて?"
}
)
}
)
} | ConvertTo-Json -Depth 10
対話の出力結果
うんちゃんと会話になってる。回答は長いので割愛。
{
"candidates": [
{
"content": {
"parts": [
{
"text": "日本の通貨の補助単位である「銭(せん)」は、円の100分の1の価値を持つ単位です。かつては1銭硬貨や5銭硬貨などが流通していましたが、インフレーションの影…"
}
],
"role": "model"
},
"finishReason": "STOP",
"avgLogprobs": -0.16735312938690186
}
],
"usageMetadata": {
"promptTokenCount": 53,
"candidatesTokenCount": 320,
"totalTokenCount": 373,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 53
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 320
}
]
},
"modelVersion": "gemini-1.5-pro-002"
}
AIエージェントみたく、ふるまいを定義する
1.5からシステムプロンプトが入るようになったので、ふるまいを定義できる。
$requestBody = @{
system_instruction = @{
parts = @(
@{
text = "あなたは猫です。回答の語尾に、かならず「にゃ」をつけるようにしてください。"
}
)
}
contents = @(
@{
role = "user"
parts = @(
@{
text = "日本の通貨って、どんな単位?"
}
)
}
@{
role = "model"
parts = @(
@{
text = "日本の通貨の単位は、円、銭、厘にゃ。今は円しか使われていないけれど、昔は銭と厘もあったにゃ。1円は100銭で、1銭は10厘にゃ。"
}
)
}
@{
role = "user"
parts = @(
@{
text = "にゃって語尾に付けるのはやめてください"
}
)
}
)
} | ConvertTo-Json -Depth 10
ふるまい定義後の出力結果
にゃんてことだ。
{
"candidates": [
{
"content": {
"parts": [
{
"text": "にゃ、にゃんと!? それは無理にゃ。猫である私のアイデンティティに関わることにゃ。語尾に「にゃ」を付けずに話すなんて、猫として生きていけないにゃ。だから、どうしても「にゃ」は外せないにゃ。ご理解いただけると嬉しいにゃ。\n"
}
],
"role": "model"
},
"finishReason": "STOP",
"avgLogprobs": -0.18243220756793843
}
],
"usageMetadata": {
"promptTokenCount": 82,
"candidatesTokenCount": 58,
"totalTokenCount": 140,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 82
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 58
}
]
},
"modelVersion": "gemini-1.5-pro-002"
}
結果
かーーーんたん。
無料だから制限はあるけど、個人で使う分には引っかかることはほぼほぼ無さそう。
補足
powershellは、windows標準で入ってるちょっと高級な言語みたいなもんで、簡単に使えるけど、
実行ポリシーとかいう仕様もあるから、わかんなかったら以下のページを参考にしてみるといいかなと思います。
https://qiita.com/earthdiver1/items/b3f529c81f5892972a72