OpenViking v0.4.23
中文
亮点
- 检索与排序:每条查询改为一次全局向量召回,再按模式统一 rerank,移除目录递归与父级分数传播,评分阈值在 rerank 之后应用(#5450);移除热度加权及
retrieval.hotness_alpha(#5454);find/search新增事件时间衰减排序参数events_time_decay_protection(#5214);search新增search_type="keywords"BM25 关键词检索,覆盖 REST、MCP、CLI 与 Python / TypeScript / Go SDK(#5456);Jev rerank 新增 Choice 模式,通过rerank.mode: "choice"启用,默认仍为noul;Choice 分数是候选池内的相对概率,启用时需把rerank.threshold设为0,MCP 调用同时传min_score=0(#5486);observer 报告向量度量与分数尺度(#5488)。 - 文件系统与知识整理:
ls/tree返回has_more分页状态(#5330);tree支持directories_only目录过滤和 L0/L1 展示(#5334);ls支持include_abstract/include_overview(#5434);ov compile --skill memory对记忆目录就地去重、合并与规范化(#5178);reindex迁移到 RFV planner,新增force,异步任务可恢复,queue_workers.reindex.max_concurrent默认4(#5416);snapshot 处理文件被目录替换的情况(#5441);Markdown 解析保留首个一级标题之前的内容(#5427),飞书表格转义竖线与换行(#5435)。 - MCP、权限与 Studio:MCP 工具声明行为注解(#5075),整次调用失败时返回
isError: true(#5078);新增list_users、list_groups、get_acl、set_acl工具,write/add_resource支持acl参数(#5466);账号变更缺少注册表基线时拒绝写入,避免覆盖已有账号(#5483);ovcli.conf接受oidc_token(#5448);Studio 新增账号级记忆抽取规则编辑(#5495)。 - 模型与向量服务:gpt-6 及之后的 OpenAI 模型按推理模型处理,修复 session commit 返回 400(#5398);火山、Ark 媒体响应和 Anthropic(LiteLLM)支持透传额外请求体(#5432、#5440、#5447);Gemini 异步客户端按请求创建,修复
attached to a different loop(#5428);Jina 默认维度按模型推导(#5426);内存 cache provider 拒绝 Lua 脚本(#5446)。 - Agent 插件:采集过滤统一为「清洗 → 过滤 → 截断」,pi / Codex / DSH / OpenCode / Claude Code 共用(#5359、#5375);Claude Code 与 Codex 召回钩子转发
recallExcludeUris(#5407),pi 支持recallExcludeUris/recallQueryFilters(#5368);Codex 采集排除宿主注入的启动上下文(#5392);pi/viking commit未归档时给出原因(#5468);pi 与 OpenCode 随插件附带 OpenViking skills(#5525);新增ov-kanbanskill 用于结构化任务交接(#5157、#5451);DSH 增加插件卡片图标与多语言描述(#5362)、按会话解析 workspace peer 设置(#5380);Hermes 修复召回绑定当前会话、setup 时保留.env其他内容等问题(#5372、#5374、#5449、#5455)。 - 安装:安装器只从发布渠道安装,不再
git clone,改动前先列出并确认(#5464);安装包改由文档站下载,docs.openviking.net与docs.openviking.ai谁先响应用谁(#5477、#5487);默认同时安装ovCLI(#5498);先询问语言并清理旧安装器遗留(#5490);指南与插件 README 的安装入口统一为openviking.ai/install(#5478)。 - CLI、文档与品牌:CLI 采用 E 品牌标志与纯色配色(#5545);README 改为 agent-first 快速开始,并加入火山 OpenViking Service 产品页入口(#5524);文档站对照实现逐页校对(#5501–#5511、#5533、#5534);开源字体排版(#5536、#5543)与 E 品牌(#5537、#5546)。
- 其他修复:Windows + uv 等经中间启动器运行 Bot 时,就绪状态被误判导致主服务等待 900 秒(#5431)。
兼容性与迁移
-
Session 自动 commit 配置项合并(#5363):
memory.session_auto_commit.default_enabled与idle_enabled合并为enabled(默认false)。旧键名不兼容,会被忽略,启动日志只有一条Ignoring unknown config fieldWARNING,不会报错;配过旧键的部署升级后自动 commit 会关闭,需要改成enabled: true。同一配置下,scan_batch_size、scan_batch_pause_seconds一并移除,由scan_rate_limit_files_per_second(默认2.0)取代;check_interval_seconds默认值由60秒改为600秒。{ "memory": { "session_auto_commit": { "enabled": true } } } -
已知问题:
find传非法参数返回 500,而不是 400:limit为负数时,本地向量库后端和 VikingDB 后端都会返回 500(本地后端是 native 检索接口收到负数 topk 后整数溢出);limit=0在 VikingDB 后端返回 500,本地后端返回空结果(来自 #5450)。VikingDB 后端下filter条件不带op也会返回 500(v0.4.22 起已有)。后续版本会补参数校验;在此之前请由调用方保证limit >= 1,且filter条件带op。 -
检索评分与排序变化(#5450、#5454):召回由逐层递归 + 父级分数传播改为单次全局召回;仅在启用 rerank 时候选池放大到
2 × limit,统一 rerank 一次,rerank 失败沿用向量分数。retrieval.hotness_alpha与score_propagation_alpha配置已删除,配置中保留会被忽略并输出 WARNING;排序只取向量分数或 rerank 分数。同一查询的结果顺序和分数可能与 v0.4.22 不同,设置了score_threshold或按分数过滤的调用方需要重新校准。 -
reindex拒绝非递归的 semantic namespace 请求(#5395):ov reindex viking://user/alice --mode semantic_and_vectors --recursive=false以前会忽略recursive=false并递归重建整个命名空间,现在返回INVALID_ARGUMENT。请对具体的 resource、memory 或 skill 目录发起请求。 -
/health对无效凭证返回认证错误(#5471):不带凭证的请求仍返回 200;显式带了过期或无效 API key 时,以前返回匿名 200,现在返回认证错误。用无效 key 探活的脚本需要去掉凭证。 -
Gemini SDK 最低版本(#5428、#5439):
gemini、gemini-asyncextras 的google-genai要求升到>=1.39.0。更低版本的 SDK 会在embed_async()报TypeError、close()报AttributeError。 -
安装器行为变化(#5464、#5477、#5498):默认安装不再
git clone;--dist github、--source remote、OPENVIKING_REPO_URL/REF/BRANCH仍被接受,但只打印提示。Claude Code 2.1.224+ 通过 URL marketplace 自动更新,Claude Code 2.0 以下会被跳过。默认会用npm install -g @openviking/cli安装ovCLI,需要本机有 npm;不想安装时在勾选项里取消 CLI,或用--harness指定不含cli的列表。
English
Highlights
- Retrieval and ranking: each query now does one global vector recall and then one unified rerank by mode; directory recursion and parent score propagation are removed, and score thresholds apply after rerank (#5450); hotness weighting and
retrieval.hotness_alphaare removed (#5454);find/searchadd the event time-decay ranking parameterevents_time_decay_protection(#5214);searchaddssearch_type="keywords"for BM25 keyword retrieval across REST, MCP, CLI, and the Python / TypeScript / Go SDKs (#5456); Jev rerank adds a Choice mode, enabled withrerank.mode: "choice"(the default staysnoul); Choice scores are relative probabilities within the candidate pool, so setrerank.thresholdto0and passmin_score=0for MCP calls (#5486); the observer reports the vector metric and score scale (#5488). - Filesystem and knowledge consolidation:
ls/treereturn ahas_morepagination flag (#5330);treesupportsdirectories_onlyand L0/L1 content (#5334);lssupportsinclude_abstract/include_overview(#5434);ov compile --skill memorydeduplicates, merges, and normalizes a memory directory in place (#5178);reindexmoves to the RFV planner, addsforce, makes async tasks recoverable, andqueue_workers.reindex.max_concurrentdefaults to4(#5416); snapshots handle files replaced by directories (#5441); Markdown parsing keeps content before the first top-level heading (#5427) and Feishu tables escape pipes and line breaks (#5435). - MCP, permissions, and Studio: MCP tools advertise behavior annotations (#5075) and whole-call failures return
isError: true(#5078); adds thelist_users,list_groups,get_acl, andset_acltools, andwrite/add_resourceacceptacl(#5466); account mutations are refused when the registry baseline is missing, so existing accounts are not overwritten (#5483);ovcli.confacceptsoidc_token(#5448); Studio adds account-level memory extraction rule editing (#5495). - Models and vector services: gpt-6 and later OpenAI models are treated as reasoning models, fixing session commit 400 errors (#5398); extra request bodies are forwarded for Volcengine, Ark media responses, and Anthropic through LiteLLM (#5432, #5440, #5447); Gemini async clients are created per request, fixing
attached to a different loop(#5428); the Jina default dimension is derived from the model (#5426); the in-memory cache provider rejects Lua scripts (#5446). - Agent plugins: capture filtering is unified as sanitize → filter → truncate across pi / Codex / DSH / OpenCode / Claude Code (#5359, #5375); Claude Code and Codex recall hooks forward
recallExcludeUris(#5407) and pi honorsrecallExcludeUris/recallQueryFilters(#5368); Codex capture excludes host-injected startup context (#5392); pi/viking commitexplains why nothing was archived (#5468); pi and OpenCode ship OpenViking skills (#5525); adds theov-kanbanskill for structured task handoff (#5157, #5451); DSH adds the plugin card icon and localized descriptions (#5362) and resolves workspace peer settings per session (#5380); Hermes fixes recall binding to the current session and preserves unrelated.envcontent during setup (#5372, #5374, #5449, #5455). - Installation: the installer installs from the release channel only, no longer runs
git clone, and lists what it will change before changing anything (#5464); installer files are downloaded from the docs site, using whichever ofdocs.openviking.netanddocs.openviking.aianswers first (#5477, #5487); theovCLI is installed by default (#5498); the installer asks for the language first and clears old installers' leftovers (#5490); guides and plugin READMEs useopenviking.ai/installas the install entry (#5478). - CLI, docs, and branding: the CLI adopts the E mark and solid colors (#5545); the README gets an agent-first Quick Start and an entry to the Volcengine OpenViking Service product page (#5524); the docs site is reviewed page by page against the implementation (#5501–#5511, #5533, #5534); open-font typography (#5536, #5543) and the E branding (#5537, #5546).
- Other fixes: when the Bot runs through an intermediate launcher such as Windows + uv, its ready state was misjudged and the main server waited 900 seconds (#5431).
Compatibility and Migration
-
Session auto-commit settings merged (#5363):
memory.session_auto_commit.default_enabledandidle_enabledare merged intoenabled(defaultfalse). The old key names are not compatible and are ignored, with only anIgnoring unknown config fieldWARNING in the startup log and no error. Deployments that set the old keys will have auto-commit turned off after upgrading and must setenabled: true. In the same block,scan_batch_sizeandscan_batch_pause_secondsare removed in favor ofscan_rate_limit_files_per_second(default2.0), and the defaultcheck_interval_secondschanges from60to600seconds.{ "memory": { "session_auto_commit": { "enabled": true } } } -
Known issue:
findwith invalid parameters returns 500 instead of 400: a negativelimitreturns 500 on both the local vector backend and the VikingDB backend (on the local backend the native search call overflows on a negative topk);limit=0returns 500 on the VikingDB backend and an empty result on the local backend (introduced by #5450). On the VikingDB backend, afiltercondition withoutopalso returns 500 (already the case since v0.4.22). Parameter validation will be added in a later release; until then, callers should keeplimit >= 1and includeopin everyfiltercondition. -
Retrieval scoring and ordering changes (#5450, #5454): recall changes from per-level recursion with parent score propagation to a single global recall; the candidate pool grows to
2 × limitonly when rerank is enabled, rerank runs once, and vector scores are used if rerank fails. Theretrieval.hotness_alphaandscore_propagation_alphasettings are removed; leftover entries are ignored with a WARNING, and ordering uses only vector or rerank scores. Result order and scores for the same query may differ from v0.4.22, so callers usingscore_thresholdor score filters should recalibrate. -
reindexrejects non-recursive semantic namespace requests (#5395):ov reindex viking://user/alice --mode semantic_and_vectors --recursive=falseused to ignorerecursive=falseand rebuild the whole namespace recursively; it now returnsINVALID_ARGUMENT. Send the request to a specific resource, memory, or skill directory instead. -
/healthreturns an authentication error for invalid credentials (#5471): requests without credentials still get 200. Requests that explicitly present an expired or invalid API key used to get an anonymous 200 and now get an authentication error. Probes that send an invalid key should drop the credentials. -
Minimum Gemini SDK version (#5428, #5439): the
geminiandgemini-asyncextras now requiregoogle-genai>=1.39.0. Older SDKs raiseTypeErrorinembed_async()andAttributeErrorinclose(). -
Installer behavior changes (#5464, #5477, #5498): the default install no longer runs
git clone;--dist github,--source remote, andOPENVIKING_REPO_URL/REF/BRANCHare still accepted but only print a notice. Claude Code 2.1.224+ updates through a URL marketplace, and Claude Code older than 2.0 is skipped. TheovCLI is installed by default withnpm install -g @openviking/cli, which needs npm on the machine; to skip it, uncheck the CLI item or pass a--harnesslist withoutcli.
First-time Contributors
Full Changelog: v0.4.22...v0.4.23