0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowershellだけでGemini APIで遊ぶ

Posted at

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?