2024/6/27 に Google のオープンソース LLM の Gemma2 が発表されました。この記事では Firebase Genkit を用いて Gemma2 にリクエストする方法を紹介します。
Ollama を用いると Gemma2 をローカル LLM として動作させることができます。
まず Ollama を公式ガイドに従ってインストールします。
次に Ollama を使って Gemma2 をインストールします。
ollama run gemma2
現在 Gemma2 はサイズの異なる 3 種類が提供されていますが、私の Mac では Gemma2 の 16GB は動作がすごく重かったので 5.5GB を利用しています。皆さんが試す際は環境にあったバージョンをインストールしてください。
- Gemma2 (1.6GB): ollama run gemma2:2b
- Gemma2 (5.5GB): ollama run gemma2
- Gemma2 (16GB) : ollama run gemma2:27b
インストールが成功すると Gemma2 にコマンドラインからプロンプトを投げることができます。
以下のコマンドを叩いて Genkit プロジェクトを作成します。 model provider
を問われた時に Ollama
を選択しましょう。
% mkdir genkit-gemma2-sample
% cd genkit-gemma2-sample
% genkit init
? Select a runtime to initialize a Genkit project: (Use arrow keys)
❯ Node.js
? Select a runtime to initialize a Genkit project: Node.js
? Select a deployment platform:
Firebase
? Select a deployment platform: Other platforms
? Select a model provider:
Google AI
? Select a model provider: Ollama (e.g. Gemma)
✔ Successfully initialized NPM project
✔ Successfully installed NPM packages
✔ Successfully updated tsconfig.json
✔ Successfully updated package.json
? Would you like to generate a sample flow? (Y/n) Y
? Would you like to generate a sample flow? Yes
✔ Successfully generated sample file (src/index.ts)
If you don't have Ollama already installed and configured, refer to https://developers.google.com/genkit/plugins/ollama
Genkit successfully initialized.
Genkit のインストールが成功すると src/index.ts
に以下のようなサンプルコードが生成されます。
import * as z from 'zod'
import { generate } from '@genkit-ai/ai'
import { configureGenkit } from '@genkit-ai/core'
import { defineFlow, startFlowsServer } from '@genkit-ai/flow'
import { ollama } from 'genkitx-ollama'
configureGenkit({
plugins: [
ollama({
models: [{ name: 'gemma' }],
serverAddress: 'http://127.0.0.1:11434',
}),
],
logLevel: 'debug',
enableTracingAndMetrics: true,
})
export const menuSuggestionFlow = defineFlow(
{
name: 'menuSuggestionFlow',
inputSchema: z.string(),
outputSchema: z.string(),
},
async subject => {
const llmResponse = await generate({
prompt: `Suggest an item for the menu of a ${subject} themed restaurant`,
model: 'ollama/gemma',
config: {
temperature: 1,
},
})
return llmResponse.text()
}
)
startFlowsServer()
gemma
と記載されていた部分を gemma2
に置き換えたら完成です。
configureGenkit({
plugins: [
ollama({
models: [{ name: 'gemma2' }],
serverAddress: 'http://127.0.0.1:11434',
}),
],
})
export const menuSuggestionFlow = defineFlow(
async subject => {
const llmResponse = await generate({
prompt: `Suggest an item for the menu of a ${subject} themed restaurant`,
model: 'ollama/gemma2',
})
return llmResponse.text()
}
)
Genkit を起動させます。以下のコマンドを叩くとブラウザが起ち上がります。
% genkit start -o
Genkit と Gemma2 を使ってローカル LLM を用いた開発基盤を作ることができました。Genkit を使うと 30 行程度で実現できることはすごいことだと思います。みなさんも是非試してみてください。
ソースコードは以下の GitHub からアクセスできます。 https://github.com/tanabee/genkit-gemma2-sample