マルチエージェントAI時代のプロンプト実戦テクニック
寄稿のきっかけ
AIエージェント系の業務で、ある程度実戦向けのノウハウがたまってきたので、一度備忘録としてまとめておこうと思い、記事を執筆してみました
では早速ご紹介していきます。
プロンプトを書く前に業務の理解を深める
時として、数十ページにもわたる複雑な業務フロー図が含まれたマニュアル資料を元に、AIエージェントに代替遂行させたいという要望を受けることがあります。
しかし、そのプロンプトを書く前に一旦立ち止まって考えてみてください。
AIエージェントにも出来ないこと・任せられないことがたくさんあります。闇雲にAIエージェントに業務を全て任せるのではなく、業務を理解し、分解してみてどの部分がリスクなく任せられるのかを検討しましょう。
業務が理解できれば、いくつかの作業はまとめられたり、不要であることに気づいたりでき、結果としてAIエージェントに与える指示(プロンプト)の整理整頓につながります。
構造化プロンプトを正しく利用する
プロンプトに構造を与えると、AIエージェントが指示内容を理解しやすくなります。
筆者はマークダウン記法を主に使用しております。
ただし、ただしい記法で書かなければAIエージェントにとって理解しづらい内容になり、意図しない挙動が生まれるケースがあります。
開発する人間とAIエージェントで認識を合わせる
上司が部下に業務を教えるように、AIエージェントに対する指示(=プロンプト)は、誰が見ても平易で誤解が生みにくいものにするべきです。
具体的には、以下の点に留意して作るのが良いかと
- 類似語を極力使わない。文言を統一してAIエージェントが迷わないようにする。
- AIエージェントのタスクの種類・範疇を示す
- タスク実行する(Function Calling)する際に必要な情報(引数)は何かをあらかじめ認識させる
- ドメイン知識を与える
- 禁止事項を記載する
- orchestratorには、各タスク特化型LLMエージェントの役割を大まかに把握させておく
- ハルシネーション発生を防ぐため、範疇外のことは何もしないことを明示して認識させる
- 各AIエージェントの債務が被らないようにする
1つのエージェントに対してのプロンプト量を極力減らす
1つのエージェントに対して、プロンプトが長くなっていくと一部のプロンプトの効力が薄まるリスクが高まります。
以下、プロンプト量を減らす具体的な方法を列挙します。
- 短く平易な文章で書く
- エージェントの責務を減らす
- 固有名詞を極力使わない(一般的な言葉で汎用的な指示を作る)
Few-shotプロンプトで指示精度を上げる
いくつかの事例をプロンプトで示すことで、指示精度が上がることがあります。
ただし、例示が多すぎると上述のプロンプト量が増えることもありますし、例示をそのまま回答として使うケースも出てくるので、必要最低限に留めるのが無難かなと思います。AIエージェントの名前を適当に作らない
マルチエージェントシステムを構築すると、他のエージェントとの連携や区別をするため、AIエージェントに名前を付与する必要があります。
以前の記事で照会したorchestrator-workersワークフローで、Orchestratorが各AIエージェントを採用する際に、この名前をかなり重視する傾向がありました。
適当な名前をつけてしまうと、誤ったエージェントにタスクを割り振ってしまう可能性があります。
『名は体を表す』とはよく言ったものだなと感じた次第でした。
重要な指示は、プロンプトの最初と最後に入れる
悪意のあるユーザーによるプロンプトインジェクションへの対策として、インジェクションを防ぐプロンプトを最初や最後に入れるケースが良く見受けられます。
プロンプトインジェクション対策以外にも、重要と思われる指示はプロンプトの最初や最後に入れておくのが吉です。
Discussion