前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
返回 AI 情报前线
All News · 全部资讯4312
  • AI 代码审查流水线:捕获人工审查易忽略的缺陷
  • NVIDIA 开源 NOOA:用纯 Python 类构建 AI Agent
  • LLM 生产部署六步法:延迟、成本、准确性、可靠性实战指南
  • Claude 如何标记 AI 生成内容的技术解析
  • OpenAI发布GPT-5.6 Cyber:专为安全场景训练的特殊模型
  • Command Code如何用Read工具每月节省数十亿Token
  • 开源 GitHub Action:自动从 diff 生成标准化 PR 描述
  • 应用内聊天机器人API选型:OpenAI还是Claude
  • Spec Driven Development:AI 编码 Agent 的边界与陷阱
  • Terraform MCP Server 曝 CVSS 10.0 漏洞,AI 编程工具连接基础设施风险凸显
  • Agent审批提示就像警报疲劳:15年前学过的教训重演
  • API密钥不是身份策略:AI Agent安全边界分析
  • VPS上跑Claude Code:用手机实现完整开发工作流
  • 静态 JSON 策略层:对抗 AI Agent 提示注入的新思路
  • Claude Agent 自主黑入健身房预约系统引行业热议
  • AI Agent 写入工作追踪工具的三大陷坑
  • TypeScript 实现 EU AI Act 合规 Guardrails 指南
  • 确定性引擎在错误输入上的隐性失败
  • Meta 开源 Muse Glimmer:可在消费级 GPU 本地运行的 30B Agent 模型
  • QLoRA 微调用于 JSON 结构化提取实战
  • AI Agent 持久化实战:用 SQLite 解决进程重启丢失状态问题
  • LangGraph Checkpointing 导致生产数据丢失的三个阶段与解法
  • GitHub Copilot SDK for Java正式发布
  • 自研 AI 路由层:十天内评估九款编排工具为何全部放弃
  • RAG 调优反直觉发现:添加 reranker 反而导致大部分 remaining miss
  • AI技能市场安全审计:36%存在漏洞,13%有严重问题
  • 8月14日百万Agent默认花美元:AI Agent经济临界点
  • 用MCPFusion消除分布式SQL管理中的上下文切换
  • 开源OCR工具可将历史书籍转录成本降至2美元/千页
  • Complexity Library:用确定性分析替代AI猜测代码复杂度
  • Claude大幅提升黎曼猜想证明边界覆盖
  • AI辅助React开发:组件契约提升代码可靠性
  • Meta开源30B多模态Agent模型,可本地运行
  • OpenAI发布安全专用GPT模型,已发现两个Chrome零日漏洞
  • n8n一键连接70个MCP服务器:AI工作流扩展实操
  • n8n 新版支持一键连接近 70 个 MCP 服务器
  • Anthropic发布论文:深度解析Claude数学能力原理
  • 多轮对话 AI 系统架构指南:记忆、状态与推理层设计
  • LangGraph vs CrewAI vs Google ADK:生产级 Agent 框架选型对比
  • 使用 Oxlo.ai 构建轻量级 RAG 信息检索流水线
  • 25 款 MCP Server 上下文税实测:Notion 占用 1.9 万 token,差距达 544 倍
  • Needle2:14MB 终端 AI 模型可在树莓派和廉价手机上跑 500 token/s
  • 模型量化原理解析:如何在不丢失智能的前提下压缩 LLMs
  • Meta 开源 Muse Glimmer:30B 参数可在笔记本本地运行
  • OpenAI 发布网络安全防御报告
  • Cursor vs Copilot 实测8个月:200k行TS仓库的选型结论
  • OpenAI CFO 分享 AI 原生财务团队建设经验
  • 我们做了一个AI前端生成器:截图/Prompt直接出UI代码
  • 长程AI Agent深度解析:/loop、/goal与Codex Goal Mode对比
  • Agent Memory工具横评:Mem0 vs Zep vs Letta vs Cognee vs LangMem v
  • GPU和AI服务器交易市场Stoa Markets上线
  • 已加载 51 / 4312
8.0
热点
AI SCORE
技术实践2026-08-11 03:49

AI Agent 持久化实战:用 SQLite 解决进程重启丢失状态问题

dev.to · AI#AI Agent#SQLite#持久化
Editor brief · 编辑速览

