先日、AWSのAmazon Bedrockにロールを演じさせようとしたのですが、プロンプトエンジニアリングで詰まったので共有する。
Amazon Bedrockについて
Amazon BedrockはAWSのサービスで、GUIでボタンをポチポチするだけで、RAGを使った対話エージェントを爆速で構築できるサービスである。API Gatewayなども不要で、作成したAgentとエイリアスのIDだけで、クライアント側から呼び出せるため、超簡単。
しかし、こういったお手軽サービスあるあるなのが、内部ロジックが分からないため、ちょっと深い調整をしようとすると沼る。
エージェント向けの指示という罠
Amazon Bedrockでエージェントを作成すると、「エージェント向けの指示」といういかにもなUIがある。
しかし、これにロールを演じるような指示を与えても全然反映されない。
なぜここをいじっても反映されないかは、Amazon Bedrockのエージェントは単に、ユーザの入力から知識拡張を行って、プロンプトに突っ込んでいるだけではなく、ステップバイステップで多段階の推論を行っているためである。
これは右側のUIでテストを行ったときに表示される、スタックとレースを見るとよくわかる。詳細な推論過程は以下で詳しく解説している。
https://dev.classmethod.jp/articles/introduction-2024-agents-for-amazon-bedrock/
エージェント向けの指示がどの推論ステップで作用するかはスタックとレースには載っていないためわからないが、後述の「KBの回答生成」より効果がないことは確かである。
詳細プロンプトをいじる
ではどこをいじるべきかというと、下の方にある詳細プロンプトをいじる必要がある。
編集をクリックすると、4つのプロンプトとパラメータ調整が開く。
「KBの回答生成」が検索を行った後、ユーザの指示と検索結果から生成を行う際の指示になるので、ここを編集すると、ちゃんとエージェントに指示を与えることができた。
あとがき
前処理やオーケストレーションをいじることで、ナレッジベースからの検索も調整できるようなので、より回答の精度を上げるなら調整する必要がある。機会があればそちらも触ってみたい。
余談ではあるが、ナレッジベースをdisableにしたところ、全然反映されていなかった「エージェント向けの指示」が普通のプロンプトと同じように作用した。知識拡張を行う前に与えられるプロンプトなのかもしれない。