1
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?

More than 1 year has passed since last update.

Gemini Pro APIをBunで使ってみた

Posted at

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

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

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がもたらすビジネスへの影響

2023年12月14日現在ですが、「ChatGPT」のキーワードが含まれていると、エラーが返ってきました。

画像解析

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

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

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も使いやすいと感じます。

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

1
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
1
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?