各位代码界的卷王、AI圈的探险家们 今天咱们要聊聊 OpenViking 里那个让 AI Agent 终于能“记住你是谁”的神奇系统 一、先唠唠痛点为什么你的 AI 助理总是记不住你想象一下这个场景你“你好我是小明一个 Python 程序员喜欢简洁的代码” AI“好的小明很高兴认识你” ... 5 分钟后新的会话开始 ... 你“你好你还记得我吗” AI“…… 您是”是不是像极了养了一条金鱼7秒记忆重新开始传统方案的绝望 把上下文全塞进去 Token 爆炸 塞到向量库 搜索不准还存了一堆垃圾 存数据库 复杂到怀疑人生 二、OpenViking 是个啥一个有记忆的房子让我给你看看 OpenViking 给 AI Agent 造的超级记忆大豪宅viking:// ├── session/alice-chat-001/ # 临时客厅聊天用 ├── user/alice/ # 小明的私人卧室 │ └── memories/ # 小明的储物柜 │ ├── profile.md # 个人档案永远最新 │ ├── preferences/ # 喜好库 │ ├── entities/ # 重要的人和事 │ └── events/ # 重要事件 └── agent/my-assistant/ # 助手的书房 └── memories/ # 助手的学习笔记 ├── cases/ # 案例库 └── patterns/ # 经验库 三、Session 是个啥客厅的垃圾处理器Session 的核心工作流程Session 就像你家的临时聊天客厅你进来聊天 → 留下一地瓜子皮消息→ 客厅满了 ↓ 扫地 ↓ 两阶段处理大法阶段一快速归档秒级响应 ⚡session.commit()# 内部在做什么# └─ 咔嚓把这堆聊天记录塞到 history/archive_001/ 文件夹# └─ 立刻告诉你好的记录上了阶段二后台慢慢消化提取记忆 后台小哥让我慢慢看看... 哦小明喜欢简洁代码 ↓ 写进 user/alice/memories/preferences/coding.md ↓ 向量索引更新下次能搜索到 四、8 种记忆分类你的 Agent 是个好学生OpenViking 给你的 Agent 做了超级规整的分类笔记记忆类型放在哪里用途比喻Profileuser/memories/profile.md档案袋Preferencesuser/memories/preferences/购物清单Entitiesuser/memories/entities/名片夹Eventsuser/memories/events/日记本Casesagent/memories/cases/错题本Patternsagent/memories/patterns/解题模板Toolsagent/memories/tools/工具使用手册Skillsagent/memories/skills/工作手册 五、Session 深度解析给你家客厅装个摄像头Session 的完整结构看看你家这个客厅长啥样viking://session/my-chat-session/ │ ├── .meta.json 客厅登记表 │ ├── 创建者小明 │ ├── 参与人小明 小红 │ └── 累计谈话次数100次 │ ├── messages.jsonl 实时对话记录 │ └── history/ ️ 聊天档案馆 ├── archive_001/ │ ├── messages.jsonl │ ├── .abstract.md 一句话总结 │ ├── .overview.md 详细概述 │ └── .done ✓ 已完成标记 └── archive_002/元数据你的客厅是有身份证的.meta.json长这样简直像个统计神器{session_id:聊天的ID,created_at:什么时候开始的,updated_at:最后一句话是什么时候,created_by_user_id:谁开的这个房间,participant_user_ids:[谁进来过],participant_agent_ids:[有什么助手进来过],message_count:10,commit_count:5,memories_extracted:{profile:1,preferences:2,total:10},llm_token_usage:{total_tokens:20000}}️ 六、记忆是怎么提取出来的让我们看一下这个流水线工厂记忆提取的完整流程用户说了一堆话 → 进入 MemoryExtractor 工厂 ↓ LLM 开始分析哦小明说他是Python专家 ↓ 打成候选记忆包 ↓ MemoryDeduplicator 判断和以前的记忆冲突吗 ↓ ✍️ VikingFS 写入写入对应的目录 ↓ VectorDB 更新向量索引加上下次能搜索记忆文件长什么样每个记忆文件都是个三层的宝藏# 偏好简洁代码 ## Summary (L0) 小明不喜欢过度设计喜欢简洁代码 ## Overview (L1) - 每次写代码都强调简洁 - 讨厌装饰器滥用 - 喜欢函数式编程 ## Content (L2) 小明说过 N次他喜欢 Python的简洁他的项目都是... 七、隐私保护别人的卧室不能乱进OpenViking 的权限系统非常严格defis_accessible(uri:str):if你是 Root 管理员returnTrue# 随便看ifuri 是 public 资源或 sessionreturnTrue# 共享的东西ifuri 是小明的 user/returnFalse# 你敢进试试不同空间的能见度空间类型谁能看比喻Session同一 Account 里的人公司会议室User/只有用户自己你卧室的抽屉Agent/用户 Agent你俩的共同书房Resources全公司可见公司图书馆 八、完整演示小明和 Agent 的一天让我们用代码来走一遍importopenvikingasovimporttime# 1️⃣ 开门clientov.SyncHTTPClient(urlhttp://localhost:1933)client.initialize()# 2️⃣ 小明进入客厅开始聊天sessionclient.create_session()session_idsession[session_id]print( 小明开了个新 session,session_id)# 3️⃣ 对话说话dialogues[{role:user,content:你好我是小明Python 程序员},{role:assistant,content:你好小明},{role:user,content:我喜欢简洁的代码风格},{role:assistant,content:没问题记住了},]formessageindialogues:client.add_session_message(session_id,message[role],message[content])# 4️⃣ 打扫卫生commit 一下print(\n️ 小明说存档)commit_resultclient.commit_session(session_id)task_idcommit_result[task_id]print(f⏳ 后台任务{task_id})# 5️⃣ 等后台慢慢消化...whileTrue:task_resultclient.get_task(task_id)print(f⏱️ 任务状态{task_result[status]})iftask_result[status]in[completed,failed]:breaktime.sleep(1)# 6️⃣ 看看记住了什么print(\n✅ 完成来看看记住什么了)session_infoclient.get_session(session_id)print(记忆统计,session_info[memories_extracted])# 7️⃣ 下次聊天...print(\n 第二天... 小明又来了)new_sessionclient.create_session()print(新的会话已经自动检索并注入了小明的记忆) 九、高级配置让你的 Agent 更有个性命名空间策略你想让记忆多细粒度由你说了算配置结果比喻默认user/alice/memories小明的一个大抽屉isolate_user_scope_by_agenttrueuser/alice/agent/my-assistant/memories小明给这个助手单独分个抽屉 十、总结你的 Agent 现在从 0 级变神了总结一下 OpenViking 的核心特点✅两阶段 Commit 不卡你后台慢慢处理✅目录组织记忆 就像你的文件系统直观✅权限隔离 别人的东西看不着✅自动更新向量 下次能搜到✅完整的统计 你甚至知道用了多少 token 写在最后所以下次你的 AI Agent 对你说“我们之前讨论过什么吗”请记住OpenViking 已经帮你安排得明明白白了 快来试试吧让你的 Agent 拥有真正的“记忆”变得越来越懂你下一章我们如何手写一个OpenViking