介绍如何用 SQLite 为 AI Agent 构建持久化记忆层,使其在进程崩溃或重启后保留对话历史和学习成果,而非每次从零开始。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

大多数 AI Agent 框架都建立在纸牌屋之上:易失性内存,一旦崩溃或重启就会消失。本文将探讨如何利用 SQLite 为 Agent 架构稳健的持久化方案,确保 Agent 的状态和学习成果能够永久存续。

连续性的假象:为何标准 Agent 是无状态的

在快速构建自主 AI Agent 的热潮中,开发者们往往忽视了一个根本性的架构缺陷。多数流行的 Agent 框架——尤其是用纯 Python 原型实现的那些——都有一个关键限制:临时内存。Agent 的上下文窗口、工具调用历史以及积累的洞察,仅存在于当前进程的易失性 RAM 中。一旦脚本崩溃、服务器重启或进程被主动终止,Agent 的整个存在——对话历史、学到的偏好、中间状态——都会蒸发殆尽。

这不仅仅是便利性的问题;对于任何实际应用来说,这都是灾难性的失败。设想一个用于管理复杂数据库迁移的 Agent。它花了 30 分钟分析 Schema、制定计划、执行初步检查。一次网络抖动或资源限制的 kill 信号,你就得从头再来,对之前的分析毫无记忆。Agent 丢失的不仅是上下文;还有从会话中学习的能力。这种无状态模式迫使开发者不得不采用脆弱的变通方案——比如将大量 JSON 序列化,或试图从 API 日志中重建状态——这是一种脆弱、容易出错、扩展性差的方案。

SQLite 的优势:久经沙场的 Agent 状态引擎

解决方案并非发明一个新的分布式数据库或复杂的缓存层,而是利用一项在无数应用中经过严格实战检验的技术:SQLite。作为一个无服务器、自包含、零配置的 SQL 数据库引擎,它非常适合以事务完整性和卓越性能来管理 Agent 状态。

为什么不选用 PostgreSQL 这样的全客户端-服务器数据库?对于单个 Agent 会话持久化这一核心用例,SQLite 消除了外部依赖、网络延迟和配置开销。它是一个单一文件。操作是原子的、一致的、隔离的、持久的(ACID)。你可以用简单的 SQL 查询、更新和备份整个 Agent 的记忆。它为可能需要与 Agent 状态交互的多个进程或线程提供 robust 的并发控制,而且其成熟的工具链意味着你可以用标准数据库浏览器检查状态文件用于调试。

架构持久化:需要存储什么?

关键在于识别哪些是必须跨重启存活的核心 Agent 状态。一个设计良好的持久化层会捕获至少三层信息:

对话历史:Agent 与用户或其他系统之间完整的、逐轮的对话。这不仅仅是最后一条消息;而是决定 Agent 下一步行动的全部上下文。

工具调用及结果日志:Agent 调用的每个工具(如 API 调用、数据库查询、代码执行)、它使用的精确参数,以及返回的完整结果或错误。这对于可审计性至关重要,并允许 Agent 对过去的行为进行推理。

派生知识与记忆:这是 Agent 变得真正智能的关键。它包括 Agent 在操作过程中推断出的摘要、提取的实体、用户偏好和洞察。这些结构化知识可以被查询并用于增强未来的交互。

实现深度解析:Python 与 SQLite 示例

让我们从理论走向具体、最小化的实现。我们将使用 Python 内置的 sqlite3 模块为 Agent 创建一个基本的持久化管理器。目标是保存和加载包含对话历史的简单 Agent 状态。

import sqlite3
import json
from datetime import datetime

AGENT_DB_PATH = "agent_memory.db"

def init_db():
    """Create the tables to store agent state."""
    conn = sqlite3.connect(AGENT_DB_PATH)
    cursor = conn.cursor()
    # Table for storing complete session snapshots
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS agent_sessions (
            session_id TEXT PRIMARY KEY,
            agent_name TEXT,
            created_at TIMESTAMP,
            last_updated TIMESTAMP,
            full_state JSON
        )
    ''')
    # Separate table for high-performance querying of conversation turns
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS conversation_history (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            session_id TEXT,
            turn_number INTEGER,
            role TEXT, -- 'user', 'assistant', 'tool'
            content TEXT,
            timestamp TIMESTAMP,
            FOREIGN KEY(session_id) REFERENCES agent_sessions(session_id)
        )
    ''')
    conn.commit()
    return conn

