IBM watsonxとGraniteでロール・プロンプトを使用

Vanna Winland

AI Advocate & Technology Writer

Anna Gutowska

AI Engineer, Developer Advocate

IBM

ロール・プロンプトとは何ですか?

このチュートリアルでは、段階的な指示に従って、ロール・プロンプトと呼ばれるプロンプト・エンジニアリング手法を実行していきます。IBM Graniteモデルを使用して、ニュアンスが考慮されたモデル出力のペルソナを割り当てます。

ロール・プロンプトは、応答を生成する際に特定の役割またはペルソナを引き受けるよう人工知能(AI)モデルに指示するプロンプト・エンジニアリング手法です。このテクニックを使用すると、モデルの口調、スタイル、動作をガイドすることができ、より魅力的なアウトプットにつながります。

プロンプト・エンジニアリングで重要なのは、モデル入力を最適化することで、適切で意味のある回答が得られるようにすることです。zero-shotfew-shotプロンプティングは、大規模言語モデル(LLM)との会話に使用される2つの一般的な手法です。LLMは、人間の言語を処理および解釈する能力により、自然言語処理(NLP)タスクを実行する自然な能力を備えています。AIモデルの言語能力は、チャットボットの会話やマルチエージェントのやり取りから、自由な創作ライティングまで、さまざまなタスクに役立ちます。

役割の特定のニーズを満たすためにLLMが特定のペルソナとして行動するように指示されると、生成AI(gen AI)はよりパーソナルになります。AIの応答は、割り当てられた役割を最初にプロンプトする場合、より正確で適切なものになります。AIモデルでは膨大なデータセットを活用するため、割り当てられる役割は、教師、歴史的人物、営業担当者など、人物の想像力に左右されます。この能力により、ロール・プロンプト(ペルソナ・プロンプトとも呼ばれる)が強力な手法となっています。AIモデルは適応性があるため、ユーザーやシステムの特定のニーズに合わせた応答を生成することができ、変装のマスターとなることができます。

ロール・プロンプトの使用方法

ロール・プロンプトを使用して、チャットボットにユーザーとより良い対話をするためのペルソナや、他のエージェントとより適切に対話するためのAIエージェントを提供することができます。プロンプト・テンプレートに精通している方は、ロール・プロンプトの動作を既にご覧になったことがあるかもしれません。例えば、多くのエージェント型フレームワークでは、タスクを完了し、効果的にコラボレーションするためにロールプレイング・エージェントを使用します。ChatDevでは、自己注意メカニズムと呼ばれるロール・プロンプト手法を使用しています。このメカニズムでは、生成されたアウトプットのガイドラインとして機能するエージェントの役割を明確に定義します。

前提条件

このチュートリアルを実行するには、watsonx.aiプロジェクトを作成するためのIBM Cloudアカウントが必要です。

手順

ステップ1. 環境を設定する

いくつかあるツールの中から選択することもできますが、このチュートリアルでは、Jupyter Notebookを使用してIBMアカウントを設定する方法について説明します。Jupyter Notebookは、コード、テキスト、画像、データの可視化を組み合わせて適切な分析を作成するために、データサイエンスの分野で広く使用されています。

  1. IBM Cloudアカウントを使用してwatsonx.aiランタイムにログインします。
  2. watsonx.aiプロジェクトを作成します。

                 「プロジェクト(project)」 > 「管理(Manage)」 > 「一般(General)」 > 「プロジェクトID(Project ID)」のプロジェクトIDをメモします。
                 このチュートリアルには、このIDが必要です。

 3.  Jupyter Notebookを作成します

このステップでは、このチュートリアルのコードをコピーして独自にzero-shot分類を実行できるノートブック環境を開きます。あるいは、このノートブックをローカル・システムにダウンロードし、watsonx.aiプロジェクトにアセットとしてアップロードすることもできます。このJupyter NotebookはGitHubで入手可能です。

ステップ2. watsonx.aiランタイムのインスタンスとAPIキーを設定する

このステップでは、プロジェクトをwatsonx.aiサービスに関連付けます。

  1. watsonx.aiランタイム・インスタンスを作成します(無料インスタンスであるLiteプランを選択します)。

  2. watsonx.aiでAPIキーを生成します。

  3. watsonx.aiで作成したプロジェクトにwatsonx.aiランタイムを関連付けます。

