<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>OpenViking on 奇诺分享 | 重在分享</title>
        <link>https://blog.ccino.org/tags/openviking/</link>
        <description>Recent content in OpenViking on 奇诺分享 | 重在分享</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 21 Aug 2026 07:30:00 +0800</lastBuildDate><atom:link href="https://blog.ccino.org/tags/openviking/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>OpenViking 想把 Agent 上下文做成数据库，聊天记录终于该退到后台了</title>
        <link>https://blog.ccino.org/p/openviking-context-database-ai-agents/</link>
        <pubDate>Fri, 21 Aug 2026 07:30:00 +0800</pubDate>
        
        <guid>https://blog.ccino.org/p/openviking-context-database-ai-agents/</guid>
        <description>&lt;img src="https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/cover.png" alt="Featured image of post OpenViking 想把 Agent 上下文做成数据库，聊天记录终于该退到后台了" /&gt;&lt;p&gt;最近看 Agent 项目，常会碰到一个很难追的错误。&lt;/p&gt;
&lt;p&gt;它记得你上周说过的偏好，也能从知识库找到项目文档，还装了一堆 Skills。你让它改一处代码，它读到了旧接口说明，带着过期约束改完，测试也许还能过。结果出了问题，排查得先从它当时看了什么开始。&lt;/p&gt;
&lt;p&gt;这句话听上去有点绕，实际做过 Agent 工作流的人大概都见过。聊天记录会留在那里，模型也会给出一段听起来很完整的解释。可这两样东西都很难还原某一轮任务。几十份文档、几段长期记忆、几项工具说明里，哪几段被放进了上下文，哪一份资料被遗漏，为什么会漏，常常没有答案。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/cover.png&#34;
	width=&#34;1672&#34;
	height=&#34;941&#34;
	srcset=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/cover_hu_645566790e27897d.png 480w, https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/cover_hu_3d13c7c52ef8d99.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;OpenViking 上下文数据库封面图&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;177&#34;
		data-flex-basis=&#34;426px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;我把 OpenViking 的公开仓库、文档和基准说明对了一遍。它的目标很明确，想把这类零散东西收进一套“面向 AI Agent 的上下文数据库”。项目在 GitHub 上已超过 3 万 stars，支持接入 Claude Code、Codex、OpenClaw、Cursor、OpenCode 等多种 Agent。热度不能证明产品已经成熟，却至少说明很多人都碰到了同一个麻烦，Agent 能拿到的上下文越来越多，管理方式还停在临时拼接阶段。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/openviking-studio-official.png&#34;
	width=&#34;1528&#34;
	height=&#34;850&#34;
	srcset=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/openviking-studio-official_hu_bb6ade31e5f6077c.png 480w, https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/openviking-studio-official_hu_68dbd22b0356dd67.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;OpenViking Studio 官方在线演示界面&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;179&#34;
		data-flex-basis=&#34;431px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;OpenViking Studio 官方演示界面，图片来源：&lt;a class=&#34;link&#34; href=&#34;https://github.com/volcengine/OpenViking&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenViking GitHub 仓库&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;上下文乱起来问题不只是-token-花得多&#34;&gt;上下文乱起来，问题不只是 token 花得多
