ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

agno Agent 状态与会话如何持久化到 PostgreSQL 并跨进程恢复?

agno Agent 状态与会话如何持久化到 PostgreSQL 并跨进程恢复? agno Agent 状态与会话如何持久化到 PostgreSQL 并跨进程恢复【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno如果你的 agno Agent 在进程重启后丢失了对话历史和结构化状态比如购物清单、计数器、工作流进度需要在 PostgreSQL 中持久化会话session并且让新进程通过同一个session_id恢复原有上下文本文给出仓库 Cookbook 中对应的完整操作路径启动数据库、配置PostgresDb、绑定到 Agent并验证数据确实落库、跨进程可恢复。适用前提是 agno 的 Agent以及 Team/Workflow存储后端为 PostgreSQL示例在 agno 仓库cookbook目录的示例环境中测试通过见文末测试记录。准备环境启动 PostgreSQL 容器并安装驱动agno 的 PostgreSQL 示例统一使用agnohq/pgvector:18镜像监听宿主机5532端口库名、用户名、密码均为ai。仓库提供的启动脚本 run_pgvector.sh 内容如下docker run -d \ -e POSTGRES_DBai \ -e POSTGRES_USERai \ -e POSTGRES_PASSWORDai \ -e PGDATA/var/lib/postgresql \ -v pgvolume:/var/lib/postgresql \ -p 5532:5432 \ --name pgvector \ agnohq/pgvector:18这是docker run -d后台启动容器的命令会占用宿主机 5532 端口并创建名为pgvolume的数据卷重复执行前请确认端口未被占用、容器名pgvector未被占用。驱动安装来自 postgres/README.mduv pip install psycopg2-binary另外示例脚本调用 OpenAI 模型需要可用的OPENAI_API_KEY环境变量05_state_and_session目录的 README 要求通过direnv allow加载环境变量。配置 PostgresDbdb_url 与 session_table核心配置只有两行见 persistent_session.pyfrom agno.db.postgres import PostgresDb db_url postgresqlpsycopg://ai:ailocalhost:5532/ai db PostgresDb(db_urldb_url, session_tablesessions)db_url与上面的 Docker 容器一一对应ai:ai是容器里的用户名/密码5532是映射端口末尾的ai是库名。如果你连接的是自建 PostgreSQL替换为 postgres/README.md 中的形式postgresqlpsycopg://username:passwordlocalhost:5432/database。session_table指定会话表名示例中使用sessions不带该参数时由 agno 使用默认表名postgres_for_agent.py的写法。同一台数据库上跑多个示例脚本时建议像仓库示例一样显式指定表名避免相互混用。异步场景可选用AsyncPostgresDb构造参数相同见 postgres/README.md 与 async_postgres 示例。绑定 Agent会话历史与结构化状态一起落库agno 中三者的分工引自 agent_with_state_management.py 的注释StateAgent 主动管理的结构化数据列表、计数器、标志位即session_stateStorage对话历史“我们讨论过什么”即会话/run 记录Memory用户偏好属于 Learning 模块不在本文范围。绑定到 Agent 的最小写法from agno.agent.agent import Agent from agno.db.postgres import PostgresDb from agno.models.openai import OpenAIResponses db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai, session_tablesessions) agent Agent( modelOpenAIResponses(idgpt-5-mini), dbdb, session_idsession_storage, add_history_to_contextTrue, ) agent.print_response(Tell me a new interesting fact about space)各参数在本场景中的作用db指定会话存储后端运行结束后会话与状态写入该 PostgreSQLsession_id会话标识。跨进程恢复的关键就是复用同一个session_id——新进程用相同的db_url、session_table和session_id构造 Agent 时会读回同一个会话add_history_to_contextTrue把历史对话注入上下文Agent 才能记得之前的内容。带结构化状态的完整示例见 agent_with_state_management.py该示例用 SQLite把SqliteDb换成PostgresDb即可绑定方式一致。要点def add_to_watchlist(run_context: RunContext, ticker: str) - str: Add a stock ticker to the watchlist. watchlist run_context.session_state.get(watchlist, []) watchlist.append(ticker) run_context.session_state[watchlist] watchlist return fAdded {ticker} to watchlist. agent Agent( modelGemini(idgemini-3.6-flash), session_state{watchlist: []}, # 初始状态 tools[add_to_watchlist], dbagent_db, # 换成 PostgresDb(...) add_session_state_to_contextTrue, # 状态注入 instructions 的 {watchlist} add_history_to_contextTrue, )工具函数通过run_context.session_state[key]读写状态add_session_state_to_contextTrue时instructions 中可用{watchlist}占位符引用当前状态值。跨进程恢复新进程用同一 session_id 读回跨进程恢复不需要显式调用导入命令新进程只要用相同的db_url、session_table和session_id构造 Agent会话即从 PostgreSQL 读回。仓库示例中对应的读回方式有三种会话内继续对话直接再次print_response历史自动注入上下文。03_chat_history.py 展示了从 PostgresDb 存储的会话中取回历史记录db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai, session_tablesessions) agent Agent( modelOpenAIChat(idgpt-5.2), dbdb, session_idchat_history, add_history_to_contextTrue, ) # 两次运行后从数据库读回聊天记录 agent.print_response(Tell me a new interesting fact about space) print(agent.get_chat_history())程序化读取会话状态agent.get_session_state(session_idwatchlist-session) # 返回如 {watchlist: [...]}agent_with_state_management.py 的注释明确说明复用同一个session_idwatchlist-session即可在重启脚本后恢复同一份 watchlist。会话对象查询PostgresDb提供get_session/get_sessions接口见 postgres.py可按session_id取出会话对象做核对。验证数据确实持久化验证分三层均由仓库示例覆盖应用层读回新进程中调用agent.get_session_state(session_id...)或agent.get_chat_history()输出的状态/历史应与上一进程结束前一致。agent_with_state_management.py末尾直接打印Session State: Watchlist: [...]作为核对点。数据库层核对容器创建的是ai库POSTGRES_DBai示例中session_tablesessions表示会话表名。可用docker exec -it pgvector psql -U ai -d ai连接后查看sessions表及 run 相关表中是否存在对应session_id的行。仓库测试记录05_state_and_session 的 TEST_LOG.md 显示persistent_session.py在 PostgreSQL 运行环境下测试通过2026-02-13pgvector runningStatus: PASS耗时 17s。同一目录还覆盖相关变体session_state_multiple_users.py多用户各自独立状态、session_summary.py上下文压缩用的会话摘要、search_past_sessions.py两步检索历史会话。已知问题与限制last_n_session_messages.py曾测试失败TEST_LOG 记录其报ModuleNotFoundError: No module named aiosqlite缺依赖属示例环境问题而非 PostgreSQL 路径问题如跑该示例需自行补装依赖。last_n_session_messages.py未出现在 README 文件清单中但存在于测试日志阅读目录时以实际文件为准。媒体卸载是单向门如果你在启用media_storage的旧版本代码与启用后的数据混跑旧代码读取含media_reference的行会直接抛错导致get_sessions()整体失败见 06_storage/README.md。若你的场景只存文本会话与状态可不涉及此功能。本文所有示例均依赖 Docker 中 5532 端口的ai库换成自建 PostgreSQL 时只需调整db_url配置结构不变。继续深入Team/Workflow 使用 PostgreSQLpostgres_for_team.py、postgres_for_workflow.py会话摘要与限制last_n_runs/conversation_limit04_session_summary_limits.py其他存储后端对比SQLite、MySQL、Redis 等06_storage/README.md。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表