ステップ3. 関連ライブラリーをインストールしてインポートし、認証情報を設定する

このチュートリアルには、いくつかのライブラリーとモジュールが必要です。以下を必ずインポートしてください。インストールされていない場合は、pipをクイックインストールすることで問題が解決されます。

%pip install -q -U langchain_ibm 
%pip install –q ibm_watsonx_ai 
 
import getpass 
 
from langchain_ibm import WatsonxLLM 
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams 

ステップ4. watsonxの認証情報を設定する

以下の手順で、watsonx.aiランタイムAPIキーとプロジェクトIDを入力し、保存します。

credentials = { 
    "url": "https://us-south.ml.cloud.ibm.com", 
    "apikey": getpass.getpass("Please enter your watsonx.ai Runtime API key (hit enter): "), 
    "project_id": getpass.getpass("Please enter your project ID (hit enter): "), 
}

ステップ5. ロール・プロンプトのモデルを設定する

次にIBMのGranite-3.1-8B-Instructを設定してロール・プロンプトを実行します。

model = WatsonxLLM( 
model_id =  "ibm/granite-3-8b-instruct", 
url = credentials.get("url"), 
apikey = credentials.get("apikey"), 
project_id =  credentials.get("project_id"), 
params={ 
        GenParams.MAX_NEW_TOKENS: 500, 
        GenParams.MIN_NEW_TOKENS: 1, 
        GenParams.REPETITION_PENALTY: 1.1, 
        GenParams.TEMPERATURE: 0.7, # Adjust for variable responses 
        GenParams.TOP_K: 100, 
        GenParams.TOP_P: 0, 
    }, 
)

ステップ6. 歌詞をソネットに変える

ロール・プロンプトのシンプルで楽しいサンプルとして、モデルに有名な人物、William Shakespeareのペルソナを引き受けることを依頼してみましょう。役割を新しく割り当てられたモデルに、シェイクスピアの有名なソネットのスタイルで歌詞の一部を書き換えてください。

以下のコード・ブロックでは、モデルが応答するプロンプトを設定および定義します。好きなテーマに自由に変更できますが、Graniteは著作権で保護されたコンテンツに基づいてトレーニングされているわけではないことに注意してください。たとえば、Sabrina Carpenterの「Espresso」など、パブリック・ドメインの一部ではない曲を選択する場合は、プロンプトにそのフレーズも貼り付ける必要があります。
 
プロンプトが適切に機能するために、このサンプルでは、Jane Taylor(1806年)の古くから親しまれている子守唄『きらきら星』を使います。コード・ブロックを実行して、ユーザー・プロンプトをサンプルの入力テキストとともに定義します。

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = "You are William Shakespeare, rewrite ‘Twinkle, Twinkle, Little Star’ by Jane Taylor as a sonnet."

ステップ7. 応答を生成する

プロンプトを定義したら、次のコード・ブロックを実行して、モデルがアウトプットを生成できるようにします。それがシェイクスピアの基準に達していることを期待しましょう。

# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


読みやすい形式のモデルのアウトプットは次のとおりです。

"Twinkle, twinkle, little star, how I wonder what you are; 
Up above the world so high, like a diamond in the sky. 
In night's velvet cloak, you shine so bright, 
Guiding sailors through the darkest night. 
 
Your radiant beams, a celestial art, 
Illuminate the canvas of the heart. 
In silent whispers, secrets you share, 
Of galaxies far and constellations rare. 
 
Yet, mortal eyes can never grasp your form, 
Beyond our realm, in realms beyond the storm. 
O, star! O, star! Your light does pierce my soul, 
A cosmic dance, a timeless role. 
 
In dreams, I chase you, in slumber's hold, 
Your mystery, like an enchanted scroll. 
 
But wakefulness claims me, daylight steals your guise, 
Leaving behind but a memory of your surprise.
 
Thus, twinkling star, in slumber's peaceful reign, 
I bid you farewell, till morning brings again
."

このモデルでは、役割ベースのプロンプトに対する応答を生成し、シェイクスピアのソネットとして歌詞を書き換えることができました。このモデルは、ロール・プロンプトから期待されるルールとスタイルに従うことができました。*プロンプトの創造的な性質により、アウトプットはこのサンプルとは異なる場合があります。

ステップ8. ロール・プロンプトを使用して、より共感できるチャットボット応答を実現する

