下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-l7548nxs--five-layer-memory-method.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-l7548nxs/five-layer-memory-method。AI 的长期记忆层——让 Agent 记得住、找得回、摆得清。五层记忆架构(规则/画像/情节/工作/技能)+ 四象限共享(全局/任务组/私有/绝密)+ 混合检索 + 证据组织。解决 AI 失忆、跨会话记忆、跨任务上下文共享、项目知识沉淀。纯 Python 零依赖,SQLite 单文件总库;自带 MCP 入口,任何 Agent 都能接。
阅读全文 (展开查看完整说明)
概述
煋思维(XingMind)v8.10.3
五层记忆 · 四象限共享 · 混合检索 · 证据组织
纯 Python 零依赖 · SQLite 单文件总库 · 双许可(AGPL-3.0 免费 / 商用需授权)
它是什么
煋思维是给 AI Agent 用的长期记忆层。它不负责「怎么说话」,只管三件事:
| 管什么 | 怎么做 |
|---|---|
| 记得住 | 五层记忆 + SQLite 单文件总库,几十万条写入毫秒级 |
| 找得回 | 混合检索(BM25 为主 + 向量兜底 + 三因子重排),按题型开不同窗口 |
| 摆得清 | recall_context() 把召回的原始对话压成高信噪比证据,并把算好的日期差、版本对照、时间线一并递上 |
第三件事是它和「向量库 + 拼一段上下文」最大的区别:证据是组织过的,不是堆出来的。
一句话:大脑管记和找,模型管想和说。 加总、日期、排序这类确定性活留在代码里;「这两句是不是同一件事」「这算不算一场」这种判断交给模型。两边都不越界。
技能简介
煋思维是 AI Agent 的仿人脑记忆系统。核心是五层记忆 + 四象限共享,上层提供检索、证据组织、自动提取、项目总账这些「把记忆用起来」的能力。
三大核心能力
- 自动记忆提取 — 从对话文本中自动识别 9 类候选记忆(规则/偏好/决策/教训/洞察/知识/待办/项目/工具),建议入库
- 混合检索 — BM25 精确匹配 + 字符 n-gram 向量兜底 + 三因子重排(相关性 × 置信度 × 重要度 × 新鲜度)
- 项目功能总账 — 每个项目一份 7 章节总账(模块/接口/数据表/配置/决策/坑点/待办),从零散记忆到结构化项目知识全景
四象限共享记忆(煋思维核心)
每条记忆带一个 scope(可见范围),用两个维度交叉出四个象限,解决「共享 vs 隔离」:
| 象限 | scope | 谁能读 | 谁能写 | 典型内容 |
|---|---|---|---|---|
| ① 全局共享 | global | 所有任务 | 复盘/规则场景 | 铁律、通用教训、用户画像 |
| ② 任务组共享 | team | 同组任务 | 同组任意任务 | 一组相关任务的共用结论 |
| ③ 私有 | private | 仅本任务 | 仅本任务 | 任务过程、中间结论(可提炼升级) |
| ④ 绝密 | secret | 仅本任务 | 仅本任务 | 密钥、Token、账号、隐私(永不出共享区) |
三条铁律:共享是显式的(默认私有)、私密永不外泄(secret 任何操作不进共享区)、单一写者(共享条目只有一个 owner,他人提交走「建议」)。
五层记忆架构
| 层级 | 名称 | 存储位置 | 特点 |
|---|---|---|---|
| L1 | 规则记忆 | SQLite(md 命令导出 MEMORY.md) | 铁律、原则、底线,永不遗忘 |
| L2 | 用户画像 | SQLite(md 命令导出 USER.md) | 用户偏好、习惯、背景 |
| L3 | 情节记忆 | SQLite 总库 | 项目、决策、待办、洞察、教训、知识(7子类+索引) |
| L4 | 工作记忆 | work_memory/ | 会话状态、临时上下文 |
| L5 | 技能记忆 | SQLite 总库 | 工具经验、技能卡片 |
数据层统一用 SQLite 单文件总库(
xingmind.db),它是唯一事实来源。想用眼睛看 L1/L2,跑
md命令渲染出 MEMORY.md / USER.md —— 那是派生视图:改它不会生效,下次渲染就被覆盖。改内容一律改库。
快速开始
库化入口(Agent 同进程调用)
import sys
sys.path.insert(0, r"<技能目录>")
from xingmind import Memory
mem = Memory("./my_memory") # 传 principal 即启用作用域门(多 Agent 场景)
mem.remember("项目用 SQLite", "单文件总库,写入毫秒级", layer="l1", importance=5)
hits = mem.recall("用什么存数据", limit=8)接进任何 Agent:MCP 入口(v8.10)
不用写胶水。客户端 MCP 配置里指过来就行——零依赖,纯标准库:
{"mcpServers": {"xingmind": {
"command": "python",
"args": ["<技能目录>/mcp_server.py", "--path", "<记忆库目录>"]
}}}也能手动跑:python mcp_server.py --path ./my_memory
| 工具 | 干什么 | 什么时候调 |
|---|---|---|
memory_recall | 检索,只回索引行 | 想确认「记过这件事没有」 |
memory_read | 按 mid 展开(摘要 / 全文) | 索引里看到想要的 |
memory_context | 一步拼好证据(detail=index/full) | 要正式作答 |
memory_record | 写入(自动查重 + 改口消解) | 用户说了值得记的事 |
memory_absorb | 整场对话收进来(留底 + 提取 + 幂等) | 对话结束时 |
memory_stats | 库现状 / 当前身份可见多少条 | 排查与自检 |
多 Agent 场景加 --principal <身份> 即启用作用域门。
memory_record 必须看 written 字段:written=false = 判定为重复、没有入库,返回值里会附一句中文「未写入:与《X》相似 94%」。协议层不会报错(isError=false),所以只判断"有没有报错"会把没记住当成记住了。确实要记就传 on_duplicate="add"(等价命令行 add 的"提示但仍添加")。
三个入口的写入语义(v8.10.1,实测后统一口径)
同一个库,从三条路写进去,语义故意不完全一样,但差异必须能被显式抹平:
| 入口 | 查重 | 冲突消解 | 命中重复时 |
|---|---|---|---|
mem.remember(...)(默认 smart=False) | ❌ | ❌ | 原样照记(给评测/批量导入用,要可复现) |
mem.remember(..., smart=True) | ✅ | ✅ | 丢弃并说明 |
cli add | ✅ | ✅ | 提示但仍添加;--block-dup 才阻断 |
mcp memory_record | ✅ | ✅ | 默认丢弃并回 written=false;传 on_duplicate="add" 即照加 |
差异的合法性来自场景:批量导入不该被去重悄悄改掉条数;Agent 自动记不该把库写膨胀;人亲手敲的 add 说记就要记。不允许的是"没说清"——所以每条路都必须在返回值里把"到底写没写进去"讲明白。
一步到位:recall_context(答题/对话主入口)
如果你只记一个方法,记这个。 它把「召回 → 精炼 → 补算 → 拼证据」一次做完:
ctx = mem.recall_context(
"我上个月买了几件家具?",
reference_date="2023-11-15", # 提问时间,用于算「距今多久」和补时间锚点
complete=lambda p: my_llm(p), # 可选:只给「版本裁决」用;不传则跳过裁决
)
print(ctx["context"]) # 直接塞进 user prompt
print(ctx["stats"]) # {'window': 200, 'hits': 48, 'mem': 35683, ...}它内部按顺序做了这些事,每块都可能不出声(不触发就是空字符串):
| 块 | 什么时候出声 | 靠什么决定 |
|---|---|---|
| 证据主体 | 总是 | 召回 + 精炼(用户原话优先,助手长回复只留开头) |
| 日期计算 | 问「相隔多久/多久以前」 | 代码算日期差,不让模型心算 |
| 版本裁决 | 记忆里同一件事有多个打架的值 | 规则捞候选 → 模型判「改口还是不同场次」 |
| 时间线(粗略) | 问某个会随时间变的属性 | 取最新版本;裁决生效时让位给裁决 |
| 事实核对 | 问的头衔记忆里只有相似词 | 逼模型答「信息不足」,防硬凑 |
| 排序 | 问「先后顺序」 | 按日期排好再给,模型自己排会碎碎念 |
| 偏好推断 | 求建议/推荐 | 从「过去做过的同类选择」里读偏好 |
| 时间锚点 | 题目说「上周/十天前」 | 把那天前后的会话补进来(只补不删,不误杀) |
不要自己再拼一遍。 这些块的顺序和「谁给谁让位」的规则是拿错题换来的,自己复刻必然漏掉某一条。要更多信息就取 stats,要改就改 recall_context。
两档详细程度(v8.10,detail=):
| detail | 给什么 | 用在哪 | 全量 500 题实测 |
|---|---|---|---|
full(默认) | 精炼后的完整证据 | 单轮作答(评测、一次性问答) | 证据主体中位 3 万字符 |
index | 只给索引行(mid/层/类型/日期/一句摘要) | 有工具循环的 Agent,看完再 expand(mid) 展开 1~2 条 | 中位 1.2 千字符,88% 不用发 |
⚠ index 只在能再打开的环境里成立。没有工具循环时(一问一答定生死),只给索引等于不给证据。别为了省 token 把默认值改掉——省下来的会从准确率里扣走。
ctx = mem.recall_context("我上个月买了几件家具?", detail="index")
one = mem.expand("<mid>", level="abstract") # 摘要 + 元信息
full = mem.expand("<mid>", level="full") # 正文初始化
python scripts/memory_manager.py --path ./my_memory init
--name "我的记忆" --project "主项目" --user "用户"添加记忆
python scripts/memory_manager.py --path ./my_memory add
--layer l3 --type decision
--title "方案确认" --content "决定采用A方案"
--tags "决策" --importance 4 --scope team--scope 可选:global(全局共享)/ team(任务组共享)/ private(私有,默认)/ secret(绝密)。
搜索记忆
# 混合搜索(默认)
python scripts/memory_manager.py --path ./my_memory search "关键词"
# 可加 --layer l1(只搜某一层)/ --status active|archived / --limit N / --min-score N
# 三种模式:hybrid / bm25 / semantic
python scripts/memory_manager.py --path ./my_memory search "关键词" --mode semantic自动提取记忆
# 从文本提取(只提取,不落库)
python scripts/memory_manager.py --path ./my_memory extract
--text "记住了,以后都要跑3S架构。决定了用A方案。下次上线前要测试,上次就是教训。"
# 从文件提取
python scripts/memory_manager.py --path ./my_memory extract --file ./dialog.md
# 提取后自动去重入库(一键闭环,v7.2 新增 --remember)
python scripts/memory_manager.py --path ./my_memory extract
--text "我决定了,就用SQLite做总库。" --remember对话自动提取(库化入口,v7.2):Agent 同进程直接调用,一次落库:
from xingmind import Memory
mem = Memory("./my_memory")
r = mem.extract_and_remember("我决定了,就用SQLite做总库。", project="xingjian")
# → {"added": 1, "skipped_dup": 0, ...} 自动提取→去重→入库
# 多轮对话(区分用户拍板 vs Agent 复述,用户原话加权更高)
mem.extract_turns_and_remember([
{"role": "user", "text": "我决定了,用A方案。"},
{"role": "assistant", "text": "好的,那我用A方案。"},
])会话边界写入(v8.10):不靠「记得写」
absorb 治的是最致命的失效模式:宿主忘了调提取,这一整场对话就等于没发生。
mem.absorb([
{"role": "user", "text": "我决定了,新项目一律用 Postgres。"},
{"role": "assistant", "text": "好的。"},
], session_id="s-20261101-1")
# → {'session': 's-20261101-1', 'new_turns': 2, 'added': 1, 'repeated': False,
# 'trace': '.../session_log/s-20261101-1.jsonl'}三步,顺序不能换:
| 步 | 做什么 | 为什么 |
|---|---|---|
| 留底 | 原始轨迹 append 到 session_log/<sid>.jsonl,不进检索层 | 「提取器漏了」≠「系统丢了」:漏了能重蒸,丢了就没了 |
| 提取 | 走 extract_turns_and_remember(去重 + 角色加权) | 已有的活不重写 |
| 幂等 | 按 turn hash 跳过已吸过的轮次 | 边界钩子会被重复触发(Stop/SessionEnd/PreCompact),不幂等就吸三遍 |
- 重复调用 →
repeated: True,一个字都不写 - 提取器升级后重蒸历史:
mem.replay_session("<sid>") - 看收进来过哪几场:
mem.sessions() - 命令行:
absorb --file dialog.jsonl --session s-1(另有--list/--replay/--dry-run) - 不做后台守护进程(会抢资源、抢焦点):只提供「能被钩子挂上去的一次调用」
- 轨迹放文件、不进库,所以也不进
backup的 .db 备份。这是有意分层:
库是「承诺不丢」的东西,轨迹是「还能重蒸」的材料。 要连轨迹一起备份,对整个记忆库目录做文件级备份即可
记忆会更新(v8 新增:冲突消解 + 时间有效性 + 自动蒸馏)
核心变化:煋思维从「记事本」升级成「会学习的记忆系统」——记忆不再只会越存越多,而是会更新、会失效、会提炼。
from xingmind import Memory
mem = Memory("./my_memory")
# 1. 改口消解:新事实推翻旧事实,不追加而是封口旧值(历史保留)
mem.add_smart("每天早上七点起床", "七点起床,雷打不动")
mem.add_smart("每天早上八点半起床", "我改成八点半起床了")
# → {"action": "updated", "superseded": "<旧mid>", "version": 2, "judged_by": "model"}
# 旧值内容保留但 valid_until 封口,新值独立入库 valid_from=封口时刻
# 2. 时间有效性:查「某时刻哪条为真」
mem.valid_at(某时间戳) # 返回该时刻为真的记忆(旧值已失效不会出现)
# 3. 自动蒸馏:同类经验攒够 3 条,提炼成 L1 规则
mem.distill() # → {"distilled_groups": 1, "created_rules": [...]}三条治本原则:
- 冲突不覆盖历史:旧值封口(valid_until)而非删除,可回查「当时是谁」
- 记忆是候选证据,非权威真相:每条记忆带 confidence(置信度)/ authority(来源)/ provenance(溯源),检索时能判断可信度
- 「是不是同一件事」由模型判,不由词表判:
judged_by会写清这次是model还是rule。
走规则时只认技术类主体(数据库/框架…),作息、搬家、预算这类改口会漏——这是降级,不是正常状态。
接上你的模型(一行,可选)
煋思维不托管 key、不挑模型。宿主手里有什么就用什么:
import xingmind
class MyLLM:
def complete(self, prompt: str) -> str:
return 你的模型(prompt)
xingmind.set_host_llm(MyLLM()) # 接上
xingmind.set_host_llm(None) # 断开,全部回退纯规则接了之后自动用在两处,其余器官仍是纯规则、零 token:
| 器官 | 用模型做什么 | 没接时 |
|---|---|---|
改口判定(add_smart / remember(smart=True)) | 判「这两句是不是同一件事被改了说法」 | 退回词表规则,只认技术类主体,生活类改口会漏 |
经验蒸馏(distill) | 把同类经验提炼成一句可复用的规律 | 退回统计版(高频词拼接) |
模型抛异常时自动降级、不卡住写入;降级结果里带 judged_by / 返回 None,调用方能看出这次到底走没走模型。
项目总账
python scripts/memory_manager.py --path ./my_memory ledger init --project "项目名"
python scripts/memory_manager.py --path ./my_memory ledger show --project "项目名"
python scripts/memory_manager.py --path ./my_memory ledger add --section modules --item "模块名"查看状态
python scripts/memory_manager.py --path ./my_memory status
python scripts/memory_manager.py --path ./my_memory list --layer l3
python scripts/memory_manager.py --path ./my_memory switch "新项目"维护 / 迁移 / 注入
# 衰减归档:过期条目转 archived,4星提醒蒸馏
python scripts/memory_manager.py --path ./my_memory maintain
# 导出备份(含全部条目与状态)
python scripts/memory_manager.py --path ./my_memory export ./backup.json
# 从备份恢复到新工作区
python scripts/memory_manager.py --path ./my_memory import ./backup.json
# 目录式披露:输出 Agent 开场可注入的索引片段(默认800字,L3取最近10条)
python scripts/memory_manager.py --path ./my_memory context
python scripts/memory_manager.py --path ./my_memory context --max-chars 500 --recent-l3 5
# 画像主副:主画像(type=profile)直写库,参考画像(type=profile_draft)供他人提建议
# 要看人读视图跑 md 命令;改 md 文件不生效(它是派生物)
python scripts/memory_manager.py --path ./my_memory add --layer l2 --type profile --title "主画像" --content "..."
python scripts/memory_manager.py --path ./my_memory add --layer l2 --type profile_draft --title "建议" --content "..."
python scripts/memory_manager.py --path ./my_memory merge # 把参考画像收敛进主画像并清空备份 / 恢复(防丢核心,v7.0 新增)
总库是单个 xingmind.db 文件,备份就是复制一个文件:
# 记住默认备份目录(写入记忆库,之后 backup 直接用;强烈建议指向「正在同步的网盘文件夹」)
python scripts/memory_manager.py --path ./my_memory backup --set-to "C:Users你WPS Cloud Files煋思维备份"
# 一键备份(用记住的目录,自动 checkpoint + 只保留最近10份防堆满)
python scripts/memory_manager.py --path ./my_memory backup
# 临时备份到别处(不改记住的目录)
python scripts/memory_manager.py --path ./my_memory backup --to ./backup
# 一键恢复(电脑坏了/换新电脑后,用备份 .db 还原)
python scripts/memory_manager.py --path ./my_memory restore "C:Users你WPS Cloud Files煋思维备份xingmind-20261030-010342.db"- 备份文件名带时间戳,可保留多份历史
- 恢复前自动把当前库留档为
.pre-restore.bak,不覆盖不丢 - 备份前自动
checkpoint(把 WAL 合并进主文件),确保.db自包含完整 - 指向正在同步的网盘文件夹(如 WPS Cloud Files),备份文件会被网盘客户端自动上传云端 = 白捡异地副本
跨任务共享(煋思维)
# 把本工作区某条 global/team 记忆发布到共享区(共享区在 ~/.workbuddy/xingmind/team)
python scripts/memory_manager.py --path ./my_memory share push --mid <mid> --owner "任务A"
# 多Agent:指定角色。owner=权威写;worker/contributor=只提建议,等 owner 合并
python scripts/memory_manager.py --path ./my_memory share push --mid <mid> --owner "agent-1" --role worker
# 查看某条记忆的待合并建议
python scripts/memory_manager.py --path ./my_memory share merge --mid <mid> --owner "任务A"
# owner 采纳第 0 条建议(version+1);加 --reject 则驳回
python scripts/memory_manager.py --path ./my_memory share merge --mid <mid> --owner "任务A" --index 0
# 从共享区拉取(scope 可选 global/team/all)
python scripts/memory_manager.py --path ./my_memory share pull --scope global
# 查看共享区总览
python scripts/memory_manager.py --path ./my_memory share list共享区是多个工作区共用的目录,存「结论」而非「过程」。私有/绝密永不进共享区。
多 Agent 安全(v6.2 新增):共享区和索引写入均走「文件锁 + 原子写」,多 Agent 并发 push/add 不丢数据;单一写者由「约定」升级为「代码强制」——每条共享记忆只有一个 owner,非 owner 以 owner 角色覆盖会被拒绝,只能以 worker/contributor 角色提建议,等 owner 用 merge 收编。
关系图 / 热力图可视化
# 导出通用图数据(nodes/links + N×N 关系强度矩阵)
python scripts/memory_manager.py --path ./my_memory graph memory_graph.json
# 生成自包含可视化页(双击即开,热力图 + 表格双视图)
python scripts/memory_manager.py --path ./my_memory graph --html memory_graph.html关系强度用「规则法」零成本计算:同 project / 同 layer / 共享 tag 越多越强。导出的是通用格式,将来可把规则法升级为词法/向量相似度,上层视图无感知。
命令清单
| 命令 | 说明 |
|---|---|
init | 初始化记忆系统 |
add | 添加记忆条目 |
search | 搜索记忆(hybrid/bm25/semantic三模式) |
list | 列出记忆 |
status | 查看系统状态 |
switch | 切换项目 |
extract | 从文本/文件自动提取候选记忆(--remember 自动去重入库) |
absorb | 会话边界写入:整场对话收进来(先留底再提取,幂等);--list/--replay/--dry-run |
ledger | 项目功能总账管理(init/show/add) |
maintain | 记忆维护:按重要度衰减归档 + 长期未访问归档(加 --dry-run 只预览,不改库) |
export | 导出全部记忆为JSON(含状态,可迁移备份) |
import | 从JSON导入记忆(同mid跳过,不覆盖) |
context | 目录式披露:输出可注入Agent上下文的索引片段 |
merge | 画像合并:把参考画像在库里并入主画像,参考画像归档 |
md | 把 L1/L2 渲染成 md 视图(MEMORY.md / USER.md / USER-draft.md) |
dedup | 去重扫描:报告整库重复条目组(只报告不删除) |
graph | 关系图导出:nodes/links + 关系强度矩阵,供热力图/力导向图/表格共用 |
backup | 一键备份:checkpoint 后复制 .db 到记住的目录,只留最近 10 份 |
restore | 从备份 .db 还原到新工作区 |
share | 跨任务共享:push发布 / pull拉取 / list查看 / merge合并(含角色权限+并发安全) |
3S架构
严格遵循3S架构(Small file / Small function / Layered):
scripts/
├── memory_manager.py CLI 入口(20 命令)
├── mcp_server.py MCP 入口(stdio,零依赖,6 个工具)
├── README.md 项目首页(给人看的一页说明)
├── examples/quickstart.py 5 分钟演示:记住 / 找回 / 改口 / 隔离
├── LICENSE AGPL-3.0 全文(开源版许可)
├── COMMERCIAL.md 商用授权说明:什么免费用、什么要买、怎么谈
├── CLA.md 贡献者协议(双许可的法律前提)
├── core/ 主干(21 个):模型 / 存储 / 检索门面 / 证据 / 算术 / 裁决 / 边界写入
├── search/ 检索层:BM25 + 向量兜底 + 混合 + 重排
├── extractor/ 提取层:模式库 + 提取器(含来源溯源)
├── ledger/ 总账层:项目总账
├── experimental/ 实验区(25 个):写完但没组装进主链路的认知器官
├── tests/ 测试层:并发 / 角色 / 去重溯源 / 检索
└── utils/ 工具层:分词 + 日期- 单文件 < 400 行、单函数 < 50 行(
xingmind.py作为对外门面是已知例外:一个方法一个入口,拆开反而难找) - 零第三方依赖,纯 Python 标准库
- 主干只有一条:
remember→recall→recall_context。不在这条线上的模块一律放experimental/
重要度分级
| 星级 | 名称 | 有效期 | 说明 |
|---|---|---|---|
| ★ | 临时 | 7天 | 用完即忘 |
| ★★ | 短期 | 14天 | 短期参考 |
| ★★★ | 普通 | 30天 | 默认级别 |
| ★★★★ | 重要 | 60天 | 建议蒸馏到上层 |
| ★★★★★ | 永久 | 永久 | 永不失效 |
硬约束规则(R 编号)
L1 规则建议用 R数字 + 名称 作标题(如 R1 不许抢鼠标键盘焦点)。context 命令会自动识别 R 编号规则并置顶输出,作为不可逾越的硬约束。
画像主副双写
- 主画像(
--layer l2 --type profile):只有「自我复盘」场景可写 - 参考画像(
--layer l2 --type profile_draft):全员可追加建议 - 合并:
merge命令把参考画像在库里并入主画像(标记「待复核」),参考画像归档 - 看:
md命令把两者渲染成USER.md/USER-draft.md。这两个文件是派生物,
改它们不会生效——合并发生在库里,不在文件里
归档层只进不出
maintain 归档的条目会挪进 recent_memory/archived/,写入内容哈希作只读标记,且 update 拒绝修改已归档条目。归档后不可回捞,需恢复请走 delete + re-add。
去重(词法 + 语义两路)
- 自动查重:
add会先扫同层同项目的 active 条目,命中重复时提示(默认不阻断)。
加 --block-dup 可强制阻断重复添加。
- 整库扫描:
dedup命令报告重复条目组,只报告、不自动删除,确认后人工清理。 - 两路判据:
- 词法(字符 bi-gram Jaccard,阈值 0.85)——抓「复制粘贴/几乎一样」的重复;
- 语义(双字/三字词 + 同义词扩展 Jaccard,阈值 0.50)——抓「换词不换意」的明显重复。
- 防误伤:只对「同层 + 同项目 + 都活跃」的条目比较,跨层同名(如 L1 规则 vs L3 情节)不判重。
适用场景
- Agent长期记忆:记住用户偏好、决策、习惯,避免重复询问
- AI 思维 / 认知架构:要的不是记事本,而是会举一反三、会跨域联想、会自我纠错的 Agent
- 无先例难题:没有攻略可抄时,靠排除死路 + 提猜想破局
- 项目知识沉淀:模块、接口、数据表、决策、坑点全景记录
- 经验教训积累:踩坑记录结构化存储,避免重复交学费
- 对话知识萃取:从长对话自动提取有价值信息批量入库
许可:双许可(AGPL 免费 + 商业授权)
本项目采用双许可,不是"先免费后收费"的套路,是两条路并行:
| 你是什么情况 | 用哪条 | 要付钱吗 |
|---|---|---|
| 个人用、学习、研究 | AGPL-3.0 免费版 | 不要 |
| 公司内部使用(数据不出门、不对外提供服务) | AGPL-3.0 免费版 | 不要 |
| 开源项目(衍生作品也用 AGPL) | AGPL-3.0 | 不要 |
| 嵌进你要卖的产品 / 做成 SaaS 对外服务 / 要闭源 | 商业授权 | 要 |
- 开源全文:[
LICENSE](LICENSE)(AGPL-3.0) - 商用范围、定价方式、联系方式:[
COMMERCIAL.md](COMMERCIAL.md) - 提交代码前请签:[
CLA.md](CLA.md)——没有它,商业授权在法律上就走不通
AGPL 覆盖"分发"和"通过网络提供服务"两种情形,所以 SaaS 也在内;
纯内部使用不触发,这一条我们写在明面上,不在这上面绕。