Open6

Firebase Genkit の調査

Mamoru AmanoMamoru Amano

JavaScript/TypeScript 開発者 ( Go も近日公開予定) 向けに構築された新しいオープン ソース フレームワークで、Node.js バックエンドを作成するためのもので、大規模な言語モデルと関連サービスを使用して AI を活用した機能を新規または既存のアプリに統合するのに役立ちます。

Intuitive for developers

  • 直感的なインターフェイス設計。
  • 大規模言語モデル、ベクターストア、埋め込みサービス、評価器を統合可能。Googleが提供するものはもちろん、OpenAIなどのサードパーティーのモデルも統合可能。

AI focused local development

  • VS Code か Project IDX で利用可能な開発環境を提供。
    • Easily get started by initializing your project and kicking off a debug session
    • Experiment with AI components like model prompts, indexers, retrievers, and tools. This enables you to locally execute AI features end-to-end and quickly test and iterate on outcomes.
    • View complete traces and metadata for every model and component interaction for full observability and efficient debugging.
  • 開発環境で構築したプロジェクトを Firebase や CloudRun にデプロイできるプラグインを提供。

Open and extensible

  • オープンソース
  • Apache 2.0 ライセンスで提供

What you can do with Genkit

  • AIエージェント
    • フライトやホテル、レストラン予約などの複雑なタスクを行うエージェントを作成可能。
  • カスタマーサポート
    • 自社のナレッジをベースとしたカスタマーサポート
  • コンテンツ生成
  • コーディングアシスタント
  • 翻訳
  • AI評価
Mamoru AmanoMamoru Amano

確かに直感的に使えそうな雰囲気。

configureGenkit({
  plugins: [
    googleAI(),
  ],
  logLevel: "debug",
  enableTracingAndMetrics: true,
});

export const menuSuggestionFlow = defineFlow(
  {
    name: "menuSuggestionFlow",
    inputSchema: z.string(),
    outputSchema: z.string(),
  },
  async (subject) => {
    const prompt =
      `Suggest an item for the menu of a ${subject} themed restaurant`;

    const llmResponse = await generate({
      model: geminiPro,
      prompt: prompt,
      config: {
        temperature: 1,
      },
    });

    return llmResponse.text();
  }
);
Mamoru AmanoMamoru Amano

ドキュメント見ながら使ってみる

環境

node.js 20以上が必要

手順

npm i -g genkit
mkdir firebase-genkit && cd firebase-genkit
npm init -y
genkit init
  • デプロイ先のプラットフォームを聞かれるので、Node.js を選択
  • その後に利用する model provider を聞かれるので Google AI を選択(OpenAIとかを使いたい場合には、ここで Noneを選択するのかも?)
  • Would you like to update your package.json with suggested settings? には Set if unset
  • Would you like to generate a sample flow? には Yes
  • この後 Gemini の APIキーを発行してexport GOOGLE_GENAI_API_KEY=<your API key>する。
genkit start
  • すると、localhost:4000 に Genkit(開発環境が開く)

  • 自動で作成された menuSuggestionFlow というフローをGenkit上で試すことができる。

  • Input と Output に使われたパラメータを見ることができる。

  • Embeddingも試すことができる。今はGoogle提供のものしか試せないけど、プラグインを導入すれば OpenAI のものも試せるようになる気がする。

各種モデルやAPIを試すためのプレイグラウンドであり、なおかつそれらを組み合わせた処理(Flow)を試すことができる便利な環境。

Mamoru AmanoMamoru Amano

OpenAIのモデルやAPIを利用できるか?

https://github.com/TheFireCo/genkit-plugins
これを使えばできそう。

ためす

https://github.com/TheFireCo/genkit-plugins/blob/main/examples/README.md

npm install genkitx-openai-plugin
export OPENAI_API_KEY=<api_key>

その後、index.tsを編集して、

import { generate } from '@genkit-ai/ai';
import { configureGenkit } from '@genkit-ai/core';
import { defineFlow, startFlowsServer } from '@genkit-ai/flow';
import { geminiPro } from '@genkit-ai/googleai';
import * as z from 'zod';
import { googleAI } from '@genkit-ai/googleai';
+import { openAI } from 'genkitx-openai-plugin';

configureGenkit({
  plugins: [
+    openAI(),
    googleAI(),
  ],
  logLevel: 'debug',
  enableTracingAndMetrics: true,
});

保存して、genkit start で Genkit を再起動すると、OpenAIのモデルが追加される。4oがない気がするけどその内追加される気がする。

Mamoru AmanoMamoru Amano

ベクトル化したデータをFirestoreに保存する

gcloud alpha firestore indexes composite create --project={projectId} --collection-group={collection_name} --query-scope=COLLECTION --field-config=vector-config='{"dimension":"1536","flat": "{}"}',field-path=embedding