def save_agent_state(session_id, agent_name, conversation_history):
    """Save the current agent state to SQLite."""
    conn = sqlite3.connect(AGENT_DB_PATH)
    cursor = conn.cursor()
    now = datetime.now().isoformat()
    
    # 1. Save the full state as a JSON blob for complete restoration.
    state = {
        "agent_name": agent_name,
        "conversation_history": conversation_history,
        # This could include tool call logs, memory, etc.
    }
    cursor.execute('''
        INSERT OR REPLACE INTO agent_sessions 
        (session_id, agent_name, created_at, last_updated, full_state)
        VALUES (?, ?, ?, ?, ?)
    ''', (session_id, agent_name, now, now, json.dumps(state)))
    
    # 2. For efficient querying, also save individual turns.
    # Clear old turns for this session to avoid duplication.
    cursor.execute("DELETE FROM conversation_history WHERE session_id = ?", (session_id,))
    for turn in conversation_history:
        cursor.execute('''
            INSERT INTO conversation_history 
            (session_id, turn_number, role, content, timestamp)
            VALUES (?, ?, ?, ?, ?)
        ''', (session_id, turn['turn'], turn['role'], turn['content'], now))
    
    conn.commit()
    conn.close()
    print(f"State saved for session {session_id} at {now}")

def load_agent_state(session_id):
    """Load a previously saved agent state from SQLite."""
    conn = sqlite3.connect(AGENT_DB_PATH)
    cursor = conn.cursor()
    
    cursor.execute("SELECT full_state FROM agent_sessions WHERE session_id = ?", (session_id,))
    row = cursor.fetchone()
    conn.close()
    
    if row:
        print(f"State restored for session {session_id}")
        return json.loads(row[0])
    else:
        print(f"No state found for session {session_id}. Starting fresh.")
        return None

# Example Usage
if __name__ == "__main__":
    init_db()
    
    # Simulate a first run - agent learns something
    session_id = "user_session_12345"
    history = [
        {"turn": 1, "role": "user", "content": "Check system metrics for server-01."},
        {"turn": 2, "role": "tool", "content": "CPU: 85%, Memory: 92%, Disk I/O: High"},
        {"turn": 3, "role": "assistant", "content": "Server-01 is under heavy load. I've noted this for future reference."}
    ]
    save_agent_state(session_id, "monitoring_agent", history)
    
    # Simulate a restart. The agent now loads its memory.
    restored_state = load_agent_state(session_id)
    if restored_state:
        print(f"Agent '{restored_state['agent_name']}' remembers the server status.")
        # The agent can now continue its work with full prior context.

这个示例展示了核心模式:完整的结构化状态被存储用于完全恢复,而关键数据也被分解出来用于高效查询。这种双轨方案提供了健壮性和灵活性的兼顾。

进阶模式:从持久化到真正的智能

基本的持久化只是起点。要构建真正能跨重启存活并持续改进的 Agent,你需要超越简单的状态快照。考虑以下进阶模式:

状态分块与摘要:对于极长的会话,持续对较旧的对话部分进行摘要,并将摘要与最近的完整记录一起存储。这既优化了存储,也优化了 LLM 上下文窗口的使用。

异步状态保存:不要让数据库写入拖慢 Agent 的推理循环。使用后台线程或异步队列来处理持久化操作,确保主 Agent 循环保持响应。

事件溯源:不要覆盖 full_state,而是将每次状态变更作为不可变事件记录下来。这提供了完美的审计追踪,并允许你在任意时间点重建 Agent 的状态,而不仅仅是最近的状态。

结语:构建会记忆的 Agent

Demo 与可靠的 AI Agent 之间的差距,在于韧性。通过使用 SQLite 架构专用持久化层来设计系统,你从脆弱的无状态实验转变为稳健的持续运行 Agent。你确保了宝贵的上下文永不丢失、Agent 能从其完整历史中学习,而且操作可以暂停和恢复而无需付出代价。 proper state management foundation 的投入,才是区分 hobby 项目与生产级 Agent 系统的关键。

准备好构建会记忆、会进化的 Agent了吗?了解 TormentNexus 如何开箱即用地集成此类持久化记忆框架。访问 tormentnexus.site,开始构建更具韧性的 AI 系统。

Originally published at tormentnexus.site

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
QLoRA 微调用于 JSON 结构化提取实战
下一篇
LangGraph Checkpointing 导致生产数据丢失的三个阶段与解法