この次の例では、直接的なシステム・プロンプトとロールベースのシステム・プロンプトを比較します。ある動物病院では最近、ウェブページにバーチャル・アシスタントを導入しました。最高のカスタマー・サポートを提供するために、この動物病院では、たとえバーチャルなやり取りであっても、ペットの飼い主が話を聞いてもらっている、サポートされていると感じてもらいたいと考えています。これは多くの企業にとって共感できる目標です。訪問者は、「私の猫は最近よくくしゃみをし、足を舐めます。どうすればよいですか」といった質問をするかもしれません。このシナリオでは、モデルにはプロンプトに役割が割り当てられていません。入力ガイダンスなしですぐに使えるモデルを使用しているだけです。

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = " My pet cat has been sneezing a lot lately and is licking her paws what should I do?" 
 
# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


ただし、モデルはアドバイスや情報に合わせて応答しますが、個人的な要素はなく、検索エンジンの結果ページに表示されるものとはあまり変わっていません。モデルのアウトプットは不十分で、創造性に欠けています。このソリューションは受け入れられるかもしれませんが、この病院のバーチャル・アシスタントは他のソリューションと差別化できていません。もう一度同じ質問をしてみよう。今度は、「思いやりがあり、プロフェッショナルで経験豊富な獣医師」という役割を割り当ててみましょう。

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = "You are a compassionate, professional, and experienced veteraniarian. My pet cat has been sneezing a lot lately and is licking her paws what should I do?" 
 
# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


モデルの応答における言葉は、単純なシステム・プロンプトになかった文脈の感情的な認識を語っているため、より人間的なものになっています。このモデルはこのトーンを達成すると同時に、完成度の高い適切な回答を提供することで、よりニュアンスが考慮された回答であることを証明しました。このような人間と人工知能とのやり取りは、組織やアプリケーション内の主観的な期待に応える一つの方法です。

ロール・プロンプトが重要なのはなぜですか?

生成AIアプリケーションにさらなるパーソナライゼーションと意味のある対話を追加しようとしている開発者や企業の場合は、ロール・プロンプトがどのように影響を与えるかを理解することを検討してください。最新の言語モデルのほとんどは、ロール・プロンプトが可能です。一部の基本モデルは役割のニュアンスを把握したり、応答の一貫性を維持したりできない場合がありますが、その他の基本モデルは特定の方法で応答するようにファイン・チューニングされる場合があります。IBMのGraniteシリーズなどの基盤モデルは、大量の企業固有のデータに基づいて学習され、ビジネス・ニーズに基づいてカスタマイズされた応答を生成するための役割を引き受けるモデルの能力を高めています。

まとめ

ロール・プロンプトでは、モデルが割り当てられたペルソナからの期待に常に基づいて実行するようにします。プロンプト内でLLMに歴史的な人物の役割を割り当てることで、シンプルなサンプルを実行して、歌詞をソネットに書き換えました。次に、チャットボットの応答について、ロール・プロンプトが適用されたモデルと適用されていないモデルのアウトプットを比較しました。ロール・プロンプトが提供する応答が、その言語でよりニュアンスが考慮されて役立つように対処し、より高度なカスタマー・ケアを提供したという結論に達しました。

関連ソリューション
IBM watsonx.ai

AI開発者向けの次世代エンタープライズ・スタジオであるIBM watsonx.aiを使用して、生成AI、基盤モデル、機械学習機能をトレーニング、検証、チューニング、導入しましょう。わずかなデータとわずかな時間でAIアプリケーションを構築できます。

watsonx.aiの詳細はこちら
人工知能ソリューション

IBMの業界をリードするAIの専門知識とソリューションのポートフォリオを活用して、AIをビジネスの業務に利用しましょう。

AIソリューションの詳細はこちら
人工知能(AI)コンサルティングおよびサービス

IBMコンサルティングAIサービスは、企業がAIをトランスフォーメーションに活用する方法を再考するのに役立ちます。

AIサービスの詳細はこちら
次のステップ

AIを使用することで、IBM Concertはお客様のオペレーションに関する重要な洞察を明らかにし、改善のためのアプリケーション固有の推奨事項を提供します。Concertがどのようにビジネスを前進させることができるかをご覧ください。

Concertの詳細はこちら ビジネス・プロセス自動化ソリューションの詳細はこちら