見出し画像

Gemini が OpenAI ライブラリに対応したので試す

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

> uv run run.py
{
"content": "AI(人工知能)の仕組みは、一言で言うと、人間の知能を模倣して、コンピュータに学習、問題解決、意思決定などのタスクを実行させる技術です。\n\n**主な仕組みは以下の通りです。**\n\n**1. 機械学習:** コンピュータが大量のデータからパターンを学習し、予測や分類を行う方法です。\n * **教師あり学習:** 正解ラベル付きのデータを用いて学習します。例:画像認識で「猫」と「犬」の画像を学習し、新たな画像を分類する。\n * **教師なし学習:** ラベルなしのデータからパターンを学習します。例:顧客データを分析し、顧客をグループ分けする。\n * **強化学習:** 環境と相互作用しながら学習します。例:ゲームAIがゲームをプレイしながら最適な行動を学習する。\n\n**2. 深層学習:** 機械学習の一種で、人間の脳神経回路を模倣したニューラルネットワークを用いて学習します。\n * **多層構造:** 複数の層で構成され、各層が異なる特徴を抽出します。\n * **学習能力:** 大量のデータから複雑なパターンを学習できます。\n * **適用範囲:** 画像認識、音声認識、自然言語処理など幅広い分野で活用されています。\n\n**3. 自然言語処理 (NLP):** コンピュータが人間の言語を理解し、処理する技術です。\n * **テキスト分析:** テキストから意味や感情を分析します。\n * **機械翻訳:** 言語間の翻訳を行います。\n * **対話システム:** チャットボットや音声アシスタントなど、人間と自然な対話を実現します。\n\n**4. コンピュータビジョン:** コンピュータが画像や映像を理解する技術です。\n * **画像認識:** 画像から物体やシーンを認識します。\n * **物体検出:** 画像中の特定の物体を見つけ出し、位置を特定します。\n * **画像セグメンテーション:** 画像を複数の領域に分割します。\n\n**AIの活用:**\n\nAIは様々な分野で活用されており、以下のような例があります。\n\n* **医療:** 病気の診断、治療の最適化\n* **金融:** 投資判断、不正検知\n* **製造:** 生産効率の向上、品質管理\n* **交通:** 自動運転、交通渋滞の解消\n* **教育:** 個別学習、学習効率の向上\n* **エンターテイメント:** ゲームAI、コンテンツ推薦\n\nAIは日々進化しており、私たちの生活を大きく変える可能性を秘めています。\n\n**注意点:**\n\n* AIは万能ではありません。適切なデータやアルゴリズムが必要であり、倫理的な問題も考慮する必要があります。\n* AIは人間を置き換えるものではなく、人間と協力してより良い社会を築くためのツールです。\n\n**要約:**\n\nAIは人間の知能を模倣する技術であり、機械学習、深層学習、自然言語処理、コンピュータビジョンなどの技術を用いて学習、問題解決、意思決定を行います。AIは様々な分野で活用されており、私たちの生活を大きく変える可能性を秘めています。\n",
"refusal": null,
"role": "model",
"audio": null,
"function_call": null,
"tool_calls": []
}

では次に 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

> node run.js
{
content: 'AI(人工知能)は、人間のように学習し、問題解決し、意思決定を行うことができるコンピュータシステムです。 \n' +
'\n' +
'AIの仕組みは、大きく分けて3つの段階があります。\n' +
'\n' +
'**1. データ収集と学習:**\n' +
'\n' +
'* **データの収集:** AIは、テキスト、画像、音声、動画など、様々な形式のデータを収集します。これらのデータは、AIが学習するための重要な情報源となります。\n' +
'* **データの処理:** 収集されたデータは、AIモデルが学習できる形式に変換されます。この過程では、データのクリーニング、前処理、特徴抽出などの処理が行われます。\n' +
'* **機械学習:** AIは、収集されたデータからパターンや規則性を学習します。様々な機械学習アルゴリズムが使用され、AIモデルはデータに基づいて予測や分類を行う能力を身につけます。\n' +
'\n' +
'**2. 推論と意思決定:**\n' +
'\n' +
'* **入力データの処理:** AIモデルは、新しい入力データを受け取ると、学習したパターンや規則性に基づいて処理を行います。\n' +
'* **推論:** AIモデルは、入力データに基づいて推論を行い、出力結果を生成します。\n' +
'* **意思決定:** AIモデルは、推論に基づいて意思決定を行います。\n' +
'\n' +
'**3. 評価と改善:**\n' +
'\n' +
'* **性能評価:** AIモデルの性能は、様々な指標を用いて評価されます。精度、再現率、F値などが用いられます。\n' +
'* **モデルの改善:** 評価結果に基づいて、AIモデルは改善されます。データの追加、アルゴリズムの変更、パラメータの調整などによって、性能が向上されます。\n' +
'\n' +
'**AIの種類:**\n' +
'\n' +
'* **機械学習:** データから学習し、予測や分類を行うAI。\n' +
'* **深層学習:** 機械学習の一種で、複雑なデータ構造を理解するために多層のニューラルネットワークを使用します。\n' +
'* **強化学習:** 環境と相互作用しながら学習し、最適な行動を学習するAI。\n' +
'\n' +
'**AIの応用:**\n' +
'\n' +
'* **自然言語処理:** チャットボット、翻訳、文章要約など。\n' +
'* **画像認識:** 顔認識、物体検出、画像分類など。\n' +
'* **音声認識:** 音声アシスタント、音声認識ソフトウェアなど。\n' +
'* **ロボット工学:** 自動運転車、産業用ロボットなど。\n' +
'* **医療:** 疾病診断、薬物開発、治療計画など。\n' +
'\n' +
'AIは、様々な分野で革新をもたらす可能性を秘めています。しかし、倫理的な問題や社会への影響など、注意すべき点もたくさんあります。\n',
role: 'model',
tool_calls: []
}

