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。