进阶 mastra.ai 2026-10-12 10:15:56 · 30 阅读

第17章 Mastra 存储(Storage)

存储 存储是 Mastra 运行时的持久化层。它让记忆、工作流状态、可观测性数据、评估结果、调度任务以及长时间运行的 Agent 状态在进程重启后依然可用。 存储支撑的功能包括: 记忆(Memory):消息历史、线程、资源和工作记忆。 工作流(Workflows):用于挂起和恢复工作流运行的持久化快照。 可观测性(Observability):追踪、Span、指标、日志和反馈。 评估(Evals):分数、数据集、实验和评估结果。 长时间运行的 Agent:后台任务、调度、目标和线程状态。 什么时候需要配置存储 当状态需要在重启后保留,或者需要跨进程共享时,就应配置持久化存储适配器。持久化存储还能让状态在 Studio 中跨会话可见。默认的内存存储适合测试和短期本地实验,但进程退出后数据就会丢失。 当应用有以下任一需求时,请使用存储: Agent 需要记住历史消息或用户信息。 工作流在重启后需要挂起并恢复。 追踪、指标、日志、分数或反馈需要保留下来供后续分析。 调度和后台任务需要在多次部署之间持续运行。 多个运行时进程需要读写同一份状态。 存储的工作原理 Mastra 的存储按域组织。每个域负责一类运行时数据,一个存储适配器可以实现一个或多个域。 | 域 | 存储内容 | | memory | 线程、消息、资源、工作记忆及其他 Agent 记忆状态 | | workflows | 用于挂起和恢复运行的工作流快照 | | observability | 追踪、Span、指标、日志和反馈 | | scores | 评估分数记录 | | datasets | 评估和实验使用的数据集记录及数据项 | | experiments | 实验运行记录和逐项实验结果 | | backgroundTasks | 后台任务记录和执行状态 | | schedules | 调度定义和触发历史 | | threadState | 持久化的任务、目标和线程状态 | 不同域的适配器支持情况各不相同。完整的域列表和内置 schema 请参考存储概览文档。 按数据形态选择后端 不同域写入和查询的数据类型不同,应根据域的访问模式来选择后端: memory:每次带记忆的 Agent 调用都会读写数据行,适合使用 libSQL、PostgreSQL 或 MongoDB 这类事务型数据库。 observability:写入大量遥测数据,且常做聚合查询,适合使用专门的可观测性存储或 ClickHouse、DuckDB 这类 OLAP 后端。 workflows:存储必须在运行恢复时可用的持久化快照,应使用可靠的持久化数据库。 scores、datasets 和 experiments:存储频率较低的评估数据,通常供后续分析读取。 schedules:存储调度定义和触发历史,使用实现了 schedules 域的适配器即可。 当各域的运维需求不同时,可以使用组合存储,把每个域路由到合适的后端。 本地快速上手 本地开发推荐使用基于文件的 libSQL 数据库,无需单独部署数据库服务器,重启后状态也能保留。 src/mastra/index.ts import { Mastra } from '@mastra/core'
import { LibSQLStore } from '@mastra/libsql'

export const mastra = new Mastra({
storage: new LibSQLStore({
id: 'mastra-storage',
url: 'file:./mastra.db',
}),
})
与 Studio 共享数据库:当 mastra dev 和应用同时运行时,请使用绝对路径,确保两个进程访问同一个数据库:url: 'file:/absolute/path/to/your/project/mastra.db'
像 file:./mastra.db 这样的相对路径是按各进程的工作目录解析的,两个进程的目录可能不同。 Mastra 会在首次使用时自动初始化所需的存储结构。 生产环境配置 生产环境应使用持久化的托管数据库。对大多数团队来说,PostgreSQL 是不错的默认选择:它既能很好地处理事务性运行时状态,也有丰富的托管服务可选。 生产环境建议: 使用带备份、监控和连接池的托管数据库。 避免在多进程生产部署中使用 file:./mastra.db 这类本地文件数据库。 把高流量的领域(尤其是可观测性数据)路由到配置了 composite storage 的专用后端。 在存储适配器或 composite store 上配置保留策略,然后通过定时任务或维护任务调用 storage.prune()。 根据应用实际使用的领域来选择 provider,例如 schedules 功能要求适配器实现 schedules 领域。 配置范围 存储可以在 Mastra 实例级别配置,也可以在 agent 级别配置。 实例级存储 实例级存储由注册在同一个 Mastra 实例上的 agents、workflows、可观测性、evals、schedules 等运行时功能共享。 PostgreSQL MongoDB src/mastra/index.ts import { Mastra } from '@mastra/core'
import { PostgresStore } from '@mastra/pg'

export const mastra = new Mastra({
storage: new PostgresStore({
id: 'mastra-storage',
connectionString: process.env.DATABASE_URL,
}),
})
src/mastra/index.ts import { Mastra } from '@mastra/core'
import { MongoDBStore } from '@mastra/mongodb'

export const mastra = new Mastra({
storage: new MongoDBStore({
id: 'mastra-storage',
uri: process.env.MONGODB_URI,
dbName: process.env.MONGODB_DB_NAME,
}),
})
当大多数运行时领域可以共享同一个数据库时,就使用实例级存储。 Agent 级存储 Agent 级存储配置在 Memory 实例上。它只会覆盖该 Agent 记忆数据的实例级存储配置。 src/mastra/agents/support-agent.tsimport { Agent } from '@mastra/core/agent'
import { Memory } from '@mastra/memory'
import { PostgresStore } from '@mastra/pg'

export const supportAgent = new Agent({
id: 'support-agent',
name: 'Support agent',
instructions: 'Answer customer support questions.',
model: 'openai/gpt-5.6-sol',
memory: new Memory({
storage: new PostgresStore({
id: 'support-agent-storage',
connectionString: process.env.SUPPORT_AGENT_DATABASE_URL,
}),
}),
})
当某个 Agent 需要隔离的记忆边界,或需要使用不同的记忆后端时,就使用 Agent 级存储。 组合式存储 MastraCompositeStore 可以将不同领域路由到不同的后端。当一个数据库无法满足所有领域的需求时,就可以使用它。 下面的示例使用 libSQL 作为默认存储,并将工作流状态路由到 PostgreSQL: src/mastra/index.tsimport { Mastra } from '@mastra/core'
import { MastraCompositeStore } from '@mastra/core/storage'
import { LibSQLStore } from '@mastra/libsql'
import { WorkflowsPG } from '@mastra/pg'

export const mastra = new Mastra({
storage: new MastraCompositeStore({
id: 'composite-storage',
default: new LibSQLStore({
id: 'default-storage',
url: 'file:./mastra.db',
}),
domains: {
workflows: new WorkflowsPG({
connectionString: process.env.DATABASE_URL,
}),
},
}),
})
你还可以把可观测性数据路由到专门的分析后端,具体示例可参考可观测性快速入门。 支持的提供商 每个提供商的页面都包含安装说明、配置参数和使用示例。libSQL 是本地开发的最快选择,因为它不需要单独运行数据库服务器。 Aurora DSQL、ClickHouse、ClickHouse Managed Postgres、Cloudflare D1、Cloudflare KV、Convex、DuckDB、DynamoDB、Elasticsearch、Google Cloud Spanner、LanceDB、libSQL、Mastra、MongoDB、MySQL、MSSQL、Neon Postgres、OracleDB、PostgreSQL、Redis、Valkey、Upstash 下一步 复合存储 存储保留策略 存储模式 Memory 可观测性存储

评论 (0)