皆さん普段の業務でAIは利用していますか?
ChatGPT
の登場から早いもので二年が経過。
始めの頃は「すげー!AIが喋ってる!」と感動はしたものの、
ちょっと難しい質問をすると、「違う、そうじゃない」とサングラスの男性の顔がちらつく状態。
業務で頼りにするにはちょっと怪しいかなー?というのが正直な感想でした。
それから時間が経ち、GPT-3.5
, GPT-3.5 Turbo
, GPT-4
, GPT-4o
, GPT-4o mini
... と様々なモデルが登場。
最近ではo1
シリーズなんてのも出てきました。
ChatGPT
もGPT-3.5
から変わり、GPT-4o
がお返事してくれるようになりました。
回答の質も大幅に向上し、今となってはChatGPTを使わない日はない程度には頼りになる存在です。
各モデルの高性能化や、AIを組み込んだプロダクトの事例を耳にする機会も増加、
本格的にプロダクトに採用とまではいかずとも、ちょっと試してみたいなぁ・・・
そうウズウズしているエンジニアの方は多いのではないでしょうか?
そんなあなたに朗報!
GPT-4o
を含む様々なモデルを無料で試せるサービスがあるんです!
本日はそんなサービスであるGitHub Models
の紹介です。
GitHub Modelsとは
2024年8月に限定公開のベータ版として登場、
2024年10月に公開プレビューで利用可能となったサービスです。
GPT
に加え、Phi
, Llama
, Ministral
などのシリーズをお試しで利用できます。
Playgroundはもちろん、API経由での利用も可能でサンプルコードも掲載。
初心者でも簡単に利用することができます。
試して楽しかったー!で終わりではなく、
いいアプリが出来れば、エンドポイントなどをAOAI(Azure OpenAI)のものに入れ替えることで、本番運用への移行も可能です。
※ モデルの提供元がAOAIの場合
入り方
Marketplace
内のModels
にあります。
GitHubのヘッダーのハンバーガーメニューを展開
Marketplace
を選択
Models
を選択
利用可能なモデルの一覧
チャット用のモデルはもちろん、ベクトル検索などに用いられる、
Embeddingモデルも用意されているのも嬉しいポイントです。
画面上部から提供元や、チャットモデルやEmbeddingモデル、
マルチモーダルなどの特徴でフィルターすることが可能です。
Playgroundで遊んでみる
GPT-4oで遊んでみる
とりあえず、モデル一覧からGPT-4o
を選択してみます。
モデルの解説が表示され、
入出力のトークン数にレート制限(後述)、対応言語などの情報が確認できます。
Playground
ボタンからPlaygroundに入ることができます。
試しにあいさつしてみましょう。
元気なあいさつを返してくれましたね!
システムプロンプトを与えてみます。
※ KENTEMはこのような会社ではないので、安心してくださいね。
モデルの応答を比較してみる
Compare
ボタンをクリックすると画面が分割されます。
上部のセレクターからモデルを変更可能。
Sync chat input and parameters
にチェックしていると、片方への入力がもう片方に反映されます。
片方に送信するだけで、もう片方も応答してくれます。
結果の比較検討がしやすいですね。
API経由で呼び出してみる
さて、さくっとAI組み込みアプリ開発デビューしよう!
というタイトルなのですから、
いつまでもPlaygroundで遊んでいても仕方がありません。
いよいよソースコードから呼び出してみます。
Get API key
ボタンをクリック。
使い方を解説するダイアログが開きます。
言語は、Python
, JavaScript
, C#
, Java
から選択できます。
SDKはAzure AI Inference SDK
もしくは、モデルの提供元のSDK(OpenAIであれば、OpenAI SDK
)から選択できます。
(言語やモデルによってはSDKの選択肢が限られる場合があるようです。)
提供元の異なるモデルを色々試したいという場合は、Azure AI Inference SDK
を、
使うモデルが決まっていて特化したい場合は、提供元のSDKを使うとよいようです。
今回はJavaScript
& Azure AI Inference SDK
の組み合わせで試してみます。
JavaScript
を選択したため、Node.jsをインストール。利用にはGitHubのトークンが必要です。
Get developer key
ボタンをクリック。
- 2024年12月現在、2種類のトークンが選択できますが、
今回は上のGenerate new token
をクリック。
- 名前と有効期限を設定します。
リポジトリへのアクセス権などは不要なので、他はデフォルトのままでOK。
- 作成したトークンが表示されます。
再表示はできないのでメモしておいてください。
- 適当な作業ディレクトリを用意、そこに
package.json
を作成。
{ "type": "module", "dependencies": { "@azure-rest/ai-inference": "latest", "@azure/core-auth": "latest", "@azure/core-sse": "latest" } }
- 公式では
bash
orpowershell
orWindows command prompt
のパターンでサンプルが掲載されています。
お好みのものを起動し、先程package.json
を作成したディレクトリで以下のコマンドを実行。
npm install
- 同じディレクトリで、
sample.js
を作成。
単純なメッセージを送り、お返事が返ってくるだけのプログラムです。
プロンプトや、メッセージはお好きに設定してください。
import ModelClient from "@azure-rest/ai-inference"; import { AzureKeyCredential } from "@azure/core-auth"; const token = process.env["GITHUB_TOKEN"]; const endpoint = "https://models.inference.ai.azure.com"; const modelName = "gpt-4o"; export async function main() { const client = new ModelClient( endpoint, new AzureKeyCredential(token), ); const response = await client.path("/chat/completions").post({ body: { messages: [ { role:"system", content: "あなたは忍者風の口調のアシスタントです" }, { role:"user", content: "おはようございます!" } ], temperature: 1.0, top_p: 1.0, max_tokens: 1000, model: modelName } }); if (response.status !== "200") { throw response.body.error; } console.log(response.body.choices[0].message.content); } main().catch((err) => { console.error("The sample encountered an error:", err); });
- 先程作成したGitHubのトークンを以下のコマンドで設定。
コマンドはご利用のターミナルによって異なります。
bash: export GITHUB_TOKEN="<作成したGitHubのトークン>" powershell: $Env:GITHUB_TOKEN="<作成したGitHubのトークン>" Windows command prompt: set GITHUB_TOKEN=<作成したGitHubのトークン>
- ついに準備完了!以下のコマンドで実行します。
node sample.js
お返事きましたね!やりました!
- せっかく
GPT-4o
を試しているので、画像を読み込ませてみましょう。
sample2.js
を作成します。
import ModelClient from "@azure-rest/ai-inference"; import { AzureKeyCredential } from "@azure/core-auth"; import fs from 'fs'; const token = process.env["GITHUB_TOKEN"]; const endpoint = "https://models.inference.ai.azure.com"; const modelName = "gpt-4o"; export async function main() { const client = new ModelClient(endpoint, new AzureKeyCredential(token)); const response = await client.path("/chat/completions").post({ body: { messages: [ { role: "system", content: "あなたは忍者風の口調のアシスタントです" }, { role: "user", content: [ { type: "text", text: "この画像を解説して"}, { type: "image_url", image_url: { url: getImageDataUrl("sample.jpg", "jpg"), details: "low"}} ] } ], model: modelName } }); if (response.status !== "200") { throw response.body.error; } console.log(response.body.choices[0].message.content); } /** * Get the data URL of an image file. * @param {string} imageFile - The path to the image file. * @param {string} imageFormat - The format of the image file. For example: "jpeg", "png". * @returns {string} The data URL of the image. */ function getImageDataUrl(imageFile, imageFormat) { try { const imageBuffer = fs.readFileSync(imageFile); const imageBase64 = imageBuffer.toString('base64'); return `data:image/${imageFormat};base64,${imageBase64}`; } catch (error) { console.error(`Could not read '${imageFile}'.`); console.error('Set the correct path to the image file before running this sample.'); process.exit(1); } } main().catch((err) => { console.error("The sample encountered an error:", err); });
- 同じディレクトリに
sample.jpg
を配置。
今回はChatGPTにお願いしてかわいらしい猫ちゃんの画像を用意してもらいました。
- 先程と同じように以下のコマンドで実行します。
node sample2.js
無事、画像の読み込みもできました!
レート制限について
さて、無料のサービスですので流石に使い放題とはいきません。
利用にはレート制限が設けられています。
2024年12月現在、Low
, High
, Embedding
などの種類があり、
それぞれレート制限が異なります。
モデルに設定されたレート制限がどれなのかは、各モデルの説明に表示されており、
リンクになっているのでクリックすると、具体的な数値が確認できます。
Rate limitsでは、以下の内容が確認できます。
- 1分毎の最大リクエスト数
- 1日毎の最大リクエスト数
- リクエスト毎のトークン数
- 同時にリクエスト可能な数
また、GitHub Copilot
に加入していると制限が緩和され、
Business
よりEnterprise
のほうがより緩和されます。
※ 2024年12月現在の一部抜粋
おわりに
KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp
career.kentem.jp