GUIDES / STEP BY STEP

SQLite 与 PostgreSQL 持久化

从会话标识到 SQLite 和 PostgreSQL 持久化,结合复习卡片理解 Agent 短期记忆。

阅读设置

先固定依赖与模型配置

LangChain、LangGraph、模型适配器与 saver 包的版本应一起记录。兼容 OpenAI 协议的服务也有自己的模型名与 base URL,需要以服务商实际支持范围为准。

import os
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent

model = init_chat_model(
    model=os.environ["MODEL_NAME"],
    model_provider="openai",
    api_key=os.environ["MODEL_API_KEY"],
    base_url=os.environ["MODEL_BASE_URL"],
)

这是配置结构示例,需根据安装的适配器版本复现。原稿中的模型名称未核实,因此不作为默认可用模型。

SQLite 本地练习

from pathlib import Path
from langgraph.checkpoint.sqlite import SqliteSaver

Path("resources").mkdir(exist_ok=True)
with SqliteSaver.from_conn_string("resources/checkpoint.db") as checkpointer:
    checkpointer.setup()
    agent = create_agent(model=model, checkpointer=checkpointer)
    config = {"configurable": {"thread_id": "demo-thread"}}
    agent.invoke({"messages": [{"role": "user", "content": "我叫小明"}]}, config=config)
    response = agent.invoke(
        {"messages": [{"role": "user", "content": "我叫什么名字?"}]},
        config=config,
    )
    print(response["messages"][-1].content)

把依赖该连接的调用放在 with 块中。数据库文件持久化不代表已有备份;删除文件、改变路径或更换 thread_id 会改变恢复结果。

PostgreSQL

from langgraph.checkpoint.postgres import PostgresSaver

with PostgresSaver.from_conn_string(os.environ["CHECKPOINT_DB_URL"]) as checkpointer:
    checkpointer.setup()
    agent = create_agent(model=model, checkpointer=checkpointer)
    # 在连接生命周期内执行 invoke

首次 setup 会准备需要的表。生产环境应明确迁移权限和运行权限。若自行创建 psycopg 连接,需按 saver 文档配置 autocommit、row_factory 等参数;不能只把 sqlite3.connect 换成 psycopg.connect 就认定完全等价。

长期运行的服务可在启动/停止生命周期中管理连接池,仍需可靠关闭资源。异步代码则使用对应异步 saver 与 async with。

系列章节

01记忆、状态与会话→02SQLite 与 PostgreSQL 持久化→03复习卡片与验证→