Twitter
Facebook
Hatena
Amazon Bedrock プロンプトエンジニアリングの深掘り - 書籍の未解説部分を徹底解説

IoTクラウド基盤アーキテクトの森⽥です。お客様のIoTサービスを実現するAWSアーキテクチャの検討、提案、構築を行っています。最近はIoTへの生成AI活用にも幅を広げて技術検証を行っています。

2024年6月26日(水)に「Amazon Bedrock 生成AIアプリ開発入門」を他社のメンバーと共著で刊行しました。入門書として活用してもらえるようAmazon Bedrockの機能を一通り網羅しています。

Amazon Bedrock 生成AIアプリ開発入門 [AWS深掘りガイド]
https://www.sbcr.jp/product/4815626440/

3章のプロンプトエンジニアリングに関する解説において、紙幅の都合で泣く泣く省略した部分があるため、本コラムにて紹介します。

手法1)タスクの解き方を明記する

書籍の3.3.7「ステップバイステップで考えさせる」では、タスクの解き方を生成AIに考えさせていますが、明確にタスクの分割方法を提示することができれば、より正確にタスクを実行できます。
例えば、以下のようなタスクを想定します。

【プロンプト】

あなたのタスクは、コストが最も安いEC2のインスタンスを選択することです。

EC2とは、仮想サーバーを提供するAWSのサービス名です。
インスタンスとは仮想サーバーのことで、インスタンスのタイプごとに価格が異なります。

インスタンスタイプごとの価格は以下のとおりです。
<instance type>
インスタンス名:t3.nano
1時間あたりの価格:USD 0.0068
vCPU:2
メモリ:0.5 GiB

インスタンス名:m7i.xlarge
1時間あたりの価格:USD 0.2604
vCPU:4
メモリ:16 GiB

インスタンス名:m7g.large
1時間あたりの価格価格:USD 0.1054
vCPU:2
メモリ:8 GiB
</instance type>

条件は以下のとおりです。
- メモリは16GiB以上必要です
- 選択できるインスタンスタイプは1つのみ
- インスタンスを複数使用することも可能

回答のみを出力してください。

最も安価になる構成の場合の月額費用はいくらですか?

【出力例】

最も安価な構成は以下になります。

m7i.xlarge 1台
月額費用: USD 0.2604 x 24時間 x 30日 = USD 187.488

上記のプロンプトではタスクの解き方を指定していないため、誤った組み合わせが選択されました。改善するために、計算の順序を細かく指定してタスクを実行させます。

【プロンプト】

あなたのタスクは、コストが最も安いEC2のインスタンスを選択することです。

EC2とは、仮想サーバーを提供するAWSのサービス名です。
インスタンスとは仮想サーバーのことで、インスタンスのタイプごとに価格が異なります。

インスタンスタイプごとの価格は以下のとおりです。

インスタンス名:t3.nano
1時間あたりの価格:USD 0.0068
vCPU:2
メモリ:0.5 GiB

インスタンス名:m7i.xlarge
1時間あたりの価格:USD 0.2604
vCPU:4
メモリ:16 GiB

インスタンス名:m7g.large
1時間あたりの価格価格:USD 0.1054
vCPU:2
メモリ:8 GiB


条件は以下のとおりです。
- メモリは16GiB以上必要です
- 選択できるインスタンスタイプは1つのみ
- インスタンスを複数使用することも可能

以下の順序で計算を行ってください。
1. インスタンスのタイプごとに必要なインスタンス台数を算出する。 計算式は 必要なメモリ容量 / インスタンスのメモリ容量
3. インスタンスのタイプごとに月額費用を算出する。計算式は 1時間あたりの価格 * 必要な台数 * 720
4. インスタンスタイプごとに算出した金額を比較し、最も安価なインスタンスタイプ決定する

ステップバイステップで考えてください
途中の考えるステップをタグに含め、最終回答をタグに含めてください。

最も安価になる構成の場合の月額費用はいくらですか?

【出力例】

<thinking>
1. 必要なメモリ容量は16GiB以上なので、各インスタンスタイプで必要な台数を計算します。

t3.nano: 
必要な台数 = 16GiB / 0.5GiB = 32台

m7i.xlarge:
必要な台数 = 16GiB / 16GiB = 1台

m7g.large: 
必要な台数 = 16GiB / 8GiB = 2台

