Agnoのエージェントを設定する際、プロンプト関連の引数が複数あり、どう設定すれば良いか迷いました。具体的にはdescription
、instructions
、introduction
という似たような引数があり、特にinstructions
とintroduction
に何を設定するべきなのか理解できません。
公式ドキュメントを見ても、説明がやや曖昧で理解が難しかったため、直接ソースコードを参照して調査しました。
プロンプト生成の仕組み
ソースコードを調べたところ、Agent
クラスのget_system_prompt(self)
メソッドでプロンプトが生成される仕組みを確認しました。生成されるプロンプトの基本構造は以下のようになっています。
"""
{description}\n
<your_goal>
{goal}
</your_goal>
<your_role>
{self.role}
</your_role>
<instructions>
- {instructions}
</instructions>
<additional_information>
- The current time is {datetime.now()}
- Your name is: {self.name}.
</additional_information>
"""
プロンプト引数の整理
ソースコードから読み取れるAgent
の主なプロンプト引数を整理しました。
引数 | Type | 意味 |
---|---|---|
system_prompt | str | Callable | Message | システムプロンプトを独自に設定する(以下のパラメータは無視) |
create_default_system_message | bool | システムプロンプトを生成する/しない |
description | str | None | システムプロンプトの冒頭に追加される |
goal | str | None | Agentの目標を設定 |
role | str | None | Agentが演じる役割を設定 |
add_datetime_to_instructions | bool | プロンプト内に現在日時を追加するかどうか |
name | str | None | Agentの名前を設定 |
add_name_to_instructions | bool | プロンプト内に名前を表示するかどうか |
instructions | str | list[str] | Callable | Agentが具体的に実行すべき手順や指示 |
system_prompt について
system_promptを指定すると、上記の表のsystem_prompt以外の引数は全部無視して、system_promptの内容が、プロンプトとして設定されます。
create_default_system_message について
create_default_system_messageをFalseに設定すると、上記の表のcreate_default_system_message以降を無視してシステムプロンプトは生成されません。
introduction について
introduction
引数には特別な使われ方をします。この引数が使用される条件は、storage
が指定されたセッションが最初に生成される時のみです。この時にAgentが最初に生成するメッセージとして使用されます。具体的なユースケースは明確ではありませんが、マルチエージェント連携時の初期導入メッセージなどに使われる可能性があります。
詳しくはソースコードをご覧ください。
以上がAgnoエージェントのプロンプト設定の謎解明のための調査結果でした。