[アップデート] Knowledge bases for Amazon Bedrock で推論パラメーターを調節できるようになりました
こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
Knowledge bases for Amazon Bedrock で推論パラメーターを調節できるようになりました。
推論パラメーターって何だっけ?の時は、 こちらをご覧いただくと、インプットがスムーズになると思います。
アップデート内容
今まで RetrieveAndGenerate API で利用される、推論パラメーターは以下の固定値で推論が行われていました。(Claude 3 Sonnet 調べ)
- max_tokens:2048
- temperature:0
- top_k:50
- top_p:1
- stopSequences:
Observation
今回のアップデートで、上記の推論パラメーターを調節可能になりました。
具体的には、inferenceConfig
と additionalModelRequestFields
を利用して、推論パラメーターを調整します。
import os
import boto3
region = os.environ.get("AWS_REGION")
kb_id = os.environ.get("KNOWLEDGE_BASE_ID")
client = boto3.client("bedrock-agent-runtime", region_name=region)
generation_configuration = {
"inferenceConfig": {
"textInferenceConfig": {
"maxTokens": 2048, # Default
"temperature": 1, # Default
"topP": 1, # Default
"stopSequences": ["Observation"],
}
},
"additionalModelRequestFields": {"top_k": 50}, # Deafault
}
response = client.retrieve_and_generate(
input={"text": "来年はどんな事業に注力する予定ですか?"},
retrieveAndGenerateConfiguration={
"knowledgeBaseConfiguration": {
"knowledgeBaseId": kb_id,
"modelArn": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
"generationConfiguration": generation_configuration,
},
"type": "KNOWLEDGE_BASE",
},
)
print(response["output"]["text"])
マネジメントコンソールからも textInferenceConfig
で設定可能なパラメーターは調整可能です。
ただし、 additionalModelRequestFields
で設定可能な値(コードの例だと top_k
)は調整不可のため AWS SDK や API 経由での実行が必要です。
Knowledge bases for Amazon Bedrock でサポートされているテキスト生成モデルは 2024/05/18 時点で以下の通りです。
- Amazon Titan Text Premier (バージニア北部リージョンのみ)
- Anthropic Claude v2.0
- Anthropic Claude v2.1
- Anthropic Claude 3 Sonnet v1
- Anthropic Claude 3 Haiku v1
- Anthropic Claude Instant v1
Supported regions and models for Knowledge bases for Amazon Bedrock - Amazon Bedrock
参考までに、各モデルで指定可能な推論パラメーターは以下に記載されています。
やってみる
それでは簡単に試してみます。先ほどのコードを利用して、 AWS SDK 経由から RetrieveAndGenerate API を実行します。
※ すでにナレッジベースは構築済みです。サクッと試したい方は以下をご覧ください。
今回は一番イメージつきやすい、temperature
の値を 0 から 1 に変えていき、回答の変わり方を眺めてみましょう。
ドキュメントは以下の 1 つのサンプルファイルを読み込ませています。
# 株式会社サンプル 2024 年度事業計画
## 1. 事業概要
株式会社サンプルは、宇宙旅行事業と AI 搭載ロボットペット事業を新たに展開します。宇宙旅行事業では、月面でのリゾート開発を進め、AI 搭載ロボットペット事業では、感情認識機能を備えた革新的なペットロボットを開発・販売します。
## 2. 事業目標
- 宇宙旅行事業: 月面リゾート利用者数 1,000 人
- AI 搭載ロボットペット事業: 販売台数 10,000 台
- 売上高: 1,000 億円
- 営業利益率: 50%
## 3. 事業戦略
### 3.1 宇宙旅行事業
- 月面リゾート「ルナ・パラダイス」の建設
- 宇宙飛行士養成プログラムの提供
- 宇宙食の開発と販売
### 3.2 AI 搭載ロボットペット事業
- 感情認識 AI を搭載した「エモ・ペット」の開発
- セレブリティとのコラボレーションモデルの販売
- ロボットペット用アクセサリーの開発と販売
### 3.3 マーケティング戦略
- 宇宙をテーマにしたテレビ CM の放映
- 月面リゾートへの招待券付き SNS キャンペーンの実施
- AI 搭載ロボットペットの体験型ショールームの設置
## 4. 事業予算
| 項目 | 金額(億円) |
| ------------------------- | ------------ |
| 月面リゾート開発 | 5,000 |
| 宇宙飛行士養成プログラム | 500 |
| AI 搭載ロボットペット開発 | 1,000 |
| マーケティング費用 | 1,000 |
| 人件費 | 500 |
| 合計 | 8,000 |
## 5. リスク管理
- 宇宙旅行の安全性確保
- AI 倫理の順守とプライバシー保護
- 技術的障壁の克服
- 法規制の変更への対応
以上が、株式会社サンプルの 2024 年度の型破りな事業計画です。宇宙旅行と AI 搭載ロボットペットという、未来志向の事業に挑戦し、新たな市場を開拓していきます。
0 の場合(デフォルト)
それでは、 temperature
を 0 にして実行してみます。デフォルト値でもあり回答にムラが少ない挙動になります。
import os
import boto3
region = os.environ.get("AWS_REGION")
kb_id = os.environ.get("KNOWLEDGE_BASE_ID")
client = boto3.client("bedrock-agent-runtime", region_name=region)
generation_configuration = {
"inferenceConfig": {
"textInferenceConfig": {
"maxTokens": 2048, # Default
"temperature": 0, # Default
"topP": 1, # Default
"stopSequences": ["Observation"],
}
},
"additionalModelRequestFields": {"top_k": 50}, # Deafault
}
response = client.retrieve_and_generate(
input={"text": "来年はどんな事業に注力する予定ですか?"},
retrieveAndGenerateConfiguration={
"knowledgeBaseConfiguration": {
"knowledgeBaseId": kb_id,
"modelArn": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
"generationConfiguration": generation_configuration,
},
"type": "KNOWLEDGE_BASE",
},
)
print(response["output"]["text"])
3 回行ってみましたが、今回の場合はまったく同じ回答内容が返ってきました。
(app-py3.12) takakuni@app % python interence_parameter.py
株式会社サンプルは2024年度に、宇宙旅行事業とAI搭載ロボットペット事業の2つの新規事業に注力する予定です。 宇宙旅行事業では、月面でのリゾート「ルナ・パラダイス」の建設や宇宙飛行士養成プログラムの提供、宇宙食の開発・販売を行います。AI搭載ロボットペット事業では、感情認識AIを搭載した革新的なペットロボット「エモ・ペット」の開発と販売を行う予定です。
(app-py3.12) takakuni@app % python interence_parameter.py
株式会社サンプルは2024年度に、宇宙旅行事業とAI搭載ロボットペット事業の2つの新規事業に注力する予定です。 宇宙旅行事業では、月面でのリゾート「ルナ・パラダイス」の建設や宇宙飛行士養成プログラムの提供、宇宙食の開発・販売を行います。AI搭載ロボットペット事業では、感情認識AIを搭載した革新的なペットロボット「エモ・ペット」の開発と販売を行う予定です。
(app-py3.12) takakuni@app % python interence_parameter.py
株式会社サンプルは2024年度に、宇宙旅行事業とAI搭載ロボットペット事業の2つの新規事業に注力する予定です。 宇宙旅行事業では、月面でのリゾート「ルナ・パラダイス」の建設や宇宙飛行士養成プログラムの提供、宇宙食の開発・販売を行います。AI搭載ロボットペット事業では、感情認識AIを搭載した革新的なペットロボット「エモ・ペット」の開発と販売を行う予定です。
大事なことなので補足しますが、 temperature
= 0 だから、いつでも同じ回答が出てくるわけではないです。以下のブログがとても面白かったので合わせてご覧いただくのをオススメします。
ChatGPT の出力結果が毎回異なる理由| IT navi
といった補足をした後に再度実行すると、異なる回答を得ることができました。
セレブリティとのコラボレーションモデルやロボットペット用アクセサリーの部分が補足されていますね。
(app-py3.12) takakuni@app % python interence_parameter.py
株式会社サンプルは2024年度に、宇宙旅行事業とAI搭載ロボットペット事業の2つの新規事業に注力する予定です。 宇宙旅行事業では、月面でのリゾート「ルナ・パラダイス」の建設、宇宙飛行士養成プログラムの提供、宇宙食の開発と販売を行います。AI搭載ロボットペット事業では、感情認識AIを搭載した「エモ・ペット」の開発、セレブリティとのコラボレーションモデルの販売、ロボットペット用アクセサリーの開発と販売を行う予定です。
1 の場合
temperature
を 1 にして実行してみます。 0 に比べてランダム性が増すため、ユニークな回答を得やすくなります。
import os
import boto3
region = os.environ.get("AWS_REGION")
kb_id = os.environ.get("KNOWLEDGE_BASE_ID")
client = boto3.client("bedrock-agent-runtime", region_name=region)
generation_configuration = {
"inferenceConfig": {
"textInferenceConfig": {
"maxTokens": 2048, # Default
"temperature": 1, # Default
"topP": 1, # Default
"stopSequences": ["Observation"],
}
},
"additionalModelRequestFields": {"top_k": 50}, # Deafault
}
response = client.retrieve_and_generate(
input={"text": "来年はどんな事業に注力する予定ですか?"},
retrieveAndGenerateConfiguration={
"knowledgeBaseConfiguration": {
"knowledgeBaseId": kb_id,
"modelArn": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
"generationConfiguration": generation_configuration,
},
"type": "KNOWLEDGE_BASE",
},
)
print(response["output"]["text"])
同じく 3 回ほど行ってみましたが、 0 に比べて回答内容の異なりが目立ちますね。
(app-py3.12) takakuni@app % python interence_parameter.py
株式会社サンプルは2024年度に2つの新しい事業に注力する予定です。
1つ目は宇宙旅行事業で、月面でのリゾート開発を進めます。具体的には「ルナ・パラダイス」と呼ばれる月面リゾートの建設や、宇宙飛行士養成プログラム、宇宙食の開発・販売を行う予定です。 2つ目は、AI搭載ロボットペット事業です。感情認識機能を備えた革新的な「エモ・ペット」と呼ばれるロボットペットの開発・販売を行います。また、セレブリティとコラボしたモデルの販売や、ペット用アクセサリーの開発・販売も予定されています。
(app-py3.12) takakuni@app % python interence_parameter.py
株式会社サンプルは、2024年度に以下の2つの新規事業に注力する予定です。
1. 宇宙旅行事業: 月面リゾートの開発や宇宙飛行士養成プログラムの提供を行う。
2. AI搭載ロボットペット事業: 感情認識機能を搭載した革新的なロボットペット「エモ・ペット」の開発・販売を行う。
(app-py3.12) takakuni@app % python interence_parameter.py
株式会社サンプルは2024年度に宇宙旅行事業と AI搭載ロボットペット事業という2つの新規事業に力を入れる予定です。 宇宙旅行事業では、月面でのリゾート「ルナ・パラダイス」を建設し、宇宙飛行士の養成プログラムを提供、宇宙食の開発や販売も手掛ける予定です。一方、AI搭載ロボットペット事業では、感情認識AIを搭載した革新的なペット「エモ・ペット」の開発・販売、セレブリティとのコラボレーションモデルやペット用アクセサリーの販売を計画しています。
まとめ
以上、「Knowledge bases for Amazon Bedrock で推論パラメーターを調節できるようになりました。」でした。
みなさんのお気に入り推論パラメーター教えて欲しいです。(私は割と temperature
を 0 にしがちです。)
AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!