tl;dr
OpenAI ライブラリと REST API から Gemini のリクエストを投げられるように
いまは Chat Completions API / Embeddings API のみ対応
Python / JS / cURL のそれぞれで試したよ
OpenAI ライブラリから Gemini が呼び出せるようになりました。そろそろ Gemini 使い始めようかなと思っていたところだったのですごくうれしい!
説明することは多くはありませんので、早速コードを実行していきましょう。
ディレクトリとファイルを作成します。
mkdir gemini-with-openai
cd gemini-with-openai
touch run.py
touch run.js
環境変数を指定します。
export GEMINI_API_KEY=<your_gemini_api_key>
まずは Python から実行していきましょう。
uv で環境構築、openai ライブラリをインストールします。
uv init --python 3.11
uv add openai
run.py に下記を記載します。サンプルコードをベースに、環境変数のハードコーディング部分の修正や出力の見やすさを調整、日本語に翻訳などをしています。
from openai import OpenAI
import os
import json
client = OpenAI(
api_key=os.getenv("GEMINI_API_KEY"),
base_url="https://generativelanguage.googleapis.com/v1beta/",
)
response = client.chat.completions.create(
model="gemini-1.5-flash",
n=1,
messages=[
{"role": "system", "content": "あなたは親切なアシスタントです。"},
{"role": "user", "content": "AIの仕組みについて説明してください"},
],
)
print(json.dumps(response.choices[0].message.__dict__, indent=2, ensure_ascii=False))
実行しましょう。
uv run run.py
では次に JavaScript から実行して見ましょう。
npm init -y
npm install openai dotenv
npm pkg set type=module
run.js に下記を記述します。変更点は Python のコードとほぼ同じのため割愛。
import OpenAI from "openai";
import 'dotenv/config';
const openai = new OpenAI({
apiKey: process.env.GEMINI_API_KEY,
baseURL: "https://generativelanguage.googleapis.com/v1beta/"
});
const response = await openai.chat.completions.create({
model: "gemini-1.5-flash",
messages: [
{ role: "system", content: "あなたは親切なアシスタントです。" },
{
role: "user",
content: "AIの仕組みについて説明してください",
},
],
});
console.log(response.choices[0].message);
実行しましょう。
node run.js
最後に単に cURL でリクエストを投げてみましょう。API Key の部分と jq コマンドにパイプで繋いでいます。
curl "https://generativelanguage.googleapis.com/v1beta/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GEMINI_API_KEY" \
-d '{
"model": "gemini-1.5-flash",
"messages": [
{"role": "user", "content": "AIの仕組みについて説明してください"}
]
}' | jq .
OpenAI API から Gemini に移行する時にサードパーティの LiteLLM を入れたりせずに済むのでとても便利ですね。