&lt;/h2&gt;&lt;p&gt;很多团队最早注意到上下文问题，是账单变长了。&lt;/p&gt;
&lt;p&gt;一个长期运行的 Agent 每做一步，都要把任务说明、旧对话、工具返回、文件片段、检索结果继续带在身上。上下文越长，调用成本越高，速度也会跟着掉。于是大家开始做摘要、裁剪、压缩，或者每隔一段时间重开会话。&lt;/p&gt;
&lt;p&gt;这些办法都合理，但它们解决的是容量。真正棘手的事发生在内容层面。&lt;/p&gt;
&lt;p&gt;假设一个 Agent 要处理线上故障。它可能需要读当前服务日志、最近发布记录、历史事故复盘、数据库变更、团队约定，还有这位用户过去对通知方式的偏好。这里面有些东西适合先看摘要，有些必须读原文，有些应该只在获得权限后读取。它们的有效期也不同。上个月的复盘有参考价值，已经废弃的配置说明却可能把排查带到沟里。&lt;/p&gt;
&lt;p&gt;传统 RAG 很擅长从一堆文本里找相关片段。问题在于，找到一段话以后，Agent 还得知道它属于哪个项目、旁边有什么约束、有没有更近的版本、能不能把它和私人记忆一起用。向量检索返回几个片段时，这些关系很容易丢。&lt;/p&gt;
&lt;p&gt;人类开发者不会把项目资料理解成一袋随机切片。我们打开仓库会先看目录，知道 &lt;code&gt;docs/&lt;/code&gt; 和 &lt;code&gt;src/&lt;/code&gt; 分别放什么，看到一份接口文档也会顺手找它附近的认证说明、迁移记录和更新时间。错了以后，还能回看自己究竟读过哪些文件。&lt;/p&gt;
&lt;p&gt;Agent 也需要这种路径感。&lt;/p&gt;
&lt;h2 id=&#34;openviking-把三类东西放进同一个目录&#34;&gt;OpenViking 把三类东西放进同一个目录
&lt;/h2&gt;&lt;p&gt;OpenViking 的做法有一点朴素。它没有让 Agent 面对一个只会返回相似度分数的黑盒，而是把资源、记忆和 Skills 都挂到 &lt;code&gt;viking://&lt;/code&gt; 协议下的虚拟文件系统里。&lt;/p&gt;
&lt;p&gt;项目文档、代码仓库、网页资料可以放进 &lt;code&gt;resources/&lt;/code&gt;。用户偏好、工作习惯、历史经验放在对应用户目录。Skills 也有自己的位置。Agent 可以用类似 &lt;code&gt;ls&lt;/code&gt;、&lt;code&gt;tree&lt;/code&gt;、&lt;code&gt;find&lt;/code&gt; 的方式浏览它们，再决定往下读什么。&lt;/p&gt;
&lt;p&gt;这件事会让人想起平时翻一个陌生仓库。你不会只看搜索框弹出的几行结果，通常会先看看目录，弄清 &lt;code&gt;docs/&lt;/code&gt;、&lt;code&gt;src/&lt;/code&gt; 和配置文件分别在干什么，再去读眼前那份文档。OpenViking 希望把这种浏览顺序交给 Agent。&lt;/p&gt;
&lt;p&gt;当上下文以目录和 URI 的方式组织，调用方能拿到比“这几段文本相似度最高”更多的信息。它知道内容来自哪类资源，挂在哪个项目下面，附近还有哪些文档，也能按目录继续向下找。检索结果因此带着出处。&lt;/p&gt;
&lt;p&gt;OpenViking 还把每份内容加工成三层。&lt;/p&gt;
&lt;p&gt;L0 是很短的摘要，用来判断要不要继续看。L1 给出概览，适合规划任务。L2 保留原始细节，只有确实需要时才加载。目录本身也带摘要和概览，所以 Agent 可以先在目录级别判断相关性，再进入某个文件。&lt;/p&gt;
&lt;p&gt;这套分层并不神奇。一个人查资料时也会先扫目录、标题和摘要，找到方向后再读全文。它的价值在于把这个普通动作写进基础设施里，让每个 Agent 不必靠临时提示词猜测什么时候该读多、什么时候该停。&lt;/p&gt;
&lt;p&gt;项目方在 README 中称，OpenViking 0.3.22 在 LoCoMo 长对话记忆和 tau2-bench 多轮 Agent 任务上做过评测。报告里列出了记忆准确率、输入 token 和查询延迟的改善。数字来自项目方，集成方式、数据集设置和对比口径都会影响结果。把它当作一个值得复现的线索比较合适，不能直接套到所有团队身上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/openviking-benchmark-official.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;OpenViking 官方基准结果图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;OpenViking 官方基准结果图，指标、测试设置与对比口径见项目的&lt;a class=&#34;link&#34; href=&#34;https://blog.openviking.ai/post/openviking-benchmark-results/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;基准说明&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;比起具体百分比，我更在意它把“该带什么上下文”从一次模型调用的内部细节，挪到了可以检查的系统层。&lt;/p&gt;
&lt;h2 id=&#34;能看见检索路径排错才有起点&#34;&gt;能看见检索路径，排错才有起点
&lt;/h2&gt;&lt;p&gt;OpenViking 文档里有一项功能叫 observable retrieval，也就是可观察的检索。每次查询都会留下目录浏览轨迹。结果不对时，可以回看 Agent 走过哪些路径。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/retrieval-trace.png&#34;
	width=&#34;1672&#34;
	height=&#34;941&#34;
	srcset=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/retrieval-trace_hu_531f998dcffa669f.png 480w, https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/retrieval-trace_hu_9c6cfb4b08fd85.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;从上下文目录到接口文档的检索路径图&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;177&#34;
		data-flex-basis=&#34;426px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可观察的检索在演示里不如“自动记住你的一切”好看，在真实工作里却很实用。&lt;/p&gt;
