跳转至

MySQL 存储

通用的 Agent 接入、提取模式和工具配置请参阅使用与配置

适用场景:生产环境、需要 ACID 保证、复杂查询

import memorymysql "trpc.group/trpc-go/trpc-agent-go/memory/mysql"

dsn := "user:password@tcp(localhost:3306)/dbname?parseTime=true"
mysqlService, err := memorymysql.NewService(
    memorymysql.WithMySQLClientDSN(dsn),
    memorymysql.WithSoftDelete(true),
)
if err != nil {
    panic(err)
}

配置选项

  • WithMySQLClientDSN(dsn): MySQL DSN 连接字符串(推荐,必需 parseTime=true
  • WithMySQLInstance(name): 使用预注册的 MySQL 实例
  • WithSoftDelete(enabled): 启用软删除(默认 false)
  • WithTableName(name): 自定义表名(默认 "memories")
  • WithMemoryLimit(limit): 每用户记忆上限
  • WithCustomTool(toolName, creator): 注册自定义工具
  • WithToolEnabled(toolName, enabled): 启用/禁用工具
  • WithExtraOptions(...options): 传递给 MySQL 客户端的额外选项
  • WithSkipDBInit(skip): 跳过表初始化(适用于无 DDL 权限场景)

同时设置时,WithMySQLClientDSN 的优先级高于 WithMySQLInstance

DSN 示例

root:password@tcp(localhost:3306)/memory_db?parseTime=true&charset=utf8mb4

默认表结构(自动创建):

WithTableName 会替换以下 DDL 中的 memories

CREATE TABLE memories (
    app_name VARCHAR(255) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    memory_id VARCHAR(64) NOT NULL,
    memory_data JSON NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP NULL DEFAULT NULL,
    PRIMARY KEY (app_name, user_id, memory_id),
    INDEX idx_app_user (app_name, user_id),
    INDEX idx_deleted_at (deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

资源清理:使用完毕后需调用 Close() 方法释放数据库连接:

defer mysqlService.Close()