最後に単に 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 .

> 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 .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3492 0 3306 100 186 824 46 0:00:04 0:00:04 --:--:-- 871
{
"object": "chat.completion",
"created": 1731124169,
"model": "gemini-1.5-flash",
"choices": [
{
"index": 0,
"message": {
"content": "## AIの仕組み:複雑なネットワークと学習の力\n\nAI(人工知能)は、人間のように考える、学習する、そして問題を解決する能力を備えたコンピューターシステムです。一見魔法のように思えるかもしれませんが、その仕組みは複雑なアルゴリズムと大量のデータ処理に基づいています。\n\n### 1. 機械学習:データから学習する\n\nAIの基盤となる技術の一つが**機械学習**です。これは、コンピューターがデータからパターンを認識し、そのパターンに基づいて予測や判断を行うことを可能にする技術です。\n\n* **教師あり学習:** ラベル付けされたデータセットから学習します。例えば、画像に猫と犬のラベルを付けて学習させ、新しい画像を見たときに猫か犬かを判別できるようになります。\n* **教師なし学習:** ラベルのないデータセットからパターンを認識します。例えば、顧客の購買履歴から購買パターンを見つけ出し、新しい商品の提案に役立てることができます。\n* **強化学習:** 報酬と罰則を通じて試行錯誤的に学習します。例えば、ゲームで高得点を取るための戦略を学習することができます。\n\n### 2. 深層学習:人間の脳を模倣する\n\n**深層学習**は、機械学習の一種であり、人間の脳の神経回路を模倣したニューラルネットワークを用います。複数の層で構成されたネットワークは、複雑なパターンを認識し、より高度なタスクを実行できます。\n\n* **畳み込みニューラルネットワーク (CNN):** 画像認識や自然言語処理に用いられます。画像の局所的な特徴を抽出することに優れています。\n* **リカレントニューラルネットワーク (RNN):** 時系列データの処理に用いられます。過去のデータから将来の予測を行うことができます。\n\n### 3. データはAIの燃料\n\nAIは大量のデータによって学習し、その能力を高めます。データの質と量は、AIの精度に大きな影響を与えます。\n\n* **ビッグデータ:** 膨大な量のデータは、AIの学習能力を高め、より正確な予測や判断を可能にします。\n* **データの前処理:** データのノイズ除去や変換など、AIが学習しやすいようにデータの整理が重要です。\n\n### AIの活用例\n\n* **画像認識:** 自動運転、医療診断、顔認証\n* **自然言語処理:** チャットボット、翻訳、音声認識\n* **予測分析:** 顧客行動予測、株価予測\n* **ゲーム:** AI対戦相手、ゲームバランス調整\n\n### まとめ\n\nAIは、機械学習と深層学習という技術を用いて、大量のデータから学習し、人間のような能力を獲得します。その仕組みは複雑ですが、私たちの生活をより便利で豊かなものにする可能性を秘めています。",
"role": "model",
"tool_calls": []
},
"finish_reason": "stop"
}
]
}

OpenAI API から Gemini に移行する時にサードパーティの LiteLLM を入れたりせずに済むのでとても便利ですね。

いいなと思ったら応援しよう!

ぬこぬこ
すべて勉強代に充てさせていただきます!アウトプットします!