😺

【Firebase Genkit】Dotprompt を使って便利にモデルの設定とプロンプトを管理しよう

2024/12/10に公開

こんにちは。tmassh です。
Google Developers Group Kwansai Advent Calendar 2024 10日目になります。

Firebase Genkit 楽しすぎてついついフローを作り続けてしまうのですが、だんだんプロンプトの管理やモデルの設定を管理するのが大変になってきたので、今日はこの話題です。

Fireabse Genkit では、Dotprompt を使うことでプロンプトの管理とモデルのパラメータ、入出力のスキーマ管理が楽にできます。

Dotprompt とは ?

百聞は一見にしかず。実際のファイルをみていきましょう。

---
model: vertexai/gemini-1.5-flash
config:
  temperature: 0.4
  topK: 32
  topP: 0.95
tools: []
input: 
  schema:
    scenerioTheme: string
---

{{role "user"}}
{{scenerioTheme}}をテーマにした、爆売れ間違いなしのシナリオ案を依頼するためのプロンプトを考えてください。

--- で囲まれている部分がモデルのパラメータとスキーマの定義。そして残りの箇所がプロンプトという構造になっています。モデルのパラメータとスキーマの定義が YAML のフォーマットになっていてみやすいですね。

プロンプトの部分は Handlebars というテンプレートをサポートしているようで、role の定義や変数の埋め込みもできます。

プロンプトの作成

プロンプトファイルはエディタでゴリゴリ書くこともできますが、Web UI からも作ることができます。

npx genkit start

で Web UI を立ち上げて Model のページに行ってみましょう。


プロンプトを入力して Export .prompt をクリックするとプロンプトを保存することができます。
すごく簡単ですね!

---
model: vertexai/gemini-1.5-flash
config:
  temperature: 0.4
  topK: 32
  topP: 0.95
tools: []

---

{{role "system"}}
あなたはネコのスペシャリストです。相手からのネコの悩みに寄り添いながら的確な回答を返します。

{{role "user"}}
最近毛玉を吐く量がおおいんです。

プロンプトの実行

保存したプロンプトファイルは Web UI の Prompts ページから確認することができます。その場で実行も可能です。それぞれのプロンプトの入出力を確認したくなった時は便利ですね。一方、プロンプトの調整自体は Model ページから行うのが楽そうかなと思いました。

コード上からは、このテンプレートを読み込み、プロンプトを実行することが可能です。

(async () => {
  const catPrompt = ai.prompt("cat");
  const { text } = await catPrompt();
  console.log(text);
})();

なんとこれだけ。モデルの設定、スキーマの定義は外部の prompt ファイルに。
処理はプロンプトを読み込んで実行するだけ。これはめちゃくちゃ管理が楽ですし、コードも綺麗にできそうですね!

おわりに

Dotprompt を使ったプロンプトとモデルの設定情報の管理をやってみました。プロンプトと設定の情報を書き慣れた YAML フォーマットで管理できて、処理部分はプロンプトを読み込んで実行するだけというシンプルさに痺れました。

YAML や設定ファイルに抵抗感のある方もいらっしゃるかもしれませんが、これはコードがシンプルになりますし、プロンプトと処理部分の分離が捗るので一度勇気を出して試す価値ありだと思います。

コードで Type の定義などしてしまってたので、これから自分で作るものは全部 Dotprompt にまとめたくなりました。

それではまた明日。

Discussion