Files

586 lines
30 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Natural Memory v2 — 模型内的记忆层</title>
<meta name="description" content="接在本地 Qwen3.5-4B 上的模型内记忆层。模型重启后不携带历史聊天记录,仍能访问已保存的个人与项目事实,且不把全部历史转换成 GPU 上的长 KV Cache。">
<meta name="color-scheme" content="dark">
<meta name="theme-color" content="#0a0a0a">
<!-- 动效的初始隐藏态只在 JS 可用时生效;脚本被禁用时内容照常可见 -->
<script>document.documentElement.classList.add("js");</script>
<meta property="og:type" content="website">
<meta property="og:title" content="Natural Memory v2 — 模型内的记忆层">
<meta property="og:description" content="接在本地 Qwen3.5-4B 上的模型内记忆层。模型重启后不携带历史聊天记录,仍能访问已保存的个人与项目事实,且不把全部历史转换成 GPU 上的长 KV Cache。">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="assets/favicon.svg">
<link rel="preload" href="assets/fonts/archivo-latin-wdth-normal.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="assets/fonts/geist-mono-latin-wght-normal.woff2" as="font" type="font/woff2" crossorigin>
<!-- 资源带构建指纹:内容一变 URL 就变,浏览器不可能再用到旧 JS/CSS -->
<link rel="stylesheet" href="assets/css/site.css?v=a9c21ef3a8">
</head>
<body data-page="index" data-layout="release">
<a class="skip" href="#doc">跳到正文</a>
<header class="site" id="site">
<div class="topbar">
<a class="brand" href="./" aria-label="Natural Memory v2 发布页">
<svg class="brand__mark" viewBox="0 0 32 32" aria-hidden="true">
<rect class="dim" x="2" y="2" width="7" height="7" rx="1.5"/>
<rect class="dim" x="12" y="2" width="7" height="7" rx="1.5"/>
<rect class="dim" x="22" y="2" width="7" height="7" rx="1.5"/>
<rect class="dim" x="2" y="12" width="7" height="7" rx="1.5"/>
<rect class="on" x="12" y="12" width="7" height="7" rx="1.5"/>
<rect class="dim" x="22" y="12" width="7" height="7" rx="1.5"/>
<rect class="dim" x="2" y="22" width="7" height="7" rx="1.5"/>
<rect class="dim" x="12" y="22" width="7" height="7" rx="1.5"/>
<rect class="on" x="22" y="22" width="7" height="7" rx="1.5"/>
</svg>
<span class="brand__name">Natural Memory</span>
<span class="pill pill--acc">v2</span>
</a>
<span class="crumb">
<span class="crumb__n">00</span>
<span class="crumb__t">总览</span>
</span>
<span class="topbar__spacer"></span>
<nav class="topnav" aria-label="快速导航">
<a class="topnav__a is-on" href="./" aria-current="page">发布页</a> <a class="topnav__a" href="./mechanism">机制</a> <a class="topnav__a" href="./results">测量</a> <a class="topnav__a" href="./nm21">NM2.1</a> <a class="topnav__a" href="./ledger">台账</a> <a class="topnav__a" href="./limits">边界</a> <a class="topnav__a" href="./reproduce">复现</a>
</nav>
<button class="palbtn" id="palBtn" type="button" aria-label="检索全站内容(快捷键 /)">
<span class="palbtn__t">检索</span><span class="kbd">/</span>
</button>
<span class="pill" id="serverChip" title="本站服务端运行时读数">
<i class="dot"></i><span id="serverChipText">读取中</span>
</span>
</div>
<div class="progress" id="progress"></div>
</header>
<main class="release" id="doc">
<!-- ============ BAND 1 · 地址空间(首屏即机制,不是标题块) ============
动效概念:地址空间下降。镜头从 1,048,576 个槽位一路降到一条记录,
每个环节的数字都是真的。机制来自题材自身的物理(读取路径本来就是寻址)。 -->
<section class="hero" id="hero">
<div class="hero__pin">
<canvas class="hero__cv" id="spaceCv" aria-hidden="true"></canvas>
<div class="hero__layer">
<div class="hero__row hero__row--top">
<span class="eyebrow">Natural Memory · NM2.1</span>
<span class="eyebrow hero__geo">1,048,576 槽位 · 738 条活跃记录 · 730 个索引桶</span>
</div>
<div class="hero__row hero__row--mid">
<h1 class="hero__h dsp">模型重启之后,<br>它仍然记得。</h1>
<!-- 头号数字就在第一屏里:读者不需要滚三屏才知道这页在说什么 -->
<p class="hero__fig">
<span class="hero__fig-row">
<span class="hero__fig-v">1.22<small>%</small></span>
<span class="hero__fig-a" aria-hidden="true">→</span>
<span class="hero__fig-v">82.52<small>%</small></span>
</span>
<span class="hero__fig-n">同一 264 题题集的可回答正确率:无记忆基线 → 批次 B。
批次 A 为 62.60%,两批配置不同、不可合并。</span>
</p>
</div>
<div class="hero__row hero__row--bot">
<div class="hero__lede-wrap">
<p class="hero__lede" id="heroLede"></p>
<p class="hero__byline mono">wpyw.site · [email protected] · 本地 Qwen3.5-4B · 4-bit NF4</p>
</div>
<div class="hero__hud" role="status" aria-live="off">
<span class="hero__hud-i mono" id="hudIdx">01 / 08</span>
<span class="hero__hud-n" id="hudName">地址空间</span>
<span class="hero__hud-v mono" id="hudVal">1,048,576 槽位 · 738 条活跃记录</span>
<span class="hero__hud-track"><i id="hudBar"></i></span>
</div>
</div>
</div>
<p class="hero__cue mono">向下滚动 · 走一遍读取路径</p>
</div>
</section>
<!-- ============ BAND 2 · 关键数字(紧贴首屏;以前这里空着一屏多) ============ -->
<section class="band band--tight">
<div class="wrap">
<p class="eyebrow band__k">Key numbers</p>
<div class="kpis reveal" id="heroKpis"></div>
<p class="src" style="display:block;margin-top:16px">出处 · <span id="heroSrc"></span></p>
<nav class="linkrow" aria-label="发布资源" style="margin-top:var(--sp-2xl)">
<a class="btn btn--pri" href="./reproduce">复现实验</a>
<a class="btn" href="./results">测量结果</a>
<a class="btn" href="./nm21">NM2.1 技术论证</a>
<a class="btn" href="./ledger">108 条真实台账</a>
<a class="btn" href="./limits">边界声明</a>
<a class="btn" href="https://wpyw.site" target="_blank" rel="noopener">作者网站 ↗</a>
</nav>
</div>
</section>
<!-- ============ BAND 2 · 重启实验(真实运行回放装置) ============ -->
<section class="band band--alt band--rst" id="restart">
<div class="wrap">
<p class="eyebrow">Evidence · 重启实验</p>
<h2 class="h2">把历史扔掉,它还记得吗?</h2>
<p class="lede2 rst__lede">
下面不是示意动画,是工程里两次真实运行的逐字回放。同一条事实、同一个问题、同一份协议;
两次之间唯一的差别,是写入有没有真的落库。
</p>
<div class="rst" id="rst">
<div class="rst__head">
<div class="seg" role="group" aria-label="选择运行版本">
<button class="seg__b" type="button" data-v="before">修复前</button>
<button class="seg__b is-on" type="button" data-v="after">修复后</button>
</div>
<button class="btn rst__play" type="button" id="rstPlay">重放</button>
<span class="rst__file mono" id="rstFile"></span>
</div>
<div class="rst__grid">
<div class="rst__aside">
<p class="rst__k">写入的事实</p>
<p class="rst__quote" id="rstFact"></p>
<p class="rst__k">重启之后问</p>
<p class="rst__quote rst__quote--q" id="rstQuery"></p>
<div class="rst__gauges">
<div class="rst__g">
<div class="rst__gt"><span>记忆库记录</span><b class="mono" id="rstRec">0</b></div>
<div class="rst__track"><span class="rst__fill rst__fill--store" id="rstRecBar"></span></div>
</div>
<div class="rst__g">
<div class="rst__gt"><span>重启时传入的历史</span><b class="mono" id="rstHist">false</b></div>
<div class="rst__track"><span class="rst__fill rst__fill--hist" id="rstHistBar"></span></div>
</div>
<div class="rst__g">
<div class="rst__gt"><span>注入模型内部的前缀</span><b class="mono" id="rstPf">0<small> tok</small></b></div>
<div class="rst__track"><span class="rst__fill rst__fill--pf" id="rstPfBar"></span></div>
<p class="rst__hint" id="rstPfHint"></p>
</div>
</div>
</div>
<ol class="rst__beats" id="rstBeats"></ol>
</div>
<div class="rst__out" id="rstOut">
<div class="rst__outhead">
<span class="mono">模型输出 · 逐字</span>
<span class="rst__verdict mono" id="rstVerdict"></span>
</div>
<p class="rst__resp mono" id="rstResp"></p>
<div class="rst__kv" id="rstKv"></div>
</div>
</div>
<p class="tiny rst__note" id="rstNote"></p>
</div>
</section>
<!-- ============ BAND 3 · Teaser(全宽读取路径图) ============ -->
<section class="band band--teaser">
<div class="wrap">
<figure class="teaser">
<svg class="dgm" viewBox="0 0 1120 250" role="img"
aria-label="读取路径示意:问题 → 隐状态地址 → LSH 粗索引 → 候选页 → 页内重排 → Top-K → 证据前缀 → 生成">
<!-- 连接线(pathLength=1 让描边可以按 0→1 精确绘制) -->
<g class="dgm__a">
<path pathLength="1" d="M132 78 L156 78" /><path pathLength="1" d="M270 78 L294 78" /><path pathLength="1" d="M408 78 L432 78" />
<path pathLength="1" d="M546 78 L570 78" /><path pathLength="1" d="M684 78 L708 78" /><path pathLength="1" d="M822 78 L846 78" />
<path pathLength="1" d="M960 78 L984 78" />
</g>
<!-- 8 个环节 -->
<g>
<rect class="dgm__box" x="12" y="46" width="120" height="64" rx="8"/>
<text class="dgm__n" x="24" y="66">01</text>
<text class="dgm__l" x="24" y="86">用户问题</text>
<text class="dgm__s" x="24" y="101">自然语言</text>
</g>
<g>
<rect class="dgm__box" x="156" y="46" width="114" height="64" rx="8"/>
<text class="dgm__n" x="168" y="66">02</text>
<text class="dgm__l" x="168" y="86">隐状态地址</text>
<text class="dgm__s" x="168" y="101">Qwen hidden</text>
</g>
<g>
<rect class="dgm__box" x="294" y="46" width="114" height="64" rx="8"/>
<text class="dgm__n" x="306" y="66">03</text>
<text class="dgm__l" x="306" y="86">LSH 粗索引</text>
<text class="dgm__s" x="306" y="101">730 桶</text>
</g>
<g>
<rect class="dgm__box" x="432" y="46" width="114" height="64" rx="8"/>
<text class="dgm__n" x="444" y="66">04</text>
<text class="dgm__l" x="444" y="86">候选页</text>
<text class="dgm__s" x="444" y="101">≤4 页 · 32/页</text>
</g>
<g>
<rect class="dgm__box" x="570" y="46" width="114" height="64" rx="8"/>
<text class="dgm__n" x="582" y="66">05</text>
<text class="dgm__l" x="582" y="86">页内重排</text>
<text class="dgm__s" x="582" y="101">text_retriever</text>
</g>
<g>
<rect class="dgm__box dgm__box--acc" x="708" y="46" width="114" height="64" rx="8"/>
<text class="dgm__n" x="720" y="66">06</text>
<text class="dgm__l" x="720" y="86">Top-K 记录</text>
<text class="dgm__s" x="720" y="101">≤2 条</text>
</g>
<g>
<rect class="dgm__box dgm__box--acc" x="846" y="46" width="114" height="64" rx="8"/>
<text class="dgm__n" x="858" y="66">07</text>
<text class="dgm__l" x="858" y="86">证据前缀</text>
<text class="dgm__s" x="858" y="101">注入 Qwen</text>
</g>
<g>
<rect class="dgm__box" x="984" y="46" width="124" height="64" rx="8"/>
<text class="dgm__n" x="996" y="66">08</text>
<text class="dgm__l" x="996" y="86">普通生成</text>
<text class="dgm__s" x="996" y="101">回答</text>
</g>
<!-- 关键约束注释 -->
<line class="dgm__rule" x1="12" y1="146" x2="1108" y2="146"/>
<text class="dgm__note" x="12" y="172">无全量注意力</text>
<text class="dgm__s" x="1108" y="172" text-anchor="end">BOUNDED READ</text>
<text class="dgm__note" x="12" y="190">当前问题不与全部记忆记录做注意力,只与少量页面和记录交互</text>
<text class="dgm__note" x="12" y="222">读取额外耗时 61.10 ms → 26.35 ms(批次 A → B) · 前缀命中率 96.97% · GPU cache 实际 17,990 / 上限 131,072 token</text>
</svg>
<figcaption class="teaser__cap">
<span class="teaser__k">图 1 · 读取路径</span>
一次问答里记忆层做了什么。用户问题只与少量页面和记录交互,<b>全程没有对全量记忆做注意力</b>;
命中的短证据作为模型内部前缀注入 Qwen。图为示意,环节顺序与实现一致。
</figcaption>
</figure>
</div>
</section>
<!-- ============ BAND 4 · 摘要 ============ -->
<section class="band">
<div class="wrap wrap--narrow">
<p class="eyebrow band__k">Abstract</p>
<h2 class="h2 arr-wipe">这是什么东西</h2>
<p class="lede2">
它接在本地 Qwen3.5-4B 上,是一个<strong>模型内的记忆层</strong>:把适合长期复用的个人事实、项目事实和短对话片段
写进<strong>带地址的记忆记录</strong>;当前问题只读取少量相关记录,再把这些记录作为<strong>模型内部前缀</strong>交给 Qwen 生成答案。
</p>
<p class="lede2" style="margin-top:20px">
它要解决的具体问题是:<strong>模型重启后不携带历史聊天记录,仍能访问已经保存的个人或项目事实,
同时不把全部历史转换成 GPU 上的长 KV Cache。</strong>
</p>
<p class="small" style="margin-top:24px">
当前状态:研究原型到工程验证之间。同一 264 题题集上,可回答正确率从 1.22% 提升到 62.60%(批次 A)
与 82.52%(批次 B);代价是输入前缀变长、解码速度下降约 10%。我们不在页面上把它说成通用智能,
也不把实验室结果表述成线上服务承诺。
</p>
</div>
</section>
<!-- ============ BAND 5 · 本次发布包含什么 ============ -->
<section class="band band--alt">
<div class="wrap">
<p class="eyebrow band__k">What's in this release</p>
<div class="grid g3">
<div class="card">
<p class="rel__k">记忆层与索引</p>
<p class="rel__v">738 <small>active records</small></p>
<p class="rel__d">批次 B 实际装载;24 个页面,页容量 32 条。地址空间设计容量 1,048,576。</p>
</div>
<div class="card">
<p class="rel__k">记忆路由器</p>
<p class="rel__v">2,037,774 <small>参数</small></p>
<p class="rel__d">16 张量 / float32 / 512 B 地址;结构 dim=128 · heads=8 · hidden=2560 · max_hops=3。</p>
</div>
<div class="card">
<p class="rel__k">有界 GPU cache</p>
<p class="rel__v">256 <small>records</small></p>
<p class="rel__d">上限 131,072 token;批次 B 实际用到 17,990 token,fallback 与分配失败均为 0。</p>
</div>
<div class="card">
<p class="rel__k">评测题集</p>
<p class="rel__v">264 <small>题</small></p>
<p class="rel__d">246 可回答 / 18 未知;真实仓库 220 题 + 项目对话事实 44 题。</p>
</div>
<div class="card">
<p class="rel__k">可复核性</p>
<p class="rel__v">逐字原文</p>
<p class="rel__d">样例页的问答全部取自评测原始结果、未经润色,并包含两条我们判错的样例。</p>
</div>
<div class="card card--acc">
<p class="rel__k">复现</p>
<p class="rel__v">一条命令</p>
<p class="rel__d">正式脏数据迁移测试的完整命令、协议参数与产物路径见复现页。</p>
<p style="margin:16px 0 0"><a class="btn" href="./reproduce">去复现 →</a></p>
</div>
</div>
</div>
</section>
<!-- ============ BAND 6 · 结果预览 ============ -->
<section class="band">
<div class="wrap">
<p class="eyebrow band__k">Headline result</p>
<div class="grid g-2-1">
<div class="bars" id="releaseResult">
<div class="barset">
<div class="barset__top">
<span class="barset__t">可回答正确率</span>
<span class="barset__n">同一 264 题题集 · 246 可回答</span>
</div>
<div class="bar bar--base"><span class="bar__l">原版 Qwen</span>
<span class="bar__track"><span class="bar__fill" data-fill="1.22"></span></span>
<span class="bar__v">1.22%<small>3/246</small></span></div>
<div class="bar bar--a"><span class="bar__l">批次 A</span>
<span class="bar__track"><span class="bar__fill" data-fill="62.60"></span></span>
<span class="bar__v">62.60%<small>154/246</small></span></div>
<div class="bar bar--nm2"><span class="bar__l">批次 B</span>
<span class="bar__track"><span class="bar__fill" data-fill="82.52"></span></span>
<span class="bar__v">82.52%<small>203/246</small></span></div>
</div>
<div class="legend">
<span><i class="l-base"></i>原版 Qwen3.5-4B</span>
<span><i class="l-a"></i>批次 A</span>
<span><i class="l-nm2"></i>批次 B</span>
</div>
<p class="small">
两个批次同一题集、同一协议,但配置不同,<strong>分数不可合并</strong>,只能并列读。
目标记忆召回:批次 A 67.48%、批次 B 92.68%——<strong>检索召回率不等于回答正确率</strong>。
</p>
</div>
<div>
<div class="kv">
<div class="kv__r"><span class="kv__k">总体正确率</span><span class="kv__v">7.58% → 64.39% → 82.95%</span></div>
<div class="kv__r"><span class="kv__k">符号定位</span><span class="kv__v">0/192 → 129/192 → 181/192</span></div>
<div class="kv__r"><span class="kv__k">未知拒答</span><span class="kv__v">17/18 → 16/18 → 16/18</span></div>
<div class="kv__r"><span class="kv__k">读取额外耗时</span><span class="kv__v">— → 61.10 → 26.35 ms</span></div>
<div class="kv__r"><span class="kv__k">解码速度</span><span class="kv__v">24.06 → 21.68 → 20.68 tok/s</span></div>
</div>
<p style="margin:20px 0 0"><a class="btn" href="./results">全部测量结果 →</a></p>
</div>
</div>
</div>
</section>
<!-- ============ BAND 7 · 发布之后(NM2.1) ============ -->
<section class="band band--alt">
<div class="wrap">
<p class="eyebrow">After this release · NM2.1</p>
<h2 class="h2">发布之后又做了什么</h2>
<p class="lede2" style="margin-top:20px">
上面所有数字都来自 v2。之后的 NM2.1 换掉了记忆路由器、修掉写入路径上一个会把事实互相销毁的缺陷,
并把「问库里没有的属性时照样编答案」这个 75% 的失败修到 0%。
</p>
<!-- 全页的头号数字;也是唯一一个用 .mega 的地方 -->
<div class="money">
<p class="eyebrow">未知拒答率 · 24 条同形候选</p>
<p class="money__row">
<span class="mega arr-num">100.00<small>%</small></span>
<span class="money__from">从 0.00% 起 —— 修好之前,模型 75% 的情况下照样编一个答案</span>
</p>
<p class="money__cap">
这是整个项目最该被引用的一个数字。它回答的不是「能不能检索到」,而是
<strong>「不知道的时候会不会不懂装懂」</strong>。
</p>
</div>
<div class="nm21grid" style="margin-top:var(--band-tight)">
<div>
<p class="rel__k">未知拒答率 · 同形候选</p>
<p class="rel__v"><em>0.00% →</em>100.00%</p>
<p class="rel__d">问库里不存在的属性时,正确说「不知道」的比例。修好之前,模型 75% 的情况下照样编一个答案。</p>
</div>
<div>
<p class="rel__k">写 20 条不同属性后存活</p>
<p class="rel__v"><em>12/20 →</em>20/20</p>
<p class="rel__d">v2 的写入路径会把 8 条<strong>无关</strong>事实互相 retract,让端到端正确率存在 50% 的硬上限——任何排序器都救不回一条已被删掉的记录。</p>
</div>
<div>
<p class="rel__k">零字面重叠改写</p>
<p class="rel__v"><em>43.75% →</em>68.75%</p>
<p class="rel__d">查询与事实之间没有任何独特字重叠时的回答正确率;24 条同句式候选的随机水平是 4.17%。</p>
</div>
</div>
<div class="grid g-2-1" style="margin-top:32px">
<div>
<p class="small">
<strong>代价几乎为零:</strong>参数量 2,037,774 不变、每条记录地址 512 字节不变、模型包 8.88 GB 不变;
交错基准(7 轮,消除顺序效应)单查询延迟 1.4203 → 1.4242 ms,差 +0.28%,
<strong>小于同一轮里原版自身 4.85% 的离散度</strong>。
</p>
<p class="small">
<strong>失败也一并写出来:</strong>那套「先判属性、再查库」的机制在离线实验里是 100.00% 拒答 / 0.00% 误拒,
但接上运行时<strong>连续失败两次</strong>——第一次把可回答正确率从 100.00% 压到 6.25%;
第二次修好了目标域(泄漏真的到 0.00%、可回答无损)却让另一个域崩到 0.00%。
最终该项已回退,原因也定位到了。
</p>
<p style="margin:22px 0 0; display:flex; flex-wrap:wrap; gap:12px">
<a class="btn btn--pri" href="./nm21">完整技术论证 →</a>
<a class="btn" href="./ledger">108 条真实台账 →</a>
</p>
</div>
<div>
<p class="eyebrow" style="margin-bottom:18px">路由器工件本身的提升</p>
<div class="kv">
<div class="kv__r"><span class="kv__k">Top-1 正确率</span><span class="kv__v">41.12% → 94.14%</span></div>
<div class="kv__r"><span class="kv__k">Recall@3</span><span class="kv__v">46.73% → 96.48%</span></div>
<div class="kv__r"><span class="kv__k">MRR</span><span class="kv__v">47.69% → 95.77%</span></div>
<div class="kv__r"><span class="kv__k">hop 正确率</span><span class="kv__v">73.23% → 100.00%</span></div>
<div class="kv__r"><span class="kv__k">hop 欠预测率</span><span class="kv__v">4.68% → 0.00%</span></div>
<div class="kv__r"><span class="kv__k">替换兼容性</span><span class="kv__v">DROP-IN OK(16/16 键)</span></div>
<div class="kv__r"><span class="kv__k">单元测试</span><span class="kv__v">52 项通过</span></div>
</div>
<p class="tiny" style="margin-top:16px">
这些是路由器工件在冻结评测集上的增益。它<strong>不会</strong>自动传递到最终答案 ——
原因见技术论证页的第十节。
</p>
</div>
</div>
</div>
</section>
<!-- ============ BAND 8 · 深入阅读 ============ -->
<section class="band">
<div class="wrap">
<p class="eyebrow band__k">Read further</p>
<div class="grid g3">
<a class="navcard" href="./division">
<span class="navcard__n">01</span>
<span class="navcard__t">记忆与 KV 的分工</span>
<span class="navcard__d">哪些留在热 KV、哪些写进记忆,判断标准与代价</span>
</a>
<a class="navcard" href="./mechanism">
<span class="navcard__n">02</span>
<span class="navcard__t">一次读取与一次写入</span>
<span class="navcard__d">八个环节、记录字段、四个状态与四个设计决定</span>
</a>
<a class="navcard" href="./nm21">
<span class="navcard__n">04</span>
<span class="navcard__t">NM2.1 · 之后做了什么</span>
<span class="navcard__d">根因、两级验证、两处改动的剂量曲线,以及两次失败的集成</span>
</a>
<a class="navcard" href="./ledger">
<span class="navcard__n">06</span>
<span class="navcard__t">真实评测台账</span>
<span class="navcard__d">108 条逐字原文,可按来源与判定筛选</span>
</a>
<a class="navcard" href="./examples">
<span class="navcard__n">05</span>
<span class="navcard__t">实测样例</span>
<span class="navcard__d">五条逐字原文,含两条我们判错的</span>
</a>
<a class="navcard" href="./cost">
<span class="navcard__n">07</span>
<span class="navcard__t">代价账本</span>
<span class="navcard__d">延迟、解码速度、前缀长度、显存</span>
</a>
</div>
</div>
</section>
<!-- ============ BAND 8 · 边界(正式章节,不是脚注) ============ -->
<section class="band">
<div class="wrap">
<p class="eyebrow band__k">Boundaries · 我们不宣称的内容</p>
<div class="claims claims--loose arr-cards">
<div class="claim"><span class="claim__x">✕</span><span class="claim__t">已经等价于百万 token 的完整 KV</span></div>
<div class="claim"><span class="claim__x">✕</span><span class="claim__t">已经击败生产级 embedding + reranker RAG</span></div>
<div class="claim"><span class="claim__x">✕</span><span class="claim__t">任何自然语言表达都能稳定召回正确记忆</span></div>
<div class="claim"><span class="claim__x">✕</span><span class="claim__t">记忆写入永远不会出错</span></div>
<div class="claim"><span class="claim__x">✕</span><span class="claim__t">一百万条记录已经完成端到端验证</span></div>
<div class="claim"><span class="claim__x">✕</span><span class="claim__t">当前 4B 结果可以直接外推到 14B、32B 或更大模型</span></div>
</div>
<p class="small" style="margin-top:24px">
完整的八条与五项主要局限见 <a href="./limits" class="linku">边界页</a>。
把它们放在发布页正面,是因为它们和上面的数字一样重要。
</p>
</div>
</section>
<!-- ============ BAND 9 · 引用 ============ -->
<section class="band band--alt">
<div class="wrap">
<p class="eyebrow band__k">Citation</p>
<div class="code">
<div class="code__bar">
<span class="code__t">BibTeX</span>
<button class="copy" id="citeCopy" type="button">复制</button>
</div>
<pre><code id="citeBlock">@misc{naturalmemoryv2,
title = {Natural Memory v2: an in-model memory layer for local LLMs},
author = {wpy},
year = {2026},
note = {Research prototype on Qwen3.5-4B. 264-question dirty-corpus
transfer test; two independent batches.},
url = {https://wpyw.site}
}</code></pre>
</div>
<p class="tiny" style="margin-top:16px">
引用时请一并注明「批次 A 与批次 B 配置不同、分数不可合并」,否则单个数字会被误读。
</p>
</div>
</section>
</main>
<footer class="footer">
<div class="wrap footer__in">
<div class="footer__col">
<p class="footer__h">作者</p>
<div class="author">
<a class="author__a" href="https://wpyw.site" target="_blank" rel="noopener">
<span class="author__k">个人网站</span><span class="author__v">wpyw.site</span>
</a>
<a class="author__a" href="mailto:[email protected]">
<span class="author__k">邮箱</span><span class="author__v">[email protected]</span>
</a>
</div>
</div>
<div class="footer__col footer__col--wide">
<p class="footer__h">来源</p>
<div class="readout" id="footFiles"></div>
<p class="footer__h" style="margin-top:20px">服务端读数</p>
<div class="readout mono" id="footServer"><span>读取中…</span></div>
</div>
<div class="footer__col footer__col--wide">
<p class="footer__h">说明</p>
<p class="footer__note" id="disclaimer"></p>
<p class="footer__meta">构建于 2026-09-16 20:39 · 所有数字取自工程内的正式报告,未做外推或估算。</p>
</div>
</div>
</footer>
<!-- 全站检索:客户端索引,无后端、无网络请求 -->
<div class="pal" id="pal" hidden>
<div class="pal__mask" id="palMask"></div>
<div class="pal__box" role="dialog" aria-modal="true" aria-label="检索全站内容">
<div class="pal__hd">
<span class="pal__ico" aria-hidden="true"></span>
<input class="pal__in" id="palInput" type="text" role="combobox" aria-expanded="true"
aria-controls="palList" autocomplete="off" spellcheck="false"
placeholder="检索全站内容:章节、数字、术语…">
<span class="kbd">Esc</span>
</div>
<div class="pal__list" id="palList" role="listbox" aria-label="检索结果"></div>
<div class="pal__ft">
<span><span class="kbd">↑</span><span class="kbd">↓</span> 选择</span>
<span><span class="kbd">↵</span> 打开</span>
<span class="pal__n mono" id="palN"></span>
</div>
</div>
</div>
<script src="assets/js/data.js?v=a9c21ef3a8"></script>
<script src="assets/js/examples.js?v=a9c21ef3a8"></script>
<script src="assets/js/restart.js?v=a9c21ef3a8"></script>
<script src="assets/js/nm21.js?v=a9c21ef3a8"></script>
<script src="assets/js/ledger.js?v=a9c21ef3a8"></script>
<script src="assets/js/search.js?v=a9c21ef3a8"></script>
<script src="assets/js/space.js?v=a9c21ef3a8"></script>
<script src="assets/js/site.js?v=a9c21ef3a8"></script>
</body>
</html>