Prompt blocks
Prompt block は、Editor で管理する再利用可能な命令テンプレートです。Agent の命令には、インラインテキスト、埋め込み Prompt block、独立してバージョン管理される Prompt block への参照を組み合わせられます。
Studio でのワークフローと一般的な用途については、Prompt blocks を参照してください。
Block の型Block の型への直接リンク
| 型 | 説明 |
|---|---|
text | Agent のバージョン内にのみ保存される自由形式のテキスト |
prompt_block | Agent のバージョンに埋め込まれる Prompt block |
prompt_block_ref | 独立して保存され、バージョン管理される Prompt block への参照 |
参照される Block はランタイムに解決されます。参照先が存在しない場合や未公開の場合、その参照は最終的な命令から除外されます。解決された空でない Block は、2つの改行で連結されます。
次の例では、保存済みの Block とインラインテキストを Agent に追加します。
import { mastra } from '../mastra'
const editor = mastra.getEditor()!
await editor.agent.update({
id: 'support-agent',
instructions: [
{ type: 'prompt_block_ref', id: 'brand-voice' },
{ type: 'text', content: 'Answer only questions about Acme products.' },
],
})
テンプレート値テンプレート値への直接リンク
テンプレートは、ランタイムに request context から値を解決します。
| 構文 | Request context | 出力 |
|---|---|---|
{{userName}} | { userName: 'Maya' } | Maya |
{{user.name}} | { user: { name: 'Maya' } } | Maya |
{{task || 'request'}} | {} | request |
{{missingValue}} | {} | {{missingValue}} |
変数名は、英字またはアンダースコアで始める必要があります。フォールバックは、単一引用符または二重引用符で囲んだ文字列である必要があります。フォールバックがなく解決できないプレースホルダーは、そのまま残ります。オブジェクトと配列は JSON としてシリアライズされます。その他の値は文字列に変換されます。
値は request context を介して渡します。Editor は独立した Agent の variables フィールドを読み取りません。
表示条件表示条件への直接リンク
Prompt block には、最終的な命令に含めるかどうかを制御する表示条件を設定できます。各条件は、次の3つの要素で構成されます。
- キー:
user.roleやaccount.planなど、確認する request context のフィールド。 - 演算子:
equals、contains、existsなど、実行する比較。 - 値: 比較対象の値。
exists演算子とnot_exists演算子では不要です。
たとえば、条件 user.role equals admin では、request context に { user: { role: 'admin' } } が含まれる場合にのみ Block が組み込まれます。
| 演算子 | 例 | Block が組み込まれる条件 |
|---|---|---|
equals / not_equals | user.role equals admin | フィールドが値と厳密に等しい、または等しくない |
contains / not_contains | user.tags contains beta | 文字列に値が含まれる、または配列に項目が含まれる |
greater_than / less_than | order.total greater than 100 | 数値フィールドが値より大きい、または小さい |
greater_than_or_equal / less_than_or_equal | account.seats greater than or equal to 10 | 数値フィールドが値以上、または値以下である |
in / not_in | user.region in ['US', 'CA'] | フィールドが指定された配列に含まれる、または含まれない |
exists / not_exists | account.plan exists | フィールドに null 以外の値がある、またはない |
グループは、条件を AND または OR で組み合わせます。たとえば、次のグループでは、有料プランの管理者に対して Block が組み込まれます。
const rules = {
operator: 'AND',
conditions: [
{
field: 'user.role',
operator: 'equals',
value: 'admin',
},
{
field: 'account.plan',
operator: 'in',
value: ['pro', 'enterprise'],
},
],
}
ドットパスを使用できます。空のグループは true と評価され、不明な演算子は false と評価されます。ストレージの型では、グループを最大3階層までネストできます。
条件のない Block は常に組み込まれます。
プログラムから利用する APIプログラムから利用する APIへの直接リンク
Prompt block には mastra.getEditor().prompt を介してアクセスします。完全なメソッドシグネチャについては、prompt namespace を参照してください。
Prompt block を作成します。
import { mastra } from '../mastra'
const editor = mastra.getEditor()!
await editor.prompt.create({
id: 'brand-voice',
name: 'Brand voice',
description: 'Acme tone and style guidelines',
content: 'Write in a friendly, concise tone. Address the user as {{userName || "there"}}.',
})
既存の Block を更新します。
await editor.prompt.update({
id: 'brand-voice',
content: 'Write in a friendly, concise tone. Greet the user by name when available.',
})
コンテンツが変更されると、update() は新しいドラフトを作成します。保存された Block をページ単位で取得するには list()、1つの Block を取得するには getById()、ドラフトへの参照を使ってテンプレートと条件を解決するには preview(blocks, context) を使用します。
REST APIREST APIへの直接リンク
デフォルトの Mastra サーバープレフィックスは /api です。カスタムサーバープレフィックスを使用すると、次のパスが変わります。
| メソッド | パス | 説明 |
|---|---|---|
GET | /api/stored/prompt-blocks | 保存された Prompt block の一覧を取得 |
POST | /api/stored/prompt-blocks | 保存する Prompt block を作成 |
GET | /api/stored/prompt-blocks/:storedPromptBlockId | 保存された Prompt block を取得 |
PATCH | /api/stored/prompt-blocks/:storedPromptBlockId | 保存された Prompt block を更新 |
DELETE | /api/stored/prompt-blocks/:storedPromptBlockId | 保存された Prompt block を削除 |
バージョンの解決バージョンの解決への直接リンク
ランタイムの参照は、現在公開されている Block に解決されます。Editor のプレビューは最新のドラフトに解決されます。ドラフト、公開、復元に共通するライフサイクルについては、Editor のバージョン管理 を参照してください。