AIモデルとの効果的なコミュニケーションは、提供されるプロンプトの品質と構造に左右されます。AIGNEフレームワークは、PromptBuilderクラスと統合されたNunjucksテンプレートエンジンを通じて、動的で再利用可能、かつ構造化されたプロンプトを作成するための堅牢なシステムを提供します。このガイドでは、これらのコンポーネントについて体系的に説明します。
プロンプトがAgent内でどのように利用されるかの詳細については、AI Agentのドキュメントを参照してください。
Nunjucksによるプロンプトのテンプレート化
フレームワークはNunjucksテンプレートエンジンを利用して、動的なプロンプトの作成を容易にします。これにより、変数や外部ファイルのインクルード、その他のプログラムロジックをプロンプトファイル内に直接組み込むことができます。
すべてのプロンプトテキストはPromptTemplateクラスによって処理され、Nunjucksを使用して最終的な文字列をレンダリングします。
変数置換
{{ variable_name }} 構文を使用して、プロンプトにプレースホルダーを定義できます。これらのプレースホルダーは、実行時に実際の値に置き換えられます。
analyst-prompt.md
以下のデータを分析してください:
{{ data }}このプロンプトでAgentを呼び出す際には、入力メッセージでdata変数を提供します。
index.ts
import { AIGNE, AIAgent } from "@aigne/core";
import { OpenAI }s from "@aigne/openai";
const model = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const aigne = new AIGNE({
model,
agents: {
analyst: new AIAgent({
instructions: { path: "./analyst-prompt.md" },
inputKey: "data",
}),
},
});
const result = await aigne.invoke("analyst", {
data: "User feedback scores: 8, 9, 7, 10, 6.",
});
console.log(result);ファイルのインクルード
Nunjucksでは、{% include "path/to/file.md" %} タグを使用して、複数のファイルからプロンプトを構成できます。これは、異なるプロンプト間で共通の指示やコンポーネントを再利用するのに非常に効果的です。パスはincludeタグを含むファイルからの相対パスで解決されます。
例えば、共通の指示セットを1つのファイルで定義し、それを別のファイルにインクルードすることができます。
common-instructions.md
常にプロフェッショナルかつ事実に基づいた方法で応答してください。
憶測や意見の提供は避けてください。main-prompt.md
あなたは熟練の金融アナリストです。
{% include "./common-instructions.md" %}
提供された四半期収益報告書を分析してください。このモジュラーなアプローチにより、プロンプトの管理が簡素化され、一貫性が確保されます。
ChatMessageTemplateによるプロンプトの構造化
チャットベースのモデルでは、プロンプトはそれぞれが特定の役割を持つメッセージのシーケンスとして構造化されます。フレームワークは、これらのメッセージをプログラムで表現するためのクラスを提供します。
SystemMessageTemplate: AIモデルのコンテキストや高レベルの指示を設定します。UserMessageTemplate: エンドユーザーからのメッセージを表します。AgentMessageTemplate: AIモデルからの以前の応答を表し、フューショットプロンプティングや会話の継続に役立ちます。ToolMessageTemplate: Agentによって行われたツール呼び出しの結果を表します。
これらのテンプレートをChatMessagesTemplateに組み合わせることで、完全な会話プロンプトを定義できます。
structured-prompt.ts
import {
ChatMessagesTemplate,
SystemMessageTemplate,
UserMessageTemplate,
} from "@aigne/core";
const promptTemplate = new ChatMessagesTemplate([
SystemMessageTemplate.from(
"You are a helpful assistant that translates {{ input_language }} to {{ output_language }}."
),
UserMessageTemplate.from("{{ text }}"),
]);
// このテンプレートは、AIAgentの `instructions` で使用できます。PromptBuilder クラス
PromptBuilderは、言語モデルに送信される最終的で完全なプロンプトを組み立てる役割を担う中心的なコンポーネントです。これはプロセス全体を統括し、さまざまな入力を一貫した構造に統合します。
次の図は、PromptBuilderへの情報の流れを示しています。direction: right style { stroke-width: 2 font-size: 14 } "ユーザー入力 (メッセージ)": { shape: document style.fill: "#D1E7DD" } "プロンプトテンプレート (.md)": { shape: document style.fill: "#D1E7DD" } "Agent設定": { shape: document style.fill: "#D1E7DD" } コンテキスト: { shape: document style.fill: "#D1E7DD" } PromptBuilder: { shape: hexagon style.fill: "#A9CCE3" } "ChatModelInput (LLMへ)": { shape: document style.fill: "#FADBD8" }
"ユーザー入力 (メッセージ)" -> PromptBuilder "プロンプトテンプレート (.md)" -> PromptBuilder "Agent設定" -> PromptBuilder コンテキスト -> PromptBuilder
PromptBuilder -> "ChatModelInput (LLMへ)"
"Agent設定".children: { "スキル/ツール" メモリ "出力スキーマ" }
"ChatModelInput (LLMへ)".children: { "レンダリング済みメッセージ" "ツール定義" "レスポンス形式" }
PromptBuilderはbuildプロセス中に、以下の操作を自動的に実行します。
指示の読み込み
文字列、ファイルパス、またはMCP
GetPromptResultオブジェクトからプロンプトテンプレートを読み込みます。テンプレートのレンダリング
Nunjucksを使用してプロンプトテンプレートをフォーマットし、ユーザーの入力メッセージから変数を注入します。
メモリの注入
Agentがメモリを使用するように設定されている場合、
PromptBuilderは関連するメモリを取得し、それらをシステム、ユーザー、またはAgentメッセージに変換して、会話のコンテキストを提供します。ツール(スキル)の組み込み
利用可能なすべてのスキル(Agent設定と呼び出しコンテキストから)を収集し、モデルの
toolsおよびtool_choiceパラメータにフォーマットします。レスポンス形式の定義
Agentが
outputSchemaを持っている場合、PromptBuilderはモデルのresponseFormatを設定して、構造化されたJSON出力を強制します。
インスタンス化
PromptBuilderを作成する最も一般的な方法は、静的なPromptBuilder.from()メソッドを使用することです。このメソッドはさまざまなソースを受け入れることができます。
- 文字列から:
typescript const builder = PromptBuilder.from("You are a helpful assistant."); - ファイルパスから:
typescript const builder = PromptBuilder.from({ path: "./prompts/my-prompt.md" });
AIAgentがinstructionsとともに定義されると、内部でPromptBuilder.from()を使用してプロンプト構築プロセスを作成および管理します。
まとめ
AIGNEフレームワークは、プロンプトエンジニアリングのための階層的で強力なシステムを提供します。動的コンテンツのためにNunjucksとともにPromptTemplateを、そして最終的な構造を編成するためにPromptBuilderを理解し活用することで、AI Agent用の洗練された、モジュラーで効果的なプロンプトを作成できます。
さらに詳しく知りたい場合は、AIAgentドキュメントを参照して、これらのプロンプトがAgentのライフサイクルにどのように統合されるかを確認してください。