Agent.run() を呼び出すと、ステートレスな単一のエージェント実行が作成されます。しかしこの実行を継続したい場合、つまり複数ターンの会話を行いたい場合はどうでしょう?そこでセッションが役立ちます。セッションは連続的な実行のコレクションです。
Agno : ユーザガイド : コンセプト : エージェント – セッション
作成 : クラスキャット・セールスインフォメーション
作成日時 : 07/17/2025
バージョン : Agno 1.7.3
* 本記事は docs.agno.com の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
◆ お問合せ : 下記までお願いします。
- クラスキャット セールス・インフォメーション
- sales-info@classcat.com
- ClassCatJP
Agno ユーザガイド : コンセプト : エージェント – セッション
Agent.run() を呼び出すと、ステートレスな単一のエージェント実行が作成されます。
しかしこの実行を継続したい場合、つまり複数ターンの会話を行いたい場合はどうでしょう?そこでセッションが役立ちます。セッションは連続的な実行のコレクションです。
実際には、セッションはユーザとエージェント間の複数ターンの会話です。session_id を使用して、複数の実行に渡る会話履歴と状態を結びつけることができます。
幾つかの主要なコンセプトを概説しましょう :
- セッション : セッションはユーザとエージェント間の複数ターンの会話のような連続的な実行のコレクションです。セッションは session_id により識別され、各ターンは実行です。
- 実行 (Run) : エージェントとのすべてのインタラクション (i.e. チャット or ターン) は実行と呼ばれます。実行は run_id により識別され、Agent.run() は呼び出されると新しい run_id を作成します。
- メッセージ : モデルとエージェント間で送信される個々のメッセージです。メッセージはエージェントとモデル間の通信プロトコルです。
エージェントにより単一の実行が作成される例から始めましょう。run_id は session_id とともに自動的に生成されます (何故なら会話を継続するためにそれを提供しなかったからです)。この実行はまだユーザに関連付けられていません。
from typing import Iterator
from agno.agent import Agent, RunResponse
from agno.models.openai import OpenAIChat
from agno.utils.pprint import pprint_run_response
agent = Agent(model=OpenAIChat(id="gpt-4o-mini"))
# Run agent and return the response as a variable
agent.print_response("Tell me a 5 second short story about a robot")
マルチユーザ、マルチセッション・エージェント
エージェントとやり取りする各ユーザはセッションの一意のセットを取得し、複数のユーザが同じエージェントと同時にやり取りすることを可能にします。
user_id を設定して、ユーザをエージェントとのセッションに接続します。
以下の例では、session_id を設定して、複数のユーザと同時に複数ターンの会話を行う方法を実演します。本番環境では、session_id は自動生成されます。
Note : Multi-user, multi-session currently only works with Memory.v2, which will become the default memory implementation in the next release.
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.memory.v2 import Memory
agent = Agent(
model=OpenAIChat(id="gpt-4o-mini"),
# Multi-user, multi-session only work with Memory.v2
memory=Memory(),
add_history_to_messages=True,
num_history_runs=3,
)
user_1_id = "user_101"
user_2_id = "user_102"
user_1_session_id = "session_101"
user_2_session_id = "session_102"
# Start the session with user 1
agent.print_response(
"Tell me a 5 second short story about a robot.",
user_id=user_1_id,
session_id=user_1_session_id,
)
# Continue the session with user 1
agent.print_response("Now tell me a joke.", user_id=user_1_id, session_id=user_1_session_id)
# Start the session with user 2
agent.print_response("Tell me about quantum physics.", user_id=user_2_id, session_id=user_2_session_id)
# Continue the session with user 2
agent.print_response("What is the speed of light?", user_id=user_2_id, session_id=user_2_session_id)
# Ask the agent to give a summary of the conversation, this will use the history from the previous messages
agent.print_response(
"Give me a summary of our conversation.",
user_id=user_1_id,
session_id=user_1_session_id,
)
最後の N セッションからメッセージを取得
幾つかのシナリオでは、会話のコンテキストや連続性を提供するために、最後の N セッションからメッセージを取得したい場合があります。
これを実現できる方法の例が以下です :
# Remove the tmp db file before running the script
import os
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.storage.sqlite import SqliteStorage
os.remove("tmp/data.db")
agent = Agent(
model=OpenAIChat(id="gpt-4o-mini"),
user_id="user_1",
storage=SqliteStorage(table_name="agent_sessions_new", db_file="tmp/data.db"),
search_previous_sessions_history=True, # allow searching previous sessions
num_history_sessions=2, # only include the last 2 sessions in the search to avoid context length issues
show_tool_calls=True,
)
session_1_id = "session_1_id"
session_2_id = "session_2_id"
session_3_id = "session_3_id"
session_4_id = "session_4_id"
session_5_id = "session_5_id"
agent.print_response("What is the capital of South Africa?", session_id=session_1_id)
agent.print_response("What is the capital of China?", session_id=session_2_id)
agent.print_response("What is the capital of France?", session_id=session_3_id)
agent.print_response("What is the capital of Japan?", session_id=session_4_id)
agent.print_response(
"What did I discuss in my previous conversations?", session_id=session_5_id
) # It should only include the last 2 sessions
以上