Nebius-Cookbook AWS Strands 课程中如何用 FileSessionManager 让代理跨多次调用记住会话

发布时间:2026/9/15 15:53:57
Nebius-Cookbook AWS Strands 课程中如何用 FileSessionManager 让代理跨多次调用记住会话 Nebius-Cookbook AWS Strands 课程中如何用 FileSessionManager 让代理跨多次调用记住会话【免费下载链接】Nebius-CookbookA collection of projects showcasing RAG, agents, workflows, and other AI use cases项目地址: https://gitcode.com/GitHub_Trending/ne/Nebius-CookbookAWS Strands 的代理默认是无状态的每次返回回答后就不保留任何上下文。Nebius-Cookbook 的 AWS Strands 课程第 2 课course/aws_strands/02_session_management/演示了如何用 Strands 自带的FileSessionManager把对话历史保存到本地 JSON 文件让同一个session_id下的代理在多次调用之间记住之前的交互——包括跨进程重启的情况。本教程按课程源码走一遍完整配置与验证流程Python 版本需 3.11 及以上模型调用需要 Nebius API Key。准备条件环境、依赖与 API Key课程内容在仓库的 02_session_management 目录核心文件是 main.py 和 pyproject.toml。pyproject.toml 声明的运行环境是requires-python 3.11依赖清单如下[project] name 2-session-management version 0.1.0 requires-python 3.11 dependencies [ litellm1.77.7, strands-agents1.10.0, strands-agents-builder0.1.10, strands-agents-tools0.2.9, ]在课程目录下用虚拟环境或包管理器安装这些依赖即可版本以pyproject.toml中的下限为准。另外两点需要准备API Keymain.py 通过os.getenv(NEBIUS_API_KEY)读取模型密钥并在脚本开头调用load_dotenv()从.env文件加载环境变量。你可以直接设置环境变量或在脚本同级目录创建.env文件内容形如NEBIUS_API_KEY你的 Nebius API Key其中你的 Nebius API Key替换为你自己的密钥值。python-dotenv脚本第一行from dotenv import load_dotenv依赖python-dotenv但pyproject.toml的依赖清单里并没有列出它。如果运行环境中没有这个包需要自行安装后再运行。FileSessionManager 的工作方式按照 课程 README 的说明FileSessionManager是负责代理记忆的组件创建实例时需要两个关键参数session_id唯一标识一次对话的字符串。可以有很多个会话每个会话拥有各自独立的记忆storage_dir对话历史保存为 JSON 文件的本地文件夹。把它接入代理的方式只有一步把session_manager实例传给Agent构造函数。之后代理会自动保存每一条消息用户和助手各算一条并在每次以相同session_id被调用时加载完整历史。底层机制是FileSessionManager为每个session_id创建一个文件夹文件夹内每条消息存为独立的 JSON 文件。当你用一个已存在的session_id创建代理时管理器会在代理处理新查询之前读取这些 JSON 文件、重建对话历史。这意味着记忆不仅在同一个进程内有效重新运行脚本、用相同session_id新建代理时历史同样会被恢复。示例代码解析main.py课程示例 main.py 完整内容如下可以原样对照阅读或直接运行import os from pathlib import Path from dotenv import load_dotenv from strands import Agent from strands.models.litellm import LiteLLMModel from strands.session.file_session_manager import FileSessionManager # Load environment variables from a .env file load_dotenv() def create_persistent_agent(session_id: str) - Agent: Creates an agent with persistent memory using a FileSessionManager. Args: session_id: A unique identifier for the conversation session. Returns: An Agent instance that can remember past interactions. # Configure the language model model LiteLLMModel( client_args{api_key: os.getenv(NEBIUS_API_KEY)}, model_idnebius/deepseek-ai/DeepSeek-V3-0324, ) # Set up the directory to store session files base_dir Path(__file__).parent.resolve() storage_dir base_dir / tmp / sessions print(fSession files will be stored in: {storage_dir}) # Create a FileSessionManager to handle saving and loading the conversation session_manager FileSessionManager( session_idsession_id, storage_dirstr(storage_dir), ) # Create an agent and attach the session manager # This agent will now have memory! persistent_agent Agent( modelmodel, session_managersession_manager, system_promptYou are a friendly assistant. Keep your responses concise. ) return persistent_agent def main(): Main function to demonstrate a conversational agent with memory. # Each session ID represents a unique conversation history session_id user_arindam_convo_123 agent create_persistent_agent(session_id) print(--- Conversation Start ---) # First interaction: The user introduces themselves print(\nUser: Hey, my name is Arindam.) response1 agent(Hey, my name is Arindam.) print(fAgent: {response1}) # Second interaction: Ask the agent if it remembers the name print(\nUser: Do you remember my name?) response2 agent(Do you remember my name?) print(fAgent: {response2}) print(\n--- Conversation End ---) print(f\nThe agent was able to remember the name because its memory is persisted in the session {session_id}.) if __name__ __main__: main()代码中有四处决定行为的关键配置模型使用LiteLLMModelmodel_id固定为nebius/deepseek-ai/DeepSeek-V3-0324API Key 来自NEBIUS_API_KEY环境变量。换模型只需改model_idLitellm 支持多种提供商见课程 Lesson 1 的说明。存储目录storage_dir被固定为脚本所在目录下的tmp/sessionsbase_dir / tmp / sessionsbase_dir是脚本自身路径。脚本启动时会打印出这个路径方便你事后找文件。会话标识session_id user_arindam_convo_123。想开一段互不干扰的新对话换一个session_id即可每个会话的记忆互相独立。挂载记忆Agent(modelmodel, session_managersession_manager, ...)就是让代理获得记忆的唯一改动不传session_manager的代理每次调用都是失忆的。main()演示了两次连续调用第一次用户说 Hey, my name is Arindam.第二次问 Do you remember my name?。运行示例在课程目录下直接运行python course/aws_strands/02_session_management/main.py在目录内部运行则直接python main.py。脚本会先打印Session files will be stored in: 目录/tmp/sessions随后依次执行两次代理调用并打印各自的回答。两次调用之间没有任何手动保存或加载操作——保存和加载都由FileSessionManager自动完成。验证会话记忆是否生效课程文档给出的判断标准有两层对话层面README 明确说明因为代理会加载之前的消息当用户问 Do you remember my name? 时代理会回溯历史、看到用户之前说过 my name is Arindam 并给出正确回答。所以验证方法是第二次调用的回答应能引用第一次给出的名字 Arindam。如果回答表现出不知道你的名字说明会话没有正确接上——先确认两次调用使用的是同一个session_id以及NEBIUS_API_KEY已正确加载模型调用失败时不会进入正常的对话输出。文件层面FileSessionManager会为每个session_id建一个文件夹里面每条消息是一个 JSON 文件。运行完后检查tmp/sessions/user_arindam_convo_123/目录里面应当出现对应的会话文件夹和 JSON 消息文件。这个目录就是记忆的物理落盘位置也是跨进程恢复历史的数据来源。另外可以验证会话隔离换一个新的session_id再创建代理它不会带出旧会话的内容而用原session_id重新运行脚本代理在处理新查询前会先把已有 JSON 历史读回来。限制与边界课程文档对本例给出的边界如下记忆存储形式固定为本地文件系统的 JSON 文件本课没有演示其他持久化后端示例中storage_dir和model_id都写死在代码里tmp/sessions相对脚本目录、nebius/deepseek-ai/DeepSeek-V3-0324改成自己的路径或模型需要修改 main.py只有把session_manager传给Agent的代理才有记忆同一代码里不带它的代理依然是无状态的。下一步课程 README 的学习路径中本课之后是 Lesson 3: Structured Output用 Pydantic 模型从非结构化文本中提取结构化数据课程总目录见 course/aws_strands/README.md。【免费下载链接】Nebius-CookbookA collection of projects showcasing RAG, agents, workflows, and other AI use cases项目地址: https://gitcode.com/GitHub_Trending/ne/Nebius-Cookbook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考