🐱

Gemini Pro APIをBunで使ってみた

2023/12/14に公開

今日のテクノロジーの世界では、開発者が求めるのは速度と効率性です。このニーズに応えるために開発されたのが「Bun」、新時代の高速JavaScriptランタイムです。
最近注目を集めるこのプロジェクト、gemini-demoの作成に焦点を当てて、Bunの魅力と可能性を探ります。

先程公開されたGemini ProのAPIを使ってみます。詳細はサンプルプロジェクトは下記を参照してください。

https://github.com/gaomar/gemini-demo

Bunとは?

Bunは、高速なオールインワンのJavaScriptランタイムで、Node.jsに代わる有望な代替品として注目されています。このランタイムは、パフォーマンスの向上に特化しており、多くのJavaScriptプロジェクトでその速度を実感できます。

各OSの環境に応じてbunをインストールしてください。

gemini-demoプロジェクトの開始

gemini-demoは、bunコマンドを使用して簡単に始めることができます。この初期設定は、Bunの簡潔さと効率性を示しています。プロジェクトのセットアップは数秒で完了し、開発者はすぐにコーディングに取り掛かることができます。

API KEYの設定

プロジェクトを使用する場合、Google AI StudioからAPI KEYを取得する必要があります。
取得後は.env.localファイルを新規作成し、プロジェクト内で簡単に使用できます。

.env.local
API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

インストールと実行

Bunを使用すると、依存関係のインストールが非常に迅速になります。bun installコマンドは、従来のnpmやyarnに比べて圧倒的に速いです。

$ bun install

チャット応答

テキスト応答の確認ができます。

chat.ts
import { GoogleGenerativeAI } from '@google/generative-ai'

const genAI = new GoogleGenerativeAI(process.env.API_KEY as string)

async function run() {
  const model = genAI.getGenerativeModel({ model: 'gemini-pro' })
  const prompt = `
  # 目的
  あなたは優秀なタイトルデザイナーです。
  ブログ記事のための魅力的でSEO最適化されたタイトルを3つ提案してください。
  
  # ブログタイトル
  生成AIについて
  `

  const result = await model.generateContent(prompt)
  const response = await result.response
  const text = response.text()
  console.log(text)
}

run()

実行コマンド

$ bun run chat.ts

実行結果

1. 生成AI: ゲームチェンジャーとしての可能性を解き明かす
2. 人工知能の未来: 生成AIがもたらすもの
3. 自動化の未来: 生成AIがもたらすビジネスへの影響

画像解析

画像解析の機能を簡単にテストすることができます。

cat.pngの画像は下記を使用しました。

cat

vision.ts
import { GoogleGenerativeAI, Part } from '@google/generative-ai'
import * as fs from 'fs'

const genAI = new GoogleGenerativeAI(process.env.API_KEY as string)

// URLからbase64エンコードされた文字列を取得します。
async function urlToGenerativePart(url: string, mimeType: string): Promise<Part> {
  const response = await fetch(url)
  const arrayBuffer = await response.arrayBuffer()
  return {
    inlineData: {
      data: Buffer.from(arrayBuffer).toString('base64'),
      mimeType,
    },
  }
}

// ローカルファイル情報を GoogleGenerativeAI.Part オブジェクトに変換します。
function fileToGenerativePart(path: string, mimeType: string): Part {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString('base64'),
      mimeType,
    },
  }
}

async function run() {
  // テキストと画像の入力(マルチモーダル)には、gemini-pro-vision モデルを使用します
  const model = genAI.getGenerativeModel({ model: 'gemini-pro-vision' })

  const prompt = '何が写っている?'

  const imageParts: Part[] = [
    fileToGenerativePart('cat.png', 'image/png'),
    await urlToGenerativePart(
      'https://1.bp.blogspot.com/-tVeC6En4e_E/X96mhDTzJNI/AAAAAAABdBo/jlD_jvZvMuk3qUcNjA_XORrA4w3lhPkdQCNcBGAsYHQ/s1048/onepiece01_luffy.png',
      'image/png'
    ),
  ]

  const result = await model.generateContent([prompt, ...imageParts])
  const response = await result.response
  const text = response.text()
  console.log(text)
}

run()

実行コマンド

$ bun run vision.ts

実行結果

これは猫とルフィのイラストです。

まとめ

gemini-demoプロジェクトは、Bunの強力な機能を活用しています。
このプロジェクトを通じて、開発の速度と効率が大幅に向上し、JavaScriptの未来がさらに明るくなることは間違いありません。Bunは、現代のJavaScript開発において、重要な役割を果たすことが期待されています。

Gemini ProのAPIを使ったサンプルアプリはかなり簡単に作成できました。
料金も安いので、セキュリティ問題がクリアされれば、Geminiも使いやすいと感じます。

システム化のご検討やご相談は弊社までお問い合わせください。

https://www.i-enter.co.jp

Discussion