Amazon Bedrockの活用例：Llama 2 Chat 70Bを使ったサンプルアプリケーション

本記事は [Amazon Bedrock Advent Calendar 2023 by ナレコム](https://qiita.com/advent-calendar/2023/bedrock-knowledgecommunication) の15日目の記事です。

Amazon Bedrock Advent Calendar 2023 by ナレコム ではAmazon Bedrockの基本的な概要から具体的な各モデルの作り方や事例紹介などを行っていきます。

### はじめに

Amazon Bedrockは多くのサンプルアプリケーションを提供し、ユーザーがPlayground上で実際に試すことができるように設計されています。

今回は2023年12月現在33個公開されているExamplesの内、 **Llama 2 Chat 70B** を使った4つを紹介します。記事では、これらの例のプロンプトとレスポンスをわかりやすく日本語で紹介します。

Llama 2 Chat 70Bと13Bの違いは以下のようになっており、基本的には13Bがベースとなっている様です。

| モデル名                          | 概要・特徴 |
|-----------------------------------|------------|
| Llama 2 Chat 13B (Meta)           | 対話型のテキスト生成に特化したモデル。自然な会話スタイルのテキスト生成が可能。 |
| Llama 2 Chat 70B (Meta)           | Llama 2 Chat 13Bの大規模版。より複雑な対話と内容生成に対応。 |

**記事はわかりやすさを優先してプロンプトやレスポンスを日本語にしておりますが、2023年12月時点ではLlama 2は基本的に英語でのみ動作します。**

※日本語でも稀に動作することもあります。

### 例１）思考の連鎖
思考の連鎖を使ったプロンプトの例

:::note info
**プロンプト**

あなたは並外れた批判的思考（クリティカル・シンキング）を持つ非常に知的なボットです

私は市場に行ってリンゴを10個買いました。あなたの友人に2個、ヘルパーに2個あげました。その後、さらに5個のリンゴを買い、1個を食べました。何個のリンゴが残ったでしょう？
:::

:::note warn
**レスポンス**
もちろん、喜んでお手伝いしますよ！えーと...リンゴ2個を友達に、2個をヘルパーさんにあげたとすると、10 - 2 - 2 = 6個のリンゴが残っていることになります。それから、あなたはリンゴを5個買い足したので、6＋5＝11個のリンゴがある。最後に、あなたはリンゴを1個食べたので、11 - 1 = 10個のリンゴが残っています。
:::

### 例２）ナラティブ・ライティング

記事を作成するプロンプトの例

:::note info
**プロンプト**

あなたは多くのデータにアクセスできるエコノミストである

高インフレがある国のGDPに与える影響について記事を書いてください。
:::

:::note warn
**レスポンス**
タイトル：高インフレがGDPに与える破壊的影響

インフレとは、経済における財やサービスの一般的な価格水準が着実に上昇することであり、一国の国内総生産（GDP）に大きな影響を与える可能性がある。特に高インフレは、その国の経済に壊滅的な影響を与える可能性があり、GDPに影響を与えるメカニズムを理解することが不可欠である。

**（公式サンプルでは続きがありますが長いため略）**
:::

### 例３）ロールプレイ

複雑な概念の説明を生み出すプロンプトの例

:::note info
**プロンプト**

あなたは5歳の子供に説明しようとしているデータサイエンティストです

機械学習の文脈でトランスフォーマーとは何かを説明できますか？
:::

:::note warn
**レスポンス**
もちろん、喜んで説明しよう！

友達にあげたいおもちゃがたくさんあるとします。でも、一人の友達に全部あげるのではなく、それぞれのおもちゃを違う友達にあげたい。そうすれば、それぞれの友だちは、自分だけの特別なおもちゃを手に入れることができる。
トランスフォーマーは、それを手助けしてくれる魔法の機械のようなものだ。おもちゃのような）たくさんのものを取り込み、（それぞれの友達のためのおもちゃのような）特別な新しいものを返してくれる。これは、それぞれのおもちゃを見て、どの友だちに最適かを判断することによって行われる。
しかし、これがトランスフォーマーの本当にクールなところだ！トランスフォーマーは、単におもちゃを友だちに与えるだけでなく、言語を翻訳したり、長い話を要約したり、有名な画家が描いたような絵を作ったりすることもできるのだ。
まるで、たくさんの特別なものを同時に作ってくれる魔法の機械を持っているようなものだ！
:::

### 例４）ソフトウェアコード生成

コードを生成するプロンプトの例

:::note info
**プロンプト**

以下のタスクのコードを生成する

javascriptで文字列のmd5sumを計算するコードを生成する
:::

:::note warn
**レスポンス**
```
function md5sum(str) {
	const crypto = window.crypto || window.msCrypto;
	const subtle = crypto.subtle;
	const hash = subtle.digest({
		name: "MD5",
		input: str
	});
	return hash.output;
}

console.log(md5sum("Hello World"));
```

説明

このコードは Web Cryptography API を使用して、与えられた文字列の MD5 ハッシュを計算します。ハッシュの機能を提供する subtle モジュールにアクセスするために crypto オブジェクトを使用します。ハッシュアルゴリズム (この場合は "MD5") と入力データ (ハッシュ化する文字列) を指定する options オブジェクトを指定して digest() メソッドをコールします。digest() メソッドの出力は、ハッシュ値を含むバイナリ・データ・オブジェクトに解決する Promise です。このバイナリデータオブジェクトは16進文字列に変換されて返される。
コード例では、md5sum()関数は文字列引数を取り、そのMD5ハッシュを16進文字列として返します。この関数は、文字列 "Hello World "を引数として呼び出され、関数の出力はコンソールに記録される。
このコードは、ブラウザがWeb Cryptography APIをサポートしていることを前提としていることに注意してください。ブラウザがこのAPIをサポートしていない場合、このコードは動作せず、エラーがスローされます。
:::

Llama 2の特徴として「

」タグ内に役割を明確に与えて、その後に実行してもらう内容を記述することで的確な対応をしてくれます。

### まとめ

この記事では、Amazon Bedrockを通じて提供されるサンプルアプリケーション「Llama 2 Chat 70B」の使用例を4つ紹介しています。

1. **思考の連鎖**: 批判的思考を持つボットがリンゴの計算問題を解決する例。この例では、ボットが与えられた情報を処理して、正確な答えを導き出しています。

2. **ナラティブ・ライティング**: データにアクセスできるエコノミストとして、高インフレがGDPに与える影響についての記事を作成する例。ここでは、経済の複雑な概念を解説し、インフレとGDPの関係を分析しています。

3. **ロールプレイ**: 5歳の子供に向けて、機械学習のトランスフォーマーの概念を説明する例。この例では、複雑な技術的な概念を簡単で理解しやすい形で説明しています。

4. **ソフトウェアコード生成**: JavaScriptで文字列のmd5sumを計算するコードを生成する例。この例では、具体的なプログラミングタスクに対する技術的な解決策を提供しています。

各例は、「

」タグを使用して、Llama 2に明確な役割やコンテキストを与えることにより、具体的で有用な出力を得ることができることを示しています。

---

また、ナレッジコミュニケーションでは  **「[Musubite](https://recruiting.musubite-job.com/features/company/knowledge-communication)」** というエンジニア同士のカジュアルトークサービスを利用しています！この記事にあるような生成AI 技術を使ったプロジェクトに携わるメンバーと直接話せるサービスですので興味がある方は是非利用を検討してください！

https://recruiting.musubite-job.com/features/company/knowledge-communication