サーバーワークスの村上です。
re:Invent 2023、今年も始まりましたね。
さっそくBedrock関連のアップデートを紹介します。
- 結論
- AWS Step Functionsとは?
- AWS Step Functionsに追加されたAmazon BedrockのAPIは2つ
- LLMの出力をLLMにチェックさせてみた
- 他にも様々な使い方
- 所感
結論
- AWS Step FunctionsでAmazon BedrockのAPIをコールできるようになりました
- 対応しているAPIは
InvokeModel
,CreateModelCustomizationJob
の2つです - このブログではClaude 2の出力が合っているか、Jurassic-2 Ultraに渡して判定させています
AWS Step Functionsとは?
AWS Step Functionsとはローコードなビジュアルワークフローサービスです。
複数の AWS サービスにまたがる処理を順番に実行したり、並列に実行したり、あるいは条件分岐させたりできます。
以下のように視覚的なコンソール画面で、直感的にワークフローを構築できます。
AWS Step Functionsに追加されたAmazon BedrockのAPIは2つ
今回のアップデートは、生成系AIのサービスであるAmazon BedrockのAPIを叩けるようになったよ、という内容です。
Amazon Bedrockの概要については過去のブログをご参照ください。
対応したAPIは以下の2つです。
- InvokeModel
- モデルを呼び出すためのAPI
- CreateModelCustomizationJob
- モデルをファインチューニングするためのAPI
LLMの出力をLLMにチェックさせてみた
私がこのアップデートを見て、簡単に試せそうだなーと思いついたのは、LLM(大規模言語モデル)が出力した内容を別のLLMに渡して内容の信頼性をダブルチェックする、というものでした。
このような考え方は従来からあったものの、今回のアップデートでどれくらい簡単につくれるのか試してみました。
全体概要
図にするほどでもありませんが、こんな感じです。
単純な質問をClaude 2にして、質問と回答のセットをJurassic-2 Ultraに渡して、回答が合っているか判断してもらいます。
まずはステートを追加する
Amazon BedrockのAPIが追加されていることがわかります。ドラッグ&ドロップでステートを直列に繋いでみます。
Claude 2をinvokeする設定
入力
まずは最初のステートを設定します。
Claudeのプロンプトには、人間の入力をHuman:
の後に入れ、プロンプトの最後はAssistant:
で終わるというお作法がありますので、組み込み関数を使って対応しました。
具体的はConfigrationタブのBedrock Model Parametersを以下のように設定します。
{ "prompt.$": "States.Format('\n\nHuman: {}\n\nAssistant:', $.input)", "max_tokens_to_sample": 200 }
出力
次にOutputタブで出力を整形します。
整形する理由は2点です。
- ユーザーの質問も次のステート(Jurassic-2 Ultra)に渡したい
- Claudeの出力のうち必要な情報だけを次のステートに渡したい
1点目についてはResultPathのCombine original input with result
を使いました。これによりステートに対する入力を出力に含めることができます。
2点目についてはClaudeの出力に含まれるContentType
などの不要な内容を除去する目的で、ResultSelectorを使いました。
これらの設定により、以下のように必要な情報だけを出力し、次のステートに渡す準備が整いました。
Jurassic-2 Ultraでチェックする設定
入力
同じ要領でBedrock Model Parametersを設定します。
プロンプトには「質問と回答のセットが合っているか教えてください」という内容で、前のステートから出力された質問と回答のセットを渡します。
{ "prompt.$": "States.Format('Let me know if my answers to the following questions are correct.\n\nQuestion:{}\n\nAnswer:{}', $.input, $.result.completion)" }
出力
必要な出力だけに絞るためOutputPathを設定します。
Jurassic-2 Ultraの出力は$.Body.completions.[0].data.text
に格納されるため、このように設定します。
動作確認
以下のような情報をステートマシンに入力します。
{ "input": "日本の首都はどこですか" }
するとClaudeが回答を生成します。
次に2番目のステートに最初のステートの出力が渡されます。
最後に、Jurassic-2 Ultraが"\nYes, your answer is correct. 東京 (Tokyo) is the capital city of Japan"
と回答しました!
他にも様々な使い方
今回のアップデートに関する公式ブログはこちらです。並列の処理など、ユースケースについても触れられています。
所感
以上、AWS Step Functionsを使ってAmazon Bedrockを直列につなげてみました。
他のAWSサービスと組み合わせるなど、いろいろと夢広がるアップデートですね!