エージェントでプロンプトを呼び出す¶
プロンプトテンプレートは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のプロンプトテンプレートを使用するようにこのプロパティを修正します。
# 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のプロンプトテンプレートを使用するようにこのメソッドを修正します。
# 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()を使用します。