Amazon Bedrockでプロンプトエンジニアリングを学ぶ

こんにちは、Masedatiです。1月ももう終わりますが、今年もよろしくお願いいたします。

最近Amazon Bedrockのドキュメントを眺めていたのですが、「プロンプトエンジニアリングガイドライン」なるものがあることに気がつきました。

本記事は上記ドキュメントを追っていく内容となっています。
また、やってみた」ではドキュメントに基づいたプロンプトエンジニアリングを実際に行います。

プロンプトエンジニアリングとは

生成AIが期待していたものと違う内容が出力されて、もやもやした経験はないでしょうか?
一生懸命自分で調整した結果、ググったほうが早かったということが、以前私はありました。

そのような無駄な時間をなくし、一発で期待したものを得る「良い命令の仕方」がプロンプトエンジニアリングです。
一応Bedrockくんにも聞いてみましょう。

Prompt:「What is prompt engineering?」

?!。すごいですね。長くて読む気が失せてしまいました…
命令を変えてみます。

Prompt:「What is prompt engineering? Answer the above question in one sentence.」

Prompt engineering is the process of designing and creating prompts that are effective and engaging for a specific task or audience.

直感的でわかりやすい回答が返ってきました。
おめでとうございます!これもプロンプトエンジニアリングの一つであり、その一歩を踏み出すことができました。

ガイドラインまとめ

ドキュメント記載のガイドラインを以下にまとめました。詳細はドキュメントをご確認ください。

  1. シンプル、明確、完全な指示を行う
  2. プロンプトの最終文でタスクの指示を行う
    私は今まで、一番最初に命令を書いていたので衝撃でした。
  3. 簡潔な答えが欲しい場合など出力形式を指定する指示を命令文に付け加える
    先ほどの例のような「Answer the above question in one sentence.」命令文が有効です。
  4. 段階的に処理してほしい場合、命令文は「Think step-by-step to come up with the right answer」とする
    小学生の算数問題を想像してもらえればわかりやすいと思います。
    例えば、「奈菜さんはお母さんから500円おこづかいをもらいました。駄菓子屋で1個100円のお菓子を3個買いました。帰宅途中ジュースを買い、残金80円となりました。ジュースの値段はいくらでしょう。」といったタスクを解いてもらう際に有効です。
  5. それっぽい情報を出力することを防ぐため、命令文に「If you don’t know a proof, respond by saying “I don’t know.”」のような指示を加える
  6. プロンプトに解答例を付け加える
    単純タスクの場合、3~5個で十分です。
  7. 生成AIを励ます
    ネタかと思ったのですが、パフォーマンスが向上する場合があるようです。ネタじゃないですよね…?

Temperature? Top P?

Amazon Bedrock PlaygroundのTextやChatを使っている方は、右側にパラメータ調整できる”Configurations”欄があるとお気づきでしょうか。

こちらの調整もドキュメントによると“プロンプトエンジニアリング”の一環のようです。

なかなか調整する機会もなく、そのままの方が多いのではないでしょうか。また、いざ調整してみるとどのようにすればいいかわからないと思います。まずは、それぞれのパラメータの説明を見てみましょう。

各パラメータの説明

Temperature
  • 指定範囲:0~1

「0」にするとより厳密な回答となり、「1」に近づくほどより異色や独自性のある回答となるようです。
数回試したのですが、「0」だと同じ回答が出力され、「1」だと毎回異なる回答が出力されました。

Maximum generation length/maximum new tokens
  • 指定範囲:1~モデルによる
    • Amazon Titan → ~8,000トークン
    • Anthropic Claude → ~4,096トークン
    • AI21 Labs Jurassic-2 → ~2,048 or ~8,191トークン
    • Cohere → ~4,096トークン
    • Meta Llama 2 Chat 13B → ~2,048トークン

生成されるトークンの最大数を指定します。クラス分類のようなタスクの場合、ラベル出力のような短い回答が期待されるため、トークン数を少なく設定します。

Top-p
  • 指定範囲:0.1~1

0.1~1の数字は確率を表しており、「1」に設定すると可能性のあるすべてのトークンから次のトークンが選ばれます。逆に、「0.1」に近づくにつれて可能性の低いトークンが除外され、トークンの選択肢は限定的となります。

Top-k
Top-kのパラメータがあるのは、「Anthropic ClaudeとCohere」のみです。
  • 指定範囲:0~500

Top-pと似ているのですが、Top-kの値は次に出力される可能性のあるトークンの上限の数です。
例えば、「10」を指定すると次に出力されるトークンは、確率の高い上位10個の単語からランダムで選ばれます。