2. 各インスタンスタイプの月額費用を計算します。

t3.nano:
月額費用 = 0.0068 * 32 * 720 = $156.67

m7i.xlarge: 
月額費用 = 0.2604 * 1 * 720 = $187.49

m7g.large:
月額費用 = 0.1054 * 2 * 720 = $151.78

3. 最も安価なインスタンスタイプはm7g.largeです。
</thinking>

<answer>
最も安価になる構成は、m7g.largeインスタンスを2台使用することです。
この構成の月額費用は$151.78となります。
</answer>

上記のように、タスクの解き方を明記することで、正しいインスタンスの組み合わせを導くことができました。計算も正しい数値です。

同じ考え方で、英文の要約の際にもまずは英文のままで重要トピックを抽出して、次に英文のまま要約し、最後に日本語に翻訳するといった方法が有効です。

手法2)アシスタントプロンプトを使用する

書籍で解説している方法は、すべて「ユーザープロンプトのみを使用した手法」ですが、アシスタントプロンプトを使用する手法もあります。アシスタントプロンプトは通常、生成AIからの回答に使用するものですが、ユーザーが明示的に指定することも可能です。このテクニックを使うことで生成AIの回答内容を制御できます。

なお、マネージメントコンソールのプレイグラウンドではアシスタントプロンプトを指定できないので、AWSのSDKなどを使用してAPIを呼び出す必要があります。

まずはアシスタントプロンプトの指定がない場合の動作を確認しましょう。

【プロンプト】

HTMLの雛形を書いて

【出力例】

HTMLの雛形は次のようになります。

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
```

この雛形は、HTML5のドキュメントの基本的な構造を示しています。

- `<!DOCTYPE html>` は、HTML5ドキュメントであることを宣言します。
- `<html>` タグは、HTML文書全体を囲みます。`lang="en"` は、ドキュメントの言語が英語であることを示します。
- `<head>` タグは、ドキュメントのメタデータを含みます。
  - `<meta charset="UTF-8">` は、文字エンコーディングをUTF-8に設定します。
  - `<meta name="viewport" content="width=device-width, initial-scale=1.0">` は、レスポンシブウェブデザインのためのビューポート設定を行います。
  - `<title>Document</title>` は、ドキュメントのタイトルを設定します。
- `<body>` タグは、ドキュメントのコンテンツが含まれる部分です。

この雛形を使って、HTMLのコンテンツを `<body>` タグ内に記述していきます。必要に応じて、`<head>` タグ内にスタイルシートやスクリプトを追加することもできます。

出力は間違っていませんが、雛形の出力の前に「HTMLの雛形は次のようになります。」という不要な出力が含まれています。また、HTML部分がMarkdownの書式で囲まれた形式になっています。この動作をアシスタントプロンプトに指定して出力を改善します。
今回の場合は、アシスタントプロンプトとしてHTMLの先頭部分「」を指定します。

【送信プロンプト】

(ユーザープロンプト)
HTMLの雛形を書いて

(アシスタントプロンプト)
<!DOCTYPE html>

【出力例】

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

送信プロンプトにアシスタントプロンプトを含めることで、生成AIは送信したアシスタントプロンプトの続きから生成を始めます。そのため、「HTMLの雛形は次のようになります。」といった不要な出力が行われず、HTMLの出力を開始します。

JSON形式で出力してほしい場合に、アシスタントプロンプトに「{(波括弧)」を指定する方法もよく利用されます。

まとめ

「Amazon Bedrock 生成AIアプリ開発入門」で解説できなかったプロンプトエンジニアリングの手法を紹介いたしました。書籍では他のプロンプトエンジニアリングの手法についても解説しています。また、「Knowledge bases for Amazon Bedrock」や「Agents for Amazon Bedrock」といったBedrockの主要な機能の理解に役立つハンズオンを含めています。是非、書店で手にとっていただけると幸いです。

書籍について
出版社のサイトはこちら
Amazonはこちら

Amazon Bedrock導入ソリューションについて、詳しくはこちら
Amazon Bedrock導入ソリューション

 

 

この記事の執筆者

森田 和明Kazuaki Morita

エリア事業本部
西日本支社
インテグレーション&ソリューション部
ITアーキテクトグループ
主任 / フェロー

AWS IoT クラウド アプリ開発