Memos
https://github.com/usememos/memos
https://www.doubao.com/chat/15846553537444098
从提供的代码和文档来看,Memos 的“记忆系统”(即笔记数据的存储与管理功能)主要通过以下几个核心部分实现:
1. 数据模型设计
Memos 的核心数据实体是 Memo(笔记),其结构在 store/memo.go 中定义,包含以下关键字段:
- 基础标识:
ID(系统生成唯一ID)、UID(用户自定义唯一标识) - 标准字段:
CreatorID(创建者ID)、CreatedTs(创建时间)、UpdatedTs(更新时间)、RowStatus(数据状态,如正常/删除) - 内容相关:
Content(笔记内容)、Visibility(可见性:PUBLIC/Protected/PRIVATE)、Pinned(是否置顶) - 扩展信息:
Payload( protobuf 结构,存储附加数据)、ParentUID(关联的父笔记UID,用于评论等关系)
2. 存储层设计
采用分层抽象设计,支持多数据库(SQLite/MySQL/PostgreSQL),核心接口与实现分离:
- 接口定义:在
store/memo.go中定义了CreateMemo、ListMemos、UpdateMemo、DeleteMemo等接口,统一数据操作规范。 - 数据库实现:
- 每个数据库(如 SQLite)在
store/db/{数据库类型}/memo.go中实现具体的 SQL 操作(例如sqlite/memo.go中的CreateMemo方法通过 SQL 插入数据)。 - 针对不同数据库的语法差异(如时间函数、占位符)做了适配(例如 MySQL 使用
FROM_UNIXTIME处理时间,PostgreSQL 使用placeholders生成占位符)。
- 每个数据库(如 SQLite)在
3. 关系管理(MemoRelation)
通过 MemoRelation 模型(store/memo_relation.go)管理笔记间的关联关系(如引用、评论):
- 支持两种关系类型:
REFERENCE(引用)和COMMENT(评论)。 - 通过
memo_relation表存储关联数据,包含MemoID(当前笔记ID)、RelatedMemoID(关联笔记ID)、Type(关系类型)。 - 提供
UpsertMemoRelation、ListMemos等方法维护关系,例如在查询笔记时通过LEFT JOIN关联父笔记信息。
4. 查询与过滤
- 基础查询:通过
FindMemo结构体(store/memo.go)支持多条件过滤(如按ID、创建者、可见性等),并支持分页(Limit/Offset)和排序(按创建时间/更新时间)。 - 高级过滤:集成 CEL(Common Expression Language)表达式解析(
plugin/filter),可将用户输入的过滤条件转换为 SQL 语句(如ListMemos中处理Filters字段),实现灵活的查询逻辑。
5. 缓存机制
为提升性能,引入缓存层(store/cache/cache.go):
- 定义了缓存接口(
Set/Get/Delete等),支持设置过期时间(TTL)。 - 在
Store结构体(store/store.go)中初始化了多个缓存实例(如用户缓存、设置缓存),减少数据库访问频率。
总结
Memos 的记忆系统通过清晰的数据模型、分层存储设计、多数据库支持、关系管理和缓存优化,实现了笔记的创建、查询、更新、删除及关联关系维护,同时保证了数据隐私(通过可见性控制)和系统扩展性(支持多种数据库和过滤规则)。
从提供的代码和文档来看,目前没有直接证据表明Memos与大语言模型(LLMs)有集成或关联。
Memos的核心定位是“轻量级、自托管的笔记工具”(如README.md所述),其核心功能围绕笔记的创建、存储、管理(如可见性控制、关联关系维护)展开,主要实现了:
- 基础的笔记CRUD操作(通过
store/memo.go及各数据库实现) - 笔记间的关联关系管理(引用、评论,通过
memo_relation.go) - 多数据库支持(SQLite/MySQL/PostgreSQL)和查询过滤功能
- 前端状态管理与API交互(
web/src/store/memo.ts)
所有代码片段中均未出现与LLM相关的功能模块(如自然语言处理、模型调用接口、提示词工程等),也没有涉及AI生成内容、智能问答、文本摘要等LLM典型应用场景的实现。
因此,基于现有信息,Memos是一款专注于个人知识管理的笔记工具,与LLMs无直接关联。

482

被折叠的 条评论
为什么被折叠?



