著作一覧 |
us-esat-1でBedrock AgentでRAGを使っていたが次の問題がある。
・KBにS3を使うとus-east-1にバケットを作る必要がある
・Claude3.5がBedrock Agentに対応していない
というか、東京リージョンでClaude3.5が使えるようになったのだから、全部東京リージョンに収めたくなる(AWSコンソールがリージョン切り替えになっているので、他のサービス見ると空っぽでなんだこれ?と思うとBedrockのためにus-east-1にしているからだったりする。
で、BedrockAgentのトレースを見ていてふと気づいたが、AgentのAPI呼び出しはtoolで代替できるとして、よくよく見たらRAGの部分もKBSearchみたいなツールの呼び出しで実装しているじゃん。ってことは、BedrockRuntimeのconverse系API使えば可能なのではないか?
とわかってしまえば、BedrockAgentを使うメリットは1ミリも無い。
・Claudeで最重要なのはシステムプロンプトなので、converse使えば都度変えたければ変えられる
(これが一番のメリットかも)
Ruby用のaws-sdkのbedrockruntimでconverseを呼び出すには比較的最新のバージョンが必要で、1.17であれば呼び出せる。
あとはBedrockAgentRuntimeでできてBedrockRuntimeのconverseでできないのは
・セッションID => これはmessagesをシリアライズすればOK(RubyだとSDKの呼び出しにはSymbolが必要だが一度JSONにするとStringになるので、ここの変換が必要)
・RAGにするにはシステムプロンプトで、検索結果のsourceプロパティのURLを<ref></ref>XMLタグに埋め込み(要素名はなんでも良いので短めにするのは、セッションというか会話履歴を少しでも小さくしたいからなのだった)、参照して作成したテキストは<cite></cite>で囲んでくださいみたいな指示が必要。というか、それでBedrockRuntimeの最終テキストに稀にsourceというタグが入っていることがあるのかと判明。
というわけで、東京リージョンでClaude3.5を使ってRAGもAPI呼び出しもconverse(実際に使っているのはconverse_streamだが)でできるようになった。(RAG用の検索機能ではBedrockAgentRuntime#retrieveを使うので、BedrockRuntimeAgentが不要なわけではない)
ジェズイットを見習え |