&lt;p&gt;假如客服 Agent 回答错了退款规则，常见做法是继续改 prompt，或者往知识库再塞一份正确文档。下次它可能答对，也可能又抽到旧资料。旧资料为什么被召回，新的规则为什么没有排在前面，问题仍然挂着。&lt;/p&gt;
&lt;p&gt;检索轨迹至少能把排查顺序理出来。先看它有没有进入正确目录。没进去，查索引、命名或检索条件。进了正确目录却读错文件，查摘要层。读到了正确文件仍然执行错，再去看模型理解、工具调用和工作流约束。修这几类问题的人不一样，验证方式也不一样。&lt;/p&gt;
&lt;p&gt;这和看应用日志很像。日志不会自动修 bug，但没有日志，大家只能围着最终报错猜。上下文轨迹同样不会让 Agent 立刻可靠，它把“模型为什么这么做”的一部分过程从黑箱里拿出来。&lt;/p&gt;
&lt;p&gt;对需要审计的团队，这件事还有另一层意义。Agent 读取私人记忆、内部文档或敏感资料时，系统至少应当留下谁在什么任务里读取了什么。很多产品把记忆功能讲得很轻松，仿佛它只是聊天体验的一个开关。数据开始进入长期存储并参与后续行动以后，读取范围、保留期限和删除记录都需要被认真对待。&lt;/p&gt;
&lt;h2 id=&#34;记忆会长出来过期内容也会跟着长&#34;&gt;记忆会长出来，过期内容也会跟着长
&lt;/h2&gt;&lt;p&gt;OpenViking 在会话结束后，允许异步提取用户偏好和 Agent 经验，写入长期记忆。这个方向很自然。每次都从零开始的 Agent 很笨，能从任务里留下经验的 Agent 更接近日常工具。&lt;/p&gt;
&lt;p&gt;但长期记忆最容易被浪漫化。&lt;/p&gt;
&lt;p&gt;一个 Agent 记住“用户喜欢简短回答”，通常没什么问题。它记住“这个项目永远使用某个旧接口”，就可能在数月后制造事故。更麻烦的是，记忆常常带着当时的情境。某次为了应急而跳过的流程，写进经验库以后，可能变成下一次任务的默认捷径。&lt;/p&gt;
&lt;p&gt;因此，真正值得管理的并非只有记忆内容，还有记忆的生命周期。&lt;/p&gt;
&lt;p&gt;一条记忆从哪里来。是谁或什么流程写进去的。它服务哪个项目。什么时候复核过。是否允许不同 Agent 读取。用户能否查看、修改和删除。项目迁移后谁负责清理。这些问题很琐碎，正因为琐碎，才容易在“先让 Agent 跑起来”的阶段被省掉。&lt;/p&gt;
&lt;p&gt;OpenViking 用虚拟文件系统来承载记忆，至少让人有地方处理这些问题。文件和目录可以承载版本、权限和归档。产品实际能否把这些能力做扎实，还要看部署方式、集成实现和后续维护。开源仓库里能看到的接口，不等于每个接入它的团队都会配置好访问控制。&lt;/p&gt;
&lt;p&gt;我会把它当作一个提醒。Agent 记忆除了要看召回成功率，也得允许人回头追问，这段经验是谁留下的，它现在还有效吗。&lt;/p&gt;
&lt;h2 id=&#34;context-engineering-终于有了更像工程的部分&#34;&gt;Context Engineering 终于有了更像工程的部分
&lt;/h2&gt;&lt;p&gt;Context Engineering（上下文工程）这两年很热。系统提示词怎么写，对话怎么压缩，检索结果怎么拼入模型，讨论大多落在调用前的那一小段代码里。&lt;/p&gt;
&lt;p&gt;OpenViking 往前多走了一步。它试图把上下文本身组织成可查询、可管理的数据。&lt;/p&gt;
&lt;p&gt;数据系统会记录来源、结构、索引、权限、版本、过期策略和查询日志。Agent 每次行动都依赖上下文，这些材料也该逐步拥有类似的管理方式。否则任务越长、工具越多，所谓记忆越容易变成没人收拾的旧聊天记录。&lt;/p&gt;
&lt;p&gt;这也是它和 Agent Harness（智能体运行框架）之间的关系。&lt;/p&gt;
&lt;p&gt;Harness 管 Agent 怎么行动，工具权限、失败处理、测试、人工确认和验收都在这边。Context Engineering 管 Agent 行动时能看见什么。一个约束动作，一个整理判断依据。两边都得有。权限收得再紧，Agent 还是可能读着旧资料作判断。检索做得再好，Agent 也可能没经验证就把判断执行出去。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/context-harness-boundary.png&#34;
	width=&#34;1672&#34;
	height=&#34;941&#34;
	srcset=&#34;https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/context-harness-boundary_hu_a644a1045b33f8a7.png 480w, https://blog.ccino.org/p/openviking-context-database-ai-agents/imgs/context-harness-boundary_hu_4891fe2fdd7cdff0.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;上下文工程与 Agent 运行框架的职责分工图&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;177&#34;
		data-flex-basis=&#34;426px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;OpenViking 更接近后面这一层。它没有替代 Harness，也没有替代模型。它尝试把模型进入行动前需要查看的材料，放到一个更可控的位置。&lt;/p&gt;
