エージェントでプロンプトを呼び出す¶
プロンプトテンプレートはDataRobotで作成された再利用可能なプロンプトで、多くの場合、エージェントコードで定義されるプレースホルダー変数({{ topic }}など)が含まれています。 プロンプトテンプレート自体はDataRobotに保存され、複数のバージョンを持つことができるため、エージェントコードを変更することなく、プロンプトの反復と微調整を行うことができます。
トークン数の制限
プロンプトテンプレートは、LLMの最大出力トークン数の制限にカウントされます。
エージェントコードでは、フレームワークはDataRobot APIを介してテンプレートを取得し、変数値を提供します。 その後、これらの変数はテンプレートテキストに代入され、LLMに送信される最終プロンプトが作成されます。 初期入力フォーマットの処理はフレームワークテンプレートごとに異なるため、DataRobotのプロンプトテンプレートの使用方法はさまざまです。 Before modifying the myagent.py file, create a prompt template in DataRobot and note the template ID. 必要に応じて、使用する特定のプロンプトテンプレートのバージョンIDもメモします。 Then, in the myagent.py file, modify the appropriate method or property in the MyAgent class based on the framework.
以下の例は、このリポジトリ内の既存のフレームワークテンプレートへの変更を示しています。 各例では、{{ topic }}変数を含むプロンプトテンプレートがDataRobotに存在することを前提としています。 たとえば、プロンプトテンプレートはWrite an article about {{ topic }} in 1997.となります。エージェントに送信されるユーザープロンプトは、ユーザー入力を{{ topic }}変数に置き換えることによって、このテンプレートと結合されます。
LangGraphは、ChatPromptTemplateを返すprompt_templateプロパティを使用します。 ファイルの先頭にimport datarobot as drを追加し、DataRobotのプロンプトテンプレートを使用するようにこのプロパティを修正します。
# 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プロパティは、最初のユーザー入力に使用されます。 In the Agentic Starter and related templates, each graph node is built with LangChain's create_agent and a system_prompt argument (often wrapped with make_system_prompt from datarobot_genai). To ensure all agents follow the prompt template instructions, incorporate the formatted template text into each node's system_prompt (not the prompt= parameter used by some other LangGraph examples such as langgraph.prebuilt.create_react_agent). See Customize agents (Modify agent prompts, LangGraph tab) for the API used in DataRobot templates.
LlamaIndexは、文字列を返すmake_input_messageメソッドを使用します。 ファイルの先頭にimport datarobot as drを追加し、DataRobotのプロンプトテンプレートを使用するようにこのメソッドを修正します。
# 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は、プロンプトテンプレートを含めることができるエージェントプロパティ(goal、backstory)を使用します。 ファイルの先頭にimport datarobot as drを追加し、DataRobotのプロンプトテンプレートを使用するようにエージェントのプロパティを修正します。
# 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()を使用します。