
OpenAI Agents 会话记忆实战4 种 Session 存储怎么选【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python你写的多轮对话机器人第二句开始就失忆了OpenAI Agents 的 Session 会话记忆机制帮你把对话历史存下来、接得上不用再手动拼上下文。为什么会失忆Runner.run本身是无状态的每次调用只拿到你当轮传入的文本模型看不到任何前文。于是用户问我的快递到哪了下一轮问什么时候能到模型根本不知道它指哪个快递。Session 就是为了解决这个问题。它的机制很简单运行前Runner 调session.get_items()取出历史拼到本轮输入前面运行后本轮产生的新条目用户输入、回复、工具调用写回 Session之后每一轮重复前两步上下文链就持续接得上了。你不用手动管.to_input_list()这类脏活。会话记忆最小可运行示例下面用内置的SQLiteSession跑两轮客服对话。注意instructions里的结合上文不是必需的它只是让回复更像人话import asyncio from agents import Agent, Runner, SQLiteSession async def main(): agent Agent( name客服助手, instructions结合上文回答简洁直接。, ) session SQLiteSession(ticket_456) # 同一 session_id 同一份记忆 r1 await Runner.run(agent, 我的订单 A100 什么时候发货, sessionsession) print(r1.final_output) r2 await Runner.run(agent, 如果晚于周五帮我改到自提。, sessionsession) print(r2.final_output) asyncio.run(main())第二轮的如果晚于周五没有重复订单号但模型能接上因为 Runner 在运行前自动把第一轮的历史塞进了输入运行后又把第二轮写回。整个文件版示例见 examples/memory/sqlite_session_example.py。4 种 Session 后端横向对比实现类存储介质适用场景注意事项SQLiteSession内存或本地 SQLite 文件本地开发、单机工具不传路径即内存模式进程一退就丢OpenAIConversationsSessionOpenAI Conversations API对话历史托管在 OpenAI 侧依赖 OpenAI API恢复对话需传conversation_idSQLAlchemySession任意 SQLAlchemy 支持的数据库团队生产复用现有数据库用from_url(...)建引擎create_tablesTrue自动建表EncryptedSession包装任意底层 Session含敏感数据的对话是包装器不是独立后端ttl过期条目在读取时静默跳过几个容易忽略的差异SQLiteSession(id)是内存模式SQLiteSession(id, conv.db)才落盘OpenAIConversationsSession()默认新建对话OpenAIConversationsSession(conversation_idconv_123)恢复已有对话同一轮运行里Session 不能和conversation_id/previous_response_id这类运行级续接选项混用二选一EncryptedSession基于 Fernet 加密、HKDF 按 session 派生子密钥适合叠加在任何后端之上。三个实用操作① 回退错误回复用户说刚才答错了时连续pop_item()即可撤销先取走智能体的错误回复再取走当轮的用户输入然后用同一 session 重新跑Runner.runawait session.pop_item() # 移除智能体上轮回复 await session.pop_item() # 移除用户上轮输入② 多个 Agent 共享同一会话把同一个session传给不同的 Agent它们读写同一份历史。分诊、审批、总结几个 Agent 接力处理同一张工单时后手能直接看到前手的全部内容不用各自维护一遍上下文。③ 继承 SessionABC 写自定义后端接 Redis、MongoDB 时照骨架实现即可。SessionABC是抽象基类必须补全四个方法把存取逻辑接到你自己的存储上也可以不继承直接按Session协议实现class MySession(SessionABC): session_id: str session_settings: SessionSettings | None None async def get_items(self, limitNone): ... async def add_items(self, items): ... async def pop_item(self): ... async def clear_session(self): ...Session 选型建议临时演示内存版SQLiteSession(id)零配置进程结束自动清理。单机工具文件版SQLiteSession(id, conv.db)简单可靠。团队生产SQLAlchemySession接现有数据库复用现有连接与权限体系。含敏感数据上面任一后端外加EncryptedSession包装密钥从环境变量或 KMS 取别写死。容易踩的坑session_id 要稳定且可追溯它是记忆的主键。同一用户多端登录却用了不同 id历史就断了建议按业务实体命名如user_12345、ticket_456。别把加密密钥写进代码EncryptedSession的encryption_key一旦丢失历史全部解不开也正因为 HKDF 会按 session 派生密钥session_id 本身参与加密改名等于数据报废。历史越长 token 越贵默认每次运行都拉全量历史。长会话用RunConfig(session_settingsSessionSettings(limitN))只取最近 N 条或用RunConfig.session_input_callback自行裁剪。别把无状态配置当成有状态SQLiteSession内存模式、以及任何进程内后端重启即清零多进程部署必须换共享后端。继续深挖docs/sessions/index.md官方 Sessions 文档全部内置后端与历史裁剪的完整说明。examples/memory/sqlite_session_example.py最小示例末尾还演示了get_items(limit2)的取法。src/agents/memory/session.pySession协议与SessionABC源码四个核心方法定义都在这个文件里。【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考