&lt;h2 id=&#34;别急着把所有资料倒进去&#34;&gt;别急着把所有资料倒进去
&lt;/h2&gt;&lt;p&gt;看到“上下文数据库”四个字，最容易犯的错误就是把所有东西都导入。&lt;/p&gt;
&lt;p&gt;项目文档、会议纪要、个人笔记、聊天记录、代码仓库、网页收藏，全扔进去，随后期待 Agent 自动变聪明。现实通常没有这么省心。资料越多，权限越复杂，过期内容越多，检索错误的成本也越高。&lt;/p&gt;
&lt;p&gt;如果团队正考虑这类系统，先拿一个反复出错的场景试就够了。&lt;/p&gt;
&lt;p&gt;内部开发助手总找错接口文档，就只放这一项目的文档、版本说明和迁移记录，规定哪些目录可读，并给关键检索留日志。跑一阵子，看看它是否少读旧版本，出错时能否定位到召回路径。结果稳定以后，再把会话记忆和跨项目资源加进来。&lt;/p&gt;
&lt;p&gt;个人用户也一样。挑一类重复工作即可。写作素材、代码项目、客户支持都行。先想清楚希望 Agent 记住什么，也把绝不能自动记住的东西划出来。&lt;/p&gt;
&lt;p&gt;OpenViking 目前提供开源版，也提供托管与自管方向的商业方案。仓库主项目使用 AGPLv3，部分 CLI 和示例采用其他许可。想接入生产环境的人，除了看功能，还得把许可证、数据驻留、模型提供方和运维成本一起算进去。这些问题不影响它的技术方向，却会决定它是否适合某个团队。&lt;/p&gt;
&lt;p&gt;上下文不是越多越好。真正有用的上下文，应该在需要时能找到，在不该出现时能被挡住，出错后还找得到来路。&lt;/p&gt;
&lt;p&gt;聊天记录当然不会消失。它仍然适合承载正在进行的对话和临时工作。但当 Agent 开始跨会话、跨项目、跨工具地工作，聊天记录不该再承担全部记忆职责。它更适合退回到会话层，把可长期使用、需要治理的内容交给更明确的系统。&lt;/p&gt;
&lt;p&gt;OpenViking 值得观察，因为它认真处理了一个长期被忽略的问题。Agent 每次判断时依据了什么，系统该给它留一个能查到的地方。&lt;/p&gt;
&lt;h2 id=&#34;参考来源&#34;&gt;参考来源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/volcengine/OpenViking&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenViking GitHub 仓库与 README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.openviking.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenViking 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.openviking.ai/post/openviking-context-database/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenViking 上下文数据库设计说明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.openviking.ai/post/openviking-benchmark-results/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenViking 基准结果说明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.openviking.ai/en/agent-integrations/02-claude-code&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenViking 的 Claude Code 集成文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上来源用于核对项目公开功能、发布口径和基准描述。项目方公布的性能数字仍应结合具体版本、集成方式和复现实验理解，不等同于所有环境下的独立测试结果。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
