本节摘要:生态章下半场。VikingBot(bot/ 目录,约 5.5 万行 Python)是内置的多渠道 Agent 框架:十几个 channel 网关(飞书/Slack/Telegram/钉钉/Discord/邮件/QQ/WhatsApp...)把聊天平台的消息汇进统一的 Agent 循环,沙箱后端(Direct/SRT/OpenSandbox/AIO Sandbox)兜住代码执行,Skill 与子 agent 按需扩编;连上 OpenViking 后,资源检索、用户记忆、会话沉淀全部成为它的天然能力。web-studio(React/Vite,约 8.8 万行)是浏览器控制台与 playground;sdk/ 下 Go/Python/TS 三语言 SDK;examples/ 里躺着 8+ 个给主流 coding agent 用的记忆插件(claude-code/codex/cursor/zcode/trae/opencode/openwebui...)。收尾看 crypto 加密与 privacy 隐私两个横切模块。
内容来源:原项目源码 bot/(vikingbot/、README_CN.md)、web-studio/、sdk/(go/python/typescript)、examples/(claude-code-memory-plugin 等)、openviking/crypto/、openviking/privacy/、agent-plugins/
⚠️ 注意:Web Studio 是纯静态 SPA,不内嵌任何存储/检索/队列/Bot 运行时——它必须连一个正在跑的 OpenViking Server(默认
http://127.0.0.1:1933);会话页依赖 server 转发的/bot/v1/*,没开--with-bot时这些接口返回 503。
--with-bot/本地调试 vikingbot chat/Gateway 独立部署)与消息链路。bot/ 目录 153 个 Python 文件、约 54,793 行,是一个完整的 Agent 框架而不仅是「示例 bot」。vikingbot/ 下的子目录就是模块分区:agent/(循环、上下文、工具、技能、子 agent)、channels/(平台网关)、sandbox/(执行沙箱)、providers/(模型供给)、bus/(事件总线)、cron/(定时任务)、heartbeat/(常驻心跳)、compile/、console/、以及意义特殊的 openviking_mount/——把 viking:// 空间挂进 Agent 的工作区。channels 一列就知覆盖面:
feishu.py slack.py telegram.py dingtalk.py discord.py email.py qq.py whatsapp.py mochat.py chat.py ...
国内平台(飞书/钉钉/QQ/微信系 mochat)与国际平台(Slack/Telegram/Discord/WhatsApp)平起平坐,外加邮件与 openapi 两个非聊天入口——这份清单本身就是项目出身地的注脚。README_CN 开列的六项主要能力(多入口对话、Agent 工具、Skill 与子 Agent、长期上下文、安全执行、服务化运行)与本节后续小节一一对应。
README_CN 用一张链路图讲清了三种启动形态的关系:
ov chat → OpenViking Server → VikingBot Gateway → Agent
README_CN 用一张场景表讲清了三种形态的取舍:
| 场景 | 适合谁 | 启动命令 |
|---|---|---|
| A. 一体启动 | 本地完整体验资源、记忆和 Agent | openviking-server --with-bot |
| B. 本地调试 | 快速测试 Bot、开发 Tool/Skill | vikingbot chat |
| C. Gateway 统一入口 | 单独启动 bot,接已有 Server | vikingbot gateway |
场景 A(一体启动)的链路:ov chat → OpenViking Server → /bot/v1 路由(上一节注册的 bot_router)→ VikingBot Gateway → Agent;场景 B 是本地 REPL 调试,未配置 OpenViking 时仍可用,只是失去检索与记忆能力;场景 C 独立部署网关、显式连接外部 OpenViking,适合把 bot 挂到生产服务器旁边。Gateway 的服务面:同步 Chat API、SSE 流式事件、反馈接口、OpenViking API 代理。

