Agent.run()
时,它会创建一个无状态、单一的 Agent 运行。
但是,如果我们想继续这次运行,例如进行多轮对话,该怎么办?这时就需要用到 sessions
。Session 是一系列连续运行的集合。
实际上,Session 是用户和 Agent 之间进行的多轮对话。通过 session_id
,我们可以在多次运行中连接对话历史记录和状态。
让我们概述一些关键概念:
- Session: Session 是连续运行的集合,就像用户和 Agent 之间的多轮对话一样。Session 由
session_id
标识,每一轮是一个 run。 - Run: 与 Agent 的每一次交互(即聊天或轮次)都称为一次 run。Run 由
run_id
标识,调用Agent.run()
时会创建一个新的run_id
。 - Messages: 是在模型和 Agent 之间发送的独立消息。Messages 是 Agent 和模型之间的通信协议。
run_id
和 session_id
(因为我们没有提供 session_id
来继续对话)。这次运行尚未与用户关联。
多用户、多 Session 的 Agent
每个与 Agent 交互的用户都有自己的一组唯一的 Session,并且您可以让多个用户同时与同一个 Agent 进行交互。 设置user_id
可以将用户与其在 Agent 上的 Session 联系起来。
在下面的示例中,我们设置了 session_id
来演示如何同时与多个用户进行多轮对话。在生产环境中,session_id
是自动生成的。
注意:多用户、多 Session 目前仅支持
Memory.v2
,它将在下一个版本中成为默认的内存实现。获取最近 N 个 Session 的消息
在某些场景下,您可能希望获取最近 N 个 Session 的消息,以提供上下文或对话的连续性。 以下是一个实现此目的的示例:要启用从最近 N 个 Session 获取消息,您需要使用以下标志:
search_previous_sessions_history
: 设置为True
以允许搜索之前的 Session。num_history_sessions
: 指定要在搜索中包含的过去 Session 的数量。在此示例中,它设置为2
,只包含最近的 2 个 Session。 建议目前将此数量保持为 2 或 3,因为较大的数量可能会填满模型的上下文长度,从而可能导致性能问题。