End token/end sequence

指定したトークンの前で出力を止めることができます。
例えば「is」を追加した場合、「Prompt: What is AWS?」の出力として、以下のようになります。

  • 追加前:「AWS (Amazon Web Services) is a comprehensive, evolving…」
  • 追加後:「AWS (Amazon Web Services)」

基本的に設定しなくてもよい項目のようです。

パラメータ調整難しくないですか?

パラメータ調整難しくないですか?
lengthやtoken系は直感的ですが、”Temperature”や”Top-p”の組み合わせは無限にあり、タスクに適した調整はなかなか難しいと感じています…

ありがたいことに、AWS公式からプロンプトやパラメータの設定例が提供されています。
Playgrounds上でモデルを選び、”Configurations”の上部の「Load examples」を押してみましょう。

さまざまなモデルで計28件のプロンプト例が提供されています。

試しにClaudeで提供されている「Character Roleplay」を開いてみます。生成AIがキャリアアドバイザーになりきる設定の例です。

青枠がパラメータですが、「Temperature=1、Top-p=1、Top-k=250」とランダム性が高く、アドバイスを求める出力の際はより創造的に調整するようです。

プロンプトは大きく分けて3パートに分かれています。最初にルール付けを行い、中間で解答例や必要なデータ、そして最終文に簡潔な命令を入力する形となっています。

またルール付けの際、ガイドラインまとめ5に記載したとおり、”それっぽい情報”を出力させないために「If you are unsure how to respond, say “Sorry, I didn’t understand that. Could you rephrase your question?”」のルールを追記しています。

やってみた

プロンプトエンジニアリング”なし“と”あり“で、弊社の新しいキャッチフレーズを考えてもらおうと思います。
パラメータはキャリアアドバイザーと同じ値とし、”なし/あり“共通とします。

  • Temperature:1
  • Top-p:1
  • Top-k:250

まずは、何も考えず命令してみます。
Prompt:SCSK株式会社のキャッチフレーズを考えてください

  • 「テクノロジーで未来を創造する」
  • 「イノベーションのパートナー」
  • 「デジタルトランスフォーメーションを共に」
  • 「可能性を形に」

ううむ。ありきたりで個性がありませんね…

では、今まで学んできたことをPromptに詰め込んでみましょう。
まずはルール付けとして「SCSK株式会社」とはどのような企業なのか教えてあげます。
弊社ホームページから引用してみました。

SCSKグループは、50年以上にわたり、ビジネスに必要なITサービスからBPOに至るまで、
フルラインアップで提供し、8,000社以上のお客様のさまざまな課題を解決してきました。
そして、次の飛躍に向けて、ITを軸としたお客様やパートナー、社会との共創による、
さまざまな業種・業界や社会の課題解決に向けた新たな挑戦に取り組んでいます。

また、追加ルールとして弊社CM特設サイト記載の「MESSAGE」を引用したいと思います。

SCSKグループには、50年以上にわたり、あらゆる課題をITで解決してきた知見と実績による、ITの無限の可能性があります。
より多くのみなさんにSCSKという会社を知ってもらい、ITの力で、夢ある未来を共に創っていきたい。
今後のSCSKグループに、ご期待ください。

ルール付けのあとはいくつか例を挙げ、単純明快な指示を与えれば完成です。

上記まとめたPromptが以下のとおりです。※引用文章の「グループ」から「株式会社」に変更し、一部抜粋します。

SCSK株式会社とは日本のシステムインテグレータ会社です。
SCSK株式会社は、50年以上にわたり、ビジネスに必要なITサービスからBPOに至るまで、フルラインアップで提供し、8,000社以上のお客様のさまざまな課題を解決してきました。
そして、次の飛躍に向けて、ITを軸としたお客様やパートナー、社会との共創による、さまざまな業種・業界や社会の課題解決に向けた新たな挑戦に取り組んでいます。 

SCSK株式会社には以下の熱い思いがあります。 
「より多くのみなさんにSCSKという会社を知ってもらい、ITの力で、夢ある未来を共に創っていきたい。」 

以下が過去のキャッチフレーズの例です。 
<example> 
2022年:「無いぞ、知名度。SCSK あるぞ、ITの可能性。SCSK」 
2023年:「会社名だよ。SCSK あるぞ、ITの可能性。SCSK」 
</example> 

2022年、2023年のキャッチフレーズから繋がるように、2024年のSCSK株式会社のキャッチフレーズを考えてください。

 

いざ、出力!

つなぐぞ、夢と現実。SCSK

まとめ

私も生成AIも褒めたら伸びるタイプです。

タイトルとURLをコピーしました