网关路由的关键设计是平台差异止步于 channel 适配层:channels/base.py 定义统一的消息抽象(入站消息、出站回复、卡片/富文本降级),feishu.py/slack.py/telegram.py 各自只做协议翻译——飞书的卡片、Slack 的 Block Kit、Telegram 的 parse 模式在 adapter 里归一,Agent 循环看到的消息格式与平台无关。channels/manager.py 负责多 channel 并行收发,openapi.py 则把 bot 能力再暴露一层 HTTP,给非聊天平台的调用方。
Agent 内核的四个亮点:
sandbox/manager.py + sandbox/backends 提供 Direct(本机直跑,信任场景)、SRT、OpenSandbox、AIO Sandbox 数档后端,按安全需求选执行环境——bot 跑的是真实代码,沙箱不是可选项。README 明言「安全执行:支持 Direct、SRT、OpenSandbox 和 AIO Sandbox 后端」。openviking_mount/ 更进一步,把 viking:// 空间直接挂进 Agent 的工作区,文件工具就能 read 记忆文件。web-studio 是 React/Vite 的单页应用,README 开篇定位清晰:
Web Studio is the React/Vite frontend workspace for OpenViking. It is a static single page application for resource management, retrieval, bot-backed sessions, and operational diagnostics.
四大板块对应四类工作:资源管理(浏览 viking:// 树、看入库任务状态)、检索(playground 里直接调检索看结果)、会话(bot 驱动的对话,依赖 /bot/v1 代理)、运维诊断(任务、指标、系统状态)。它的运行契约(连接已启动的 server、会话需 --with-bot)再次强调架构分工:前端零状态,一切真相在 server。本地开发的标准启动序列:
uv pip install -e ".[bot,dev]" openviking-server init openviking-server doctor openviking-server --with-bot
对教程读者,studio 最大的价值是可视化验证——第 4 章讲的目录递归、第 3 章的 sidecar、第 6 章的入库流水线,都能在界面上「眼见为实」:

playground 输入一条查询,检索结果带着 URI、层级与分数返回——第 4 章 03 节的可观测轨迹,换了一层皮。对团队推广还有一层价值:不写代码的同事在 studio 里浏览同一棵 viking:// 树,所见即 Agent 所见——「上下文数据库」不再只是工程师的心智模型,而成了团队共享的可视资产。
把 README 列的「长期上下文」能力展开成时序,一次 ov chat 对话在 Bot 内部的完整路径是:
用户消息(飞书/Slack/终端) → channel 适配(平台协议 → 统一消息抽象) → agent/loop.py 主循环 ├─ memory.py:检索 OpenViking(Resource/Peer Memory/Experience) ├─ openviking_mount:viking:// 空间可被文件工具直接 read ├─ 工具调用(sandbox 执行,Direct/SRT/OpenSandbox/AIO) ├─ (可选) subagent.py:后台子任务 └─ cron/heartbeat:定时与常驻任务 → 回复(统一抽象 → 平台协议) → 会话结束:auto-commit → ExtractLoop → 记忆归位(第 5 章)
这张图把前八章全部串起来了:channel 层是「归一」哲学(与第 6 章 Accessor 同构),memory.py 是第 4-5 章检索与记忆的消费者,openviking_mount 让第 2 章的 URI 空间成为 Agent 的原生工作区,最后的 auto-commit 把这次对话沉淀成下一代的记忆——VikingBot 既是 OpenViking 的展示柜,也是它最完整的用户。README_CN 的能力清单里「资源检索、用户记忆、经验记忆和会话沉淀」四项全数对应书中机制,无一新增概念:生态产品没有另起炉灶,这是架构一致性的最好证明。
sdk/ 三份官方 SDK:Go(sdk/go,单包覆盖 client/filesystem/retrieval/resources/sessions/skills/watches/upload 全 API)、Python(openviking-sdk 包,SyncHTTPClient/AsyncHTTPClient,examples/quick_start.py 的主角)、TypeScript(@openviking/sdk)。三者都只是 HTTP 客户端——上一节的路由面即 SDK 面,无魔法。quick_start.py 的用法浓缩成五行:
client = SyncHTTPClient(url="http://localhost:1933") client.initialize() res = client.add_resource(path="https://.../README.md", wait=True) res = client.ls(res["root_uri"]) # 浏览资源树 res = client.glob(pattern="**/*.md", uri=root_uri)
wait=True 封装了第 6 章的异步入库等待(wait_processed),ls/glob/search 一一对应漫游动作——SDK 是教程动作面的代码化。
生态里最有意思的一层是 examples/ 的记忆插件家族,逐个数过来:
十来个目录,共同点是「给某个主流 agent/聊天界面外挂 OpenViking 长期记忆」。它们复用 memory-plugin-shared 公共库,形态各异:Claude Code 走 MCP 或 hook,Cursor 走 hooks 配置,OpenWebUI 走 function 插件。第 5 章 LoCoMo 的 24-57% → 80-83% 评测,跑的就是这套插件接入。与之呼应的 agent-plugins/ 顶层目录(mcp.json、servers、skills)是给 MCP 客户端的免配置挂载包——mcp.json 里写好 endpoint 与工具清单,支持 mcp.json 的客户端一键引入。记忆插件是 OpenViking 的「渠道下沉」:上一节让 Agent 通过 MCP 挂上来,插件则主动走进 Agent 的配置体系——两个方向,同一个目标:凡有 Agent 处,皆可有记忆。
openviking/crypto/ 是存储加密:encryptor.py(加解密核心)、providers.py(加密后端)、config.py(配置)。它与第 7 章 RAGFS 的 crypto/ 模块遥相呼应——Python 侧定义策略,Rust 侧配合执行,落盘内容可整体加密。openviking/privacy/ 面向的是另一类风险——内容外泄:models/service 定义隐私策略,skill_extractor/skill_placeholder/skill_restore 一组模块负责技能内容中的敏感信息打码与还原,server 路由里的 privacy_configs_router(上一节路由清单里那位)把策略管理暴露成 API。两者分工一句话:crypto 管「磁盘被拿走」,privacy 管「内容被带出去」。
落到部署视角再勾一笔:bot 与 studio 都是可选件(--with-bot 开关、studio 是静态资源由 server 托管),关掉它们 OpenViking 依然是完整的上下文数据库;开上它们,它就长成一个带界面的团队 Agent 平台——模块化的接入星系,而非捆绑的大一统发行版。对一个要进生产系统的开源项目,「每一圈都可拆」与「每一圈都可用」同样重要。
💡 漫游要点:第 8 章的全景是一张「接入星系图」——中心是 server 内核,外圈依次是:MCP(协议级,Agent 直连)、VikingBot(平台级,聊天渠道)、Web Studio(人类驾驶舱)、三语言 SDK(应用集成)、记忆插件(Agent 配置级下沉)。每一圈都复用同一套身份模型与动作面;VikingBot 演示了「OpenViking 原生 Agent」的完整形态(沙箱/子 agent/记忆召回/技能挂载),插件家族则证明这套接口足够轻——一个 hook 的成本就能给 Claude Code 换上 80 分的记忆。
下一节:
第 9 章 · 01 基准复现与部署——漫游倒数第二站:亲手跑 benchmark/ 的八大基准,核对 LoCoMo 24-57% → 80-83%,用 grafana 面板观测检索轨迹,再用 docker-compose(Caddy+HTTPS)或 Helm 把整套系统部署上线。