文章总结: OpenViking是一个专为AIAgent打造的开源长期记忆数据库,它采用虚拟文件系统范式,统一管理资源、记忆和技能三种核心上下文。其核心能力包括分层上下文按需加载、可视化检索轨迹和自动会话管理与记忆迭代。它通过文件系统+向量检索的混合架构解决了传统RAG系统上下文碎片化、Token成本高、检索不可解释等问题,并支持与LangChain等框架集成,以构建具备持续学习和自我进化能力的智能体。
综合评分: 90
文章分类: AI安全,安全开发,技术标准,解决方案,数据安全
OpenViking:专为AI Agent打造的长期记忆数据库
原创
凌木LSJ 凌木LSJ
AI技术LSJ
2026年3月31日 22:50 浙江
一、OpenViking是什么?
OpenViking是一个开源的上下文数据库,专为AI Agent设计。简单来说OpenViking是一个面向 AI Agent 的长期记忆框架,它让 AI 可以像人一样:
- 记住用户偏好
- 积累知识
- 总结历史对话
- 持续进化
OpenViking采用虚拟文件系统范式来统一管理Agent所需的三种核心上下文:
- 资源:知识和规则(文档、代码、常见问题解答)【长期、相对静态】
- 记忆:代理的认知(用户偏好、学习经验)【长期、动态更新】
- 技能:可调用功能(工具、MCP)【长期、静态】
所有上下文都以 viking:// URI唯一标识,支持类似Unix文件系统的操作——ls、read、find,让Agent能通过确定性路径和语义搜索两种方式定位信息。
viking://├── resources/ # Resources: project docs, code repos, web pages│ └── my_project/├── user/ # User: preferences, habits│ └── memories/└── agent/ # Agent: skills, instructions, task memories ├── skills/ └── memories/
二、OpenViking 的核心能力
1. 分层上下文按需加载(L0/L1/L2)
2. 可视化检索轨迹
OpenViking的每一次检索都会完整记录浏览了哪些目录、定位了哪些文件。开发者可以清楚看到Agent的“思考路径”,从而优化检索策略或调试问题。
3. 自动会话管理与记忆迭代
这是OpenViking最令人兴奋的特性之一。在每个会话结束时,调用session.commit(),系统会自动记忆提取
Agent因此能够“越用越聪明”,实现真正的自我进化。
三、RAG检索能力实测
传统 RAG / 向量库有几个典型问题:
– 1️⃣ 上下文是碎片 :检索回来是“片段”,没有结构
– 2️⃣ Token 成本高 : 塞满上下文窗口,截断丢信息
– 3️⃣ 检索不可解释 : 为什么召回这段?
– 4️⃣ 没有长期记忆 : Agent 每次从零开始
OpenViking如何解决?
通过文件系统范式统一管理智能体所需的上下文(内存、资源和技能) ,从而实现分层上下文交付和自我迭代。
本质:不是单纯向量数据库,而是**“文件系统 + 向量检索”**的混合架构
1)创建配置文件ov.conf
{ "embedding": { "dense": { "api_base": "", "api_key": "", "provider": "openai", "dimension": 3072, "model": "text-embedding-3-large" } }, "vlm": { "api_base": "", "api_key": "", "provider": "openai", "model": "gpt-4o-mini" }}
export OPENVIKING_CONFIG_FILE=ov.conf
pip install openviking (Python 版本:3.9 或更高版本)
2)初始化数据库
import openviking as ovclient = ov.SyncOpenViking(path="./ovBase") client.initialize()result = client.add_resource( path="./data/修炼手册.pdf", target="viking://resources/修炼手册.pdf", wait=True, timeout=30)client.wait_processed()
3)检索查阅
- find() – 语义检索
- search() – 会基于会话历史进行意图分析和查询扩展
四、与LangChain集成RAG检索实例
1)自定义检索器
from langchain_core.retrievers import BaseRetrieverfrom langchain_core.documents import Documentfrom typing import Any, List
class OpenVikingRetriever(BaseRetriever): client: Any def __init__(self, client: Any, **kwargs): super().__init__(client=client, **kwargs) def _get_relevant_documents(self, query: str) -> List[Document]: results = self.client.find(query=query, limit=5, score_threshold=0.2) docs = [] for ctx in results.resources: content = self.client.read(ctx.uri) docs.append(Document( page_content=content, metadata={"uri": ctx.uri, "score": ctx.score} )) return docs
2)RAG Chain
from langchain_openai import ChatOpenAIfrom langchain_classic.chains import RetrievalQA
retriever = OpenVikingRetriever(client)qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=retriever, return_source_documents=True, chain_type="stuff" )
3)RAG查询
五、与LangChain Agent集成实战
1)集成为工具
@tooldef viking_find(query: str, limit: int = 5) -> str: """ 在知识库和用户记忆中语义搜索。可用于检索: - 用户偏好(如书籍、食物、风格) - 历史对话中提取的信息 - 项目文档或知识库内容 输入:简短的查询字符串,例如“用户偏好”、“书籍推荐”、“哲学” 返回:最匹配的条目 URI、相关性分数和摘要。 """ results = client.find(query, limit=limit) output = [] for ctx in results.resources + results.memories: output.append( f"URI: {ctx.uri}\n" f"Score: {ctx.score:.2f}\n" f"摘要: {ctx.abstract[:200]}" ) return "\n\n".join(output) if output else "没有找到相关内容"
@tooldef viking_read(uri: str) -> str: """读取完整内容""" return client.read(uri)
@tooldef viking_overview(uri: str) -> str: """获取文档概览""" return client.overview(uri)
@tooldef viking_ls(uri: str = "viking://") -> str: """列出知识库目录""" entries = client.ls(uri) return "\n".join([e["name"] for e in entries])
2)创建智能体
agent = create_agent( model=llm, tools=tools, system_prompt=prompt)
3)记忆能力测试
async def main(): # 第一轮 reply1, sid = await chat("我喜欢哲学和人工智能的书",session_id="user001") print("AI:", reply1) # 第二轮 reply2, _ = await chat("推荐几本书",session_id="user001") print("AI:", reply2)await main()
六、OpenViking数据库结构
最后,看一下ovBase本地基于虚拟文件系统的存储结构:
ovBase/ └── vectordb/ └── viking/default/ ├── agent/ # Agent 相关记忆(案例、模式) ├── resources/ # 资源文件(文档、代码等) ├── session/ # 会话归档历史 ├── temp/ # 临时文件 └── user/ # 用户相关数据 └── default/ # 用户命名空间(默认) └── memories/ # 长期记忆目录 ├── entities/ # 实体记忆(人物、项目等) ├── events/ # 事件记忆(决策、里程碑等) ├── preferences/# 用户偏好记忆(书籍、风格等) │ ├── .abstract.md # L0 摘要 │ ├── .overview.md # L1 概览 │ └── mem_*.md # 具体记忆文件(L2) ├── .abstract.md # memories 目录摘要 └── .overview.md # memories 目录概览
整个结构分为向量索引(vectordb)和知识空间(viking)。
其中 resources 用于存储知识库文档,session 保存对话历史并用于自动提取记忆,agent 存储 Agent 的经验与模式,而 user/memories 则用于记录用户的长期记忆(如实体、事件和偏好)。每条记忆采用 L0 摘要、L1 概览、L2 原文的三层结构,使 AI 能先读取摘要再逐步深入,从而降低 Token 成本并提升检索效率。
相比传统只存向量的 RAG 系统,这种结构既支持语义检索,又支持可读的知识组织和长期记忆积累,使 AI 能够持续学习用户信息和知识内容,是构建长期记忆型 AI Agent 的重要基础设施。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AI技术LSJ 凌木LSJ 凌木LSJ《OpenViking:专为AI Agent打造的长期记忆数据库》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论