memory

package module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 26, 2026 License: MIT Imports: 3 Imported by: 0

README

memory

一个简单的基于 SQLite 的记忆系统,用于给 AI Agent 内嵌使用。

技术栈

  • Go + GORM
  • SQLite (FTS5 全文搜索)
  • 本地优先、单用户、低运维

快速开始

基础功能(无需API Key)
# 初始化数据库(在仓库根目录执行)
go run examples/07_server_init/main.go

# 数据库文件位置(默认工作目录下)
./memory.db
LLM自动提取(使用OpenAI API)
# 1. 设置环境变量
export OPENAI_API_KEY=sk-your-api-key

# 2. 运行完整 LLM 提取演示
go run examples/08_extract_demo/main.go

详细配置说明docs/openai-setup.md

环境变量配置
# 必需
export OPENAI_API_KEY=sk-your-api-key

# 可选(有默认值)
export OPENAI_MODEL=gpt-4o        # 默认模型 (gpt-4o/gpt-4/gpt-3.5-turbo)
export OPENAI_BASE_URL=            # 自定义API端点(如 Azure OpenAI)
export OPENAI_TEMPERATURE=0.3      # 温度参数(0-1,越低越稳定)
export OPENAI_TIMEOUT=30           # API超时时间(秒)
使用本地模型(Ollama,免费)
# 1. 安装并启动 Ollama
ollama pull llama3.1:8b

# 2. 配置环境
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.1:8b
export OPENAI_API_KEY=ollama

# 3. 运行
go run examples/08_extract_demo/main.go

自动提取演示

$ go run examples/08_extract_demo/main.go

============================================================
LLM Memory Extraction Demo
============================================================

--- Dialog 1 ---
Input: 我喜欢用深色主题,浅色主题太刺眼了
Status: completed (Processing time: 0ms)

  Memory 1:
    Namespace: profile     👤 用户画像
    Title: User Preference
    Confidence: 0.85

--- Dialog 2 ---
Input: 今天的任务是完成用户登录功能的重构,优先级高
Status: completed (Processing time: 0ms)

  Memory 1:
    Namespace: action      📋 任务行动
    Title: Task Item
    Confidence: 0.90

--- Dialog 3 ---
Input: Go语言的goroutine是轻量级线程,由Go运行时管理
Status: completed (Processing time: 1ms)

  Memory 1:
    Namespace: knowledge   📚 知识
    Title: Knowledge Item
    Confidence: 0.95

Total memories: 4
- [profile] User Preference (conf: 0.85)
- [action] Task Item (conf: 0.90)
- [knowledge] Knowledge Item (conf: 0.95)

项目结构

memory/
├── examples/           # 可执行示例(含 DB 初始化、LLM 完整演示等)
│   ├── 07_server_init/ # 最简:Migrate + 插入/查询/FTS
│   └── 08_extract_demo/# 多轮对话 LLM 提取
├── model/              # GORM 模型(表结构单一来源)
│   └── memory.go
├── service/            # 业务逻辑(Memory、提取、策略、决策等)
├── store/              # DB 连接与 schema:`Migrate` = AutoMigrate + FTS5
│   ├── db.go
│   └── fts.go          # FTS5 虚表与触发器(GORM 无法表达的部分)
├── docs/
│   └── memory.md       # 详细技术方案
├── go.mod
└── README.md

Schema:仅通过 memory.Migrate(db)(或 store.Migrate)初始化。GORM AutoMigrate 创建业务表;store 内建 FTS5 虚表与同步触发器。提取 Prompt 可不建表行:未配置 is_defaultextraction_prompts 时,Extract 使用 service 包内建默认(dialog_extractions.prompt_id 记为 prompt-default-v1)。需要定制时在 DB 中新增/设置 is_default 即可。不使用独立 SQL 迁移目录。

集成说明import "github.com/lengzhao/memory" 即可;也可按需引用子包 modelservicestore

核心特性 v0.3

  • ✅ 多 namespace 分层存储 (transient/profile/action/knowledge)
  • 并发控制:乐观锁 (version 字段)
  • 幂等写入dedupe_key(同一 namespace 内唯一)等
  • TTL 策略:fixed / sliding / manual 三种模式
  • 可恢复删除:软删后保留在 deleted_items
  • 全文搜索:FTS5 虚表 + 自动同步触发器
  • 策略持久化namespace_policies 表存储配置
  • 事件追踪:审计日志 (memory_events)
  • LLM 集成:多 Provider(OpenAI/Claude/Ollama)
  • 自动提取:对话内容分类到上述 4 类 namespace

数据模型

