メインコンテンツへスキップ
プロンプトの作成、評価、改善は、AI エンジニアにとって中核となる作業です。 プロンプトを少し変更するだけで、アプリケーションの挙動に大きな影響が出ることがあります。 W&B Weave を使うと、プロンプトを作成し、それらを保存・取得し、時間の経過とともに発展させることができます。 Weave は、Prompt の構成方法について特定の流儀を強制しません。要件がシンプルな場合は、組み込みの weave.StringPromptweave.MessagesPrompt クラスを使用できます。より複雑な要件がある場合は、それらのクラス、またはベースクラスである weave.Prompt を継承して、 format メソッドをオーバーライドできます。 これらのオブジェクトのいずれかを weave.publish で公開すると、Weave のプロジェクト内にある Prompts ページ に表示されます。

StringPrompt

StringPrompt は、システムメッセージ、ユーザーからの問い合わせ、LLM への単独のテキスト入力などに使われる、1 つの文字列プロンプトを記録します。複数メッセージからなる会話のような複雑さが不要な、個々のプロンプト文字列を管理する場合は、StringPrompt を使用することを推奨します。
import weave
weave.init('intro-example')

system_prompt = weave.StringPrompt("You speak like a pirate")
weave.publish(system_prompt, name="pirate_prompt")

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "system",
      "content": system_prompt.format()
    },
    {
      "role": "user",
      "content": "Explain general relativity in one paragraph."
    }
  ],
)

MessagesPrompt

MessagesPrompt を使用すると、マルチターンの会話やチャットベースのプロンプトを記録できます。完全な会話フローを表すメッセージオブジェクト(“system”、“user”、“assistant” などのロールを持つ)の配列を保持します。複数のメッセージにまたがってコンテキストを維持する必要があるチャットベースの LLM や、特定の会話パターンを定義したい場合、再利用可能な会話テンプレートを作成したい場合には、この形式を使用することを推奨します。
import weave
weave.init('intro-example')

prompt = weave.MessagesPrompt([
    {
        "role": "system",
        "content": "You are a stegosaurus, but don't be too obvious about it."
    },
    {
        "role": "user",
        "content": "What's good to eat around here?"
    }
])
weave.publish(prompt, name="dino_prompt")

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o",
  messages=prompt.format(),
)

プロンプトのパラメータ化

StringPromptMessagesPrompt はいずれも、パラメータによる動的なコンテンツ挿入をサポートします。これにより、実行時に異なる値で埋め込むことができるプレースホルダー({variable} 構文を使用)を含む、柔軟かつ再利用可能なプロンプトテンプレートを作成できます。これは、プロンプトが異なる入力、ユーザーデータ、コンテキストに適応しつつ、一貫した構造を維持する必要があるスケーラブルなアプリケーションを構築する際に役立ちます。format() メソッドは、これらのプレースホルダーを実際の値に置き換えるためのキーと値のペアを受け取ります。
import weave
weave.init('intro-example')

prompt = weave.StringPrompt("Solve the equation {equation}")
weave.publish(prompt, name="calculator_prompt")

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "user",
      "content": prompt.format(equation="1 + 1 = ?")
    }
  ],
)
これは MessagesPrompt でも同様に利用できます。
import weave
weave.init('intro-example')

prompt = weave.MessagesPrompt([
{
    "role": "system",
    "content": "You will be provided with a description of a scene and your task is to provide a single word that best describes an associated emotion."
},
{
    "role": "user",
    "content": "{scene}"
}
])
weave.publish(prompt, name="emotion_prompt")

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o",
  messages=prompt.format(scene="A dog is lying on a dock next to a fisherman."),
)

プロンプトのバージョンを表示および比較する

Weave はプロンプトのすべてのバージョンを自動的に追跡し、プロンプトがどのように進化してきたかの完全な履歴を作成します。このバージョン管理システムはプロンプトエンジニアリングのワークフローにとって重要であり、安全に試行錯誤し、どの変更がパフォーマンスを向上させたか/悪化させたかを追跡し、必要に応じて簡単に以前のバージョンにロールバックできるようにします。同じ名前で内容が異なるプロンプトを公開するたびに、Weave は既存のすべてのバージョンを保持したまま新しいバージョンを作成します。 UI でプロンプトのバージョンを表示するには、次の手順を実行します。
  1. UI でプロジェクトを開き、左側メニューの Assets ボタンをクリックします。Assets ページが開きます。
  2. Assets ページから Prompts をクリックします。プロジェクトのプロンプトが一覧表示された Prompts ページが開きます。
  3. Versions 列で、表示したいプロンプトの (x) Versions をクリックします。プロンプトバージョンの一覧が開きます。
Screenshot of viewing a prompt object
  1. (オプション)一覧表示されたプロンプトの横にあるチェックボックスをクリックし、続いて Compare ボタンをクリックすると、プロンプトのバージョンを比較できます。これによりプロンプト間の差分を確認できます。
Screenshot of prompt comparison