Skip to content

エージェントでプロンプトを呼び出す

プロンプトテンプレートはDataRobotで作成された再利用可能なプロンプトで、多くの場合、エージェントコードで定義されるプレースホルダー変数({{ topic }}など)が含まれています。 プロンプトテンプレート自体はDataRobotに保存され、複数のバージョンを持つことができるため、エージェントコードを変更することなく、プロンプトの反復と微調整を行うことができます。

トークン数の制限

プロンプトテンプレートは、LLMの最大出力トークン数の制限にカウントされます。

エージェントコードでは、フレームワークはDataRobot APIを介してテンプレートを取得し、変数値を提供します。 その後、これらの変数はテンプレートテキストに代入され、LLMに送信される最終プロンプトが作成されます。 初期入力フォーマットの処理はフレームワークテンプレートごとに異なるため、DataRobotのプロンプトテンプレートの使用方法はさまざまです。 agent.pyファイルを修正する前に、DataRobotでプロンプトテンプレートを作成し、テンプレートIDをメモします。 必要に応じて、使用する特定のプロンプトテンプレートのバージョンIDもメモします。 次に、agent.pyファイルで、フレームワークに基づいてMyAgentクラスの適切なメソッドまたはプロパティを変更します。

以下の例は、このリポジトリ内の既存のフレームワークテンプレートへの変更を示しています。 各例では、{{ topic }}変数を含むプロンプトテンプレートがDataRobotに存在することを前提としています。 たとえば、プロンプトテンプレートはWrite an article about {{ topic }} in 1997.となります。エージェントに送信されるユーザープロンプトは、ユーザー入力を{{ topic }}変数に置き換えることによって、このテンプレートと結合されます。

LangGraphは、ChatPromptTemplateを返すprompt_templateプロパティを使用します。 ファイルの先頭にimport datarobot as drを追加し、DataRobotのプロンプトテンプレートを使用するようにこのプロパティを修正します。

Using DataRobot prompt templates in LangGraph
# Added to imports
import datarobot as dr

# Modified in MyAgent class
@property
def prompt_template(self) -> ChatPromptTemplate:
    prompt_template = dr.genai.PromptTemplate.get("PROMPT_TEMPLATE_ID")
    prompt_template_version = prompt_template.get_latest_version()
    # To use a specific version instead: 
    # prompt_template_version = prompt_template.get_version("PROMPT_VERSION_ID")
    # Convert {{ variable }} format to {variable} format for LangGraph's ChatPromptTemplate
    # The {topic} variable is filled by the framework at runtime
    prompt_text = prompt_template_version.to_fstring()
    return ChatPromptTemplate.from_messages(
        [
            (
                "user",
                prompt_text,
            ),
        ]
    ) 

プロンプトテンプレートID("PROMPT_TEMPLATE_ID")をDataRobotの適切なテンプレートIDに置き換えます。 この例では、get_latest_version()を用いて、再デプロイせずに自動的に最新バージョンを使用します。

この例では、to_fstring()を使用して、テンプレートの{{ topic }}変数を{topic}形式に変換します。LangGraphのChatPromptTemplateは、これを実行時に置換します。 プロンプトテンプレートの変数がバージョンによって変わる場合(たとえば、新しいバージョンでは{{ topic }}ではなく{{ subject }}が使用される場合)、すべての変数を適切に処理するようにこのコードを更新してください。そうしないと、新しいバージョンを取得する際にコードが動作しなくなる可能性があります。

マルチエージェントワークフロー

prompt_templateプロパティは、最初のユーザー入力に使用されます。 各エージェントは、create_react_agentに独自のpromptパラメーターを持っています。 すべてのエージェントがプロンプトテンプレートの指示に従うようにするには、フォーマットされたプロンプトテンプレートをcreate_react_agent内の各エージェントのpromptパラメーターに組み込みます。

LlamaIndexは、文字列を返すmake_input_messageメソッドを使用します。 ファイルの先頭にimport datarobot as drを追加し、DataRobotのプロンプトテンプレートを使用するようにこのメソッドを修正します。

Using DataRobot prompt templates in LlamaIndex
# Added to imports
import datarobot as dr

# Modified in MyAgent class
def make_input_message(self, completion_create_params: Any) -> str:
    user_prompt_content = extract_user_prompt_content(completion_create_params)
    prompt_template = dr.genai.PromptTemplate.get("PROMPT_TEMPLATE_ID")
    prompt_template_version = prompt_template.get_latest_version()
    # To use a specific version instead: 
    # prompt_template_version = prompt_template.get_version("PROMPT_VERSION_ID")
    # Render the prompt template with variables (assumes {{ topic }} in the template)
    prompt_text = prompt_template_version.render(topic=user_prompt_content)
    return prompt_text 

プロンプトテンプレートID("PROMPT_TEMPLATE_ID")をDataRobotの適切なテンプレートIDに置き換えます。 この例では、get_latest_version()を用いて、再デプロイせずに自動的に最新バージョンを使用します。

この例では、プロンプトテンプレートに{{ topic }}変数が含まれていることを前提としています。 プロンプトテンプレートの変数がバージョンによって変わる場合(たとえば、新しいバージョンでは{{ topic }}ではなく{{ subject }}が使用される場合)、すべての変数を適切に処理するようにこのコードを更新してください。そうしないと、新しいバージョンを取得する際にコードが動作しなくなる可能性があります。

マルチエージェントワークフロー

make_input_messageメソッドは、最初の入力メッセージにのみ影響します。 各エージェントには、独自のsystem_promptプロパティがあります。 すべてのエージェントがプロンプトテンプレートの指示に従うようにするには、フォーマットされたプロンプトテンプレートを各エージェントのsystem_promptプロパティに組み込みます。

CrewAIは、プロンプトテンプレートを含めることができるエージェントプロパティ(goalbackstory)を使用します。 ファイルの先頭にimport datarobot as drを追加し、DataRobotのプロンプトテンプレートを使用するようにエージェントのプロパティを修正します。

Using DataRobot prompt templates in CrewAI
# Added to imports
import datarobot as dr

# Modified in MyAgent class
@property
def agent_planner(self) -> Agent:
    prompt_template = dr.genai.PromptTemplate.get("PROMPT_TEMPLATE_ID")
    prompt_template_version = prompt_template.get_latest_version()
    # To use a specific version instead: 
    # prompt_template_version = prompt_template.get_version("PROMPT_VERSION_ID")
    # For properties that use {topic} (f-string format), use to_fstring()
    prompt_text = prompt_template_version.to_fstring()

    return Agent(
        role="Planner",
        goal=f"Plan engaging and factually accurate content on {{ topic }}. {prompt_text}",
        backstory=f"You're working on planning a blog article about the topic: {{ topic }}. {prompt_text} "
        "You collect information that helps the audience learn something and make informed decisions. "
        "Your work is the basis for the Content Writer to write an article on this topic.",
        # ... other properties
    ) 

プロンプトテンプレートID("PROMPT_TEMPLATE_ID")をDataRobotの適切なテンプレートIDに置き換えます。 この例では、get_latest_version()を用いて、再デプロイせずに自動的に最新バージョンを使用します。

この例では、agent_plannerを修正し、そのgoalおよびbackstoryプロパティにおいてプロンプトテンプレートを使用するようにします。 これらのプロパティは{topic}(CrewAIが実行時に入力するf-string形式)を使用しているため、この例ではto_fstring()を使用して{{ topic }}{topic}形式に変換し、CrewAIがユーザーの入力に置き換えることができるようにします。

この例では、プロンプトテンプレートに{{ topic }}変数が含まれていることを前提としています。 プロンプトテンプレートの変数がバージョンによって変わる場合(たとえば、新しいバージョンでは{{ topic }}ではなく{{ subject }}が使用される場合)、すべての変数を適切に処理するようにこのコードを更新してください。そうしないと、新しいバージョンを取得する際にコードが動作しなくなる可能性があります。

マルチエージェントワークフロー

指示に従う必要がある各エージェントのgoalまたはbackstoryプロパティにプロンプトテンプレートを適用します。 {topic}を使用するプロパティには、to_fstring()を使用します。 プレーンテキストプロパティには、render()を使用します。