主要表
表名 说明
memory_items 核心记忆条目
memory_links 记忆间关系
namespace_summaries 命名空间摘要
namespace_policies 命名空间策略配置
memory_events 审计事件日志
deleted_items 软删恢复表
memory_merges 合并操作记录(决策引擎)
fts_memory FTS5 全文搜索虚表(由 Migrate 创建)
llm_configs LLM Provider 配置(api_key 由调用方自行加解密后存储)
extraction_prompts 提取 Prompt 模板
dialog_extractions 对话提取记录(幂等检测)

详见 model/memory.godocs/memory.md

许可证

MIT

Documentation

Overview

Package memory provides a simple SQLite-based memory system for AI Agent.

Quick Start:

db, err := memory.InitDB(memory.DefaultConfig())
if err != nil {
    log.Fatal(err)
}
defer memory.Close(db)

if err := memory.Migrate(db); err != nil {
    log.Fatal(err)
}

// Use the database
item := memory.MemoryItem{
    ID:      memory.GenerateID(),
    Content: "Hello, World!",
    // ... other fields
}
db.Create(&item)

Features:

  • Multi-namespace storage (transient, profile, action, knowledge)
  • Full-text search with FTS5
  • TTL/expiration management (fixed, sliding, manual)
  • Optimistic locking for concurrent updates
  • Idempotent writes with dedupe_key
  • LLM-based automatic memory extraction

Index

Constants

View Source
const (
	// Namespace types (simplified 4 categories)
	NamespaceTransient = model.NamespaceTypeTransient // Short-term context
	NamespaceProfile   = model.NamespaceTypeProfile   // User preferences
	NamespaceAction    = model.NamespaceTypeAction    // Tasks/todos
	NamespaceKnowledge = model.NamespaceTypeKnowledge // Facts/skills

	// Item statuses
	StatusActive   = model.ItemStatusActive
	StatusExpired  = model.ItemStatusExpired
	StatusArchived = model.ItemStatusArchived
	StatusDeleted  = model.ItemStatusDeleted

	// Source types
	SourceUser   = model.SourceTypeUser
	SourceAgent  = model.SourceTypeAgent
	SourceImport = model.SourceTypeImport
	SourceSystem = model.SourceTypeSystem

	// TTL policies
	TTLFixed   = model.TTLPolicyFixed
	TTLSliding = model.TTLPolicySliding
	TTLManual  = model.TTLPolicyManual

	// LLM providers
	ProviderOpenAI = model.LLMProviderOpenAI
	ProviderClaude = model.LLMProviderClaude
	ProviderOllama = model.LLMProviderOllama
	ProviderCustom = model.LLMProviderCustom

	// Decision types
	DecisionAdd    = service.DecisionAdd
	DecisionUpdate = service.DecisionUpdate
	DecisionDelete = service.DecisionDelete
	DecisionIgnore = service.DecisionIgnore
	DecisionMerge  = service.DecisionMerge
)

Enum constants

View Source
const (
	CodeNotFound     = service.CodeNotFound
	CodeConflict     = service.CodeConflict
	CodeDuplicate    = service.CodeDuplicate
	CodeValidation   = service.CodeValidation
	CodeUnauthorized = service.CodeUnauthorized
	CodeLLM          = service.CodeLLM
	CodeInternal     = service.CodeInternal
)

Variables

View Source
var (
	// Configuration
	DefaultConfig = store.DefaultConfig

	// Initialization (set Config.AutoMigrate=true to run migration automatically)
	InitDB = store.InitDB
	Close  = store.Close
)

Database functions

View Source
var (
	ErrNotFound     = service.ErrNotFound
	ErrConflict     = service.ErrConflict
	ErrDuplicate    = service.ErrDuplicate
	ErrValidation   = service.ErrValidation
	ErrUnauthorized = service.ErrUnauthorized
	ErrLLM          = service.ErrLLM

	// 结构化错误构造与解析
	ErrorNew  = service.ErrorNew
	ErrorWrap = service.ErrorWrap
	ErrorAs   = service.ErrorAs
)
View Source
var (
	// Create new service/extractor instances
	NewMemoryService  = service.NewMemoryService
	NewPolicyManager  = service.NewPolicyManager
	NewExtractor      = service.NewExtractor
	NewDecisionEngine = service.NewDecisionEngine

	// QuickExtract is a convenience function for code-only extraction.
	// Pass LLM config directly without DB setup.
	QuickExtract = service.QuickExtract
)

Service functions

View Source
var (
	SetLogger = service.SetLogger
	GetLogger = service.GetLogger
)

Logging allows users to configure their own slog handler. Example:

handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug})
memory.SetLogger(slog.New(handler))
View Source
var BuiltinExtractionPrompt = service.BuiltinExtractionPrompt

BuiltinExtractionPrompt 为内建记忆提取模板(与 service 包一致)。

View Source
var (
	// From model package
	GenerateID = model.GenerateID
)

Utility functions

Functions

This section is empty.

Types

type Config

type Config = store.Config

Store types and functions

type DecisionEngine

type DecisionEngine = service.DecisionEngine

Service types

type DecisionRequest

type DecisionRequest = service.DecisionRequest

Service types

type DecisionResult

type DecisionResult = service.DecisionResult

Service types

type DecisionType

type DecisionType = service.DecisionType

Service types

type ErrorCode

type ErrorCode = service.ErrorCode

Error types(实现位于 service 包,根包重导出以单 import 使用)

type ExecutionResult

type ExecutionResult = service.ExecutionResult

Service types

type ExtractRequest

type ExtractRequest = service.ExtractRequest

Service types

type ExtractResult

type ExtractResult = service.ExtractResult

Service types

type ExtractedMemory

type ExtractedMemory = service.ExtractedMemory

Service types

type ExtractionPrompt

type ExtractionPrompt = model.ExtractionPrompt

LLM / extraction (DB 模型,常用者保留在根包)

type Extractor

type Extractor = service.Extractor

Service types

type ForgetRequest

type ForgetRequest = service.ForgetRequest

Service types

type ItemStatus

type ItemStatus = model.ItemStatus

Model types

type LLMProvider

type LLMProvider = model.LLMProvider

Model types

type ListRequest added in v0.1.1

type ListRequest = service.ListRequest

Service types

type MemoryDecision

type MemoryDecision = service.MemoryDecision

Service types

type MemoryError

type MemoryError = service.MemoryError

Error types(实现位于 service 包,根包重导出以单 import 使用)

type MemoryHit

type MemoryHit = service.MemoryHit

Service types

type MemoryItem

type MemoryItem = model.MemoryItem

Core memory types

type MemoryService

type MemoryService = service.MemoryService

Service types

type NamespacePolicy

type NamespacePolicy = model.NamespacePolicy

Model types

type NamespaceType

type NamespaceType = model.NamespaceType

Enum types

type PolicyManager

type PolicyManager = service.PolicyManager

Service types

type RecallRequest

type RecallRequest = service.RecallRequest

Service types

type RememberRequest

type RememberRequest = service.RememberRequest

Service types

type ServiceConfig

type ServiceConfig = service.Config

Service types

type SimilarMemory

type SimilarMemory = service.SimilarMemory

Service types

type SourceType

type SourceType = model.SourceType

Model types

type TTLPolicy

type TTLPolicy = model.TTLPolicy

Model types

type UpdateRequest

type UpdateRequest = service.UpdateRequest

Service types

Directories

Path Synopsis
examples
01_basic command
Example: 基础使用示例 展示memory系统的核心功能:记住、回忆、更新、遗忘
Example: 基础使用示例 展示memory系统的核心功能:记住、回忆、更新、遗忘
02_dedupe command
Example: 重复检测示例 展示如何使用dedupe_key防止重复存储
Example: 重复检测示例 展示如何使用dedupe_key防止重复存储
03_ttl command
Example: TTL(生存时间)示例 展示如何使用TTL自动过期记忆
Example: TTL(生存时间)示例 展示如何使用TTL自动过期记忆
04_callback command
Example: 生命周期回调示例 展示如何使用OnCreated, OnUpdated, OnDeleted等回调
Example: 生命周期回调示例 展示如何使用OnCreated, OnUpdated, OnDeleted等回调
05_extract command
Example: LLM记忆提取示例 展示如何使用Extractor从对话中提取记忆
Example: LLM记忆提取示例 展示如何使用Extractor从对话中提取记忆
06_policy command
Example: Namespace策略管理示例 展示如何使用PolicyManager管理不同namespace的策略
Example: Namespace策略管理示例 展示如何使用PolicyManager管理不同namespace的策略
07_server_init command
Example: 数据库初始化与 GORM/FTS 最简演示
Example: 数据库初始化与 GORM/FTS 最简演示
08_extract_demo command
Example: 基于 LLM 的完整记忆提取演示(多轮对话、落库、打印记录)
Example: 基于 LLM 的完整记忆提取演示(多轮对话、落库、打印记录)
Package model defines GORM models for the memory system.
Package model defines GORM models for the memory system.
Package service provides memory decision engine for intelligent memory management.
Package service provides memory decision engine for intelligent memory management.
Package store provides database initialization and migration utilities.
Package store provides database initialization and migration utilities.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL