AIエージェントのプロンプト最適化手法

プロンプト最適化の基本原則

原則 説明 悪い例 良い例
明確性 タスク、境界、形式を明確に指定 「経費処理をお願いします」 「ユーザーメッセージから経費番号、金額、理由を抽出し、JSON形式で返却してください」
ロール設定 特定の役割をモデルに付与 ロールなし 「あなたは経費処理を専門とする財務アシスタントです」
単一タスク集中 一度に一つのタスクのみ実行 経費と勤怠を同時に処理 経費関連タスクに専念
制約条件 出力長さ、スタイルなどを制限 制限なし 「回答は100文字以内で、友好的な口調で」

コア最適化テクニック

1. 少数ショット学習(Few-Shot Prompting)

入力-出力の例を示すことで、モデルに期待する形式と内容を理解させる。

@SystemMessage("""
経費分類アシスタントとして、ユーザーの説明に基づいて以下のカテゴリから一つを選択してください:
- 交通費
- 飲食費
- 事務用品
- その他

例1:
入力:空港までタクシーで顧客と面談
カテゴリ:交通費

例2:
入力:顧客との昼食代300元
カテゴリ:飲食費

以下のメッセージを分類:
""")
String categorizeExpense(@UserMessage String description);

2. 連鎖的思考(Chain-of-Thought)

段階的な推論を誘導し、複雑な計算や論理タスクの精度を向上させる。

@SystemMessage("""
経費計算アシスタントとして以下の手順で処理:
1. 全ての経費項目と金額をリスト化
2. 会社ポリシーに基づき各項目の妥当性を確認
3. 適格部分の合計金額を計算
4. 最終的な払戻金額と内訳を出力

段階的に推論し最終回答を提供。
""")
String computeReimbursable(@UserMessage String expenses);

3. 出力形式の制約

構造化された形式で出力させ、プログラムによる解析を容易にする。

@SystemMessage("""
ユーザーメッセージから経費情報を抽出し、以下のフィールドを含むJSON形式で返却:
- expenseId: 経費ID(存在しない場合はnull)
- cost: 金額(数値、ない場合は0)
- category: 経費種別
- details: 詳細説明

JSONのみを返却し、他のテキストは含めない。
""")
String extractExpenseData(@UserMessage String message);

LangChain4jでの実装例

public interface ExpenseAssistant {

    @SystemMessage("""
    ABC社の経費処理専門アシスタントとして:
    - 経費申請の支援
    - 申請状態の照会
    - 経費ポリシーの説明
    
    行動規範:
    - 常に友好的で専門的な口調を維持
    - 必要な情報が不足している場合は明確に指摘
    
    回答形式:
    - 簡潔な段落を使用
    - 重要情報は強調表示
    """)
    String handleQuery(@MemoryId String userId, @UserMessage String query);
}

高度な設定パラメータ

ChatLanguageModel model = OpenAiChatModel.builder()
    .apiKey(apiKey)
    .temperature(0.2)  // 経費処理では低めの温度設定
    .maxTokens(500)    // 出力長の制限
    .build();

タグ: AIプロンプト プロンプトエンジニアリング LangChain4j 経費処理 少数ショット学習

7月5日 17:38 投稿