本記事は Amazon Bedrock Advent Calendar 2023 by ナレコム の16日目の記事です。
Amazon Bedrock Advent Calendar 2023 by ナレコム ではAmazon Bedrockの基本的な概要から具体的な各モデルの作り方や事例紹介などを行っていきます。
はじめに
Amazon Bedrockは多くのサンプルアプリケーションを提供し、ユーザーがPlayground上で実際に試すことができるように設計されています。
今回は2023年12月現在33個公開されているExamplesの内、 Llama 2 Chat 13B を使った3つを紹介します。記事では、これらの例のプロンプトとレスポンスをわかりやすく日本語で紹介します。
Llama 2 Chat 70Bと13Bの違いは以下のようになっており、基本的には13Bがベースとなっている様です。
モデル名 | 概要・特徴 |
---|---|
Llama 2 Chat 13B (Meta) | 対話型のテキスト生成に特化したモデル。自然な会話スタイルのテキスト生成が可能。 |
Llama 2 Chat 70B (Meta) | Llama 2 Chat 13Bの大規模版。より複雑な対話と内容生成に対応。 |
記事はわかりやすさを優先してプロンプトやレスポンスを日本語にしておりますが、2023年12月時点ではLlama 2は基本的に英語でのみ動作します。
※日本語でも稀に動作することもあります。
例1)思考の連鎖
思考の連鎖を使ったプロンプトの例
プロンプト
[INST]あなたは並外れた批判的思考(クリティカル・シンキング)を持つ非常に知的なボットです[/INST]
私は市場に行ってリンゴを10個買いました。あなたの友人に2個、ヘルパーに2個あげました。その後、さらに5個のリンゴを買い、1個を食べました。何個のリンゴが残ったでしょう?
ステップ・バイ・ステップで考えよう。
レスポンス
まず、リンゴを10個買った。
次に、2個のリンゴをお友達にあげたので、10 – 2 = 8個のリンゴが残っています。
次に、ヘルパーさんにリンゴを2個あげたので、残り8個-2個=6個。
その後、リンゴを5個買い足したので、残り6個+5個=11個。
最後にリンゴを1個食べたので、11 – 1 = 10個のリンゴが残った。
よって、私の手元には10個のリンゴが残る。
例2)デバッグコード
コードをデバッグするプロンプトの例
プロンプト
[INST]以下のコードの問題点を見つけなさい。理由を説明してください。
1 2 3 4 5 6 7 8 |
import torch torch.device("cuda:0" if torch.cuda.is_available() else "cpu") def run_som_func(a, b): c = c*2 c=a+b print(c) return c ^ 2 |
前に参照された変数というエラーが出る。[/INST]
レスポンス
このコードの問題は、変数 c
が定義される前に値が代入されていることです。
c = c*2 の行では、c
は定義される前に値が代入されている。これは Python では許されないことで、 VariableReferenceBeforeAssignment
というエラーが発生します。
この問題を解決するには、次のように c
に値を代入する前に c
を定義する必要があります:
1 2 3 4 5 6 7 |
def run_som_func(a, b): c = 0 c = c*2 c = a + b print(c) return c ^ 2 |
この方法では、値が代入される前に c
が定義され、エラーは回避される。
例3)数ショット学習
数ショットの学習を示すプロンプトの例
プロンプト
[INST]あなたは卓越した言語能力を持つ非常に知的なボットです[/INST]。
“lemurwhat”はタンザニア原産の毛むくじゃらの小動物です。”lemurwhat”を使った例文
使った例文:
私たちはアフリカを旅行していて、とてもかわいい”lemurwhat”を見た。
“cuteduddle”は素早く飛び跳ねることを意味します。”cuteduddle” を使った例文
例文は次のとおり:
レスポンス
小さな女の子はキツネザルを見て大喜びで、”cuteduddle”を始めた。
お役に立てれば幸いです!他に質問があれば教えてください。
Llama 2の特徴として「[INST][/INST]」タグ内に役割を明確に与えて、その後に実行してもらう内容を記述することで的確な対応をしてくれます。
まとめ
この記事では、Amazon Bedrockを通じて提供されるサンプルアプリケーション「Llama 2 Chat 13B」の使用例を3つ紹介しています。
各例は、「[INST][/INST]」タグを使用して、Llama 2に明確な役割やコンテキストを与えることにより、具体的で有用な出力を得ることができることを示しています。
また、例では70Bモデルとの違いがわかりづらいですが13Bでは回答できないケースでも70Bモデルを利用することで回答を得ることが出来る事が多くありました。ただし、基本的には70Bモデルは13Bモデルがベースとなっており、基本的な動作は似ております。
また、ナレッジコミュニケーションでは 「Musubite」 というエンジニア同士のカジュアルトークサービスを利用しています!この記事にあるような生成AI 技術を使ったプロジェクトに携わるメンバーと直接話せるサービスですので興味がある方は是非利用を検討してください!