<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>开发者周报 Builder Weekly</title><description>Builder Weekly 开发者周报，编程技术、架构设计、AI/LLM、产品思维与设计资源。开发周报, 编程周报, 技术周报, programming weekly</description><link>https://devweekly.github.io/</link><item><title>从阅读偏好到个性化文学翻译：如何让 LLM 学习一个人的审美</title><link>https://devweekly.github.io/posts/%E4%BB%8E%E9%98%85%E8%AF%BB%E5%81%8F%E5%A5%BD%E5%88%B0%E4%B8%AA%E6%80%A7%E5%8C%96%E6%96%87%E5%AD%A6%E7%BF%BB%E8%AF%91%E5%A6%82%E4%BD%95%E8%AE%A9-llm-%E5%AD%A6%E4%B9%A0%E4%B8%80%E4%B8%AA%E4%BA%BA%E7%9A%84%E5%AE%A1%E7%BE%8E/</link><guid isPermaLink="true">https://devweekly.github.io/posts/%E4%BB%8E%E9%98%85%E8%AF%BB%E5%81%8F%E5%A5%BD%E5%88%B0%E4%B8%AA%E6%80%A7%E5%8C%96%E6%96%87%E5%AD%A6%E7%BF%BB%E8%AF%91%E5%A6%82%E4%BD%95%E8%AE%A9-llm-%E5%AD%A6%E4%B9%A0%E4%B8%80%E4%B8%AA%E4%BA%BA%E7%9A%84%E5%AE%A1%E7%BE%8E/</guid><description>从推荐系统的隐式反馈到 LLM 的自然语言偏好推断，结合 2025–2026 年最新研究和 Spotify、DoorDash、Glean 等真实产品，分析如何建立具有时间维度、上下文条件、证据链和持续修正能力的个人 User Model。</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;从阅读偏好到个性化文学翻译：如何让 LLM 在长期翻译与校对中学习一个人的审美&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;调研日期：2026-10-31&lt;br /&gt;
适用场景：英文、日文等小说翻译；同一作品多种译风；读者逐段评分、比较、批注；跨章节、跨作品积累长期偏好。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;摘要&lt;/h2&gt;
&lt;p&gt;个人文学阅读偏好不应被实现为一段不断膨胀的 system prompt，也不应简单等同于“喜欢某位作家的风格”。&lt;strong&gt;记住用户做过什么，不等于理解用户喜欢什么；理解用户喜欢什么，也不等于知道当前任务应该调用哪些偏好。&lt;/strong&gt; 本文的目标是把个人偏好建模成一个有时间维度、有上下文条件、有证据链、可以持续修正的 &lt;strong&gt;User Model&lt;/strong&gt;。更合适的实现是一个可版本化的 &lt;strong&gt;Reader Preference Model（RPM，读者偏好模型）&lt;/strong&gt;：它从明确声明、译文评分、候选比较、局部修改、接受/拒绝建议和阅读行为中提取证据，形成多维、带置信度、带适用范围、可追溯和可撤销的偏好知识；翻译时再根据作品、语言方向、文体、叙事角色和当前任务检索出一份小型的 Preference Snapshot，贯穿初译、审校、风格润色和最终验收。&lt;/p&gt;
&lt;p&gt;核心结论：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;记录反馈时保留原始事件，不要只保留模型总结出的偏好。&lt;/strong&gt; 用户的一次 8 分、一次改词和一句“不喜欢这个感觉”都是不同类型的证据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;评分与比较结合。&lt;/strong&gt; 单独打分容易受段落难度、绝对标准漂移影响；对同一原文的 A/B 比较更容易表达“我更喜欢哪一个”，并可用 Bradley–Terry 等方法估计维度偏好。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;偏好必须多维、分场景。&lt;/strong&gt; 句子长短、词汇密度、叙述距离、对话口语度、意象保留、解释倾向、幽默、节奏等不能压成一个“文风分数”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;区分读者偏好、作品风格、翻译约束和事实正确性。&lt;/strong&gt; 读者喜欢不等于忠实；风格可以调节，但人物关系、情节、视角、时态、专名和原文歧义不能被偏好覆盖。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;先用外部记忆与检索，不急于微调。&lt;/strong&gt; 结构化偏好、实例记忆、检索和提示词组合通常足以启动；积累高质量、稳定、覆盖多场景的反馈后，再考虑 LoRA / preference tuning。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;建立持续评估集。&lt;/strong&gt; 每次偏好模型升级，都用固定的原文片段、用户历史选择和反例回归，检查是否真的更符合读者，而不是只让模型自评更高。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;核心论点：记忆、偏好理解与偏好调用是三个不同的问题&lt;/h2&gt;
&lt;p&gt;本文要解决的不是简单的“让模型记住用户”，而是三个彼此独立、又必须连接起来的问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;记住用户做过什么，不等于理解用户喜欢什么；理解用户喜欢什么，也不等于知道当前任务应该调用哪些偏好。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;个人偏好应建模为一个有时间维度、有上下文条件、有证据链、可以持续修正的 User Model。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;第一句话描述的是系统能力边界。第二句话给出了目标架构。它们共同意味着：不能把原始聊天记录、偏好摘要、向量检索结果和最终 Prompt 混成一个“Memory”概念。&lt;/p&gt;
&lt;h3&gt;一、记住用户做过什么，不等于理解用户喜欢什么&lt;/h3&gt;
&lt;p&gt;用户做过的事情只是观察（observation），偏好是需要从观察中推断的潜在状态（latent preference）。例如，用户在一段英文心理描写中选择了译文 B，可能是因为它保留了人物迟疑，也可能只是因为 A 有一个词翻错了；一次 6 分可能反映段落本身难译，而不是用户不喜欢这种风格；用户修改一个词，也不等于认同整段译文的其余风格。&lt;/p&gt;
&lt;p&gt;所以第一层必须保存&lt;strong&gt;发生过什么、当时的任务是什么、用户做了什么、用户给出的理由是什么&lt;/strong&gt;。这些是证据，不是结论。第二层才从多条、不同来源的证据中提出偏好假设，并标记其范围和不确定性。&lt;/p&gt;
&lt;h3&gt;二、理解用户喜欢什么，也不等于知道当前任务应该调用哪些偏好&lt;/h3&gt;
&lt;p&gt;即使系统已经推断出用户通常偏好简洁、克制、不解释潜台词，也不能在每一个任务中无条件应用它。用户在人物独白中偏好含蓄，不代表景物描写也应该压低修辞；用户平时偏好短句，不代表当前作品中的意识流长句应该被拆碎；用户正在尝试一种新译风，也不代表长期偏好已经改变。&lt;/p&gt;
&lt;p&gt;因此，每次执行任务都需要一个独立的 &lt;strong&gt;Preference Applicability / Resolution&lt;/strong&gt; 阶段：读取当前请求和作品上下文，识别任务需要哪些偏好维度，判断哪些历史偏好在当前场景中有效，并允许“本次明确要求”覆盖推断出来的长期默认值。&lt;/p&gt;
&lt;h3&gt;三、把 User Model 看成带证据的、随时间变化的假设集合&lt;/h3&gt;
&lt;p&gt;User Model 不是一段永久正确的用户简介，而是一组可被支持、质疑、限定、替代和撤销的偏好主张（preference claims）。每条主张都应回答：用户偏好什么、在哪些上下文中成立、系统何时观察到证据、偏好从什么时候起被认为有效、结论来自明确声明还是间接推断、有哪些正反证据，以及新证据到来时应当如何修正。&lt;/p&gt;
&lt;p&gt;这会把个性化从“把旧信息塞回 Prompt”提升为一个有数据模型、有推断策略、有运行时决策、有评估闭环的 User Modeling 问题。&lt;/p&gt;
&lt;h2&gt;1. 问题定义：要学习的不是“翻译风格”，而是读者的条件偏好&lt;/h2&gt;
&lt;p&gt;假设同一段英文小说可以有三个都基本正确的译法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A：句式贴近原文，保留从句结构，语义对应清楚，但中文略显翻译腔。&lt;/li&gt;
&lt;li&gt;B：调整语序，表达自然，节奏较快，但弱化了原文的迟疑感。&lt;/li&gt;
&lt;li&gt;C：更有文学修辞，词汇更有质感，但增加了原文没有明确表达的情绪。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用户可能在一般叙述中偏好 B，在人物意识流段落中偏好 A，在景物描写中偏好 C。因而“用户喜欢 B”不是可复用的知识；需要学习的是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在什么文本条件、什么维度、什么权衡下，用户更偏好哪种表达，以及这种判断有多确定。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以把偏好表示为条件函数：&lt;/p&gt;
&lt;p&gt;[
P(y_i succ y_j mid x, c, d, u)
]&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(x)：源文及其上下文；&lt;/li&gt;
&lt;li&gt;(y_i,y_j)：两个候选译文；&lt;/li&gt;
&lt;li&gt;(c)：作品与场景上下文（叙述、对话、内心独白、动作、景物等）；&lt;/li&gt;
&lt;li&gt;(d)：评价维度（忠实、自然、节奏、语气、意象、词汇等）；&lt;/li&gt;
&lt;li&gt;(u)：用户；&lt;/li&gt;
&lt;li&gt;输出：用户在当前条件下更偏好哪个候选及其置信度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，系统应同时保存“用户总体偏好”和“当前项目/当前作品的局部偏好”，并允许它们不同。&lt;/p&gt;
&lt;h2&gt;2. 业界研究给出的重要启示&lt;/h2&gt;
&lt;h3&gt;2.1 个性化偏好不能从长对话中自动可靠地保留下来&lt;/h3&gt;
&lt;p&gt;Zhao 等人在 ICLR 2025 的 &lt;strong&gt;Do LLMs Recognize Your Preferences? (PrefEval)&lt;/strong&gt; 中构建了 3,000 条、覆盖 20 个主题的偏好评测数据。论文指出，模型在多轮对话中推断、记忆并遵循用户偏好仍有明显困难；在其零样本设置中，约 10 轮（约 3k tokens）后，多数模型的偏好遵循准确率已低于 10%。仅仅把历史对话塞进长上下文，并不能保证偏好被正确使用。&lt;/p&gt;
&lt;p&gt;工程含义：不能依赖“模型应该记得用户以前说过什么”。必须把偏好提取、存储、检索和应用做成显式流程，并对每次使用的偏好快照留痕。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://arxiv.org/abs/2502.09597&quot;&gt;PrefEval — ICLR 2025&lt;/a&gt; · &lt;a href=&quot;https://proceedings.iclr.cc/paper_files/paper/2025/hash/28a46044775d97a4efcbcf14e7f13209-Abstract-Conference.html&quot;&gt;ICLR 页面&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.2 长期偏好需要区分情景记忆与语义记忆&lt;/h3&gt;
&lt;p&gt;EMNLP 2025 的 &lt;strong&gt;PRIME: Large Language Model Personalization with Cognitive Dual-Memory and Personalized Thought Process&lt;/strong&gt; 将个性化记忆区分为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Episodic memory：具体历史互动，例如用户对某句译文打 9 分、拒绝某个词、选择 A 而不是 B。&lt;/li&gt;
&lt;li&gt;Semantic memory：从多次互动归纳出的稳定倾向，例如用户通常偏好简洁叙述、不喜欢解释性增译。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一区分特别适合翻译系统。不能只保存总结后的“喜欢自然中文”，因为未来无法追溯这一结论来自哪些文本、哪些修改和多少次反馈；也不能每次把全部历史事件塞进 Prompt，因为上下文成本和噪声会持续增加。&lt;/p&gt;
&lt;p&gt;建议保留不可变的反馈事件作为情景记忆，再由异步归纳过程生成带证据引用的语义偏好。语义偏好发生变化时，保留版本和生效时间，不覆盖历史。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2025.emnlp-main.1711/&quot;&gt;PRIME — EMNLP 2025&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.3 读者的个体偏好差异足以改变模型排名&lt;/h3&gt;
&lt;p&gt;ACL 2026 Findings 的 &lt;strong&gt;Personalized Benchmarking: Evaluating LLMs by Individual Preferences&lt;/strong&gt; 研究了 115 位活跃用户的个性化模型偏好排名。研究显示，个体排名与总体排名可能显著不同，Bradley–Terry 排名相关性平均仅约 0.04。总体上表现最好的模型，不一定是某位具体用户最喜欢的模型。&lt;/p&gt;
&lt;p&gt;工程含义：不要把“多数读者认为好”当作“这个用户喜欢”。通用翻译质量评估与个人审美评估必须分开。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2026.findings-acl.31/&quot;&gt;Personalized Benchmarking — ACL 2026&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.4 文学翻译尤其不能只依赖自动评分或 LLM-as-a-judge&lt;/h3&gt;
&lt;p&gt;NAACL 2025 的 &lt;strong&gt;How Good Are LLMs for Literary Translation, Really?&lt;/strong&gt; 提出 LITEVAL-CORPUS，包含段落级平行语料、人工译文和多个机器翻译系统输出。研究发现，文学翻译评价方案越复杂，普通评价者越容易产生误判；BWS（Best-Worst Scaling）这类相对简单的比较方法，在识别人工译文方面优于复杂 MQM 方案。自动指标和 LLM 评价在该实验中表现较差。论文强调，文学翻译仍有大量字面、风格单一的问题。&lt;/p&gt;
&lt;p&gt;工程含义：不要让用户面对几十个抽象的质量维度表格。优先提供两个候选译文的并排比较、局部高亮和简短理由输入。模型评分可以辅助定位问题，但不能替代读者判断。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2025.naacl-long.548/&quot;&gt;LITEVAL-CORPUS — NAACL 2025&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.5 2026 年 LAIT 读者研究：整段沉浸阅读与局部比较都重要&lt;/h3&gt;
&lt;p&gt;2026 年 EMNLP Findings 的 &lt;strong&gt;AI translation of literary texts is ‘fine’, but readers still prefer human translations&lt;/strong&gt;（LAIT）让 15 位读者比较 15 部法语、波兰语和日语小说的人工译文与 agentic LLM 翻译。实验同时采用约 8,000 词的沉浸式阅读和约 300 词的局部对照：读者在 772 次片段级比较中有 522 次显著偏好人工译文。研究还发现，机器翻译在同一本书内部的质量波动更大；自动指标（包括 LLM-as-a-judge）未能恢复读者偏好，且倾向于偏爱机器译文。&lt;/p&gt;
&lt;p&gt;LAIT 的评价界面值得借鉴：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先完整阅读一段，而不是只看孤立句子；&lt;/li&gt;
&lt;li&gt;对整段评价流畅度、清晰度、沉浸感和是否愿意继续读；&lt;/li&gt;
&lt;li&gt;再进行局部并排比较；&lt;/li&gt;
&lt;li&gt;高亮特别好的/差的词句；&lt;/li&gt;
&lt;li&gt;记录选择、理由和选择难度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;工程含义：个人偏好学习也要同时收集段落级与片段级反馈。单句被喜欢，不代表放回整章后仍然自然。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2138/&quot;&gt;ACL Anthology — EMNLP Findings 2026&lt;/a&gt; · &lt;a href=&quot;https://lait.cs.sfu.ca/&quot;&gt;LAIT 项目与评价界面&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.6 翻译个性化已有专门研究，不只是通用 LLM personalization&lt;/h3&gt;
&lt;p&gt;2026 EACL 的 &lt;strong&gt;Steering Large Language Models for Machine Translation Personalization&lt;/strong&gt; 专门研究文学翻译中的个性化。论文比较了显式 Prompt 与从少量风格样例中学习偏好的方法，并探索通过 Sparse Autoencoder（SAE）特征进行 contrastive steering。研究指出，用户偏好经常隐含在少量示例里，而不是能被用户完整描述成一组规则；对比式 steering 可以更稳健地控制风格。&lt;/p&gt;
&lt;p&gt;工程含义：用户喜欢/不喜欢的实际译文片段，是比“请翻译得优雅一点”更有价值的训练信号。系统应保存经过用户确认的正反例，并在相似场景中检索。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2026.eacl-long.217/&quot;&gt;Steering LLMs for MT Personalization — EACL 2026&lt;/a&gt; · &lt;a href=&quot;https://arxiv.org/abs/2505.16612&quot;&gt;arXiv&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.7 比较式反馈适合学习多维、隐式偏好&lt;/h3&gt;
&lt;p&gt;ACL 2025 的 &lt;strong&gt;Comparison-based Active Preference Learning for Multi-dimensional Personalization (AMPLe)&lt;/strong&gt; 研究通过交互式比较收集隐式偏好，并用 Bayesian inference 更新多维偏好估计；主动选择策略会优先询问最有信息量的问题，以减少用户反馈成本。&lt;/p&gt;
&lt;p&gt;工程含义：不要让用户给每个段落填写一张长评分表。系统可以先用已有偏好生成两个风格有差异的候选，只在模型不确定或某个偏好维度尚未识别时，询问用户做一次有针对性的比较。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2025.acl-long.1590/&quot;&gt;AMPLe — ACL 2025&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.8 翻译反馈训练需要防止 Reward Hacking&lt;/h3&gt;
&lt;p&gt;NAACL 2024 的 &lt;strong&gt;Improving Machine Translation with Human Feedback: An Exploration of Quality Estimation as a Reward Model&lt;/strong&gt; 研究把质量估计模型作为翻译反馈训练的奖励模型，并发现过度优化问题：奖励分数提高，实际翻译质量却可能下降。质量模型可能给错误译文高分，导致错误传播。&lt;/p&gt;
&lt;p&gt;工程含义：即使未来训练个人 Reward Model，也不能只追求它自己的分数。必须用独立的人工回归集检查忠实度、遗漏、增译和风格变化；个人偏好不能覆盖语义正确性。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2024.naacl-long.451.pdf&quot;&gt;Improving MT with Human Feedback — NAACL 2024&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.9 更早的个性化机器翻译研究已经指出：翻译偏好属于接收者&lt;/h3&gt;
&lt;p&gt;Mirkin 与 Meunier 的 &lt;strong&gt;Personalized Machine Translation: Predicting Translational Preferences&lt;/strong&gt;（2015）指出，同样正确的译文可能因句长、正式程度、标点、词汇处理等个人偏好而被不同用户评价不同；个性化机器翻译应该考虑译文接收者的偏好，而不只是作者或领域。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/D15-1238.pdf&quot;&gt;Personalized Machine Translation — ACL 2015&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;3. 推荐的偏好知识模型&lt;/h2&gt;
&lt;p&gt;不要只存一个 profile JSON。建议分成五类数据。&lt;/p&gt;
&lt;h3&gt;3.1 Preference Profile：稳定偏好&lt;/h3&gt;
&lt;p&gt;这是每次翻译时最常用的紧凑偏好画像。每条偏好都要有维度、方向、强度、置信度、适用范围、证据数量和状态。&lt;/p&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;profileId&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;reader-default&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;preferences&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;narration.sentence_rhythm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;direction&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;prefer_varied_natural_rhythm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;strength&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.78&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.84&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;scope&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;zh-CN&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;literary-fiction&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;narration&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;evidenceCount&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;17&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;active&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;evidenceRefs&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;pref-event-102&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;pref-event-118&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;translation.explicit_explanation&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;direction&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;avoid_unnecessary_explanation&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;strength&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.91&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.93&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;scope&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;all-literary-translation&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;evidenceCount&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;23&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;active&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;evidenceRefs&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;pref-event-087&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;pref-event-132&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;dialogue.colloquiality&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;direction&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;moderate_conversational&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;strength&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.55&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.61&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;scope&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;zh-CN&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;dialogue&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;evidenceCount&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;provisional&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;evidenceRefs&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;pref-event-141&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;推荐维度树：&lt;/p&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;一级维度&lt;/th&gt;&lt;th&gt;二级维度示例&lt;/th&gt;&lt;th&gt;反馈中可以观察什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;语义忠实&lt;/td&gt;&lt;td&gt;漏译、增译、歧义保留、隐含信息&lt;/td&gt;&lt;td&gt;是否擅自解释、是否改变人物意图&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;句法节奏&lt;/td&gt;&lt;td&gt;句长、断句、从句、长短句变化&lt;/td&gt;&lt;td&gt;是否过碎、是否拖沓、是否保留迟疑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;词汇选择&lt;/td&gt;&lt;td&gt;具体/抽象、常用/生僻、书面/口语&lt;/td&gt;&lt;td&gt;是否用力过猛、是否词不达意&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;叙述声音&lt;/td&gt;&lt;td&gt;叙述距离、冷静/抒情、主观性&lt;/td&gt;&lt;td&gt;是否擅自增加情绪、是否改变叙述者声音&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人物对话&lt;/td&gt;&lt;td&gt;口语度、人物差异、时代感、潜台词&lt;/td&gt;&lt;td&gt;是否所有人物说话都像同一个人&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文学效果&lt;/td&gt;&lt;td&gt;意象、隐喻、幽默、含蓄、留白&lt;/td&gt;&lt;td&gt;是否解释掉意象、是否添加修辞&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中文可读性&lt;/td&gt;&lt;td&gt;自然度、流畅度、歧义、阅读负担&lt;/td&gt;&lt;td&gt;是否有翻译腔、是否过度润色&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;规范偏好&lt;/td&gt;&lt;td&gt;标点、引号、数字、专名&lt;/td&gt;&lt;td&gt;是否符合个人长期习惯&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;维度不能一开始就设计得过细。建议先建立 8 个一级维度和约 20 个常用二级维度，允许用户反馈后再扩展。&lt;/p&gt;
&lt;h3&gt;3.2 Preference Events：原始反馈事件&lt;/h3&gt;
&lt;p&gt;这是最重要的数据。只要用户作出反馈，就记录一个事件，保持原文、候选译文、用户动作和上下文的关联。&lt;/p&gt;
&lt;p&gt;建议事件类型：&lt;/p&gt;























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;例子&lt;/th&gt;&lt;th&gt;主要用途&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Explicit rule&lt;/td&gt;&lt;td&gt;“不要把人物的沉默翻译成心理解释”&lt;/td&gt;&lt;td&gt;直接建立明确约束&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rating&lt;/td&gt;&lt;td&gt;这段 8/10&lt;/td&gt;&lt;td&gt;绝对质量趋势&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pairwise choice&lt;/td&gt;&lt;td&gt;A 比 B 好&lt;/td&gt;&lt;td&gt;相对偏好学习&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Span annotation&lt;/td&gt;&lt;td&gt;高亮“他的眼神变得阴冷”，标记不喜欢&lt;/td&gt;&lt;td&gt;精确定位语言特征&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edit acceptance&lt;/td&gt;&lt;td&gt;用户接受模型建议&lt;/td&gt;&lt;td&gt;弱正向信号&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edit rejection&lt;/td&gt;&lt;td&gt;用户撤销模型修改&lt;/td&gt;&lt;td&gt;弱负向信号&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rewrite&lt;/td&gt;&lt;td&gt;用户自己改写一整句&lt;/td&gt;&lt;td&gt;高价值正例&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comparative comment&lt;/td&gt;&lt;td&gt;“B 自然，但把原文的犹豫感弄没了”&lt;/td&gt;&lt;td&gt;学习维度权衡&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Project override&lt;/td&gt;&lt;td&gt;“这本书的对话要比平时更克制”&lt;/td&gt;&lt;td&gt;作品级局部偏好&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;事件示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;eventId&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-event-20261031-001&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pairwise_choice&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;timestamp&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-10-31T10:30:00+08:00&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;projectId&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;novel-001&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;chapterId&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;chapter-03&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;sourceLanguage&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;en&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;targetLanguage&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;zh-CN&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;genre&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;literary-fiction&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;segment&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;source&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;He seemed about to say something, then thought better of it.&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;contextBefore&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;She waited.&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;contextAfter&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;The train pulled away.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;candidates&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;他似乎想说什么，最终还是作罢。&quot;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;B&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;他像是要说些什么，却又打消了念头。&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;chosen&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;B&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;choiceStrength&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;clear&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;reason&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;B 保留了动作中的迟疑，A 的“作罢”太像总结性叙述。&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;dimensionTags&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;narration.subtlety&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;sentence_rhythm&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;scope&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;project&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;source&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;user_explicit_feedback&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原始事件不要被 LLM 重写覆盖。模型可以生成归纳标签，但必须保留用户原话和证据引用。&lt;/p&gt;
&lt;h3&gt;3.3 Preference Examples：正反例库&lt;/h3&gt;
&lt;p&gt;保存具体片段，而不是只保存规则。&lt;/p&gt;
&lt;p&gt;每个样例至少包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;源文及必要上下文；&lt;/li&gt;
&lt;li&gt;用户认可的译文；&lt;/li&gt;
&lt;li&gt;用户拒绝的译文；&lt;/li&gt;
&lt;li&gt;用户的理由；&lt;/li&gt;
&lt;li&gt;适用文体和维度；&lt;/li&gt;
&lt;li&gt;来源作品与章节；&lt;/li&gt;
&lt;li&gt;是否允许跨作品复用；&lt;/li&gt;
&lt;li&gt;脱敏和版权使用状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;检索时优先找同一类文本：对话找对话，心理描写找心理描写，不能因为用户喜欢某个景物段落，就把它当作所有文本的风格模板。&lt;/p&gt;
&lt;h3&gt;3.4 Project Overrides：作品级偏好覆盖&lt;/h3&gt;
&lt;p&gt;用户可能总体偏好简洁，但某部小说需要保留冗长、意识流、重复和不稳定叙述。作品级覆盖应优先于全局偏好，但不能覆盖语义正确性。&lt;/p&gt;
&lt;p&gt;建议优先级：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;源文事实、语义、人物关系和明确翻译约束；&lt;/li&gt;
&lt;li&gt;当前作品的明确要求；&lt;/li&gt;
&lt;li&gt;当前章节/人物/叙述视角的局部约束；&lt;/li&gt;
&lt;li&gt;用户稳定的全局阅读偏好；&lt;/li&gt;
&lt;li&gt;当前译风 preset；&lt;/li&gt;
&lt;li&gt;模型默认习惯。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果同一层级出现冲突，不要静默选择，应标记冲突并在必要时询问。&lt;/p&gt;
&lt;h3&gt;3.5 Preference Provenance：偏好来源与可信度&lt;/h3&gt;
&lt;p&gt;偏好不能只有一个 confidence 数字。需要知道它来自哪里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户明确声明：高可信；&lt;/li&gt;
&lt;li&gt;多次选择同一方向：中高可信；&lt;/li&gt;
&lt;li&gt;用户亲自改写：高价值，但需要判断是否只是局部修正；&lt;/li&gt;
&lt;li&gt;接受模型建议：弱正向证据；&lt;/li&gt;
&lt;li&gt;未修改：不能直接视为喜欢；&lt;/li&gt;
&lt;li&gt;模型从评分推断：需要用户确认；&lt;/li&gt;
&lt;li&gt;单次评分：低到中等可信。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;还要记录时间和版本。长期偏好会变化，系统应允许“过去喜欢、现在不喜欢”，而不是把所有事件平均成一个永不改变的结论。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;4. 如何把评分转化为可学习信号&lt;/h2&gt;
&lt;h3&gt;4.1 不要只给一个总分&lt;/h3&gt;
&lt;p&gt;总分适合快速反馈，但解释能力弱。建议采用“总分 + 可选维度 + 一句话理由”。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;评分&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;整体阅读体验&lt;/td&gt;&lt;td&gt;8/10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;忠实于原文&lt;/td&gt;&lt;td&gt;9/10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中文自然度&lt;/td&gt;&lt;td&gt;7/10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;叙述声音&lt;/td&gt;&lt;td&gt;8/10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;节奏&lt;/td&gt;&lt;td&gt;6/10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人物对话&lt;/td&gt;&lt;td&gt;不适用&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;维度评分可以只在用户愿意时填写。不要每段都要求完整填写。&lt;/p&gt;
&lt;h3&gt;4.2 Pairwise preference 比单独评分更有价值&lt;/h3&gt;
&lt;p&gt;同一段原文生成 A/B 两个候选，让用户回答：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更喜欢 A；&lt;/li&gt;
&lt;li&gt;更喜欢 B；&lt;/li&gt;
&lt;li&gt;两者差不多；&lt;/li&gt;
&lt;li&gt;两者都不好。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;并允许补充“为什么”。&lt;/p&gt;
&lt;p&gt;两个候选应该有明确、可解释的风格差异。例如 A 更忠实保留句法，B 更自然地调整中文语序；不要生成两个差异很小、无法判断的版本。&lt;/p&gt;
&lt;p&gt;比较数据可以用于 Bradley–Terry 模型：&lt;/p&gt;
&lt;p&gt;[
P(A succ B) =
rac{exp(s_A)}{exp(s_A)+exp(s_B)}
]&lt;/p&gt;
&lt;p&gt;其中候选分数可以由多个偏好维度构成：&lt;/p&gt;
&lt;p&gt;[
s(y,x)=sum_k w_k(u,c),f_k(y,x)
]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(f_k)：候选在某个维度上的特征或评价；&lt;/li&gt;
&lt;li&gt;(w_k)：用户在当前上下文下对该维度的权重；&lt;/li&gt;
&lt;li&gt;(u)：用户；&lt;/li&gt;
&lt;li&gt;(c)：作品、文体和文本场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际系统不必一开始就训练 Bradley–Terry 模型。可以先保存比较事件，再通过统计或 Bayesian 更新逐步估计偏好权重。&lt;/p&gt;
&lt;h3&gt;4.3 区分“绝对质量”与“相对喜欢”&lt;/h3&gt;
&lt;p&gt;用户给 6 分，可能是因为两个候选都不好；给 8 分，可能是两个候选都很好。不能直接把分数当成某个风格维度的权重。&lt;/p&gt;
&lt;p&gt;建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;绝对评分用于追踪整体质量；&lt;/li&gt;
&lt;li&gt;A/B 比较用于学习偏好方向；&lt;/li&gt;
&lt;li&gt;局部批注用于定位具体语言现象；&lt;/li&gt;
&lt;li&gt;用户改写用于构造高质量正例；&lt;/li&gt;
&lt;li&gt;明确规则用于建立硬约束。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.4 主动询问，不要频繁打扰&lt;/h3&gt;
&lt;p&gt;当系统在某个维度上不确定时，选择最有信息量的片段发起比较。&lt;/p&gt;
&lt;p&gt;例如，系统已经知道用户不喜欢过度解释，但不确定用户是否偏好保留长句。可以选一个没有情节风险、但长短句处理差异明显的片段，提供两版比较。&lt;/p&gt;
&lt;p&gt;以下情况值得询问：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;两个候选在用户尚不确定的维度上差异明显；&lt;/li&gt;
&lt;li&gt;当前项目偏好与全局偏好冲突；&lt;/li&gt;
&lt;li&gt;用户连续否定同一种模型倾向；&lt;/li&gt;
&lt;li&gt;一条新反馈可能改变已有高置信度规则；&lt;/li&gt;
&lt;li&gt;风格修改可能影响人物声音或叙述视角。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要在每个段落都要求打分。主动学习的目标是用更少反馈消除更大的不确定性。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;5. 如何贯穿完整翻译生命周期&lt;/h2&gt;
&lt;h3&gt;5.1 翻译开始：建立 Preference Snapshot&lt;/h3&gt;
&lt;p&gt;每本书开始时，系统读取：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户全局偏好；&lt;/li&gt;
&lt;li&gt;目标语言方向偏好；&lt;/li&gt;
&lt;li&gt;文学类型偏好；&lt;/li&gt;
&lt;li&gt;作品级覆盖；&lt;/li&gt;
&lt;li&gt;当前译风 preset；&lt;/li&gt;
&lt;li&gt;最相关的正反例；&lt;/li&gt;
&lt;li&gt;当前偏好模型版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后生成一份冻结的 Preference Snapshot，记录 snapshotId、profileVersion、projectOverrideVersion 和检索到的 example IDs。&lt;/p&gt;
&lt;p&gt;快照的作用是保证同一章初译、审校、风格润色使用相同的偏好基线，避免翻译到一半偏好悄悄变化。用户新反馈可以生成下一版本快照，是否应用到当前章由工作流决定。&lt;/p&gt;
&lt;h3&gt;5.2 初译：偏好用于选择表达，不用于改写事实&lt;/h3&gt;
&lt;p&gt;初译 Prompt 应将规则分层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不可违反：语义、事实、人物关系、视角、时态、专名和明确的上下文约束；&lt;/li&gt;
&lt;li&gt;强偏好：用户稳定的语言习惯；&lt;/li&gt;
&lt;li&gt;软偏好：当前作品和译风的审美倾向；&lt;/li&gt;
&lt;li&gt;示例：少量相关正例和反例。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;偏好应是可权衡的风格指导，而不是要求模型逐字模仿历史样例。&lt;/p&gt;
&lt;h3&gt;5.3 一致性审校：把个人偏好变成可检查项&lt;/h3&gt;
&lt;p&gt;审校不应只检查术语和事实，也应检查长期偏好：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是否无必要地解释原文没有说出的心理活动；&lt;/li&gt;
&lt;li&gt;是否把不同人物的对话统一成同一种口吻；&lt;/li&gt;
&lt;li&gt;是否频繁使用用户不喜欢的抽象词或套话；&lt;/li&gt;
&lt;li&gt;是否把原文有意保留的含糊改成明确结论；&lt;/li&gt;
&lt;li&gt;是否为了“流畅”破坏人物的迟疑、重复或停顿；&lt;/li&gt;
&lt;li&gt;是否把所有句子都改成相同的中文节奏。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;审校输出要区分“明确违反偏好”“可能不符合偏好”“只是另一种可接受的译法”。不能把审美差异全部报成错误。&lt;/p&gt;
&lt;h3&gt;5.4 风格润色：按场景选择偏好&lt;/h3&gt;
&lt;p&gt;同一作品内至少要区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;叙述文字；&lt;/li&gt;
&lt;li&gt;人物对话；&lt;/li&gt;
&lt;li&gt;内心独白；&lt;/li&gt;
&lt;li&gt;书信、日记、文件；&lt;/li&gt;
&lt;li&gt;动作与场景；&lt;/li&gt;
&lt;li&gt;意识流或非可靠叙述。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Preference Snapshot 可以按场景裁剪，避免将所有偏好无差别注入每个段落。&lt;/p&gt;
&lt;h3&gt;5.5 最终校对：检查整体阅读体验&lt;/h3&gt;
&lt;p&gt;局部句子都很漂亮，不代表整章好读。最终审校应增加章节级检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;句长与节奏是否持续单调；&lt;/li&gt;
&lt;li&gt;人物声音是否稳定且彼此可区分；&lt;/li&gt;
&lt;li&gt;同一叙述者的语言是否发生无意漂移；&lt;/li&gt;
&lt;li&gt;词汇和修辞是否重复过度；&lt;/li&gt;
&lt;li&gt;情绪强度是否被持续抬高；&lt;/li&gt;
&lt;li&gt;章节是否具有连贯的阅读沉浸感。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一层需要同时看较大上下文，而不是只把每个 segment 单独打分。&lt;/p&gt;
&lt;h3&gt;5.6 反馈回流：写入事件，再异步更新偏好&lt;/h3&gt;
&lt;p&gt;建议流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用户评分、比较、批注或修改；&lt;/li&gt;
&lt;li&gt;立即保存不可变的 Preference Event；&lt;/li&gt;
&lt;li&gt;LLM 将自然语言理由映射到候选偏好维度，保留原始理由；&lt;/li&gt;
&lt;li&gt;偏好更新器检查是否与已有偏好一致、冲突或属于局部覆盖；&lt;/li&gt;
&lt;li&gt;低置信度结论先作为 provisional；&lt;/li&gt;
&lt;li&gt;达到证据阈值后更新 Preference Profile；&lt;/li&gt;
&lt;li&gt;生成新版本并记录证据引用；&lt;/li&gt;
&lt;li&gt;下次任务检索新版本，必要时通过 A/B 回归验证。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要让负责翻译的 Agent 在生成译文的同一个步骤里直接修改长期偏好。翻译执行与偏好学习应分离，避免一次偶然的生成结果污染用户画像。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;6. 推荐系统架构&lt;/h2&gt;
&lt;p&gt;建议采用“事件存储 + 语义偏好 + 示例检索 + 快照编译”的结构，而不是把所有反馈塞进向量数据库。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[用户阅读与翻译交互] --&amp;gt; B[Feedback Event Store]
    B --&amp;gt; C[Feedback Normalizer]
    C --&amp;gt; D[Preference Evidence]
    D --&amp;gt; E[Preference Aggregator]
    E --&amp;gt; F[Versioned Reader Preference Profile]
    B --&amp;gt; G[Positive / Negative Example Store]
    F --&amp;gt; H[Preference Snapshot Compiler]
    G --&amp;gt; H
    I[Project / Chapter Overrides] --&amp;gt; H
    J[Genre / Scene Context] --&amp;gt; H
    H --&amp;gt; K[Translation Pipeline]
    K --&amp;gt; L[Draft / Review / Polish]
    L --&amp;gt; M[User Rating / Pairwise Choice / Edit]
    M --&amp;gt; B
    N[Regression Evaluation Set] --&amp;gt; O[Preference Evaluation]
    F --&amp;gt; O
    O --&amp;gt; E&lt;/pre&gt;
&lt;h3&gt;6.1 存储职责&lt;/h3&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;数据&lt;/th&gt;&lt;th&gt;推荐存储&lt;/th&gt;&lt;th&gt;是否需要向量化&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;原始评分、选择、批注、编辑事件&lt;/td&gt;&lt;td&gt;SQLite / PostgreSQL 关系表或 JSONL 事件日志&lt;/td&gt;&lt;td&gt;不需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;当前偏好 Profile&lt;/td&gt;&lt;td&gt;JSON 文档或关系表&lt;/td&gt;&lt;td&gt;不需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;偏好版本与证据引用&lt;/td&gt;&lt;td&gt;关系表 / JSON&lt;/td&gt;&lt;td&gt;不需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;正反例片段&lt;/td&gt;&lt;td&gt;文本存储 + 元数据&lt;/td&gt;&lt;td&gt;可选&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;正反例语义检索&lt;/td&gt;&lt;td&gt;Embedding index&lt;/td&gt;&lt;td&gt;有足够样例后再考虑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;当前项目覆盖规则&lt;/td&gt;&lt;td&gt;项目数据库&lt;/td&gt;&lt;td&gt;不需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Snapshot&lt;/td&gt;&lt;td&gt;JSON，随翻译任务固化&lt;/td&gt;&lt;td&gt;不需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;回归测试样本&lt;/td&gt;&lt;td&gt;版本化文件或数据库&lt;/td&gt;&lt;td&gt;不需要&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;向量检索不是偏好系统的前提。&lt;/strong&gt; 早期几十到几百条样例，可以用标签、语言、场景、维度和全文检索。只有样例积累较多、需要按语义找相似语言现象时，再引入向量检索。向量相似度不能替代范围过滤和偏好权重。&lt;/p&gt;
&lt;h3&gt;6.2 核心数据表建议&lt;/h3&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;表&lt;/th&gt;&lt;th&gt;关键字段&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;preference_events&lt;/td&gt;&lt;td&gt;event_id, user_id, project_id, event_type, source_text, context, payload, created_at&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preference_evidence&lt;/td&gt;&lt;td&gt;evidence_id, event_id, dimension, polarity, strength, confidence, scope&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preference_profiles&lt;/td&gt;&lt;td&gt;profile_id, user_id, version, status, created_at&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preference_rules&lt;/td&gt;&lt;td&gt;profile_version, dimension, direction, strength, confidence, scope, evidence_count&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preference_examples&lt;/td&gt;&lt;td&gt;example_id, event_id, source_text, context, preferred_text, rejected_text, tags&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_overrides&lt;/td&gt;&lt;td&gt;project_id, dimension, direction, strength, reason, version&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preference_snapshots&lt;/td&gt;&lt;td&gt;snapshot_id, project_id, profile_version, override_version, examples, compiled_prompt, created_at&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preference_eval_cases&lt;/td&gt;&lt;td&gt;case_id, source_text, context, candidates, expected_preference, dimensions&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;事件表必须能还原当时用户看到的候选译文和上下文。仅保存分数和一句摘要，未来无法可靠重放或重新分析。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;7. 风格 Preset 与个人偏好如何组合&lt;/h2&gt;
&lt;p&gt;两者不是同一层概念。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Style Preset&lt;/strong&gt;：当前任务主动选择的风格方向，例如“克制的现代中文叙述”“偏口语的对白”“保留原文句法”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reader Preference&lt;/strong&gt;：读者长期形成的审美倾向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project Override&lt;/strong&gt;：当前作品有意偏离个人常规偏好的局部要求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;建议不要把“王小波风格”“金庸风格”等作家标签直接当作完整偏好模型。它们只能作为初始参考或风格入口；真正生效的应该是可解释的语言特征，例如句子节奏、幽默强度、词汇密度、叙述距离和对话口语度。还要避免把风格标签转化成特定作品的固定短语或可识别表达。&lt;/p&gt;
&lt;p&gt;组合时采用明确的层次：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Translation Constraints&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;gt; Project Override&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;gt; Scene / Character Constraints&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;gt; Reader Preference&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;gt; Style Preset&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;gt; Model Defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中语义正确性和用户明确的硬约束始终优先。Style Preset 与 Reader Preference 冲突时，系统应显示冲突，例如：“当前 preset 倾向保留长句，但你的长期偏好倾向自然拆句；本项目是否有意保留原文长句？”&lt;/p&gt;
&lt;h3&gt;7.1 同一读者可以拥有多个偏好模式&lt;/h3&gt;
&lt;p&gt;不要强制只有一个 global profile。可以有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Default literary reading；&lt;/li&gt;
&lt;li&gt;Literary fiction；&lt;/li&gt;
&lt;li&gt;Historical fiction；&lt;/li&gt;
&lt;li&gt;Japanese light novel；&lt;/li&gt;
&lt;li&gt;Dialogue-heavy；&lt;/li&gt;
&lt;li&gt;Experimental / stream of consciousness。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们不是多个互不相干的人格，而是同一读者在不同文本任务中的条件偏好。系统可以从用户的实际选择中推断场景差异，但推断应带置信度。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;8. 从简单规则到模型训练：采用渐进式方案&lt;/h2&gt;
&lt;h3&gt;阶段一：结构化记忆 + Prompt 编译（建议先做）&lt;/h3&gt;
&lt;p&gt;所需能力：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;记录用户反馈事件；&lt;/li&gt;
&lt;li&gt;维护偏好 Profile；&lt;/li&gt;
&lt;li&gt;保存正反例；&lt;/li&gt;
&lt;li&gt;按作品、语言、文体和场景检索；&lt;/li&gt;
&lt;li&gt;为每次翻译生成 Preference Snapshot；&lt;/li&gt;
&lt;li&gt;记录实际使用的偏好版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;优点是可解释、可调试、数据量要求低，不需要训练模型。对个人翻译场景，通常应先把这一阶段做好。&lt;/p&gt;
&lt;h3&gt;阶段二：偏好统计与主动学习&lt;/h3&gt;
&lt;p&gt;当用户已经积累一定数量的评分和比较后：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 pairwise 数据估计维度权重；&lt;/li&gt;
&lt;li&gt;用 Bayesian 更新置信度；&lt;/li&gt;
&lt;li&gt;识别全局与项目偏好的冲突；&lt;/li&gt;
&lt;li&gt;选择最有信息量的 A/B 比较；&lt;/li&gt;
&lt;li&gt;形成个人偏好回归集。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一步解决的是“哪些偏好确实稳定”，而不只是让模型写出更漂亮的 Profile 摘要。&lt;/p&gt;
&lt;h3&gt;阶段三：个性化 Reranker / Reward Model&lt;/h3&gt;
&lt;p&gt;数据充足后，可以训练或适配一个个人偏好排序器：&lt;/p&gt;
&lt;p&gt;输入：原文 + 上下文 + 候选译文 + 场景标签。&lt;br /&gt;
输出：候选在忠实度、自然度、节奏、叙述声音、文学效果等维度上的个人偏好分数。&lt;/p&gt;
&lt;p&gt;必须把语义正确性作为独立约束或独立评估信号，避免 Reward Model 为了讨好读者而奖励增译、漏译或错误解释。&lt;/p&gt;
&lt;h3&gt;阶段四：PEFT / LoRA / Preference Tuning&lt;/h3&gt;
&lt;p&gt;只有在以下条件满足时才值得考虑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;反馈样本数量和质量足够；&lt;/li&gt;
&lt;li&gt;偏好跨作品有稳定性；&lt;/li&gt;
&lt;li&gt;正反例覆盖多个文本场景；&lt;/li&gt;
&lt;li&gt;已有可靠的个人回归测试集；&lt;/li&gt;
&lt;li&gt;Prompt + Retrieval + Reranking 已经遇到明确瓶颈。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;训练方式可以考虑 DPO/IPO 一类偏好优化，或者小型 LoRA 适配。训练数据应使用同一源文下的 chosen/rejected 候选，并携带必要的上下文和场景标签。不要直接把用户所有修改拼成无条件 SFT 数据：修改可能只是修正事实、术语或某一处上下文，不代表全局风格偏好。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;9. 关键工程风险与控制&lt;/h2&gt;




























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;风险&lt;/th&gt;&lt;th&gt;典型表现&lt;/th&gt;&lt;th&gt;控制方法&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;过度泛化&lt;/td&gt;&lt;td&gt;喜欢某段优美表达，模型以后处处堆砌修辞&lt;/td&gt;&lt;td&gt;偏好带场景范围；样例按文本类型检索&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;反馈误读&lt;/td&gt;&lt;td&gt;用户改词是为了修正事实，却被归纳为风格偏好&lt;/td&gt;&lt;td&gt;区分修改意图；不确定时不更新全局偏好&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;评分噪声&lt;/td&gt;&lt;td&gt;同样质量的段落评分不同&lt;/td&gt;&lt;td&gt;评分与 pairwise 结合；保留段落难度和上下文&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;偏好漂移&lt;/td&gt;&lt;td&gt;早期喜欢的风格后来不喜欢&lt;/td&gt;&lt;td&gt;时间衰减、版本化、允许撤销和显式更新&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;项目污染&lt;/td&gt;&lt;td&gt;某本小说的特殊要求影响其他作品&lt;/td&gt;&lt;td&gt;Project Override 与全局 Profile 分离&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型自我强化&lt;/td&gt;&lt;td&gt;模型生成某种译法，再由模型自己判定它符合用户偏好&lt;/td&gt;&lt;td&gt;用户反馈作为主要证据；LLM judge 只能辅助&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;语义牺牲&lt;/td&gt;&lt;td&gt;为了符合偏好而擅自增删原文信息&lt;/td&gt;&lt;td&gt;忠实度独立门禁；硬约束优先&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;样例版权&lt;/td&gt;&lt;td&gt;将出版译文或用户上传作品用于训练&lt;/td&gt;&lt;td&gt;记录来源、授权和用途；默认只用于当前用户个人检索&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上下文膨胀&lt;/td&gt;&lt;td&gt;所有历史偏好和样例都塞进 Prompt&lt;/td&gt;&lt;td&gt;Snapshot 编译、场景检索、预算控制&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;评价投机&lt;/td&gt;&lt;td&gt;Reward 分数上涨，真实阅读体验下降&lt;/td&gt;&lt;td&gt;独立读者回归集、整段沉浸式评估&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;9.1 负面反馈要比正面反馈更精确&lt;/h3&gt;
&lt;p&gt;“不喜欢”不等于“永远禁止”。例如用户不喜欢某处“他感到一种难以言喻的悲伤”，可能是因为它解释了原文留白，而不是反对所有心理描写。&lt;/p&gt;
&lt;p&gt;因此负面反馈至少要分成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;禁止：明确的长期规则；&lt;/li&gt;
&lt;li&gt;不偏好：通常避免，但上下文允许；&lt;/li&gt;
&lt;li&gt;本段不适合：只对当前片段成立；&lt;/li&gt;
&lt;li&gt;事实错误：不是审美偏好；&lt;/li&gt;
&lt;li&gt;质量问题：不一定能归纳为个人风格。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9.2 接受模型建议不等于用户喜欢&lt;/h3&gt;
&lt;p&gt;用户可能只是快速接受一个修改，之后并未仔细阅读。未修改也不意味着满意。接受/拒绝只能作为弱信号；明确打分、比较理由和用户亲自改写才是更强证据。&lt;/p&gt;
&lt;h3&gt;9.3 不要让“风格一致”变成“语言单调”&lt;/h3&gt;
&lt;p&gt;个人偏好不是要求每段都写成同一种声音。优秀的翻译需要服从原作的多样性：叙述者、人物、场景和情绪都可能要求不同表达。偏好模型应学习用户如何欣赏这些差异，而不是消除差异。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;10. 推荐的产品交互&lt;/h2&gt;
&lt;p&gt;不需要一个复杂的偏好配置后台。最有价值的是把反馈自然嵌入阅读和校对过程。&lt;/p&gt;
&lt;h3&gt;10.1 译文旁边的轻量反馈&lt;/h3&gt;
&lt;p&gt;每个段落可以有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;评分：1–10；&lt;/li&gt;
&lt;li&gt;更喜欢：A / B / 差不多 / 都不好；&lt;/li&gt;
&lt;li&gt;标记：喜欢这句 / 不喜欢这句；&lt;/li&gt;
&lt;li&gt;一句话原因；&lt;/li&gt;
&lt;li&gt;“这是本书的特殊要求”开关。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认只显示最轻量的操作。用户愿意深入时再展开维度。&lt;/p&gt;
&lt;h3&gt;10.2 对模型建议记录“接受原因”&lt;/h3&gt;
&lt;p&gt;用户接受一个修改时，允许选择或输入：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更自然；&lt;/li&gt;
&lt;li&gt;更忠实；&lt;/li&gt;
&lt;li&gt;节奏更好；&lt;/li&gt;
&lt;li&gt;人物声音更准确；&lt;/li&gt;
&lt;li&gt;更含蓄；&lt;/li&gt;
&lt;li&gt;更简洁；&lt;/li&gt;
&lt;li&gt;其他。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些标签只是辅助分类，不应取代用户自己的表达。&lt;/p&gt;
&lt;h3&gt;10.3 提供偏好记忆的可见性&lt;/h3&gt;
&lt;p&gt;用户应能查看：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当前模型认为我偏好什么；&lt;/li&gt;
&lt;li&gt;每条偏好来自哪些反馈；&lt;/li&gt;
&lt;li&gt;适用范围；&lt;/li&gt;
&lt;li&gt;置信度；&lt;/li&gt;
&lt;li&gt;最近一次更新时间；&lt;/li&gt;
&lt;li&gt;哪些规则是我明确说的，哪些是系统推断的；&lt;/li&gt;
&lt;li&gt;暂停、修正或删除某条偏好。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这比一个不可见的“AI 已经学会你的风格”更可信。&lt;/p&gt;
&lt;h3&gt;10.4 定期做偏好校准&lt;/h3&gt;
&lt;p&gt;例如完成一本书后，系统汇总：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本书最常被认可的语言特征；&lt;/li&gt;
&lt;li&gt;最常被否定的表达方式；&lt;/li&gt;
&lt;li&gt;与全局偏好不同的地方；&lt;/li&gt;
&lt;li&gt;仍然不确定的偏好；&lt;/li&gt;
&lt;li&gt;建议加入全局 Profile 的规则。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用户确认后才升级全局偏好。不要自动把单本书的局部审美提升为永久偏好。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;11. 具体实施路线&lt;/h2&gt;
&lt;p&gt;建议按下面顺序实施，不要一开始就做个人模型训练。&lt;/p&gt;



















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;优先级&lt;/th&gt;&lt;th&gt;能力&lt;/th&gt;&lt;th&gt;交付结果&lt;/th&gt;&lt;th&gt;价值&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;Feedback Event Schema&lt;/td&gt;&lt;td&gt;评分、比较、批注、编辑统一事件结构&lt;/td&gt;&lt;td&gt;建立可用数据基础&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;Versioned Preference Profile&lt;/td&gt;&lt;td&gt;多维偏好、置信度、范围、证据&lt;/td&gt;&lt;td&gt;防止偏好退化为长 Prompt&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;Preference Snapshot&lt;/td&gt;&lt;td&gt;每章翻译固定偏好版本&lt;/td&gt;&lt;td&gt;保证初译和校对一致&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;Positive / Negative Examples&lt;/td&gt;&lt;td&gt;保存用户认可和拒绝的具体片段&lt;/td&gt;&lt;td&gt;将隐式偏好转为可检索实例&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;Scene-aware Retrieval&lt;/td&gt;&lt;td&gt;按叙述/对话/心理活动检索偏好&lt;/td&gt;&lt;td&gt;减少错误泛化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;Pairwise Feedback UI&lt;/td&gt;&lt;td&gt;A/B 比较和理由&lt;/td&gt;&lt;td&gt;高效收集偏好信号&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;Feedback Normalizer&lt;/td&gt;&lt;td&gt;把用户理由映射为维度标签&lt;/td&gt;&lt;td&gt;降低人工整理成本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;Preference Regression Set&lt;/td&gt;&lt;td&gt;固定样例回归&lt;/td&gt;&lt;td&gt;验证是否真的改善&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P2&lt;/td&gt;&lt;td&gt;Bayesian / Bradley–Terry Estimation&lt;/td&gt;&lt;td&gt;估计多维偏好权重&lt;/td&gt;&lt;td&gt;从主观事件中提炼稳定趋势&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P2&lt;/td&gt;&lt;td&gt;Active Preference Query&lt;/td&gt;&lt;td&gt;选择最值得询问的片段&lt;/td&gt;&lt;td&gt;降低用户反馈负担&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P3&lt;/td&gt;&lt;td&gt;Personalized Reranker&lt;/td&gt;&lt;td&gt;对候选译文做个人排序&lt;/td&gt;&lt;td&gt;提高候选选择质量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P4&lt;/td&gt;&lt;td&gt;LoRA / Preference Tuning&lt;/td&gt;&lt;td&gt;模型参数层面的个性化&lt;/td&gt;&lt;td&gt;仅在数据和评估成熟后考虑&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;建议的 MVP&lt;/h3&gt;
&lt;p&gt;第一版只需要四个组件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Feedback Event Store&lt;/strong&gt;：记录用户评分、A/B 选择、局部标注、接受/拒绝和人工修改。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preference Profile Builder&lt;/strong&gt;：从明确规则和多次反馈中生成结构化画像，所有结论关联证据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snapshot Compiler&lt;/strong&gt;：在每次章节翻译前生成固定偏好快照，并检索少量相关样例。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preference Regression&lt;/strong&gt;：固定 20–50 个有代表性的原文片段，检查新旧偏好版本下的候选选择是否符合用户历史判断。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第一版不需要向量数据库，不需要训练模型，也不需要复杂的多 Agent。数据模型和流程正确，比一开始引入更复杂的模型更重要。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;12. 一个端到端例子&lt;/h2&gt;
&lt;p&gt;原文：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;He seemed about to say something, then thought better of it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;模型生成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A：他似乎想说什么，最终还是作罢。&lt;/li&gt;
&lt;li&gt;B：他像是要说些什么，却又打消了念头。&lt;/li&gt;
&lt;li&gt;C：他张了张嘴，话到嘴边，终究还是咽了回去。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用户选择 B，理由是：“B 保留了迟疑，但 C 加了动作，原文并没有明确写张嘴。”&lt;/p&gt;
&lt;p&gt;系统应该学到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户偏好 B，而不是单纯偏好更文学化的 C；&lt;/li&gt;
&lt;li&gt;用户不喜欢为了增强画面感而补充原文未明确给出的动作；&lt;/li&gt;
&lt;li&gt;用户接受适度调整中文语序；&lt;/li&gt;
&lt;li&gt;用户偏好保留原文含蓄程度；&lt;/li&gt;
&lt;li&gt;这条证据可能适用于叙述段落，但不应直接推导为所有场景都禁止动作增译。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后续当模型处理：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;She almost smiled, but stopped herself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;它可以检索到“不要无依据增加动作”的偏好示例，但仍然必须根据本句的语义和上下文判断，不能机械套用。&lt;/p&gt;
&lt;p&gt;这就是偏好记忆真正的价值：不是让模型记住一句“用户喜欢自然、含蓄的翻译”，而是让它理解用户在具体语言选择中如何权衡。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;13. 结论&lt;/h2&gt;
&lt;p&gt;个人阅读偏好应当被看作一种长期演进的用户知识，而不是一个固定 Prompt。它的学习闭环是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户通过评分、比较、批注和修改表达偏好；&lt;/li&gt;
&lt;li&gt;系统把这些交互保存为原始事件；&lt;/li&gt;
&lt;li&gt;偏好归纳器形成带证据、置信度和范围的多维画像；&lt;/li&gt;
&lt;li&gt;翻译任务根据作品和场景检索偏好与正反例；&lt;/li&gt;
&lt;li&gt;Snapshot 将偏好稳定地贯穿初译、审校和润色；&lt;/li&gt;
&lt;li&gt;回归集验证个性化是否真正改善阅读体验；&lt;/li&gt;
&lt;li&gt;用户确认后再更新长期画像。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对个人文学翻译，&lt;strong&gt;最先值得投入的不是微调模型，而是把反馈变成结构化、可追溯、可比较、可回放的知识。&lt;/strong&gt; 只要这套数据资产建立起来，未来无论更换底层模型、增加 reranker，还是做 LoRA，都不会丢失已经积累的个人审美。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考研究与资源&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Zhao et al. (2025), &lt;a href=&quot;https://arxiv.org/abs/2502.09597&quot;&gt;Do LLMs Recognize Your Preferences? Evaluating Personalized Preference Following in LLMs&lt;/a&gt;, ICLR 2025.&lt;/li&gt;
&lt;li&gt;Zhang et al. (2025), &lt;a href=&quot;https://aclanthology.org/2025.emnlp-main.1711/&quot;&gt;PRIME: Large Language Model Personalization with Cognitive Dual-Memory and Personalized Thought Process&lt;/a&gt;, EMNLP 2025.&lt;/li&gt;
&lt;li&gt;Garbacea et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-acl.31/&quot;&gt;Personalized Benchmarking: Evaluating LLMs by Individual Preferences&lt;/a&gt;, ACL Findings 2026.&lt;/li&gt;
&lt;li&gt;Zhang et al. (2025), &lt;a href=&quot;https://aclanthology.org/2025.naacl-long.548/&quot;&gt;How Good Are LLMs for Literary Translation, Really?&lt;/a&gt;, NAACL 2025.&lt;/li&gt;
&lt;li&gt;Ferstler et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2138/&quot;&gt;AI translation of literary texts is ‘fine’, but readers still prefer human translations&lt;/a&gt;, EMNLP Findings 2026; &lt;a href=&quot;https://lait.cs.sfu.ca/&quot;&gt;LAIT project&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Scalena et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.eacl-long.217/&quot;&gt;Steering Large Language Models for Machine Translation Personalization&lt;/a&gt;, EACL 2026.&lt;/li&gt;
&lt;li&gt;Oh et al. (2025), &lt;a href=&quot;https://aclanthology.org/2025.acl-long.1590/&quot;&gt;Comparison-based Active Preference Learning for Multi-dimensional Personalization&lt;/a&gt;, ACL 2025.&lt;/li&gt;
&lt;li&gt;He et al. (2024), &lt;a href=&quot;https://aclanthology.org/2024.naacl-long.451.pdf&quot;&gt;Improving Machine Translation with Human Feedback: An Exploration of Quality Estimation as a Reward Model&lt;/a&gt;, NAACL 2024.&lt;/li&gt;
&lt;li&gt;Mirkin &amp;amp; Meunier (2015), &lt;a href=&quot;https://aclanthology.org/D15-1238.pdf&quot;&gt;Personalized Machine Translation: Predicting Translational Preferences&lt;/a&gt;, ACL 2015.&lt;/li&gt;
&lt;li&gt;Jiang et al. (2024), &lt;a href=&quot;https://arxiv.org/abs/2406.11191&quot;&gt;A Survey on Human Preference Learning for Large Language Models&lt;/a&gt;, survey of feedback sources, preference modeling, utilization and evaluation.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h1&gt;补充研究：长期记忆、短期记忆、RAG 与 Semantic Search 在个人偏好学习中的作用&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本补充将问题放回通用的 LLM 个性化、用户建模和记忆架构中讨论，不依赖任何具体翻译产品。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;14. 先区分四种不同的问题&lt;/h2&gt;
&lt;p&gt;“让模型记住我喜欢什么”至少包含四个独立问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;记忆形成（Memory Formation）&lt;/strong&gt;：一次评分、比较、修改，是否值得保存？保存原始行为还是抽象结论？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记忆组织（Memory Organization）&lt;/strong&gt;：信息属于当前任务状态、一次历史事件、长期稳定偏好，还是可复用的示例？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记忆检索（Memory Retrieval）&lt;/strong&gt;：当前任务需要调用哪些历史证据？按什么线索找？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记忆应用（Memory Utilization）&lt;/strong&gt;：取回的信息如何影响当前生成？是否适用？是否应该忽略？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;长期记忆、短期记忆解决的是时间和持久性；RAG 解决的是外部知识按需进入上下文；Semantic Search 解决的是语义层面的候选发现。它们不是同一层技术，也不能互相替代。&lt;/p&gt;
&lt;h2&gt;15. 短期记忆与长期记忆：建议采用多时间尺度模型&lt;/h2&gt;
&lt;h3&gt;15.1 短期记忆（Working / Session Memory）&lt;/h3&gt;
&lt;p&gt;短期记忆保存当前任务和当前会话正在发生的事情，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正在阅读哪一本书、哪一章、哪一段；&lt;/li&gt;
&lt;li&gt;当前正在比较的 A/B 译文；&lt;/li&gt;
&lt;li&gt;本轮已经确认的局部风格要求；&lt;/li&gt;
&lt;li&gt;当前讨论中尚未解决的歧义；&lt;/li&gt;
&lt;li&gt;用户刚刚表达、尚未判断是否长期有效的偏好；&lt;/li&gt;
&lt;li&gt;当前选定的风格组合及其临时调整。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它的特点是高时效性、强上下文依赖、生命周期短。任务结束后，大部分内容不应自动升级为长期记忆。&lt;/p&gt;
&lt;p&gt;短期记忆的价值不是“把更多历史塞进 Prompt”，而是保持当前任务的连续性。当前章节的局部决定必须能被后续段落使用，但不能因此污染其他作品。&lt;/p&gt;
&lt;h3&gt;15.2 长期记忆（Long-term User Memory）&lt;/h3&gt;
&lt;p&gt;长期记忆保存跨会话、跨任务仍有价值的信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户明确声明的长期阅读偏好；&lt;/li&gt;
&lt;li&gt;多次反馈反复出现的偏好模式；&lt;/li&gt;
&lt;li&gt;已确认的正例、反例；&lt;/li&gt;
&lt;li&gt;偏好形成和变化的历史；&lt;/li&gt;
&lt;li&gt;用户明确要求长期遵守的规则；&lt;/li&gt;
&lt;li&gt;不同文体和语言方向下的条件偏好。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;长期记忆不是一段永远不变的 Profile。它应该包含可更新的语义画像，也要保留支撑画像的原始事件。&lt;/p&gt;
&lt;h3&gt;15.3 情景记忆与语义记忆（Episodic / Semantic Memory）&lt;/h3&gt;
&lt;p&gt;这一区分比简单的短期/长期二分更重要。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;情景记忆&lt;/strong&gt;记录发生过什么：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2026 年 10 月，用户比较了两个译文；&lt;/li&gt;
&lt;li&gt;用户选择 B；&lt;/li&gt;
&lt;li&gt;用户指出 A 的“作罢”过于总结性；&lt;/li&gt;
&lt;li&gt;对应的原文、上下文、两个候选译文和时间戳。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;语义记忆&lt;/strong&gt;记录从多个事件中归纳出的知识：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户在文学叙述中倾向保留人物的迟疑和含蓄；&lt;/li&gt;
&lt;li&gt;用户不喜欢没有原文依据的动作补写；&lt;/li&gt;
&lt;li&gt;用户通常接受中文语序调整，但不喜欢改变叙述距离。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;情景记忆回答“过去发生了什么”；语义记忆回答“从这些经历中，目前可以认为用户有什么倾向”。&lt;/p&gt;
&lt;p&gt;建议将它们分开存储和更新。语义记忆必须能够回溯到情景证据；如果用户改变偏好，可以重新解释历史事件，而不必丢弃原始记录。&lt;/p&gt;
&lt;h3&gt;15.4 还需要程序性记忆（Procedural Memory）&lt;/h3&gt;
&lt;p&gt;除了情景和语义记忆，还应考虑程序性记忆，即“如何完成任务”的经验。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户希望先看忠实译文，再看风格润色版；&lt;/li&gt;
&lt;li&gt;用户喜欢比较完整段落，而不是孤立句子；&lt;/li&gt;
&lt;li&gt;用户对不确定的文化典故希望保留注释；&lt;/li&gt;
&lt;li&gt;用户希望先指出问题，再给出修改版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些并非文学审美本身，而是用户偏好的工作流程。它们可能影响交互和生成，但应与语言审美画像分开。&lt;/p&gt;
&lt;h3&gt;15.5 推荐的记忆分层&lt;/h3&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;记忆类型&lt;/th&gt;&lt;th&gt;典型内容&lt;/th&gt;&lt;th&gt;生命周期&lt;/th&gt;&lt;th&gt;更新方式&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Working memory&lt;/td&gt;&lt;td&gt;当前段落、当前比较、待解决问题&lt;/td&gt;&lt;td&gt;当前推理/操作&lt;/td&gt;&lt;td&gt;连续覆盖和追加&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Session memory&lt;/td&gt;&lt;td&gt;当前会话形成的临时决定&lt;/td&gt;&lt;td&gt;会话或任务周期&lt;/td&gt;&lt;td&gt;会话结束时总结&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Episodic memory&lt;/td&gt;&lt;td&gt;评分、选择、修改、批注等历史事件&lt;/td&gt;&lt;td&gt;长期保存&lt;/td&gt;&lt;td&gt;追加，不覆盖&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Semantic preference memory&lt;/td&gt;&lt;td&gt;多次证据归纳出的偏好&lt;/td&gt;&lt;td&gt;长期、可演化&lt;/td&gt;&lt;td&gt;证据驱动更新&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Procedural memory&lt;/td&gt;&lt;td&gt;用户喜欢的工作流程和交互方式&lt;/td&gt;&lt;td&gt;长期、可演化&lt;/td&gt;&lt;td&gt;重复行为和明确声明更新&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Project memory&lt;/td&gt;&lt;td&gt;某本书、某个作者或某项任务的局部约束&lt;/td&gt;&lt;td&gt;项目生命周期&lt;/td&gt;&lt;td&gt;项目内更新&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;短期/长期与情景/语义并不是完全相同的分类轴。例如，一条刚发生的反馈最初是 Session 中的情景记录，经过确认后仍然作为长期 Episodic Memory 保存；多条历史事件再归纳为 Semantic Preference Memory。&lt;/p&gt;
&lt;h2&gt;16. RAG 对个人偏好到底有什么帮助？&lt;/h2&gt;
&lt;p&gt;有帮助，但需要明确：这里不是传统意义上“从文档知识库检索答案”的 RAG，而是 &lt;strong&gt;Preference-aware Memory RAG&lt;/strong&gt;，即从用户自己的历史反馈和偏好知识中检索与当前任务有关的证据。&lt;/p&gt;
&lt;p&gt;传统 RAG 通常回答：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;哪些文档包含与当前问题相关的信息？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;偏好 RAG 需要回答：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;用户过去在什么相似情境下表达过什么偏好？这些偏好是否适用于当前任务？有哪些正反例能帮助模型作出符合用户审美的选择？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;16.1 RAG 可以检索三类内容&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;第一类：明确规则。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;例如用户曾多次明确要求，不要擅自解释原文没有说明的心理活动。这类内容可以直接检索，通常不需要向量化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二类：偏好证据。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;例如用户在五个类似段落中都选择了保留迟疑感的译文。这些证据可以帮助模型理解抽象规则从何而来，也能在规则不明确时重新判断。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三类：正反例。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;例如用户喜欢的日文对话翻译、拒绝的英文心理描写，以及用户自己修改过的句子。这类材料适合按文本类型和语义场景检索。&lt;/p&gt;
&lt;h3&gt;16.2 不应该把所有偏好历史直接放进 Prompt&lt;/h3&gt;
&lt;p&gt;这会产生几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;历史越多，噪声越多；&lt;/li&gt;
&lt;li&gt;同一偏好的多个历史表达可能互相重复；&lt;/li&gt;
&lt;li&gt;不同作品的特殊偏好可能被误认为全局规则；&lt;/li&gt;
&lt;li&gt;当前任务不相关的偏好占用上下文；&lt;/li&gt;
&lt;li&gt;模型容易过度关注历史样例，机械模仿。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;更合理的策略是先维护一个紧凑的语义 Profile，再按当前任务检索少量相关事件和样例。&lt;/p&gt;
&lt;h3&gt;16.3 Preference RAG 的检索流程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;解析当前任务：语言方向、文体、文本类型、人物/叙述者、当前目标。&lt;/li&gt;
&lt;li&gt;从 Profile 获取稳定偏好作为检索先验。&lt;/li&gt;
&lt;li&gt;通过结构化条件过滤：适用范围、维度、语言、文体、时间、置信度。&lt;/li&gt;
&lt;li&gt;通过全文检索和 Semantic Search 找相似反馈事件及正反例。&lt;/li&gt;
&lt;li&gt;对候选记忆做重排序，考虑偏好强度、证据可信度、时间和适用范围。&lt;/li&gt;
&lt;li&gt;去重、冲突检查和预算裁剪。&lt;/li&gt;
&lt;li&gt;编译成当前任务专用的 Preference Context。&lt;/li&gt;
&lt;li&gt;记录本次实际使用的记忆 ID，供事后分析。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这意味着 RAG 不只是“找相似文本”，还需要用户模型参与检索和排序。&lt;/p&gt;
&lt;h2&gt;17. Semantic Search 是否有必要？&lt;/h2&gt;
&lt;p&gt;有价值，但它解决的是“语义相似”，不是“偏好正确”。&lt;/p&gt;
&lt;p&gt;例如，当前原文是一段人物迟疑的描写。用户历史中可能有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一段英文人物犹豫的叙述；&lt;/li&gt;
&lt;li&gt;一段日文对话中的停顿；&lt;/li&gt;
&lt;li&gt;一段心理描写中没有说出口的话。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这三段的表面词汇可能完全不同，但它们都涉及“保留含蓄和迟疑”。Semantic Search 有机会发现这些跨语言、跨表达形式的相关例子。&lt;/p&gt;
&lt;p&gt;相反，纯关键词搜索可能只找到同样出现“犹豫”“迟疑”的句子，却遗漏表达方式完全不同但审美问题相同的样例。&lt;/p&gt;
&lt;h3&gt;17.1 为什么不能只用向量相似度？&lt;/h3&gt;
&lt;p&gt;Embedding 相似度通常衡量语义接近程度，而不是用户是否喜欢。&lt;/p&gt;
&lt;p&gt;以下两个片段可能语义非常接近，但用户对它们的评价完全相反：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个保留原文的含蓄表达；&lt;/li&gt;
&lt;li&gt;一个把含蓄表达解释成明确心理活动。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只按向量相似度检索，很可能把负面例子当成正面指导。&lt;/p&gt;
&lt;p&gt;因此，每个样例必须携带明确的偏好标签和上下文：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;preferred / rejected；&lt;/li&gt;
&lt;li&gt;preference dimension；&lt;/li&gt;
&lt;li&gt;feedback strength；&lt;/li&gt;
&lt;li&gt;scope；&lt;/li&gt;
&lt;li&gt;source language；&lt;/li&gt;
&lt;li&gt;text type；&lt;/li&gt;
&lt;li&gt;evidence confidence；&lt;/li&gt;
&lt;li&gt;project / global；&lt;/li&gt;
&lt;li&gt;original source and context。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;检索后还需要根据这些元数据进行过滤和排序。&lt;/p&gt;
&lt;h3&gt;17.2 推荐 Hybrid Retrieval，而不是 Vector-only&lt;/h3&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;检索方式&lt;/th&gt;&lt;th&gt;优点&lt;/th&gt;&lt;th&gt;局限&lt;/th&gt;&lt;th&gt;适合内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Exact / Keyword&lt;/td&gt;&lt;td&gt;精确、可解释&lt;/td&gt;&lt;td&gt;无法识别同义表达&lt;/td&gt;&lt;td&gt;专名、明确规则、原始批注&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Metadata filtering&lt;/td&gt;&lt;td&gt;能严格控制范围&lt;/td&gt;&lt;td&gt;依赖标签质量&lt;/td&gt;&lt;td&gt;文体、语言、项目、维度&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Semantic Search&lt;/td&gt;&lt;td&gt;找到跨表达形式的相似案例&lt;/td&gt;&lt;td&gt;可能语义相似但偏好相反&lt;/td&gt;&lt;td&gt;正反例、隐含审美现象&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Full-text search&lt;/td&gt;&lt;td&gt;适合用户自然语言理由&lt;/td&gt;&lt;td&gt;语义泛化有限&lt;/td&gt;&lt;td&gt;反馈理由、用户原话&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reranking&lt;/td&gt;&lt;td&gt;综合多种证据重新排序&lt;/td&gt;&lt;td&gt;增加推理成本&lt;/td&gt;&lt;td&gt;最终候选选择&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;建议采用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Candidate Retrieval&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    = Metadata Filter&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + Keyword / Full-text Search&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + Semantic Search&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Final Ranking&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    = Semantic Relevance&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + Preference Relevance&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + Scope Match&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + Evidence Confidence&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + Temporal Validity&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + Feedback Strength&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里尤其要区分 Semantic Relevance 和 Preference Relevance。一个历史片段可能与当前句子语义高度相似，却表达了用户不喜欢的翻译方式；另一个片段语义不完全相同，却能说明用户在相同审美维度上的选择。&lt;/p&gt;
&lt;h3&gt;17.3 何时需要向量数据库？&lt;/h3&gt;
&lt;p&gt;不要一开始就引入。&lt;/p&gt;
&lt;p&gt;如果用户只有几十条到几百条反馈，可以先使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQLite / PostgreSQL；&lt;/li&gt;
&lt;li&gt;结构化标签；&lt;/li&gt;
&lt;li&gt;全文搜索；&lt;/li&gt;
&lt;li&gt;简单的元数据过滤；&lt;/li&gt;
&lt;li&gt;小规模 LLM reranking。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当正反例库增长到需要跨语言、跨文体发现隐含审美相似性时，再考虑 Embedding Index。&lt;/p&gt;
&lt;p&gt;向量索引应当是样例检索的辅助索引，不应成为 Preference Profile 的唯一存储。原始反馈、评分、选择、规则和置信度必须可以通过结构化查询直接访问。&lt;/p&gt;
&lt;h2&gt;18. 一个更完整的个人记忆架构&lt;/h2&gt;
&lt;p&gt;综合以上研究，建议把个人偏好学习系统划分为六个逻辑层：&lt;/p&gt;
&lt;pre&gt;flowchart TB
    subgraph Interaction[用户交互]
        A[阅读 / 评分 / 比较 / 修改]
    end
    subgraph Working[工作记忆]
        B[当前会话与任务状态]
    end
    subgraph Store[持久记忆]
        C[Episodic Memory]
        D[Semantic Preference Memory]
        E[Procedural Memory]
        F[Project / Context Memory]
    end
    subgraph Retrieval[记忆检索]
        G[Metadata Filter]
        H[Full-text Search]
        I[Semantic Search]
        J[Personalized Reranker]
    end
    subgraph Compile[任务上下文编译]
        K[Task-conditioned Preference Context]
        L[Positive / Negative Examples]
    end
    subgraph Apply[模型应用与反馈]
        M[Generation / Review / Decision]
        N[User Feedback]
    end
    A --&amp;gt; B
    B --&amp;gt; C
    C --&amp;gt; D
    C --&amp;gt; E
    C --&amp;gt; F
    D --&amp;gt; G
    E --&amp;gt; G
    F --&amp;gt; G
    C --&amp;gt; H
    C --&amp;gt; I
    G --&amp;gt; J
    H --&amp;gt; J
    I --&amp;gt; J
    J --&amp;gt; K
    J --&amp;gt; L
    K --&amp;gt; M
    L --&amp;gt; M
    M --&amp;gt; N
    N --&amp;gt; C&lt;/pre&gt;
&lt;p&gt;注意，这不是要求必须部署六个独立服务。它们是逻辑职责，可以由一个数据库、一组服务函数和一个检索组件实现。&lt;/p&gt;
&lt;h3&gt;18.1 关键组件之间的边界&lt;/h3&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;组件&lt;/th&gt;&lt;th&gt;职责&lt;/th&gt;&lt;th&gt;不应该做什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Working Memory&lt;/td&gt;&lt;td&gt;当前任务连续性&lt;/td&gt;&lt;td&gt;不应自动成为长期用户偏好&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Episodic Store&lt;/td&gt;&lt;td&gt;保存历史行为和证据&lt;/td&gt;&lt;td&gt;不应自行把事件改写成确定规则&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Model&lt;/td&gt;&lt;td&gt;归纳稳定、条件化的偏好&lt;/td&gt;&lt;td&gt;不应丢失原始证据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Retrieval&lt;/td&gt;&lt;td&gt;选择当前相关记忆&lt;/td&gt;&lt;td&gt;不应只看向量相似度&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Context Compiler&lt;/td&gt;&lt;td&gt;把记忆转成当前任务可用的上下文&lt;/td&gt;&lt;td&gt;不应将全部记忆原样拼接&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Feedback Learner&lt;/td&gt;&lt;td&gt;根据新证据更新偏好&lt;/td&gt;&lt;td&gt;不应由生成模型单方面确认自己的判断&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;19. 动态偏好：短期变化不应立即覆盖长期偏好&lt;/h2&gt;
&lt;p&gt;一个人可能今天想读忠实、克制的译文，明天想尝试更有文学修辞的版本。这不一定意味着长期审美发生变化。&lt;/p&gt;
&lt;p&gt;建议同时维护：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long-term preference：跨任务稳定趋势；&lt;/li&gt;
&lt;li&gt;Short-term preference：当前会话或当前任务的临时倾向；&lt;/li&gt;
&lt;li&gt;Explicit override：用户明确要求本次任务偏离长期偏好；&lt;/li&gt;
&lt;li&gt;Historical preference：历史版本，支持时间回溯。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以参考 EMA（指数移动平均）和滑动窗口，但不能简单对所有反馈做统一平均。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;[
P_t = alpha P_{recent} + (1-alpha)P_{long}
]&lt;/p&gt;
&lt;p&gt;这只能作为数值估计的简化形式。实际系统应按偏好维度和适用范围分别更新，并考虑反馈类型、证据强度和用户是否明确声明。&lt;/p&gt;
&lt;p&gt;一次明确的“以后不要这样翻译”应比一次普通 7 分评分有更高权重。一次针对某本书的特殊要求，则只应该更新项目级状态。&lt;/p&gt;
&lt;p&gt;还应区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preference change&lt;/strong&gt;：用户的长期偏好确实改变；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context change&lt;/strong&gt;：当前作品要求不同；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploration&lt;/strong&gt;：用户正在尝试一种新风格；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feedback noise&lt;/strong&gt;：一次偶然评分或误操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;19.1 记忆更新比记忆检索更难&lt;/h3&gt;
&lt;p&gt;2026 年 ACL Findings 的 PAMU 研究指出，现有记忆系统已经投入大量精力优化向量检索和知识组织，但动态更新偏好表示仍然是重要问题。该研究通过滑动窗口和 EMA 融合短期与长期倾向。&lt;/p&gt;
&lt;p&gt;这对个人审美特别重要：系统不能只会“找到过去的偏好”，还必须判断新反馈是临时变化、长期趋势，还是与已有偏好矛盾的新证据。&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://aclanthology.org/2026.findings-acl.38/&quot;&gt;Preference-Aware Memory Update for Long-Term LLM Agents — ACL 2026&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;20. 不能忽略过度个性化（Over-personalization）&lt;/h2&gt;
&lt;p&gt;记忆并非越多越好，也不是每次生成都应该调用所有已知偏好。&lt;/p&gt;
&lt;p&gt;EMNLP 2026 的 OP-Bench 研究指出，引入用户记忆后，模型可能出现三类过度个性化：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Irrelevance&lt;/strong&gt;：把无关的历史偏好用于当前任务；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repetition&lt;/strong&gt;：反复提及或使用用户历史信息；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sycophancy&lt;/strong&gt;：过度迎合用户，甚至牺牲判断质量。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这对文学翻译有直接影响。例如，用户喜欢简洁表达，并不意味着所有人物都应该说短句；用户喜欢某位作家的幽默，也不意味着悲剧段落应该被强行幽默化。&lt;/p&gt;
&lt;p&gt;因此，检索系统应该有一个重要决策：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当前任务是否真的需要使用某条个人偏好？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;没有相关证据时，默认使用作品本身的语言特征和通用翻译原则，而不是强行个性化。&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1168/&quot;&gt;OP-Bench: Benchmarking Over-Personalization — EMNLP 2026&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;21. 新研究：从相似度检索走向用户条件化检索&lt;/h2&gt;
&lt;p&gt;近期研究已经开始指出，普通 RAG 的查询相似度不等于用户需要的记忆。&lt;/p&gt;
&lt;h3&gt;21.1 VARS：长期与短期偏好向量&lt;/h3&gt;
&lt;p&gt;2026 年的 &lt;strong&gt;User Preference Modeling for Conversational LLM Agents: Weak Rewards from Retrieval-Augmented Interaction&lt;/strong&gt; 提出 VARS，将用户表示为共享偏好空间中的长期与短期向量，通过用户反馈中的弱标量奖励在线更新，并用这些向量调整结构化偏好记忆的检索分数。&lt;/p&gt;
&lt;p&gt;对个人偏好系统的启发是：可以把长期审美倾向与当前阅读状态分开建模，让当前任务影响检索排序，但不立即改写长期画像。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://arxiv.org/abs/2603.20939&quot;&gt;VARS — arXiv 2603.20939&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;21.2 PPRO：让用户画像参与记忆检索排序&lt;/h3&gt;
&lt;p&gt;2026 年的 &lt;strong&gt;Learning User-Aware Recall: Personalized Retrieval in Long-Term Conversational Memory&lt;/strong&gt; 提出 PPRO，先构建情景和语义记忆，再通过累积记忆建立用户 Profile，并将 Profile 作为个性化先验参与检索排序。&lt;/p&gt;
&lt;p&gt;这比“只拿当前文本做 embedding search”更接近真正的个人偏好检索：系统不仅要判断两个文本是否相似，还要判断这条历史证据对当前用户是否有意义。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://arxiv.org/abs/2607.00017&quot;&gt;PPRO — arXiv 2607.00017&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;21.3 Prospection-Guided Retrieval：根据任务目标主动寻找记忆&lt;/h3&gt;
&lt;p&gt;2026 年的 &lt;strong&gt;Thinking Ahead: Prospection-Guided Retrieval of Memory with Language Models&lt;/strong&gt; 指出，某些有价值的历史记忆与当前查询的 embedding 相似度很低。研究提出先推演当前任务可能需要的后续步骤，再把这些步骤作为额外检索线索。&lt;/p&gt;
&lt;p&gt;在阅读偏好场景中，当前请求可能只是“润色这段对话”，但真正有用的记忆可能是用户以前对人物身份差异、对话口语度和叙述距离的要求。直接搜索“润色”未必能找到这些偏好。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.2054/&quot;&gt;Prospection-Guided Retrieval — EMNLP 2026&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;21.4 AlignXada：通用偏好画像需要按任务裁剪&lt;/h3&gt;
&lt;p&gt;2026 年的 &lt;strong&gt;Learning Preference Adaptation for Large Language Model Personalization via Verbal Reinforcement Learning&lt;/strong&gt; 研究任务条件化偏好适配。它指出，完整的通用偏好摘要往往包含与当前任务无关的信息，直接注入会浪费上下文并产生干扰。&lt;/p&gt;
&lt;p&gt;论文提出 AlignXada，根据下游任务把通用画像压缩成任务专用表示。在其 13 个任务、3 个模型的实验中，平均保留约 22.8% 的原 Profile token，同时报告了相对 RAG 的性能收益。&lt;/p&gt;
&lt;p&gt;对个人阅读的启发是：不是每次都把完整的阅读偏好交给模型，而是根据“当前是人物对白、景物描写还是心理活动”编译一份相关的偏好子集。&lt;/p&gt;
&lt;p&gt;论文：&lt;a href=&quot;https://arxiv.org/abs/2608.09507&quot;&gt;AlignXada — arXiv 2608.09507&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;22. 记忆系统的评估：不能只测试能否找回历史&lt;/h2&gt;
&lt;p&gt;建议建立四层评估：&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;评估层&lt;/th&gt;&lt;th&gt;测试问题&lt;/th&gt;&lt;th&gt;指标或方法&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Memory Write&lt;/td&gt;&lt;td&gt;是否保存了真正重要的反馈？是否误存临时信息？&lt;/td&gt;&lt;td&gt;Precision / Recall、用户审查&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory Retrieval&lt;/td&gt;&lt;td&gt;是否找到了正确证据？是否带回错误项目偏好？&lt;/td&gt;&lt;td&gt;Recall@K、MRR、NDCG、scope accuracy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Application&lt;/td&gt;&lt;td&gt;是否正确应用了偏好？是否过度应用？&lt;/td&gt;&lt;td&gt;Pairwise win rate、维度一致性、过度个性化率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Evolution&lt;/td&gt;&lt;td&gt;新反馈是否合理改变画像？旧偏好是否被错误覆盖？&lt;/td&gt;&lt;td&gt;Temporal consistency、change detection、profile audit&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;测试集应包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同一偏好在不同措辞下的表达；&lt;/li&gt;
&lt;li&gt;同一语义场景下的正例和反例；&lt;/li&gt;
&lt;li&gt;全局偏好与项目偏好冲突；&lt;/li&gt;
&lt;li&gt;旧偏好被明确修正；&lt;/li&gt;
&lt;li&gt;用户临时尝试新风格；&lt;/li&gt;
&lt;li&gt;当前任务与某条历史偏好无关；&lt;/li&gt;
&lt;li&gt;需要多条历史反馈才能推断的隐含偏好。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以参考以下长期记忆评测：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://snap-research.github.io/locomo/&quot;&gt;LoCoMo&lt;/a&gt;：长时间、多会话、单跳、多跳和时间推理。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xiaowu0162/LongMemEval&quot;&gt;LongMemEval&lt;/a&gt;：长期对话记忆和个性化信息检索。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2502.09597&quot;&gt;PrefEval&lt;/a&gt;：显式与隐式偏好遵循。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1168/&quot;&gt;OP-Bench&lt;/a&gt;：记忆使用是否过度。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2602.10715&quot;&gt;LoCoMo-Plus&lt;/a&gt;：超越表层事实回忆，评估隐含约束的保留和应用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些基准可以借鉴任务设计，但不能直接替代文学偏好评估。最终仍需要以真实读者的选择、修改和整段阅读体验作为核心评价依据。&lt;/p&gt;
&lt;h2&gt;23. 综合判断：这些技术分别值得投入多少？&lt;/h2&gt;

































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;技术&lt;/th&gt;&lt;th&gt;对个人阅读偏好学习的价值&lt;/th&gt;&lt;th&gt;建议&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Working / Short-term Memory&lt;/td&gt;&lt;td&gt;很高：保持当前阅读和任务状态&lt;/td&gt;&lt;td&gt;必须有&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Episodic Long-term Memory&lt;/td&gt;&lt;td&gt;极高：保存评分、比较、修改等证据&lt;/td&gt;&lt;td&gt;必须有&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Semantic Preference Memory&lt;/td&gt;&lt;td&gt;极高：把历史反馈归纳成可复用的偏好&lt;/td&gt;&lt;td&gt;必须有&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Procedural Memory&lt;/td&gt;&lt;td&gt;中高：记住用户喜欢的交互和工作方式&lt;/td&gt;&lt;td&gt;建议有&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAG&lt;/td&gt;&lt;td&gt;高：按任务动态取回历史偏好和例子&lt;/td&gt;&lt;td&gt;必须有检索能力，但不必一开始部署复杂 RAG&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Semantic Search&lt;/td&gt;&lt;td&gt;中高：发现跨语言、跨文体的隐含审美相似性&lt;/td&gt;&lt;td&gt;样例增多后引入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Metadata / Full-text Search&lt;/td&gt;&lt;td&gt;极高：控制范围和精确查找&lt;/td&gt;&lt;td&gt;应先于或同时于向量检索&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Personalized Reranking&lt;/td&gt;&lt;td&gt;高：区分“文本相似”与“用户真正偏好”&lt;/td&gt;&lt;td&gt;第二阶段&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Knowledge Graph&lt;/td&gt;&lt;td&gt;中等：表达人物、作品、文体、偏好维度之间的关系&lt;/td&gt;&lt;td&gt;有复杂关联需求再引入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fine-tuning / LoRA / DPO&lt;/td&gt;&lt;td&gt;后期价值较高，但数据和评估要求高&lt;/td&gt;&lt;td&gt;不作为起点&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Long-term Preference Vectors&lt;/td&gt;&lt;td&gt;研究价值高，工程上可后置&lt;/td&gt;&lt;td&gt;大量反馈后探索&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;24. 阶段性结论：个人偏好系统不是一个 Vector Database，而是一个持续演化的 User Model&lt;/h2&gt;
&lt;p&gt;这项需求真正需要的不是“把所有阅读历史向量化”，而是建立一套完整的个人认知资产：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;短期记忆负责当前任务；&lt;/li&gt;
&lt;li&gt;情景记忆保存用户实际做过的选择；&lt;/li&gt;
&lt;li&gt;语义记忆归纳长期审美；&lt;/li&gt;
&lt;li&gt;程序性记忆保存用户的工作习惯；&lt;/li&gt;
&lt;li&gt;项目记忆保存局部约束；&lt;/li&gt;
&lt;li&gt;RAG 负责根据当前任务取回相关证据；&lt;/li&gt;
&lt;li&gt;Semantic Search 帮助发现跨表达形式的相似案例；&lt;/li&gt;
&lt;li&gt;Personalized Reranking 判断哪些证据真正符合当前用户；&lt;/li&gt;
&lt;li&gt;Preference Learning 决定如何从新反馈更新画像；&lt;/li&gt;
&lt;li&gt;Evaluation 判断个性化是否真的改善了用户体验。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最值得强调的设计原则是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;记忆存储、记忆检索、偏好推断、偏好应用和偏好更新应该是五个可独立验证的过程。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;向量化只是检索索引的一种实现；RAG 只是把外部记忆引入当前推理的一种方式；真正决定系统是否越来越懂用户的，是它能否从有噪声、有上下文、有时间变化的真实反馈中，持续形成正确且可追溯的用户模型。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;25. 截至 2026 年 10 月，研究已经走到哪一步？&lt;/h2&gt;
&lt;p&gt;2025—2026 年的研究趋势很明确：长期个性化研究正在从“记忆能否存下来、能否召回”转向“记忆如何形成、如何更新、如何判断当前有效、如何防止历史偏好干扰当前意图”。下面按本文的三个问题整理有代表性的工作。论文状态也一并标注，避免把预印本与正式发表结果混为一谈。&lt;/p&gt;













































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;研究&lt;/th&gt;&lt;th&gt;主要解决的问题&lt;/th&gt;&lt;th&gt;与 User Model 的关系&lt;/th&gt;&lt;th&gt;证据与边界&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;RMM，ACL 2025&lt;/td&gt;&lt;td&gt;通过前瞻和回顾式反思，按话语、轮次、会话等不同粒度形成记忆，并根据模型引用的证据迭代改进检索&lt;/td&gt;&lt;td&gt;说明记忆形成不能固定为每 N 轮摘要；检索也要根据实际使用结果反思&lt;/td&gt;&lt;td&gt;在 LongMemEval 上，相对无记忆管理基线报告超过 10% 的准确率提升。它主要优化长期对话记忆管理，不等于完整的条件偏好模型。&lt;a href=&quot;https://aclanthology.org/2025.acl-long.413/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TSM，ACL Findings 2026&lt;/td&gt;&lt;td&gt;将对话时间线改为语义时间线，区分单点事件与持续状态，并按查询中的时间意图检索&lt;/td&gt;&lt;td&gt;支持“偏好有持续区间，不是按聊天发生顺序排列的静态事实”&lt;/td&gt;&lt;td&gt;在 LongMemEval 和 LoCoMo 上报告最高 12.2 个百分点的准确率提升。&lt;a href=&quot;https://aclanthology.org/2026.findings-acl.1496/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PAMU，ACL Findings 2026&lt;/td&gt;&lt;td&gt;用滑动窗口与指数移动平均融合短期波动和长期偏好&lt;/td&gt;&lt;td&gt;直接触及“新反馈如何修正旧偏好”&lt;/td&gt;&lt;td&gt;在 LoCoMo 的五个任务场景、五种基线中报告质量改善。它提供的是更新策略，不会自动判断反馈属于全局还是项目级偏好。&lt;a href=&quot;https://aclanthology.org/2026.findings-acl.38/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;QUMem，arXiv 预印本，2026-08&lt;/td&gt;&lt;td&gt;按语义连续性切分 episode，将内容拆为事实、偏好和可迁移经验；查询时分阶段推断当前用户状态&lt;/td&gt;&lt;td&gt;非常接近本文提出的“当前任务条件化 User State Inference”&lt;/td&gt;&lt;td&gt;其核心观点是单次 top-k 检索不能联合解决时间有效性、偏好演变和上下文适用性；报告在 PersonaMem、KnowU-Bench 上取得较强结果。属于预印本，结果需独立复现。&lt;a href=&quot;https://arxiv.org/abs/2608.16168&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CORE，Findings of EMNLP 2026&lt;/td&gt;&lt;td&gt;把当前轮的临时证据与持久 Persona 更新分开，采用不确定性感知的信念修正&lt;/td&gt;&lt;td&gt;解决“偶然反馈、模糊反馈不应轻易改写长期偏好”&lt;/td&gt;&lt;td&gt;研究长期 Persona 漂移、歧义和冲突，支持先判断是否发生真正变化，再决定是否更新。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.666/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pivot，Findings of EMNLP 2026&lt;/td&gt;&lt;td&gt;研究 personalization inertia：历史偏好已经过时，却在推理中继续影响当前回答&lt;/td&gt;&lt;td&gt;直接回答第二句话：检索到的偏好不一定应该应用&lt;/td&gt;&lt;td&gt;提出基于当前证据一致性的检测与局部回退机制。工程启发是运行时要有“拒绝应用 / 撤销个性化影响”的能力。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1744/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AdaMem，EMNLP 2026 Industry Track&lt;/td&gt;&lt;td&gt;以自然语言 Memory Policy 决定特定上下文中哪些内容值得写入长期记忆&lt;/td&gt;&lt;td&gt;说明“记住什么”本身也应是条件化决策，而不是统一抽取所有信息&lt;/td&gt;&lt;td&gt;AdaMem-Bench 为不同交互 Persona 设置不同记忆偏好，覆盖多个长期故事。可借鉴为按应用场景配置记忆写入策略。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-industry.189/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RealPref，Findings of EMNLP 2026&lt;/td&gt;&lt;td&gt;评估长周期交互中的自然偏好遵循，包含显式到隐式的多种表达方式&lt;/td&gt;&lt;td&gt;说明用户偏好理解远不止抽取显式指令&lt;/td&gt;&lt;td&gt;数据集包含 100 个合成用户画像、1,300 条偏好和四种表达类型；实验发现上下文变长、表达越隐含，模型表现越差，未见场景的泛化也有困难。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2378/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TrustMem，Findings of EMNLP 2026&lt;/td&gt;&lt;td&gt;检查记忆更新是否遗漏、破坏原有信息或写入无证据内容&lt;/td&gt;&lt;td&gt;为 User Model 的证据链和版本更新提供可信度控制&lt;/td&gt;&lt;td&gt;引入 Memory Transition Verifier，从 coverage、preservation、faithfulness 检查记忆状态迁移；强调更新过程本身需要验证。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2419/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AgenticLOCI，REALM 2026&lt;/td&gt;&lt;td&gt;将会话检索与长期个性化状态分开，累积有版本的决策状态&lt;/td&gt;&lt;td&gt;支持短期召回和长期偏好演化采用不同机制&lt;/td&gt;&lt;td&gt;在合成移动出行轨迹上，稳定偏好字段保持率为 97.6%，应更新字段的更新精度为 58.3%。这也提醒我们：保护稳定偏好和正确识别变化之间存在真实权衡。&lt;a href=&quot;https://aclanthology.org/2026.realm-1.42/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PPRO，arXiv 预印本，2026&lt;/td&gt;&lt;td&gt;使用用户 Profile 作为个性化先验，对历史记忆检索进行排序优化&lt;/td&gt;&lt;td&gt;说明 User Model 不只是检索后的附加 Prompt，还应参与检索计划和排序&lt;/td&gt;&lt;td&gt;将用户画像用于 retrieval ranking，并优化查询改写。可作为个性化检索路线的研究参考。&lt;a href=&quot;https://arxiv.org/abs/2607.00017&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;25.1 研究结果的共同结论&lt;/h3&gt;
&lt;p&gt;这些研究的技术路线不同，但可以归纳成六个相对稳定的结论。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一，原始对话不应该是唯一的记忆单元。&lt;/strong&gt; 需要保留完整事件，同时允许从连续事件中形成不同粒度的 episode、持续状态和偏好主张。固定轮数摘要会混合无关事件，也可能拆散一个决策的前因、选择和结果。RMM、TSM、QUMem 都在不同层面处理了这个问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，事实、偏好和可迁移经验不是同一种记忆。&lt;/strong&gt; “用户正在读某本书”是事实；“用户在心理描写中偏好保留含蓄”是偏好；“面对同一段原文，先比较两个不同风格的候选再润色”是可迁移的程序性经验。把它们压成一条 embedding 会失去类型信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，偏好更新需要独立研究和独立验证。&lt;/strong&gt; 新反馈可能意味着偏好变化，也可能只是当前作品的临时要求、探索性选择或一次偶然结果。PAMU 的平滑方法有参考价值，但 CORE 的不确定性更新和 TrustMem 的迁移验证更接近生产系统所需的安全边界。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四，任务相关性必须在检索之后继续判断。&lt;/strong&gt; 找到一条相似历史，不等于应该采用它。Pivot 所研究的 personalization inertia 说明，过时记忆即使成功召回，也可能降低当前任务的正确性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第五，偏好记忆的写入策略也应该依上下文而变。&lt;/strong&gt; 用户可能只希望系统记住稳定审美，不希望记住一次临时购物选择或某次试验性译风。AdaMem 把这种差异提升为 preference-conditioned write control。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第六，研究基准仍不等于真实文学阅读验证。&lt;/strong&gt; 上述工作主要在长对话、Persona、记忆问答或合成用户轨迹上评估。它们能证明 User Model 的技术方向，却不能直接证明某个模型已经理解了某位读者的文学审美。文学翻译仍需要真实用户的 A/B 选择、局部修改、整段阅读体验和跨章节一致性测试。&lt;/p&gt;
&lt;p&gt;因此，研究的答案不是“已经有一个模型可以准确理解个人偏好”。更准确的结论是：&lt;strong&gt;研究已经分别证明了多粒度记忆、时间建模、偏好更新、查询条件化用户状态推断和过时偏好抑制的重要性；把这些能力组合成一个可审计的端到端 User Model，仍然是应用系统需要完成的工程工作。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;26. User Model 应该如何建模：事件、证据、主张和快照分开&lt;/h2&gt;
&lt;p&gt;建议不要只存一个 profile JSON，而是至少保留四种不同实体。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;实体&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;th&gt;是否可以被覆盖&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Interaction Event&lt;/td&gt;&lt;td&gt;用户在某个时间、任务、作品和上下文中实际做了什么&lt;/td&gt;&lt;td&gt;原始事件只追加，不原地改写&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Evidence&lt;/td&gt;&lt;td&gt;从事件中识别出来的偏好证据，例如支持某个维度的选择、反例或修改&lt;/td&gt;&lt;td&gt;可以补充标签，但需保留原始来源&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Claim&lt;/td&gt;&lt;td&gt;系统当前认为成立的偏好主张，包括取值、适用范围、置信度和时间有效性&lt;/td&gt;&lt;td&gt;通过新版本修正，不覆盖历史版本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Snapshot&lt;/td&gt;&lt;td&gt;为一个具体任务解析出的、冻结的可执行偏好集合&lt;/td&gt;&lt;td&gt;每次任务重新生成；任务运行期间保持一致&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;26.1 一个偏好主张的数据结构&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-000184&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;user_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;reader-001&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;narration.subtlety&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;preference&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;preserve_implicit_emotion&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;polarity&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;prefer&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;strength&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.82&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.78&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;scope&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;level&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;genre_and_text_type&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;genre&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;literary-fiction&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;text_types&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;interior_monologue&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;psychological_narration&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;source_languages&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;en&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;ja&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;target_language&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;zh-CN&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;project_ids&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;valid_time&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;from&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-04-01T00:00:00Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;to&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;recorded_at&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-10-31T09:00:00Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;active&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;evidence&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;supporting_event_ids&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;event-101&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;event-126&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;event-155&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;refuting_event_ids&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;event-144&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;source_types&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;pairwise_choice&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;rewrite&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;explicit_feedback&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;revision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;supersedes&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-000133&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这只是示意结构，不要求一开始把所有字段都做成独立数据库列。关键是必须能表达偏好维度、适用范围、正反证据、时间有效性、状态和版本。&lt;/p&gt;
&lt;h3&gt;26.2 至少记录两种时间&lt;/h3&gt;
&lt;p&gt;不要只存一个 created_at。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;occurred_at / observed_at&lt;/strong&gt;：用户实际反馈或系统观察到反馈的时间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;valid_from / valid_to&lt;/strong&gt;：系统认为这条偏好在用户行为中有效的时间区间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，用户在 10 月 31 日明确说“从 9 月开始，我越来越不喜欢过度解释心理活动的译法”。系统在 10 月 31 日才知道，但偏好变化可能从 9 月开始。两种时间不同。对审计和“当时系统知道什么”而言，这一区分很重要。&lt;/p&gt;
&lt;h3&gt;26.3 偏好必须有正面证据，也允许反面证据&lt;/h3&gt;
&lt;p&gt;不要只保存“用户喜欢简洁”。还应保存证据数量、证据是否来自不同作品和场景、用户明确认可的正例、用户明确拒绝的反例、证据之间是否冲突，以及系统最近一次何时重新评估该主张。&lt;/p&gt;
&lt;p&gt;一个用户在不同场景里表现出相反偏好，未必表示系统学习失败。它也可能说明原来的偏好主张范围太宽，应拆成两个更具体的条件偏好。&lt;/p&gt;
&lt;h3&gt;26.4 置信度不能等同于反馈次数&lt;/h3&gt;
&lt;p&gt;连续十次对同一个段落做细微修改，不一定相当于十个独立证据。置信度至少要考虑反馈类型、独立场景数量、用户是否给出明确理由、正反证据是否一致，以及当前上下文是否与历史样本相同。&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;反馈&lt;/th&gt;&lt;th&gt;推荐处理&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;“以后所有文学翻译都不要擅自解释心理活动”&lt;/td&gt;&lt;td&gt;明确、广范围、高优先级的偏好约束&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;在相似段落中多次选择保留含蓄的译文&lt;/td&gt;&lt;td&gt;累积为有置信度的条件偏好&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;用户重写一句话，并解释原因&lt;/td&gt;&lt;td&gt;强证据，但先判断是局部纠错还是可泛化偏好&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;给整段打 7 分&lt;/td&gt;&lt;td&gt;质量证据，不直接推断某个具体风格维度&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;接受模型给出的修改&lt;/td&gt;&lt;td&gt;弱正向信号，需要结合上下文&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;没有修改模型输出&lt;/td&gt;&lt;td&gt;不构成可靠的喜欢证据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;本次明确要求“这一章可以更华丽”&lt;/td&gt;&lt;td&gt;当前项目或章节的临时覆盖，不立即修改全局偏好&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;27. 如何判断某条偏好是否应该用于当前任务？&lt;/h2&gt;
&lt;p&gt;这是整个系统中最容易被忽略、但最重要的运行时步骤。不能直接把 top-k 检索结果拼接到 Prompt。建议设计一个独立的 &lt;strong&gt;Preference Resolver&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;27.1 先解析任务条件，再寻找偏好&lt;/h3&gt;
&lt;p&gt;当前任务应至少被解析为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;task&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;translation_review&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;source_language&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;ja&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;target_language&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;zh-CN&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;domain&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;literary-fiction&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;genre&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;historical-fiction&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;text_type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;dialogue&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;narrative_role&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;character_speech&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;project_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;novel-001&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;requested_style&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;restrained&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;explicit_overrides&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;preserve_honorific_distance&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;quality_constraints&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;semantic_fidelity&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;character_consistency&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这些字段不是为了建立复杂标签体系，而是为了避免把用户在心理描写、景物描写或现代对话中的偏好错误迁移到当前文本。&lt;/p&gt;
&lt;h3&gt;27.2 采用分层范围，而不是单一全局偏好&lt;/h3&gt;
&lt;p&gt;可以建立以下适用范围，从宽到窄：用户全局偏好、任务类型或领域偏好、语言方向/文体/文本类型偏好、作品/作者/章节/人物/叙述视角的局部偏好，以及当前请求中明确说明的临时偏好。&lt;/p&gt;
&lt;p&gt;越具体的规则通常越能解释当前任务，但不能机械地采用“最具体者永远覆盖”。还要检查它是否仍然有效、证据是否充分，以及是否和当前明确要求冲突。当前请求中的明确指令应优先于系统推断的长期默认值。&lt;/p&gt;
&lt;h3&gt;27.3 检索与应用分成两个阶段&lt;/h3&gt;
&lt;p&gt;第一阶段是 Candidate Retrieval，尽可能找出潜在相关证据：先按 user、权限、项目、时间、语言方向、文体和偏好维度做结构化过滤；再用全文检索或关键词查找明确规则和用户原话；用 Semantic Search 查找跨语言、跨措辞的相似审美案例；最后对候选证据去重，并保留正例和反例。&lt;/p&gt;
&lt;p&gt;第二阶段是 Applicability Resolution，判断哪些候选真正适用于当前任务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scope match&lt;/strong&gt;：历史反馈的范围是否覆盖当前文本？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Temporal validity&lt;/strong&gt;：偏好是否仍然有效，是否已有更新版本？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence strength&lt;/strong&gt;：来自明确声明，还是少数间接行为？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preference polarity&lt;/strong&gt;：检索到的是用户喜欢的例子，还是用户拒绝的反例？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context compatibility&lt;/strong&gt;：当前任务是否与历史场景具有相同的审美目标？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conflict&lt;/strong&gt;：是否存在同级别但方向相反的偏好？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Current intent&lt;/strong&gt;：用户是否明确要求本次偏离通常偏好？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只有通过这一阶段的偏好才应该进入最终的 Preference Snapshot。无法判断时应降低强度或不应用，而不是强行个性化。&lt;/p&gt;
&lt;h3&gt;27.4 为每个任务编译一份 Preference Snapshot&lt;/h3&gt;
&lt;p&gt;建议返回一份小型、可审计的上下文，而不是完整的用户历史：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;snapshot_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;snapshot-20261031-001&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;user_model_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;42&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;task_context_hash&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;sha256:...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;applicable_preferences&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;dialogue.colloquiality&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;instruction&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;保持人物语言自然，但不要将所有角色统一改成现代口语&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.84&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-000184&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;evidence_ids&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;event-101&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;event-126&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;excluded_preferences&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-000091&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;reason&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;适用于心理描写，不适用于当前人物对白&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;positive_examples&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;example-001&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;negative_examples&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;example-017&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;hard_constraints&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;semantic_fidelity&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;preserve_character_voice&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;explicit_overrides&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;preserve_honorific_distance&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;excluded_preferences 很重要：它让系统能够说明哪些记忆被找到了、但为什么没有使用。这样可以区分“没有检索到偏好”和“检索到了但判断不适用”这两种完全不同的问题。&lt;/p&gt;
&lt;p&gt;对于多阶段翻译，初译、风格审校和最终校对应使用同一个冻结快照，除非用户在任务中明确改变要求。否则阶段之间可能因为重新检索而使用不同版本的偏好，导致译文风格漂移。&lt;/p&gt;
&lt;h2&gt;28. 现有框架能解决什么？LangChain、LangGraph、Claude Code 的边界&lt;/h2&gt;
&lt;p&gt;结论先说：&lt;strong&gt;如果要开发一个有长期用户画像、复杂工作流和明确更新策略的应用，LangGraph + LangMem 是较合适的起点；但 User Model 的领域逻辑仍然必须自己设计。Claude Code 更适合做一个消费 User Model 的客户端，不适合充当 User Model 的中心数据库。&lt;/strong&gt;&lt;/p&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;框架&lt;/th&gt;&lt;th&gt;已提供的能力&lt;/th&gt;&lt;th&gt;对本文需求的匹配度&lt;/th&gt;&lt;th&gt;还需要自行实现的部分&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;LangChain&lt;/td&gt;&lt;td&gt;模型、工具、检索器和集成等通用应用抽象&lt;/td&gt;&lt;td&gt;适合组装模型和检索组件，但不是完整的长期用户建模系统&lt;/td&gt;&lt;td&gt;用户画像、时间有效性、偏好推断、适用性判定和证据治理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LangGraph&lt;/td&gt;&lt;td&gt;Checkpointer 保存 thread 级短期状态；Store 保存跨 thread 的长期数据；支持 namespace 和 semantic search&lt;/td&gt;&lt;td&gt;很适合作为任务编排与状态持久化层&lt;/td&gt;&lt;td&gt;偏好 Claim 的数据模型、时间和版本策略、写入门控、任务条件化检索与应用判断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LangMem&lt;/td&gt;&lt;td&gt;记忆管理器、用户 Profile / Collection、情景/语义/程序性记忆模板、热路径记忆工具、后台记忆整理、Prompt 优化；可接入 LangGraph Store&lt;/td&gt;&lt;td&gt;最接近本文需要的记忆生命周期工具箱&lt;/td&gt;&lt;td&gt;领域本体、证据引用、正反证据、范围继承、冲突检测、偏好迁移与业务评估&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Claude Code&lt;/td&gt;&lt;td&gt;CLAUDE.md、用户级规则、项目级规则、Auto Memory、Hooks、Skills、MCP&lt;/td&gt;&lt;td&gt;适合作为开发者个人偏好的一个消费端，也能通过 Hooks 调用外部服务&lt;/td&gt;&lt;td&gt;跨应用共享、结构化偏好状态、精细时间有效性、证据版本、面向任意业务任务的条件化解析&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mem0&lt;/td&gt;&lt;td&gt;记忆 API、自动记忆抽取、用户/会话 scope、元数据过滤和检索&lt;/td&gt;&lt;td&gt;适合快速接入基础记忆，减少从零编写抽取和召回管线的工作&lt;/td&gt;&lt;td&gt;不应把默认抽取结果当成最终偏好模型；需要自己的 Claim、Scope、Temporal 和 Applicability 层&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphiti / Zep&lt;/td&gt;&lt;td&gt;时间知识图谱、Episode 来源、事实有效时间、混合检索和关系查询&lt;/td&gt;&lt;td&gt;当用户、作品、人物、项目之间存在复杂且不断变化的关系时有价值&lt;/td&gt;&lt;td&gt;图谱事实并不会自动变成审美偏好；需要自行定义偏好实体和推断规则&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Letta&lt;/td&gt;&lt;td&gt;有状态 Agent、持久记忆块、外部记忆和由 Agent 管理的记忆更新&lt;/td&gt;&lt;td&gt;适合希望由一个长期运行的 Agent 自主管理其状态的产品&lt;/td&gt;&lt;td&gt;仍需定义可验证的偏好模型和业务更新政策；引入它往往意味着采用其 Agent Runtime&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;28.1 LangGraph：很适合做工作流和状态骨架&lt;/h3&gt;
&lt;p&gt;LangGraph 当前将记忆区分为两类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checkpointer：保存 thread 级运行状态，适合当前会话、任务中断恢复、人机协作和短期状态；&lt;/li&gt;
&lt;li&gt;Store：保存跨 thread 的长期数据，适合用户偏好、长期事实和共享知识。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;官方文档还支持对 Store 配置语义索引，并通过 namespace 将数据按用户或应用隔离。这些正好能提供 User Model 的存储和工作流基础。&lt;a href=&quot;https://docs.langchain.com/oss/python/langgraph/add-memory&quot;&gt;LangGraph Memory 文档&lt;/a&gt; · &lt;a href=&quot;https://docs.langchain.com/oss/python/langgraph/persistence&quot;&gt;Persistence 文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但要注意：Store 的一条记录可以是一个偏好，也可以只是一段任意文本。框架并不知道一条“喜欢简洁”的记忆到底适用于所有写作、技术说明还是某一本小说。&lt;strong&gt;Store 解决的是数据持久化和查找，不替你决定偏好语义。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;28.2 LangMem：最值得优先评估的记忆组件&lt;/h3&gt;
&lt;p&gt;LangMem 的价值不只是抽取对话摘要。它提供 Semantic Memory（事实和知识，包括用户 Profile 与可检索 Collection）、Episodic Memory（过去的具体经验、事件和样例）、Procedural Memory（系统行为规则和通过反馈优化 Prompt）、Memory Manager（根据新对话与当前记忆做抽取、合并、更新和整理）、Memory Tools（允许 Agent 在执行过程中主动管理和搜索记忆），以及 Background Manager（在交互结束后异步分析和整理记忆）。&lt;/p&gt;
&lt;p&gt;LangMem 的官方设计明确指出，记忆是否形成、由谁形成、存在哪里和如何召回，通常是应用特定的问题。它也支持热路径和后台两种形成方式：前者能及时响应明确记忆请求，后者适合跨多次交互发现模式。&lt;a href=&quot;https://langchain-ai.github.io/langmem/concepts/conceptual_guide/&quot;&gt;LangMem Core Concepts&lt;/a&gt; · &lt;a href=&quot;https://github.com/langchain-ai/langmem&quot;&gt;LangMem GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;对 User Model 的建议是：把 LangMem 当作抽取与整理的可复用组件，而不是把其输出直接视为权威偏好。每次更新应经过自己的验证函数，确认新主张有证据、范围合理、没有把项目级要求提升为全局偏好。&lt;/p&gt;
&lt;h3&gt;28.3 Claude Code：它有记忆，但它不是通用 User Model 服务&lt;/h3&gt;
&lt;p&gt;Claude Code 当前有两种跨会话记忆机制：CLAUDE.md / AGENTS.md 是由用户或团队维护的持久指令；Auto Memory 是 Claude 根据用户的修正和偏好自动记录的经验。&lt;/p&gt;
&lt;p&gt;官方文档说明，Auto Memory 保存在 ~/.claude/projects//memory/，按仓库隔离；主 MEMORY.md 索引在启动时只加载前 200 行或 25KB，其他主题文件按需读取。它是机器本地的 Markdown 文件，不会自动成为不同机器、云环境和业务应用共享的用户记忆服务。&lt;a href=&quot;https://code.claude.com/docs/en/memory&quot;&gt;Claude Code Memory 文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Claude Code Hooks 提供 SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、Stop 等生命周期事件，因此可以在用户提交请求时从外部 User Model 获取任务相关偏好，在会话或任务结束时把经过筛选的反馈写回外部服务。&lt;a href=&quot;https://code.claude.com/docs/en/hooks&quot;&gt;Hooks 文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因此，Claude Code 的合理定位是：用 CLAUDE.md 保存少量稳定、经用户确认的工作习惯；用 Auto Memory 保存仓库内的开发经验；用 Hook / MCP 访问外部 User Model；不把本地 Auto Memory 当成跨应用统一数据源。这也适用于其他编码 Agent：Agent 自带的记忆通常服务于自身运行时，而不是企业级或个人级的统一用户画像。&lt;/p&gt;
&lt;h3&gt;28.4 Mem0、Graphiti 和 Letta 应该如何选择？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Mem0：快速增加记忆 CRUD 和召回能力。&lt;/strong&gt; 它的产品化接口易于接入，能够按 user_id 和元数据隔离、抽取信息并进行检索。但它的记忆写入策略和更新语义需要按具体 SDK / 平台版本核实。当前 OSS v3 的自动抽取路径采用 ADD-only，不能假设它会自动、正确地完成所有偏好冲突的 UPDATE / DELETE；需要应用层明确管理修正和失效。&lt;a href=&quot;https://github.com/mem0ai/mem0/blob/main/docs/core-concepts/how-it-works.mdx&quot;&gt;Mem0 How It Works&lt;/a&gt; · &lt;a href=&quot;https://github.com/mem0ai/mem0/blob/main/docs/migration/oss-v2-to-v3.mdx&quot;&gt;OSS v2→v3 Migration&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Graphiti：当时间关系和证据来源本身很复杂时使用。&lt;/strong&gt; 它通过 Episode 保留事实来源，并对关系设置有效时间，结合语义、BM25 和图遍历进行混合查询。比如“用户何时开始偏好某类叙述”“某个偏好来自哪几本作品”“人物称谓规则在哪个版本改变”，都可以从时间图谱中获益。但偏好是一个需要学习的用户状态，Graphiti 只提供图结构、时间事实和查询能力，不会替代偏好推断。&lt;a href=&quot;https://github.com/getzep/graphiti&quot;&gt;Graphiti GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Letta：当 Agent 本身需要成为长期存在的主体时使用。&lt;/strong&gt; Letta 的 Statefulness 和持久记忆块可以让同一个 Agent 跨会话维护身份和状态，也允许 Agent 自己维护记忆。它适合 Agent Runtime 本身就是产品中心的场景；如果应用已有自己的会话、任务和服务架构，只是需要一个可共享的用户偏好库，引入完整 Agent Runtime 未必必要。&lt;a href=&quot;https://docs.letta.com/concepts/stateful-agents&quot;&gt;Letta Stateful Agents&lt;/a&gt; · &lt;a href=&quot;https://docs.letta.com/configuration/memory&quot;&gt;Memory &amp;amp; Dreaming&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;28.5 推荐组合&lt;/h3&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层&lt;/th&gt;&lt;th&gt;建议组件&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Agent / Workflow Runtime&lt;/td&gt;&lt;td&gt;LangGraph&lt;/td&gt;&lt;td&gt;编排多阶段任务、任务状态和恢复&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory extraction / consolidation&lt;/td&gt;&lt;td&gt;LangMem&lt;/td&gt;&lt;td&gt;使用现成的记忆提取、整理和 Prompt 优化能力&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;System of Record&lt;/td&gt;&lt;td&gt;PostgreSQL&lt;/td&gt;&lt;td&gt;结构化 Claim、事件、证据、版本和审计记录由应用掌控&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Initial retrieval&lt;/td&gt;&lt;td&gt;PostgreSQL FTS + metadata filter&lt;/td&gt;&lt;td&gt;不需要一开始就引入独立向量基础设施&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Semantic retrieval&lt;/td&gt;&lt;td&gt;pgvector 或独立向量索引&lt;/td&gt;&lt;td&gt;样例量增加、跨语言和跨表达方式检索确实产生收益后再加&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Temporal graph（可选）&lt;/td&gt;&lt;td&gt;Graphiti&lt;/td&gt;&lt;td&gt;只有出现复杂实体关系和历史时间查询需求时引入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Developer assistant client&lt;/td&gt;&lt;td&gt;Claude Code Hooks / MCP&lt;/td&gt;&lt;td&gt;读取外部 User Model，按当前代码任务注入少量相关偏好&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这不是要求必须把这些产品全部部署起来。起步时只需要 LangGraph、LangMem 和 PostgreSQL；其他组件应由具体的检索、状态或运行时需求驱动。&lt;/p&gt;
&lt;h2&gt;29. 推荐的端到端实现：把 User Model 作为独立服务能力&lt;/h2&gt;
&lt;p&gt;建议将 User Model 从某个聊天 Agent 的私有记忆中抽离，变成可被翻译服务、研究助手、编码 Agent、内容创作工具共同调用的服务能力。&lt;/p&gt;
&lt;pre&gt;flowchart TB
    A[&quot;User Interactions&amp;lt;br/&amp;gt;ratings / choices / edits / explicit rules&quot;] --&amp;gt; B[&quot;Immutable Interaction Event Store&quot;]
    B --&amp;gt; C[&quot;Evidence Extraction and Classification&quot;]
    C --&amp;gt; D[&quot;Evidence Validation&quot;]
    D --&amp;gt; E[&quot;Preference Claim Store&amp;lt;br/&amp;gt;versioned / scoped / temporal&quot;]
    E --&amp;gt; F[&quot;User Model Snapshot Builder&quot;]
    G[&quot;Current Task Context&quot;] --&amp;gt; H[&quot;Task and Preference Requirement Parser&quot;]
    H --&amp;gt; I[&quot;Preference Resolver&quot;]
    F --&amp;gt; I
    E --&amp;gt; J[&quot;Hybrid Evidence Retrieval&quot;]
    J --&amp;gt; I
    I --&amp;gt; K[&quot;Applicability Gate&amp;lt;br/&amp;gt;scope / time / confidence / conflicts&quot;]
    K --&amp;gt; L[&quot;Task-specific Preference Snapshot&quot;]
    L --&amp;gt; M[&quot;Agent Workflow&amp;lt;br/&amp;gt;generation / review / decision&quot;]
    M --&amp;gt; N[&quot;Outcome and User Feedback&quot;]
    N --&amp;gt; B
    K --&amp;gt; O[&quot;Decision Trace&amp;lt;br/&amp;gt;applied / excluded / reason&quot;]&lt;/pre&gt;
&lt;h3&gt;29.1 写入链路：先保存事件，再形成偏好主张&lt;/h3&gt;
&lt;p&gt;写入时不要让一个 LLM 同时完成“识别反馈、总结偏好、修改画像、删除旧偏好”四个动作。建议拆成：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Event Capture&lt;/strong&gt;：保存用户原始反馈、候选内容、当前任务上下文和时间信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence Classification&lt;/strong&gt;：识别这是明确指令、评分、比较、批注、重写、接受还是拒绝。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope Inference&lt;/strong&gt;：判断证据可能作用于全局、任务类别、文体、项目还是当前会话。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claim Proposal&lt;/strong&gt;：提出新增、细化、缩小范围、冲突或失效的候选偏好。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transition Validation&lt;/strong&gt;：检查支持证据、反证、旧版本保留、范围变化和更新理由。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commit&lt;/strong&gt;：生成新的偏好版本；原始事件和旧版本保持可追溯。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对明确的用户指令，可以快速建立高优先级的显式 Claim；对间接推断，则放到后台进行多事件归纳，必要时保持 provisional，不要立即写成全局规则。&lt;/p&gt;
&lt;h3&gt;29.2 偏好推断：建立分层先验，而不是简单平均所有反馈&lt;/h3&gt;
&lt;p&gt;建议把偏好看成有层级的条件模型：用户全局偏好提供默认先验；领域和任务偏好对全局先验进行细化；文体、语言方向和文本类型进一步限定；作品、人物和章节偏好提供局部修正；当前请求提供一次性的明确覆盖。&lt;/p&gt;
&lt;p&gt;在统计上，可以从加权计数、Beta-Binomial 或 Bradley–Terry 等简单方法开始。对于 A/B 选择，用 Bradley–Terry 学习相对偏好；对于评分，使用有序评分模型而不是把 1—10 分直接当成风格权重；对于用户重写，要先识别修改原因和作用范围。&lt;/p&gt;
&lt;p&gt;EMA / 滑动窗口可以用来平滑近期变化，但不能取代范围判断。若用户连续几次在某一本小说中要求更华丽的表达，系统应该优先把它解释为这本书或这一类文本的局部偏好，而不是立即调整全局审美。&lt;/p&gt;
&lt;h3&gt;29.3 读取链路：先判断任务需要什么，再决定检索什么&lt;/h3&gt;
&lt;p&gt;一次任务不应该无条件检索全部用户偏好。推荐的读取链路：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将当前请求解析为结构化 Task Context。&lt;/li&gt;
&lt;li&gt;推导任务可能需要的偏好维度，例如人物对白、句法节奏或叙述距离。&lt;/li&gt;
&lt;li&gt;加载适用范围内的长期 Claim 和当前项目覆盖项。&lt;/li&gt;
&lt;li&gt;从事件库中检索少量正例与反例，提供证据而不是只提供规则。&lt;/li&gt;
&lt;li&gt;对候选结果做时间和冲突解析。&lt;/li&gt;
&lt;li&gt;判断是否应用；不符合范围或证据不足时允许 abstain。&lt;/li&gt;
&lt;li&gt;编译一个小型 Preference Snapshot，并记录所有引用的 Claim / Event ID。&lt;/li&gt;
&lt;li&gt;将 Snapshot 注入模型任务，并在任务结束时记录实际结果和用户反馈。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;29.4 不要让用户画像取代当前请求&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层级&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;th&gt;处理原则&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;语义与事实约束&lt;/td&gt;&lt;td&gt;原文含义、人物关系、情节、事实、必要的忠实性&lt;/td&gt;&lt;td&gt;不被审美偏好覆盖&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;当前明确要求&lt;/td&gt;&lt;td&gt;本次任务指定的文风、用途和受众&lt;/td&gt;&lt;td&gt;优先于推断出的长期默认偏好&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;项目 / 作品规则&lt;/td&gt;&lt;td&gt;作品基调、专名、人物声音、章节要求&lt;/td&gt;&lt;td&gt;在项目范围内有效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;条件化长期偏好&lt;/td&gt;&lt;td&gt;与当前任务匹配、证据充分的 User Model Claim&lt;/td&gt;&lt;td&gt;作为默认行为指导&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;通用默认&lt;/td&gt;&lt;td&gt;当前没有相关证据时的稳健做法&lt;/td&gt;&lt;td&gt;不强行个性化&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这里的重点不是“优先级越高越强硬”，而是明确哪些信息是硬约束，哪些是软偏好。模型不应为了符合用户审美而改变原文事实，也不应为了遵循一个历史偏好而违背用户当前意图。&lt;/p&gt;
&lt;h2&gt;30. 如何验证系统真的越来越懂用户？&lt;/h2&gt;
&lt;p&gt;不要只检查“能否找回用户曾经说过的话”。建议分五层做评估。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;评估层&lt;/th&gt;&lt;th&gt;核心问题&lt;/th&gt;&lt;th&gt;测试指标 / 方法&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Event Capture&lt;/td&gt;&lt;td&gt;是否完整记录原始选择、修改、评分和上下文？&lt;/td&gt;&lt;td&gt;事件完整率、字段准确率、原文可追溯率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Inference&lt;/td&gt;&lt;td&gt;是否把事件推断成了正确范围的偏好？&lt;/td&gt;&lt;td&gt;Claim precision、scope accuracy、confidence calibration、反证覆盖率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Retrieval&lt;/td&gt;&lt;td&gt;是否找到当前任务需要的证据，而非表面相似的错误样例？&lt;/td&gt;&lt;td&gt;Recall@K、MRR、NDCG、正反例召回率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Applicability&lt;/td&gt;&lt;td&gt;是否正确决定应用或忽略历史偏好？&lt;/td&gt;&lt;td&gt;适用判断准确率、错误个性化率、过度个性化率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Evolution and Outcome&lt;/td&gt;&lt;td&gt;新反馈是否合理改变模型？最终结果是否更符合读者？&lt;/td&gt;&lt;td&gt;版本修正准确率、稳定偏好保留率、A/B win rate、整段阅读评价&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;30.1 必须包含的对抗性测试&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;同一个全局偏好，在不同文本类型下需要不同处理；&lt;/li&gt;
&lt;li&gt;当前明确要求与历史偏好相反；&lt;/li&gt;
&lt;li&gt;历史有高度相似但用户明确拒绝的反例；&lt;/li&gt;
&lt;li&gt;用户在一个项目中尝试新风格，但不希望改变全局偏好；&lt;/li&gt;
&lt;li&gt;用户的偏好确实发生长期变化；&lt;/li&gt;
&lt;li&gt;用户的反馈相互矛盾，且系统没有足够证据做决定；&lt;/li&gt;
&lt;li&gt;一条记忆在历史上有效，但在当前时间已经过期；&lt;/li&gt;
&lt;li&gt;当前任务根本不需要调用任何个人偏好。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;30.2 一条关键指标：错误应用率&lt;/h3&gt;
&lt;p&gt;现有记忆系统常关注 Recall、准确率和回答质量，但本场景还应单独追踪：&lt;/p&gt;
&lt;h1&gt;[
\text{False Personalization Rate}&lt;/h1&gt;
&lt;p&gt;\frac{\text{不适用却被应用的偏好数}}
{\text{所有被应用的偏好数}}
]&lt;/p&gt;
&lt;p&gt;这个指标越低越好。一个系统即使检索召回率很高，如果经常把错误场景的偏好用于当前任务，也不能算真正理解了用户。&lt;/p&gt;
&lt;h3&gt;30.3 文学阅读场景还需要专门基准&lt;/h3&gt;
&lt;p&gt;把 LoCoMo、LongMemEval、PersonaMem 等通用记忆基准作为系统级测试；另建一套真实读者基准，保存跨作品、跨章节、跨文体的 A/B 选择、修改和理由。评估时应同时包含局部语言质量、整段阅读体验、人物声音和叙述视角的一致性、正反例是否被正确迁移，以及当前任务是否被错误的长期偏好影响。&lt;/p&gt;
&lt;p&gt;通用 Benchmark 只能证明记忆和个性化能力的某个子集，不应直接宣称系统已经掌握了个人文学审美。&lt;/p&gt;
&lt;h2&gt;31. 实施路线：先做 User Model，不要先做复杂 Memory Stack&lt;/h2&gt;
&lt;p&gt;建议分四个阶段推进。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阶段一：建立事实基础。&lt;/strong&gt; 用 PostgreSQL 保存不可变的 Interaction Event、Preference Evidence、Preference Claim 和版本记录。实现用户、项目、任务和时间范围过滤。暂时使用全文检索，不急于部署向量数据库。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阶段二：建立偏好推断与版本更新。&lt;/strong&gt; 引入 LangMem 做候选记忆提取和后台整理；所有 Claim 通过应用层验证。实现显式偏好与隐式偏好的不同权重、正反证据、scope 推断、临时状态和版本替代。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阶段三：建立 Preference Resolver。&lt;/strong&gt; 用 LangGraph 编排任务解析、候选召回、时间解析、适用性判断和上下文编译。先以 metadata + FTS + 少量正反例完成端到端，再用实际失败案例决定是否引入 pgvector、reranker 或 Graphiti。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阶段四：建立闭环评估。&lt;/strong&gt; 记录每次任务实际应用和排除的偏好，保存 Preference Snapshot 版本，收集用户反馈并建立回归集。只有当高质量反馈数据足够丰富时，再考虑个性化 reranker 或 preference tuning。&lt;/p&gt;
&lt;p&gt;最小可用系统不需要多 Agent，也不需要复杂向量库。优先把以下五个接口做正确：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;record_event()：保存发生了什么；&lt;/li&gt;
&lt;li&gt;propose_preference_claims()：根据证据提出偏好主张；&lt;/li&gt;
&lt;li&gt;validate_claim_transition()：检查更新是否合理；&lt;/li&gt;
&lt;li&gt;resolve_preferences(task_context)：判断当前任务适用哪些偏好；&lt;/li&gt;
&lt;li&gt;compile_preference_snapshot()：形成可追溯的任务上下文。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;最终目标不是让模型拥有更多记忆，而是让系统对每次个性化决策都能回答：我为什么认为用户喜欢这种表达？这个判断在什么范围和时间内成立？为什么本次任务应该使用它？又有哪些历史证据说明本次不应该使用它？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当这些问题都能被数据和决策记录回答时，才可以说系统开始具备一个可验证、可持续修正的 User Model。&lt;/p&gt;
&lt;h2&gt;32. 2026 年最新研究：从“记忆系统”转向“用户状态推断与偏好选择性”&lt;/h2&gt;
&lt;p&gt;本轮补充检索重点放在 2026 年研究，尤其是 ACL / EMNLP 论文、ICML 论文和 SIGIR 研究。与前一轮的 RMM、TSM、PAMU、QUMem 等工作相比，这批研究更直接地验证本文两句话中的难点：偏好状态会变化；用户画像线索不等于任务偏好；检索到的偏好也未必应该应用。&lt;/p&gt;
&lt;h3&gt;32.1 用户偏好不是一个静态 Profile，而是需要在线更新的状态&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;研究&lt;/th&gt;&lt;th&gt;方法与主要结果&lt;/th&gt;&lt;th&gt;对 User Model 的启示&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;HorizonBench: Long-Horizon Personalization with Evolving Preferences&lt;/strong&gt;（arXiv，2026-04）&lt;/td&gt;&lt;td&gt;构建 360 个模拟用户、4,245 个测试项、六个月对话轨迹，平均约 4,300 轮、163K tokens，并为偏好变化保留完整 provenance。评测 25 个前沿模型，最高分为 52.8%，多数模型在 20% 的机会水平附近或以下；模型在偏好变化题目上犯错时，超过三分之一会继续选择用户最初表达的旧偏好。&lt;/td&gt;&lt;td&gt;这是“持续修正”必要性的直接证据。长上下文并不能自然解决状态更新；系统需要明确表示偏好何时改变、由什么事件触发，以及旧值何时失效。&lt;a href=&quot;https://arxiv.org/abs/2604.17283&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;AlpsBench: An LLM Personalization Benchmark for Real-Dialogue Memorization and Preference Alignment&lt;/strong&gt;（SIGIR 2026）&lt;/td&gt;&lt;td&gt;从 WildChat 真实人机对话中整理 2,500 条长期交互序列，并配有人类验证的结构化记忆。分别评估偏好信息抽取、更新、检索和使用。研究发现，模型难以稳定抽取潜在用户特征；记忆更新能力存在明显瓶颈；干扰项增多时检索准确率下降；显式记忆虽然改善召回，却不能保证最终回答符合用户偏好或情感期待。&lt;/td&gt;&lt;td&gt;比完全合成 Persona 更贴近真实交互。最重要的结果是：记忆召回提高，并不等于个性化结果改善。评估必须覆盖从事件到偏好，再到输出应用的完整链路。&lt;a href=&quot;https://arxiv.org/abs/2603.26680&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;MATE: Adaptive Long- and Short-Term User Memory for LLM-Based Recommendation&lt;/strong&gt;（arXiv，2026-10）&lt;/td&gt;&lt;td&gt;对每次新行为同时检查历史重复支持和近期行为一致性，分别更新长期与短期记忆；推荐时再由近期上下文动态决定两类记忆的权重。在 MovieLens-10M、Amazon Luxury Beauty 和 KuaiRec 上，NDCG@10 相对最强外部基线提高 7.0%—13.2%。&lt;/td&gt;&lt;td&gt;长期偏好应保守更新，短期兴趣应快速变化，而且两者对当前任务的贡献权重应动态变化。该结果来自推荐任务，不能直接等同于对话偏好学习，但时间分层与动态加权值得借鉴。&lt;a href=&quot;https://arxiv.org/abs/2610.06050&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;HyperTrace: Hypothesis-Based Preference Tracing for Online LLM Personalization&lt;/strong&gt;（Findings of EMNLP 2026）&lt;/td&gt;&lt;td&gt;不把用户压缩成一个不可解释的向量，而是维护自然语言形式的短期意图与长期偏好假设，再用基于 Sequential Monte Carlo 的重加权过程，根据后续交互持续调整假设权重；无需更新模型参数。&lt;/td&gt;&lt;td&gt;用户偏好可以表示为一组相互竞争、置信度不同的假设，而不必过早合并成单一结论。面对证据不足或冲突时，保留多个候选状态比强行决定一个“用户画像”更稳健。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1038/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Learning Personalized Agents from Human Feedback（PAHF）&lt;/strong&gt;（Meta Research / arXiv，2026-02）&lt;/td&gt;&lt;td&gt;提出持续个性化闭环：行动前通过澄清问题解决意图歧义；行动时从记忆中取回偏好；行动后利用结果反馈更新记忆。研究在具身操作和在线购物场景中评估从零学习偏好以及适应 Persona Shift。&lt;/td&gt;&lt;td&gt;偏好学习不是单向的“观察—总结—存储”。系统在不确定时要敢于问，行动后还要观察用户是否接受结果，并把结果反馈到用户状态更新中。&lt;a href=&quot;https://ai.meta.com/research/publications/learning-personalized-agents-from-human-feedback/&quot;&gt;Meta Research&lt;/a&gt; · &lt;a href=&quot;https://arxiv.org/abs/2602.16173&quot;&gt;arXiv&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;32.2 用户画像（Profile）不等于当前任务的偏好（Preference）&lt;/h3&gt;
&lt;p&gt;这是本轮调研里最值得强调的一组研究。很多系统把“知道用户是谁”误当成“知道用户在当前任务中会选择什么”。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;研究&lt;/th&gt;&lt;th&gt;研究问题与发现&lt;/th&gt;&lt;th&gt;设计含义&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;VIBE-Bench: Evaluating Personalized LLMs When Profiles Don’t Mean Preferences&lt;/strong&gt;（Findings of EMNLP 2026）&lt;/td&gt;&lt;td&gt;研究 Profile 与任务偏好之间的概念错位（profile-preference conceptual misalignment）。数据集包含 3,504 个 Persona、12,239 条对话和人工核验测试集。用户画像中可观察到的特征，与当前问题真正需要的偏好可能处在不同概念空间，表面语义相似的检索并不可靠。&lt;/td&gt;&lt;td&gt;“用户喜欢历史小说”不能直接推断“用户喜欢历史小说中使用古雅措辞”；“用户是资深工程师”也不能直接推断“每次回答都要深入技术细节”。必须推断任务相关偏好，而不是把 Profile 标签当成偏好规则。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1676/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Persona2Web: Benchmarking Personalized Web Agents for Contextual Reasoning with User History&lt;/strong&gt;（ICML 2026）&lt;/td&gt;&lt;td&gt;在真实开放 Web 上评估个性化 Agent。用户历史中隐含表达了长期偏好，当前查询则有意保留歧义；Agent 需要依据历史解决歧义，而非要求用户重复全部背景。论文把这一原则称为 clarify-to-personalize。&lt;/td&gt;&lt;td&gt;当前请求缺少信息时，User Model 可以帮助系统判断用户意图；但只有在历史证据不足以消歧时，才应进一步询问。不能把所有不确定性都交给记忆检索。&lt;a href=&quot;https://proceedings.mlr.press/v306/kim26ap.html&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;APeB: Benchmarking Personalization Ability of Large Language Model Agents&lt;/strong&gt;（Findings of EMNLP 2026）&lt;/td&gt;&lt;td&gt;关注原始、未精炼的产品搜索请求，结合真实操作日志和多样用户历史，考察 Agent 如何从含噪声历史中推断潜在意图并在候选商品中作选择。&lt;/td&gt;&lt;td&gt;偏好模型不能只在用户明确说出“我喜欢 X”时有效；它还要理解浏览、比较、查看、跳过等行为，但必须区分“看过”与“喜欢”。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.315/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;BenchPreS: A Benchmark for Context-Aware Personalized Preference Selectivity of Persistent-Memory LLMs&lt;/strong&gt;（2026）&lt;/td&gt;&lt;td&gt;评测长期记忆中的偏好在不同社会和沟通场景中是否应该被应用或抑制，以 Misapplication Rate（错误应用率）和 Appropriate Application Rate（适当应用率）衡量。即使是较强模型，也会把某些仅适用于私人语境的偏好带到第三方或制度化沟通场景中；更强的偏好遵循还可能伴随更多过度应用。&lt;/td&gt;&lt;td&gt;偏好不是无条件执行的全局指令。系统必须拥有独立的适用性判定和 abstain 能力，不能因为某条偏好被检索到就自动注入 Prompt。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1040/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;32.3 用户模型与证据之间的关系，正在从“摘要”转向“可追溯结构”&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;研究&lt;/th&gt;&lt;th&gt;研究结果&lt;/th&gt;&lt;th&gt;对数据模型的启示&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;PGMem: Tightly Coupled Persona–Memory Graph for Lifelong Personalized Agents&lt;/strong&gt;（EMNLP 2026）&lt;/td&gt;&lt;td&gt;指出很多系统把 Persona 摘要与历史事件分开存储，造成用户画像缺乏有效证据的问题。PGMem 使用异构图，将事件节点和 Persona 节点通过带类型的 provenance/evidence 边连接；检索时从查询相关节点出发，根据证据有效性对用户信号排序。论文报告在三个基准上优于摘要式、Persona-aware、图结构和 Agentic Memory 基线。&lt;/td&gt;&lt;td&gt;偏好主张必须能回到支持它、修正它或反驳它的事件。Evidence Link 不能只是附加日志，而应成为 User Model 的一等数据关系。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1891/&quot;&gt;论文&lt;/a&gt; · &lt;a href=&quot;https://github.com/wonjunchoi23/pgmem/&quot;&gt;代码&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;From Recall to Forgetting: Benchmarking Long-Term Memory for Personalized Agents（Memora）&lt;/strong&gt;（Findings of ACL 2026）&lt;/td&gt;&lt;td&gt;评估 Remembering、Reasoning、Recommending 三种任务，提出 Forgetting-Aware Memory Accuracy（FAMA），在正确记忆之外，对使用已经过期或被失效记忆的行为进行惩罚。对四个 LLM 和六种 Memory Agent 的评估发现，旧记忆被错误复用、更新后未能消解矛盾的现象仍然常见。&lt;/td&gt;&lt;td&gt;“忘记”或“停止使用”是记忆生命周期的一部分。旧偏好不应简单物理删除，而应有失效状态和历史版本；当前状态查询必须排除失效记录。&lt;a href=&quot;https://aclanthology.org/2026.findings-acl.1337/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;MemoryCD: Benchmarking Long-Context User Memory of LLM Agents for Lifelong Cross-Domain Personalization&lt;/strong&gt;（Findings of EMNLP 2026）&lt;/td&gt;&lt;td&gt;使用跨多年、跨 12 个领域的真实 Amazon Review 行为数据，对 14 个基础模型、6 种记忆方法和 4 类个性化任务进行评估，覆盖单领域与跨领域个性化。&lt;/td&gt;&lt;td&gt;用户模型需要处理跨领域的稳定偏好，也要防止把某个领域的局部兴趣错误迁移到其他领域。单一全局 Profile 不足以表达这些范围差异。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1804/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Beyond Retrieval: Learning Compact User Representations for Scalable LLM Personalization（TAP-PER）&lt;/strong&gt;（Findings of EMNLP 2026）&lt;/td&gt;&lt;td&gt;将用户偏好编码为轻量、带时间信息的用户状态 Prefix，并让当前 Query 决定偏好状态如何参与任务，而不是每次都把大量历史序列化进 Prompt。在六个 LaMP 任务上优于 Prompt-based 和 Model-based 基线；在 1,000 用户规模下，单用户参数量比 OPPU 少 130 倍。&lt;/td&gt;&lt;td&gt;当用户数量巨大、每次 RAG 成本明显时，可以探索紧凑用户状态表示。但它是压缩表示，不天然具备可读、可审计的证据链，所以不能取代事件和 Claim 的权威存储。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2100/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;32.4 研究综述开始把 User Profile 当成独立的建模对象&lt;/h3&gt;
&lt;p&gt;2026 年有两类综述值得纳入技术路线。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Toward Personalized LLM-Powered Agents: Foundations, Evaluation, and Future Directions&lt;/strong&gt;（2026-02，预印本）把个性化 Agent 分为 Profile Modeling、Memory、Planning 和 Action Execution 四个相互作用的组成部分。它的关键价值在于：个性化不是生成答案时拼接几条偏好，而是贯穿任务理解、计划形成和行动选择。&lt;a href=&quot;https://arxiv.org/abs/2602.22680&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Survey on Natural Language User Profiles for Recommendation: Methods, Datasets, and Metrics&lt;/strong&gt;（EMNLP 2026）系统讨论了自然语言用户画像的生成和基于画像的推荐，强调它相较不透明 embedding 的优势是可读、可控和便于引用；同时指出可解释性与任务优化效率之间存在张力。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.2207/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这两类研究共同支持一个架构判断：&lt;strong&gt;User Model 不应该只有向量，也不应该只有自然语言摘要。&lt;/strong&gt; 应保留结构化状态、可读主张、原始证据和面向任务的压缩表示，让不同下游系统在各自需要的抽象层上消费它们。&lt;/p&gt;
&lt;h3&gt;32.5 本轮研究最重要的结论&lt;/h3&gt;
&lt;p&gt;从这些研究可以提炼出六项工程原则：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;状态更新比历史召回更难。&lt;/strong&gt; HorizonBench 和 AlpsBench 表明，系统可能记得旧偏好，却不能正确追踪偏好已经发生的变化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profile 到 Preference 之间需要推理。&lt;/strong&gt; 用户身份、兴趣或历史行为只是线索，不能直接作为当前任务的选择规则。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;检索和应用必须分离。&lt;/strong&gt; BenchPreS 与 OP-Bench 说明，过度应用偏好本身就是独立的失败模式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;证据关系应该成为模型结构的一部分。&lt;/strong&gt; PGMem 展示了把 Persona Claim 和支持/反对事件直接连接起来的做法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;遗忘和失效也需要建模。&lt;/strong&gt; Memora 的 FAMA 将“使用过期信息”纳入记忆评价，说明仅测 Recall 会掩盖重要问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;紧凑向量状态是可选优化，不是权威知识源。&lt;/strong&gt; TAP-PER 解决的是大规模个性化表示成本，不会自动提供用户可审计的理由和历史证据。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;33. 真实产品与生产系统：业界已经如何实现用户记忆和偏好个性化？&lt;/h2&gt;
&lt;p&gt;论文说明为什么需要 User Model；生产系统则展示团队为了规模、延迟、正确性和用户信任，实际把哪些组件拆开。以下区分消费级 AI 产品、企业 AI 助手，以及大规模推荐/客户服务系统。厂商公开的指标应视为厂商或云服务商披露的数据，不等同于独立第三方因果评估。&lt;/p&gt;
&lt;h3&gt;33.1 消费级 AI 助手：正在从“手动保存几条记忆”走向后台持续整理&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;产品&lt;/th&gt;&lt;th&gt;公开能力&lt;/th&gt;&lt;th&gt;与本文两句话的关系&lt;/th&gt;&lt;th&gt;仍然存在的边界&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ChatGPT Memory / Dreaming&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;OpenAI 在 2026 年 6 月披露 Dreaming V3，将后台记忆合成用于改善 freshness、continuity 和 relevance，并明确把记忆质量拆成延续有用上下文、遵循偏好/约束、随时间保持最新三个目标。用户可以查看 Memory Summary、补充或修正信息。&lt;/td&gt;&lt;td&gt;不只是把聊天内容存起来，而是后台整理长期上下文，并对“过时”单独处理；产品也把用户可查看、可修改作为一部分。&lt;/td&gt;&lt;td&gt;OpenAI 没有公开全部内部数据结构和偏好适用性算法；公开产品目标不等于每个任务都能正确判断偏好是否适用。&lt;a href=&quot;https://openai.com/index/chatgpt-memory-dreaming/&quot;&gt;官方说明&lt;/a&gt; · &lt;a href=&quot;https://help.openai.com/en/articles/8590148-memory-in-chatgpt&quot;&gt;Memory 文档&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Gemini Personal Intelligence / Memories&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Gemini 可结合过去聊天、用户连接的 Gmail、Photos、YouTube、Search 等信息生成个性化回答。用户可以纠正结论，例如说明自己并不喜欢某项活动，而只是陪家人参与；也可以让模型解释其使用了哪些来源。2026 年还加入从其他 AI 应用导入记忆和聊天历史的功能。&lt;/td&gt;&lt;td&gt;它展示了跨数据源的用户上下文如何帮助推断隐含偏好，也公开承认错误关联和 over-personalization 是产品需要持续改善的问题。&lt;/td&gt;&lt;td&gt;连接数据、记忆和推断都需要权限边界；产品当前仍然存在资格、地区和账户类型限制。导入的摘要也不等于具备原始证据完整性的 User Model。&lt;a href=&quot;https://blog.google/innovation-and-ai/products/gemini-app/personal-intelligence/&quot;&gt;Personal Intelligence&lt;/a&gt; · &lt;a href=&quot;https://blog.google/innovation-and-ai/products/gemini-app/switch-to-gemini-app/&quot;&gt;记忆导入&lt;/a&gt; · &lt;a href=&quot;https://support.google.com/gemini/answer/16598623?hl=en&quot;&gt;个性化帮助&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Claude Memory / Projects / Cowork&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Claude 的记忆涵盖用户角色、项目、沟通偏好和技术习惯；项目可维护项目级记忆，并能根据设置与账户级记忆共享或隔离。聊天与 Cowork 之间可以复用相关记忆。&lt;/td&gt;&lt;td&gt;体现了用户级和项目级记忆需要不同的 scope，而且不同执行入口应该能够共享适用的用户上下文。&lt;/td&gt;&lt;td&gt;产品公开的记忆并没有提供通用、可任意调用的结构化偏好 Claim API；它仍是 Claude 产品自己的记忆系统。&lt;a href=&quot;https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context&quot;&gt;Claude Memory&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Microsoft Copilot Memory&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Microsoft 365 Copilot 文档披露 Saved Memories、从聊天历史推断的动态细节以及 Custom Instructions；记忆与聊天历史有不同更新和删除行为，并存储在用户 Exchange mailbox 的隐藏文件夹中。文档目前将相关个性化与记忆标为 Preview。&lt;/td&gt;&lt;td&gt;展示了企业身份、邮箱存储、安全与合规控制如何进入长期记忆架构，而不只是采用外部向量库。&lt;/td&gt;&lt;td&gt;Preview 能力和策略仍可能变化；管理员策略、个人控制、保留策略和删除语义必须逐项验证，不能仅把它当作通用记忆服务。&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365/copilot/copilot-personalization-memory&quot;&gt;Microsoft Learn&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;一个重要趋势是：ChatGPT、Gemini 和 Claude 都在把用户偏好、历史上下文和项目上下文纳入产品体验；但它们是各自生态中的记忆功能，而不是天然可移植的统一 User Model。Gemini 和 Glean 开始提供记忆导入或跨工具连接，说明用户记忆的可移植性正在变成产品需求。&lt;/p&gt;
&lt;h3&gt;33.2 Glean：很接近企业级“跨 Agent 个人记忆层”的产品形态&lt;/h3&gt;
&lt;p&gt;Glean 的 Memory and Personalization 文档将记忆分成两种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Saved memories&lt;/strong&gt;：用户明确告诉系统要记住的信息；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learned memories&lt;/strong&gt;：系统从聊天和更广泛的工作活动中归纳出的角色、工作风格、项目、目标、协作者和近期上下文。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Glean 的文档进一步披露：Learned Memory 通过日常整理形成长期记录，并作为随用户活动更新的 living records 维护；旧的、关联性下降的信息会逐渐淡出。用户可以查看、编辑、删除记忆，并在某次对话中控制是否使用记忆。系统还显示某个回答是否使用了记忆及其依据。&lt;/p&gt;
&lt;p&gt;更值得关注的是，Glean Memory 可通过 MCP 被 ChatGPT、Claude、Cursor、VS Code、Copilot 等连接工具读取或更新。它把用户记忆从某一个模型或 Agent 的私有能力，向跨工具的共享上下文层推进。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对 User Model 的启发：&lt;/strong&gt; 企业可能需要一个统一的用户记忆服务，而不是让每个 Agent 各自保存一份互不一致的偏好。Glean 已经展示出跨 Agent 读写、用户级隔离和用户可管理的产品模式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;边界：&lt;/strong&gt; Glean 的公开产品文档主要说明记忆类别、管理和使用机制，并未公开所有偏好推断算法和可审计 Claim 模型；文档也提示不同云部署的功能可用性存在差异。&lt;a href=&quot;https://docs.glean.com/user-guide/assistant/memory-personalization&quot;&gt;Glean Memory and Personalization&lt;/a&gt; · &lt;a href=&quot;https://docs.glean.com/administration/assistant/configuration/memory-personalization&quot;&gt;Glean Memory Configuration&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;33.3 DoorDash：最值得研究的生产级 User Memory 架构&lt;/h3&gt;
&lt;p&gt;DoorDash 在 2026 年 6 月公开介绍了 Unified Consumer Memory。它的价值不仅是用历史行为推荐商品，而是把用户行为转成可解释的语义偏好，供传统 ML 排序系统和生成式 AI 共同使用。&lt;/p&gt;
&lt;p&gt;它明确指出：Embedding 能捕获消费者经常购买有机食品，却无法直接表达为什么购买，也难以区分饮食限制和随意偏好，更不能自然地把这些理解交给 LLM。因此，DoorDash 从行为数据中生成语言化、结构化的消费者记忆。&lt;/p&gt;
&lt;p&gt;它的架构有三个不同的时间层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Long-term memory&lt;/strong&gt;：从订单、搜索、浏览和客服数据中归纳耐久倾向，如饮食选择、价格敏感度、品牌忠诚度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-session context&lt;/strong&gt;：当前购物车、正在搜索的类别、已查看/拒绝的商品等即时意图；近期上下文可以覆盖或补充长期倾向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Explicit context&lt;/strong&gt;：用户明确说出的偏好和限制，与行为推断得到的倾向分开保存。明确约束通常需要显式修改，而行为推断可以逐步调整。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DoorDash 还披露了多个值得直接借鉴的工程实现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将记忆拆成按领域组织的 Memory Blocks，例如饮食偏好、餐饮模式、品牌倾向、商品分类偏好、门店偏好和跨渠道模式；&lt;/li&gt;
&lt;li&gt;每个 Block 再拆成拥有严格 Pydantic Schema 的组件，组件可以独立版本化；&lt;/li&gt;
&lt;li&gt;记录模型 ID、生成时间、Prompt Hash、Response Hash 等 lineage；&lt;/li&gt;
&lt;li&gt;使用 Manifest 组合指定版本的组件，可以对部分用户灰度发布不同 Manifest，并在质量下降时回滚；&lt;/li&gt;
&lt;li&gt;能够重建某个消费者在过去某个时间点使用的记忆状态；&lt;/li&gt;
&lt;li&gt;在会话中反复出现的短期行为，可以经过校验、去重和合并后晋升为长期记忆；一次性行为自然衰减。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这几项设计与本文的 User Model 高度一致：&lt;strong&gt;不同时间尺度的信号分开存储；显式声明与行为推断分离；偏好组件独立版本化；每个结论保留来源；下游模型使用同一份语义用户状态。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DoorDash 的架构尤其说明：向量、图特征和自然语言 Profile 并不互斥。结构化语义记忆可以同时转换成 Embedding、Graph Features 和 LLM-readable Context，供不同下游系统使用。向量是消费端表示之一，不是用户模型的全部。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://careersatdoordash.com/blog/doordash-unified-consumer-memory-for-personalization-at-scale/&quot;&gt;DoorDash Engineering：Building a unified consumer memory for personalization at scale&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;33.4 AT&amp;amp;T：跨渠道记忆和当前意图联合使用&lt;/h3&gt;
&lt;p&gt;Google Cloud 的客户案例介绍，AT&amp;amp;T 使用 BigQuery 和 Gemini Enterprise for Customer Experience 构建客户服务 Agent，能够调用最多 60 天的客户历史。客户可能先在线浏览设备、之后到实体门店，再过几周打电话；Agent 可以继续已有上下文，而不是让客户重复描述需求。&lt;/p&gt;
&lt;p&gt;Google Cloud 披露的案例结果包括：全自动解决的客户咨询增加 20%，每年约 1.5 亿美元节省。需要注意，这些是 Google Cloud 客户案例披露的整体项目结果，不应把全部收益归因于“60 天记忆”单一功能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对 User Model 的启发：&lt;/strong&gt; 当前任务应同时查询客户历史、当前渠道和即时意图；历史记忆不是聊天摘要，而是跨触点保持连续性的状态。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloud.google.com/customers/att-gemini-enterprise-cx&quot;&gt;Google Cloud：AT&amp;amp;T elevates customer experience with Gemini Enterprise for CX and BigQuery&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;33.5 Salesforce Agentforce Memory：把记忆放到 Agent Reasoner 的执行链中&lt;/h3&gt;
&lt;p&gt;Salesforce Engineering 在 2026 年 10 月公开介绍了 Agentforce Memory 从 PoC 到 Pilot 的工程演进：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;初期先把对话历史和用户 Profile 注入 Agent Context；&lt;/li&gt;
&lt;li&gt;之后发现最近对话不一定是当前任务最相关的信息，因此转向语义检索；&lt;/li&gt;
&lt;li&gt;评估过把全部记忆注入上下文、由 LLM 自行调用记忆、逐步提供上下文，以及推理前检索等模式；&lt;/li&gt;
&lt;li&gt;为控制延迟和上下文规模，当前描述的方案在推理前执行关键词检索，仅在匹配时注入记忆；&lt;/li&gt;
&lt;li&gt;后续将记忆能力从显式 Agent Actions 集成到 Reasoner 的 context.memory 配置中，由平台自动完成整理、检索和注入；&lt;/li&gt;
&lt;li&gt;用户可全局或按 Agent 启用/禁用记忆，并通过 Memory Management Console 查看、编辑和管理记忆。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这段工程经验特别有价值：最近消息并不总是最相关的记忆；把记忆作为工具让 Agent 自己调用会增加每个 Sub-agent 的配置复杂度；把记忆纳入 Reasoner 的统一执行流程，可以减少应用方的重复配置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对 User Model 的启发：&lt;/strong&gt; 记忆检索应当成为 Agent 运行时的标准上下文准备步骤，而不是由每个业务 Agent 各自拼装一套 Memory Tool。但 Salesforce 公开文章描述的是向 Pilot 推进的过程，不应将其误读成所有客户已默认 GA 的能力。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://engineering.salesforce.com/ai-agents-need-memory-building-persistent-memory-for-agentforce/&quot;&gt;Salesforce Engineering：AI Agents Need Memory: Building Persistent Memory for Agentforce&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;33.6 Shop Global：把用户画像、会话意图和实时信号合并用于 AI Personal Shopper&lt;/h3&gt;
&lt;p&gt;Google Cloud 的 Shop Global 客户案例展示了另一类真实应用：AI Personal Shopper 从用户历史购买、浏览行为、愿望清单和会员等级中获取长期背景，同时结合当前浏览和筛选行为、实时趋势以及外部环境（例如当地天气），为超过 1,000 个品牌的商品发现提供个性化推荐，并支持 LINE 内完成购物流程。&lt;/p&gt;
&lt;p&gt;这类场景需要区分“长期喜欢什么”和“当前正在找什么”。例如长期偏好高端户外服装，不代表用户每次都在购买户外商品；当前搜索婴儿礼物，也不应该改写其长期个人消费画像。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloud.google.com/customers/shop-global&quot;&gt;Google Cloud：Shop Global case study&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;33.7 产品应用可以归纳出什么？&lt;/h3&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;生产模式&lt;/th&gt;&lt;th&gt;代表产品/系统&lt;/th&gt;&lt;th&gt;可以复用的设计&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;后台记忆合成&lt;/td&gt;&lt;td&gt;ChatGPT Dreaming&lt;/td&gt;&lt;td&gt;从多次交互形成当前记忆状态，并持续纠正陈旧信息&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多源上下文个性化&lt;/td&gt;&lt;td&gt;Gemini Personal Intelligence&lt;/td&gt;&lt;td&gt;跨应用取证，提供来源说明，允许用户纠正推断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;跨 Agent 个人记忆&lt;/td&gt;&lt;td&gt;Glean&lt;/td&gt;&lt;td&gt;用户级共享记忆、MCP 接口、显式/学习型记忆、用户可管理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;规模化语义用户画像&lt;/td&gt;&lt;td&gt;DoorDash Unified Consumer Memory&lt;/td&gt;&lt;td&gt;长期/即时/明确三层，结构化 Block，版本和 lineage，灰度与回滚&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;跨渠道客户连续性&lt;/td&gt;&lt;td&gt;AT&amp;amp;T Gemini Enterprise for CX&lt;/td&gt;&lt;td&gt;客户历史与当下渠道意图联合使用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;平台内置 Agent Memory&lt;/td&gt;&lt;td&gt;Salesforce Agentforce&lt;/td&gt;&lt;td&gt;统一 Reasoner 预检索、受控注入、低延迟与用户控制&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对话式商品发现&lt;/td&gt;&lt;td&gt;Shop Global AI Personal Shopper&lt;/td&gt;&lt;td&gt;画像、会话行为和实时环境联合影响推荐&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;34. 结合研究和实际产品，User Model 的目标架构需要进一步明确&lt;/h2&gt;
&lt;p&gt;研究与产品实践共同表明，User Model 不应该被定义为“某个向量库里存的一份用户摘要”。更准确的定义是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个由原始证据支撑、对用户状态进行版本化维护、能够按任务解析适用偏好，并将决策结果反馈回自身的用户状态系统。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;34.1 五类信息要明确区分&lt;/h3&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;信息类型&lt;/th&gt;&lt;th&gt;例子&lt;/th&gt;&lt;th&gt;生命周期&lt;/th&gt;&lt;th&gt;典型写入方式&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Explicit Preference&lt;/td&gt;&lt;td&gt;“任何小说翻译都不要擅自解释潜台词”&lt;/td&gt;&lt;td&gt;通常较稳定，用户明确修改才改变&lt;/td&gt;&lt;td&gt;用户明确声明&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Inferred Preference&lt;/td&gt;&lt;td&gt;多次选择保留原文的含蓄感&lt;/td&gt;&lt;td&gt;需要持续验证，允许置信度变化&lt;/td&gt;&lt;td&gt;从事件和样例推断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Long-term State&lt;/td&gt;&lt;td&gt;常见阅读兴趣、长期项目、常用输出习惯&lt;/td&gt;&lt;td&gt;慢速更新&lt;/td&gt;&lt;td&gt;多次证据归纳&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Short-term Intent&lt;/td&gt;&lt;td&gt;本次想尝试华丽译风、当前章节临时要求&lt;/td&gt;&lt;td&gt;短期有效，通常任务结束后衰减&lt;/td&gt;&lt;td&gt;当前会话或任务信号&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Task/Project Constraint&lt;/td&gt;&lt;td&gt;当前小说的人物声音、历史术语和叙述规则&lt;/td&gt;&lt;td&gt;项目范围内有效&lt;/td&gt;&lt;td&gt;项目配置、用户明确说明&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;需要特别指出：Explicit Preference 不一定永远正确，Inferred Preference 也不一定很弱。关键是记录来源类型和置信度，而不是简单规定“显式就是永久、隐式就是临时”。&lt;/p&gt;
&lt;h3&gt;34.2 偏好状态至少需要四个时间字段&lt;/h3&gt;
&lt;p&gt;DoorDash 的版本化组件、HorizonBench 的偏好演变和 Memora 的过期记忆评价都指向同一个设计要求。建议每个 Preference Claim 至少有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;observed_at：系统观察到支持该偏好的行为或反馈的时间；&lt;/li&gt;
&lt;li&gt;valid_from / valid_to：系统认为偏好在用户行为中实际有效的区间；&lt;/li&gt;
&lt;li&gt;last_confirmed_at：最近一次得到明确或高质量证据确认的时间；&lt;/li&gt;
&lt;li&gt;superseded_at：该版本何时被新 Claim 替代。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中 observed_at 和 valid_from 是两种不同的时间。例如用户今天才告诉系统“我从上个月开始不再喜欢这种译风”，系统今天才获知，但偏好变更的有效时间可能早于观察时间。&lt;/p&gt;
&lt;h3&gt;34.3 把证据链作为一等关系，不要只在 Profile 文本后面附几个 ID&lt;/h3&gt;
&lt;p&gt;借鉴 PGMem 和 DoorDash，建议数据库关系至少能回答：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;哪些 Interaction Event 支持某个 Claim？&lt;/li&gt;
&lt;li&gt;哪些 Event 与 Claim 冲突？&lt;/li&gt;
&lt;li&gt;哪些事件导致它从 provisional 变成 active？&lt;/li&gt;
&lt;li&gt;哪次用户纠正使其缩小范围或失效？&lt;/li&gt;
&lt;li&gt;当前 Snapshot 使用了哪个 Claim 版本？&lt;/li&gt;
&lt;li&gt;当时生成 Claim 的模型、Prompt 和规则版本是什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果使用 PostgreSQL，可以先用关系表表达 Claim 与 Event 的多对多关系；不必因为 PGMem 使用图结构就立即引入图数据库。只有需要复杂多跳关系查询时，再增加 Graphiti 或其他图索引。&lt;/p&gt;
&lt;h3&gt;34.4 增加独立的 Preference Applicability Policy&lt;/h3&gt;
&lt;p&gt;建议把每个偏好 Claim 表达成如下逻辑结构：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-000184&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;narration.subtlety&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;value&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;preserve_implicit_emotion&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;scope&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;tasks&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;literary_translation&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;translation_review&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;genres&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;literary-fiction&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;text_types&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;interior_monologue&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;psychological_narration&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;languages&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;en&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;ja&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;zh-CN&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;project_ids&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;source_kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;inferred&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.78&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;strength&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.82&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;observed_at&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-10-31T09:00:00Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;valid_from&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-04-01T00:00:00Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;valid_to&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;supporting_evidence&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;event-101&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;event-126&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;refuting_evidence&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;event-144&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;active&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;revision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Resolver 的判断不能只返回一个分数，还应该返回一个带理由的决策：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-000184&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;decision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;apply&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;applicability&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.91&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;reason_codes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;TASK_MATCH&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;TEXT_TYPE_MATCH&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;TEMPORALLY_VALID&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;EVIDENCE_SUFFICIENT&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;snapshot_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;snapshot-20261031-001&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;被拒绝的偏好也应该有记录，例如 SCOPE_MISMATCH、STALE_CLAIM、LOW_CONFIDENCE、CONFLICTING_EXPLICIT_OVERRIDE 或 NO_PERSONALIZATION_NEEDED。这让错误应用率和过度个性化可以被真实测量。&lt;/p&gt;
&lt;h3&gt;34.5 把用户反馈闭环设计成“行动前—行动中—行动后”&lt;/h3&gt;
&lt;p&gt;结合 PAHF、Persona2Web 和 Agentforce 的实践，一次完整的个性化交互应包含：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Before Action&lt;/strong&gt;：从当前任务识别缺少的信息，检索相关偏好；必要时提出一个高信息量、低打扰的澄清问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;During Action&lt;/strong&gt;：把冻结的 Preference Snapshot 注入工作流；不同 Agent 阶段使用同一版本；保存实际采用和排除的偏好。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;After Action&lt;/strong&gt;：把用户评分、比较、修改、拒绝和结果纳入 Event Store；提出 Claim 更新；验证后再发布新版本。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这也说明，Preference Resolver 应成为 Agent 工作流的一部分，而不只是一个独立的检索 API。生成、规划、工具选择、推荐和任务执行都可能需要使用用户偏好。&lt;/p&gt;
&lt;h3&gt;34.6 参考 DoorDash，把生成和消费解耦&lt;/h3&gt;
&lt;p&gt;用户模型的生成与应用不必同步发生。可以把原始事件和偏好更新放在写入/后台整理流程中；任务执行侧读取稳定、已经验证的 Claim 和 Snapshot。这样可以避免每次回答都重新跑一遍偏好抽取，也可以控制延迟。&lt;/p&gt;
&lt;p&gt;推荐分层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System of Record&lt;/strong&gt;：PostgreSQL 保存 Event、Evidence、Claim、Claim Revision、Snapshot 和决策日志；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consolidation Pipeline&lt;/strong&gt;：LangMem 或自定义 LLM 工作流提出候选 Claim 更新；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation Gate&lt;/strong&gt;：规则和/或独立模型检查证据、scope、冲突和版本变化；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime Resolver&lt;/strong&gt;：LangGraph 编排任务解析、记忆召回、适用性决策和 Snapshot 编译；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retrieval Indexes&lt;/strong&gt;：FTS、pgvector、图索引是可重建的派生索引，不是权威事实；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Clients&lt;/strong&gt;：翻译工具、Claude Code、企业助手等通过统一 API / MCP 读取 Snapshot 并回传反馈。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;35. 谁来判断用户偏好？规则、Classic ML、Transformer 与 LLM 的职责边界&lt;/h2&gt;
&lt;p&gt;前面提出的 Preference Resolver 需要真正的判断能力。问题不是简单地在规则引擎、机器学习模型、Transformer 和 Jev/LLM 之间选择一个，而是要拆开判断任务：不同阶段面对的是不同类型的问题，应该采用不同方法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;推荐原则：规则负责约束，Classic ML 负责从反馈中估计偏好，Jev/LLM 负责理解语义和上下文，Preference Resolver 负责最终决策，用户反馈负责校正。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;35.1 先区分四类判断&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;判断任务&lt;/th&gt;&lt;th&gt;示例&lt;/th&gt;&lt;th&gt;最适合的技术&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;明确约束判断&lt;/td&gt;&lt;td&gt;用户明确说“所有小说翻译都不要擅自解释潜台词”；当前项目要求保留人称和敬语&lt;/td&gt;&lt;td&gt;规则 / Policy Engine&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;偏好强度估计&lt;/td&gt;&lt;td&gt;用户在相同场景下更偏好自然语序还是保留原文句法？&lt;/td&gt;&lt;td&gt;Classic ML / Bayesian Preference Model&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;语义和上下文理解&lt;/td&gt;&lt;td&gt;“这个翻译太聪明了，失去了原文的笨拙感”究竟在批评什么？当前段落属于什么叙事场景？&lt;/td&gt;&lt;td&gt;Jev / 通用 LLM&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;当前任务适用性决策&lt;/td&gt;&lt;td&gt;用户通常喜欢简洁，但当前任务是意识流长句；某项偏好是否应该使用？&lt;/td&gt;&lt;td&gt;Resolver：规则 + 统计估计 + LLM 解释性判断&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这四类任务不能混成一个模型调用。尤其要区分“偏好是什么”和“当前任务是否应该采用它”：前者是长期建模问题，后者是带当前上下文的运行时决策。&lt;/p&gt;
&lt;h3&gt;35.2 规则引擎：必须存在，但只负责可以明确表达的边界&lt;/h3&gt;
&lt;p&gt;规则适合判断明确、可验证、不可含糊的条件：用户明确声明的硬约束；项目级规则和当前请求的临时覆盖；语言方向、作品、章节、人物、文体等 scope；valid_from / valid_to 时间有效性；权限、隐私和数据使用限制；语义正确性、专名一致性等不能被审美偏好覆盖的约束。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;rule_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;rule-translation-012&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;condition&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;task&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;literary_translation&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;project_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;novel-001&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;effect&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;translation.explanation&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;policy&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;do_not_add_unstated_psychological_explanation&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;source&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;explicit_user_instruction&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;priority&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;project_override&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;valid_from&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-10-31T00:00:00Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;valid_to&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;规则的优点是可解释、可测试、确定性高。缺点也很明显：人类通常不会把自己的审美完整描述成几百条规则。用户可能只说“这个翻译太聪明了”，系统需要理解背后的原因。规则引擎不能自己完成这件事。&lt;/p&gt;
&lt;p&gt;因此不要用“规则越多越懂用户”作为目标。规则应该保存明确的结论和边界，隐含偏好应该保留为带证据和置信度的假设。&lt;/p&gt;
&lt;h3&gt;35.3 Classic ML：真正学习个人偏好强度的首选&lt;/h3&gt;
&lt;p&gt;对于个人偏好，最值得优先实现的是层次化的统计偏好模型，而不是单独训练一个用户 Transformer。&lt;/p&gt;
&lt;p&gt;假设同一段原文有两个译文，系统能够提取以下特征：&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;特征维度&lt;/th&gt;&lt;th&gt;译文 A&lt;/th&gt;&lt;th&gt;译文 B&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;原文结构保留程度&lt;/td&gt;&lt;td&gt;0.95&lt;/td&gt;&lt;td&gt;0.65&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中文自然度&lt;/td&gt;&lt;td&gt;0.60&lt;/td&gt;&lt;td&gt;0.90&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;句子节奏&lt;/td&gt;&lt;td&gt;0.55&lt;/td&gt;&lt;td&gt;0.85&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;情绪解释程度&lt;/td&gt;&lt;td&gt;0.20&lt;/td&gt;&lt;td&gt;0.30&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;修辞强度&lt;/td&gt;&lt;td&gt;0.35&lt;/td&gt;&lt;td&gt;0.40&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人物声音保留&lt;/td&gt;&lt;td&gt;0.90&lt;/td&gt;&lt;td&gt;0.85&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这些分值只是特征估计，不是客观文学质量。特征可以由 LLM、专门评估器或人工标注产生，必须通过样本校准，不能让生成模型自行给出的分值冒充真值。&lt;/p&gt;
&lt;p&gt;令两个候选的特征差为：&lt;/p&gt;
&lt;p&gt;[
\Delta \phi = \phi(y_A,x)-\phi(y_B,x)
]&lt;/p&gt;
&lt;p&gt;可以使用 Bradley–Terry / Logistic Preference Model：&lt;/p&gt;
&lt;h1&gt;[
P_u(A \succ B \mid x,c)&lt;/h1&gt;
&lt;p&gt;\sigma\left(w_{u,c}^{T}\Delta\phi\right)
]&lt;/p&gt;
&lt;p&gt;其中，x 是原文及其局部上下文；c 是当前任务条件，如文体、文本类型、语言方向、作品和人物；候选特征表示译文相对于原文的表达特征；w 是用户在当前上下文下对各维度的偏好权重；输出是在当前条件下用户更可能选择哪个候选。&lt;/p&gt;
&lt;p&gt;单一用户数据通常比较稀疏，所以不建议为每个用户独立训练一套权重。更稳妥的做法是采用层次模型：&lt;/p&gt;
&lt;h1&gt;[
w_{u,c}&lt;/h1&gt;
&lt;p&gt;w_{\mathrm{population}}
+
\delta_u
+
Bz_c
+
\eta_{u,c}
]&lt;/p&gt;
&lt;p&gt;其中，群体基础偏好提供先验，用户修正项表示个人差异，上下文表示提供场景相关的系统性调整，最后一项表示特定用户在特定场景下的额外偏差。&lt;/p&gt;
&lt;p&gt;对用户和上下文修正项使用正则化或 Bayesian Prior，使数据较少时自动向群体先验收缩；用户反馈逐渐增加、场景覆盖更充分后，个性化程度再逐渐提高。这解决了个人偏好学习的冷启动和过拟合问题。&lt;/p&gt;
&lt;h4&gt;为什么优先考虑 Bradley–Terry / Bayesian，而不是训练大模型？&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;A/B 比较本身就是偏好学习的自然数据形式，不需要把用户每次反馈都转换成复杂的训练标签。&lt;/li&gt;
&lt;li&gt;模型参数对应具体偏好维度，能分析用户究竟偏向自然度、忠实度、节奏还是修辞。&lt;/li&gt;
&lt;li&gt;Bayesian 模型可以输出不确定性，而不只是一个固定分数。&lt;/li&gt;
&lt;li&gt;新反馈可以在线更新，不必重新训练语言模型。&lt;/li&gt;
&lt;li&gt;可以先使用跨用户或公开数据建立群体先验，再用少量个人反馈做适配。&lt;/li&gt;
&lt;li&gt;可以显式加入语言方向、文体和文本类型，而不是让一个全局向量隐式承担全部差异。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;NeurIPS 2025 的 &lt;strong&gt;Capturing Individual Human Preferences with Reward Features&lt;/strong&gt; 是这条路线的重要研究。它提出先学习通用 Reward Features，再让不同用户通过这些特征的不同组合形成个人奖励函数；论文也从理论上讨论了反馈样本数量、评价者数量和用户偏好异质性对个性化学习的影响。&lt;a href=&quot;https://proceedings.neurips.cc/paper_files/paper/2025/hash/761bc7f095f927e5a5de31ed4154bb45-Abstract-Conference.html&quot;&gt;NeurIPS 2025 论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ICML 2026 的 &lt;strong&gt;What Does Preference Learning Recover from Pairwise Comparison Data?&lt;/strong&gt; 专门分析 Bradley–Terry 模型何时能从成对比较中恢复真实偏好，以及样本效率与偏好差距（margin）和比较图连通性（connectivity）的关系。它提醒我们：不是收集了一批 A/B 选择就能可靠推断全部偏好；如果样本只覆盖少数相似风格，模型无法知道用户对未比较维度的真实取舍。&lt;a href=&quot;https://proceedings.mlr.press/v306/pukdee26a.html&quot;&gt;ICML 2026 论文&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;推荐的训练方式&lt;/h4&gt;
&lt;p&gt;先使用通用文本评估能力抽取候选特征，再只训练轻量的用户偏好层：冻结语言模型或特征提取器；使用结构化特征计算候选差异；使用 Bayesian Logistic Regression、层次 Logistic Regression 或 Bradley–Terry 学习权重；按用户和上下文维护后验分布；对高置信、低置信、冲突样本分别处理；只在证明简单模型存在稳定误差模式后，再增加非线性模型。&lt;/p&gt;
&lt;p&gt;不要把用户的一次 8 分、一次 6 分直接作为某个风格权重。绝对评分、成对选择、局部批注和用户重写是不同类型的数据，应采用不同的观测模型。&lt;/p&gt;
&lt;h3&gt;35.4 Jev / LLM：语义理解器与分析员，不是用户偏好的权威裁判&lt;/h3&gt;
&lt;p&gt;假设用户反馈：“这个翻译太聪明了，反而没有原文那种笨拙、迟疑的感觉。”&lt;/p&gt;
&lt;p&gt;LLM 可以把它分析成多个候选解释：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;feedback_type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;negative&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;candidate_evidence&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;style.polish&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;effect&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;too_much&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.93&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;narration.voice&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;effect&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;source_voice_not_preserved&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.89&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;narration.subtlety&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;effect&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;lost_deliberate_awkwardness&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.96&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;scope_candidate&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;current_text_type&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;requires_confirmation&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这些是待验证的 Preference Evidence，不是让模型立即修改长期 Profile 的命令。&lt;/p&gt;
&lt;p&gt;Jev / LLM 最适合承担反馈语义解析、当前任务和文本上下文识别、候选特征提取、复杂冲突分析、证据解释，以及在无法可靠推断时生成低打扰的澄清问题。&lt;/p&gt;
&lt;p&gt;但 LLM 的推断不能自动变成事实。它输出的维度标签、scope 和置信度都应经过验证；尤其不能让同一个模型既生成译文、又给自己的译文打分、再据此修改长期用户偏好。&lt;/p&gt;
&lt;h4&gt;LLM-as-a-Personalized-Judge 的风险&lt;/h4&gt;
&lt;p&gt;EMNLP 2024 的 &lt;strong&gt;Can LLM be a Personalized Judge?&lt;/strong&gt; 专门研究模型根据 Persona 预测真实用户的二选一偏好。论文报告，普通 LLM 个性化判断与真实用户选择的一致性并不理想，二元选择的总体准确率约 70%，部分任务低于 60%；引入 verbalized uncertainty 后，高置信度样本的一致率可以超过 80%。&lt;/p&gt;
&lt;p&gt;这意味着 LLM 可以作为高效的偏好判断代理，但不应该被当作真实用户的替代品。尤其是当 Persona 只有几条概括性偏好时，模型可能把人口特征、兴趣标签或一般审美常识过度解释为具体选择。&lt;a href=&quot;https://aclanthology.org/2024.findings-emnlp.592/&quot;&gt;EMNLP 2024 论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;推荐 LLM 输出以下决策契约：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;decision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;apply&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;confidence&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.87&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;reason&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;当前是心理描写，与偏好适用范围一致&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;supporting_evidence&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;pref-001&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;pref-017&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;counter_evidence&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;pref-026&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;requires_user_feedback&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不确定时必须允许：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;decision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;abstain&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;reason&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;insufficient_evidence&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;next_action&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;ask_pairwise_preference&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的 confidence 不能直接视为校准概率。需要在真实用户数据上评估其可靠性，例如检查置信度 0.8 的判断是否确实大约有 80% 的用户选择一致率。&lt;/p&gt;
&lt;h3&gt;35.5 Transformer / Fine-tuning：等轻量模型证明不足后再考虑&lt;/h3&gt;
&lt;p&gt;Transformer 适合处理复杂文本表征和跨样例的语义泛化，但应区分两个目标：反馈理解，即理解用户自然语言中的隐含评价；偏好预测，即给定当前文本条件和两个候选，预测用户更可能选择哪个。第一个任务适合通用 LLM；第二个任务未必需要 Transformer，结构化特征 + 统计偏好模型可能更稳定、更便宜、更可解释。&lt;/p&gt;
&lt;p&gt;只有在积累大量高质量、经过用户确认的偏好样例，覆盖足够多的作品、语言、文体和偏好冲突，建立稳定的 Event / Evidence / Claim / Snapshot 数据模型，并证明轻量偏好模型在独立测试集上存在持续瓶颈之后，才考虑个性化 Transformer / Adapter / LoRA。&lt;/p&gt;
&lt;p&gt;即使进入这一阶段，也优先考虑冻结基础语言模型，只训练 Preference Head、Adapter 或 LoRA，而不是从零训练一个只属于单个用户的 Transformer。&lt;/p&gt;
&lt;p&gt;压缩用户向量、User Prefix 或 Personal Adapter 可以作为运行时优化，但它们不能取代可读的偏好主张和原始证据。&lt;/p&gt;
&lt;h2&gt;36. 主动偏好学习：不要等待用户自然产生足够多的数据&lt;/h2&gt;
&lt;p&gt;对个人用户来说，反馈数据天然稀疏。用户不会愿意每段翻译都填一张评分表。因此，系统需要决定什么时候值得问用户一个问题。&lt;/p&gt;
&lt;p&gt;这就是 Active Preference Learning：不是尽可能多地收集反馈，而是选择最能减少模型不确定性、同时对当前任务最有帮助的反馈。&lt;/p&gt;
&lt;h3&gt;36.1 什么情况下值得主动询问？&lt;/h3&gt;
&lt;p&gt;建议只有同时满足以下条件时才发起偏好询问：两个候选的个人偏好预测非常接近；当前偏好维度对输出结果有明显影响；当前任务与历史样本存在新的上下文差异；这次选择能够帮助区分多个竞争的偏好假设；用户回答的成本足够低。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;对这段人物独白，你更倾向于保留原文的长句和迟疑，还是调整为更自然的中文短句？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不要在任务已经非常明确、用户已经给出强约束或这条偏好对结果几乎没有影响时反复询问。&lt;/p&gt;
&lt;h3&gt;36.2 用 Expected Information Gain 选择问题&lt;/h3&gt;
&lt;p&gt;可以定义一个简化的提问价值：&lt;/p&gt;
&lt;h1&gt;[
Utility(q)&lt;/h1&gt;
&lt;p&gt;\frac{
ExpectedInformationGain(q)
\times TaskImpact(q)
}{
UserEffort(q)+InteractionCost(q)
}
]&lt;/p&gt;
&lt;p&gt;ExpectedInformationGain 表示回答后能减少多少偏好模型不确定性；TaskImpact 表示这项偏好会影响多少实际任务结果；UserEffort 和 InteractionCost 分别表示回答难度与打断任务的成本。&lt;/p&gt;
&lt;p&gt;实际系统不必一开始就计算精确的信息增益。可以用 Bayesian Active Learning、模型不确定性、当前任务影响和用户打扰成本做近似排序。&lt;/p&gt;
&lt;h3&gt;36.3 相关研究&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;MAPLE（AAAI 2025）&lt;/strong&gt; 是 LLM-guided Bayesian Active Preference Learning 框架。它把自然语言反馈和成对排序结合起来，学习偏好函数的分布，并主动挑选信息量较高、用户容易回答的问题，减少人工反馈负担。&lt;a href=&quot;https://ojs.aaai.org/index.php/AAAI/article/view/34964&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T-POP（ICML 2026）&lt;/strong&gt; 研究 Test-Time Personalization with Online Preference Feedback。它在不更新基础 LLM 参数的情况下，在线学习个人 reward function，并通过 Dueling Bandits 平衡探索新偏好和利用现有偏好，逐步调整生成过程。&lt;a href=&quot;https://proceedings.mlr.press/v306/qu26i.html&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Online LLM Personalization from Pairwise Preferences Across Users（2026 年 10 月预印本）&lt;/strong&gt; 将新用户的会话内偏好学习建模为 contextual dueling bandit，并通过多个用户之间的经验共享建立先验。论文在模拟学生偏好数据上报告，相较随机配对，能消除 44%—48% 的额外遗憾；但其核心偏好标签来自 LLM 模拟学生，不应被当成真实用户生产实验。&lt;a href=&quot;https://arxiv.org/abs/2610.17203&quot;&gt;预印本&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;36.4 对文学翻译的具体交互&lt;/h3&gt;
&lt;p&gt;不要让用户填写二十个偏好维度。系统可以根据当前不确定性生成两个有明确差异的版本：A 保留原文的句法、重复和停顿；B 调整为更自然的中文表达，但尽量保留人物迟疑。用户只需选择 A、B、两者都不好或两者差不多，并可选填一句理由。&lt;/p&gt;
&lt;p&gt;系统接收反馈后，保存原始 Pairwise Event；Jev 分析差异和可能涉及的偏好维度；统计偏好模型更新对应的用户权重；如果证据支持范围变化，提出新的 Preference Claim；Validation Gate 决定是否更新长期模型；最后记录该反馈对后续任务的预测收益。&lt;/p&gt;
&lt;p&gt;这样，用户的每次选择既是一次真实任务反馈，也是一次有针对性的偏好学习样本。&lt;/p&gt;
&lt;h2&gt;37. 组合判断架构：Jev 理解，Classic ML 学习，规则约束，Resolver 决策&lt;/h2&gt;
&lt;p&gt;最终建议采用如下分工，而不是让一个 Agent 一条条读取所有历史规则后自行决定。&lt;/p&gt;
&lt;pre&gt;flowchart TB
    A[&quot;用户反馈&amp;lt;br/&amp;gt;评分 / A-B 选择 / 修改 / 自然语言理由&quot;] --&amp;gt; B[&quot;Jev / LLM&amp;lt;br/&amp;gt;语义解析和证据分类&quot;]
    B --&amp;gt; C[&quot;Preference Evidence&amp;lt;br/&amp;gt;保留原始事件和来源&quot;]
    C --&amp;gt; D[&quot;Classic ML&amp;lt;br/&amp;gt;Bayesian / Bradley-Terry&quot;]
    D --&amp;gt; E[&quot;Versioned User Model&amp;lt;br/&amp;gt;长期与上下文偏好&quot;]

    F[&quot;当前任务&quot;] --&amp;gt; G[&quot;Jev / LLM&amp;lt;br/&amp;gt;任务与文本上下文解析&quot;]
    G --&amp;gt; H[&quot;Task Context&quot;]
    E --&amp;gt; I[&quot;候选偏好检索&quot;]
    H --&amp;gt; I
    I --&amp;gt; J[&quot;规则 / Policy Engine&amp;lt;br/&amp;gt;scope / 时间 / 显式约束&quot;]
    J --&amp;gt; K[&quot;Jev / LLM&amp;lt;br/&amp;gt;复杂冲突和语义适用性&quot;]
    D --&amp;gt; K
    K --&amp;gt; L[&quot;Preference Resolver&quot;]
    L --&amp;gt; M{&quot;适用性 / 置信度&quot;}
    M --&amp;gt;|&quot;充分&quot;| N[&quot;应用 Preference Snapshot&quot;]
    M --&amp;gt;|&quot;不足&quot;| O[&quot;不应用 / Active Query&quot;]
    N --&amp;gt; P[&quot;生成 / 校对 / 任务执行&quot;]
    O --&amp;gt; Q[&quot;用户澄清或继续使用通用默认&quot;]
    P --&amp;gt; R[&quot;结果反馈&quot;]
    Q --&amp;gt; R
    R --&amp;gt; C&lt;/pre&gt;
&lt;h3&gt;37.1 每个组件的责任边界&lt;/h3&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;组件&lt;/th&gt;&lt;th&gt;应该做什么&lt;/th&gt;&lt;th&gt;不应该做什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Jev / LLM&lt;/td&gt;&lt;td&gt;理解反馈、识别任务、提取维度、分析冲突&lt;/td&gt;&lt;td&gt;直接修改权威偏好状态；对所有样本都强行给出确定结论&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Classic ML&lt;/td&gt;&lt;td&gt;学习相对偏好、估计概率、计算不确定性&lt;/td&gt;&lt;td&gt;自行理解未经结构化的复杂自然语言&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rule Engine&lt;/td&gt;&lt;td&gt;验证明确指令、scope、时间、优先级和硬约束&lt;/td&gt;&lt;td&gt;通过大量手工规则模拟人的完整审美&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Store&lt;/td&gt;&lt;td&gt;保存事件、证据、Claim、版本和快照&lt;/td&gt;&lt;td&gt;将所有历史压成一个不可解释的 Profile&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Resolver&lt;/td&gt;&lt;td&gt;汇总证据、应用策略、决定使用或弃权&lt;/td&gt;&lt;td&gt;仅按向量相似度或单一置信度决定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active Learning&lt;/td&gt;&lt;td&gt;在有价值的不确定场景向用户提问&lt;/td&gt;&lt;td&gt;频繁打断用户或重复询问已经明确的偏好&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Evaluation&lt;/td&gt;&lt;td&gt;用真实选择和历史回归数据检验判断质量&lt;/td&gt;&lt;td&gt;只用同一个 LLM 自评自己的结果&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;37.2 Preference Resolver 应返回决策，而不是只返回检索结果&lt;/h3&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;task_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;translation-task-042&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;user_model_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;42&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;snapshot_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;snapshot-20261031-042&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;applied&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-001&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;narration.subtlety&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;decision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;apply&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;reason_codes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;TASK_MATCH&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;TEXT_TYPE_MATCH&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;TEMPORALLY_VALID&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;EVIDENCE_SUFFICIENT&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;estimated_preference_probability&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.87&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;excluded&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pref-017&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;decision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;exclude&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;reason_codes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;SCOPE_MISMATCH&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;CURRENT_TEXT_IS_FORMAL_DIALOGUE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      ]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;uncertain&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;dimension&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;sentence.rhythm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;decision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;abstain&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;reason&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;INSUFFICIENT_COMPARATIVE_EVIDENCE&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;next_action&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;ASK_PAIRWISE_PREFERENCE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里必须区分三个不同的量：estimated_preference_probability 是统计模型预测用户更可能选择某种表达的概率；applicability 是该偏好对当前任务是否适用；confidence 是系统对上述判断本身有多确定。它们不能合并成一个分数。一个偏好可能非常稳定，但当前任务不适用；也可能适用范围正确，但证据不足。&lt;/p&gt;
&lt;h3&gt;37.3 一个简化的判断流程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; resolve_preferences&lt;/span&gt;&lt;span&gt;(task, user_model, evidence_index, preference_model, policy):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # Parse task context before retrieving user preferences.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    task_context &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; parse_task_context(task)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # Retrieve candidate claims and positive/negative evidence.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    candidates &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; retrieve_candidates(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        task_context&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;task_context,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        claims&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;user_model.active_claims,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        evidence_index&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;evidence_index,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    applied, excluded, uncertain &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [], [], []&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; claim &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; candidates:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # Deterministic checks: scope, validity, explicit overrides, hard constraints.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        rule_result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; policy.check(claim, task_context)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; rule_result.decision &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &quot;exclude&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            excluded.append({&lt;/span&gt;&lt;span&gt;&quot;claim_id&quot;&lt;/span&gt;&lt;span&gt;: claim.id, &lt;/span&gt;&lt;span&gt;&quot;reason&quot;&lt;/span&gt;&lt;span&gt;: rule_result.reason})&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            continue&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # Estimate preference strength under this task context.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        preference_estimate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; preference_model.predict(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            claim&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;claim,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            context&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;task_context,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # Use an LLM for semantic ambiguity, not for every easy decision.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        semantic_result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; rule_result.is_ambiguous &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; preference_estimate.is_uncertain:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            semantic_result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; llm_resolve_applicability(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                claim&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;claim,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                task_context&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;task_context,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                supporting_evidence&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;claim.supporting_evidence,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                refuting_evidence&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;claim.refuting_evidence,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            )&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # Combine signals through explicit policy, never an arbitrary score average.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        decision &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; combine_signals(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            rule_result&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;rule_result,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            preference_estimate&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;preference_estimate,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            semantic_result&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;semantic_result,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; decision &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &quot;apply&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            applied.append(build_snapshot_item(claim, decision))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        elif&lt;/span&gt;&lt;span&gt; decision &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &quot;abstain&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            uncertain.append(build_uncertainty_item(claim, decision))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            excluded.append(build_exclusion_item(claim, decision))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; compile_snapshot(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        task_context&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;task_context,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        applied&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;applied,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        excluded&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;excluded,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        uncertain&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;uncertain,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        user_model_version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;user_model.version,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    )&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;combine_signals 应使用显式策略，而不是随意把规则、LLM 和 ML 分数做平均。硬规则可以直接否决；统计模型负责估计偏好；LLM 负责解释语义冲突；最终决策应记录来源、理由和版本。&lt;/p&gt;
&lt;h2&gt;38. 实际实施：先统计模型，再考虑个人 Transformer&lt;/h2&gt;
&lt;p&gt;本章对应的可运行分阶段实现已放在仓库 &lt;a href=&quot;https://github.com/saga/devweekly/tree/main/temp/personal-preference-model&quot;&gt;temp/personal-preference-model&lt;/a&gt;，包含 SQLite 事件/证据/Claim 存储、Jev/LLM JSON 适配器、Evidence Promotion Gate、层次 Bradley–Terry 学习、模型保存/加载、留出集评估、带用户隔离检查的 Resolver、主动询问和 14 个 unittest 用例。代码以 Python 标准库为核心，便于逐阶段运行和替换模型提供方；当前示例用合成数据演示，不应视为真实用户测试结果。&lt;/p&gt;
&lt;p&gt;建议采用渐进式路线：&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;阶段&lt;/th&gt;&lt;th&gt;实现&lt;/th&gt;&lt;th&gt;验收目标&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1. 结构化证据&lt;/td&gt;&lt;td&gt;Event Store、Evidence、Preference Claim、scope 和版本&lt;/td&gt;&lt;td&gt;能追溯每条偏好来自哪些反馈&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2. 语义解析&lt;/td&gt;&lt;td&gt;Jev 提取反馈维度、上下文、正反证据和候选范围&lt;/td&gt;&lt;td&gt;用户自然语言反馈能够稳定转换为结构化证据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3. 规则 Resolver&lt;/td&gt;&lt;td&gt;明确约束、项目覆盖、有效时间、冲突和弃权&lt;/td&gt;&lt;td&gt;不会把项目级或过时偏好无条件用于所有任务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4. Classic ML&lt;/td&gt;&lt;td&gt;层次 Bayesian Logistic / Bradley–Terry&lt;/td&gt;&lt;td&gt;在固定测试集上预测 A/B 选择，并提供不确定性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5. Active Learning&lt;/td&gt;&lt;td&gt;基于不确定性和任务影响选择提问&lt;/td&gt;&lt;td&gt;减少用户反馈成本，提高个人偏好估计质量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6. 非线性模型&lt;/td&gt;&lt;td&gt;Preference Head、Adapter 或 LoRA&lt;/td&gt;&lt;td&gt;证明线性/层次模型存在系统性误差后才引入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7. 个性化 Transformer&lt;/td&gt;&lt;td&gt;在大规模、高质量、场景多样的数据上训练&lt;/td&gt;&lt;td&gt;相较统计模型和 LLM 基线，在跨作品/跨场景测试中有显著收益&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;38.1 必须建立的基线&lt;/h3&gt;
&lt;p&gt;任何更复杂的模型都必须与以下基线比较：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generic LLM：不使用用户历史。&lt;/li&gt;
&lt;li&gt;Rule-only：只使用用户明确规则和项目约束。&lt;/li&gt;
&lt;li&gt;LLM + Profile：把用户偏好摘要加入 Prompt。&lt;/li&gt;
&lt;li&gt;LLM + Retrieved Examples：加入相关正反例。&lt;/li&gt;
&lt;li&gt;Classic ML：结构化特征 + 用户偏好权重。&lt;/li&gt;
&lt;li&gt;Hybrid：规则 + Classic ML + LLM Resolver。&lt;/li&gt;
&lt;li&gt;Fine-tuned Model：只有具备足够数据时才加入。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果 Hybrid 并没有比 LLM + Profile 稳定提升，就没有理由引入更多模型和服务。&lt;/p&gt;
&lt;h3&gt;38.2 评估的不只是预测准确率&lt;/h3&gt;
&lt;p&gt;需要分别测量 Pairwise Preference Accuracy、Calibration、Applicability Accuracy、False Personalization Rate、Abstention Quality、Preference Update Quality、Cross-Project Generalization，以及达到同样偏好质量所需的用户反馈次数和交互负担。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码范围说明：&lt;/strong&gt; &lt;code&gt;temp/personal-preference-model/&lt;/code&gt; 已提供第 1—5 阶段的可运行参考实现，包括证据存储、Jev/LLM 结构化提取、门控、层次 Bradley–Terry、权重持久化、留出集评估、Resolver 和阈值式主动询问。第 6 阶段的 Preference Head / Adapter / LoRA 暂时只定义进入条件，没有用合成数据伪造一个训练脚本。真正的微调需要足够的真实用户样本、跨作品/时间隔离的验证集，以及对生成输出的独立 A/B 评估。&lt;/p&gt;
&lt;h3&gt;38.3 最终技术选择&lt;/h3&gt;
&lt;p&gt;针对个人阅读和文学翻译偏好，当前最合理的技术路径不是先训练一个只属于自己的 Transformer，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jev / LLM 理解用户反馈、任务语义和复杂上下文；&lt;/li&gt;
&lt;li&gt;Classic ML 学习不同偏好维度的权重、条件差异和不确定性；&lt;/li&gt;
&lt;li&gt;规则引擎保护明确约束、范围、时间和优先级；&lt;/li&gt;
&lt;li&gt;Preference Resolver 决定当前任务应用、排除还是弃权；&lt;/li&gt;
&lt;li&gt;Active Preference Learning 在真正需要时向用户提出 A/B 问题；&lt;/li&gt;
&lt;li&gt;用户实际选择和修改持续校正 User Model。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;训练 Transformer 是优化选项，不是 User Model 成立的前提。&lt;/strong&gt; 如果统计模型已经能稳定预测用户在不同场景下的选择，就没有必要为了“使用 AI”而增加一个更难解释、更难维护的模型。&lt;/p&gt;
&lt;p&gt;最终应追求的是：系统能对每一次偏好判断说明依据，并且在它不确定时知道自己不确定。&lt;/p&gt;
&lt;h2&gt;39. PrefEval 之后：2026 年研究把“偏好遵循”拆成了哪些新问题？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Do LLMs Recognize Your Preferences?（PrefEval，ICLR 2025）仍然是重要基线，但截至 2026 年 10 月，没有找到一个官方发布、直接把它升级为 PrefEval v2 的版本。&lt;/strong&gt; 更准确的描述是：2026 年的研究沿着 PrefEval 暴露的问题，分别建立了更长周期、更隐式、更强调上下文选择和更关注负面副作用的评测。&lt;/p&gt;
&lt;p&gt;PrefEval 原始版本包含 3,000 个经过人工整理的偏好与查询组合，覆盖 20 个主题，既有显式偏好，也有隐式偏好；评估任务包括生成和分类。论文测试了最长 100K token 的多会话上下文，并发现多数被测模型在零样本情形下，约 10 轮、3K token 后的偏好遵循准确率就会降到 10% 以下。这个数字是论文特定数据集与实验配置中的结果，不应泛化为所有模型、所有产品的固定能力值。&lt;a href=&quot;https://proceedings.iclr.cc/paper_files/paper/2025/hash/28a46044775d97a4efcbcf14e7f13209-Abstract-Conference.html&quot;&gt;PrefEval / ICLR 2025&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;39.1 2026 年的新评测分别补足了什么？&lt;/h3&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;研究&lt;/th&gt;&lt;th&gt;新增评测重点&lt;/th&gt;&lt;th&gt;主要发现&lt;/th&gt;&lt;th&gt;相比 PrefEval 的推进&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;RealPref&lt;/strong&gt;（Findings of EMNLP 2026）&lt;/td&gt;&lt;td&gt;长期交互中自然表达的偏好，包括显式声明、间接表达和隐式偏好&lt;/td&gt;&lt;td&gt;100 个合成用户画像、1,300 条个性化偏好、四类表达方式；上下文越长、偏好越隐含，模型表现越差；对未见场景的迁移也困难&lt;/td&gt;&lt;td&gt;从“记住一条偏好”扩展到长期交互中理解不同表达形式的偏好。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2378/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;VIBE-Bench&lt;/strong&gt;（Findings of EMNLP 2026）&lt;/td&gt;&lt;td&gt;Profile 与当前 query 的 Preference 可能不在同一个概念空间&lt;/td&gt;&lt;td&gt;3,504 个 Persona、12,239 段对话，并有人类核验测试集；当前个性化模型常依赖表面语义相似，跨概念推断能力不足&lt;/td&gt;&lt;td&gt;明确测试“用户画像线索是否足以推出当前任务偏好”。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1676/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;BenchPreS&lt;/strong&gt;（EMNLP 2026）&lt;/td&gt;&lt;td&gt;判断历史偏好应该应用还是抑制&lt;/td&gt;&lt;td&gt;使用 Misapplication Rate 与 Appropriate Application Rate 评价；模型即使更愿意遵循偏好，也可能更容易把它用错场景&lt;/td&gt;&lt;td&gt;把“偏好选择性”从偏好记忆和检索中独立出来。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1040/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Evaluating the Hidden Costs of Personalization&lt;/strong&gt;（EMNLP 2026）&lt;/td&gt;&lt;td&gt;个性化引入的副作用&lt;/td&gt;&lt;td&gt;识别无关个性化、偏好收窄和迎合偏差；过度依赖个人上下文可能降低信息多样性和独立判断&lt;/td&gt;&lt;td&gt;不再只问“模型有没有满足用户”，还要问个性化是否损害了信息质量和用户探索空间。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.679/&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Do LLMs Recognize Your Latent Preferences?&lt;/strong&gt;（2025 预印本）&lt;/td&gt;&lt;td&gt;通过对话发现没有直接说出的用户属性与偏好&lt;/td&gt;&lt;td&gt;研究覆盖 20 Questions、个性化问答和个性化摘要；不同任务和上下文下成功率从 32% 到 98% 不等&lt;/td&gt;&lt;td&gt;说明隐含偏好可通过交互推断，但效果高度依赖任务和问题设计。&lt;a href=&quot;https://arxiv.org/abs/2510.17132&quot;&gt;论文&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这些研究把 PrefEval 的问题拆成了几个独立能力：偏好能否被保留、能否从间接行为中推断、能否跨概念泛化、能否判断适用范围，以及是否会因为过度个性化引入副作用。它们不是单纯的模型规模竞赛，也不是 PrefEval 的统一新版本。&lt;/p&gt;
&lt;h3&gt;39.2 2026 年研究给出的重要转变：用户画像不能直接变成任务偏好&lt;/h3&gt;
&lt;p&gt;VIBE-Bench 揭示了一个容易被忽略的问题：用户画像与偏好之间可能存在概念错位。比如，系统知道某人喜欢历史小说，并不能直接推断他喜欢古雅措辞；知道某人经常阅读技术资料，也不能推出他在所有解释任务中都希望看到很高的技术细节。&lt;/p&gt;
&lt;p&gt;这意味着 Preference Resolver 不能只做语义相似检索，然后把 Profile 中的描述拼进 Prompt。它还需要推断当前任务究竟涉及哪个偏好维度，并检查历史证据能否支持这种跨概念迁移。对无法确认的情况，应保持未知或询问，而不是把个人属性当作偏好。&lt;/p&gt;
&lt;p&gt;BenchPreS 又补上了第二道门：即使一条偏好本身没有推断错误，也可能因为当前场景不同而不应该使用。因此，偏好遵循准确率、偏好推断准确率和适用性准确率应分别测量。&lt;/p&gt;
&lt;h3&gt;39.3 评估体系应从 PrefEval 扩展为五个维度&lt;/h3&gt;
&lt;p&gt;建议保留 PrefEval 的 preference following 测试，同时增加：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;测试问题&lt;/th&gt;&lt;th&gt;代表研究&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Preference Retention&lt;/td&gt;&lt;td&gt;长对话后能否保留明确偏好？&lt;/td&gt;&lt;td&gt;PrefEval&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Latent Preference Inference&lt;/td&gt;&lt;td&gt;能否从间接表达和行为示例推断偏好？&lt;/td&gt;&lt;td&gt;RealPref、Latent Preferences&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cross-Concept Generalization&lt;/td&gt;&lt;td&gt;能否从用户画像线索推断当前任务偏好？&lt;/td&gt;&lt;td&gt;VIBE-Bench&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Selectivity&lt;/td&gt;&lt;td&gt;是否知道某个偏好在当前场景不适用？&lt;/td&gt;&lt;td&gt;BenchPreS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Personalization Side Effects&lt;/td&gt;&lt;td&gt;是否造成偏好收窄、无关个性化或过度迎合？&lt;/td&gt;&lt;td&gt;Hidden Costs of Personalization&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;对于文学翻译，还要单独增加跨作品、跨文本类型的测试。通用对话 Benchmark 不能代替读者审美判断。&lt;/p&gt;
&lt;h2&gt;40. “偏好隐含在少量示例里”是不是 LLM 特有的反馈模式？&lt;/h2&gt;
&lt;p&gt;不是。&lt;strong&gt;从行为和选择中推断用户偏好，是推荐系统、行为科学、逆向强化学习和偏好学习长期研究的问题；LLM 只是让这种反馈更容易以自然语言、编辑示例和跨任务对话的形式出现。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个区别很重要。不能因为今天使用 LLM 就把“通过示例学习偏好”描述成一种新发明。&lt;/p&gt;
&lt;h3&gt;40.1 传统推荐系统早就在使用隐式反馈&lt;/h3&gt;
&lt;p&gt;在传统推荐系统里，用户并不一定会说“我喜欢某个类别”。系统会从行为中收集信号，例如反复播放、收藏、加入书架、购买、重复访问；点开某个内容后停留较长时间；搜索某类内容但最终没有点击；明确跳过、不感兴趣、取消订阅或排除某项内容；以及在多个候选中选择一个而不是另一个。&lt;/p&gt;
&lt;p&gt;这些行为构成 implicit feedback。它们通常比用户显式评分更丰富，但也更含糊：点击可能只是好奇，购买可能是替别人购买，播放可能来自自动播放，跳过也可能是当时没有时间。&lt;/p&gt;
&lt;p&gt;因此，成熟推荐系统通常不会把单次行为直接解释为稳定偏好，而是结合重复性、行为类型、上下文、时间和其他证据进行加权建模。&lt;/p&gt;
&lt;h3&gt;40.1.1 这种思想在 LLM 之前已经成熟&lt;/h3&gt;
&lt;p&gt;推荐系统很早就在用行为反馈推断偏好。Hu、Koren 和 Volinsky 的 ICDM 2008 论文 &lt;strong&gt;Collaborative Filtering for Implicit Feedback Datasets&lt;/strong&gt; 使用购买历史、观看习惯和浏览活动作为隐式用户偏好信号，并强调这些行为的置信度不同；没有交互记录不等于用户不喜欢，购买也不是绝对的喜欢证据。&lt;a href=&quot;https://doi.org/10.1109/ICDM.2008.22&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;逆向强化学习（Inverse Reinforcement Learning, IRL）则从示范行为中反推可能产生这些行为的效用函数或奖励函数。Ziebart 等人的 &lt;strong&gt;Maximum Entropy Inverse Reinforcement Learning&lt;/strong&gt;（AAAI 2008）用概率方式从路线选择和轨迹中恢复偏好，并明确处理示范行为中的噪声和不确定性。&lt;a href=&quot;https://www.ri.cmu.edu/publications/maximum-entropy-inverse-reinforcement-learning/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这两条传统路线说明，从行为和示例中推断偏好并非 LLM 发明；但它们也揭示同一个统计难题：&lt;strong&gt;观察到行为不代表观察到了偏好的唯一原因。&lt;/strong&gt; 用户购买、点击、播放或选择一个译文，都可能受上下文、任务约束、价格、错误、时间和其他因素影响。模型必须维护置信度与候选解释，而不能把一个行为直接提升为稳定偏好。&lt;/p&gt;
&lt;p&gt;需要避免把这些传统方法与 LLM 的自然语言推断混为一谈：推荐系统常从 user-item 行为预测排序，IRL 常从状态—动作轨迹恢复奖励函数，而文学翻译需要从自然语言理由、编辑差异和跨作品示例推断条件化审美。它们在“从观察推断潜在偏好”这一建模原则上相通，但数据结构、监督信号和任务目标不同。&lt;/p&gt;
&lt;h3&gt;40.2 LLM 带来的变化是：示例可以是语义丰富的自然语言证据&lt;/h3&gt;
&lt;p&gt;传统行为模型通常更容易处理结构化事件，例如点击、购买、播放和评分。文学翻译中的反馈则可能是：用户选择了 B 而没有选择 A；用户将某句重写成另一种表达；用户接受了一个改写却拒绝了另一个改写；用户说“这个译文太聪明，原文的笨拙感消失了”；用户在几个不同作品中反复选择保留留白、迟疑和叙述距离的表达。&lt;/p&gt;
&lt;p&gt;这些信号不仅涉及“喜欢哪个对象”，还涉及用户为何喜欢、讨厌的是哪个语言特征，以及这个判断是否能迁移到另一种文本场景。&lt;/p&gt;
&lt;p&gt;LLM 的价值在于把自然语言理由和文本差异解释成候选偏好维度，并能够从有限示例中提出可供检验的概括。它并没有消除歧义，也不能保证少量示例足以识别真正偏好。&lt;/p&gt;
&lt;h3&gt;40.3 少量示例为什么可能有效，又为什么容易产生错误？&lt;/h3&gt;
&lt;p&gt;示例的价值在于它能绕过抽象描述的困难。用户可能说不清“叙述距离”是什么，却很容易指出 A 比 B 好；可能无法定义“翻译腔”，却能改写一句话，让差异变得可见。&lt;/p&gt;
&lt;p&gt;但一两个例子通常无法唯一确定偏好。用户选择 B，可能是因为自然度更好，也可能是因为 B 没有误译专名。没有对照和理由，模型可能把偶然的文本质量差异错误归纳为稳定审美。&lt;/p&gt;
&lt;p&gt;因此，建议把反馈信号按强弱区分：&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;反馈信号&lt;/th&gt;&lt;th&gt;可推断的内容&lt;/th&gt;&lt;th&gt;主要风险&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;用户明确声明规则&lt;/td&gt;&lt;td&gt;明确表达的偏好或约束&lt;/td&gt;&lt;td&gt;范围可能不清楚，未来可能变化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;同一上下文中的 A/B 选择&lt;/td&gt;&lt;td&gt;对候选差异的相对偏好&lt;/td&gt;&lt;td&gt;两个候选可能同时存在其他质量差异&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;用户自己重写&lt;/td&gt;&lt;td&gt;对具体语言形式的偏好证据&lt;/td&gt;&lt;td&gt;修改可能只是纠错，不一定能泛化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;带理由的批注&lt;/td&gt;&lt;td&gt;更容易识别偏好维度和权衡&lt;/td&gt;&lt;td&gt;理由可能只针对当前段落&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多次跨场景重复选择&lt;/td&gt;&lt;td&gt;可能形成稳定的条件偏好&lt;/td&gt;&lt;td&gt;不同场景不一定同质&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;点击、浏览、停留或未修改&lt;/td&gt;&lt;td&gt;弱行为信号&lt;/td&gt;&lt;td&gt;可能由无关因素造成，不能直接解释为喜欢&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;正确做法不是仅记录“偏好 = B”，而是保存原文、候选差异、上下文、用户选择、理由、是否纠错，以及这个证据适用于什么范围。&lt;/p&gt;
&lt;h3&gt;40.4 近期研究已经把“从示例推断偏好”作为独立研究问题&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Eliciting Human Preferences with Language Models（ICLR 2025）&lt;/strong&gt; 提出 Generative Active Task Elicitation（GATE）。研究指出，用户可能无法准确写出 Prompt 或挑选示例来描述模糊偏好；模型可以通过开放式语言交互，帮助用户逐渐澄清任务目标。研究覆盖内容推荐、道德推理和邮件验证，并发现交互式 elicitation 可以得到比用户自行编写的 Prompt 或示例更有信息量的偏好规格。&lt;a href=&quot;https://mlanthology.org/iclr/2025/li2025iclr-eliciting/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Beyond Expert Users: Agents Should Help Users Construct Preferences, Not Just Elicit Them（2026 预印本）&lt;/strong&gt; 进一步指出，用户有时并没有完整形成自己的偏好，不是“不愿意说”，而是缺乏足够的领域知识。Agent 应通过对比、示例和解释帮助用户形成偏好，而不是不断要求用户回答“你喜欢什么”。其 CoShop 实验中，即使评估五种前沿模型，五轮交互后的准确率也没有超过 56%，说明帮助用户形成偏好本身仍然很难。&lt;a href=&quot;https://arxiv.org/abs/2606.30863&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inferring the Unspoken: Aligning Embodied Agents with Implicit Preferences（EMNLP 2026）&lt;/strong&gt; 研究智能体如何从少量未标注行为示范中推断用户没有说出的约束。论文在 290 项偏好上评估动作参数、放置策略和时间顺序；当偏好规则已经明确提供时，强模型在分类任务上几乎没有错误，但要求模型自行从示范中推断时，性能明显下降；没有示范时准确率进一步下降超过三分之一。这是具身 Agent 研究，不是文学翻译实验，但它证明了“用户通过行为示范表达偏好”并非 LLM 专属现象。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.206/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;40.5 对 LLM 产品的实际意义&lt;/h3&gt;
&lt;p&gt;可以把用户反馈理解为三种不同的数据：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Preference Statement&lt;/strong&gt;：用户主动说出的偏好规则。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preference Demonstration&lt;/strong&gt;：用户通过选择、修改或行为展示出来的偏好。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preference Construction Interaction&lt;/strong&gt;：用户和模型通过对比、解释、澄清共同形成的新偏好。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这三种数据都应该进入 User Model，但不能以相同权重处理。明确声明通常可以快速形成候选约束；A/B 选择和重写需要结合上下文归因；探索性尝试则应暂存在会话或项目层，不应直接改写全局稳定偏好。&lt;/p&gt;
&lt;p&gt;对于个人文学翻译，建议优先积累“同一段原文的 A/B 选择 + 一句理由 + 用户最终修改”的组合，而不是强迫用户先写一套完整的风格规则。&lt;/p&gt;
&lt;h2&gt;41. Preference Profile：稳定偏好是不是一个通用概念？有没有大规模实际应用？&lt;/h2&gt;
&lt;p&gt;有，而且它远早于 LLM。&lt;strong&gt;稳定用户偏好画像（Preference Profile / Taste Profile / User Interest Profile）是推荐系统和数字产品个性化的成熟建模模式。&lt;/strong&gt; 这里的“稳定”是相对于会话级短期意图而言，表示更新速度较慢、跨多次交互仍能复现的倾向；它不表示偏好永久不变，也不意味着每条 Profile 都应长期有效。不同公司未必使用统一的 PreferenceProfile 数据结构或同一个名称，但核心思想相似：从长期行为和明确反馈中形成用户兴趣、习惯和偏好状态，再用它影响排序、推荐或内容选择。&lt;/p&gt;
&lt;p&gt;需要区分两种 Profile：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;内部预测型 Profile&lt;/strong&gt;：通常是特征、Embedding、兴趣类别和权重的组合，主要服务排序模型，用户未必能看懂或修改。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可解释、可治理的 Profile&lt;/strong&gt;：以自然语言或结构化标签呈现，用户能够检查、纠正、删除或临时覆盖。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两者可以共存。可解释 Profile 不必替代高维用户 Embedding；它可以成为用户可理解的权威偏好层，再由系统生成适合不同下游模型的派生表示。&lt;/p&gt;
&lt;h3&gt;41.1 推荐系统中的稳定偏好是成熟实践，不是 LLM 新概念&lt;/h3&gt;
&lt;p&gt;大规模推荐系统通常同时需要长期兴趣和短期意图。长期兴趣帮助系统了解用户持续喜欢什么；短期会话信号帮助系统判断用户现在正在寻找什么。用户可能长期喜欢历史小说，但当前正在寻找一份烹饪食谱。不能让当前搜索改写长期兴趣，也不能让长期画像压制当前意图。&lt;/p&gt;
&lt;p&gt;传统系统常把这两种信息分别编码为长期用户表示和 session representation；LLM 时代则进一步尝试把它们转成可读的自然语言 Profile，使模型、用户和不同应用能够更直接地理解它们。&lt;/p&gt;
&lt;p&gt;Spotify 是一个公开、直接的产品例子。它的 Taste Profile 根据用户的搜索、播放、跳过、收藏等行为形成对个人音乐和内容口味的解释，并影响推荐。产品截至 2026 年 10 月仍标为 Beta；2026 年 9 月官方公告说明首批扩展到美国和新西兰的 18 岁以上 Premium 用户，支持文档将其描述为移动端 Premium 18+ 功能。AI 生成的 Profile 摘要目前提供英语和西班牙语；Taste Profile 只影响 Home 推荐，不替用户执行 Follow，也不支持将自然语言要求当作“始终展示/永不展示”的硬规则。Spotify 还允许用户把单曲或 Playlist 从 Taste Profile 中排除，避免孩子的音乐、助眠音频或一次性播放污染长期推荐。2026 年，Spotify 将 Taste Profile Beta 扩展为用户可查看和修改的画像：用户可以通过自然语言告诉系统想探索的新风格、当前生活状态、希望减少或增加的内容。&lt;a href=&quot;https://www.spotify.com/us/safetyandprivacy/understanding-recommendations&quot;&gt;Spotify：Understanding Recommendations&lt;/a&gt; · &lt;a href=&quot;https://newsroom.spotify.com/2025-10-01/exclude-tracks-taste-profile/&quot;&gt;Exclude from Taste Profile&lt;/a&gt; · &lt;a href=&quot;https://newsroom.spotify.com/2026-09-23/taste-profile-shape-home-feed/&quot;&gt;Taste Profile Beta&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个例子非常接近本文所说的 Preference Profile：长期行为形成基础口味；用户可以直接修正系统推断；一次性行为可以排除；当前探索目标可以影响近期推荐；系统允许兴趣变化，而不是把 Profile 固定成永久标签。&lt;/p&gt;
&lt;p&gt;Spotify 的公开材料没有披露其完整内部 Profile Schema 或所有排序算法，因此可以确认产品行为和用户控制能力，但不能据此推断其内部实现与本文的 Claim/Evidence/Temporal 模型完全相同。&lt;/p&gt;
&lt;h3&gt;41.2 规模化推荐系统正在把长期行为变成可更新的自然语言画像&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;LUPE: Long-History User Profile Evolution for LLM-based Recommendation（Findings of EMNLP 2026）&lt;/strong&gt; 直接研究长历史推荐中的 Profile 演化。传统做法常把全部历史一次性摘要成一个 Profile，可能过度压缩早期偏好，也可能过度强调最近行为。LUPE 按时间顺序分块处理交互，持续维护并更新文本 Profile，并通过下游推荐模型的反馈优化 Profile Evolution Policy。实验覆盖 Yelp、Amazon CDs and Vinyl、Amazon Books，在评分预测和排序任务上优于论文中的强基线；长期且行为异质的用户尤其受益。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.338/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TRACE: A Long-Term Conversational Recommendation Dataset with Evolving User Personas（EMNLP 2026）&lt;/strong&gt; 则把长期行为画像与对话画像结合。其核心结论是，行为 Persona 和对话 Persona 能提供不同信息，且持续更新 Persona 对长期偏好演化有帮助。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1804/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这两项工作说明，Profile 不是一次性总结。它应保留长期积累的偏好，同时吸收新行为、识别兴趣迁移，并允许不同来源的用户画像相互补充，而不是把所有历史压成一段不断覆盖的摘要。&lt;/p&gt;
&lt;h3&gt;41.3 2026 年的研究正在把 Profile 从平台内部向用户可控、可携带的偏好资产推进&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A Survey on Natural Language User Profiles for Recommendation（EMNLP 2026）&lt;/strong&gt; 系统梳理了自然语言用户画像的生成、基于画像的推荐、数据集和评估方法。研究指出，自然语言 Profile 相比不透明 Embedding 的优势是更容易理解和控制；但也存在可解释性与任务优化之间的张力。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.2207/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Amazon Science 的 &lt;strong&gt;Enabling User Agency in Scalable Content Recommendations with Large Language Models（AAMAS 2026）&lt;/strong&gt; 提出由用户侧个人 Agent 构造可解释、可编辑的自然语言偏好画像；每条偏好带有可学习的权重，画像可在用户控制下形成，并用于不同内容提供商的推荐。系统在 MIND 和 Goodreads 数据集上评估，论文报告优于其强基线。这是研究原型和实验结果，不等同于 Amazon 已经在全部商业推荐产品中部署该架构。&lt;a href=&quot;https://www.amazon.science/publications/enabling-user-agency-in-scalable-content-recommendations-with-large-language-models&quot;&gt;Amazon Science&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Microsoft Research 的 &lt;strong&gt;From Hidden Profiles to Governable Personalization（2026）&lt;/strong&gt; 进一步讨论了推荐系统如何从平台控制的隐式用户模型，走向用户可检查、可修订、可携带并且可问责的 Profile。它属于研究观点和设计议程，不是已经全面落地的标准或产品能力。&lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/from-hidden-profiles-to-governable-personalization-recommender-systems-in-the-age-of-llm-agents/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;41.4 稳定价值画像也正在用于主观决策，而不只是内容推荐&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Personalized Alignment of Language Models with Human Value Profiles（EMNLP 2026）&lt;/strong&gt; 研究如何把稳定的人类价值优先级用于主观决策任务。论文采用 Schwartz Value Profiles，在 152 个用户价值画像和 1,501 个价值冲突情景上评估；关键步骤不是把全部个人价值一次性塞进 Prompt，而是先判断当前问题与哪些价值相关，再进行 targeted prompting、activation steering 或 LoRA-DPO。研究发现，针对相关价值维度的个性化比仅暴露完整画像更有效，而且用户之间的效果并不相同。&lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1600/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个方向与文学阅读偏好有相似之处：用户可以长期偏好克制、诚实、含蓄和不迎合，但当前任务只需要其中一部分。稳定 Profile 提供先验，当前任务决定哪些维度应该被调用。&lt;/p&gt;
&lt;h3&gt;41.5 企业和生产系统中的 Profile 实践&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;产品或系统&lt;/th&gt;&lt;th&gt;Profile / Memory 的公开形式&lt;/th&gt;&lt;th&gt;能说明什么&lt;/th&gt;&lt;th&gt;证据边界&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Spotify Taste Profile&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;从长期听歌和互动行为形成可查看、可调整的口味画像；允许排除一次性播放&lt;/td&gt;&lt;td&gt;消费级产品已经把长期偏好、用户纠正和短期行为隔离做成实际功能&lt;/td&gt;&lt;td&gt;Spotify 未公开完整内部画像结构和排序模型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;DoorDash Unified Consumer Memory&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;长期消费倾向、当前 Session Context、用户明确提供的 Explicit Context 分开维护；Memory Block 可版本化并记录 lineage&lt;/td&gt;&lt;td&gt;大规模推荐业务需要分离长期偏好、即时意图和明确约束，并使不同下游模型共享语义用户状态&lt;/td&gt;&lt;td&gt;这是工程团队公开的架构实践，不是通用行业标准&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Netflix GenRec&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;在推荐排序中将用户历史与上下文 verbalize，输入 LLM-backed ranker&lt;/td&gt;&lt;td&gt;自然语言用户历史和上下文可以参与大规模推荐排序，不只是用于聊天记忆&lt;/td&gt;&lt;td&gt;研究披露了生产 A/B 测试和模型设计，但不代表 Netflix 已经用可编辑的自然语言 Profile 替代全部传统推荐系统&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Glean Memory&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Saved Memory 与 Learned Memory；用户级记忆供多个 Agent 通过 MCP 访问&lt;/td&gt;&lt;td&gt;企业可以把个人上下文从单一助手中抽离，形成跨工具共享记忆&lt;/td&gt;&lt;td&gt;Glean 没有公开完整的用户偏好推断算法或可审计 Claim Schema&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Netflix 的 &lt;strong&gt;GenRec: An LLM-Backed Recommendation Ranker at Netflix（2026 预印本）&lt;/strong&gt; 介绍了如何把 verbalized user histories 和上下文用于 LLM 推荐排序，并报告与现有生产排序模型对比的大规模 A/B 结果。它展示了 LLM 参与生产推荐的可能性，但不是一个用户可见、可编辑的 Preference Profile 产品。&lt;a href=&quot;https://arxiv.org/abs/2608.10257&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;41.6 Preference Profile 不是一套固定 Schema，而是一种建模模式&lt;/h3&gt;
&lt;p&gt;目前没有一个跨行业统一的 Preference Profile 标准。不同系统会选择不同表达：推荐平台可能存储用户长期兴趣、品类权重、价格敏感度和内容偏好；流媒体产品可能存储流派、情绪、收听习惯以及用户主动排除项；企业助手可能存储工作角色、沟通风格、项目背景、协作关系；文学翻译工具可能存储语言方向、文本类型、叙述距离、句法节奏和正反例；主观决策助手可能存储稳定价值优先级，而不是单纯的内容兴趣。&lt;/p&gt;
&lt;p&gt;这些模型的共同点是：都试图把历史信号压缩为一组在某类任务中可复用的用户状态。差异在于画像能否解释、是否保留证据、是否区分时间、是否允许用户纠正，以及是否会根据当前任务筛选使用范围。&lt;/p&gt;
&lt;p&gt;所以，本文的 Preference Profile 应视为可审计 User Model 的一个重要视图，而不是一个需要强行对齐到其他厂商的统一 JSON Schema。&lt;/p&gt;
&lt;h2&gt;42. 2026 年 10 月的新研究：个性化已经开始形成“分层用户状态 + 统计先验 + 持续更新”的路线&lt;/h2&gt;
&lt;p&gt;2026 年 10 月的 Findings of EMNLP 又出现了几项与本文架构高度相关的工作。它们不是简单地提出更多 Memory 类型，而是开始回答：怎样将零散行为组织成稳定倾向、怎样在反馈稀疏时学习偏好，以及怎样让轻量统计先验和远程 LLM 协同。&lt;/p&gt;
&lt;h3&gt;42.1 COPE：稀疏用户反馈下的持续个性化&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;COPE: Continual Personalization of LLMs under Sparse User Feedback via User Embeddings and Self-Evaluation&lt;/strong&gt;（Findings of EMNLP 2026）为每个用户维护可学习的个性化 Embedding，把偏好捕获、自我评价校准和个性化响应优化放在同一个更新过程中。它还使用模型自评产生 Proxy Reward，使系统在没有每次都收到明确用户反馈时仍能尝试持续更新。论文报告，在其稀疏反馈实验中，COPE 优于所比较的 training-free 和 training-based baselines，并可与 Retrieval-Augmented Prompting 互补。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.247/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;它说明，当用户偏好样本非常稀疏时，参数化的个人状态也可能提供价值。但应注意两个边界：第一，自评产生的 Proxy Reward 不是用户真实反馈，必须防止模型把自身偏好误当成用户偏好；第二，可学习 Embedding 本身不具备天然可读的证据链。对本文建议的系统而言，COPE 更适合作为后期的个人状态表示或偏好预测优化，而不是取代 Event、Evidence 和 Claim 的权威存储。&lt;/p&gt;
&lt;h3&gt;42.2 PHF：把行为、长期倾向与群体规律分层&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Beyond Isolated Behaviors: Hierarchical User Modeling for LLM Personalization&lt;/strong&gt;（Findings of EMNLP 2026）借鉴 Bourdieu 的实践理论，提出 Practice–Habitus–Field（PHF）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Practice：用户在具体场景中的行为；&lt;/li&gt;
&lt;li&gt;Habitus：行为在时间中累积后形成的相对稳定倾向；&lt;/li&gt;
&lt;li&gt;Field：相似用户或相似社会情境中反复出现的共享规律。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;论文提供了冻结 LLM 的 PHF Compass 实现，并在 LaMP 个性化基准上报告不同任务的改进。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.259/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这与本文的 User Model 有一个重要对应关系：不能直接把单次行为当成稳定偏好。单次选择是 Practice，多次跨场景证据才可能支持 Habitus，而相似用户的群体规律只能作为先验（Field），不能覆盖个人的明确选择。&lt;/p&gt;
&lt;p&gt;对工程实现不必照搬社会学术语或强行引入三个独立数据库。更简单的映射是：Interaction Event → Preference Claim → Population Prior。重点是保留层次关系和从行为形成稳定倾向的证据链。&lt;/p&gt;
&lt;h3&gt;42.3 Statistical Priors for Implicit Preferences：统计学习和语义解析可以解耦&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Statistical Priors for Implicit Preferences: Decoupling Skill Selection as a Local Harness in Personal Agents&lt;/strong&gt;（Findings of EMNLP 2026）研究个人 Agent 如何从隐式用户偏好中学习 Skill 选择。它明确把统计偏好学习与语义意图解析分开：本地统计模块根据历史选择形成先验，再用该统计结果调节远程 LLM 的 Skill 选择。论文报告，在它评估的场景中，这种解耦设计的 cumulative regret 更低、测试准确率更高，并开源了实现。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.258/&quot;&gt;论文&lt;/a&gt; · &lt;a href=&quot;https://github.com/ZyGan1999/Personalized-Skill-Selection&quot;&gt;代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这项研究与本文推荐的架构非常接近：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LLM 负责识别当前任务语义和可能的用户意图；&lt;/li&gt;
&lt;li&gt;统计模型负责学习哪些选择在这个用户和这个上下文中更可能被接受；&lt;/li&gt;
&lt;li&gt;Harness / Resolver 把统计先验作为输入，而不是让 LLM 单凭自然语言印象做决定。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它还表明，用户偏好可以作用于工具或 Skill 的选择，并不局限于文本生成风格。相同的 User Model 可以服务翻译、代码 Agent、研究 Agent 和企业助手。&lt;/p&gt;
&lt;h3&gt;42.4 The Reward Model Selection Crisis：偏好排名准确不等于生成行为正确&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Reward Model Selection Crisis in Personalized Alignment&lt;/strong&gt;（Findings of EMNLP 2026）对“训练一个个人 Reward Model 就能让输出符合用户偏好”提出了直接警告。论文发现，Reward Model 的偏好排序准确率与它在推理时真正引导模型生成符合用户偏好内容的 Policy Accuracy 之间相关性很弱，Kendall’s (\tau) 约为 0.08–0.31。它还提出 Pref-LaMP，用用户真实完成内容评估个性化输出行为，而不是只测排序分数；在其测试中，简单的 In-Context Learning 对参数规模不低于 3B 的模型表现强于所比较的 reward-guided 方法。&lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.123/&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;对本文的意义是：不能因为某个个人模型能准确预测 A/B，就宣称它已经能稳定生成用户喜欢的译文。偏好预测、偏好引导和最终生成质量是三个不同层面的指标。训练个人 Reward Model 或 Adapter 之前，必须证明它改善了真实输出，而不只是离线 preference accuracy。&lt;/p&gt;
&lt;h3&gt;42.5 生产流媒体推荐中的 profile 比较：LLM 画像不是所有用户的默认最优方案&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;When LLM-Based User Profiling Adds Value in Production Streaming Recommendation&lt;/strong&gt;（2026-09 预印本）在真实流媒体平台抽样数据上比较四种 Profile 方案：历史 Item Embedding 的聚合表示、按时间拆分后的聚合表示、LLM 生成的单一自然语言 Profile，以及 LLM 生成的短期/长期两个 Profile。&lt;/p&gt;
&lt;p&gt;论文样本包含 10,000 个用户、约 240,000 个电影、电视和体育内容项目，并按用户时间顺序拆分训练、验证和测试数据。结果并不是“LLM Profile 全面优于传统画像”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对长期行为稳定的 Habitual / Non-Explorer 用户，Embedding Aggregate 方法整体表现更稳；&lt;/li&gt;
&lt;li&gt;对未来消费明显偏离历史的 Explorer 用户，LLM Narrative Profile 能带来准确率提升；&lt;/li&gt;
&lt;li&gt;在全体用户上，LLM 画像的表现可能显著低于聚合表示；&lt;/li&gt;
&lt;li&gt;LLM Profile 虽然让个别推荐列表略微更丰富，却可能降低总体 Catalog Coverage 和 Novelty，让全站推荐集中到更少、更热门的内容；&lt;/li&gt;
&lt;li&gt;LLM Profile 的生成与刷新成本更高，因此只有在特定用户群能带来可测收益时才值得使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;论文因此建议：聚合方法仍然是稳健默认，LLM 画像应按用户行为类型选择性启用。&lt;a href=&quot;https://arxiv.org/abs/2609.27183&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个结果对个人 User Model 很有启发：自然语言 Profile 不是因为更可读就一定更准确；它的价值取决于用户行为的异质性、当前任务和维护成本。稳定用户可能只需要结构化偏好权重，正在探索新领域的用户则更需要语义归纳和澄清交互。对于文学翻译，也应区分稳定审美和探索性试验，不能所有反馈都采用同一种模型更新策略。&lt;/p&gt;
&lt;h3&gt;42.6 Cross-domain Profile：稳定偏好可以跨内容域迁移，但需要抽象到正确层次&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;From reviews to preference profiles: LLM-based transfer for cross-domain recommendation&lt;/strong&gt;（Egyptian Informatics Journal，2026）提出 LIPA（Language-Induced Profile Abstraction）：从用户跨领域评论中生成中性的自然语言 Profile，再把用户 Profile 与 Item Profile 编码到共享语义空间进行匹配，不需要在目标领域重新训练。论文关注电影与图书等领域之间的冷启动迁移。&lt;a href=&quot;https://doi.org/10.1016/j.eij.2026.100981&quot;&gt;论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;它对 User Model 的启发是：有些偏好确实可以跨任务迁移，例如用户喜欢克制叙述、复杂人物关系或含蓄表达；但领域标签和内容兴趣本身不应直接迁移。例如“喜欢历史电影”不能推出“喜欢历史小说使用古雅语言”。跨领域迁移需要抽象为更底层的审美或选择维度，并保留证据和适用范围。&lt;/p&gt;
&lt;h3&gt;42.7 这些新研究对原有技术路线的修正&lt;/h3&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;新研究&lt;/th&gt;&lt;th&gt;增加的认识&lt;/th&gt;&lt;th&gt;对实施路线的影响&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;COPE&lt;/td&gt;&lt;td&gt;稀疏反馈下可以学习个性化 Embedding，并尝试自评辅助更新&lt;/td&gt;&lt;td&gt;后期可以加个人 Embedding；Proxy Reward 必须校验，不能替代真实反馈&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PHF&lt;/td&gt;&lt;td&gt;行为、长期倾向和群体规律有不同层次&lt;/td&gt;&lt;td&gt;User Model 应区分 Event、Personal Claim 和 Population Prior&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Statistical Priors for Implicit Preferences&lt;/td&gt;&lt;td&gt;本地统计偏好学习可以独立于远程 LLM 语义解析&lt;/td&gt;&lt;td&gt;支持 Hybrid / Harness 架构，统计模型不必部署成另一个大模型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reward Model Selection Crisis&lt;/td&gt;&lt;td&gt;排序准确率不等于实际生成对齐&lt;/td&gt;&lt;td&gt;增加下游行为评估，不能只看 Pairwise Accuracy 或 Reward Accuracy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Production Streaming Profile Study&lt;/td&gt;&lt;td&gt;LLM Profile 价值依用户行为类型而不同，并有多样性与成本副作用&lt;/td&gt;&lt;td&gt;LLM Profile 只对探索型、高异质用户按需启用；聚合模型作为低成本基线&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LIPA&lt;/td&gt;&lt;td&gt;自然语言画像可抽象稳定偏好并在跨域迁移&lt;/td&gt;&lt;td&gt;允许迁移高层偏好，但必须检查概念与场景是否真的匹配&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;43. 2026 年偏好学习的新连接：Profile 学习、冷启动询问和跨用户差异&lt;/h2&gt;
&lt;p&gt;前面几章分别讨论了从行为中推断偏好、用 Preference Profile 保存稳定倾向，以及用统计模型预测用户选择。2026 年的新论文进一步把这些能力串成了几个可组合的方法：学习用户摘要、用群体先验辅助冷启动、从二元反馈识别个人差异，以及把偏好询问作为主动学习问题。&lt;/p&gt;
&lt;h3&gt;43.1 PLUS：Profile 不只是推理时的 Prompt，还可以成为可学习的中间表示&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Learning to Summarize User Information for Personalized Reinforcement Learning from Human Feedback（PLUS，ICLR 2026）&lt;/strong&gt; 研究个性化 RLHF 中的用户表示问题。传统 Reward Model 往往使用一个群体级奖励函数，隐含假设不同用户对“好回答”的判断相同。PLUS 则联合训练用户摘要模型和 Reward Model：前者把用户偏好、特征与历史对话压缩成文本摘要，后者在该摘要条件下预测用户会偏好哪种回答；二者通过在线 co-adaptation 同步调整。&lt;/p&gt;
&lt;p&gt;论文报告，PLUS 相较标准 Bradley–Terry 方法，Reward Model 准确率提升 11%—77%；对新用户和新话题也有较好的泛化，且在特定实验中，PLUS 摘要条件化的 GPT-4 输出相较默认 GPT-4o 达到 72% 对 28% 的胜率。&lt;a href=&quot;https://proceedings.iclr.cc/paper_files/paper/2026/hash/c7af751b5e0a407c62ac023e3cb381f9-Abstract-Conference.html&quot;&gt;ICLR 2026 论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;它支持一个重要判断：&lt;strong&gt;用户 Profile 可以成为统计偏好模型和生成模型之间的中间表示，而不只是放进 Prompt 的自然语言说明。&lt;/strong&gt; 但论文的 72%/28% 是其特定任务和评测设置下的结果，不代表对任意用户、任意内容类型都能获得相同收益。&lt;/p&gt;
&lt;p&gt;对本文的设计，PLUS 可以作为后期演进方向：保留可读、可追溯的 Preference Claim，同时训练 Profile Builder 学习如何把大量证据压缩为对 Reward Model 有用的摘要。不能把它压缩出来的文本替代原始 Event 和 Evidence。&lt;/p&gt;
&lt;h3&gt;43.2 POPI：让偏好推断器学习怎样总结用户，而不是直接塞入所有历史&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;POPI: Personalizing LLMs via Optimized Natural Language Preference Inference（TMLR，2026-09）&lt;/strong&gt; 面向用户偏好表达分散、原始交互冗长且直接放入上下文会产生噪声的问题。它使用 Preference Inference Model，将不同形式的用户信号蒸馏为简洁的自然语言偏好摘要，再用该摘要条件化共享的生成模型。该框架联合优化偏好推断和个性化生成，并报告在四个个性化基准上提升个性化准确率、降低上下文开销；摘要还能够迁移到冻结的现成模型，无需更新其权重。&lt;a href=&quot;https://www.jmlr.org/tmlr/papers/&quot;&gt;TMLR 2026 论文列表&lt;/a&gt; · &lt;a href=&quot;https://arxiv.org/abs/2510.17881&quot;&gt;论文预印本与摘要&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;POPI 与 PLUS 都把“用户摘要”变成可学习的 Profile Builder，但优化目标有所区别：PLUS 把摘要作为个性化 Reward Model 的条件；POPI 把摘要作为共享生成模型的个性化条件。两者都说明自然语言 Profile 可以成为模型间传递个人偏好的接口。&lt;/p&gt;
&lt;p&gt;它们也有共同边界：摘要是对历史证据的压缩，不是权威事实源。摘要即使能提高下游预测，也可能遗漏反例、范围和时间信息。因此在本文建议的架构中，Profile Builder 输出的应是带证据引用的派生视图；权威数据仍然是原始事件和有版本的 Preference Claim。&lt;/p&gt;
&lt;h3&gt;43.3 CAPE：冷启动时不必逐条问遍所有偏好维度&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cold-Start Personalization via Bayesian Adaptive Questioning（CAPE，ICML 2026）&lt;/strong&gt; 研究没有用户历史时，怎样用有限交互建立初始偏好画像。它观察到，不同偏好维度之间存在群体层面的相关性，例如偏好详细解释的用户也可能更喜欢配套示例。CAPE 离线学习这种偏好相关结构，在线使用轻量 Bayesian inference 选择有信息量的问题，并预测尚未直接询问的偏好维度。&lt;/p&gt;
&lt;p&gt;论文在医疗、数学、社会和常识推理任务中报告，CAPE 的偏好对齐率为 80.8%，相较 RL 基线的 68.5%；达到结果所需交互次数减少 3—5 倍。简单线性回归式信念模型即可利用群体偏好先验，不需要在线训练一个大型用户模型。&lt;a href=&quot;https://proceedings.mlr.press/v306/bose26a.html&quot;&gt;ICML 2026 / PMLR 306&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CAPE 的主要价值是提供一种很实际的冷启动策略：不要让新用户从二十个问题的偏好问卷开始，而是利用群体数据推断可能相关的偏好，再选择最有信息量的问题。不过其论文问题设定是结构化偏好询问，主要实验也是任务型的模拟偏好场景；它并未直接解决开放式文学审美反馈、跨月偏好演变或作品级覆盖规则。这些仍需 Event / Claim / Temporal 模型处理。&lt;/p&gt;
&lt;p&gt;因此，本文代码中的 ActivePreferenceQuestionSelector 目前只是一个基于预测不确定度与任务影响的阈值示例。未来可以增加 CAPE 式群体相关先验和 Bayesian question selection，但不应把当前简单阈值实现描述成已经复现 CAPE。&lt;/p&gt;
&lt;h3&gt;43.4 C-BPO：跨用户数据能帮助识别个人差异，但必须控制“伪负样本”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Personalizing LLMs with Binary Feedback: A Preference-Calibrated Optimization Framework（C-BPO，ACL 2026 Long Papers）&lt;/strong&gt; 使用目标用户的二元反馈作为正向信号，并把其他用户的数据作为辅助的隐式负向信号，以学习用户之间的偏好差异。论文进一步使用 Positive-Unlabeled Learning，校正不同用户可能共享某些偏好这一问题，避免把“别人也喜欢”错误当成目标用户不喜欢。&lt;a href=&quot;https://aclanthology.org/2026.acl-long.1222/&quot;&gt;ACL 2026 论文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;它提供了一个重要补充：单个用户数据不足时，群体数据可以帮助建立人口先验和区分个人偏好；但其他用户的选择不是目标用户的可靠负例。若用户 A 喜欢自然中文、用户 B 也喜欢自然中文，B 的数据不能被当作 A 的反向证据。&lt;/p&gt;
&lt;p&gt;对个人 User Model，建议先用群体数据建立通用特征和弱先验，再用目标用户自己的反馈学习修正项。跨用户数据可以提供“什么偏好常常一起出现”的信息，但不能覆盖目标用户的明确声明、实际选择和反面证据。&lt;/p&gt;
&lt;h3&gt;43.5 四类方法分别解决哪个问题？&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方法&lt;/th&gt;&lt;th&gt;主要问题&lt;/th&gt;&lt;th&gt;学习的对象&lt;/th&gt;&lt;th&gt;适合进入 User Model 的哪一层&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PLUS&lt;/td&gt;&lt;td&gt;用户摘要如何服务个性化 Reward Model&lt;/td&gt;&lt;td&gt;用户摘要器 + Reward Model&lt;/td&gt;&lt;td&gt;Profile Builder / Preference Scorer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;POPI&lt;/td&gt;&lt;td&gt;如何从异构历史信号生成紧凑、可迁移的自然语言偏好&lt;/td&gt;&lt;td&gt;Preference Inference Model&lt;/td&gt;&lt;td&gt;Task-agnostic Preference Profile&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CAPE&lt;/td&gt;&lt;td&gt;没有历史时，下一步应该问用户什么&lt;/td&gt;&lt;td&gt;群体偏好相关先验 + Bayesian belief state&lt;/td&gt;&lt;td&gt;Cold-start / Active Elicitation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;C-BPO&lt;/td&gt;&lt;td&gt;如何利用跨用户数据识别目标用户独特偏好&lt;/td&gt;&lt;td&gt;二元反馈校准 + PU learning&lt;/td&gt;&lt;td&gt;Population Prior / User-specific delta&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;它们不是相互替代的产品，而是可以放在不同层次组合起来的算法。一个完整 User Model 可以用 CAPE 完成冷启动，用 Event / Claim 存储真实证据，用 POPI 或 PLUS 风格的模型生成紧凑 Profile，再用个性化偏好估计器支持当前任务的判断。每个环节都必须保留其输入证据和评估结果。&lt;/p&gt;
&lt;h2&gt;44. 让自己使用的 Agent 越来越顺手：从本地使用日志到持续个性化&lt;/h2&gt;
&lt;p&gt;前面讨论的 Preference Profile 主要回答“系统应该记住什么”。但个人 Agent 的实际体验还取决于另一组问题：它是否知道什么时候该主动做、什么时候该先问；是否反复犯同一种错误；是否总是选错工具或模型；是否能理解用户的工作节奏；以及一次修正能不能在下一次任务中真正生效。&lt;/p&gt;
&lt;p&gt;这类改进不应该从“每天把所有对话交给 LLM 总结”开始。更合适的目标是建立一个本地优先的 &lt;strong&gt;Personal Agent Learning Loop&lt;/strong&gt;：持续记录 Agent 的行为和用户反馈，定期归纳候选经验，验证经验是否真的改善了后续任务，再把被验证的经验放入合适的记忆、Skill 或 Runtime 配置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;日志是证据来源，不是记忆本身；写入一条记忆，也不等于 Agent 已经学会。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;44.1 先明确要改进的不是模型本身，而是 Agent 的行为&lt;/h3&gt;
&lt;p&gt;个人 Agent 的“更懂我”至少包含四种能力：&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;能力&lt;/th&gt;&lt;th&gt;要解决的问题&lt;/th&gt;&lt;th&gt;典型反馈&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Preference Selection&lt;/td&gt;&lt;td&gt;当前任务应该采用哪一条个人偏好？&lt;/td&gt;&lt;td&gt;用户说“这次不要按我平常的简洁风格，详细解释”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Behavior Realization&lt;/td&gt;&lt;td&gt;Agent 是否真的按偏好行动？&lt;/td&gt;&lt;td&gt;虽然记住了“不要反复确认”，但执行前仍然问了三次&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Contextual Applicability&lt;/td&gt;&lt;td&gt;记忆是否只在合适场景生效？&lt;/td&gt;&lt;td&gt;把代码评审时的简洁偏好带入文学翻译&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Continual Adaptation&lt;/td&gt;&lt;td&gt;用户习惯变化后，旧偏好能否更新？&lt;/td&gt;&lt;td&gt;过去习惯先给方案，现在更倾向于先直接修改，再解释差异&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;因此，改进对象不只是输出文字风格，还包括 Agent 的 Planning、Tool Selection、Clarification、Execution、Verification 和交互节奏。2026 年的个性化 Agent Survey 也将 Profile Modeling、Memory、Planning、Action Execution 视为相互关联的能力，而不是只在 Prompt 前面追加一段用户画像。&lt;a href=&quot;https://arxiv.org/abs/2602.22680&quot;&gt;Toward Personalized LLM-Powered Agents&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;44.2 最新研究已经开始直接测试“Agent 有没有学会如何与你协作”&lt;/h3&gt;
&lt;p&gt;两个 2026 年 10 月的新 Benchmark 特别值得关注。它们把评价目标从“Agent 是否找回过去的信息”转向“Agent 是否知道怎样与你互动”。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MemPABench：交互偏好必须在正确的时刻影响行为&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why Bother Me Again? Benchmarking Personal Agent Memory for Interaction Preferences&lt;/strong&gt;（2026-10-21）研究用户如何通过日常互动表达自己的协作习惯，例如是否希望 Agent 主动汇报、是否需要重复确认、是否接受 Agent 自主采取某些动作。论文使用四个模拟用户、14 项偏好，设计了跨四个月的 99 次交互 Session，并人为改变部分偏好，观察 Agent 是否能够更新。&lt;/p&gt;
&lt;p&gt;结果值得警惕：在该 Benchmark 中，Mem0、MemOS 和 Simple RAG 这类 Retrieval-based Memory 在偏好选择准确率上没有优于 No Memory；File-based Memory 有改善，但容易把某条偏好应用到不相关的上下文。作者还发现，即使偏好已经写入 Memory，也可能没有在真正需要决策时被检索出来。&lt;a href=&quot;https://arxiv.org/abs/2610.30485&quot;&gt;MemPABench&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;它说明个人 Agent 最难的部分之一不是存储，而是 &lt;strong&gt;Preference Selection + Behavior Realization&lt;/strong&gt;。一条“不要过多解释”的记忆，即使检索成功，也需要运行时的行为策略配合；更不能在所有任务中不加区分地使用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iPrefBench：Agent 必须区分哪些信息可以从历史推断，哪些必须向用户询问&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iPrefBench: A User-Centric Benchmark for Personalized Mobile Use Agents&lt;/strong&gt;（2026-10-26）使用包含 3,051 条历史活动事件的用户画像，设计了 130 个任务，涉及 26 个应用。研究将任务中缺失的信息分成两类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inferable&lt;/strong&gt;：历史记录中已经有充分证据，Agent 应该能够推断。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ask-only&lt;/strong&gt;：历史中没有答案，只能向用户询问，不能靠猜测补齐。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;七个被测试的 Agent，动作执行完成率达到 77.5%–91.6%，但完整的个性化任务成功率只有 26.2%–47.7%。以论文中表现最好的 Claude Opus 5 为例，动作完成率为 91.6%，完整任务成功率为 47.7%。Agent 对 Ask-only 信息的提问召回率最高也只有 44.3%；单纯鼓励 Agent 多问，虽然提高召回率，却会降低提问精度，产生不必要的打扰。&lt;a href=&quot;https://arxiv.org/abs/2610.34735&quot;&gt;iPrefBench&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这对个人 Agent 很直接：系统不应该只记录“用户曾经做过什么”，还应能判断“当前缺失的信息是否真的能从过去推断”。历史证据不足时，应该提问；有足够证据时，就不要让用户反复回答相同问题。对用户自己的 Agent，这往往比生成风格多符合几个百分点更影响日常使用体验。&lt;/p&gt;
&lt;p&gt;更早的 &lt;strong&gt;Learning Personalized Agents from Human Feedback（PAHF，Meta，2026）&lt;/strong&gt; 已经提出了一个持续学习闭环：行动前通过澄清解决未知偏好，执行时根据显式用户记忆做决策，行动后利用用户纠正更新记忆，尤其要处理旧偏好已经过时的情况。论文将 Pre-action Feedback 与 Post-action Feedback 结合，后者能够纠正 Agent “自信但已经过时”的偏好判断。&lt;a href=&quot;https://arxiv.org/abs/2602.16173&quot;&gt;PAHF&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这几项研究指向同一个结论：&lt;strong&gt;记忆系统必须和实际决策、执行结果以及用户纠正连接起来，不能只评估 Recall。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;44.3 业界已经出现了几种可以直接借鉴的实现模式&lt;/h3&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;产品 / 项目&lt;/th&gt;&lt;th&gt;已公开的实践&lt;/th&gt;&lt;th&gt;可借鉴的设计&lt;/th&gt;&lt;th&gt;证据边界&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Claude Code Auto Memory&lt;/td&gt;&lt;td&gt;在本机按项目保存记忆，区分 user、feedback、project、reference 等类型；由 Agent 在工作过程中积累有长期价值的内容&lt;/td&gt;&lt;td&gt;用户级和项目级分开；保留原始 Session Transcript 与压缩后的 Memory；topic 文件按需加载&lt;/td&gt;&lt;td&gt;官方功能说明，不代表自动记忆总能判断正确或适用范围&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;VS Code Local Memory&lt;/td&gt;&lt;td&gt;Local Harness 使用 User、Repository、Session 三种 Memory Scope；用户偏好跨 Workspace，项目知识只在当前 Workspace 生效&lt;/td&gt;&lt;td&gt;明确的 Scope Hierarchy，避免一个全局 Memory 混入项目约束和临时任务状态&lt;/td&gt;&lt;td&gt;官方产品文档；Copilot 云端 Memory 与 Local Memory 是不同实现&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Letta MemFS / Dreaming&lt;/td&gt;&lt;td&gt;Git-backed Memory Filesystem；后台 Subagent 回顾最近对话、整理经验并更新 Memory；可配置额外 Agent Review&lt;/td&gt;&lt;td&gt;文件可检查、版本化，后台 Consolidation 不阻塞主任务&lt;/td&gt;&lt;td&gt;厂商文档所述产品能力；额外 Agent Review 不等于用户审批&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mastra Observational Memory&lt;/td&gt;&lt;td&gt;Observer 将较早的交互压缩成 Observations，Reflector 定期整合、重组和删除过时内容&lt;/td&gt;&lt;td&gt;Observation 与 Reflection 分离；按 Token Threshold 异步运行，而不是每个 Turn 都完整回放历史&lt;/td&gt;&lt;td&gt;开源框架能力；其主要目标是长上下文压缩，不是已经解决个人偏好学习&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Lyo / Learn Your Own&lt;/td&gt;&lt;td&gt;通过 Codex / Claude Hooks 收集本地事件，写入 SQLite Learning Ledger；记录候选经验、Scope、Delivery 和 Outcome，并尝试进行 advice / no-advice 对照&lt;/td&gt;&lt;td&gt;把“建议被写入”与“建议确实改善了后续结果”分开验证&lt;/td&gt;&lt;td&gt;2026 年的开源实验项目，不是成熟的大规模生产产品；作者明确表示跨独立真实任务的泛化验证仍是下一阶段&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Joel Hooks 的 Observer / Reflector 个人实践&lt;/td&gt;&lt;td&gt;个人 Agent 记录日常 Observations，后台 Reflector 每日生成长期记忆候选，再由用户审核&lt;/td&gt;&lt;td&gt;一份每日观察日志 + 一份候选变更 Review，而不是自动改写所有长期记忆&lt;/td&gt;&lt;td&gt;个人工程实践文章；作者明确区分了已经运行的基础设施和尚未完成的 Observer、Reflector、Friction Analysis 功能&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Claude Code 的 Auto Memory 将机器本地的记忆分成 user、feedback、project 和 reference 类型，并用一个简短索引连接主题文件；VS Code 的 Local Memory 则明确区分 User、Repository 和 Session 三种 Scope。两者共同说明：&lt;strong&gt;Scope 不是 Memory 的附加元数据，而是决定记忆是否能被正确使用的基本结构。&lt;/strong&gt; &lt;a href=&quot;https://code.claude.com/docs/en/memory&quot;&gt;Claude Code Memory&lt;/a&gt; · &lt;a href=&quot;https://code.visualstudio.com/docs/agents/run/memory&quot;&gt;VS Code Memory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Letta 的 Dreaming 使用后台 Subagent 检查最近的交互并整合长期记忆；Mastra 的 Observational Memory 则将 Observer 与 Reflector 分开，前者观察和提取事件，后者压缩、合并并淘汰过时观察。两者都支持异步处理，而不是让主 Agent 在每次调用时重新分析全部历史。&lt;a href=&quot;https://docs.letta.com/configuration/memory&quot;&gt;Letta Memory &amp;amp; Dreaming&lt;/a&gt; · &lt;a href=&quot;https://mastra.ai/docs/memory/observational-memory&quot;&gt;Mastra Observational Memory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lyo 是这里值得额外研究的开源原型。它不是一个“自动摘要所有 Prompt”的 Memory 工具，而是一个本地学习账本：Hooks 负责观察，SQLite 记录 Session、Prompt、Trace、Preference、Delivery 和 Outcome，候选经验需要明确 Scope 和 Evaluator；后续任务可以安排 Advice 与 No-advice 的前瞻性比较，再决定是否继续投放该经验。它还默认不把完整 Prompt 存进 SQLite，而是保留 Hash、长度、摘要和可选文件引用。项目当前仍标注了 API 稳定性、Schema Migration 和完整命令覆盖等未成熟项，因此应把它看成有价值的实现实验，而不是已被广泛验证的行业标准。&lt;a href=&quot;https://github.com/bebekim/learn-your-own&quot;&gt;Lyo Repository&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这些方案并不冲突：Claude Code 和 VS Code 提供 Memory Scope 的产品实践，Mastra 和 Letta 提供后台 Consolidation 的执行模式，Lyo 则把经验投放和结果验证连成可审计的 Learning Loop。&lt;/p&gt;
&lt;h3&gt;44.4 应不应该 Log Everything？应该记录事件，但不应该无条件保存所有内容&lt;/h3&gt;
&lt;p&gt;我的建议是：&lt;strong&gt;记录所有对学习和复盘有价值的事件元数据；原始 Prompt、模型输出、工具参数和工具结果采用独立、可配置的内容采集策略。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“自己分析自己”确实降低了将个人对话交给外部服务的必要性，但本地日志仍然可能包含 API Key、Access Token、内部代码、公司项目内容、客户材料以及其他人的信息。Local-only 不等于没有泄露风险。更重要的是，完整 Prompt、工具输出和文件内容通常体积很大，会让后续分析成本快速上升。&lt;/p&gt;
&lt;p&gt;OpenTelemetry 的 GenAI Semantic Conventions 已经把 Agent Invocation、Plan、Tool Execution、Retrieval、Memory Operation 等定义为不同 Span；同时明确建议默认不要采集完整的 System Instructions、Input Messages 和 Output Messages。需要保留内容时，可以将完整内容放在独立存储中，再由 Trace 记录引用。该 Semantic Convention 目前仍标为 Development，因此更适合作为事件建模参考，而不是要求个人 Agent 必须接入一套完整 OTel 平台。&lt;a href=&quot;https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-spans.md&quot;&gt;OpenTelemetry GenAI Spans&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;建议将采集分成三层：&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;数据层&lt;/th&gt;&lt;th&gt;建议采集内容&lt;/th&gt;&lt;th&gt;默认策略&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Trace Metadata&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Session / Turn / Trace ID、时间、Agent、Model、Task Type、Tool Name、成功/失败、持续时间、Token / Cost、Verifier 结果&lt;/td&gt;&lt;td&gt;始终记录&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Learning Events&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;用户纠正、显式偏好声明、A/B 选择、修改/撤回、重复追问、工具失败、测试结果、最终是否接受&lt;/td&gt;&lt;td&gt;始终记录结构化事件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Raw Content&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;完整 Prompt、Response、Tool Arguments、Tool Results、Patch、文件内容&lt;/td&gt;&lt;td&gt;默认不完整保存；按本地配置、项目范围和需要单独启用&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;原始内容可以保留在本地文件中，但建议由 Trace 记录 Hash、长度、引用和采集策略。对大文件、二进制和工具输出应采用文件引用或 Patch 引用，而不是把全部内容重复塞进 JSONL。需要能够明确排除特定 Workspace、目录或任务类型。&lt;/p&gt;
&lt;h4&gt;推荐的最小事件 Schema&lt;/h4&gt;
&lt;p&gt;每个 Agent Event 至少应包含：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;schema_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;event_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;evt_01...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;timestamp&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-10-31T10:30:00Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;session_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;session_...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;turn_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;turn_...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;trace_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;trace_...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;parent_event_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;scope&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;agent&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;coding-agent&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;project&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;repo-a&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;task_type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;code_change&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;event_type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;tool_execution_end&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;actor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;agent&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;tool&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;run_tests&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;success&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;duration_ms&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4200&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;outcome&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;verifier&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;passed&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;content_ref&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;content_hash&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;sha256:...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;redaction&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;applied&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;policy&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;local-default&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最重要的是稳定的 event_id、session_id、turn_id、trace_id、event_type 和时间戳。Tool Call 与 Tool Result 要通过稳定的 Call ID 关联。Pi 的 Session File Format 展示了成熟的本地 JSONL 事件结构：每行都有类型、ID、Parent ID 和时间戳，消息、模型变更、Context Compaction 和 Tool Execution 都有独立类型，可以据此重放或分析 Session，而不是解析人类可读的 Console Log。&lt;a href=&quot;https://pi.dev/docs/latest/session-format&quot;&gt;Pi Session File Format&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;对于偏好学习，另外记录以下事件尤其重要：&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;事件&lt;/th&gt;&lt;th&gt;为什么要记录&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;user_correction&lt;/td&gt;&lt;td&gt;用户明确指出 Agent 哪里做错了，通常比普通对话更有价值&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preference_statement&lt;/td&gt;&lt;td&gt;用户明确表达“以后应该怎样做”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;candidate_selection&lt;/td&gt;&lt;td&gt;用户在不同候选结果中选择了哪一个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;artifact_edit / undo&lt;/td&gt;&lt;td&gt;用户如何修改或撤回 Agent 的产出&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clarification&lt;/td&gt;&lt;td&gt;哪些问题用户认为应该提前问，哪些问题属于重复确认&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;tool_selection / tool_failure&lt;/td&gt;&lt;td&gt;Agent 是否选错工具、模型、Skill 或执行路径&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;verification_result&lt;/td&gt;&lt;td&gt;修改、测试、构建或其他验收是否成功&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;delivery&lt;/td&gt;&lt;td&gt;某一条偏好是否真的注入了当前任务上下文&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;post_action_feedback&lt;/td&gt;&lt;td&gt;用户在看到最终行为后是否接受、纠正或要求撤回&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这里有一个重要的区分：&lt;strong&gt;用户没有修改结果，不等于用户明确认可结果；用户没有提出异议，也不等于某项偏好被验证。&lt;/strong&gt; “接受”只能作为较弱的行为证据，不能与显式评分、A/B 选择或直接纠正等同。&lt;/p&gt;
&lt;h3&gt;44.5 推荐架构：实时记录，Session 结束时观察，每天归纳，定期审核&lt;/h3&gt;
&lt;p&gt;不建议每次 Tool Call 后都启动一个 LLM 进行“学习”。这会增加延迟和 Token 成本，而且大量中间状态不具备长期价值。更自然的做法是将 Agent 运行与偏好学习解耦：&lt;/p&gt;
&lt;pre&gt;flowchart TB
    A[&quot;Agent Session / Tool Execution&quot;] --&amp;gt; B[&quot;Local Append-only Event Log&quot;]
    B --&amp;gt; C[&quot;Session Observer&quot;]
    C --&amp;gt; D[&quot;Structured Observations&quot;]
    D --&amp;gt; E[&quot;Daily Reflector&quot;]
    E --&amp;gt; F[&quot;Candidate Preference Claims&quot;]
    F --&amp;gt; G{&quot;Evidence and Scope Check&quot;}
    G --&amp;gt;|&quot;Insufficient / conflicting&quot;| H[&quot;Keep as Candidate&quot;]
    G --&amp;gt;|&quot;Ready for review&quot;| I[&quot;Local Review Queue&quot;]
    I --&amp;gt; J{&quot;User Decision&quot;}
    J --&amp;gt;|&quot;Approve&quot;| K[&quot;Versioned User / Agent / Project Profile&quot;]
    J --&amp;gt;|&quot;Reject / edit&quot;| L[&quot;Archive decision and evidence&quot;]
    K --&amp;gt; M[&quot;Preference Compiler&quot;]
    M --&amp;gt; N[&quot;Memory / Skill / Runtime Policy&quot;]
    N --&amp;gt; O[&quot;Agent Execution&quot;]
    O --&amp;gt; P[&quot;Delivery and Outcome Events&quot;]
    P --&amp;gt; B
    H --&amp;gt; B
    L --&amp;gt; B&lt;/pre&gt;
&lt;p&gt;这个架构有四个不同的职责。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Event Collector：只负责观察，不负责学习。&lt;/strong&gt; Agent 通过 Hooks 或 Runtime Callback 将事件写入本地文件。应采用 Append-only JSONL，按 Session 分文件，避免多进程同时直接修改同一个日志。高频 Hook 可以先将事件写入本地 Spool Directory，再由独立进程批量归档到 SQLite；采集过程不能阻塞 Agent 的正常运行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Session Observer：提取本次使用中的观察。&lt;/strong&gt; 在任务结束、Session Shutdown 或 Context Compaction 时异步执行。它不应该把 Session 改写成一篇通用摘要，而应找出可能改变未来行为的具体事件，例如用户再次纠正了同一个问题、主动接受了某种操作方式、Agent 使用了错误工具，或者某项验证说明某种做法确实有效。&lt;/p&gt;
&lt;p&gt;建议将 Observation 至少分成三类：&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;例子&lt;/th&gt;&lt;th&gt;默认保存位置&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Durable Signal&lt;/td&gt;&lt;td&gt;用户反复强调的沟通风格、操作习惯、工具选择偏好&lt;/td&gt;&lt;td&gt;Candidate Profile&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Working Context&lt;/td&gt;&lt;td&gt;当前项目结构、最近修改的文件、当前任务状态&lt;/td&gt;&lt;td&gt;Project / Session Memory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ephemeral Event&lt;/td&gt;&lt;td&gt;一次性探索、临时方案、未采用的想法&lt;/td&gt;&lt;td&gt;Raw Event Log&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Daily Reflector：分析跨 Session 的重复模式。&lt;/strong&gt; 每天在空闲时间运行一次，读取最近新增的 Observations，而不是读取所有历史原文。它需要合并重复内容、找出相互矛盾的反馈、识别偏好的 Scope、检查旧偏好是否过时，并形成候选变更。每日分析不是必须固定为 Cron；也可以在有足够新事件时触发，再以每日任务做补偿和清理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Preference Compiler：决定如何将被确认的经验作用于 Agent。&lt;/strong&gt; 它将用户级偏好、Agent Role、Project Rule 和当前 Session Override 组合成运行时配置。每次注入哪条 Preference，都要记录 delivery Event，后面才能判断它是否真正改善了行为。&lt;/p&gt;
&lt;h3&gt;44.6 Daily Reflector 具体应该分析什么？&lt;/h3&gt;
&lt;p&gt;不要只生成“今天发生了什么”。更有价值的是运行一组稳定的 Learning Queries。&lt;/p&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;分析项&lt;/th&gt;&lt;th&gt;示例问题&lt;/th&gt;&lt;th&gt;可能产生的改进&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Repeated Correction&lt;/td&gt;&lt;td&gt;最近是否多次纠正同一种回复或代码模式？&lt;/td&gt;&lt;td&gt;更新 User Profile 或 Agent Instructions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Repeated Rework&lt;/td&gt;&lt;td&gt;哪些任务经常要求 Agent 返工？&lt;/td&gt;&lt;td&gt;修改 Skill、Prompt 或验证流程&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tool Selection&lt;/td&gt;&lt;td&gt;是否反复选错工具、模型、MCP 或 Skill？&lt;/td&gt;&lt;td&gt;更新 Tool Routing / Harness&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Clarification Friction&lt;/td&gt;&lt;td&gt;哪些问题本来能从已有上下文推断，却被重复询问？&lt;/td&gt;&lt;td&gt;调整 Clarification Policy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Unnecessary Autonomy&lt;/td&gt;&lt;td&gt;哪些任务 Agent 应该先问，却自行猜测并导致返工？&lt;/td&gt;&lt;td&gt;增加 Ask-before-action 条件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Verification Failure&lt;/td&gt;&lt;td&gt;是否重复遗漏测试、Build、Diff 或其他验收？&lt;/td&gt;&lt;td&gt;增加确定性 Hook / Workflow&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Drift&lt;/td&gt;&lt;td&gt;最近反馈是否与现有 User Profile 冲突？&lt;/td&gt;&lt;td&gt;提出 Profile 更新或限定 Scope&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Over-Personalization&lt;/td&gt;&lt;td&gt;某条偏好是否开始影响无关任务？&lt;/td&gt;&lt;td&gt;缩小 Scope、降低权重或撤销&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;输出不应直接写入正式的 Memory，而应产生类似下面的本地 Review Proposal：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;## Candidate: 代码修改后先完成验证&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Evidence:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Session A: 用户要求补跑 targeted test。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Session B: 用户指出修改后没有执行 build。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Session C: 用户再次要求先检查 diff 再报告结果。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Candidate:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 对实际代码修改任务，完成修改后应主动执行相关验证。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 仅在无法运行验证时，说明具体阻碍。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Scope:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Agent: coding-agent&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Task: code_change&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Not applicable: research-only / writing-only&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Confidence:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Candidate, repeated across 3 independent sessions.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Action:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Propose update to coding-agent policy.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Do not change global user instructions yet.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个 Proposal 不是统计意义上的最终结论，而是一个带有来源、范围和反例的待审核假设。即使某条反馈在多个 Session 中出现，也需要判断是不是同一个项目、同一种任务或某个临时阶段造成的。&lt;/p&gt;
&lt;p&gt;Mastra 的 Observer / Reflector 模式和 Joel Hooks 的个人实践都展示了这种“观察与归纳分离”的方向。Joel 的方案将每日 Reflector 产出的内容放入 REVIEW.md，用户批准后才进入长期 Memory；他也明确说明，部分自动分析与自我修复仍是规划中的功能，而不是已经完成的能力。&lt;a href=&quot;https://mastra.ai/docs/memory/observational-memory&quot;&gt;Mastra Observational Memory&lt;/a&gt; · &lt;a href=&quot;https://joelclaw.com/observation-pipeline-persistent-ai-memory&quot;&gt;Joel Hooks: Observation Pipeline&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;44.7 Memory、Skill、Harness：不同的经验应该修改不同的层&lt;/h3&gt;
&lt;p&gt;一个经常被忽略的问题是：系统发现用户不喜欢某种行为后，不应该默认将它写入 Memory。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;发现的经验&lt;/th&gt;&lt;th&gt;更合适的落点&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;用户更喜欢怎样的表达、解释深度、协作节奏&lt;/td&gt;&lt;td&gt;User / Agent Memory&lt;/td&gt;&lt;td&gt;它改变 Agent 的判断和行为倾向&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;做某一类任务应该按什么步骤执行&lt;/td&gt;&lt;td&gt;Skill&lt;/td&gt;&lt;td&gt;它属于可重复调用的程序性知识&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;某些动作必须先经过校验、授权或人工确认&lt;/td&gt;&lt;td&gt;Harness / Hook / Permission&lt;/td&gt;&lt;td&gt;这类约束不能只依赖 LLM 记住&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;某个项目的构建命令、目录约定和技术选型&lt;/td&gt;&lt;td&gt;Project Memory / AGENTS.md&lt;/td&gt;&lt;td&gt;它只在特定 Workspace 生效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;当前任务的临时决定和上下文&lt;/td&gt;&lt;td&gt;Session Memory&lt;/td&gt;&lt;td&gt;任务结束后通常不应变成长期规则&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;例如，系统发现你经常要求代码 Agent 完成修改后立即测试。可以有两种不同处理：如果这是你的个人协作偏好，写入 coding-agent Profile；如果它是项目必须满足的工程门禁，就应该成为验证 Hook 或 Workflow。前者依赖判断，后者应由 Runtime 确定性执行。&lt;/p&gt;
&lt;p&gt;Letta 的公开设计也把 Memory、Skills 和 Harness Configuration 分开：Memory 改变 Agent 的未来判断，Skill 保存可重用的流程，Harness 决定权限、Hooks、工具、模型和定时任务。&lt;a href=&quot;https://docs.letta.com/configuration/memory&quot;&gt;Letta Memory &amp;amp; Dreaming&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这可以避免一个常见的错误：发现 Agent 忘记跑测试，就只在 Memory 中增加一句“记住一定要跑测试”。如果它是一个确定性要求，应该由系统执行测试并验证结果，而不是期待模型每次都能从记忆里想起来。&lt;/p&gt;
&lt;h3&gt;44.8 如何判断 Agent 真的变好了？&lt;/h3&gt;
&lt;p&gt;不能只检查“新增了几条 Memory”或“能不能正确回答你喜欢什么”。至少要同时衡量偏好选择、实际行为、交互负担和任务结果。&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;指标&lt;/th&gt;&lt;th&gt;衡量方式&lt;/th&gt;&lt;th&gt;关注的问题&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Repeated Correction Rate&lt;/td&gt;&lt;td&gt;同一问题在后续 Session 中再次被纠正的次数&lt;/td&gt;&lt;td&gt;是否真的减少重复犯错&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preference Selection Accuracy&lt;/td&gt;&lt;td&gt;当前任务是否选用了正确的个人偏好&lt;/td&gt;&lt;td&gt;是否理解该用哪条 Profile&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Behavior Realization Rate&lt;/td&gt;&lt;td&gt;Agent 是否实际按已投放偏好行动&lt;/td&gt;&lt;td&gt;是否只会说“我记住了”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Context Misapplication Rate&lt;/td&gt;&lt;td&gt;偏好是否被用于不相关任务&lt;/td&gt;&lt;td&gt;是否过度个性化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Clarification Precision / Recall&lt;/td&gt;&lt;td&gt;应问的问题是否询问，不需要问的问题是否避免&lt;/td&gt;&lt;td&gt;是否减少重复问题而不靠猜&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rework Rate&lt;/td&gt;&lt;td&gt;用户修改、撤回或要求重做的次数&lt;/td&gt;&lt;td&gt;产出是否真正符合预期&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Task Outcome&lt;/td&gt;&lt;td&gt;测试、Build、Verifier 或用户验收结果&lt;/td&gt;&lt;td&gt;任务本身是否更成功&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;MemPABench 的一个重要贡献正是将 Preference Selection 与 Behavior Realization 分开评估；iPrefBench 则把 Action Completion、Personalization 和用户提问的 Recall / Precision 分开统计。对自己的 Agent，也应该采用类似思路，不能把“Agent 记得你的偏好”当成“Agent 的工作结果一定更好”。&lt;/p&gt;
&lt;p&gt;更进一步，可以对某些低风险、可重复的任务做 &lt;strong&gt;Prospective Comparison&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先记录当前 Agent 的 Baseline 行为和任务结果。&lt;/li&gt;
&lt;li&gt;选择一条候选偏好，只在符合 Scope 的任务中投放。&lt;/li&gt;
&lt;li&gt;对相似任务比较启用该偏好和不启用该偏好时的结果。&lt;/li&gt;
&lt;li&gt;记录 Agent 是否收到并执行建议、用户是否再次纠正、Verifier 是否通过。&lt;/li&gt;
&lt;li&gt;只有证据支持时才继续使用；出现反例就缩小范围、修改或撤销。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lyo 的 Advice / No-advice Trial 是值得参考的实验设计。个人 Agent 不一定有足够多完全同质的任务做严格 A/B Test，但至少可以采用同一任务类别的前瞻性对照，避免只凭“最近感觉顺手了”就自动升级规则。涉及安全、权限和不可逆动作的规则不应为了实验而随机关闭。&lt;/p&gt;
&lt;h3&gt;44.9 一个适合个人使用的本地目录结构&lt;/h3&gt;
&lt;p&gt;第一版无需 Vector Database、Graph Database、独立 Memory Service 或 Multi-Agent 系统。使用 JSONL + SQLite + Markdown 就足以完成闭环：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;~/.agent-learning/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  events/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    2026/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      10/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        31/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          &amp;lt;session-id&amp;gt;.jsonl&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  blobs/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;content-hash&amp;gt;             # opt-in raw content, separate from metadata&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  learning.sqlite              # indexed observations, claims, delivery and outcomes&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  profile/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    global.md                  # cross-agent user preferences&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    agents/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      coding-agent.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      research-agent.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      writing-agent.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    projects/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &amp;lt;project-id&amp;gt;.md&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  reviews/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    2026-10-31.md              # daily candidate updates&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  experiments/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;experiment-id&amp;gt;.jsonl      # baseline/treatment/outcome records&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;各文件职责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;events/ 保存 Append-only 原始事件，按 Session 分文件，便于检索和重放。&lt;/li&gt;
&lt;li&gt;blobs/ 保存选择性保留的原始 Prompt、Tool Result 和 Patch；默认不采集。&lt;/li&gt;
&lt;li&gt;learning.sqlite 是索引和 Learning Ledger，保存 Observation、Preference Claim、Evidence Link、Delivery、Outcome 和版本信息。&lt;/li&gt;
&lt;li&gt;profile/ 是交给运行时读取的精简视图，避免每次任务读取整个事件库。&lt;/li&gt;
&lt;li&gt;reviews/ 保存每日候选及批准、拒绝、修改理由。&lt;/li&gt;
&lt;li&gt;experiments/ 记录某条经验在后续任务中是否真正产生效果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SQLite 的 FTS 和普通索引可以先解决大多数检索需求。只有在 Observation 数量、自由文本问题和跨 Session 搜索确实需要语义召回时，再增加 Local Embedding Index；不要为了“Agent Memory”这个名字默认增加 Vector Database。&lt;/p&gt;
&lt;h3&gt;44.10 推荐的执行频率&lt;/h3&gt;
&lt;p&gt;“每天运行一次分析脚本”是合理的，但它应当只是 Consolidation 的节奏，而不是整个学习系统的运行方式。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;时间点&lt;/th&gt;&lt;th&gt;任务&lt;/th&gt;&lt;th&gt;是否需要 LLM&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;每个事件发生时&lt;/td&gt;&lt;td&gt;Append-only 写入结构化 Event；记录 Trace ID 和 Outcome&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Session 结束 / Compaction&lt;/td&gt;&lt;td&gt;汇总本次纠正、选择、修改和验证结果，生成 Observation&lt;/td&gt;&lt;td&gt;可以使用低成本模型，异步执行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;每日低峰期&lt;/td&gt;&lt;td&gt;去重、跨 Session 聚类、更新统计、生成候选 Profile / Skill / Harness Change&lt;/td&gt;&lt;td&gt;是，主要的 Reflector 工作&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;每周&lt;/td&gt;&lt;td&gt;检查候选、批准或拒绝、查看重复纠正和过度应用&lt;/td&gt;&lt;td&gt;可用 LLM 辅助，但应由用户审核&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;每月&lt;/td&gt;&lt;td&gt;审查旧偏好、低频偏好、冲突和无效规则；回顾是否真的减少返工&lt;/td&gt;&lt;td&gt;可选&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;活动较少的 Agent 不需要每天执行一轮 LLM 分析。可以在新事件积累到一定规模时触发 Reflector，同时每天做一次轻量检查。Session Observer 与 Daily Reflector 也不一定需要两个 Agent；第一版可以是两个独立任务，由同一模型以不同 Prompt 执行。&lt;/p&gt;
&lt;h3&gt;44.11 推荐的 30 天落地顺序&lt;/h3&gt;
&lt;p&gt;不建议第一天就建设一套“Agent 自我进化平台”。先让系统能够回答“我到底经常在哪些地方纠正它”，再让它尝试修改行为。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;阶段&lt;/th&gt;&lt;th&gt;实施工作&lt;/th&gt;&lt;th&gt;验收条件&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Week 1：Observability&lt;/td&gt;&lt;td&gt;通过 Agent Hooks 采集本地 JSONL 事件，记录 Session、Turn、Tool、结果和用户纠正&lt;/td&gt;&lt;td&gt;能按 Session 重建一次任务的主要执行轨迹&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Week 2：Observation&lt;/td&gt;&lt;td&gt;在 Session Shutdown / Compaction 后提取结构化 Observation，保留 Event ID 和 Scope&lt;/td&gt;&lt;td&gt;能统计重复纠正、常见失败和工具使用问题&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Week 3：Reflection&lt;/td&gt;&lt;td&gt;每日生成 Candidate Profile、Skill、Harness Change；写入 REVIEW.md&lt;/td&gt;&lt;td&gt;能看到候选的证据、反例、适用范围和建议修改位置&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Week 4：Delivery &amp;amp; Evaluation&lt;/td&gt;&lt;td&gt;批准低风险候选，记录每次投放及后续结果；挑选一两个任务类别做对照&lt;/td&gt;&lt;td&gt;能证明至少一条经验减少了重复纠正或返工，且没有明显扩大到无关任务&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;第一阶段不需要改变 Agent 的 Prompt 或行为。先观察一周，统计真正重复发生的摩擦点。若没有一个问题在多个独立 Session 中重复出现，就不要为了实现“自我学习”而制造 Memory。&lt;/p&gt;
&lt;h3&gt;44.12 最终建议&lt;/h3&gt;
&lt;p&gt;针对个人使用的 Agent，最值得优先构建的是一个 &lt;strong&gt;Local-first Agent Learning Ledger&lt;/strong&gt;，而不是一个不断扩大的 Memory Prompt。&lt;/p&gt;
&lt;p&gt;推荐的组合是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 JSONL 保存本地、可回放的事件轨迹；&lt;/li&gt;
&lt;li&gt;用 SQLite 记录结构化 Observation、Preference Claim、Scope、Delivery 和 Outcome；&lt;/li&gt;
&lt;li&gt;用 Session Observer 提取本次交互中值得留下的信号；&lt;/li&gt;
&lt;li&gt;用 Daily Reflector 归纳跨 Session 的重复模式；&lt;/li&gt;
&lt;li&gt;用 Review Queue 控制哪些经验可以进入长期 Profile；&lt;/li&gt;
&lt;li&gt;用 Memory、Skill 和 Harness 分别承载判断偏好、程序性知识和确定性控制；&lt;/li&gt;
&lt;li&gt;用后续任务的结果验证经验是否真的有帮助。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最重要的不是让 Agent 记住所有对话，而是形成这样一个闭环：&lt;strong&gt;用户纠正了什么，系统据此提出了什么假设，假设被投放到哪些任务，后续结果是否支持它，以及什么时候应该撤销它。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这比每天生成一份“今天的对话总结”更接近真正的个人 Agent 个性化。&lt;/p&gt;
&lt;h2&gt;补充参考文献&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Sun et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-acl.38/&quot;&gt;Preference-Aware Memory Update for Long-Term LLM Agents&lt;/a&gt;, ACL Findings 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zhang et al. (2025), &lt;a href=&quot;https://aclanthology.org/2025.emnlp-main.1711/&quot;&gt;PRIME: Large Language Model Personalization with Cognitive Dual-Memory and Personalized Thought Process&lt;/a&gt;, EMNLP 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zhang et al. (2025), &lt;a href=&quot;https://aclanthology.org/2025.findings-acl.277/&quot;&gt;A Survey on Personalized Alignment—The Missing Piece for LLMs in Real-World Applications&lt;/a&gt;, ACL Findings 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zhang et al. (2025), &lt;a href=&quot;https://doi.org/10.1145/3748302&quot;&gt;A Survey on the Memory Mechanism of Large Language Model-based Agents&lt;/a&gt;, ACM TOIS 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hao et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2603.20939&quot;&gt;User Preference Modeling for Conversational LLM Agents: Weak Rewards from Retrieval-Augmented Interaction&lt;/a&gt;, VARS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jiang et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2607.00017&quot;&gt;Learning User-Aware Recall: Personalized Retrieval in Long-Term Conversational Memory&lt;/a&gt;, PPRO.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Chopra et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.2054/&quot;&gt;Thinking Ahead: Prospection-Guided Retrieval of Memory with Language Models&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Liu et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2608.09507&quot;&gt;Learning Preference Adaptation for LLM Personalization via Verbal Reinforcement Learning&lt;/a&gt;, AlignXada.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Liu et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1168/&quot;&gt;OP-Bench: Benchmarking Over-Personalization for Memory-Augmented Personalized Conversational Agents&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Terranova et al. (2025), &lt;a href=&quot;https://arxiv.org/abs/2510.23730&quot;&gt;Evaluating Long-Term Memory for Long-Context Question Answering&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tan et al. (2025), &lt;a href=&quot;https://aclanthology.org/2025.acl-long.413/&quot;&gt;In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents&lt;/a&gt;, ACL 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nam et al. (2026), &lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/learning-to-summarize-user-information-for-personalized-reinforcement-learning-from-human-feedback/&quot;&gt;Learning to Summarize User Information for Personalized Reinforcement Learning from Human Feedback&lt;/a&gt;, ICLR 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zhang et al. (2025), &lt;a href=&quot;https://mlanthology.org/tmlr/2025/zhang2025tmlr-personalization/&quot;&gt;Personalization of Large Language Models: A Survey&lt;/a&gt;, TMLR 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tan et al. (2025), &lt;a href=&quot;https://aclanthology.org/2025.acl-long.413/&quot;&gt;In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents&lt;/a&gt;, ACL 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Su et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-acl.1496/&quot;&gt;Beyond Dialogue Time: Temporal Semantic Memory for Personalized LLM Agents&lt;/a&gt;, Findings of ACL 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sun et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-acl.38/&quot;&gt;Preference-Aware Memory Update for Long-Term LLM Agents&lt;/a&gt;, Findings of ACL 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wang et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2608.16168&quot;&gt;QUMem: Personalized Memory for Query-Conditioned User-State Inference in LLM Agents&lt;/a&gt;, arXiv preprint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zhang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.666/&quot;&gt;Toward Robust Personalized Alignment for LLMs: Mitigating Persona Drift in Multi-Turn Dialogue&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yuan et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1744/&quot;&gt;Leaving the Past Behind: Breaking Personalization Inertia in Long-Term LLM Agents&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Chen et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-industry.189/&quot;&gt;AdaMem: Learning What to Remember with Adaptive Memory Policies for Personalized Agents&lt;/a&gt;, EMNLP 2026 Industry Track.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Guo et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2378/&quot;&gt;Towards Natural Personalization: Evaluating Long-Horizon Preference Following in Personalized User-LLM Interactions&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2419/&quot;&gt;TrustMem: Learning Trustworthy Memory Consolidation for LLM Agents with Long-Term Memory&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Schewior et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.realm-1.42/&quot;&gt;AgenticLOCI: A Multi-Agent Memory Framework for Conversational AI with Longitudinal Personalization&lt;/a&gt;, REALM 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jiang et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2607.00017&quot;&gt;Learning User-Aware Recall: Personalized Retrieval in Long-Term Conversational Memory&lt;/a&gt;, arXiv preprint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LangChain, &lt;a href=&quot;https://docs.langchain.com/oss/python/langgraph/add-memory&quot;&gt;LangGraph Memory&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LangChain, &lt;a href=&quot;https://docs.langchain.com/oss/python/langgraph/persistence&quot;&gt;LangGraph Persistence&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LangChain, &lt;a href=&quot;https://langchain-ai.github.io/langmem/concepts/conceptual_guide/&quot;&gt;LangMem Core Concepts&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Anthropic, &lt;a href=&quot;https://code.claude.com/docs/en/memory&quot;&gt;How Claude Code remembers your project&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Anthropic, &lt;a href=&quot;https://code.claude.com/docs/en/hooks&quot;&gt;Claude Code Hooks&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mem0, &lt;a href=&quot;https://github.com/mem0ai/mem0/blob/main/docs/core-concepts/how-it-works.mdx&quot;&gt;How Mem0 Works&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mem0, &lt;a href=&quot;https://github.com/mem0ai/mem0/blob/main/docs/migration/oss-v2-to-v3.mdx&quot;&gt;OSS v2 to v3 Migration&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zep, &lt;a href=&quot;https://github.com/getzep/graphiti&quot;&gt;Graphiti: Temporal Context Graphs for AI Agents&lt;/a&gt;, official repository and documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Letta, &lt;a href=&quot;https://docs.letta.com/concepts/stateful-agents&quot;&gt;Stateful Agents&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Liang et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2602.16173&quot;&gt;Learning Personalized Agents from Human Feedback&lt;/a&gt;, Meta Research / arXiv.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Li et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2604.17283&quot;&gt;HorizonBench: Long-Horizon Personalization with Evolving Preferences&lt;/a&gt;, arXiv.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Xiao et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2603.26680&quot;&gt;AlpsBench: An LLM Personalization Benchmark for Real-Dialogue Memorization and Preference Alignment&lt;/a&gt;, SIGIR 2026, DOI: 10.1145/3805712.3808634.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Uddin et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-acl.1337/&quot;&gt;From Recall to Forgetting: Benchmarking Long-Term Memory for Personalized Agents&lt;/a&gt;, Findings of ACL 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zhang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1804/&quot;&gt;MemoryCD: Benchmarking Long-Context User Memory of LLM Agents for Lifelong Cross-Domain Personalization&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Shen et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1038/&quot;&gt;HyperTrace: Hypothesis-Based Preference Tracing for Online LLM Personalization&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choi et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1891/&quot;&gt;PGMem: Tightly Coupled Persona–Memory Graph for Lifelong Personalized Agents&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yoon et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1040/&quot;&gt;BenchPreS: A Benchmark for Context-Aware Personalized Preference Selectivity of Persistent-Memory LLMs&lt;/a&gt;, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jiang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1676/&quot;&gt;VIBE-Bench: Evaluating Personalized Large Language Models When Profiles Don’t Mean Preferences&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kim et al. (2026), &lt;a href=&quot;https://proceedings.mlr.press/v306/kim26ap.html&quot;&gt;Persona2Web: Benchmarking Personalized Web Agents for Contextual Reasoning with User History&lt;/a&gt;, ICML 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.315/&quot;&gt;APeB: Benchmarking Personalization Ability of Large Language Model Agents&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cao et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2100/&quot;&gt;Beyond Retrieval: Learning Compact User Representations for Scalable LLM Personalization&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hou (2026), &lt;a href=&quot;https://arxiv.org/abs/2610.06050&quot;&gt;MATE: Adaptive Long- and Short-Term User Memory for LLM-Based Recommendation&lt;/a&gt;, arXiv.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Arustashvili and Balog (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.2207/&quot;&gt;A Survey on Natural Language User Profiles for Recommendation: Methods, Datasets, and Metrics&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Xu et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2602.22680&quot;&gt;Toward Personalized LLM-Powered Agents: Foundations, Evaluation, and Future Directions&lt;/a&gt;, arXiv survey.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OpenAI (2026), &lt;a href=&quot;https://openai.com/index/chatgpt-memory-dreaming/&quot;&gt;Dreaming: Better memory for a more helpful ChatGPT&lt;/a&gt;, product and research update, June 4, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Google (2026), &lt;a href=&quot;https://blog.google/innovation-and-ai/products/gemini-app/personal-intelligence/&quot;&gt;Personal Intelligence: Connecting Gemini to Google apps&lt;/a&gt;, product announcement, January 14, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Google (2026), &lt;a href=&quot;https://blog.google/innovation-and-ai/products/gemini-app/switch-to-gemini-app/&quot;&gt;Make the switch: Bring your AI memories and chat history to Gemini&lt;/a&gt;, product announcement, March 26, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Anthropic, &lt;a href=&quot;https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context&quot;&gt;Use Claude’s chat search and memory to build on previous context&lt;/a&gt;, official product documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft, &lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365/copilot/copilot-personalization-memory&quot;&gt;Manage Copilot personalization and memory&lt;/a&gt;, official documentation; preview status as documented.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Glean, &lt;a href=&quot;https://docs.glean.com/user-guide/assistant/memory-personalization&quot;&gt;Memory and personalization&lt;/a&gt;, official product documentation, updated October 12, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Glean, &lt;a href=&quot;https://docs.glean.com/administration/assistant/configuration/memory-personalization&quot;&gt;Configure memory settings&lt;/a&gt;, official administrator documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DoorDash Engineering, &lt;a href=&quot;https://careersatdoordash.com/blog/doordash-unified-consumer-memory-for-personalization-at-scale/&quot;&gt;Building a unified consumer memory for personalization at scale&lt;/a&gt;, June 8, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Google Cloud, &lt;a href=&quot;https://cloud.google.com/customers/att-gemini-enterprise-cx&quot;&gt;AT&amp;amp;T elevates customer experience with Gemini Enterprise for CX and BigQuery&lt;/a&gt;, customer case study.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Salesforce Engineering, &lt;a href=&quot;https://engineering.salesforce.com/ai-agents-need-memory-building-persistent-memory-for-agentforce/&quot;&gt;AI Agents Need Memory: Building Persistent Memory for Agentforce&lt;/a&gt;, October 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Google Cloud, &lt;a href=&quot;https://cloud.google.com/customers/shop-global&quot;&gt;Shop Global case study&lt;/a&gt;, AI Personal Shopper customer case study.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Barreto et al. (2025), &lt;a href=&quot;https://proceedings.neurips.cc/paper_files/paper/2025/hash/761bc7f095f927e5a5de31ed4154bb45-Abstract-Conference.html&quot;&gt;Capturing Individual Human Preferences with Reward Features&lt;/a&gt;, NeurIPS 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pukdee, Balcan and Ravikumar (2026), &lt;a href=&quot;https://proceedings.mlr.press/v306/pukdee26a.html&quot;&gt;What Does Preference Learning Recover from Pairwise Comparison Data?&lt;/a&gt;, ICML 2026 / PMLR 306.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dong, Hu and Collier (2024), &lt;a href=&quot;https://aclanthology.org/2024.findings-emnlp.592/&quot;&gt;Can LLM be a Personalized Judge?&lt;/a&gt;, Findings of EMNLP 2024.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mahmud, Nakamura and Zilberstein (2025), &lt;a href=&quot;https://ojs.aaai.org/index.php/AAAI/article/view/34964&quot;&gt;MAPLE: A Framework for Active Preference Learning Guided by Large Language Models&lt;/a&gt;, AAAI 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Qu et al. (2026), &lt;a href=&quot;https://proceedings.mlr.press/v306/qu26i.html&quot;&gt;T-POP: Test-Time Personalization with Online Preference Feedback&lt;/a&gt;, ICML 2026 / PMLR 306.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Puech, Salakhutdinov and Bertsimas (2026), &lt;a href=&quot;https://arxiv.org/abs/2610.17203&quot;&gt;Online LLM Personalization from Pairwise Preferences Across Users&lt;/a&gt;, arXiv preprint, October 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Guo et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.2378/&quot;&gt;Towards Natural Personalization: Evaluating Long-Horizon Preference Following in Personalized User-LLM Interactions&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jiang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.1676/&quot;&gt;VIBE-Bench: Evaluating Personalized Large Language Models When Profiles Don’t Mean Preferences&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yoon et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1040/&quot;&gt;BenchPreS: A Benchmark for Context-Aware Personalized Preference Selectivity of Persistent-Memory LLMs&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.679/&quot;&gt;Evaluating the Hidden Costs of Personalization in Large Language Models&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tsaknakis et al. (2025), &lt;a href=&quot;https://arxiv.org/abs/2510.17132&quot;&gt;Do LLMs Recognize Your Latent Preferences? A Benchmark for Latent Information Discovery in Personalized Interaction&lt;/a&gt;, arXiv preprint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Li et al. (2025), &lt;a href=&quot;https://mlanthology.org/iclr/2025/li2025iclr-eliciting/&quot;&gt;Eliciting Human Preferences with Language Models&lt;/a&gt;, ICLR 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Saracay, Schmidt and Guestrin (2026), &lt;a href=&quot;https://arxiv.org/abs/2606.30863&quot;&gt;Beyond Expert Users: Agents Should Help Users Construct Preferences, Not Just Elicit Them&lt;/a&gt;, arXiv preprint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Xu et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.206/&quot;&gt;Inferring the Unspoken: Aligning Embodied Agents with Implicit Preferences&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sun et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.338/&quot;&gt;LUPE: Long-History User Profile Evolution for LLM-based Recommendation&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ahn et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1804/&quot;&gt;TRACE: A Long-Term Conversational Recommendation Dataset with Evolving User Personas&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Arustashvili and Balog (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.2207/&quot;&gt;A Survey on Natural Language User Profiles for Recommendation: Methods, Datasets, and Metrics&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Poole and Jahanbakhsh (2026), &lt;a href=&quot;https://aclanthology.org/2026.emnlp-main.1600/&quot;&gt;Personalized Alignment of Language Models with Human Value Profiles&lt;/a&gt;, EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Li et al. (2026), &lt;a href=&quot;https://www.amazon.science/publications/enabling-user-agency-in-scalable-content-recommendations-with-large-language-models&quot;&gt;Enabling User Agency in Scalable Content Recommendations with Large Language Models&lt;/a&gt;, AAMAS 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Liu et al. (2026), &lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/from-hidden-profiles-to-governable-personalization-recommender-systems-in-the-age-of-llm-agents/&quot;&gt;From Hidden Profiles to Governable Personalization: Recommender Systems in the Age of LLM Agents&lt;/a&gt;, arXiv preprint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Li et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2608.10257&quot;&gt;GenRec: An LLM-Backed Recommendation Ranker at Netflix&lt;/a&gt;, arXiv preprint / Netflix Research.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Spotify, &lt;a href=&quot;https://www.spotify.com/us/safetyandprivacy/understanding-recommendations&quot;&gt;Understanding Recommendations&lt;/a&gt;, official product explanation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Spotify, &lt;a href=&quot;https://newsroom.spotify.com/2025-10-01/exclude-tracks-taste-profile/&quot;&gt;Exclude Tracks from Your Taste Profile&lt;/a&gt;, product feature announcement, October 1, 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Spotify, &lt;a href=&quot;https://newsroom.spotify.com/2026-09-23/taste-profile-shape-home-feed/&quot;&gt;Taste Profile: Shape Your Home Feed&lt;/a&gt;, product announcement, September 23, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sabouri et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2609.27183&quot;&gt;When LLM-Based User Profiling Adds Value in Production Streaming Recommendation&lt;/a&gt;, arXiv preprint, September 23, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cao et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.247/&quot;&gt;COPE: Continual Personalization of LLMs under Sparse User Feedback via User Embeddings and Self-Evaluation&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gan, Tang and Liu (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.258/&quot;&gt;Statistical Priors for Implicit Preferences: Decoupling Skill Selection as a Local Harness in Personal Agents&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.259/&quot;&gt;Beyond Isolated Behaviors: Hierarchical User Modeling for LLM Personalization&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rezk et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-emnlp.123/&quot;&gt;The Reward Model Selection Crisis in Personalized Alignment&lt;/a&gt;, Findings of EMNLP 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doi.org/10.1016/j.eij.2026.100981&quot;&gt;From reviews to preference profiles: LLM-based transfer for cross-domain recommendation&lt;/a&gt;, Egyptian Informatics Journal, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hu, Koren and Volinsky (2008), &lt;a href=&quot;https://doi.org/10.1109/ICDM.2008.22&quot;&gt;Collaborative Filtering for Implicit Feedback Datasets&lt;/a&gt;, IEEE ICDM 2008.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ziebart et al. (2008), &lt;a href=&quot;https://www.ri.cmu.edu/publications/maximum-entropy-inverse-reinforcement-learning/&quot;&gt;Maximum Entropy Inverse Reinforcement Learning&lt;/a&gt;, AAAI 2008.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nam et al. (2026), &lt;a href=&quot;https://proceedings.iclr.cc/paper_files/paper/2026/hash/c7af751b5e0a407c62ac023e3cb381f9-Abstract-Conference.html&quot;&gt;Learning to Summarize User Information for Personalized Reinforcement Learning from Human Feedback&lt;/a&gt;, ICLR 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Chen et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2510.17881&quot;&gt;POPI: Personalizing LLMs via Optimized Natural Language Preference Inference&lt;/a&gt;, TMLR, September 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bose et al. (2026), &lt;a href=&quot;https://proceedings.mlr.press/v306/bose26a.html&quot;&gt;Cold-Start Personalization via Bayesian Adaptive Questioning&lt;/a&gt;, ICML 2026 / PMLR 306.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ma et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.acl-long.1222/&quot;&gt;Personalizing LLMs with Binary Feedback: A Preference-Calibrated Optimization Framework&lt;/a&gt;, ACL 2026 Long Papers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Li, Chen, Luo and Salam (2026), &lt;a href=&quot;https://arxiv.org/abs/2610.30485&quot;&gt;Why Bother Me Again? Benchmarking Personal Agent Memory for Interaction Preferences (MemPABench)&lt;/a&gt;, arXiv preprint, October 21, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ning et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2610.34735&quot;&gt;iPrefBench: A User-Centric Benchmark for Personalized Mobile Use Agents&lt;/a&gt;, arXiv preprint, October 26, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Liang et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2602.16173&quot;&gt;Learning Personalized Agents from Human Feedback&lt;/a&gt;, Meta Research / arXiv, February 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Xu et al. (2026), &lt;a href=&quot;https://arxiv.org/abs/2602.22680&quot;&gt;Toward Personalized LLM-Powered Agents: Foundations, Evaluation, and Future Directions&lt;/a&gt;, arXiv survey, February 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lyu et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.acl-long.1669/&quot;&gt;PersonalAlign: Hierarchical Implicit Intent Alignment for Personalized GUI Agent with Long-Term User-Centric Records&lt;/a&gt;, ACL 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wang et al. (2026), &lt;a href=&quot;https://aclanthology.org/2026.findings-acl.1211/&quot;&gt;Me-Agent: A Personalized Mobile Agent with Two-Level User Habit Learning for Enhanced Interaction&lt;/a&gt;, Findings of ACL 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Huang et al. (2026), &lt;a href=&quot;https://doi.org/10.1609/aaai.v40i37.40385&quot;&gt;Mem-PAL: Towards Memory-based Personalized Dialogue Assistants for Long-term User-Agent Interaction&lt;/a&gt;, AAAI 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mastra, &lt;a href=&quot;https://mastra.ai/docs/memory/observational-memory&quot;&gt;Observational Memory&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OpenTelemetry, &lt;a href=&quot;https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-spans.md&quot;&gt;Semantic Conventions for Generative AI Spans&lt;/a&gt;, living specification, status Development.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pi, &lt;a href=&quot;https://pi.dev/docs/latest/session-format&quot;&gt;Session File Format&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;bebekim, &lt;a href=&quot;https://github.com/bebekim/learn-your-own&quot;&gt;Lyo — Learn Your Own&lt;/a&gt;, open-source experimental project, repository created May 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Joel Hooks, &lt;a href=&quot;https://joelclaw.com/observation-pipeline-persistent-ai-memory&quot;&gt;How I Built an Observation Pipeline So My AI Remembers Yesterday&lt;/a&gt;, February 15, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Letta, &lt;a href=&quot;https://docs.letta.com/configuration/memory&quot;&gt;Memory &amp;amp; Dreaming&lt;/a&gt;, official documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft, &lt;a href=&quot;https://code.visualstudio.com/docs/agents/run/memory&quot;&gt;Use Memory with Agents in VS Code&lt;/a&gt;, official documentation, updated October 28, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GitHub, &lt;a href=&quot;https://github.blog/changelog/2026-05-15-copilot-memory-supports-user-preferences-for-pro-pro-users/&quot;&gt;Copilot Memory Supports User Preferences&lt;/a&gt;, product announcement, May 15, 2026.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>RAG 一定需要 Chunk 和 Vector 吗？从检索原理到架构选型</title><link>https://devweekly.github.io/posts/rag-%E4%B8%80%E5%AE%9A%E9%9C%80%E8%A6%81-chunk-%E5%92%8C-vector-%E5%90%97%E4%BB%8E%E6%A3%80%E7%B4%A2%E5%8E%9F%E7%90%86%E5%88%B0%E6%9E%B6%E6%9E%84%E9%80%89%E5%9E%8B/</link><guid isPermaLink="true">https://devweekly.github.io/posts/rag-%E4%B8%80%E5%AE%9A%E9%9C%80%E8%A6%81-chunk-%E5%92%8C-vector-%E5%90%97%E4%BB%8E%E6%A3%80%E7%B4%A2%E5%8E%9F%E7%90%86%E5%88%B0%E6%9E%B6%E6%9E%84%E9%80%89%E5%9E%8B/</guid><description>RAG 经常被误解为 Chunking、Embedding 和 Vector Database 的组合。本文拆解分块、向量化与检索增强生成的关系，说明它们分别解决什么问题、什么时候需要，以及企业知识库应该如何选择检索架构。</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;RAG 一定需要 Chunk 和 Vector 吗？从检索原理到架构选型&lt;/h1&gt;
&lt;h2&gt;1. 一个常见的误解&lt;/h2&gt;
&lt;p&gt;谈到 Retrieval-Augmented Generation（RAG，检索增强生成），很多技术文章会直接给出一条熟悉的 Pipeline：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;加载 PDF、Word、网页等文档。&lt;/li&gt;
&lt;li&gt;将文档切分成 Chunk。&lt;/li&gt;
&lt;li&gt;使用 Embedding Model 把每个 Chunk 转换成向量。&lt;/li&gt;
&lt;li&gt;把向量和 Chunk 内容存入 Vector Database。&lt;/li&gt;
&lt;li&gt;用户提问时，将问题也转换成向量。&lt;/li&gt;
&lt;li&gt;通过向量相似度搜索找到 Top-K Chunk。&lt;/li&gt;
&lt;li&gt;把检索结果放进 Prompt，让 LLM 生成答案。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这套流程没有问题，也是非常常见的 RAG 实现。但它容易让人产生一个错误印象：只要做 RAG，就必须先 Chunk，再 Embedding，最后使用 Vector Database。&lt;/p&gt;
&lt;p&gt;实际上，这只是 RAG 的一种实现方式——以向量相似度为核心的检索增强生成。RAG 的定义并没有规定必须使用向量数据库，也没有规定所有知识都必须切成固定大小的文本块。&lt;/p&gt;
&lt;p&gt;RAG 解决的是一个更一般的问题：&lt;strong&gt;如何在生成答案之前，从模型参数之外的数据源中找到相关信息，并把这些信息作为生成依据提供给模型。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;只要系统能够完成检索、上下文增强和生成，就可以构成 RAG。检索可以来自 SQL、传统全文搜索、搜索引擎、知识图谱、API、向量搜索，也可以组合多种方式。&lt;/p&gt;
&lt;p&gt;GitHub 对 RAG 的介绍也明确指出，RAG 并不要求 Embedding 或 Vector Database；检索结果可以来自传统数据库或搜索引擎，再作为上下文交给模型。&lt;a href=&quot;https://github.blog/ai-and-ml/generative-ai/what-is-retrieval-augmented-generation-and-what-does-it-do-for-generative-ai/&quot;&gt;GitHub：What is retrieval-augmented generation?&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;2. 先把三个容易混淆的概念拆开&lt;/h2&gt;
&lt;h3&gt;2.1 Chunking：分块，解决检索粒度问题&lt;/h3&gt;
&lt;p&gt;Chunking 是把较大的内容拆成更小的内容单元。它回答的是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当用户提出一个问题时，我应该以什么粒度找到和返回知识？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;假设有一份 100 页的架构设计文档，里面包含系统背景、架构图、数据流、接口定义、部署方案和安全要求。&lt;/p&gt;
&lt;p&gt;如果检索系统只能返回整份文档，那么即使文档与问题相关，也可能把大量无关内容一起交给模型。将文档按章节、段落或主题拆分后，系统就可以只返回相关部分。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;原始文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第 1 章：业务背景&lt;/li&gt;
&lt;li&gt;第 2 章：系统上下文&lt;/li&gt;
&lt;li&gt;第 3 章：数据流&lt;/li&gt;
&lt;li&gt;第 4 章：接口设计&lt;/li&gt;
&lt;li&gt;第 5 章：安全要求&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以形成五个逻辑内容单元，也可以进一步按段落拆分。&lt;/p&gt;
&lt;p&gt;但要注意，Chunk 并不一定是固定的 500 个 Token，也不一定必须有重叠（Overlap）。Chunk 可以是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一整篇短文档；&lt;/li&gt;
&lt;li&gt;一个章节；&lt;/li&gt;
&lt;li&gt;一个自然段；&lt;/li&gt;
&lt;li&gt;一个表格；&lt;/li&gt;
&lt;li&gt;一个 API 定义；&lt;/li&gt;
&lt;li&gt;一条 FAQ；&lt;/li&gt;
&lt;li&gt;一个代码函数；&lt;/li&gt;
&lt;li&gt;一条数据库记录；&lt;/li&gt;
&lt;li&gt;一个知识图谱中的实体描述。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chunk 的本质是检索单元（Retrieval Unit），而不是某种固定的数据格式。&lt;/p&gt;
&lt;p&gt;分块粒度取决于内容结构、查询类型和检索方式。分得太大，检索结果容易包含无关内容；分得太小，定义、条件、例外和上下文可能被拆散。MongoDB 的 RAG 文档也将固定长度、递归、语言感知和语义分块列为不同策略，而不是认为存在一个适合所有文档的固定尺寸。&lt;a href=&quot;https://www.mongodb.com/docs/vector-search/tutorials/rag/&quot;&gt;MongoDB：Chunking Strategies&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;2.2 Vectorization：向量化，解决语义匹配问题&lt;/h3&gt;
&lt;p&gt;Vectorization 通常指使用 Embedding Model，将文本转换成一个数值向量。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“The application is no longer supported.”&lt;/li&gt;
&lt;li&gt;“This system has reached end of life.”&lt;/li&gt;
&lt;li&gt;“该应用已经停止厂商支持。”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;三句话使用的词汇不同，但表达的意思接近。Embedding Model 的目标是将语义相近的文本映射到向量空间中相对接近的位置。&lt;/p&gt;
&lt;p&gt;简化表示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Text&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Embedding Model&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;[0.12, -0.31, 0.87, ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当用户提出一个问题时，系统也可以将问题转换成向量，再比较问题向量与知识向量之间的距离或相似度。&lt;/p&gt;
&lt;p&gt;常见的相似度计算包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cosine Similarity（余弦相似度）&lt;/li&gt;
&lt;li&gt;Dot Product（点积）&lt;/li&gt;
&lt;li&gt;Euclidean Distance（欧氏距离）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;向量化解决的是一种特定的检索问题：&lt;strong&gt;用户使用的表达与知识库中的原始表达不完全一致，但两者在语义上可能相关。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它并不负责理解企业实体之间的真实关系，也不保证检索结果一定正确。&lt;/p&gt;
&lt;p&gt;例如，用户问：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;哪些系统已经不再获得厂商支持？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;文档中可能使用 “End of Life”、“End of Support”、“EOS” 或 “Vendor Support Discontinued”。向量检索有机会找到这些语义相关的表达。&lt;/p&gt;
&lt;p&gt;但如果用户问：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Application ID = APP-1024 的系统使用了哪个 Oracle Database 版本？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是一个明确的实体属性查询。SQL、API 或精确字段查询通常更直接、更可靠，没有必要为了这个问题先把数据转换成向量。&lt;/p&gt;
&lt;h3&gt;2.3 RAG：检索增强生成，解决外部知识如何进入模型的问题&lt;/h3&gt;
&lt;p&gt;RAG 的关键是 Retrieval、Augmentation 和 Generation：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retrieval：从外部数据源找到相关知识。&lt;/li&gt;
&lt;li&gt;Augmentation：将检索到的知识加入模型上下文。&lt;/li&gt;
&lt;li&gt;Generation：由 LLM 根据问题和上下文生成答案。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这里的 Retrieval 并没有限定具体实现。&lt;/p&gt;
&lt;p&gt;例如，系统可以先执行 SQL：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; application_name, technology_name, &lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; application_technology&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; application_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;APP-1024&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后把查询结果交给 LLM：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;根据以下应用技术清单，解释该应用使用的数据库版本及其技术风险，并指出需要进一步核实的信息。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这同样符合 RAG 的基本思想：先从外部知识源检索，再将结果作为生成依据。&lt;/p&gt;
&lt;p&gt;因此，三个概念的关系应该这样理解：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;概念&lt;/th&gt;&lt;th&gt;解决的问题&lt;/th&gt;&lt;th&gt;是否为 RAG 必需&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Chunking&lt;/td&gt;&lt;td&gt;知识以什么粒度被检索&lt;/td&gt;&lt;td&gt;不必然需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vectorization&lt;/td&gt;&lt;td&gt;如何进行语义相似度匹配&lt;/td&gt;&lt;td&gt;不需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Retrieval&lt;/td&gt;&lt;td&gt;如何找到相关外部知识&lt;/td&gt;&lt;td&gt;需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Augmentation&lt;/td&gt;&lt;td&gt;如何将检索结果提供给模型&lt;/td&gt;&lt;td&gt;需要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Generation&lt;/td&gt;&lt;td&gt;如何根据问题和检索结果生成答案&lt;/td&gt;&lt;td&gt;需要&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这里有一个容易忽略的细节：如果采用基于向量的检索，通常需要为被检索内容建立向量表示，也需要将查询转换到兼容的向量空间。但这并不意味着必须使用独立的 Vector Database。向量可以存储在支持向量索引的关系数据库或搜索引擎中。&lt;/p&gt;
&lt;h2&gt;3. 为什么经典 RAG 教程总是 Chunk + Embedding + Vector Database？&lt;/h2&gt;
&lt;p&gt;原因主要有三个。&lt;/p&gt;
&lt;h3&gt;3.1 LLM 的上下文窗口不是知识库&lt;/h3&gt;
&lt;p&gt;即使模型支持很长的 Context Window，也不代表把整个企业知识库都放进 Prompt 是合理的。&lt;/p&gt;
&lt;p&gt;假设知识库有 10 万份文档。即使模型能够处理数十万 Token，也不可能每次提问都把所有文档发送给模型。&lt;/p&gt;
&lt;p&gt;系统需要先找到相关内容，再把有限的上下文预算分配给最有价值的信息。&lt;/p&gt;
&lt;p&gt;Chunking 是一种常用的内容组织方式，可以让系统在较大语料中定位局部内容。&lt;/p&gt;
&lt;h3&gt;3.2 Embedding 让语义检索变得实用&lt;/h3&gt;
&lt;p&gt;传统关键词检索主要依赖词项匹配。例如，用户搜索 “database retirement”，可能找不到只写了 “database decommissioning” 的文档。&lt;/p&gt;
&lt;p&gt;Embedding 可以在一定程度上弥补词汇差异，让系统根据语义而不只是字面形式找到相关内容。&lt;/p&gt;
&lt;p&gt;这对于自然语言表达多样、术语不统一、问题比较开放的文档库尤其有用。&lt;/p&gt;
&lt;h3&gt;3.3 向量索引适合大规模近邻搜索&lt;/h3&gt;
&lt;p&gt;当文档和 Chunk 数量很大时，逐条计算查询向量与所有文档向量的相似度会很昂贵。&lt;/p&gt;
&lt;p&gt;向量索引和近似最近邻（Approximate Nearest Neighbor，ANN）算法可以降低搜索成本。&lt;/p&gt;
&lt;p&gt;因此，Chunk + Embedding + Vector Index 形成了一套非常自然的工程组合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chunking 决定检索单元；&lt;/li&gt;
&lt;li&gt;Embedding 提供语义表示；&lt;/li&gt;
&lt;li&gt;Vector Index 加速相似度检索。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们经常一起出现，是因为这套组合解决了大量非结构化文档检索问题，而不是因为 RAG 在定义上要求它们必须绑定。&lt;/p&gt;
&lt;h2&gt;4. 不使用 Vector，也可以实现 RAG&lt;/h2&gt;
&lt;p&gt;理解这一点最简单的方法，是看不同的检索方式。&lt;/p&gt;
&lt;h3&gt;4.1 SQL / Structured Query RAG&lt;/h3&gt;
&lt;p&gt;适用于结构化数据，例如应用资产、技术组件、业务能力、数据产品和系统依赖关系。&lt;/p&gt;
&lt;p&gt;用户问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;哪些应用使用了已经进入 EOL 阶段的技术？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;处理流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LLM 将自然语言问题转换成结构化查询意图。&lt;/li&gt;
&lt;li&gt;应用通过 SQL 查询 EA Repository。&lt;/li&gt;
&lt;li&gt;返回符合条件的应用和技术清单。&lt;/li&gt;
&lt;li&gt;LLM 根据查询结果生成解释和风险摘要。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;flowchart TD
    A[&quot;User Question&quot;] --&amp;gt; B[&quot;LLM: Intent / Query Understanding&quot;]
    B --&amp;gt; C[&quot;SQL / API Query&quot;]
    C --&amp;gt; D[&quot;Structured EA Repository&quot;]
    D --&amp;gt; E[&quot;Result Set&quot;]
    E --&amp;gt; F[&quot;LLM: Answer Generation&quot;]
    F --&amp;gt; G[&quot;Answer + Evidence&quot;]&lt;/pre&gt;
&lt;p&gt;这种方式不需要 Chunk，也不需要 Vectorization。&lt;/p&gt;
&lt;p&gt;需要注意，不能让 LLM 不受约束地执行任意 SQL。生产系统应通过语义模型、查询模板、只读权限、字段白名单和访问控制限制查询范围。&lt;/p&gt;
&lt;h3&gt;4.2 Full-text Search RAG&lt;/h3&gt;
&lt;p&gt;适用于文档、技术标准、ADR、政策、操作手册等内容。&lt;/p&gt;
&lt;p&gt;例如，用户问：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;哪些架构决策讨论过 API Gateway 的替代方案？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以使用 BM25 或其他全文检索算法，根据关键词及其统计特征查找相关文档。&lt;/p&gt;
&lt;p&gt;BM25 是经典的词项检索排序算法。它会综合考虑查询词在文档中的出现情况、文档长度等因素。&lt;/p&gt;
&lt;p&gt;一个简单流程：&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[&quot;User Question&quot;] --&amp;gt; B[&quot;Query Analysis&quot;]
    B --&amp;gt; C[&quot;Full-text Search / BM25&quot;]
    C --&amp;gt; D[&quot;Relevant Documents or Passages&quot;]
    D --&amp;gt; E[&quot;Context Assembly&quot;]
    E --&amp;gt; F[&quot;LLM&quot;]
    F --&amp;gt; G[&quot;Grounded Answer&quot;]&lt;/pre&gt;
&lt;p&gt;这里可以按章节或段落组织检索内容，但不需要向量化。&lt;/p&gt;
&lt;p&gt;对于包含大量产品名称、错误码、系统编号、技术版本和精确术语的知识库，全文检索往往非常重要。向量相似度不能代替精确匹配。&lt;/p&gt;
&lt;h3&gt;4.3 API / Tool-based Retrieval RAG&lt;/h3&gt;
&lt;p&gt;如果知识已经存在于企业系统中，直接调用系统 API 可能比把数据复制到向量数据库更合理。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LeanIX API：查询 Application、Capability、Interface。&lt;/li&gt;
&lt;li&gt;ServiceNow API：查询 CMDB 和 IT Asset。&lt;/li&gt;
&lt;li&gt;Snowflake SQL：查询 Data Product 和数据资产。&lt;/li&gt;
&lt;li&gt;Confluence API：查询架构决策文档。&lt;/li&gt;
&lt;li&gt;GitHub API：查询代码、配置和架构文档。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agent 根据问题选择合适的 API 或工具，将返回结果作为上下文交给 LLM。&lt;/p&gt;
&lt;p&gt;这类架构经常被称为 Tool-based Retrieval 或 Agentic Retrieval。它可以与 RAG 结合，但检索过程不一定是一次固定的 Vector Search。&lt;/p&gt;
&lt;h2&gt;5. 什么时候真的需要 Chunking？&lt;/h2&gt;
&lt;p&gt;Chunking 是否有必要，取决于你要检索什么，以及希望返回什么。&lt;/p&gt;























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;场景&lt;/th&gt;&lt;th&gt;是否建议 Chunk&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;短 FAQ，每条问答独立&lt;/td&gt;&lt;td&gt;通常不需要额外切分&lt;/td&gt;&lt;td&gt;每条记录已经是合适的检索单元&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;一篇较短的技术文档&lt;/td&gt;&lt;td&gt;不一定&lt;/td&gt;&lt;td&gt;整篇文档可能就是合适的检索单元&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;几百页的架构设计文档&lt;/td&gt;&lt;td&gt;通常需要&lt;/td&gt;&lt;td&gt;避免整份文档作为一个检索结果&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;很长的会议记录&lt;/td&gt;&lt;td&gt;通常需要&lt;/td&gt;&lt;td&gt;方便定位某次讨论或某个决策&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;API 文档&lt;/td&gt;&lt;td&gt;按 API / Endpoint 组织&lt;/td&gt;&lt;td&gt;需要保留接口定义、参数和返回值的完整性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;源代码&lt;/td&gt;&lt;td&gt;按函数、类、模块组织&lt;/td&gt;&lt;td&gt;不能随意按固定 Token 数切断语法结构&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数据库记录&lt;/td&gt;&lt;td&gt;通常不需要文本 Chunk&lt;/td&gt;&lt;td&gt;直接按记录、字段和关系查询&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;知识图谱&lt;/td&gt;&lt;td&gt;不一定&lt;/td&gt;&lt;td&gt;可以直接检索实体和关系&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;长篇合同&lt;/td&gt;&lt;td&gt;通常需要结构化分段&lt;/td&gt;&lt;td&gt;条款、例外、定义和引用关系需要保留&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Chunking 的真正目标不是把文本变短，而是建立合理的检索边界。&lt;/p&gt;
&lt;p&gt;尤其需要注意三个问题：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一，Chunk 不应该破坏知识的完整性。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;例如，合同中的一个条款可能引用前面的定义。如果只截取条款正文，而没有保留相关定义，模型就可能误解条款含义。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，Chunk 不应该丢失文档层级。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个段落可能只有在知道所属章节、文档标题和版本的情况下才有意义。因此 Chunk 应该保留必要的父级元数据。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，Chunk 不应该成为唯一的知识记录。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;原始文档、版本、来源、权限和完整上下文仍然需要保留。Chunk 是检索视图，不应该成为唯一的 System of Record。&lt;/p&gt;
&lt;h2&gt;6. 什么时候真的需要 Vectorization？&lt;/h2&gt;
&lt;p&gt;向量化适合解决语义相似性问题，但不是所有搜索都需要语义相似性。&lt;/p&gt;
&lt;p&gt;以下情况通常值得考虑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用户的问题和文档内容使用不同表达，但语义接近。&lt;/li&gt;
&lt;li&gt;用户不知道准确的关键词或专业术语。&lt;/li&gt;
&lt;li&gt;文档规模较大，关键词搜索的召回率不足。&lt;/li&gt;
&lt;li&gt;需要发现主题相近、表达不同的历史材料。&lt;/li&gt;
&lt;li&gt;需要进行自然语言问题与非结构化文档之间的语义匹配。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以下情况通常不需要优先引入向量检索：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查询明确的 ID、名称、版本和状态。&lt;/li&gt;
&lt;li&gt;查询数值、日期、范围和精确条件。&lt;/li&gt;
&lt;li&gt;查询已有明确关系的数据。&lt;/li&gt;
&lt;li&gt;搜索错误码、API 名称、代码符号和专有术语。&lt;/li&gt;
&lt;li&gt;查询要求完整、可审计的业务记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;还有一个重要限制：Embedding 不是事实关系引擎。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“Application A uses Oracle Database.”&lt;/li&gt;
&lt;li&gt;“Application B uses Oracle Database.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两段文本的向量可能非常接近，但这不能证明 Application A 和 Application B 存在依赖关系。&lt;/p&gt;
&lt;p&gt;同样，两个架构决策在语义上相似，也不代表它们具有相同的审批状态、适用范围或有效时间。&lt;/p&gt;
&lt;p&gt;向量相似度只能提供相关性信号，不能替代业务规则和关系约束。&lt;/p&gt;
&lt;h2&gt;7. Chunking 和 Vectorization 可以组合，但不应该被绑定&lt;/h2&gt;
&lt;p&gt;实际系统至少有下面几种组合方式：&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;内容组织方式&lt;/th&gt;&lt;th&gt;检索方式&lt;/th&gt;&lt;th&gt;典型场景&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;整篇文档&lt;/td&gt;&lt;td&gt;全文检索&lt;/td&gt;&lt;td&gt;短文档、FAQ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chunk&lt;/td&gt;&lt;td&gt;全文检索&lt;/td&gt;&lt;td&gt;长文档、ADR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;整篇文档&lt;/td&gt;&lt;td&gt;Vector Search&lt;/td&gt;&lt;td&gt;短文本、独立知识条目&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chunk&lt;/td&gt;&lt;td&gt;Vector Search&lt;/td&gt;&lt;td&gt;长文档语义检索&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;结构化记录&lt;/td&gt;&lt;td&gt;SQL / API&lt;/td&gt;&lt;td&gt;企业资产、业务数据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;实体和关系&lt;/td&gt;&lt;td&gt;Graph Query&lt;/td&gt;&lt;td&gt;依赖分析、影响分析&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chunk + Metadata&lt;/td&gt;&lt;td&gt;Hybrid Search&lt;/td&gt;&lt;td&gt;企业文档综合检索&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Hybrid Search（混合检索）通常将关键词检索与向量检索组合起来。&lt;/p&gt;
&lt;p&gt;例如，用户搜索：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Snowflake 中关于 Dynamic Table 刷新延迟的架构决策。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;系统可以并行执行：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BM25：精确匹配 Snowflake、Dynamic Table、刷新延迟。&lt;/li&gt;
&lt;li&gt;Vector Search：寻找讨论自动刷新、数据新鲜度、调度和延迟问题的相关段落。&lt;/li&gt;
&lt;li&gt;Metadata Filter：限定文档类型为 ADR，并限制适用时间和访问权限。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后融合排序结果，再交给 LLM。&lt;/p&gt;
&lt;p&gt;混合检索的价值在于两种检索方式互补，而不是 Vector Search 一定比全文检索好。Microsoft 对 Hybrid Search 的说明也采用了关键词检索与向量检索并行、再融合排序的思路。&lt;a href=&quot;https://www.microsoft.com/en-us/microsoft-cloud/blog/2025/02/04/common-retrieval-augmented-generation-rag-techniques-explained/&quot;&gt;Microsoft：Common RAG Techniques&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;8. 一个企业架构知识库的实际例子&lt;/h2&gt;
&lt;p&gt;以 Enterprise Architecture Knowledge Base 为例。&lt;/p&gt;
&lt;p&gt;假设企业的知识来源包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LeanIX：Application、Business Capability、Technology。&lt;/li&gt;
&lt;li&gt;Confluence：架构标准、设计文档。&lt;/li&gt;
&lt;li&gt;ADR Repository：架构决策记录。&lt;/li&gt;
&lt;li&gt;Snowflake：Data Product、Data Domain、数据资产。&lt;/li&gt;
&lt;li&gt;Meeting Notes：架构评审和业务讨论记录。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果一开始就把所有内容统一转换成 Chunk + Vector，可能会产生很多不必要的复杂度。&lt;/p&gt;
&lt;p&gt;更合理的方式是按照知识类型选择检索方式。&lt;/p&gt;
&lt;h3&gt;8.1 查询应用及其技术依赖&lt;/h3&gt;
&lt;p&gt;问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;哪些应用依赖 Oracle 19c？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是结构化查询。&lt;/p&gt;
&lt;p&gt;使用 Application、Technology 和 Application-Technology Relationship 进行查询即可。&lt;/p&gt;
&lt;p&gt;不需要 Chunk，也不需要 Vector。&lt;/p&gt;
&lt;h3&gt;8.2 查询架构决策&lt;/h3&gt;
&lt;p&gt;问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;过去两年，为什么我们决定从传统 ESB 转向 API Gateway？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;需要搜索 ADR、会议纪要和架构评估材料。&lt;/p&gt;
&lt;p&gt;可以先使用全文检索定位 ESB、API Gateway、替代方案等关键词，再根据需要使用向量检索查找表达不同但主题相关的讨论。&lt;/p&gt;
&lt;p&gt;这里 Chunk 有价值，Vector 也可能有价值。&lt;/p&gt;
&lt;h3&gt;8.3 查询业务影响&lt;/h3&gt;
&lt;p&gt;问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果我们淘汰某个数据库平台，会影响哪些业务能力？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是关系查询和影响分析。&lt;/p&gt;
&lt;p&gt;可以沿着以下关系查找：&lt;/p&gt;
&lt;p&gt;Application → Technology → Business Capability&lt;/p&gt;
&lt;p&gt;必要时再检索 ADR 和架构评估文档，补充淘汰决策的背景和风险。&lt;/p&gt;
&lt;p&gt;不能只依靠向量检索来推断影响范围。&lt;/p&gt;
&lt;h3&gt;8.4 查询技术标准&lt;/h3&gt;
&lt;p&gt;问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;企业是否允许新系统使用某个开源消息中间件？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以先查询 Technology Standards 的状态、适用范围和例外规则，再检索相关架构标准文档。&lt;/p&gt;
&lt;p&gt;结构化数据负责回答是否允许、是否例外；文档检索负责解释为什么以及有哪些限制。&lt;/p&gt;
&lt;p&gt;这才是企业知识库真正需要的多种检索能力协作。&lt;/p&gt;
&lt;h2&gt;9. 推荐的架构：先有知识模型，再决定检索方式&lt;/h2&gt;
&lt;p&gt;一个比较合理的架构可以这样组织：&lt;/p&gt;
&lt;pre&gt;flowchart TB
    subgraph Sources[&quot;Knowledge Sources&quot;]
        A[&quot;EA Repository&quot;]
        B[&quot;Documents / ADR&quot;]
        C[&quot;Meeting Notes&quot;]
        D[&quot;Data Platforms&quot;]
        E[&quot;External Research&quot;]
    end

    subgraph Processing[&quot;Ingestion&quot;]
        F[&quot;Connectors&quot;]
        G[&quot;Document Parsing&quot;]
        H[&quot;Entity / Relationship Extraction&quot;]
        I[&quot;Metadata / Version / ACL&quot;]
    end

    subgraph Storage[&quot;Knowledge Storage&quot;]
        J[&quot;Structured Knowledge&quot;]
        K[&quot;Original Documents&quot;]
        L[&quot;Full-text Index&quot;]
        M[&quot;Optional Chunk Index&quot;]
        N[&quot;Optional Vector Index&quot;]
    end

    subgraph Retrieval[&quot;Retrieval&quot;]
        O[&quot;SQL / API&quot;]
        P[&quot;Graph / Relationship Query&quot;]
        Q[&quot;Full-text Search&quot;]
        R[&quot;Vector Search&quot;]
    end

    S[&quot;Query Router / Agent&quot;]
    T[&quot;Context Assembly&quot;]
    U[&quot;LLM&quot;]
    V[&quot;Answer + Evidence&quot;]

    Sources --&amp;gt; F
    F --&amp;gt; G
    F --&amp;gt; H
    G --&amp;gt; K
    H --&amp;gt; J
    I --&amp;gt; J
    I --&amp;gt; K
    K --&amp;gt; L
    K -.-&amp;gt; M
    M -.-&amp;gt; N

    J --&amp;gt; O
    J --&amp;gt; P
    L --&amp;gt; Q
    N -.-&amp;gt; R

    O --&amp;gt; S
    P --&amp;gt; S
    Q --&amp;gt; S
    R -.-&amp;gt; S
    S --&amp;gt; T --&amp;gt; U --&amp;gt; V&lt;/pre&gt;
&lt;p&gt;这里有几个重要设计原则：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 原始知识和检索索引分离。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;原始文档和结构化实体是知识来源。Chunk、全文索引和向量索引都是检索用途的派生数据。索引可以重建，不应该反过来成为唯一事实来源。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 不同知识类型使用不同的检索策略。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;应用资产查询走 SQL/API；关系查询走关系模型；架构文档走全文检索；语义发现才考虑向量检索。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 检索策略由问题决定。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Query Router 或 Agent 根据问题选择检索工具。一个复杂问题可以组合多种检索方式，而不是固定执行同一条 RAG Pipeline。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. 检索结果必须保留证据。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;结果应该包含来源、文档 ID、章节、版本、更新时间和访问权限。LLM 的答案需要能够回溯到原始知识，而不是只引用一个无法解释来源的向量结果。&lt;/p&gt;
&lt;h2&gt;10. 还有一种容易忽略的情况：长上下文模型会不会让 Chunking 失去价值？&lt;/h2&gt;
&lt;p&gt;随着模型 Context Window 不断扩大，一个自然的问题是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果模型已经能一次读取几十万甚至上百万 Token，是否还需要 Chunk？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;答案是：长上下文降低了某些场景对细粒度分块的依赖，但并没有让检索问题消失。&lt;/p&gt;
&lt;p&gt;原因包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大量上下文仍然需要读取、传输和处理，存在成本与延迟。&lt;/li&gt;
&lt;li&gt;用户的问题可能只涉及文档中的一个局部。&lt;/li&gt;
&lt;li&gt;很长的上下文中，相关信息可能被无关内容淹没。&lt;/li&gt;
&lt;li&gt;不同文档可能存在版本冲突和事实冲突。&lt;/li&gt;
&lt;li&gt;需要准确定位证据并生成可追溯引用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，长上下文模型可以让系统采用不同的策略，例如直接把几份短文档作为上下文，而不必进一步切分；对于大量文档，仍然需要某种检索或筛选机制。&lt;/p&gt;
&lt;p&gt;Chunking 不是为了适应某一个固定的模型 Token 限制而存在。它更重要的价值是控制检索粒度、上下文范围和证据定位。&lt;/p&gt;
&lt;h2&gt;11. 实际项目应该如何决定？&lt;/h2&gt;
&lt;p&gt;建议按照以下顺序做技术决策。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：先判断数据是否结构化。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果数据已经存在于关系数据库、资产管理系统或业务 API 中，优先使用 SQL、API 和关系查询，不要为了 RAG 把它们全部转换成文本向量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：判断文档是否需要拆分。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果文档本身就是一个独立、短小、完整的知识条目，可以直接检索整篇内容。如果文档很长，而且用户经常只问其中某个局部，再引入 Chunking。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三步：判断关键词检索是否足够。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果用户经常使用明确的术语、系统名称、编号和技术版本，全文检索可能已经能够满足要求。&lt;/p&gt;
&lt;p&gt;如果用户的问题表达非常灵活，且经常与文档中的词汇不一致，再考虑向量检索。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四步：通过实际查询评估，而不是凭感觉引入 Vector Database。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;至少建立一组真实问题，分别测试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL / API 检索；&lt;/li&gt;
&lt;li&gt;Full-text Search；&lt;/li&gt;
&lt;li&gt;Vector Search；&lt;/li&gt;
&lt;li&gt;Hybrid Search。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比较 Recall@K、Precision@K、MRR、NDCG、答案正确性、证据完整性、响应延迟和总成本。&lt;/p&gt;
&lt;p&gt;如果向量检索没有显著改善实际结果，就没有必要为了采用 RAG 而引入它。&lt;/p&gt;
&lt;h3&gt;一个简单的决策表&lt;/h3&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;问题&lt;/th&gt;&lt;th&gt;优先选择&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;查询明确的属性和数值&lt;/td&gt;&lt;td&gt;SQL / API&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;查询实体之间的关系&lt;/td&gt;&lt;td&gt;SQL / Graph&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;查询精确术语和关键词&lt;/td&gt;&lt;td&gt;Full-text Search&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;查询语义相近但措辞不同的内容&lt;/td&gt;&lt;td&gt;Vector Search&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;同时需要精确匹配和语义召回&lt;/td&gt;&lt;td&gt;Hybrid Search&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文档很长，需要局部证据&lt;/td&gt;&lt;td&gt;Chunking&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文档短小且独立&lt;/td&gt;&lt;td&gt;整篇文档检索&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;问题需要跨多个知识源推理&lt;/td&gt;&lt;td&gt;Agentic Retrieval / 多路检索&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;12. 从业界生产实践看，RAG 已经发展出哪些架构 Pattern？&lt;/h2&gt;
&lt;p&gt;前面讨论的是概念边界。再看主流云厂商和模型公司的工程实践，会发现它们并没有把生产级 RAG 定义为单一的 Vector Search Pipeline。更准确地说，业界正在形成一组可组合的检索模式（Retrieval Patterns）。每种模式解决不同的检索质量、上下文、复杂查询和运营问题。&lt;/p&gt;
&lt;p&gt;需要区分两件事：云厂商文档展示的是各自平台支持的参考架构和产品能力；下面归纳的 Pattern 是从这些实践中抽象出来的通用设计，不代表每个项目都必须全部采用。&lt;/p&gt;
&lt;h3&gt;12.1 Hybrid Retrieval：关键词检索与语义检索互补&lt;/h3&gt;
&lt;p&gt;这是企业文档检索中非常实用的模式。&lt;/p&gt;
&lt;p&gt;关键词检索擅长精确匹配，例如系统名称、产品型号、错误码、技术版本、API 名称和法规条款；向量检索擅长处理措辞不同但语义接近的表达。两者组合可以提高召回覆盖面。&lt;/p&gt;
&lt;p&gt;常见实现是并行执行 BM25 / Full-text Search 和 Vector Search，再使用 Reciprocal Rank Fusion（RRF）融合两个结果列表。RRF 根据结果在不同排序列表中的排名进行融合，不要求两个检索引擎的原始分数处于同一尺度。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[&quot;User Query&quot;] --&amp;gt; B[&quot;Query Normalization&quot;]
    B --&amp;gt; C[&quot;Keyword / BM25 Search&quot;]
    B --&amp;gt; D[&quot;Vector Search&quot;]
    C --&amp;gt; E[&quot;Rank Fusion: RRF&quot;]
    D --&amp;gt; E
    E --&amp;gt; F[&quot;Candidate Set&quot;]
    F --&amp;gt; G[&quot;Optional Reranker&quot;]
    G --&amp;gt; H[&quot;Context Assembly&quot;]
    H --&amp;gt; I[&quot;LLM&quot;]&lt;/pre&gt;
&lt;p&gt;Microsoft Azure Architecture Center 的检索设计明确覆盖全文、向量、混合和多路搜索，并给出先扩大候选集、再用 RRF 合并、随后 Rerank、最后截取 Top-N 的实践。它也提醒，Reranker 会增加延迟，必须通过实际查询集评估准确率与成本，而不是默认开启。&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-information-retrieval&quot;&gt;Microsoft：Information Retrieval Phase&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;它说明了什么？&lt;/strong&gt; Vector Search 不是唯一检索方式。即使已经部署向量索引，关键词检索仍然有独立价值；如果知识库里有大量精确标识符，甚至应该让关键词检索承担主要工作。&lt;/p&gt;
&lt;h3&gt;12.2 Contextual Retrieval：给局部内容补上文档上下文&lt;/h3&gt;
&lt;p&gt;Chunking 有一个天然问题：切分后，片段可能失去原文中的背景。&lt;/p&gt;
&lt;p&gt;例如，一个 Chunk 只有一句：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;它在迁移完成后停止维护。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果不知道“它”指哪个系统、迁移到哪里、讨论的是哪个项目，这段文字很难被准确检索和使用。&lt;/p&gt;
&lt;p&gt;Anthropic 提出的 Contextual Retrieval 做法，是在建立索引前，让模型为每个 Chunk 生成一段简短的上下文说明，再把这段说明与原始 Chunk 一起用于检索。它还把 Contextual Embeddings 与 Contextual BM25 结合起来。其工程文章报告了在自有测试集上的实验收益，同时强调应根据语料和成本进行验证。&lt;a href=&quot;https://www.anthropic.com/engineering/contextual-retrieval&quot;&gt;Anthropic：Contextual Retrieval&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Document&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  +-- Original Chunk&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  +-- Document Context&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   Contextualized Chunk&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          +--&amp;gt; BM25 Index&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          +--&amp;gt; Embedding Index (optional)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是一种重要的区分：&lt;strong&gt;上下文补充与向量化是两件事。&lt;/strong&gt; 可以把标题、章节路径、文档摘要、实体名称和适用范围附加到 Chunk，然后只建立全文索引；只有确实需要语义召回时，才进一步生成 Embedding。&lt;/p&gt;
&lt;p&gt;对于企业架构文档，一个有效的上下文前缀可能包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文档标题、文档类型和章节路径；&lt;/li&gt;
&lt;li&gt;相关 Application、Business Capability、Technology 的规范名称和 ID；&lt;/li&gt;
&lt;li&gt;适用组织、系统边界和业务范围；&lt;/li&gt;
&lt;li&gt;文档版本、生效时间、审批状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意，自动生成的上下文只能作为检索辅助信息，不能覆盖原文，也不能被误当成已审批的业务事实。&lt;/p&gt;
&lt;h3&gt;12.3 Parent-Child Retrieval：小单元检索，大单元提供上下文&lt;/h3&gt;
&lt;p&gt;有些内容适合用较小的片段定位，却不适合只把这个小片段交给模型。&lt;/p&gt;
&lt;p&gt;例如，用户问一个架构标准中的例外条件。检索可能只需要命中一段文字，但理解例外条件还需要它所在的完整条款、章节或父级文档。&lt;/p&gt;
&lt;p&gt;Parent-Child Retrieval 将索引单元和最终上下文单元分开：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Child：较小的检索单元，用于提高定位精度。&lt;/li&gt;
&lt;li&gt;Parent：较大的上下文单元，例如完整章节、条款或文档。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;检索命中 Child 后，通过 parent ID 找回 Parent，再决定向模型提供 Parent 全文、相邻段落或一个受控窗口。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[&quot;Source Document&quot;] --&amp;gt; B[&quot;Parent Sections&quot;]
    B --&amp;gt; C[&quot;Child Passages&quot;]
    C --&amp;gt; D[&quot;Index Child Units&quot;]
    D --&amp;gt; E[&quot;Retrieve Matching Child&quot;]
    E --&amp;gt; F[&quot;Resolve Parent ID&quot;]
    F --&amp;gt; G[&quot;Load Parent / Neighbor Context&quot;]
    G --&amp;gt; H[&quot;LLM Context&quot;]&lt;/pre&gt;
&lt;p&gt;这个模式说明 Chunk 不一定是最终交给 LLM 的内容单元。索引粒度可以小，生成上下文粒度可以大。&lt;/p&gt;
&lt;p&gt;适用场景包括长篇政策、合同、技术标准、ADR、会议记录和有复杂章节层级的设计文档。实现时需要控制 Parent 的最大长度，并保留精确的页码、章节和段落定位，避免一个小片段命中后把整本手册都塞进上下文。&lt;/p&gt;
&lt;h3&gt;12.4 Metadata Filtering：先限定范围，再做相关性排序&lt;/h3&gt;
&lt;p&gt;生产检索不能只问“内容像不像”，还必须问“这条内容是否属于当前查询允许访问、且在业务上适用的范围”。&lt;/p&gt;
&lt;p&gt;典型过滤字段包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tenant / business unit；&lt;/li&gt;
&lt;li&gt;用户和角色可访问的 ACL；&lt;/li&gt;
&lt;li&gt;文档类型、系统 ID、业务域；&lt;/li&gt;
&lt;li&gt;状态（Draft、Approved、Deprecated、Superseded）；&lt;/li&gt;
&lt;li&gt;生效日期、失效日期和版本；&lt;/li&gt;
&lt;li&gt;来源系统和数据分类。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，用户询问某项当前有效的技术标准，系统不应该把已废止的旧版本仅仅因为语义相似而排在前面。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Query&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Authorization + Metadata Filter&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Keyword / Vector / Hybrid Retrieval&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Reranking&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Evidence with Source + Version + ACL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;过滤必须在数据访问边界内执行，而不能只依靠 Prompt 告诉模型“不要泄露”。如果使用向量检索，ACL 和租户过滤应由检索服务或数据层强制执行；不能先把不该访问的结果取出来，再指望模型自行忽略。&lt;/p&gt;
&lt;p&gt;对于企业知识库，权限过滤、版本有效性和来源追溯通常比再换一个 Embedding Model 更基础。&lt;/p&gt;
&lt;h3&gt;12.5 Query Routing / Query Decomposition：不是每个问题都走同一个索引&lt;/h3&gt;
&lt;p&gt;固定式 RAG 通常是收到问题后，对一个索引执行一次搜索，再把结果交给模型。它适合简单、单一来源的问题。&lt;/p&gt;
&lt;p&gt;但企业问题经常跨越多个知识源。例如：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果淘汰 Oracle 19c，会影响哪些应用和业务能力？过去有哪些 ADR 讨论过迁移风险？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个问题至少包含三类工作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查询结构化资产，找出使用 Oracle 19c 的应用。&lt;/li&gt;
&lt;li&gt;沿 Application 到 Business Capability 的关系进行影响分析。&lt;/li&gt;
&lt;li&gt;搜索 ADR 和会议记录，补充迁移决策和风险背景。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这时可以先把问题拆成子问题，再并行调用 SQL、关系查询和文档搜索，最后汇总证据。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[&quot;Complex User Question&quot;] --&amp;gt; B[&quot;Query Planner&quot;]
    B --&amp;gt; C[&quot;Subquery: Find Applications&quot;]
    B --&amp;gt; D[&quot;Subquery: Trace Business Impact&quot;]
    B --&amp;gt; E[&quot;Subquery: Search ADRs&quot;]
    C --&amp;gt; F[&quot;SQL / EA API&quot;]
    D --&amp;gt; G[&quot;Relationship Query&quot;]
    E --&amp;gt; H[&quot;Full-text / Optional Vector Search&quot;]
    F --&amp;gt; I[&quot;Evidence Aggregation&quot;]
    G --&amp;gt; I
    H --&amp;gt; I
    I --&amp;gt; J[&quot;Conflict / Coverage Check&quot;]
    J --&amp;gt; K[&quot;LLM Answer with Citations&quot;]&lt;/pre&gt;
&lt;p&gt;Microsoft Foundry 将 Agentic Retrieval 描述为一种动态检索方式：模型可以根据问题拆分多个聚焦查询、并行执行，并返回带引用和执行元数据的结构化 grounding data。Microsoft 的 Azure 架构指南也区分了固定步骤的 Standard RAG 与把检索作为工具、按需决定检索路径的 Agentic RAG。&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/foundry/concepts/retrieval-augmented-generation&quot;&gt;Microsoft Foundry：RAG and indexes&lt;/a&gt;；&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-solution-design-and-evaluation-guide&quot;&gt;Azure Architecture Center：Design and develop a RAG solution&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agentic Retrieval 并不意味着所有简单问题都需要 Agent。它引入了额外的模型调用、执行时间、成本和不可预测性。对单一索引、单轮查询，固定流程通常更容易控制；对跨数据源、多步骤问题，动态规划才更有价值。&lt;/p&gt;
&lt;h3&gt;12.6 GraphRAG：当问题依赖实体关系和全局主题时&lt;/h3&gt;
&lt;p&gt;Vector Search 擅长找语义相近的内容，但它不擅长保证多跳关系完整，也不天然理解组织、应用、技术和业务能力之间的真实依赖。&lt;/p&gt;
&lt;p&gt;GraphRAG 将知识图谱或图数据库查询与文本检索结合起来。它通常先识别实体和关系，再通过图遍历找到相关实体、关系或社区摘要，必要时再回到原始文档获取证据。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;某个支付平台的关键供应商出现风险，会影响哪些业务能力、应用和数据产品？相关架构决策是什么？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这类问题不是单纯找几段“语义相似”的文本，而是需要沿着供应商、技术组件、应用、接口、数据产品和业务能力之间的关系进行推导。&lt;/p&gt;
&lt;p&gt;Google Cloud 已提供将 Vector Search 与 Spanner Graph 结合的 GraphRAG 参考架构，同时也提供基于 AlloyDB for PostgreSQL 的向量检索架构，以及专用 Vector Search 架构。这些是不同工作负载的选项，不是要求所有 RAG 系统都部署图数据库。&lt;a href=&quot;https://docs.cloud.google.com/architecture/rag-reference-architectures&quot;&gt;Google Cloud：RAG reference architectures&lt;/a&gt;；&lt;a href=&quot;https://docs.cloud.google.com/architecture/gen-ai-graphrag-spanner&quot;&gt;Google Cloud：GraphRAG with Spanner Graph&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GraphRAG 也有成本：实体抽取、关系消歧、图更新和查询规划都需要工程投入。只有当关系查询、多跳推理或跨文档全局分析确实是主要需求时，才值得引入。关系规模和查询复杂度有限时，关系数据库的 JOIN、递归查询可能已经足够。&lt;/p&gt;
&lt;h3&gt;12.7 Long-context Retrieval：不把所有内容都切成小块&lt;/h3&gt;
&lt;p&gt;长上下文模型带来了另一种选择：对于数量有限、长度可控的文档，可以直接读取整篇文档或较大的章节，再让模型定位相关内容。&lt;/p&gt;
&lt;p&gt;这并不等于“长上下文替代所有检索”。更实际的模式是分层处理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文档数量少、内容短：直接读取原文。&lt;/li&gt;
&lt;li&gt;文档数量中等：先按标题、目录、元数据或全文索引缩小范围，再读取完整章节。&lt;/li&gt;
&lt;li&gt;文档数量很大：使用搜索索引定位候选内容，必要时再加载父级上下文。&lt;/li&gt;
&lt;li&gt;需要跨大量结构化资产：使用 SQL、API 或图查询，不要把所有记录塞进 Prompt。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Microsoft Azure 的检索指南还指出，对于某些多模态模型可以直接将图片放入 Prompt，而不是强制把图片切成文本 Chunk；也可以在预处理阶段生成图像描述。是否分块需要根据模型能力、效果和成本实测。&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-information-retrieval&quot;&gt;Microsoft：Information Retrieval Phase&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;12.8 生产级 RAG 的共同模式：索引之外还有数据治理和运营&lt;/h3&gt;
&lt;p&gt;AWS 的生产级 RAG 实践清单把文档处理、Chunk 元数据、Metadata Filter、Hybrid Search、Reranking、拒答、引用、文档级授权、敏感信息保护、监控、重试、超时、幂等处理、死信队列和评估数据集都列为需要考虑的工程问题。&lt;a href=&quot;https://builder.aws.com/content/3Jx9qmFj3eduzjyJsdk7w6Agy8n/building-a-production-ready-rag-application-on-aws-10-practical-lessons&quot;&gt;AWS Builder Center：Building a Production-Ready RAG Application&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这些实践可以归纳为几个独立于 Vector Database 的生产能力：&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;能力&lt;/th&gt;&lt;th&gt;要解决的问题&lt;/th&gt;&lt;th&gt;典型设计&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Ingestion Reliability&lt;/td&gt;&lt;td&gt;文档更新是否可靠进入知识库&lt;/td&gt;&lt;td&gt;增量同步、幂等、重试、死信队列&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Index Lifecycle&lt;/td&gt;&lt;td&gt;删除、更新、版本变更如何反映到索引&lt;/td&gt;&lt;td&gt;文档版本、索引版本、重建与回滚&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Authorization&lt;/td&gt;&lt;td&gt;用户能否看到检索结果&lt;/td&gt;&lt;td&gt;文档级 ACL、租户隔离、检索前过滤&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Provenance&lt;/td&gt;&lt;td&gt;答案来自哪里&lt;/td&gt;&lt;td&gt;Source ID、版本、章节、页码、时间戳&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Observability&lt;/td&gt;&lt;td&gt;检索为何失败&lt;/td&gt;&lt;td&gt;查询、过滤条件、候选结果、排序分数、耗时&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Evaluation&lt;/td&gt;&lt;td&gt;改动是否真的提升质量&lt;/td&gt;&lt;td&gt;固定测试集、相关性标注、回归测试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reliability&lt;/td&gt;&lt;td&gt;依赖服务故障如何处理&lt;/td&gt;&lt;td&gt;超时、重试、熔断、降级、限流&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;尤其要区分 Retrieval Evaluation 和 Answer Evaluation。检索阶段可以测 Recall@K、Precision@K、MRR、nDCG；生成阶段则要检查答案是否忠实于证据、是否完整、是否正确引用来源。只看最终答案，很难判断问题究竟来自检索还是生成。&lt;/p&gt;
&lt;p&gt;Microsoft 的 RAG 设计指南强调先准备有代表性的文档和查询集，再分别评估 Chunking、Enrichment、Embedding、Search 和最终回答。这个思路比一开始就争论 Chunk Size 或选择 Vector Database 更有工程价值。&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-solution-design-and-evaluation-guide&quot;&gt;Microsoft：RAG solution design and evaluation&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;13. 将这些 Pattern 组合成一套可落地的检索架构&lt;/h2&gt;
&lt;p&gt;实际系统通常不是在这些 Pattern 中只能选一个，而是按问题复杂度逐步组合。一个比较稳妥的默认架构是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先执行身份验证和权限范围确定。&lt;/li&gt;
&lt;li&gt;根据问题识别实体、时间、状态和查询意图。&lt;/li&gt;
&lt;li&gt;结构化问题优先走 SQL / API / 关系查询。&lt;/li&gt;
&lt;li&gt;文档问题优先走全文检索；语义召回不足时增加 Vector Search。&lt;/li&gt;
&lt;li&gt;需要多种检索时使用 Hybrid Search 和 RRF。&lt;/li&gt;
&lt;li&gt;候选结果较多或排序质量不足时再增加 Reranker。&lt;/li&gt;
&lt;li&gt;命中细粒度片段后，按需加载 Parent 或相邻上下文。&lt;/li&gt;
&lt;li&gt;多数据源、多步骤问题才启用 Query Decomposition / Agentic Retrieval。&lt;/li&gt;
&lt;li&gt;组装上下文时保留来源、版本、权限和证据位置。&lt;/li&gt;
&lt;li&gt;生成答案后检查证据覆盖和引用，并记录检索轨迹用于评估。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这套架构的关键是按需增加能力，而不是把所有组件一开始就部署齐全。&lt;/p&gt;
&lt;h2&gt;14. 业界产品架构也在说明：Vector Store 只是可选的一种基础设施&lt;/h2&gt;
&lt;p&gt;看主流云平台的参考架构，可以发现它们提供的是多种存储与检索组合：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;平台参考实践&lt;/th&gt;&lt;th&gt;主要模式&lt;/th&gt;&lt;th&gt;对架构选型的启示&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Microsoft Azure AI Search / Foundry&lt;/td&gt;&lt;td&gt;Keyword、Vector、Hybrid、Semantic Ranking、Agentic Retrieval&lt;/td&gt;&lt;td&gt;一个检索服务可以提供多种检索模式；Agent 可以动态调用检索&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Google Cloud Vector Search&lt;/td&gt;&lt;td&gt;专用向量检索基础设施&lt;/td&gt;&lt;td&gt;大规模近邻搜索是明确的独立工作负载&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Google Cloud AlloyDB for PostgreSQL&lt;/td&gt;&lt;td&gt;业务关系数据与 Embedding 可共存&lt;/td&gt;&lt;td&gt;不一定需要独立部署专用 Vector Database&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Google Cloud Spanner Graph + Vector Search&lt;/td&gt;&lt;td&gt;GraphRAG&lt;/td&gt;&lt;td&gt;关系遍历与语义检索可以组合&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AWS Production RAG&lt;/td&gt;&lt;td&gt;检索、权限、编排、监控、可靠性和评估&lt;/td&gt;&lt;td&gt;生产 RAG 是完整的软件系统，不是一个向量索引&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这些平台示例并不能证明某一种架构普遍最好。它们说明的是：存储和检索技术应由数据形态、查询负载、规模、权限、延迟和运营能力决定。&lt;/p&gt;
&lt;p&gt;对企业知识库而言，先使用已有的 PostgreSQL、搜索平台、EA Repository 和文档系统，往往比一开始增加一个独立向量平台更简单。只有当语义检索的实测收益足以抵消 Embedding 生成、索引维护、权限同步、监控和额外基础设施成本时，才值得引入向量索引。&lt;/p&gt;
&lt;h2&gt;15. 如何判断某个 Pattern 值得引入？&lt;/h2&gt;
&lt;p&gt;不要用“业界都在用”作为技术选型理由。建议准备一组真实查询，按问题类型标注正确证据，再逐项比较检索方案。&lt;/p&gt;



























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;测试问题类型&lt;/th&gt;&lt;th&gt;基线方案&lt;/th&gt;&lt;th&gt;候选增强 Pattern&lt;/th&gt;&lt;th&gt;重点观察&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;精确 ID、版本、错误码&lt;/td&gt;&lt;td&gt;SQL / BM25&lt;/td&gt;&lt;td&gt;Metadata Filter&lt;/td&gt;&lt;td&gt;精确率、漏检率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自然语言改写、同义表达&lt;/td&gt;&lt;td&gt;BM25&lt;/td&gt;&lt;td&gt;Vector / Hybrid&lt;/td&gt;&lt;td&gt;Recall@K、MRR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;片段依赖章节背景&lt;/td&gt;&lt;td&gt;普通 Chunk&lt;/td&gt;&lt;td&gt;Contextual / Parent-Child&lt;/td&gt;&lt;td&gt;证据完整性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;候选内容多且相似&lt;/td&gt;&lt;td&gt;Hybrid Top-K&lt;/td&gt;&lt;td&gt;Reranking&lt;/td&gt;&lt;td&gt;nDCG、答案相关性、延迟&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;一个问题涉及多个系统&lt;/td&gt;&lt;td&gt;单次检索&lt;/td&gt;&lt;td&gt;Query Decomposition&lt;/td&gt;&lt;td&gt;子问题覆盖率、证据遗漏&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多跳依赖和影响分析&lt;/td&gt;&lt;td&gt;文本检索&lt;/td&gt;&lt;td&gt;SQL / Graph Query&lt;/td&gt;&lt;td&gt;关系正确性、路径完整性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;受权限约束的知识查询&lt;/td&gt;&lt;td&gt;无过滤检索&lt;/td&gt;&lt;td&gt;ACL / Metadata Filtering&lt;/td&gt;&lt;td&gt;越权结果数必须为零&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;经常变化的知识&lt;/td&gt;&lt;td&gt;静态索引&lt;/td&gt;&lt;td&gt;增量同步与版本治理&lt;/td&gt;&lt;td&gt;更新延迟、过期结果率&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;至少记录以下指标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retrieval：Recall@K、Precision@K、MRR、nDCG。&lt;/li&gt;
&lt;li&gt;Generation：Faithfulness / Groundedness、Answer Relevance、Citation Correctness。&lt;/li&gt;
&lt;li&gt;Operations：P50 / P95 Latency、Token Cost、Indexing Cost、Failure Rate。&lt;/li&gt;
&lt;li&gt;Governance：ACL Violation Count、Stale Result Rate、Source Coverage。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中权限越界不能作为普通准确率指标处理，必须是零容忍的安全约束。对于其他指标，也应结合业务风险设定验收门槛。&lt;/p&gt;
&lt;p&gt;建议采用逐步实验：先建立 SQL / API 和全文检索基线，再测试 Vector、Hybrid、Reranking 或 Agentic Retrieval。每次只增加一个主要变量，保留测试集和实验配置。这样才能知道收益究竟来自哪里，也能避免把复杂度增加误判为质量提升。&lt;/p&gt;
&lt;h2&gt;16. 总结：不要把 RAG 做成 Chunk + Vector 的同义词&lt;/h2&gt;
&lt;p&gt;回到最初的问题：RAG 是否必须 Chunk 和 Vectorize？&lt;/p&gt;
&lt;p&gt;答案很明确：&lt;strong&gt;都不是 RAG 的定义性要求。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Chunking 是内容组织和检索粒度的选择；Vectorization 是语义检索的一种技术；RAG 则是将外部检索结果用于增强模型生成的整体模式。&lt;/p&gt;
&lt;p&gt;它们可以组合，也可以独立使用。&lt;/p&gt;
&lt;p&gt;在工程实践中，真正应该先回答的不是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用什么 Embedding Model？&lt;/li&gt;
&lt;li&gt;Chunk Size 应该设置为 500 还是 1000？&lt;/li&gt;
&lt;li&gt;Vector Database 应该选 Pinecone、Milvus 还是 pgvector？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我们要检索什么知识？&lt;/li&gt;
&lt;li&gt;知识当前存在哪里？&lt;/li&gt;
&lt;li&gt;数据是否结构化？&lt;/li&gt;
&lt;li&gt;用户会怎样提问？&lt;/li&gt;
&lt;li&gt;什么样的检索结果才算准确？&lt;/li&gt;
&lt;li&gt;是否需要精确匹配、语义召回或关系遍历？&lt;/li&gt;
&lt;li&gt;如何保证来源、版本、权限和证据可追溯？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先解决这些问题，再决定是否需要 Chunking、Embedding 和 Vector Database。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RAG 的核心是 Retrieval，不是 Vector。检索方式应该由知识和问题决定，而不是由某个 RAG Framework 的默认 Pipeline 决定。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/ai-and-ml/generative-ai/what-is-retrieval-augmented-generation-and-what-does-it-do-for-generative-ai/&quot;&gt;GitHub Blog — What is retrieval-augmented generation, and what does it do for generative AI?&lt;/a&gt;：明确讨论 RAG 不要求 Embedding 或 Vector Database。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/prescriptive-guidance/latest/retrieval-augmented-generation-options/what-is-rag.html&quot;&gt;AWS Prescriptive Guidance — Understanding Retrieval Augmented Generation&lt;/a&gt;：RAG 的基本过程、数据准备和向量检索架构。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/foundry/concepts/retrieval-augmented-generation&quot;&gt;Microsoft Learn — Retrieval-augmented generation (RAG) with indexes in Microsoft Foundry&lt;/a&gt;：区分 Keyword、Semantic、Vector 和 Hybrid Search，并说明检索、上下文增强和生成。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/microsoft-cloud/blog/2025/02/04/common-retrieval-augmented-generation-rag-techniques-explained/&quot;&gt;Microsoft Cloud Blog — Common retrieval-augmented generation (RAG) techniques explained&lt;/a&gt;：Chunking、Hybrid Search、Query Rewriting 和 Re-ranking。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-solution-design-and-evaluation-guide&quot;&gt;Microsoft Azure Architecture Center — Design and develop a RAG solution&lt;/a&gt;：RAG 设计、检索策略和评估方法。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mongodb.com/docs/vector-search/tutorials/rag/&quot;&gt;MongoDB — Retrieval-Augmented Generation with MongoDB Vector Search&lt;/a&gt;：不同 Chunking 策略及适用场景。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/contextual-retrieval&quot;&gt;Anthropic Engineering — Contextual Retrieval&lt;/a&gt;：Contextual Embeddings、Contextual BM25 与 Reranking 的组合实践及实验结果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.cloud.google.com/architecture/rag-reference-architectures&quot;&gt;Google Cloud Architecture Center — RAG reference architectures&lt;/a&gt;：Vector Search、AlloyDB、GraphRAG 等不同参考架构。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.cloud.google.com/architecture/gen-ai-graphrag-spanner&quot;&gt;Google Cloud Architecture Center — GraphRAG with Spanner Graph&lt;/a&gt;：图查询与向量检索组合的参考架构。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://builder.aws.com/content/3Jx9qmFj3eduzjyJsdk7w6Agy8n/building-a-production-ready-rag-application-on-aws-10-practical-lessons&quot;&gt;AWS Builder Center — Building a Production-Ready RAG Application on AWS&lt;/a&gt;：生产系统中的授权、引用、监控、可靠性和评估清单。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/foundry/concepts/retrieval-augmented-generation&quot;&gt;Microsoft Learn — RAG and indexes in Microsoft Foundry&lt;/a&gt;：Agentic Retrieval、查询分解、并行检索和索引模式。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-information-retrieval&quot;&gt;Microsoft Azure Architecture Center — Information Retrieval Phase&lt;/a&gt;：混合检索、RRF、查询分解、过滤与重排序的详细设计。&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>企业级 GPU AI Coding 平台：从 B300 集群部署到推理与 Agent 工程</title><link>https://devweekly.github.io/posts/%E4%BC%81%E4%B8%9A%E7%BA%A7-gpu-ai-coding-%E5%B9%B3%E5%8F%B0%E4%BB%8E-b300-%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2%E5%88%B0%E6%8E%A8%E7%90%86%E4%B8%8E-agent-%E5%B7%A5%E7%A8%8B/</link><guid isPermaLink="true">https://devweekly.github.io/posts/%E4%BC%81%E4%B8%9A%E7%BA%A7-gpu-ai-coding-%E5%B9%B3%E5%8F%B0%E4%BB%8E-b300-%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2%E5%88%B0%E6%8E%A8%E7%90%86%E4%B8%8E-agent-%E5%B7%A5%E7%A8%8B/</guid><description>面向企业级 AI Coding 平台的 GPU 基础设施与推理工程指南，覆盖 NVIDIA B300 / GB300、国产 GPU 与 AI 加速器、异构推理部署、Kubernetes、Agent Runtime、安全、容量规划、运维与实施路线图。</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;企业级 GPU AI Coding 平台：从 B300 集群部署到推理与 Agent 工程&lt;/h1&gt;
&lt;p&gt;本文讨论的不是在一台工作站上运行一个开源模型，而是建设一套企业内部 AI Coding 服务：模型部署在企业自有或租用的 NVIDIA GPU 集群上，向约 1000 名开发者提供统一的模型 API 和 Coding Agent 能力，并具备生产环境所需的容量、隔离、安全、监控、成本核算和故障恢复能力。&lt;/p&gt;
&lt;p&gt;这里有两个不同但必须协同设计的系统：&lt;strong&gt;GPU 推理平台&lt;/strong&gt;负责把 GPU 资源转换成稳定的模型服务；&lt;strong&gt;Coding Agent 平台&lt;/strong&gt;负责管理开发者会话、代码仓库上下文、工具调用、代码执行和任务验证。把两者混成一个应用，会让资源调度、安全责任和故障边界变得模糊。&lt;/p&gt;
&lt;p&gt;本文以 NVIDIA B300 / HGX B300 为主要讨论对象，同时解释 GB300 NVL72 的定位。硬件和软件能力以 2026 年 10 月 30 日能够查到的公开资料为准。厂商规格表示产品能力，不等于特定模型、特定量化和特定 Agent Harness 下的实测性能；容量和成本结论必须通过目标 workload 的 POC 验证。&lt;/p&gt;
&lt;h2&gt;1. 先明确部署对象：GPU、服务器节点和机架不是一回事&lt;/h2&gt;
&lt;p&gt;讨论采购时，最容易出现的错误是把 GPU 芯片、8-GPU 服务器和 rack-scale 系统都按“多少张卡”比较。它们的互联范围、网络拓扑、供电、散热、管理和租赁单位完全不同。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层次&lt;/th&gt;&lt;th&gt;典型产品&lt;/th&gt;&lt;th&gt;物理含义&lt;/th&gt;&lt;th&gt;主要架构问题&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA B300 / B200&lt;/td&gt;&lt;td&gt;单颗 GPU 加速器&lt;/td&gt;&lt;td&gt;显存容量、HBM 带宽、计算精度、功耗&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU 服务器平台&lt;/td&gt;&lt;td&gt;HGX B300&lt;/td&gt;&lt;td&gt;8 张 SXM GPU、NVLink/NVSwitch 和主机平台&lt;/td&gt;&lt;td&gt;单节点 GPU 通信、CPU/PCIe 拓扑、节点功耗&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;机架级系统&lt;/td&gt;&lt;td&gt;GB300 NVL72&lt;/td&gt;&lt;td&gt;72 张 Blackwell Ultra GPU、36 颗 Grace CPU 和 NVLink Switch&lt;/td&gt;&lt;td&gt;72-GPU scale-up 域、液冷、机架供电和集群网络&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多机架集群&lt;/td&gt;&lt;td&gt;多个 HGX 节点或多个 NVL72&lt;/td&gt;&lt;td&gt;多个节点/机架通过外部网络互联&lt;/td&gt;&lt;td&gt;RDMA Fabric、拓扑感知调度、故障域和扩展成本&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;1.1 HGX B300：适合从 8-GPU 节点构建集群&lt;/h3&gt;
&lt;p&gt;NVIDIA 的 HGX B300 参考架构包含 8 张 Blackwell Ultra GPU。官方参考架构列出的关键规格包括：&lt;/p&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;指标&lt;/th&gt;&lt;th&gt;HGX B300&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU 数量&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;单 GPU HBM3e&lt;/td&gt;&lt;td&gt;288 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;单节点 GPU 显存合计&lt;/td&gt;&lt;td&gt;约 2.30 TB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;单 GPU HBM 带宽&lt;/td&gt;&lt;td&gt;最高 8 TB/s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU 互联&lt;/td&gt;&lt;td&gt;第五代 NVLink + NVSwitch&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU-to-GPU 带宽&lt;/td&gt;&lt;td&gt;最高 1.8 TB/s（双向口径，需按厂商定义理解）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;节点 NVLink 聚合带宽&lt;/td&gt;&lt;td&gt;14.4 TB/s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scale-out 网络&lt;/td&gt;&lt;td&gt;8 个 ConnectX-8 SuperNIC，最高 800 Gb/s/adapter（具体系统实现以 OEM BOM 为准）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这里的 1.8 TB/s 是 GPU 间链路带宽口径，不应与节点聚合带宽 14.4 TB/s 混用，也不应直接与外部以太网/InfiniBand 的端口速率比较。&lt;/p&gt;
&lt;p&gt;HGX B300 的 8 张 GPU 构成高速 scale-up 域。若部署 4 台 HGX B300，虽然总共有 32 张 GPU，但并不意味着 32 张 GPU 自动成为一个 NVLink 域。跨节点的 GPU 通信要经过外部计算网络，性能取决于 NIC、交换机、布线、RDMA 配置和应用并行策略。&lt;/p&gt;
&lt;h3&gt;1.2 GB300 NVL72：机架级 scale-up 系统&lt;/h3&gt;
&lt;p&gt;GB300 NVL72 将 72 张 Blackwell Ultra GPU 和 36 颗 Grace CPU 集成在一个液冷机架系统中。NVIDIA 的参考架构描述了 18 个计算托盘，每个托盘包含 4 张 GPU；机架内通过 NVLink Switch 形成一个 72-GPU NVLink 域，官方资料列出的 NVLink 聚合带宽为 130 TB/s。该参考设计的机架功耗最高约 142 kW。&lt;/p&gt;
&lt;p&gt;这类系统的价值在于：对需要大量 GPU 间通信的超大模型或 MoE Expert Parallelism，可以把更多通信留在机架内的 NVLink 域中。但这并不自动意味着它对所有推理任务都比多个 HGX B300 节点便宜或更快。若模型能在单台 8-GPU 节点内运行，额外的机架级互联能力可能没有被充分利用。&lt;/p&gt;
&lt;p&gt;GB300 NVL72 也不是“72 张 GPU 的普通服务器”。它需要匹配的液冷设施、机架供电、CDU、液冷管路、泄漏检测、机房承重与运维流程。数据中心是否具备这些条件，可能比 GPU 软件部署本身更早成为项目约束。&lt;/p&gt;
&lt;h3&gt;1.3 B300、B200、GB300 怎么选&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方案&lt;/th&gt;&lt;th&gt;适用场景&lt;/th&gt;&lt;th&gt;主要优势&lt;/th&gt;&lt;th&gt;主要代价/限制&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;HGX B200&lt;/td&gt;&lt;td&gt;成本敏感、模型能够适配 8-GPU 节点&lt;/td&gt;&lt;td&gt;Blackwell 软件生态、显存容量相对 B300 较小&lt;/td&gt;&lt;td&gt;单 GPU 显存少于 B300，复杂模型更容易受显存约束&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;HGX B300&lt;/td&gt;&lt;td&gt;大模型推理、长上下文、较高 KV Cache 容量需求&lt;/td&gt;&lt;td&gt;288 GB HBM3e/GPU，8-GPU 节点内高速互联&lt;/td&gt;&lt;td&gt;节点价格、供电和散热成本较高&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GB300 NVL72&lt;/td&gt;&lt;td&gt;大型 MoE、跨多 GPU 的高通信推理、超大模型&lt;/td&gt;&lt;td&gt;72-GPU NVLink 域，机架级集成&lt;/td&gt;&lt;td&gt;高密度液冷和供电要求，采购与部署复杂度高&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;H200&lt;/td&gt;&lt;td&gt;作为上一代成本/可用性基准&lt;/td&gt;&lt;td&gt;供应商选择可能较多，适合做价格基线&lt;/td&gt;&lt;td&gt;显存和互联能力较新一代平台弱&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;建议不要从“1000 个开发者”直接推导出“需要多少张 B300”。&lt;/strong&gt; 先确定模型和请求形态，再比较 HGX B300 节点集群与 GB300 NVL72。对企业 Coding Agent，常见的合理起点是先租用或采购一个 8-GPU 节点做 POC，验证目标模型、量化、上下文长度和 Agent 工作流，再决定扩展方式。&lt;/p&gt;
&lt;h2&gt;2. GPU 基础设施工程：硬件清单之外还要设计什么&lt;/h2&gt;
&lt;p&gt;GPU 节点交付不等于 GPU 平台可用。生产部署至少要同时设计计算、网络、存储、管理和设施五个平面。&lt;/p&gt;
&lt;h3&gt;2.1 计算节点&lt;/h3&gt;
&lt;p&gt;每台 GPU 节点需要明确：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPU 型号、数量、SXM 形态和显存规格；&lt;/li&gt;
&lt;li&gt;CPU 型号、物理核心数、NUMA 拓扑和内存通道；&lt;/li&gt;
&lt;li&gt;GPU 到 CPU 的 PCIe Root Complex 关系；&lt;/li&gt;
&lt;li&gt;GPU、NIC、DPU 和 NVMe 的 PCIe 拓扑；&lt;/li&gt;
&lt;li&gt;本地 NVMe 容量、读写性能和故障更换方式；&lt;/li&gt;
&lt;li&gt;BMC、TPM 2.0、Secure Boot、固件版本；&lt;/li&gt;
&lt;li&gt;电源冗余、风扇或液冷方案、保修和现场响应时间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不能只接受供应商报价单中的“8×B300”。需要拿到完整 BOM、拓扑图、固件/驱动兼容矩阵、功耗范围、冷却要求和验收工具。尤其要核实 OEM 服务器的 NIC 数量、端口速率、DPU 配置、NVMe 盘位以及实际可持续功耗。&lt;/p&gt;
&lt;h3&gt;2.2 网络必须按用途分平面&lt;/h3&gt;
&lt;p&gt;GPU 集群至少有三类网络流量：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GPU Compute Fabric（East-West）&lt;/strong&gt;：节点之间的 GPU 集合通信和模型并行流量，通常使用 InfiniBand 或经过严格设计的 RoCE。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage / North-South Fabric&lt;/strong&gt;：模型权重加载、数据访问、日志和外部存储流量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Management / OOB Fabric&lt;/strong&gt;：BMC、交换机管理、节点 provisioning、运维访问和故障诊断。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要让模型通信、开发者 API、存储访问和 BMC 管理全部挤在一张普通以太网里。网络隔离不仅是安全要求，也直接影响推理性能的可预测性。&lt;/p&gt;
&lt;p&gt;对于 RoCE，需要具备以太网无损或拥塞管理方面的工程能力，包括 PFC、ECN、拥塞控制、交换机缓冲、队列和端到端验证。不能把“网卡支持 RoCE”理解成网络已经配置正确。对于 InfiniBand，需要理解 Subnet Manager、Fabric Health、端口状态、路由和链路故障诊断。&lt;/p&gt;
&lt;p&gt;网络设计应明确：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个 GPU 节点的有效上行带宽和 oversubscription；&lt;/li&gt;
&lt;li&gt;Leaf-Spine 拓扑、双平面或 rail-optimized 设计；&lt;/li&gt;
&lt;li&gt;RDMA 是否端到端启用，是否经过不支持的中间设备；&lt;/li&gt;
&lt;li&gt;NCCL 测试是否覆盖单节点、多节点和故障链路；&lt;/li&gt;
&lt;li&gt;计算 Fabric 与存储 Fabric 是否隔离；&lt;/li&gt;
&lt;li&gt;多租户场景下的带宽配额和网络策略。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.3 存储与模型分发&lt;/h3&gt;
&lt;p&gt;模型权重通常是数百 GB 到 TB 级别。扩容或故障恢复时，如果所有节点同时从远端对象存储拉取权重，模型启动时间和存储出口可能成为瓶颈。&lt;/p&gt;
&lt;p&gt;建议分层：&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;存储层&lt;/th&gt;&lt;th&gt;用途&lt;/th&gt;&lt;th&gt;设计重点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;本地 NVMe&lt;/td&gt;&lt;td&gt;模型热缓存、临时文件、编译缓存&lt;/td&gt;&lt;td&gt;容量、吞吐、节点重建后的缓存策略&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;共享高性能文件系统&lt;/td&gt;&lt;td&gt;多节点模型加载、共享数据&lt;/td&gt;&lt;td&gt;并发读、元数据性能、故障域&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对象存储&lt;/td&gt;&lt;td&gt;模型权重、数据集、日志归档、评估产物&lt;/td&gt;&lt;td&gt;生命周期、版本、校验和、访问权限&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;元数据数据库&lt;/td&gt;&lt;td&gt;模型版本、部署配置、评估记录&lt;/td&gt;&lt;td&gt;备份、事务一致性、审计&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;模型制品需要不可变版本、SHA-256 校验、来源记录、许可信息和安全扫描。生产服务不应直接依赖某个可变的 Hugging Face branch 或未经验证的下载地址。&lt;/p&gt;
&lt;h3&gt;2.4 机房设施和电力散热&lt;/h3&gt;
&lt;p&gt;B300 HGX 节点和 GB300 NVL72 的机房要求不同。尤其是 NVL72，液冷、供电和机架功率密度是项目级设计，不是服务器团队自行解决的小问题。&lt;/p&gt;
&lt;p&gt;设施评估应覆盖：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单机柜 IT 负载、峰值功率和冗余供电；&lt;/li&gt;
&lt;li&gt;UPS、PDU、母线和配电余量；&lt;/li&gt;
&lt;li&gt;液冷 CDU 容量、泵冗余、供回水温度和流量；&lt;/li&gt;
&lt;li&gt;冷却液质量、过滤、泄漏检测和应急隔离；&lt;/li&gt;
&lt;li&gt;地板承重、机柜尺寸、布线和维护空间；&lt;/li&gt;
&lt;li&gt;机房消防、环境监控和运维授权；&lt;/li&gt;
&lt;li&gt;断电、冷却故障和网络故障时的安全停机策略。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要将 GPU TDP 简单相加作为机柜最终功耗，也不要只根据产品宣传的峰值算电力预算。应以 OEM 的系统功耗、机架设计和设施工程评估为准。&lt;/p&gt;
&lt;h2&gt;3. 分布式 GPU 软件栈&lt;/h2&gt;
&lt;p&gt;软件栈需要版本化管理。GPU Driver、CUDA、Container Toolkit、NCCL、OFED/网络驱动、GPU Operator、推理引擎和模型依赖之间存在兼容关系。生产环境不能依赖“升级到最新版应该就行”。&lt;/p&gt;
&lt;h3&gt;3.1 主机操作系统与驱动&lt;/h3&gt;
&lt;p&gt;需要掌握：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linux 发行版、Kernel、systemd、udev、NUMA；&lt;/li&gt;
&lt;li&gt;NVIDIA Data Center Driver 与 CUDA Runtime/Toolkit 的兼容关系；&lt;/li&gt;
&lt;li&gt;NVIDIA Container Toolkit 和 containerd；&lt;/li&gt;
&lt;li&gt;Fabric Manager（按 GPU 平台和部署方式决定）；&lt;/li&gt;
&lt;li&gt;OFED、RDMA Core、NIC 固件和交换机软件；&lt;/li&gt;
&lt;li&gt;固件、BIOS、BMC、GPU 驱动的升级顺序和回滚方法。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要区分 CUDA Toolkit 与 CUDA Runtime，也要区分宿主机驱动和容器中的 CUDA 用户态库。容器不能替代宿主机驱动；驱动升级也不能被当成普通应用镜像升级。&lt;/p&gt;
&lt;h3&gt;3.2 Kubernetes 与 GPU Operator&lt;/h3&gt;
&lt;p&gt;Kubernetes 可以管理 GPU 工作负载，但默认调度器只知道资源请求和节点状态。它不会自动理解某个模型的 Tensor Parallel Group 是否必须落在同一个 NVLink 域，也不会天然知道跨节点通信拓扑的性能代价。&lt;/p&gt;
&lt;p&gt;NVIDIA GPU Operator 将 GPU 节点的软件栈 Kubernetes 化。官方文档列出的典型组件包括 NVIDIA Driver、Container Toolkit、Device Plugin、DCGM Exporter 和 MIG Manager。实际启用哪些组件，应根据操作系统、驱动管理方式、集群策略和 GPU 型号决定。&lt;/p&gt;
&lt;p&gt;需要掌握：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes Node Labels、Taints、Tolerations、Affinity；&lt;/li&gt;
&lt;li&gt;Device Plugin 与 GPU 资源声明；&lt;/li&gt;
&lt;li&gt;GPU Operator、ClusterPolicy、Helm；&lt;/li&gt;
&lt;li&gt;GPU 节点池和普通 CPU 节点池隔离；&lt;/li&gt;
&lt;li&gt;DaemonSet、Pod Security Admission、RBAC；&lt;/li&gt;
&lt;li&gt;GPU 拓扑感知调度和 gang scheduling；&lt;/li&gt;
&lt;li&gt;节点 drain、升级、cordon、恢复和故障隔离；&lt;/li&gt;
&lt;li&gt;多租户 GPU 配额与资源公平性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对模型推理，建议将 API Gateway、Model Router、Agent Runtime、数据库、队列和监控组件部署在 CPU 节点；GPU 节点主要运行推理引擎及必要的 GPU 管理组件。不要把所有业务服务都塞进昂贵的 GPU 节点。&lt;/p&gt;
&lt;p&gt;MIG、GPU sharing、time-slicing 和 DRA 不能混为一谈。它们的硬件支持范围、隔离强度和调度语义不同。是否可用于 B300、是否满足目标模型和安全要求，必须以对应版本的官方支持矩阵与实际测试为准。不要因为 Kubernetes 能声明共享 GPU，就把它当成硬件级安全隔离。&lt;/p&gt;
&lt;h3&gt;3.3 NCCL 与分布式通信&lt;/h3&gt;
&lt;p&gt;NCCL 是多 GPU 集合通信的重要基础。需要理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AllReduce、AllGather、ReduceScatter、Broadcast；&lt;/li&gt;
&lt;li&gt;Ring、Tree、NVLS 等通信算法概念；&lt;/li&gt;
&lt;li&gt;单节点 NVLink/NVSwitch 与跨节点 RDMA 的区别；&lt;/li&gt;
&lt;li&gt;NCCL Topology Detection；&lt;/li&gt;
&lt;li&gt;NCCL Tests、带宽与延迟测试；&lt;/li&gt;
&lt;li&gt;环境变量、接口选择、日志和故障诊断；&lt;/li&gt;
&lt;li&gt;GPU Direct RDMA、GPUDirect Storage 的适用条件。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;验收不能只运行一次 nvidia-smi。至少要分别测试：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;单 GPU CUDA 基础计算；&lt;/li&gt;
&lt;li&gt;单节点 8 GPU P2P 和 NCCL；&lt;/li&gt;
&lt;li&gt;跨节点 NCCL；&lt;/li&gt;
&lt;li&gt;GPU 与 NIC 的拓扑亲和性；&lt;/li&gt;
&lt;li&gt;节点重启、NIC 故障、交换机端口故障后的恢复。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;4. 大模型推理工程：从模型文件到稳定 API&lt;/h2&gt;
&lt;p&gt;对于 AI Coding 平台，推理工程是最直接影响体验和成本的部分。要理解模型结构、精度、并行策略、KV Cache、请求调度和服务指标。&lt;/p&gt;
&lt;h3&gt;4.1 Transformer、Dense 与 MoE&lt;/h3&gt;
&lt;p&gt;不要求平台工程师训练 Transformer，但需要理解模型推理时发生了什么：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Attention、MHA、GQA、MLA 等注意力结构；&lt;/li&gt;
&lt;li&gt;Dense 模型与 Mixture of Experts（MoE）；&lt;/li&gt;
&lt;li&gt;Tokenizer、Embedding、模型权重和模型配置；&lt;/li&gt;
&lt;li&gt;Prefill 与 Decode；&lt;/li&gt;
&lt;li&gt;KV Cache；&lt;/li&gt;
&lt;li&gt;Tensor Parallelism、Pipeline Parallelism、Data Parallelism；&lt;/li&gt;
&lt;li&gt;MoE Expert Parallelism 和 Router。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MoE 的总参数量不等于每个 Token 实际参与计算的参数量。但 Expert Routing 会产生 GPU 间 Token Dispatch / Combine 通信，因此模型的激活参数量小，并不代表它可以在少量 GPU 上高效运行。模型结构、Expert 数量、路由策略和通信拓扑都要纳入部署设计。&lt;/p&gt;
&lt;h3&gt;4.2 FP16、BF16、FP8、FP4 与量化&lt;/h3&gt;
&lt;p&gt;精度选择直接影响模型权重占用、吞吐和生成质量。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;精度/格式&lt;/th&gt;&lt;th&gt;典型用途&lt;/th&gt;&lt;th&gt;主要考虑&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;BF16 / FP16&lt;/td&gt;&lt;td&gt;精度基线、兼容性对照&lt;/td&gt;&lt;td&gt;显存占用较大，适合做质量基线&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FP8&lt;/td&gt;&lt;td&gt;高性能推理&lt;/td&gt;&lt;td&gt;需要检查模型权重和推理引擎支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FP4 / NVFP4&lt;/td&gt;&lt;td&gt;Blackwell 平台上的高压缩推理&lt;/td&gt;&lt;td&gt;需要评估量化误差、算子支持和模型质量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;INT8 / INT4 等&lt;/td&gt;&lt;td&gt;特定模型和推理路径&lt;/td&gt;&lt;td&gt;不同量化方案的精度和内核支持差异较大&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;不能只根据权重大小计算可部署性。显存还要容纳 KV Cache、CUDA Graph、激活、通信 Buffer、临时 Workspace 和运行时开销。也不能把 FP4 的理论算力直接当成生产吞吐：真实性能取决于模型结构、内核、批处理、上下文长度和通信。&lt;/p&gt;
&lt;p&gt;量化验收至少应包含：代码生成正确性、工具调用 JSON/Schema 合法率、函数参数准确率、长上下文检索、代码修改回归率和任务成功率。对 Coding Agent 来说，模型输出格式和工具调用稳定性可能比一般问答的语言流畅度更重要。&lt;/p&gt;
&lt;h3&gt;4.3 并行策略&lt;/h3&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;并行方式&lt;/th&gt;&lt;th&gt;作用&lt;/th&gt;&lt;th&gt;适用场景&lt;/th&gt;&lt;th&gt;代价&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Tensor Parallelism（TP）&lt;/td&gt;&lt;td&gt;将单层矩阵计算拆到多 GPU&lt;/td&gt;&lt;td&gt;单模型权重或计算无法高效放入单 GPU&lt;/td&gt;&lt;td&gt;每层产生通信，依赖高速互联&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pipeline Parallelism（PP）&lt;/td&gt;&lt;td&gt;将模型层拆分到不同 GPU&lt;/td&gt;&lt;td&gt;模型深度较大、需要跨节点扩展&lt;/td&gt;&lt;td&gt;Pipeline Bubble、调度和跨阶段传输&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Data Parallelism（DP）&lt;/td&gt;&lt;td&gt;复制模型副本处理更多请求&lt;/td&gt;&lt;td&gt;单个模型副本已能放入资源域，需要提高吞吐&lt;/td&gt;&lt;td&gt;增加模型副本和权重显存&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Expert Parallelism（EP）&lt;/td&gt;&lt;td&gt;将 MoE Experts 分布在多 GPU&lt;/td&gt;&lt;td&gt;MoE 模型&lt;/td&gt;&lt;td&gt;Token Dispatch / Combine 的通信成本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Context / Sequence Parallelism&lt;/td&gt;&lt;td&gt;将长序列计算拆分&lt;/td&gt;&lt;td&gt;超长上下文和特定模型结构&lt;/td&gt;&lt;td&gt;实现复杂，依赖引擎支持&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;一个实用的起点是：优先让单个模型副本使用同一台 HGX 节点内的高速 NVLink；只有模型大小、吞吐或 MoE 分布需求确实要求跨节点时，再引入跨节点并行。这个原则不是绝对规则，最终要以模型框架支持和性能测试为准。&lt;/p&gt;
&lt;h3&gt;4.4 KV Cache 决定长上下文并发能力&lt;/h3&gt;
&lt;p&gt;Coding Agent 的上下文不只是用户问题，还可能包含系统提示、工具定义、仓库文件、代码片段、终端输出、历史对话和工具结果。长上下文会显著占用 KV Cache。&lt;/p&gt;
&lt;p&gt;需要掌握：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KV Cache 的显存估算；&lt;/li&gt;
&lt;li&gt;PagedAttention 或同类分页管理机制；&lt;/li&gt;
&lt;li&gt;Prefix Caching / Automatic Prefix Caching；&lt;/li&gt;
&lt;li&gt;KV Cache 命中率、复用边界和缓存隔离；&lt;/li&gt;
&lt;li&gt;Cache Eviction、Block 管理和显存碎片；&lt;/li&gt;
&lt;li&gt;Chunked Prefill；&lt;/li&gt;
&lt;li&gt;Context Truncation / Compaction；&lt;/li&gt;
&lt;li&gt;长上下文下的 TTFT、TPOT 和并发退化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prefix Cache 的命中并非只由“前缀文本相同”决定，还受到 Tokenization、模型版本、LoRA、缓存配置和安全隔离边界影响。不同租户的缓存能否共享，必须做威胁建模和框架验证，不能为了命中率跨越数据隔离边界。&lt;/p&gt;
&lt;h3&gt;4.5 Prefill / Decode 与请求调度&lt;/h3&gt;
&lt;p&gt;Prefill 处理输入 Token，决定模型读取长上下文的计算量，通常显著影响 Time To First Token（TTFT）。Decode 逐 Token 生成输出，常受到显存带宽、KV Cache 访问和批处理调度影响，影响 Time Per Output Token（TPOT 或 ITL）。&lt;/p&gt;
&lt;p&gt;推理引擎需要处理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Continuous Batching；&lt;/li&gt;
&lt;li&gt;Dynamic / In-flight Batching；&lt;/li&gt;
&lt;li&gt;Chunked Prefill；&lt;/li&gt;
&lt;li&gt;Prefix Cache；&lt;/li&gt;
&lt;li&gt;Request Queue；&lt;/li&gt;
&lt;li&gt;最大并发和最大序列长度；&lt;/li&gt;
&lt;li&gt;长短请求的公平调度；&lt;/li&gt;
&lt;li&gt;交互请求与后台任务的优先级；&lt;/li&gt;
&lt;li&gt;超时、取消、客户端断连和请求重试。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prefill/Decode Disaggregation 可以将两阶段放到不同 GPU 池，减少阶段间干扰，但需要传输 KV Cache，并增加网络、调度和运维复杂度。它不是默认必须部署的组件。只有测量发现两阶段资源需求明显冲突，并且跨池 KV 传输成本可接受时，才值得引入。&lt;/p&gt;
&lt;h2&gt;5. 推理框架和服务层&lt;/h2&gt;
&lt;p&gt;不要先选框架再寻找模型。先列出模型、精度、并行策略、API、上下文长度和目标 SLO，再通过兼容性矩阵选择推理框架。&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;框架&lt;/th&gt;&lt;th&gt;主要定位&lt;/th&gt;&lt;th&gt;评估重点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;vLLM&lt;/td&gt;&lt;td&gt;通用 LLM serving，OpenAI-compatible API 和批处理能力&lt;/td&gt;&lt;td&gt;目标模型、Blackwell Kernel、FP8/FP4、MoE、KV Cache 和多节点支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SGLang&lt;/td&gt;&lt;td&gt;高性能结构化生成与 LLM serving&lt;/td&gt;&lt;td&gt;目标模型实现、Radix/Prefix Cache、调度、MoE 和工具调用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TensorRT-LLM&lt;/td&gt;&lt;td&gt;NVIDIA 推理优化技术栈&lt;/td&gt;&lt;td&gt;Blackwell 支持矩阵、构建流程、量化、MoE、部署复杂度和升级成本&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;截至本文日期，NVIDIA GPU Operator 官方文档显示当前 patch release 为 v26.7.2；但这不代表所有 B300 OEM 服务器、操作系统、驱动和推理框架组合都已经过生产验证。vLLM、SGLang 和 TensorRT-LLM 的能力应按具体 release、模型实现和部署配置逐项确认。&lt;/p&gt;
&lt;p&gt;建议采用一个主推理引擎和一个候选引擎，不要一开始同时运营三套生产系统。可以让 vLLM 作为首个基线，再用同样模型和请求 Trace 对比 SGLang；若 NVIDIA 优化路径带来明确收益，再评估 TensorRT-LLM。不同框架之间的性能数字只有在模型、精度、上下文、并发、硬件和 SLO 相同的情况下才有比较价值。&lt;/p&gt;
&lt;h3&gt;5.1 推理服务 API&lt;/h3&gt;
&lt;p&gt;统一 API 层至少要处理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI-compatible Chat Completions 或 Responses API（按 Coding Agent 实际协议选择）；&lt;/li&gt;
&lt;li&gt;Streaming / SSE；&lt;/li&gt;
&lt;li&gt;Tool Calling / Function Calling；&lt;/li&gt;
&lt;li&gt;JSON Schema / Structured Output；&lt;/li&gt;
&lt;li&gt;Cancellation；&lt;/li&gt;
&lt;li&gt;Model ID 和模型版本；&lt;/li&gt;
&lt;li&gt;Usage / Token Accounting；&lt;/li&gt;
&lt;li&gt;Request ID、Trace ID 和租户标识；&lt;/li&gt;
&lt;li&gt;超时、限流、重试和错误语义。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;“兼容 OpenAI API”不是充分条件。不同 Coding Agent 对 tool_calls、并行工具调用、流式事件、usage 统计、finish_reason、上下文窗口和特定 API 扩展的依赖可能不同。需要针对 Claude Code、OpenCode、Copilot SDK 或企业实际使用的 Agent Harness 建立协议兼容测试集。&lt;/p&gt;
&lt;h3&gt;5.2 Model Router&lt;/h3&gt;
&lt;p&gt;Router 不应只是随机选择一台推理服务器。它需要理解模型能力、租户策略和资源状态。&lt;/p&gt;
&lt;p&gt;路由决策可以考虑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任务类型：代码补全、解释、重构、跨文件修改、测试修复；&lt;/li&gt;
&lt;li&gt;模型能力和质量评估；&lt;/li&gt;
&lt;li&gt;上下文长度和模型窗口；&lt;/li&gt;
&lt;li&gt;用户、团队和项目配额；&lt;/li&gt;
&lt;li&gt;GPU Pool 负载、队列长度和缓存命中；&lt;/li&gt;
&lt;li&gt;SLO、请求优先级和任务截止时间；&lt;/li&gt;
&lt;li&gt;模型故障、容量不足和降级策略。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;建议把模型路由策略作为版本化配置管理，并支持 shadow traffic、canary、A/B test 和快速回滚。不要让模型自己决定可以绕过的预算、权限或安全策略。&lt;/p&gt;
&lt;h2&gt;6. 国产 GPU / AI 加速器：推理部署与开发工程&lt;/h2&gt;
&lt;p&gt;在中国境内部署企业 AI Coding 平台，需要把国产 GPU 与 AI 加速器纳入技术选型。但“国产 GPU”是产业统称，实际产品既有通用 GPU，也有 NPU、MLU、GCU 等 AI 加速器；它们不是 CUDA GPU 的等价替代品。选型不能只比较峰值算力，还要比较软件栈、模型覆盖、算子、集合通信、框架适配和生产运维能力。&lt;/p&gt;
&lt;p&gt;本节以 2026 年 10 月 31 日可查到的公开资料为准。厂商发布的模型 Day-0 适配、单卡演示或峰值性能，不代表所有模型、量化格式、长上下文、并行策略和生产负载均已验证。必须以具体芯片型号、驱动、SDK、框架分支和版本矩阵为准。&lt;/p&gt;
&lt;h3&gt;6.1 国产加速器与软件栈概览&lt;/h3&gt;





























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;厂商 / 平台&lt;/th&gt;&lt;th&gt;硬件类别&lt;/th&gt;&lt;th&gt;软件栈&lt;/th&gt;&lt;th&gt;推理框架 / 生态入口&lt;/th&gt;&lt;th&gt;工程判断&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;华为昇腾 Ascend&lt;/td&gt;&lt;td&gt;AI 处理器 / NPU&lt;/td&gt;&lt;td&gt;CANN、AscendCL、torch-npu、MindStudio、MindIE&lt;/td&gt;&lt;td&gt;vLLM Ascend、SGLang、MindIE Motor&lt;/td&gt;&lt;td&gt;官方文档体系较完整；需严格核对 CANN、驱动、固件、PyTorch 和推理框架版本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;寒武纪 MLU&lt;/td&gt;&lt;td&gt;AI 加速器&lt;/td&gt;&lt;td&gt;NeuWare、CNToolkit、CNCL、CNRT、MagicMind&lt;/td&gt;&lt;td&gt;Cambricon vLLM（vllm-mlu）&lt;/td&gt;&lt;td&gt;有基于 vLLM 插件机制的公开适配项目；模型、算子、量化和多卡能力按型号验证&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;摩尔线程 MUSA&lt;/td&gt;&lt;td&gt;全功能 GPU&lt;/td&gt;&lt;td&gt;MUSA SDK、MUSIFY 等&lt;/td&gt;&lt;td&gt;vLLM-MUSA、SGLang-MUSA&lt;/td&gt;&lt;td&gt;有 vLLM / SGLang 适配项目，适合评估通用 GPU 编程和推理框架迁移&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;沐曦 MetaX&lt;/td&gt;&lt;td&gt;通用 GPU&lt;/td&gt;&lt;td&gt;MXMACA、MACA SDK、配套 PyTorch / 算子库&lt;/td&gt;&lt;td&gt;vLLM-MACA、SGLang 适配&lt;/td&gt;&lt;td&gt;有独立开发者文档；PyTorch、Triton、FlashAttention、vLLM 通常需使用匹配的适配版本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;壁仞 Biren&lt;/td&gt;&lt;td&gt;通用 GPU&lt;/td&gt;&lt;td&gt;BIRENSUPA、TorchSUPA&lt;/td&gt;&lt;td&gt;厂商适配的 vLLM 等&lt;/td&gt;&lt;td&gt;已公开模型适配和 vLLM 推理案例；需核实目标模型、量化、并行和多节点通信&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;燧原 Enflame&lt;/td&gt;&lt;td&gt;GCU AI 加速器&lt;/td&gt;&lt;td&gt;TopsRider、torch-gcu&lt;/td&gt;&lt;td&gt;vLLM-GCU&lt;/td&gt;&lt;td&gt;有基于原生 vLLM 适配 GCU 的公开项目；确认产品型号、驱动和 TopsRider 版本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;海光 Hygon DCU&lt;/td&gt;&lt;td&gt;通用 GPU 架构的 DCU 加速器&lt;/td&gt;&lt;td&gt;DTK、HIP / ROCm 兼容层及配套工具&lt;/td&gt;&lt;td&gt;厂商适配的 PyTorch、vLLM 等版本&lt;/td&gt;&lt;td&gt;以海光当前 DTK 支持矩阵为准；不能仅凭“兼容 ROCm”推断上游组件可原样安装&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;官方入口：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hiascend.com/document&quot;&gt;昇腾文档中心&lt;/a&gt;、&lt;a href=&quot;https://www.hiascend.com/cn/developer/inference&quot;&gt;昇腾推理开发&lt;/a&gt;、&lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/&quot;&gt;vLLM Ascend 文档&lt;/a&gt;、&lt;a href=&quot;https://www.hiascend.com/document/detail/zh/mindie/310/mindiemotor/motordev/docs/zh/architecture.md&quot;&gt;MindIE Motor 文档&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cambricon.com/index.php?m=content&amp;amp;c=index&amp;amp;a=lists&amp;amp;catid=71&quot;&gt;寒武纪 NeuWare&lt;/a&gt;、&lt;a href=&quot;https://github.com/Cambricon/vllm-mlu&quot;&gt;Cambricon/vllm-mlu&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.mthreads.com/&quot;&gt;摩尔线程文档中心&lt;/a&gt;、&lt;a href=&quot;https://github.com/MooreThreads/vllm-musa&quot;&gt;MooreThreads/vllm-musa&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.metax-tech.com/&quot;&gt;沐曦开发者中心&lt;/a&gt;、&lt;a href=&quot;https://github.com/metax-maca&quot;&gt;MetaX-MACA GitHub&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.birentech.com/&quot;&gt;壁仞开发者社区&lt;/a&gt;、&lt;a href=&quot;https://www.birentech.com/news/yt4wako63dg63co6kpwpi31o/&quot;&gt;壁仞技术动态&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/EnflameTechnology/vllm-gcu&quot;&gt;Enflame/vllm-gcu&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;海光 DCU：要求供应商提供当前 DTK 开发者文档、驱动/固件兼容矩阵和对应推理框架发行包；第三方博客不能代替正式支持承诺。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.2 昇腾：CANN + PyTorch 适配层 + vLLM / MindIE&lt;/h3&gt;
&lt;p&gt;昇腾开发链路可以分为五层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;硬件与系统&lt;/strong&gt;：确认 Atlas / 昇腾服务器型号、NPU 数量、固件、驱动、操作系统和容器环境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CANN&lt;/strong&gt;：安装与设备匹配的 Toolkit、Runtime、编译器和通信组件。版本必须与驱动、固件及上层框架匹配。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;框架适配&lt;/strong&gt;：使用对应版本的 PyTorch 与 torch-npu，验证设备可见性、张量计算、算子覆盖和多卡通信。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理引擎&lt;/strong&gt;：按模型与产品支持情况选择 vLLM Ascend、SGLang 或 MindIE 组件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务层&lt;/strong&gt;：由企业 AI Gateway 统一处理身份、路由、限流、配额和审计；推理后端在支持时提供 OpenAI-compatible API。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;新项目建议优先研究 vLLM Ascend 和 SGLang 的当前适配状态。昇腾文档提供 vLLM、MindIE 等推理开发入口；MindIE 3.1.0 版本说明提示 MindIE LLM 组件暂停后续功能演进，建议关注 MindIE Motor + vLLM Ascend 的部署路径。因此不要把 MindIE 的不同子组件视为同一个生命周期，也不要不加核对地沿用旧版教程。&lt;/p&gt;
&lt;p&gt;CANN 文档中心可见 9.2.0-beta.2 等版本条目。Beta 适合开发验证，不应直接作为生产基线。生产环境应选择厂商明确发布、与目标硬件和上层框架匹配的稳定组合，并锁定软件包版本、镜像 digest 和安装记录。&lt;/p&gt;
&lt;p&gt;昇腾专项开发知识包括 torch-npu 设备与算子语义、CANN 算子库、AscendCL、GE 图编译、HCCL 集合通信、算子精度与性能调优、模型量化工具、MindStudio 调试和 Profiling。若模型存在不支持算子，应先确认是否有等价实现，再考虑框架兼容实现或自定义算子；CUDA Extension 不能直接视为 NPU 可执行代码。&lt;/p&gt;
&lt;h3&gt;6.3 DeepSeek 在国产加速器上的部署：从 V3 / R1 到 V4 系列&lt;/h3&gt;
&lt;p&gt;DeepSeek 是检验国产加速器软件栈成熟度的一个很好的压力测试，但不能把“支持 DeepSeek”理解成支持整个 DeepSeek 家族。V3 / R1、V3.2、V4-Flash、V4.1-Flash 的模型结构、权重格式、量化方式和推理优化路径不同；同一厂商也可能只在某个芯片系列、特定量化权重和指定 Runtime 版本上完成适配。&lt;/p&gt;
&lt;p&gt;截至 2026-10-31，公开资料中值得重点跟踪的路径如下。&lt;/p&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;平台 / 项目&lt;/th&gt;&lt;th&gt;已公开的 DeepSeek 适配信息&lt;/th&gt;&lt;th&gt;硬件 / 部署特征&lt;/th&gt;&lt;th&gt;证据与边界&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;昇腾 + vLLM Ascend&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;v0.30.0 教程覆盖 DeepSeek-V4-Flash 多种权重；发布说明列出 V4.1 W8A8 与 TurboQuant INT4 KV Cache&lt;/td&gt;&lt;td&gt;A2 / A3 可部署 W8A8，950DT 有 BF16 权重方案，950PR / 950DT 支持本地量化 W4A4C8；支持 P/D 分离等特性&lt;/td&gt;&lt;td&gt;V4-Pro 在支持矩阵中仍标为实验性；需按当前模型、芯片和框架版本矩阵验收，不能从 Flash 的支持状态外推&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;昇腾 + CANN Recipes&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;DeepSeek-V3.2-Exp、V4、V4.1-Flash 等模型优化样例；包括 V4 Attention-FFN 分离、DSpark 投机解码和在线 PD 分离&lt;/td&gt;&lt;td&gt;覆盖 Atlas A2 / A3 及昇腾 950PR / 950DT 等不同代际产品，具体能力按模型目录和样例脚本区分&lt;/td&gt;&lt;td&gt;这是持续更新的工程配方库，不等于每个样例都已在所有芯片、所有软件版本上完成真实模型验证；逐条查看模型目录、提交记录和验证说明&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;昇腾 + KTransformers / KT-Kernel&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;DeepSeek-V4-Flash 单 NPU 异构推理教程&lt;/td&gt;&lt;td&gt;一颗昇腾 die 承载 Attention、Dense 层和每层 32 个常驻专家；其余 224 个路由专家以 MXFP4 留在 CPU，由 KT-Kernel 的 LLAMAFILE MoE 执行&lt;/td&gt;&lt;td&gt;不是“单卡装下并运行整个模型”的传统部署。教程给出的 Atlas 800I A2 主机配置包括 192 核 Kunpeng 920、1.5 TB RAM；CPU 专家卸载的吞吐、NUMA 和内存带宽是核心约束&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;寒武纪 MLU + vLLM-MLU&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;仓库更新历史明确列出 2026-04-24 DeepSeek-V4 Day-0 支持&lt;/td&gt;&lt;td&gt;README 声明仅支持 MLU370 及以上设备，依赖寒武纪 SDK 提供的专用镜像和软件环境&lt;/td&gt;&lt;td&gt;这是厂商维护的独立 vLLM 插件仓库；Day-0 支持不代表上游 vLLM 原生支持，也不代表所有量化和并行策略都已覆盖&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;其他国产 GPU&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;本次检索没有找到足以确认所有 DeepSeek V4 / V4.1 变体均已在摩尔线程、沐曦、壁仞、燧原和海光 DCU 上形成统一、可复现生产路径的证据&lt;/td&gt;&lt;td&gt;应按具体芯片、模型变体、量化格式、框架分支和镜像逐一核实&lt;/td&gt;&lt;td&gt;新闻中的“完成适配”可能指模型加载、单轮推理、性能调优或正式产品交付，含义并不相同&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;6.3.1 昇腾：官方 vLLM-Ascend 部署路径&lt;/h4&gt;
&lt;p&gt;vLLM-Ascend 已有面向 DeepSeek-V4-Flash 的新教程，文档注明基于 vLLM-Ascend v0.30.0 验证。除了早期 v0.13.0rc3 文档中的 DeepSeek-V4-Flash-w8a8-mtp，当前教程还列出不同硬件对应的权重方案：A2 / A3 上的 W8A8，950DT（8×96 GB）上的 BF16，以及 950PR / 950DT 上通过 msmodelslim 本地量化得到的 W4A4C8 / MXFP4 混合精度权重。其资源配置不是“任意一台 8 卡昇腾服务器”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Atlas 800I A2：8 张 64 GB NPU，运行 W8A8 权重；&lt;/li&gt;
&lt;li&gt;Atlas 800I A3：8 张 128 GB NPU，运行 W8A8 权重；&lt;/li&gt;
&lt;li&gt;Atlas 950DT：官方新教程列出 8 张 96 GB NPU 的 BF16 权重方案；&lt;/li&gt;
&lt;li&gt;Atlas 950PR / 950DT：可使用 W4A4C8 / MXFP4 混合精度量化权重，量化过程和模型精度需单独验收；&lt;/li&gt;
&lt;li&gt;较早的多节点示例：至少两台 Atlas 800 A2，每台 8 张 64 GB NPU；&lt;/li&gt;
&lt;li&gt;关键推理参数涉及 Tensor Parallel、Expert Parallel、Data Parallel、MTP speculative decoding、模型长度、批处理 Token 数和 NPU 显存利用率。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;教程还提供 Prefill-Decode Disaggregation 示例。它说明大规模 MoE 推理不只是把 TP 数量调大：Prefill 和 Decode 可以使用不同资源池，通过 KV Cache 传输和调度分别优化首 Token 延迟与 Decode 吞吐。跨节点部署前，必须先验证 HCCL 通信、网卡选择、节点 IP、RDMA / RoCE 网络和模型权重共享路径。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;版本提醒：&lt;/strong&gt; v0.13.0rc3 是早期教程绑定的预发布版本，不应继续作为当前部署基线。新教程基于 v0.30.0 验证；当前发布说明进一步列出 DeepSeek-V4.1 在 Atlas 800I A2 / A3 上的 W8A8 服务、Model Runner V2、TurboQuant INT4 KV Cache、torch.compile 和 P/D 部署能力。支持矩阵对 V4-Flash 和 V4-Pro 的标记并不完全相同，V4-Pro 仍需按实验性支持处理。部署时应以目标硬件对应的最新稳定版教程、支持矩阵、容器 Tag 和 Release Notes 为准，并保留可复现的镜像 Digest。&lt;/p&gt;
&lt;h4&gt;6.3.2 昇腾：CANN Recipes 更适合做模型专项优化入口&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/hicann/cann-recipes-infer&quot;&gt;hicann/cann-recipes-infer&lt;/a&gt; 是值得加入工程资料库的项目。它不是一个新的通用推理引擎，而是围绕 CANN 平台沉淀模型推理部署和优化配方，覆盖 DeepSeek、Qwen、GLM、Hunyuan 等模型。&lt;/p&gt;
&lt;p&gt;从仓库 2026 年 10 月的提交记录可以看到几个值得关注的方向：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DeepSeek-V3.2-Exp 等模型的部署和推理样例；&lt;/li&gt;
&lt;li&gt;DeepSeek-V4.1-Flash 在昇腾 950PR / 950DT 上的适配工作；&lt;/li&gt;
&lt;li&gt;DeepSeek-V4 的 Attention-FFN Disaggregation（AFD）样例，涉及 P2P 同步、异步执行、双 Microbatch 和 ACLGraph；&lt;/li&gt;
&lt;li&gt;DeepSeek-V4 DSpark 在 Online Prefill / Decode 分离场景下的投机推理支持；&lt;/li&gt;
&lt;li&gt;CED Prefill Cutoff / Sliding-Window Bounded Replay 等模型结构相关优化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这里最重要的架构变化是：推理优化已经从“选一个 vLLM 参数”进入模型结构与执行路径层面。MoE 专家计算、Attention、Indexer、KV Cache、投机解码、Prefill / Decode 分离可能由不同 Kernel、不同设备或不同阶段协作完成。企业在引入这些优化时，必须同步验证输出正确性、Token 接受率、缓存一致性、异常恢复和多节点通信，不能只比较单次 Benchmark 的 Tokens/s。&lt;/p&gt;
&lt;h4&gt;6.3.3 昇腾：KTransformers 的 CPU / NPU 异构卸载路径&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/kvcache-ai/ktransformers/blob/main/doc/en/DeepSeek-V4-Flash_tutorial_for_Ascend_NPU.md&quot;&gt;KTransformers 的 DeepSeek-V4-Flash Ascend 教程&lt;/a&gt; 展示了另一种思路：当单张 NPU 的 HBM 无法容纳完整模型时，不是简单地把模型切到更多 NPU，而是把不同计算路径放到不同处理器上。&lt;/p&gt;
&lt;p&gt;教程中的单 NPU 方案将 Attention、Dense 层和每层 32 个常驻专家放在 NPU 上，以 W8A8 执行；其余 224 个路由专家以 MXFP4 保留在主机内存，由 KT-Kernel 的 LLAMAFILE MoE 在 CPU 上计算。教程列出的参考主机包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Atlas 800I A2（910B3）：单 die 64 GB HBM，Kunpeng 920，192 核、8 个 NUMA 节点、1.5 TB RAM；&lt;/li&gt;
&lt;li&gt;Atlas A3（910_93）：单 die 61 GB HBM，教程列出的主机为 40 核、1 个 NUMA 节点、229 GB RAM；&lt;/li&gt;
&lt;li&gt;软件环境示例：CANN Toolkit 9.0.0、Driver 25.5.1、Python 3.11，以及相互匹配的 torch / torch_npu 版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种设计的收益是降低 NPU HBM 容量要求，代价则是大量 MoE 专家计算和数据访问转移到 CPU。企业必须测量 CPU 专家执行时间、NUMA 远端内存访问、内存带宽、NPU 与 CPU 之间的数据搬运，以及整体 Decode TPOT。不能仅凭“单 NPU 可以启动”就判断它能满足 Coding Agent 的并发和交互延迟要求。&lt;/p&gt;
&lt;p&gt;还要注意该教程依赖特定的 SGLang Ascend 镜像、KTransformers Kernel 和定制 SGLang 分支；教程中甚至提醒同一个可变镜像 Tag 在不同拉取时间可能对应不同内容。生产部署必须固定 Git Commit、容器 Digest、模型权重校验和及完整依赖版本，不能只记录镜像 Tag。&lt;/p&gt;
&lt;h4&gt;6.3.4 寒武纪：vLLM-MLU 的 DeepSeek-V4 支持&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Cambricon/vllm-mlu&quot;&gt;Cambricon/vllm-mlu&lt;/a&gt; 基于 vLLM 的插件系统，为 MLU 提供推理后端。仓库 README 的更新历史列出 2026-04-24 DeepSeek-V4 Day-0 支持，并说明当前仓库仅支持 MLU370 及以上设备，运行依赖寒武纪 SDK 和配套容器。&lt;/p&gt;
&lt;p&gt;这个项目还有一个对企业平台设计有意义的地方：它展示了厂商通过 vLLM 插件机制维护独立设备后端的模式。业务服务可以继续使用 vLLM 的服务入口和常见 API，但底层算子、设备运行时、通信和容器仍由厂商栈负责。平台团队应把 vllm-mlu、它所依赖的社区 vLLM 版本和 Cambricon SDK 作为一个整体锁定，而不是单独升级其中一个 Python 包。&lt;/p&gt;
&lt;p&gt;POC 至少需要核实：DeepSeek-V4 的具体模型变体、权重格式、MLU 型号与数量、最大上下文、Prefix Cache、Chunk Prefill、Speculative Decoding、Expert Parallel、Ray 多节点部署，以及 Tool Calling 的端到端正确性。仓库列出的特性支持不应自动视为每种模型配置均已验证。&lt;/p&gt;
&lt;h4&gt;6.3.5 如何把 DeepSeek 适配结果转化为企业可用的兼容矩阵&lt;/h4&gt;
&lt;p&gt;不要在模型注册表里只写 DeepSeek-V4 supported=true。建议把适配状态拆成以下维度，并绑定到精确的软件制品：&lt;/p&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;必须记录的字段&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;模型身份&lt;/td&gt;&lt;td&gt;官方模型 ID、模型变体、权重 Commit / Revision、Tokenizer、Chat Template&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;硬件&lt;/td&gt;&lt;td&gt;厂商、芯片 SKU、单卡显存、节点卡数、节点数、CPU / NUMA、互联拓扑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数值格式&lt;/td&gt;&lt;td&gt;BF16 / FP16 / FP8 / W8A8 / W4A8 / MXFP4 / TurboQuant 等具体权重与 KV Cache 格式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;软件栈&lt;/td&gt;&lt;td&gt;OS、Kernel、驱动、固件、CANN / NeuWare / MUSA / MXMACA / DTK、PyTorch、设备插件、推理引擎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;执行模式&lt;/td&gt;&lt;td&gt;TP / PP / DP / EP、MTP / DSpark、CPU Offload、PD 分离、AFD&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;功能验证&lt;/td&gt;&lt;td&gt;Streaming、Tool Calling、JSON Schema、长上下文、停止条件、并发请求、取消和超时&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;质量与性能&lt;/td&gt;&lt;td&gt;固定评测集结果、输出差异、TTFT、TPOT、Goodput、并发、显存、CPU 内存和成本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;证据状态&lt;/td&gt;&lt;td&gt;官方教程 / 合并代码 / 厂商公告 / 社区复现 / 企业生产验收，以及最后验证日期&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;适配状态建议至少分为四级：&lt;strong&gt;代码已支持&lt;/strong&gt;、&lt;strong&gt;官方提供部署教程&lt;/strong&gt;、&lt;strong&gt;在指定硬件和版本上完成真实模型验证&lt;/strong&gt;、&lt;strong&gt;通过企业目标负载与 SLO 验收&lt;/strong&gt;。只有最后一级才能进入生产模型路由白名单。&lt;/p&gt;
&lt;p&gt;参考项目和文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/main/tutorials/models/DeepSeek-V4-Flash.html&quot;&gt;vLLM-Ascend：DeepSeek-V4-Flash 部署教程（基于 v0.30.0 验证）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/user_guide/support_matrix/supported_models.html&quot;&gt;vLLM-Ascend：DeepSeek-V4 支持矩阵&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/latest/user_guide/release_notes.html&quot;&gt;vLLM-Ascend：Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.vllm.ai/projects/ascend/en/v0.13.0/tutorials/DeepSeek-V4.html&quot;&gt;早期 v0.13.0 DeepSeek-V4 教程（历史版本）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vllm-project/vllm-ascend&quot;&gt;vllm-project/vllm-ascend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hicann/cann-recipes-infer&quot;&gt;hicann/cann-recipes-infer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kvcache-ai/ktransformers/blob/main/doc/en/DeepSeek-V4-Flash_tutorial_for_Ascend_NPU.md&quot;&gt;kvcache-ai/ktransformers：DeepSeek-V4-Flash Ascend NPU 教程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Cambricon/vllm-mlu&quot;&gt;Cambricon/vllm-mlu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.4 其他国产平台：关注厂商后端和版本绑定&lt;/h3&gt;
&lt;p&gt;国产平台逐步采用 PyTorch、vLLM 等开发者熟悉的接口，但接口相似不代表底层实现相同。常见方式是维护厂商自己的 PyTorch 发行版、设备后端、算子库、通信库和推理框架分支，或通过上游框架的 out-of-tree platform / plugin 接口接入。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;寒武纪 vLLM-MLU&lt;/strong&gt;：基于社区 vLLM 插件系统为 MLU 提供推理服务能力。检查插件对应的 vLLM 版本、MLU 型号、模型列表、量化、连续批处理、KV Cache 和多卡通信支持。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;摩尔线程 vLLM-MUSA / SGLang-MUSA&lt;/strong&gt;：分别基于 vLLM 和 SGLang 适配 MUSA。使用官方指定的软件栈、容器和依赖版本；不能把 CUDA 镜像简单替换设备挂载后就视为迁移完成。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;沐曦 MXMACA&lt;/strong&gt;：关注官方适配版 PyTorch、Triton、FlashAttention、vLLM 和 SGLang 的版本关系。第三方教程中的版本组合只能作为线索，生产环境以当前官方文档和镜像为准。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;壁仞 BIRENSUPA / TorchSUPA&lt;/strong&gt;：关注 PyTorch 代码迁移、算子覆盖和 vLLM 适配。模型 Day-0 适配只证明特定模型在特定产品和软件版本上完成了指定验证。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;燧原 TopsRider / vLLM-GCU&lt;/strong&gt;：关注 GCU 运行时、torch-gcu、集合通信、算子库和 vLLM-GCU 的版本匹配。API、流式输出、多模态、Tool Calling 和多卡推理必须在目标服务器实测。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;海光 DCU / DTK&lt;/strong&gt;：确认 DTK 与操作系统、内核、驱动、PyTorch、编译工具链及推理框架的支持矩阵。即使存在 HIP 或 ROCm 兼容接口，也要逐项确认编译器、算子、通信库和性能工具的实际支持范围。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上游 vLLM 提供 platform 抽象和 out-of-tree platform 扩展机制，厂商可以通过独立后端适配硬件。但某项功能最终是否可用，取决于后端实现，而不是 vLLM 上游 API 本身。企业应同时跟踪上游 vLLM 与厂商后端版本，避免上游升级后厂商插件尚未跟进。&lt;/p&gt;
&lt;h3&gt;6.5 从 CUDA 迁移：不是替换一个容器镜像&lt;/h3&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层面&lt;/th&gt;&lt;th&gt;CUDA 环境常见依赖&lt;/th&gt;&lt;th&gt;国产平台需要核对的内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;设备与运行时&lt;/td&gt;&lt;td&gt;CUDA Runtime、Driver、NVIDIA Container Toolkit&lt;/td&gt;&lt;td&gt;厂商 Runtime、驱动、设备插件、容器 Runtime 和设备挂载&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;深度学习框架&lt;/td&gt;&lt;td&gt;PyTorch CUDA wheel、cuDNN&lt;/td&gt;&lt;td&gt;厂商适配的 PyTorch / 设备后端、算子覆盖和版本组合&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自定义算子&lt;/td&gt;&lt;td&gt;CUDA C++、CUDA Extension、Triton、CUTLASS&lt;/td&gt;&lt;td&gt;是否有兼容实现；是否需要重写为厂商算子或自定义 Kernel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;推理引擎&lt;/td&gt;&lt;td&gt;vLLM、SGLang、TensorRT-LLM&lt;/td&gt;&lt;td&gt;厂商后端、支持的模型架构、Attention、量化和调度特性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多卡通信&lt;/td&gt;&lt;td&gt;NCCL、NVLink、InfiniBand / RoCE&lt;/td&gt;&lt;td&gt;厂商集合通信库、卡间互联、RDMA、拓扑发现和故障诊断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;可观测性&lt;/td&gt;&lt;td&gt;DCGM、NVIDIA SMI、Nsight&lt;/td&gt;&lt;td&gt;厂商健康监控、Profiler、日志、温度/功耗/显存和错误码&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;迁移路径分三类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;模型不改、替换推理后端&lt;/strong&gt;：模型结构和权重格式已被厂商引擎支持时，优先采用官方适配和部署镜像，成本最低。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;框架适配、补齐算子&lt;/strong&gt;：模型可运行但存在算子缺失、性能回退或精度差异时，定位到 PyTorch 算子、Attention、量化或自定义算子层，优先复用厂商实现。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型图或执行策略调整&lt;/strong&gt;：架构不支持、算子组合不兼容或内存行为不适配时，再考虑替换算子、调整并行策略、量化方案或模型结构。所有改动都要做输出质量回归。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;torch.cuda&lt;/code&gt; 兼容层、自动代码迁移工具或设备 API 映射只能降低初期改动，无法自动解决 CUDA Kernel、Triton Kernel、NCCL 通信、图捕获、量化内核和推理调度的语义差异。&lt;/p&gt;
&lt;h3&gt;6.6 生产部署架构：统一平台入口，隔离异构后端&lt;/h3&gt;
&lt;pre&gt;flowchart TB
    IDE[&quot;IDE / Coding Agent&quot;]
    Agent[&quot;Agent Runtime / Sandbox&quot;]
    Gateway[&quot;Unified AI Gateway / Model Router&quot;]
    Registry[&quot;Model Registry + Compatibility Matrix&quot;]
    Ascend[&quot;Ascend Pool\nCANN + vLLM Ascend / MindIE&quot;]
    GPU[&quot;MUSA / MetaX Pool\nMUSA / MXMACA + vLLM / SGLang&quot;]
    Other[&quot;MLU / GCU / DCU / Biren Pool\nVendor Runtime + Adapted Serving&quot;]
    Obs[&quot;Unified Metrics / Logs / Traces / Cost&quot;]
    IDE --&amp;gt; Agent --&amp;gt; Gateway
    Gateway --&amp;gt; Registry
    Registry --&amp;gt; Ascend
    Registry --&amp;gt; GPU
    Registry --&amp;gt; Other
    Ascend --&amp;gt; Obs
    GPU --&amp;gt; Obs
    Other --&amp;gt; Obs&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;统一 API，不强求统一底层实现&lt;/strong&gt;：统一 API、Streaming、模型别名和错误协议；后端内部允许不同 Runtime 和推理引擎。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型路由感知能力&lt;/strong&gt;：Model Registry 除模型名称外，还应记录芯片型号、框架版本、量化格式、上下文上限、Tool Calling、结构化输出、多模态和并行能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;镜像按硬件栈维护&lt;/strong&gt;：不同厂商驱动和用户态 Runtime 不宜强行放进同一个通用 GPU 镜像。采用独立、不可变的基础镜像，由统一 CI 构建与扫描。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes 统一管理，设备插件按厂商部署&lt;/strong&gt;：统一 Namespace、Quota、NetworkPolicy、发布流程；节点标签、Device Plugin、RuntimeClass、拓扑调度和监控适配按厂商实现。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent 与 GPU 解耦&lt;/strong&gt;：Agent Runtime 不应直接依赖 CUDA、CANN 或某个厂商 SDK，只调用 AI Gateway。更换模型池不应影响 Agent 生命周期和工具安全边界。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.7 POC 验收：服务启动不等于生产可用&lt;/h3&gt;




























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;验证域&lt;/th&gt;&lt;th&gt;测试内容&lt;/th&gt;&lt;th&gt;验收要求&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;安装与兼容性&lt;/td&gt;&lt;td&gt;OS、Kernel、驱动、固件、SDK、PyTorch、推理框架&lt;/td&gt;&lt;td&gt;形成可重复安装的版本锁定清单&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型覆盖&lt;/td&gt;&lt;td&gt;权重加载、Tokenizer、模型结构和自定义代码&lt;/td&gt;&lt;td&gt;无未解释的算子缺失或隐式 CPU 回退&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;功能正确性&lt;/td&gt;&lt;td&gt;普通生成、Streaming、停止词、批处理、长上下文&lt;/td&gt;&lt;td&gt;与参考实现做输出和行为对照&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Coding 能力&lt;/td&gt;&lt;td&gt;Tool Calling、并行工具调用、JSON Schema、代码生成和补丁任务&lt;/td&gt;&lt;td&gt;固定任务集成功率达到预定义门槛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;精度&lt;/td&gt;&lt;td&gt;实际支持的 BF16 / FP16 / FP8 / INT8 / INT4&lt;/td&gt;&lt;td&gt;记录质量变化、异常输出和数值误差&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;性能&lt;/td&gt;&lt;td&gt;TTFT、TPOT、吞吐、Goodput、并发、KV Cache&lt;/td&gt;&lt;td&gt;相同 SLO、上下文和到达率下比较&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多卡与网络&lt;/td&gt;&lt;td&gt;P2P、集合通信、TP / PP / EP、跨节点 RDMA&lt;/td&gt;&lt;td&gt;达到设计目标，故障可定位&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;稳定性&lt;/td&gt;&lt;td&gt;长压测、OOM、进程重启、节点维护、升级回滚&lt;/td&gt;&lt;td&gt;恢复流程可执行，无持续资源泄漏&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;运维&lt;/td&gt;&lt;td&gt;健康、错误码、温度、功耗、显存、日志和告警&lt;/td&gt;&lt;td&gt;指标可采集并关联模型请求和节点&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;供应链&lt;/td&gt;&lt;td&gt;镜像、驱动、SDK、权重、许可证和漏洞&lt;/td&gt;&lt;td&gt;有来源、版本、校验和及回滚记录&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Coding Agent 场景还要验证工具调用参数是否符合 Schema、长上下文是否丢失代码约束、模型是否能完成多轮工具闭环。模型能流畅回答，不代表它适合 Coding Agent。&lt;/p&gt;
&lt;p&gt;性能报告必须公开芯片型号与数量、节点拓扑、软件版本、模型版本、量化格式、输入输出长度分布、并发、请求到达率、缓存冷/热状态和 SLO。不同厂商各自发布的最佳成绩不能直接放在一张表里排名。&lt;/p&gt;
&lt;h3&gt;6.8 企业选型建议&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;昇腾&lt;/strong&gt;：优先验证服务器、CANN、PyTorch、vLLM Ascend / MindIE 的完整组合，以及目标模型多卡能力；重点看软件版本治理、模型覆盖和交付支持。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;摩尔线程、沐曦、壁仞&lt;/strong&gt;：作为通用 GPU 路线重点比较，检查 PyTorch / vLLM / SGLang 适配、CUDA 迁移成本、自定义 Kernel 和集群互联能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寒武纪、燧原、海光 DCU&lt;/strong&gt;：结合具体加速器定位和软件栈，核实模型覆盖、框架适配和规模化部署能力；不要仅凭设备 API 名称判断它与通用 GPU 的可替换程度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;混合部署&lt;/strong&gt;：国产算力与 NVIDIA 并存时，统一 API Gateway、模型注册、配额、日志和评测体系；按模型能力、数据驻留、成本和 SLO 路由，避免 Agent 应用直接感知设备品牌。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最终决策应比较 &lt;strong&gt;Cost per Successful Coding Task&lt;/strong&gt;，而不是单卡理论 FLOPS 或厂商宣传的 Tokens/s。模型质量、框架适配人力、算子开发成本、节点利用率、故障恢复、软件升级和供应商支持都要计入 TCO。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;6.9 国产 GPU 学习路线：把 CUDA 知识迁移过来，但不要照搬 CUDA 代码&lt;/h3&gt;
&lt;p&gt;如果已经学过前面 NVIDIA GPU、CUDA、PyTorch、NCCL 和推理框架的内容，学习国产 GPU 不需要从“什么是 GPU”重新开始。更有效的方式是保留已经掌握的并行计算、内存层次、Kernel、算子、分布式通信和推理系统知识，再逐层学习目标厂商的软件栈与硬件执行模型。&lt;/p&gt;
&lt;p&gt;但要先明确一个边界：&lt;strong&gt;CUDA 知识可以迁移，CUDA 二进制、CUDA 专有 API、NVIDIA 的硬件假设和性能经验不能直接迁移。&lt;/strong&gt; 不同国产加速器之间也不是一个统一的国产 CUDA。昇腾、摩尔线程、寒武纪、沐曦、壁仞、燧原和海光有各自的设备模型、编译器、Runtime、算子库、通信库和版本配套关系。&lt;/p&gt;
&lt;h4&gt;推荐学习顺序&lt;/h4&gt;
&lt;p&gt;建议按下面的顺序学习。不要一开始就钻进某个厂商的 Kernel 语言，也不要同时安装多家 SDK。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：先选定一套真实硬件和软件版本，建立可复现环境。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先选一个准备实际部署的目标平台，例如 Atlas 昇腾、摩尔线程服务器 GPU 或寒武纪 MLU。记录具体芯片 SKU、服务器型号、CPU 架构、OS / Kernel、驱动、固件、SDK、PyTorch、推理框架和容器版本。优先使用厂商提供的开发容器或经过验证的整机环境，先完成设备识别、设备信息查询、内存分配、简单计算和多卡可见性检查。&lt;/p&gt;
&lt;p&gt;这一阶段的目标不是调性能，而是形成一份可以复现的环境清单。驱动、固件、编译器、Runtime、框架插件往往存在严格的版本配套关系；不要把不同教程中的安装命令拼成一个环境。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：从 PyTorch 迁移开始，先让熟悉的模型跑起来。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先学习目标平台的 PyTorch 后端，复用熟悉的 Tensor、Module、Autograd、Optimizer、AMP 和 Distributed API。把一个已经在 NVIDIA GPU 上跑通的模型迁移过来，验证模型加载、前向、反向、保存恢复、混合精度和多卡训练 / 推理。&lt;/p&gt;
&lt;p&gt;主要入口因平台而异：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;昇腾：PyTorch + &lt;code&gt;torch_npu&lt;/code&gt;，重点理解 &lt;code&gt;torch.npu&lt;/code&gt;、算子支持情况、设备内存和 HCCL 分布式通信；&lt;/li&gt;
&lt;li&gt;摩尔线程：PyTorch + &lt;code&gt;torch_musa&lt;/code&gt;，重点理解 &lt;code&gt;torch.musa&lt;/code&gt;、MUSA SDK 和 MCCL；其 CUDA 迁移工具可以降低部分代码改造量；&lt;/li&gt;
&lt;li&gt;寒武纪：PyTorch + &lt;code&gt;torch_mlu&lt;/code&gt;，先掌握 CNToolkit、CNNL、CNCL 和官方 PyTorch Container 的依赖关系；&lt;/li&gt;
&lt;li&gt;沐曦、壁仞、燧原、海光 DCU：先从各自官方 PyTorch 适配层和经过验证的容器开始，不要因为接口看起来类似 CUDA 就假定第三方扩展都能直接使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一阶段应优先修复代码中的 CUDA 假设，例如硬编码的 &lt;code&gt;&quot;cuda&quot;&lt;/code&gt;、&lt;code&gt;.cuda()&lt;/code&gt;、&lt;code&gt;torch.cuda.*&lt;/code&gt;、自定义 CUDA Extension、NCCL backend 和只支持 CUDA 的第三方库。把设备选择、通信后端、AMP 和算子能力封装在平台适配层中，而不是在业务代码里散落厂商判断。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三步：学习推理框架和模型部署，不要急着自己写算子。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先使用目标平台已有的 vLLM、SGLang、厂商推理引擎或模型部署配方，跑通一个实际 LLM。重点观察模型权重格式、量化方式、Tokenizer / Chat Template、KV Cache、Continuous Batching、TP / PP / EP、Prefill / Decode、Speculative Decoding 和多节点通信。&lt;/p&gt;
&lt;p&gt;以 DeepSeek 为练习对象时，应该选定具体模型变体和权重格式，例如 V4-Flash 的指定 W8A8 或 MXFP4 路径，而不是笼统地测试“DeepSeek”。确认服务可以启动后，还要验证 Streaming、Tool Calling、JSON 输出、长上下文、并发、TTFT、TPOT、Goodput 和错误恢复。先使用已有高性能 Kernel 和算子库，明确瓶颈之后再决定是否需要自己开发算子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四步：补齐目标平台的 Runtime、内存和通信模型。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这一阶段相当于把 CUDA Runtime、Driver API、cuBLAS / cuDNN、NCCL 的知识映射到目标平台，但不要只记 API 名称，要理解 Host / Device 执行边界、设备内存、异步 Stream、Event、同步、数据搬运、图执行、集合通信和错误处理。&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;NVIDIA 已学过的概念&lt;/th&gt;&lt;th&gt;国产平台需要进一步学习的对应内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CUDA Driver / Runtime、Stream、Event&lt;/td&gt;&lt;td&gt;各厂商 Driver / Runtime、队列或 Stream、Event、异步执行和设备上下文&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CUDA Memory、Pinned Memory、Unified Memory&lt;/td&gt;&lt;td&gt;设备内存、Host / Device 数据搬运、缓存与本地片上存储；具体机制按芯片架构学习&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cuBLAS、cuDNN、CUTLASS&lt;/td&gt;&lt;td&gt;各平台矩阵 / 深度学习算子库、算子模板库和融合算子&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NCCL、NCCL Tests&lt;/td&gt;&lt;td&gt;HCCL、MCCL、CNCL 或厂商对应通信库；学习集合通信、拓扑、带宽和多节点故障定位&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Nsight Systems / Compute&lt;/td&gt;&lt;td&gt;厂商 Profiling、算子耗时分析、内存分析、精度调试和系统级 Trace&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CUDA Graph&lt;/td&gt;&lt;td&gt;对应平台的图执行、编译图或图捕获能力；不要假定语义和限制完全相同&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;尤其要重新理解片上存储与计算单元。NVIDIA 的 SM、Warp、Shared Memory、Tensor Core 不能直接等同于其他芯片的计算核心、线程模型、片上缓存和矩阵单元。比如昇腾 AI Core 的 Cube / Vector、Unified Buffer、L0 存储和 SIMD / SIMT 组合，都需要按昇腾自己的编程模型学习。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第五步：开始写一个最小自定义算子，再学习底层 Kernel 语言。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不要从 FlashAttention 或完整 MoE Kernel 开始。建议按以下练习顺序，每一步都同时写正确性测试和性能基准：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Vector Add：熟悉 Host / Device、内存分配、Kernel 启动和数据搬运；&lt;/li&gt;
&lt;li&gt;Reduction / Softmax：理解并行归约、同步、数值稳定性和精度误差；&lt;/li&gt;
&lt;li&gt;GEMM：理解分块、矩阵单元、数据复用、片上存储和流水线；&lt;/li&gt;
&lt;li&gt;LayerNorm / RMSNorm：练习融合算子、内存带宽和小算子启动开销；&lt;/li&gt;
&lt;li&gt;Attention：进一步理解访存模式、KV Cache、Mask、长序列和融合；&lt;/li&gt;
&lt;li&gt;MoE Routing / Grouped GEMM：理解专家分发、负载均衡、通信与计算重叠。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;按目标平台选择底层语言和工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;昇腾&lt;/strong&gt;：先学习 Ascend C 的 SIMD / SIMT 编程模型、Host / Device、TPipe / TQue、内存层次、异步执行、编译、调试和性能分析。掌握基础后，再学习 CATLASS、PyPTO，以及 TileLang 的 Ascend 后端。Ascend 950 的编程模型和工具链有新能力，必须使用对应芯片和 CANN 版本的文档，不要把旧型号教程直接套到新型号。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;摩尔线程&lt;/strong&gt;：先按 MUSA 编程指南学习 Host / Device、Grid / Block / Thread、Warp、寄存器 / 共享 / 全局内存、Runtime API 和 Kernel 启动，再做 MUSA Extension 和性能分析。MUSA 与 CUDA 的编程习惯有相似之处，但 Warp 大小、硬件代际和库支持可能不同，不能把 NVIDIA 的 Block 配置和 Occupancy 经验原样复制。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寒武纪&lt;/strong&gt;：先掌握 CNRT 运行时、MLU 存储模型、MLU Core 并行与同步，再学习 BANG C、CNNL 和 MLU-OPS 的算子开发、测试及性能调优。可从官方 MLU-OPS 的 Add / VectorAdd 示例开始。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;沐曦、壁仞、燧原、海光 DCU&lt;/strong&gt;：先掌握厂商提供的 Runtime、PyTorch 插件和官方算子库，再确认是否提供成熟的自定义 Kernel 语言、编译器和调优工具。不要仅凭“CUDA 兼容”或 API 相似就跳过设备架构与版本矩阵学习。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;第六步：学习更高层的 Kernel DSL 和编译器，再看深度优化。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果已经掌握 CUDA Kernel、算子性能分析和底层硬件概念，可以进一步学习 TileLang、Triton 及其国产平台适配。它们有机会让开发者用更高层的 Tile / Tensor 表达方式描述计算，再由编译器映射到不同硬件；但各后端的成熟度、支持算子、编译路径和性能并不一致。&lt;/p&gt;
&lt;p&gt;特别值得关注的是 DeepSeek 与昇腾生态的开源项目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tile-ai/tilelang&quot;&gt;TileLang&lt;/a&gt;：主仓库已有 Ascend 950 后端文档，展示 Ascend C / PTO 代码生成、Cube / Vector 执行和自动调度等能力；其它硬件的适配器可能位于独立仓库，需按项目状态分别判断。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/deepseek-ai/TileKernels&quot;&gt;DeepSeek TileKernels&lt;/a&gt;：基于 TileLang 的算子库，适合对照同一算子的 CUDA 与 Ascend 后端实现，学习跨后端 Kernel 的组织方式。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepGEMM-Ascend&quot;&gt;DeepSeek DeepGEMM-Ascend&lt;/a&gt;：用于理解昇腾上的高性能 GEMM 和模型专项计算优化。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepEP-Ascend&quot;&gt;DeepSeek DeepEP-Ascend&lt;/a&gt;：用于理解 MoE 场景下的专家并行和通信优化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要把“有一个 backend”理解成“所有 Triton / TileLang 程序都能无修改运行”。应检查对应后端支持的芯片型号、算子子集、编译器版本、测试覆盖和真实设备验证情况。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第七步：最后再学习多机集群、性能工程和生产化。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在单机单卡、单机多卡都稳定之后，再进入多节点通信、拓扑感知、集合通信调优、通信计算重叠、Prefill / Decode 分离、故障恢复和 Kubernetes 设备调度。把设备监控、算子 Profiling、推理指标和 Agent Trace 串起来，最终形成从 Kernel 到模型 API 的端到端性能分析能力。&lt;/p&gt;
&lt;h4&gt;学习时最容易踩的坑&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;把 CUDA 兼容当成二进制兼容。&lt;/strong&gt; 能复用 PyTorch 接口，不代表 CUDA Extension、PTX、CUTLASS、NCCL 或依赖 CUDA 私有 API 的库可以直接运行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只改 device 字符串。&lt;/strong&gt; &lt;code&gt;cuda&lt;/code&gt; 改成 &lt;code&gt;npu&lt;/code&gt; / &lt;code&gt;mlu&lt;/code&gt; / &lt;code&gt;musa&lt;/code&gt; 只是入口修改；算子覆盖、AMP、分布式通信、内存行为和第三方依赖仍需逐项验证。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;忽略硬件执行模型差异。&lt;/strong&gt; Warp 大小、计算单元、片上内存、矩阵指令、同步语义和数据布局不同，原有 CUDA Kernel 的 Block、Tile、Shared Memory 和流水策略不一定适用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;混装 SDK 和框架版本。&lt;/strong&gt; Driver、Firmware、Toolkit、Compiler、Runtime、PyTorch、插件、推理引擎和容器需要按厂商兼容矩阵锁定。不要在一个环境里混用不同版本教程的安装步骤。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;拿单卡 Demo 代替生产验证。&lt;/strong&gt; 模型能加载不代表长上下文、多卡、多节点、量化、Tool Calling 和高并发都能正常工作。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只看 Tokens/s。&lt;/strong&gt; 同时测量输出质量、精度误差、TTFT、TPOT、Goodput、尾延迟、显存 / 主机内存、CPU 占用、功耗和故障恢复。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有区分实验性能力和生产能力。&lt;/strong&gt; 文档中的 Beta、Preview、Experimental、社区分支和厂商正式发行版要分开记录。生产基线应固定版本、Commit、容器 Digest 和模型权重校验和。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一开始就同时学所有国产平台。&lt;/strong&gt; 先选一个平台把 PyTorch、推理、算子、Profiling 和多卡链路完整走通，再横向比较其它平台。这样才能区分是模型问题、框架问题还是设备后端问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;一个可执行的四阶段学习计划&lt;/h4&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;阶段&lt;/th&gt;&lt;th&gt;练习成果&lt;/th&gt;&lt;th&gt;完成标准&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1. 环境与框架&lt;/td&gt;&lt;td&gt;在目标设备运行 PyTorch 模型和一个 LLM&lt;/td&gt;&lt;td&gt;单卡推理正确；环境版本清单可复现&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2. 推理与分布式&lt;/td&gt;&lt;td&gt;部署 vLLM / SGLang 或厂商引擎，完成多卡推理&lt;/td&gt;&lt;td&gt;验证 TP / EP、通信、长上下文、Tool Calling 和性能指标&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3. 算子开发&lt;/td&gt;&lt;td&gt;完成 Vector Add、Softmax、GEMM、RMSNorm 中至少三个算子&lt;/td&gt;&lt;td&gt;有正确性测试、精度比较、Profiling 和优化前后基准&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4. 生产化&lt;/td&gt;&lt;td&gt;部署多副本或多节点服务并接入统一模型网关&lt;/td&gt;&lt;td&gt;有容量测试、监控、故障演练、版本回滚和 SLO 验收&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;对已经掌握 CUDA 的工程师，最值得花时间的不是重新学习线程块和矩阵乘法的基本概念，而是理解&lt;strong&gt;目标芯片的执行模型、软件栈边界、算子库覆盖、编译器行为和性能分析方法&lt;/strong&gt;。这几项决定了 CUDA 经验能迁移多少，以及剩下的迁移成本究竟在哪里。&lt;/p&gt;
&lt;h2&gt;7. Coding Agent 平台：不要把 Agent 当成普通聊天请求&lt;/h2&gt;
&lt;p&gt;1000 名开发者的 AI Coding 平台，真正消耗资源的单位不是“用户登录数”，而是活跃 Agent Session 和任务执行轨迹。&lt;/p&gt;
&lt;p&gt;一次 Agent 任务可能包含多轮模型调用、文件读取、代码搜索、工具执行、测试、错误分析和重试。模型输出 Token 量只是成本的一部分，Agent 工具运行和上下文构造也会产生 CPU、内存、存储和网络开销。&lt;/p&gt;
&lt;h3&gt;6.1 Agent Runtime 的职责&lt;/h3&gt;
&lt;p&gt;Agent Runtime 应负责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Session 和 Task 生命周期；&lt;/li&gt;
&lt;li&gt;Prompt、上下文和模型调用编排；&lt;/li&gt;
&lt;li&gt;Tool Calling 和结果回传；&lt;/li&gt;
&lt;li&gt;文件、终端、测试、Git 等工具执行；&lt;/li&gt;
&lt;li&gt;超时、取消、重试和检查点；&lt;/li&gt;
&lt;li&gt;人工确认和权限升级；&lt;/li&gt;
&lt;li&gt;任务状态、日志和审计；&lt;/li&gt;
&lt;li&gt;任务结果验证和交付。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agent Runtime 不应该直接管理 GPU 驱动、NCCL 或模型进程。它通过 AI Gateway 调用推理服务，避免把模型服务和业务 Agent 的发布周期绑定。&lt;/p&gt;
&lt;h3&gt;6.2 Agent Sandbox 与凭证隔离&lt;/h3&gt;
&lt;p&gt;Coding Agent 可以读写代码、运行 shell、安装依赖、访问网络和调用 MCP 工具，因此它的风险远高于只读聊天机器人。&lt;/p&gt;
&lt;p&gt;最低安全要求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个用户或任务有独立 Workspace / Sandbox；&lt;/li&gt;
&lt;li&gt;非 root 用户、只读根文件系统和资源限制；&lt;/li&gt;
&lt;li&gt;默认禁止任意网络出口，按需开放域名或服务；&lt;/li&gt;
&lt;li&gt;短期、最小权限的身份凭证；&lt;/li&gt;
&lt;li&gt;不把长期 API Key、云凭证和生产 Secret 暴露给模型上下文；&lt;/li&gt;
&lt;li&gt;MCP Server 的凭证由受控服务端注入；&lt;/li&gt;
&lt;li&gt;文件系统、进程、网络和容器之间隔离；&lt;/li&gt;
&lt;li&gt;工具调用进行授权检查和审计；&lt;/li&gt;
&lt;li&gt;对敏感动作实施人工确认；&lt;/li&gt;
&lt;li&gt;任务结束后销毁或按策略保留 Workspace。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2026 年 10 月 21 日，NVIDIA 发布了 OpenShell Reference Architecture 相关技术文章，描述 Gateway、Supervisor、Sandbox 和 Policy Prover 等边界，并讨论 BlueField-4 / NVIDIA Sentry 等硬件辅助治理方向。这是值得评估的新参考架构，但不能仅凭厂商参考设计就认定其已经适合所有企业生产环境。应通过威胁建模、隔离测试、逃逸测试和运维验证评估。&lt;/p&gt;
&lt;h3&gt;6.3 Agent 与 GPU 服务的边界&lt;/h3&gt;
&lt;pre&gt;flowchart TB
    Dev[&quot;Developers / IDE&quot;]
    Harness[&quot;Coding Agent Harness&quot;]
    Sandbox[&quot;Isolated Workspace / Sandbox&quot;]
    Gateway[&quot;AI Gateway&quot;]
    Router[&quot;Model Router&quot;]
    PoolA[&quot;B300 Inference Pool&quot;]
    PoolB[&quot;Fallback / Secondary Model Pool&quot;]
    Tools[&quot;Governed Tools / MCP&quot;]
    Repo[&quot;Git / Repository Services&quot;]
    Obs[&quot;Logs / Metrics / Traces / Audit&quot;]
    Policy[&quot;Identity / Policy / Budget&quot;]

    Dev --&amp;gt; Harness
    Harness &amp;lt;--&amp;gt; Sandbox
    Harness --&amp;gt; Gateway
    Harness --&amp;gt; Tools
    Tools --&amp;gt; Repo
    Gateway --&amp;gt; Router
    Router --&amp;gt; PoolA
    Router --&amp;gt; PoolB
    Policy -.-&amp;gt; Gateway
    Policy -.-&amp;gt; Harness
    Policy -.-&amp;gt; Sandbox
    Harness --&amp;gt; Obs
    Gateway --&amp;gt; Obs
    Router --&amp;gt; Obs
    PoolA --&amp;gt; Obs
    PoolB --&amp;gt; Obs&lt;/pre&gt;
&lt;p&gt;这张图是逻辑架构，不代表每个方框都必须部署成独立微服务。初期可以将 Router 和 Gateway 合并为一个可独立扩展的服务，但 Agent Runtime、GPU 推理进程和不可信代码执行环境应保持明确的安全边界。&lt;/p&gt;
&lt;h2&gt;8. 1000 名开发者的容量规划&lt;/h2&gt;
&lt;p&gt;“1000 个账号”不是容量指标。至少要区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registered Developers：注册开发者数量；&lt;/li&gt;
&lt;li&gt;Daily Active Developers：日活开发者；&lt;/li&gt;
&lt;li&gt;Concurrent Agent Sessions：同时运行的 Agent Session；&lt;/li&gt;
&lt;li&gt;Concurrent Model Requests：同时在途的模型请求；&lt;/li&gt;
&lt;li&gt;Request Arrival Rate：请求到达速率；&lt;/li&gt;
&lt;li&gt;Input / Output Token Distribution：输入和输出 Token 分布；&lt;/li&gt;
&lt;li&gt;Context Length Distribution：上下文长度分布；&lt;/li&gt;
&lt;li&gt;Task Duration：Agent 任务持续时间；&lt;/li&gt;
&lt;li&gt;Retry / Tool Call Distribution：重试和工具调用分布。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个开发者可能只偶尔问一个问题，也可能同时运行多个 Agent。一个 Agent Session 也不等于一个模型请求：工具调用结束后可能发起下一轮请求。因此不能用“1000 人 ÷ 每张卡能服务多少用户”这种方式计算 GPU 数量。&lt;/p&gt;
&lt;h3&gt;7.1 先建立负载模型&lt;/h3&gt;
&lt;p&gt;建议从现有 Coding Agent 日志或试点用户采样，得到以下分布：&lt;/p&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;需要采集的内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;用户行为&lt;/td&gt;&lt;td&gt;日活、活跃时段、每人每天任务数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent 并发&lt;/td&gt;&lt;td&gt;每用户并发 Session、Session 持续时间&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型请求&lt;/td&gt;&lt;td&gt;每个任务模型调用次数、请求到达间隔、重试次数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;输入长度&lt;/td&gt;&lt;td&gt;System Prompt、工具定义、仓库上下文、历史消息的 Token 分布&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;输出长度&lt;/td&gt;&lt;td&gt;普通回复、代码生成、工具参数和总结的 Token 分布&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上下文增长&lt;/td&gt;&lt;td&gt;Session 生命周期内 Context Length 的变化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型分布&lt;/td&gt;&lt;td&gt;不同模型、量化和任务路由比例&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;服务质量&lt;/td&gt;&lt;td&gt;可接受 TTFT、TPOT、端到端延迟和失败率&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;在没有真实数据时，可以设置低、中、高三种情景做预算，但这些数字只能作为压测输入，不应被写成 B300 的确定服务能力。&lt;/p&gt;
&lt;h3&gt;7.2 容量计算的基本方法&lt;/h3&gt;
&lt;p&gt;对单个模型部署副本，先测出在目标 SLO 下的有效吞吐 Goodput，而不是峰值吞吐。设：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;D：目标输入/输出 Token 需求率；&lt;/li&gt;
&lt;li&gt;G：单个副本在满足 SLO 时的实测有效吞吐；&lt;/li&gt;
&lt;li&gt;R：故障、突发和升级预留比例。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以先用下面的公式估算副本数量：&lt;/p&gt;
&lt;p&gt;[
N = leftlceil rac{D}{G} 	imes (1 + R)ightceil
]&lt;/p&gt;
&lt;p&gt;但这里的 D 和 G 必须按输入/输出阶段、模型、上下文长度和负载分布拆分。不同模型、不同精度、不同并行策略的吞吐不能直接相加。若有多个模型池，应分别计算后再汇总。&lt;/p&gt;
&lt;p&gt;此外，容量必须同时满足显存约束：&lt;/p&gt;
&lt;p&gt;[
M_{weights} + M_{KV} + M_{runtime} + M_{workspace} + M_{reserve}
leq M_{available}
]&lt;/p&gt;
&lt;p&gt;模型权重能装进 GPU，不代表能够满足目标并发。长上下文和高并发通常首先消耗 KV Cache。要通过真实引擎测量，而不是只按参数量乘以每参数字节数来估算。&lt;/p&gt;
&lt;h3&gt;7.3 Benchmark 应测什么&lt;/h3&gt;




























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;指标&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;th&gt;主要用于判断&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;TTFT p50/p95/p99&lt;/td&gt;&lt;td&gt;首 Token 延迟&lt;/td&gt;&lt;td&gt;输入处理、队列和 Prefill&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TPOT / ITL p50/p95/p99&lt;/td&gt;&lt;td&gt;输出 Token 间隔&lt;/td&gt;&lt;td&gt;Decode 体验&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;End-to-End Latency&lt;/td&gt;&lt;td&gt;完整请求耗时&lt;/td&gt;&lt;td&gt;用户整体等待时间&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Input / Output Tokens/s&lt;/td&gt;&lt;td&gt;输入、输出吞吐&lt;/td&gt;&lt;td&gt;资源产出&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Goodput&lt;/td&gt;&lt;td&gt;满足延迟、错误率和质量门槛的有效吞吐&lt;/td&gt;&lt;td&gt;真正可承诺的服务能力&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Queue Time&lt;/td&gt;&lt;td&gt;排队时间&lt;/td&gt;&lt;td&gt;调度和容量不足&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KV Cache Usage / Hit Rate&lt;/td&gt;&lt;td&gt;KV Cache 占用和复用&lt;/td&gt;&lt;td&gt;长上下文并发与缓存收益&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU Utilization / HBM&lt;/td&gt;&lt;td&gt;GPU 使用率和显存&lt;/td&gt;&lt;td&gt;瓶颈定位，不是最终成功指标&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OOM / Retry / Cancellation&lt;/td&gt;&lt;td&gt;失败和重试&lt;/td&gt;&lt;td&gt;稳定性与浪费&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cost per Successful Task&lt;/td&gt;&lt;td&gt;每个成功代码任务成本&lt;/td&gt;&lt;td&gt;企业 FinOps&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;对 Coding Agent 还要增加业务指标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Task Success Rate；&lt;/li&gt;
&lt;li&gt;Human Intervention Rate；&lt;/li&gt;
&lt;li&gt;Tests Passed / Regression Rate；&lt;/li&gt;
&lt;li&gt;Tool Call Success Rate；&lt;/li&gt;
&lt;li&gt;Invalid Tool Arguments；&lt;/li&gt;
&lt;li&gt;Tokens per Successful Task；&lt;/li&gt;
&lt;li&gt;Time to Complete a Task；&lt;/li&gt;
&lt;li&gt;Cost per Successful Task。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;高 Token Throughput 不等于高业务产出。如果模型生成得更快，但代码任务失败率更高，实际单位成功任务成本可能更差。&lt;/p&gt;
&lt;h3&gt;7.4 推荐的 POC 压测矩阵&lt;/h3&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;建议测试档位&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU 配置&lt;/td&gt;&lt;td&gt;单 GPU、单节点 8 GPU；之后再测多节点&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;并发 Agent Session&lt;/td&gt;&lt;td&gt;50、100、200、300，按实际业务修订&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上下文长度&lt;/td&gt;&lt;td&gt;8K、32K、64K、128K；必要时增加更长档位&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;输入/输出分布&lt;/td&gt;&lt;td&gt;使用生产采样 Trace，不用统一固定长度代替&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型精度&lt;/td&gt;&lt;td&gt;BF16/FP8 基线，候选 FP4/NVFP4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;请求模式&lt;/td&gt;&lt;td&gt;突发、稳定到达、长短请求混合、后台批量任务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;缓存&lt;/td&gt;&lt;td&gt;冷启动、Prefix Cache 命中、缓存失效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;故障&lt;/td&gt;&lt;td&gt;单副本退出、GPU OOM、节点重启、网络中断、模型加载失败&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;发布&lt;/td&gt;&lt;td&gt;滚动升级、双版本并存、回滚和缓存冷启动&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;50/100/200/300 是测试梯度，不是 B300 对应的用户承载承诺。必须用同一个 Agent Harness、相同工具、相同仓库和相同任务集比较不同 GPU 与推理引擎。&lt;/p&gt;
&lt;h2&gt;9. 可观测性：GPU 指标、推理指标和 Agent Trace 必须关联&lt;/h2&gt;
&lt;p&gt;只监控 GPU Utilization 无法解释开发者为什么觉得慢。只看 API 延迟也无法定位是队列、Prefill、Decode、网络还是工具执行导致的。&lt;/p&gt;
&lt;p&gt;建议建立三层可观测性：&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层次&lt;/th&gt;&lt;th&gt;指标/日志&lt;/th&gt;&lt;th&gt;典型问题&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Infrastructure&lt;/td&gt;&lt;td&gt;GPU 温度、功耗、HBM、XID、ECC、NVLink、PCIe、NIC、RDMA、磁盘、节点健康&lt;/td&gt;&lt;td&gt;GPU 降频、链路异常、硬件故障&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Inference&lt;/td&gt;&lt;td&gt;Queue Time、TTFT、TPOT、Tokens/s、Batch Size、KV Cache、OOM、请求错误&lt;/td&gt;&lt;td&gt;模型服务过载、缓存不足、调度不公平&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent&lt;/td&gt;&lt;td&gt;Session、Task、模型调用、Tool Call、Workspace、测试结果、人工介入、任务成本&lt;/td&gt;&lt;td&gt;Agent 循环、工具失败、上下文膨胀、任务未完成&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;推荐的基础组件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NVIDIA DCGM / DCGM Exporter：GPU 指标；&lt;/li&gt;
&lt;li&gt;Prometheus：时序指标；&lt;/li&gt;
&lt;li&gt;Grafana：仪表盘；&lt;/li&gt;
&lt;li&gt;OpenTelemetry：Trace、Metric、Log 的统一关联；&lt;/li&gt;
&lt;li&gt;Loki 或 Elasticsearch：日志；&lt;/li&gt;
&lt;li&gt;ClickHouse 或其他分析型存储：大规模调用与成本分析（按数据量和现有平台决定）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个 Agent Task 应有稳定的 Trace ID；每一次模型请求、工具调用和测试执行都应成为可关联的 Span。日志中记录模型版本、量化、推理节点、Token 用量、队列等待、延迟、错误类型和成本。Prompt 与代码内容是否落日志，需要根据数据分类、隐私和保留政策单独决定，默认应避免记录敏感源代码和 Secret 明文。&lt;/p&gt;
&lt;h2&gt;10. 安全与治理：模型 API 不是唯一的攻击面&lt;/h2&gt;
&lt;p&gt;企业 AI Coding 服务至少涉及四类安全边界：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;开发者身份和企业授权；&lt;/li&gt;
&lt;li&gt;模型请求、上下文和数据保护；&lt;/li&gt;
&lt;li&gt;Agent 工具、MCP 和代码执行；&lt;/li&gt;
&lt;li&gt;GPU 集群、模型制品和基础设施管理。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;9.1 身份与访问控制&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;接入企业 SSO / OIDC；&lt;/li&gt;
&lt;li&gt;用户、团队、项目和环境级授权；&lt;/li&gt;
&lt;li&gt;Model Allowlist 和模型能力策略；&lt;/li&gt;
&lt;li&gt;API Key 短期化、可撤销和最小权限；&lt;/li&gt;
&lt;li&gt;组织、团队、用户和 Session 多层预算；&lt;/li&gt;
&lt;li&gt;管理员操作、模型发布和策略变更审计。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9.2 数据保护&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;代码仓库、Prompt、模型输入输出按数据分类管理；&lt;/li&gt;
&lt;li&gt;明确数据是否离开企业网络、是否进入第三方模型或遥测服务；&lt;/li&gt;
&lt;li&gt;明确日志内容、采样、保留期和访问权限；&lt;/li&gt;
&lt;li&gt;对 Secret、Token、证书和个人数据做检测与脱敏；&lt;/li&gt;
&lt;li&gt;模型权重、Tokenizer、依赖和容器镜像做来源校验；&lt;/li&gt;
&lt;li&gt;模型服务与 Agent Workspace 的网络隔离；&lt;/li&gt;
&lt;li&gt;对跨租户缓存和共享文件系统进行威胁建模。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9.3 Agent 工具安全&lt;/h3&gt;
&lt;p&gt;Agent 的权限必须由平台策略强制执行，不能依赖 System Prompt 要求模型“不要做危险的事”。&lt;/p&gt;
&lt;p&gt;对 shell、文件、Git、数据库、云 API 和 MCP 工具，应定义明确的权限边界。对生产环境写操作、删除、发布、凭证读取和外部通信，使用独立授权或人工确认。Sandbox 应默认拒绝未授权网络出口，凭证通过受控 Broker 按请求注入，而不是放进环境变量或模型上下文。&lt;/p&gt;
&lt;h2&gt;11. 生产运维与可靠性设计&lt;/h2&gt;
&lt;p&gt;GPU 平台的故障不仅是 Pod Crash。还包括 GPU XID、ECC 错误、NVLink 退化、NIC/RDMA 问题、交换机拥塞、驱动不兼容、模型加载失败、KV Cache OOM 和推理引擎死锁。&lt;/p&gt;
&lt;p&gt;至少要建立以下 Runbook：&lt;/p&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;事件&lt;/th&gt;&lt;th&gt;检测信号&lt;/th&gt;&lt;th&gt;处理原则&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU 健康异常&lt;/td&gt;&lt;td&gt;DCGM Health、XID、ECC、温度/功耗异常&lt;/td&gt;&lt;td&gt;隔离节点或 GPU，采集诊断信息，按 OEM 流程维修&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NVLink / NCCL 故障&lt;/td&gt;&lt;td&gt;P2P 测试失败、NCCL timeout、链路错误&lt;/td&gt;&lt;td&gt;检查拓扑、交换机/固件/驱动，避免盲目重启整个集群&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU OOM&lt;/td&gt;&lt;td&gt;推理引擎 OOM、KV Cache 分配失败&lt;/td&gt;&lt;td&gt;限制上下文/并发，检查缓存和批处理配置，必要时扩容&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型加载失败&lt;/td&gt;&lt;td&gt;权重校验、启动超时、内存不足&lt;/td&gt;&lt;td&gt;检查制品、磁盘、版本兼容和加载并发&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;请求积压&lt;/td&gt;&lt;td&gt;Queue Time、TTFT 持续升高&lt;/td&gt;&lt;td&gt;限流、优先级调度、切换备用池或降低后台负载&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;节点维护&lt;/td&gt;&lt;td&gt;Node NotReady、驱动升级&lt;/td&gt;&lt;td&gt;Drain、迁移流量、验证备用容量，再进行维护&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;网络故障&lt;/td&gt;&lt;td&gt;RDMA 错误、丢包、拥塞、吞吐下降&lt;/td&gt;&lt;td&gt;检查 NIC、交换机、光模块、PFC/ECN 和路由&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;区域/机房故障&lt;/td&gt;&lt;td&gt;多节点不可用&lt;/td&gt;&lt;td&gt;按灾备设计切换到备用区域/服务商或外部模型&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;生产发布需要版本锁定和分阶段升级：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先在隔离测试节点验证 Driver、CUDA、NCCL、GPU Operator 和推理引擎；&lt;/li&gt;
&lt;li&gt;使用固定评估集验证模型质量和工具调用；&lt;/li&gt;
&lt;li&gt;对少量流量 Canary；&lt;/li&gt;
&lt;li&gt;观察延迟、错误率、GPU 健康和 Agent 成功率；&lt;/li&gt;
&lt;li&gt;达到门槛后逐步扩流；&lt;/li&gt;
&lt;li&gt;保留可回滚的镜像、模型制品和配置版本。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要在高峰时段同时升级 GPU Driver、Kubernetes、推理引擎和模型。每次变更应尽量控制变量。&lt;/p&gt;
&lt;h2&gt;12. 成本模型与供应商采购&lt;/h2&gt;
&lt;p&gt;GPU 租赁成本只是平台总成本的一部分。至少要把成本拆成：&lt;/p&gt;
&lt;p&gt;[
TCO = GPU + Network + Storage + Facility + Software + People + Support + FailureReserve
]&lt;/p&gt;
&lt;p&gt;其中 GPU 成本不能只用标价乘以卡数。应比较在目标 SLO 下的有效吞吐，以及每个成功代码任务的全成本。&lt;/p&gt;
&lt;p&gt;[
CostPerSuccessfulTask =
rac{GPU + Infrastructure + Platform + Operations + FailedAttempts}
{SuccessfulTasks}
]&lt;/p&gt;
&lt;p&gt;采购询价应要求供应商回答：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;报价是按 GPU、8-GPU 节点还是完整 NVL72 机架；&lt;/li&gt;
&lt;li&gt;是否承诺整组节点同时可用；&lt;/li&gt;
&lt;li&gt;GPU 是否属于同一 NVLink 域；&lt;/li&gt;
&lt;li&gt;NIC、交换机、RDMA 和 oversubscription 配置；&lt;/li&gt;
&lt;li&gt;节点间网络是否独占，是否有带宽保障；&lt;/li&gt;
&lt;li&gt;是否包含存储、模型缓存和流量费用；&lt;/li&gt;
&lt;li&gt;是否提供 DCGM、NCCL、硬件健康和故障数据；&lt;/li&gt;
&lt;li&gt;SLA、故障更换时限和维护窗口；&lt;/li&gt;
&lt;li&gt;预留容量、扩容提前期、缩容条款；&lt;/li&gt;
&lt;li&gt;数据驻留、日志、远程运维和人员访问方式；&lt;/li&gt;
&lt;li&gt;价格是否包含软件、支持、税费和跨区域流量。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;长期合同前先做短期 POC。需要对比按需、预留、容量块和长期承诺的 break-even utilization。未测出真实工作负载下的 Goodput，不应把公开的每 GPU 小时价格直接转换成年度预算结论。&lt;/p&gt;
&lt;h2&gt;13. 工程团队需要哪些能力&lt;/h2&gt;
&lt;p&gt;不要求所有人都成为 CUDA Kernel Engineer。企业建设团队需要覆盖基础设施、分布式系统、推理服务、Agent 应用、安全和 SRE。&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;角色&lt;/th&gt;&lt;th&gt;主要责任&lt;/th&gt;&lt;th&gt;必备知识&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU / Infrastructure Engineer&lt;/td&gt;&lt;td&gt;服务器、GPU、网络、存储、机房&lt;/td&gt;&lt;td&gt;B300/HGX、Linux、PCIe、NVLink、RDMA、液冷&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Platform Engineer&lt;/td&gt;&lt;td&gt;Kubernetes、GPU Operator、自动化和调度&lt;/td&gt;&lt;td&gt;Kubernetes、Helm、Terraform、Ansible、GitOps&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ML Systems / Inference Engineer&lt;/td&gt;&lt;td&gt;模型部署、并行、量化、性能优化&lt;/td&gt;&lt;td&gt;CUDA 基础、NCCL、vLLM、SGLang、TensorRT-LLM&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Backend / AI Platform Engineer&lt;/td&gt;&lt;td&gt;Gateway、Router、配额、会话和 API&lt;/td&gt;&lt;td&gt;Go/Java/Python/TypeScript、API、Redis、队列、数据库&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent Engineer&lt;/td&gt;&lt;td&gt;Coding Agent、工具、上下文和沙箱集成&lt;/td&gt;&lt;td&gt;Agent Runtime、Tool Calling、MCP、代码执行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SRE / Observability Engineer&lt;/td&gt;&lt;td&gt;监控、告警、故障响应、容量和成本&lt;/td&gt;&lt;td&gt;Prometheus、Grafana、OpenTelemetry、Incident Management&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Security Engineer&lt;/td&gt;&lt;td&gt;身份、策略、凭证、网络和审计&lt;/td&gt;&lt;td&gt;IAM、OIDC、OPA、Sandbox、供应链安全、威胁建模&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;如果企业已经有成熟 Kubernetes、网络和 SRE 团队，新增 GPU 推理平台的初期核心团队可以从 3–5 名专职工程师开始，再由安全、网络和数据中心团队提供专业支持。这个人数只适用于模型推理平台的初期建设，不包括基础模型训练、数据集研发、模型微调和 7×24 大规模现场硬件运维。若没有现成基础设施能力，团队规模和交付周期都需要上调。&lt;/p&gt;
&lt;h2&gt;14. 建议的实施路线图&lt;/h2&gt;
&lt;p&gt;不要一次采购几十张 GPU 后才开始验证模型。按阶段交付，每阶段都有明确退出条件。&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;阶段&lt;/th&gt;&lt;th&gt;时间参考&lt;/th&gt;&lt;th&gt;工作内容&lt;/th&gt;&lt;th&gt;退出条件&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;0. Discovery&lt;/td&gt;&lt;td&gt;1–2 周&lt;/td&gt;&lt;td&gt;采集开发者行为、模型候选、代码任务、数据分类、区域和预算约束&lt;/td&gt;&lt;td&gt;Workload Profile、需求基线和采购约束确认&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1. Single-node POC&lt;/td&gt;&lt;td&gt;2–3 周&lt;/td&gt;&lt;td&gt;一台 8-GPU HGX B300 或租用等价节点；部署驱动、CUDA、推理引擎和目标模型&lt;/td&gt;&lt;td&gt;模型加载、单节点 NCCL、API、质量和初步性能通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2. Agent Integration&lt;/td&gt;&lt;td&gt;2–3 周&lt;/td&gt;&lt;td&gt;接入真实 Coding Agent、工具、代码仓库和 Sandbox&lt;/td&gt;&lt;td&gt;端到端代码任务可运行，权限和审计有效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3. Multi-node Scale&lt;/td&gt;&lt;td&gt;2–4 周&lt;/td&gt;&lt;td&gt;增加节点、配置 RDMA Fabric、调度和缓存&lt;/td&gt;&lt;td&gt;跨节点通信、扩容、故障隔离和负载测试通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4. Production Hardening&lt;/td&gt;&lt;td&gt;2–4 周&lt;/td&gt;&lt;td&gt;HA、SLO、监控、告警、容量、发布和灾备&lt;/td&gt;&lt;td&gt;SLO、故障演练、安全测试和运维 Runbook 通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5. Rollout&lt;/td&gt;&lt;td&gt;分批&lt;/td&gt;&lt;td&gt;先试点团队，再逐步开放更多开发者&lt;/td&gt;&lt;td&gt;业务指标、成本和用户反馈达到门槛&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;时间只是典型项目拆分，不是交付承诺。机房液冷改造、网络采购、GPU 供应和安全审批可能成为关键路径，且往往不在软件团队控制范围内。&lt;/p&gt;
&lt;h2&gt;15. 验收标准：用可交付结果判断平台是否完成&lt;/h2&gt;

















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;验收域&lt;/th&gt;&lt;th&gt;验收内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Hardware&lt;/td&gt;&lt;td&gt;GPU、HBM、NVLink、NIC、NVMe、BMC、功耗和温度状态可验证&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fabric&lt;/td&gt;&lt;td&gt;单节点和跨节点 NCCL 测试达到设计目标，网络故障可定位&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kubernetes&lt;/td&gt;&lt;td&gt;GPU 节点可注册、调度、隔离、维护和恢复&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Model Serving&lt;/td&gt;&lt;td&gt;模型可重复部署，API/Streaming/Tool Calling 兼容性测试通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Performance&lt;/td&gt;&lt;td&gt;在目标上下文和并发下达到约定 TTFT、TPOT、Goodput&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Quality&lt;/td&gt;&lt;td&gt;固定 Coding Benchmark 和内部任务集达到最低质量门槛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent&lt;/td&gt;&lt;td&gt;任务执行、工具调用、Sandbox、人工确认和结果验证可审计&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Security&lt;/td&gt;&lt;td&gt;越权、网络逃逸、凭证暴露、跨租户访问测试通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reliability&lt;/td&gt;&lt;td&gt;节点故障、GPU 故障、网络故障、模型升级和回滚演练通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FinOps&lt;/td&gt;&lt;td&gt;GPU、模型、用户、团队和成功任务成本可归因&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;建议把性能验收写成负载合同：模型版本、量化格式、输入输出长度分布、并发、到达率、缓存条件、SLO 和质量门槛都必须固定。否则供应商或团队之间的 benchmark 数字没有可比性。&lt;/p&gt;
&lt;h2&gt;16. 学习与工程准备清单&lt;/h2&gt;
&lt;h3&gt;GPU 与数据中心&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NVIDIA Blackwell / Blackwell Ultra 架构；&lt;/li&gt;
&lt;li&gt;国产 GPU 学习路线见第 6.9 节：PyTorch 后端、推理框架、Runtime、算子开发、TileLang / Triton 和多机生产化；&lt;/li&gt;
&lt;li&gt;HGX B300、GB300 NVL72 参考架构；&lt;/li&gt;
&lt;li&gt;HBM、NVLink、NVSwitch、PCIe、NUMA；&lt;/li&gt;
&lt;li&gt;InfiniBand、RoCE、RDMA、ConnectX、BlueField；&lt;/li&gt;
&lt;li&gt;BMC、固件、机架供电、液冷和 CDU。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;集群平台&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Linux、NVIDIA Driver、CUDA；&lt;/li&gt;
&lt;li&gt;NVIDIA Container Toolkit、containerd；&lt;/li&gt;
&lt;li&gt;Kubernetes、GPU Operator、Device Plugin；&lt;/li&gt;
&lt;li&gt;NCCL、NCCL Tests、GPU Direct RDMA；&lt;/li&gt;
&lt;li&gt;Helm、Terraform、Ansible、GitOps；&lt;/li&gt;
&lt;li&gt;节点池、拓扑感知调度、gang scheduling 和故障隔离。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;推理系统&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Transformer、MoE、Attention、Tokenizer；&lt;/li&gt;
&lt;li&gt;FP8、FP4/NVFP4 和量化质量评估；&lt;/li&gt;
&lt;li&gt;TP、PP、DP、EP；&lt;/li&gt;
&lt;li&gt;KV Cache、PagedAttention、Prefix Cache；&lt;/li&gt;
&lt;li&gt;Prefill、Decode、Continuous Batching；&lt;/li&gt;
&lt;li&gt;vLLM、SGLang、TensorRT-LLM；&lt;/li&gt;
&lt;li&gt;TTFT、TPOT、Goodput、长上下文压测。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;AI Coding 平台&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI-compatible API、Streaming、Tool Calling；&lt;/li&gt;
&lt;li&gt;Agent Runtime、Session、Task Lifecycle；&lt;/li&gt;
&lt;li&gt;MCP、工具授权、结果回传；&lt;/li&gt;
&lt;li&gt;Repository Context、代码检索和上下文压缩；&lt;/li&gt;
&lt;li&gt;Sandbox、Workspace、网络出口治理；&lt;/li&gt;
&lt;li&gt;Model Router、Token Budget、租户配额；&lt;/li&gt;
&lt;li&gt;Agent Evaluation、回归测试和 Human-in-the-loop。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;生产运维与安全&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus、Grafana、DCGM Exporter；&lt;/li&gt;
&lt;li&gt;OpenTelemetry、Trace、Log、Metrics；&lt;/li&gt;
&lt;li&gt;SLO、SLA、Error Budget、Incident Response；&lt;/li&gt;
&lt;li&gt;IAM、OIDC、OPA、Secret Broker；&lt;/li&gt;
&lt;li&gt;镜像签名、SBOM、模型制品校验；&lt;/li&gt;
&lt;li&gt;数据分类、日志保留、审计和 FinOps。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;17. 推荐的官方资料与工程入口&lt;/h2&gt;
&lt;p&gt;以下资料优先作为团队的学习和设计依据。阅读时应固定文档版本，尤其是 GPU Operator、CUDA、vLLM、SGLang 和 TensorRT-LLM；不要把 latest 文档中的能力直接视为当前生产环境已验证能力。&lt;/p&gt;
&lt;h3&gt;NVIDIA 硬件与数据中心&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/enterprise-reference-architectures/hgx-ai-factory/latest/components.html&quot;&gt;NVIDIA HGX AI Factory — Components&lt;/a&gt;：HGX B300 节点规格、组件和系统要求。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/enterprise-reference-architectures/nvl72-ai-factory/latest/overview.html&quot;&gt;NVIDIA NVL72 AI Factory — Overview&lt;/a&gt;：GB300 NVL72 机架级参考架构。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/enterprise-reference-architectures/nvl72-ai-factory/latest/components.html&quot;&gt;NVIDIA NVL72 AI Factory — System Hardware &amp;amp; Components&lt;/a&gt;：计算托盘、NVLink Switch、网络和功耗。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/enterprise-reference-architectures/nvl72-ai-factory/latest/networking-physical-topologies.html&quot;&gt;NVIDIA NVL72 AI Factory — Networking Physical Topologies&lt;/a&gt;：计算 Fabric 与 North-South 网络拓扑。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/&quot;&gt;NVIDIA GPU Operator&lt;/a&gt;：Kubernetes GPU 软件栈。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/&quot;&gt;NVIDIA NCCL Documentation&lt;/a&gt;：多 GPU 通信。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/datacenter/dcgm/latest/&quot;&gt;NVIDIA DCGM&lt;/a&gt;：GPU 健康和遥测。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/gpu-telemetry/latest/dcgm-exporter.html&quot;&gt;NVIDIA DCGM Exporter&lt;/a&gt;：Prometheus GPU 指标。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;国产 GPU / NPU 学习资料&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hiascend.com/developer/learn&quot;&gt;昇腾开发者学习中心&lt;/a&gt;：包含应用开发、推理开发、训练开发、框架开发和 Ascend C 算子开发课程。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hiascend.com/cann/document&quot;&gt;CANN 文档中心&lt;/a&gt;：CANN 架构、Ascend C、CATLASS、PyPTO、Runtime、HCCL、调试与性能分析；阅读时选择与目标芯片匹配的正式版本。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/920beta2/programug/Ascendcopdevg/asc-devkit/docs/zh/guide/getting_started/quick_start/heterogeneous_system_and_programming_model.md&quot;&gt;Ascend C 编程指南：异构系统与编程模型&lt;/a&gt;：理解 Host / Device、SIMD / SIMT 和 Ascend C 学习路径。该链接当前属于 Beta 文档，学习概念可以参考，生产环境需切换正式版本。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tile-ai/tilelang/blob/main/tilelang/ascend/README.md&quot;&gt;TileLang Ascend 950 Backend&lt;/a&gt;：TileLang 的 Ascend 950 后端、Ascend C / PTO 代码生成、编译和 Profiling。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/deepseek-ai/TileKernels&quot;&gt;DeepSeek TileKernels&lt;/a&gt;：跨 CUDA / Ascend 后端的 TileLang 算子实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepGEMM-Ascend&quot;&gt;DeepSeek DeepGEMM-Ascend&lt;/a&gt;：昇腾 GEMM 优化实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepEP-Ascend&quot;&gt;DeepSeek DeepEP-Ascend&lt;/a&gt;：昇腾 MoE 专家并行通信组件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.mthreads.com/en/musa-sdk/musa-sdk-doc-online/history_version/v5.1.0/programming_guide/&quot;&gt;MUSA 编程指南&lt;/a&gt;：按入门、编程模型、语法、API、硬件架构和性能优化的顺序学习。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MooreThreads/torch_musa&quot;&gt;MooreThreads / torch_musa&lt;/a&gt;：PyTorch 后端、CUDA 迁移、MUSA Extension 和示例。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MooreThreads/tutorial_on_musa&quot;&gt;MooreThreads / tutorial_on_musa&lt;/a&gt;：MUSA 训练、推理和模型示例。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Cambricon/torch_mlu&quot;&gt;Cambricon / torch_mlu&lt;/a&gt;：PyTorch MLU 后端和依赖版本说明。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Cambricon/mlu-ops&quot;&gt;Cambricon / mlu-ops&lt;/a&gt;：BANG C 算子开发、测试和性能调优教程。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;推理框架&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.vllm.ai/&quot;&gt;vLLM Documentation&lt;/a&gt;：模型推理、并行、KV Cache 和 Serving。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.sglang.ai/&quot;&gt;SGLang Documentation&lt;/a&gt;：结构化生成和高性能 Serving。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nvidia.github.io/TensorRT-LLM/&quot;&gt;TensorRT-LLM Documentation&lt;/a&gt;：NVIDIA 推理优化框架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.nvidia.com/deeplearning/tensorrt/latest/&quot;&gt;NVIDIA TensorRT Documentation&lt;/a&gt;：TensorRT 核心能力与支持矩阵。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Agent 安全与平台工程&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/NVIDIA/OpenShell&quot;&gt;NVIDIA OpenShell&lt;/a&gt;：Agent Sandbox 和治理运行时。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.nvidia.com/blog/how-nvidia-openshell-reference-architecture-secures-and-governs-ai-agent-workloads-at-scale/&quot;&gt;NVIDIA Technical Blog: OpenShell Reference Architecture&lt;/a&gt;：2026 年 10 月发布的 Agent 治理参考架构。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kubernetes.io/docs/home/&quot;&gt;Kubernetes Documentation&lt;/a&gt;：容器编排与资源管理。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opentelemetry.io/docs/&quot;&gt;OpenTelemetry Documentation&lt;/a&gt;：分布式追踪、指标和日志。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/www-project-top-10-for-large-language-model-applications/&quot;&gt;OWASP Top 10 for LLM Applications&lt;/a&gt;：LLM 应用安全风险参考。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nist.gov/itl/ai-risk-management-framework&quot;&gt;NIST AI Risk Management Framework&lt;/a&gt;：AI 风险治理框架。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;18. DeepSeek、Kimi、GLM 的开源项目：哪些与企业 GPU 平台直接相关&lt;/h2&gt;
&lt;p&gt;本章关注 DeepSeek、Moonshot AI（Kimi）和 Z.ai / 智谱（GLM）公开的代码仓库，而不只是模型权重。它们的开源内容覆盖不同层次：完整或部分推理引擎、CUDA Kernel 和 MoE 通信库、KV Cache 基础设施、Coding Agent Runtime、模型训练和评测。&lt;/p&gt;
&lt;p&gt;需要先区分三个概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模型开源 / Open Weights&lt;/strong&gt;：提供模型权重、配置、Tokenizer 和模型说明。它解决“运行哪个模型”，不等于提供生产 Serving 系统。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理组件开源&lt;/strong&gt;：提供 Attention Kernel、GEMM、Expert Parallelism、KV Cache 或调度模块。它们解决推理系统的局部性能问题，通常需要集成到 vLLM、SGLang 等运行时。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生产服务系统开源&lt;/strong&gt;：提供模型执行引擎、请求调度、缓存、路由和故障处理等更完整的能力。即使如此，也要检查公开版本是否包含线上服务所需的全部组件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;17.1 DeepSeek：最值得关注的是推理内核、MoE 通信和 DeepInfer&lt;/h3&gt;
&lt;p&gt;DeepSeek 的开源仓库与 GPU 推理架构关系非常直接。其技术路线不是只发布模型，而是把支撑大规模 MoE 推理的底层能力逐步拆出来。&lt;/p&gt;

























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;所属层次&lt;/th&gt;&lt;th&gt;解决的问题&lt;/th&gt;&lt;th&gt;与 B300 / GB300 的关系&lt;/th&gt;&lt;th&gt;建议关注度&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepInfer&quot;&gt;DeepInfer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;推理执行引擎&lt;/td&gt;&lt;td&gt;DeepSeek-V4.1-Flash 高性能离线推理，包含模型运行时、调度、并行、采样和结构化输出&lt;/td&gt;&lt;td&gt;直接涉及 SM100 GPU、Attention DP、Context Parallel、MoE EP/EPLB、推测解码&lt;/td&gt;&lt;td&gt;&lt;strong&gt;最高：重点 POC&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepEP&quot;&gt;DeepEP&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MoE 通信库&lt;/td&gt;&lt;td&gt;Expert Parallelism 的 Token Dispatch / Combine、All-to-All 通信&lt;/td&gt;&lt;td&gt;依赖 NVLink 和跨节点 RDMA；与 HGX B300 多节点和 GB300 NVL72 互联拓扑直接相关&lt;/td&gt;&lt;td&gt;&lt;strong&gt;最高：重点研究&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepGEMM&quot;&gt;DeepGEMM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;GEMM / Tensor Core Kernel&lt;/td&gt;&lt;td&gt;FP8、FP4、BF16 矩阵计算及融合 MoE GEMM&lt;/td&gt;&lt;td&gt;影响 Blackwell 上 MoE 专家矩阵计算效率&lt;/td&gt;&lt;td&gt;&lt;strong&gt;最高：持续跟踪&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/FlashMLA&quot;&gt;FlashMLA&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Attention Kernel&lt;/td&gt;&lt;td&gt;Multi-head Latent Attention、稀疏 Attention、FP8/FP4 KV Cache 相关计算&lt;/td&gt;&lt;td&gt;对采用 MLA / DeepSeek Sparse Attention 的模型尤其重要；需核对 GPU 架构和 CUDA 版本&lt;/td&gt;&lt;td&gt;&lt;strong&gt;高：模型相关&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/TileKernels&quot;&gt;TileKernels&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kernel 集合&lt;/td&gt;&lt;td&gt;MoE Routing、量化、Engram、RoPE 等优化算子&lt;/td&gt;&lt;td&gt;可作为 Blackwell Kernel 优化与 TileLang 开发的参考&lt;/td&gt;&lt;td&gt;&lt;strong&gt;高：底层工程跟踪&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepSelect&quot;&gt;DeepSelect&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Top-K / Sparse Attention Kernel&lt;/td&gt;&lt;td&gt;DSA 和采样中的 Top-K 选择&lt;/td&gt;&lt;td&gt;对稀疏 Attention 的索引和选择路径有价值&lt;/td&gt;&lt;td&gt;中高：模型相关&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepJIT&quot;&gt;DeepJIT&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kernel JIT 编译&lt;/td&gt;&lt;td&gt;GPU / xPU Kernel 的运行时编译支持&lt;/td&gt;&lt;td&gt;是 DeepGEMM、DeepEP 等底层组件的构建和运行路径之一&lt;/td&gt;&lt;td&gt;中：理解依赖&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/deepseek-recipe&quot;&gt;deepseek-recipe&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tokenizer / API 协议适配&lt;/td&gt;&lt;td&gt;高性能 Token 编解码及 API 协议行为对齐&lt;/td&gt;&lt;td&gt;对 API Gateway 和 Model Adapter 的协议兼容测试有参考价值，不负责 GPU 调度&lt;/td&gt;&lt;td&gt;中：接口层参考&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/deepseek-harness&quot;&gt;deepseek-harness&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Coding Agent Harness&lt;/td&gt;&lt;td&gt;插件化 Agent、工具和工作流执行&lt;/td&gt;&lt;td&gt;位于 GPU 推理服务上层，可研究 Agent Runtime、插件边界和工具扩展&lt;/td&gt;&lt;td&gt;高：Agent 层参考&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/3FS&quot;&gt;3FS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;分布式文件系统&lt;/td&gt;&lt;td&gt;面向 AI 训练和推理的高性能分布式文件存储&lt;/td&gt;&lt;td&gt;可研究大模型权重加载、共享数据和高吞吐存储；不一定需要直接采用&lt;/td&gt;&lt;td&gt;中：存储架构参考&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepSpec&quot;&gt;DeepSpec&lt;/a&gt;&lt;/td&gt;&lt;td&gt;推测解码研究与评测&lt;/td&gt;&lt;td&gt;Speculative Decoding 算法训练和评估&lt;/td&gt;&lt;td&gt;对降低 Decode 成本有参考价值，需看是否已被主推理引擎更成熟地集成&lt;/td&gt;&lt;td&gt;中：专项研究&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;DeepInfer 应该怎样理解&lt;/h4&gt;
&lt;p&gt;DeepInfer 是这组项目中最值得首先验证的项目，但必须准确理解它的公开边界。它面向 DeepSeek-V4.1-Flash，公开内容包括优化 Kernel、模型和 Sampler Runtime、Attention DP / Balanced CP、MoE EP 与 EPLB、推测解码、异步调度、Batch-invariant Inference 和 Structured Output。&lt;/p&gt;
&lt;p&gt;它并不等于下载后就能得到完整的 DeepSeek 在线服务。官方公开说明指出，完整服务还需要 KV Cache 系统、Prefill/Decode 或 Vision Encoder 的分离部署，以及跨 Data Parallel 副本的负载均衡。公开版本没有把这些服务组件全部包含进来。生产部署还需要自行提供 API、身份认证、配额、路由、缓存、监控和多副本故障处理。&lt;/p&gt;
&lt;p&gt;这一区别对架构决策很重要：&lt;strong&gt;DeepInfer 可以作为 DeepSeek 模型的专用推理执行路径进行 POC，但不能直接替代企业统一 Serving Control Plane。&lt;/strong&gt; 如果企业同时部署 DeepSeek、Kimi 和 GLM，仍然需要一个统一入口和统一运营层。&lt;/p&gt;
&lt;p&gt;DeepInfer 的公开依赖和硬件要求也需要进入 POC 兼容性矩阵。当前 README 提到 Linux、Python 3.12、CUDA 13，以及 NVIDIA SM100 GPU；项目也列出 Ascend 950 支持。不能因为它是 DeepSeek 官方项目，就假设任意 CUDA、驱动、推理框架版本和所有 Blackwell SKU 都可以直接运行。需要锁定 commit、CUDA、编译器、PyTorch、NCCL 和 GPU 型号后验证。&lt;/p&gt;
&lt;h4&gt;DeepEP 为什么值得 B300 集群工程师重点学习&lt;/h4&gt;
&lt;p&gt;DeepEP 不是一个完整推理服务，而是 MoE Expert Parallelism 通信库。MoE 模型在每个 Token 上选择若干 Experts，Token 需要被发送到相应 GPU 上的 Expert，再把结果汇总回来。这个 Dispatch / Combine 过程可能跨 GPU、跨节点，通信效率会直接影响端到端 Decode 和 Prefill 性能。&lt;/p&gt;
&lt;p&gt;对 B300 集群来说，应重点验证：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单个 HGX B300 节点内 NVLink / NVSwitch 通信；&lt;/li&gt;
&lt;li&gt;多节点之间通过 InfiniBand 或 RoCE RDMA 进行的通信；&lt;/li&gt;
&lt;li&gt;GPU 与 NIC 的 PCIe / NUMA 亲和关系；&lt;/li&gt;
&lt;li&gt;All-to-All 的小消息延迟和大消息带宽；&lt;/li&gt;
&lt;li&gt;Expert 负载不均衡、热点 Expert 和 EPLB；&lt;/li&gt;
&lt;li&gt;通信与 GEMM 计算是否能够有效重叠；&lt;/li&gt;
&lt;li&gt;节点或链路异常时，通信是否超时、恢复或正确失败。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DeepEP 文档列出的环境要求包括 Hopper 或更新 GPU、CUDA 13.1 及以上、NCCL 2.32.3 及以上，以及节点内 NVLink 和节点间 RDMA。它明确说明 InfiniBand 是经过充分测试的网络，RoCE 在理论上兼容，但不能据此认定任意 RoCE Fabric 已经验证。企业若使用 RoCE，必须自行完成端到端压力和故障测试。&lt;/p&gt;
&lt;h4&gt;DeepSeek Harness 与 DeepInfer 是两个不同层次&lt;/h4&gt;
&lt;p&gt;DeepSeek Harness 是插件化 Coding Agent 项目，关注 Agent 如何组织工具、插件和任务执行；DeepInfer 则关注模型如何在 GPU 上执行。两者可以处于同一企业平台的不同层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Harness / Agent Runtime：会话、工具调用、任务编排、工作区和执行过程；&lt;/li&gt;
&lt;li&gt;AI Gateway：模型路由、身份、配额、审计和协议兼容；&lt;/li&gt;
&lt;li&gt;DeepInfer / vLLM / SGLang：模型推理执行；&lt;/li&gt;
&lt;li&gt;DeepEP / DeepGEMM / FlashMLA：更底层的通信和计算 Kernel。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于企业 AI Coding 平台，DeepSeek Harness 值得作为 Agent Runtime 的架构参考，但不应与 GPU Serving 层混为一谈。若企业已有 Agent Runtime，应重点比较插件生命周期、工具权限、状态持久化、任务恢复和审计能力，而不是为了使用某个模型就替换整个 Agent 平台。&lt;/p&gt;
&lt;h3&gt;17.2 Moonshot AI / Kimi：Mooncake 是最有架构价值的项目&lt;/h3&gt;
&lt;p&gt;Moonshot 的开源项目覆盖模型、Coding Agent、MoE 通信、Attention Kernel 和 KV Cache 基础设施。其中对 GPU 集群架构最有价值的不是 Kimi Code，而是 Mooncake。&lt;/p&gt;





























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;所属层次&lt;/th&gt;&lt;th&gt;解决的问题&lt;/th&gt;&lt;th&gt;与 B300 / GB300 的关系&lt;/th&gt;&lt;th&gt;建议关注度&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/kvcache-ai/Mooncake&quot;&gt;Mooncake&lt;/a&gt;&lt;/td&gt;&lt;td&gt;KV Cache / Transfer / Serving Infrastructure&lt;/td&gt;&lt;td&gt;KV-centric 架构、Prefill/Decode 分离、分布式 KV Cache 和高速数据传输&lt;/td&gt;&lt;td&gt;对长上下文、多轮 Agent、跨节点 KV 复用和 RDMA 传输很有价值&lt;/td&gt;&lt;td&gt;&lt;strong&gt;最高：重点研究和 POC&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/MoonshotAI/MoonEP&quot;&gt;MoonEP&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MoE Expert Parallelism&lt;/td&gt;&lt;td&gt;动态冗余 Experts，改善不同 Rank 的 Token 负载平衡&lt;/td&gt;&lt;td&gt;与 DeepEP 属于相邻问题域，可比较负载均衡和通信机制&lt;/td&gt;&lt;td&gt;高：MoE 专项比较&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/MoonshotAI/FlashKDA&quot;&gt;FlashKDA&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Attention Kernel&lt;/td&gt;&lt;td&gt;Kimi Delta Attention 的高性能 Kernel&lt;/td&gt;&lt;td&gt;只有采用 KDA / 对应 Kimi 模型架构时才直接相关&lt;/td&gt;&lt;td&gt;中高：模型相关&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/MoonshotAI/checkpoint-engine&quot;&gt;checkpoint-engine&lt;/a&gt;&lt;/td&gt;&lt;td&gt;模型权重热更新&lt;/td&gt;&lt;td&gt;在 LLM 推理引擎运行期间更新模型权重&lt;/td&gt;&lt;td&gt;适用于模型版本切换、权重更新和减少服务中断的设计研究&lt;/td&gt;&lt;td&gt;中高：发布运维方向&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/MoonshotAI/kimi-code&quot;&gt;kimi-code&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Coding Agent&lt;/td&gt;&lt;td&gt;CLI Agent、代码工作流和开发者交互&lt;/td&gt;&lt;td&gt;位于 Agent Runtime 层，不负责 GPU 推理集群管理&lt;/td&gt;&lt;td&gt;高：Agent 层参考&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/MoonshotAI&quot;&gt;Kimi-K2 / Kimi-K2.5 / Kimi-K3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;模型与模型架构&lt;/td&gt;&lt;td&gt;MoE、Agentic Coding、长上下文和多模态能力&lt;/td&gt;&lt;td&gt;用于模型候选和架构适配测试，不是部署控制平面&lt;/td&gt;&lt;td&gt;高：模型选型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/MoonshotAI/Kimi-Vendor-Verifier&quot;&gt;Kimi-Vendor-Verifier&lt;/a&gt;&lt;/td&gt;&lt;td&gt;模型 API 一致性验证&lt;/td&gt;&lt;td&gt;检查不同模型服务商的 API 输出是否保持一致&lt;/td&gt;&lt;td&gt;对多模型供应商、多推理后端的兼容性回归有参考价值&lt;/td&gt;&lt;td&gt;中：验证工具&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Mooncake：把 KV Cache 从 GPU 进程内部资源提升为集群级基础设施&lt;/h4&gt;
&lt;p&gt;传统推理服务通常由一个模型实例管理自己的 KV Cache。请求进入哪个实例，前缀缓存就主要在该实例内部复用。实例重启、请求被路由到其它节点或模型扩容时，缓存复用会受到限制。&lt;/p&gt;
&lt;p&gt;Mooncake 的设计把 KV Cache 作为核心资源来管理：分离 Prefill 与 Decode 集群，并利用 GPU 节点中未充分利用的 CPU、DRAM、SSD 和 NIC 资源，形成分层、分布式的 KV Cache 池。它的主要组件可以按职责理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mooncake Transfer Engine&lt;/strong&gt;：提供跨节点、跨存储和异构设备的数据传输能力，支持 RDMA、拓扑感知路径选择和多网卡带宽聚合。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mooncake Store&lt;/strong&gt;：提供分布式 KV Cache 和模型权重相关存储能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KV-aware Scheduler / Conductor 思路&lt;/strong&gt;：根据缓存复用、请求负载和 SLO 选择 Prefill / Decode 实例。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prefill / Decode Disaggregation&lt;/strong&gt;：把输入处理和逐 Token 生成拆到不同资源池，允许独立扩缩容。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对 Coding Agent 来说，Mooncake 的价值尤其明显。多个任务可能共享系统提示、工具定义、代码仓库公共上下文，且一个 Session 会产生多轮模型请求。若路由、缓存键和安全隔离设计合理，跨请求复用 KV 可以减少重复 Prefill；长上下文场景还可以把部分缓存放到 GPU 之外的存储层。&lt;/p&gt;
&lt;p&gt;但它不是“装上 Mooncake 就能自动节省成本”。必须测量 KV Cache 的实际命中率、缓存块大小、数据传输成本、SSD/DRAM 带宽、缓存淘汰策略、租户隔离和 SLO。若请求前缀高度动态、上下文复用率低，分布式缓存系统本身的网络和运维成本可能超过收益。&lt;/p&gt;
&lt;p&gt;Mooncake 也不是只能配 Kimi 模型。其项目定位是 Serving Infrastructure，并已与 vLLM、SGLang 等生态集成。对企业平台来说，应该把它作为可选 KV Cache / Transfer 层评估，而不是绑定某个模型厂商。&lt;/p&gt;
&lt;h4&gt;MoonEP 与 DeepEP：不要把两个项目视为同一个东西&lt;/h4&gt;
&lt;p&gt;DeepEP 和 MoonEP 都与 MoE Expert Parallelism 有关，但设计重点并不完全相同。DeepEP 更侧重高性能 EP Dispatch / Combine 通信原语；MoonEP 的项目定位强调通过动态冗余 Experts 改善各 Rank 的 Token 负载平衡。&lt;/p&gt;
&lt;p&gt;在实际部署中应比较：通信延迟、带宽、Expert 热点、负载均衡开销、冗余 Expert 的显存成本、与 vLLM / SGLang / DeepInfer 的集成方式，以及跨节点网络要求。不要只比较单个 All-to-All Benchmark。&lt;/p&gt;
&lt;h3&gt;17.3 Z.ai / 智谱 GLM：重点在模型适配和 Agent 能力，不是独立 GPU Serving 栈&lt;/h3&gt;
&lt;p&gt;GLM 官方仓库主要提供模型权重、模型说明、工具调用和推理部署 Recipes。就目前公开项目而言，GLM 并没有一个与 vLLM、SGLang 或 NVIDIA Dynamo 对等的通用 GPU Serving Control Plane。&lt;/p&gt;





























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目 / 资源&lt;/th&gt;&lt;th&gt;所属层次&lt;/th&gt;&lt;th&gt;解决的问题&lt;/th&gt;&lt;th&gt;与 B300 / GB300 的关系&lt;/th&gt;&lt;th&gt;建议关注度&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/zai-org/GLM-5&quot;&gt;zai-org/GLM-5&lt;/a&gt;&lt;/td&gt;&lt;td&gt;模型、部署 Recipes、Agent Skills&lt;/td&gt;&lt;td&gt;GLM-5 系列权重、模型配置、工具调用和本地部署说明&lt;/td&gt;&lt;td&gt;用于验证 vLLM / SGLang 对 GLM 的模型实现、Parser、量化和并行支持&lt;/td&gt;&lt;td&gt;&lt;strong&gt;最高：模型适配基线&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/zai-org/GLM-5&quot;&gt;GLM-5.3-Flash 等模型权重&lt;/a&gt;&lt;/td&gt;&lt;td&gt;模型&lt;/td&gt;&lt;td&gt;不同规模和精度的模型变体&lt;/td&gt;&lt;td&gt;可用于测试 B300 上 FP8 / 其它支持格式的吞吐与质量&lt;/td&gt;&lt;td&gt;高：模型候选&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/THUDM/slime&quot;&gt;THUDM/slime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;RL 后训练框架&lt;/td&gt;&lt;td&gt;LLM 强化学习扩展和训练&lt;/td&gt;&lt;td&gt;若未来要做自有模型后训练才需要；不是在线推理服务&lt;/td&gt;&lt;td&gt;中：后训练方向&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/THUDM/AgentRL&quot;&gt;THUDM/AgentRL&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Agent RL&lt;/td&gt;&lt;td&gt;多轮、多任务 Agent 强化学习&lt;/td&gt;&lt;td&gt;用于研究 Agent 行为优化和训练，不属于在线 Agent Runtime&lt;/td&gt;&lt;td&gt;中：研究方向&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/THUDM/IndexCache&quot;&gt;THUDM/IndexCache&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Sparse Attention 优化研究&lt;/td&gt;&lt;td&gt;跨层索引复用，降低稀疏 Attention 的索引开销&lt;/td&gt;&lt;td&gt;对 GLM 稀疏 Attention 和长上下文架构有研究价值&lt;/td&gt;&lt;td&gt;中：模型架构方向&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/THUDM/AgentBench&quot;&gt;THUDM/AgentBench&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Agent Benchmark&lt;/td&gt;&lt;td&gt;评估模型在不同 Agent 环境中的能力&lt;/td&gt;&lt;td&gt;可作为模型和 Agent Harness 评测的补充，不是 GPU 压测工具&lt;/td&gt;&lt;td&gt;中：评测参考&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/THUDM/DeepDive&quot;&gt;THUDM/DeepDive&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Deep Search Agent / RL&lt;/td&gt;&lt;td&gt;多轮搜索 Agent 与知识图谱相关研究&lt;/td&gt;&lt;td&gt;与 Coding GPU 平台不是直接依赖，但可参考多轮 Agent 评估和执行&lt;/td&gt;&lt;td&gt;低到中：按需研究&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;GLM-5 系列的部署说明值得重点阅读，因为它清楚地展示了模型能力与 Serving Engine 的分工：模型仓库提供权重和参数配置，实际部署推荐使用 vLLM、SGLang 等推理引擎，并配置对应的 Reasoning Parser、Tool Call Parser 和 Speculative Decoding。换言之，GLM 模型是否能在企业平台稳定运行，很大程度上取决于推理引擎的模型适配是否成熟。&lt;/p&gt;
&lt;p&gt;对于 Coding Agent，不能只验证 Chat Completions API 返回正常。需要单独测试 GLM 的 thinking 内容处理、reasoning parser、tool-call parser、并行工具调用、JSON 参数格式、长任务中间状态和多轮上下文。尤其要验证 Agent Harness 是否正确处理模型的思考字段与工具调用边界，避免把内部 reasoning 内容错误地当作普通回答或持久化到不合适的日志中。&lt;/p&gt;
&lt;p&gt;GLM-5 仓库还提供模型相关的 Agent Skill 和示例，可以用来理解 GLM 的推荐使用方式，但这并不等于提供了完整的企业 Agent Runtime。企业仍需要自行实现 Session 生命周期、工具权限、沙箱、审计、任务恢复和模型路由。&lt;/p&gt;
&lt;h3&gt;17.4 三家项目在架构中的位置&lt;/h3&gt;
&lt;p&gt;下面的图将三家公司的开源项目映射到企业 GPU AI Coding 平台。它表示逻辑分层，不意味着所有组件都应该同时部署。&lt;/p&gt;
&lt;pre&gt;flowchart TB
    Dev[&quot;Developer / IDE&quot;]
    Agent[&quot;Agent Runtime / Harness&quot;]
    Gateway[&quot;AI Gateway / Model Router&quot;]
    Serving[&quot;Inference Engine&quot;]
    KV[&quot;KV Cache / Transfer / Scheduler&quot;]
    EP[&quot;MoE Communication&quot;]
    Kernel[&quot;Attention / GEMM / Quantization Kernels&quot;]
    GPU[&quot;HGX B300 / GB300 NVL72&quot;]

    Dev --&amp;gt; Agent --&amp;gt; Gateway --&amp;gt; Serving
    Serving &amp;lt;--&amp;gt; KV
    Serving &amp;lt;--&amp;gt; EP
    Serving --&amp;gt; Kernel --&amp;gt; GPU

    DSAgent[&quot;DeepSeek Harness&quot;]
    KimiAgent[&quot;Kimi Code&quot;]
    GLMSkill[&quot;GLM Skills / Examples&quot;]
    DSInfer[&quot;DeepInfer&quot;]
    Mooncake[&quot;Mooncake&quot;]
    DeepEP[&quot;DeepEP&quot;]
    MoonEP[&quot;MoonEP&quot;]
    DSKernel[&quot;DeepGEMM / FlashMLA / TileKernels&quot;]
    KKernel[&quot;FlashKDA&quot;]

    DSAgent -. &quot;Agent 层参考&quot; .-&amp;gt; Agent
    KimiAgent -. &quot;Agent 层参考&quot; .-&amp;gt; Agent
    GLMSkill -. &quot;模型使用参考&quot; .-&amp;gt; Agent
    DSInfer -. &quot;模型专用执行引擎&quot; .-&amp;gt; Serving
    Mooncake -. &quot;KV / Transfer&quot; .-&amp;gt; KV
    DeepEP -. &quot;EP 通信&quot; .-&amp;gt; EP
    MoonEP -. &quot;EP 负载均衡&quot; .-&amp;gt; EP
    DSKernel -. &quot;计算 Kernel&quot; .-&amp;gt; Kernel
    KKernel -. &quot;Kimi 架构 Kernel&quot; .-&amp;gt; Kernel&lt;/pre&gt;
&lt;h3&gt;17.5 面向企业 B300 项目的优先级建议&lt;/h3&gt;













































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;优先级&lt;/th&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;建议动作&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;DeepSeek DeepInfer&lt;/td&gt;&lt;td&gt;使用目标 DeepSeek 模型做独立 POC；确认它与统一 Serving 层的集成边界&lt;/td&gt;&lt;td&gt;官方推理执行路径，可能带来模型专用性能收益，但公开版不是完整在线服务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;DeepEP&lt;/td&gt;&lt;td&gt;在单节点 NVLink 和跨节点 RDMA 环境分别测试&lt;/td&gt;&lt;td&gt;MoE 模型的通信效率可能成为 B300 集群的核心瓶颈&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;Mooncake&lt;/td&gt;&lt;td&gt;先验证 KV Cache 命中、Store 和 Transfer Engine，再考虑 Prefill/Decode 分离&lt;/td&gt;&lt;td&gt;Coding Agent 多轮请求和共享前缀有潜在收益&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;vLLM / SGLang&lt;/td&gt;&lt;td&gt;作为 DeepSeek、Kimi、GLM 的统一基线引擎&lt;/td&gt;&lt;td&gt;跨模型兼容性和生态成熟度比单一厂商专用引擎更重要&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;DeepGEMM / FlashMLA / TileKernels&lt;/td&gt;&lt;td&gt;跟踪其在目标模型和 Blackwell 上的上游集成及性能差异&lt;/td&gt;&lt;td&gt;决定 FP8/FP4、Attention 和 MoE Kernel 的性能上限&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;MoonEP&lt;/td&gt;&lt;td&gt;与 DeepEP 在相同 MoE Trace 下比较&lt;/td&gt;&lt;td&gt;关注动态 Expert 负载平衡是否能提高集群有效吞吐&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;DeepSeek Harness / Kimi Code&lt;/td&gt;&lt;td&gt;评估 Agent Runtime 的插件、工具和任务管理设计&lt;/td&gt;&lt;td&gt;对上层 Coding Agent 平台有参考价值，但不应替代 GPU Serving&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;GLM-5 部署 Recipes&lt;/td&gt;&lt;td&gt;建立模型适配自动化和 Tool/Reasoning Parser 回归测试&lt;/td&gt;&lt;td&gt;多模型平台必须保证模型协议行为一致&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P2&lt;/td&gt;&lt;td&gt;checkpoint-engine&lt;/td&gt;&lt;td&gt;在多副本模型更新和无中断发布有明确需求时做验证&lt;/td&gt;&lt;td&gt;解决模型权重更新问题，不是首期必需组件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P2&lt;/td&gt;&lt;td&gt;3FS&lt;/td&gt;&lt;td&gt;只有模型加载或共享存储成为瓶颈时才做专项评估&lt;/td&gt;&lt;td&gt;企业已有高性能存储时不一定值得替换&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;P2&lt;/td&gt;&lt;td&gt;slime / AgentRL / DeepSpec&lt;/td&gt;&lt;td&gt;只有开展后训练、Agent RL 或推测解码研发时再投入&lt;/td&gt;&lt;td&gt;不属于首期在线推理平台的必要依赖&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;建议把三家项目分为两条技术路线：一条是&lt;strong&gt;模型专用优化&lt;/strong&gt;，例如 DeepInfer、DeepEP、FlashMLA；另一条是&lt;strong&gt;通用平台基础设施&lt;/strong&gt;，例如 Mooncake、vLLM、SGLang 和统一 Gateway。模型专用优化应通过适配层引入，不能让企业平台的控制面被单一模型厂商的实现锁定。&lt;/p&gt;
&lt;h2&gt;19. 其它值得关注的 GPU 大模型部署与推理开源项目&lt;/h2&gt;
&lt;p&gt;DeepSeek、Kimi 和 GLM 的项目能反映模型厂商自身的技术路线，但企业平台不能只依赖模型厂商的仓库。真正的生产部署生态由多个社区共同构成：推理引擎、分布式 Serving、KV Cache、GPU Kernel、量化、Kubernetes 管理、监控和 Benchmark 各有专门项目。&lt;/p&gt;
&lt;p&gt;本节按工程职责分类。项目被列入并不代表应该全部引入；优先选择少数成熟组件，避免出现多个 Gateway、多个 Scheduler 和多套 KV Cache 管理系统互相争抢职责。&lt;/p&gt;
&lt;h3&gt;18.1 核心推理引擎：先比较这三个&lt;/h3&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;定位&lt;/th&gt;&lt;th&gt;主要能力&lt;/th&gt;&lt;th&gt;对 B300 的评估建议&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vllm-project/vllm&quot;&gt;vLLM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;通用 LLM Serving Engine&lt;/td&gt;&lt;td&gt;PagedAttention、Continuous Batching、Prefix Caching、OpenAI API、TP/PP/EP 和多种 KV Connector&lt;/td&gt;&lt;td&gt;&lt;strong&gt;首选基线&lt;/strong&gt;。模型覆盖广、生态和集成多，优先验证目标模型的 Blackwell Kernel、量化和多节点 EP&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/sgl-project/sglang&quot;&gt;SGLang&lt;/a&gt;&lt;/td&gt;&lt;td&gt;高性能 Serving Runtime&lt;/td&gt;&lt;td&gt;RadixAttention、结构化生成、Prefix Cache、Speculative Decoding、MoE 和多种分布式 Serving 路径&lt;/td&gt;&lt;td&gt;&lt;strong&gt;必须并行评估&lt;/strong&gt;。特别关注 GLM、Kimi、DeepSeek 的模型适配、Blackwell 镜像和 Agent 多轮缓存&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/NVIDIA/TensorRT-LLM&quot;&gt;TensorRT-LLM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;NVIDIA 优化推理框架&lt;/td&gt;&lt;td&gt;TensorRT 优化、量化、专用 Kernel、分布式推理和 Serving&lt;/td&gt;&lt;td&gt;&lt;strong&gt;NVIDIA 环境重点候选&lt;/strong&gt;。适合验证 NVFP4、Blackwell 专项优化；要考虑 Engine Build、版本矩阵和模型支持成本&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;三者不是简单的“谁的 tokens/s 更高”。对企业 Coding Agent，建议用相同模型权重、量化格式、上下文长度、请求 Trace 和 Agent Harness，分别测量 TTFT、TPOT、Goodput、KV Cache 命中率、工具调用正确率和每个成功任务成本。&lt;/p&gt;
&lt;p&gt;首期不要把三种引擎全部作为长期生产系统运营。建议 vLLM 作为兼容性基线，SGLang 作为性能和 Agent 工作负载候选；如果 TensorRT-LLM 在目标 B300 配置上带来足够明确的收益，再决定是否承担其专用构建和维护流程。&lt;/p&gt;
&lt;h3&gt;18.2 分布式 Serving 与控制平面：把单机引擎变成集群服务&lt;/h3&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;定位&lt;/th&gt;&lt;th&gt;主要职责&lt;/th&gt;&lt;th&gt;适合解决的问题&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/ai-dynamo/dynamo&quot;&gt;NVIDIA Dynamo&lt;/a&gt;&lt;/td&gt;&lt;td&gt;分布式推理框架 / 控制层&lt;/td&gt;&lt;td&gt;Frontend、KV-aware Router、SLO Planner、KV 管理、NIXL、Prefill/Decode 分离和 Grove&lt;/td&gt;&lt;td&gt;多节点、多 GPU Pool、Prefill/Decode 独立扩缩容、KV-aware 路由&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/llm-d/llm-d&quot;&gt;llm-d&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kubernetes-native 推理平台&lt;/td&gt;&lt;td&gt;在 Kubernetes 上编排 vLLM、SGLang 等 Model Server，提供 Inference Scheduler、Endpoint Picker、Prefix Cache 感知路由和运维路径&lt;/td&gt;&lt;td&gt;已有 Kubernetes 平台，希望用云原生方式部署和运营推理服务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vllm-project/aibrix&quot;&gt;AIBrix&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kubernetes LLM Control Plane&lt;/td&gt;&lt;td&gt;Gateway、模型路由、推理指标驱动 Autoscaling、LoRA 生命周期、KV Cache 和多引擎管理&lt;/td&gt;&lt;td&gt;多模型、多副本、多租户和成本优化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/ray-project/ray&quot;&gt;Ray&lt;/a&gt; / &lt;a href=&quot;https://github.com/ray-project/kuberay&quot;&gt;KubeRay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;分布式计算与编排&lt;/td&gt;&lt;td&gt;分布式任务、Actor、Serve 和集群管理&lt;/td&gt;&lt;td&gt;需要自定义分布式执行或特定推理框架依赖 Ray 时&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/kserve/kserve&quot;&gt;KServe&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kubernetes Model Serving&lt;/td&gt;&lt;td&gt;模型服务 CRD、部署、扩缩容和标准化 Serving 接口&lt;/td&gt;&lt;td&gt;企业已有 KServe 生态或同时部署传统 ML / 多模态模型时&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Dynamo、llm-d 和 AIBrix 如何选择&lt;/h4&gt;
&lt;p&gt;这三个项目都在解决推理服务的集群化问题，但抽象边界和生态重点不同。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dynamo&lt;/strong&gt; 更偏向分布式推理运行时和数据路径，强调 KV-aware Routing、Prefill/Decode Disaggregation、NIXL 数据传输、SLO Planner，以及与 vLLM、SGLang、TensorRT-LLM 的组合。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;llm-d&lt;/strong&gt; 更偏向 Kubernetes-native 的推理编排和生产运营，把模型 Server 与 Router / Scheduler 分开，提供 Well-Lit Paths、InferencePool、Endpoint Picker、Prefix Cache 感知调度和生产运维能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AIBrix&lt;/strong&gt; 更偏向 LLM 应用基础设施和控制面，关注 Gateway、模型与 LoRA 生命周期、推理指标驱动扩缩容、KV Cache 和多模型运营。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不建议把三者全部部署后再决定谁负责路由。它们在 Gateway、Scheduler、Autoscaler、KV-aware Routing 等领域存在重叠。POC 时应画出实际组件边界，明确每个能力只有一个 Owner。例如：由 Dynamo 负责 P/D 和 KV 传输，外层 Gateway 负责企业身份与配额；或者由 llm-d 负责 Kubernetes InferencePool 和调度，底层引擎使用 vLLM。不要让两个控制平面同时管理同一批 Pod 和同一组流量策略。&lt;/p&gt;
&lt;h3&gt;18.3 KV Cache、数据传输和 Prefill / Decode 分离&lt;/h3&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;定位&lt;/th&gt;&lt;th&gt;核心能力&lt;/th&gt;&lt;th&gt;评估重点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/kvcache-ai/Mooncake&quot;&gt;Mooncake&lt;/a&gt;&lt;/td&gt;&lt;td&gt;KV Cache Store / Transfer Engine&lt;/td&gt;&lt;td&gt;分布式 KV Cache、RDMA Transfer、Prefill/Decode 分离&lt;/td&gt;&lt;td&gt;长上下文、多轮 Agent、跨实例前缀复用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/LMCache/LMCache&quot;&gt;LMCache&lt;/a&gt;&lt;/td&gt;&lt;td&gt;KV Cache 管理与 Offload&lt;/td&gt;&lt;td&gt;GPU、CPU、磁盘等层级的 KV 缓存和复用&lt;/td&gt;&lt;td&gt;与 vLLM / SGLang 的连接器、缓存命中和 Offload 成本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/ai-dynamo/nixl&quot;&gt;NIXL&lt;/a&gt;&lt;/td&gt;&lt;td&gt;NVIDIA 低延迟数据传输库&lt;/td&gt;&lt;td&gt;KV Cache 等数据在 GPU、主机和存储之间的传输&lt;/td&gt;&lt;td&gt;GPU Direct RDMA、NVLink、InfiniBand / UCX 和拓扑适配&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/openucx/ucx&quot;&gt;UCX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;HPC 通信框架&lt;/td&gt;&lt;td&gt;高性能网络通信抽象&lt;/td&gt;&lt;td&gt;RDMA / InfiniBand / RoCE 底层传输和网络诊断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/NVIDIA/nccl&quot;&gt;NCCL&lt;/a&gt;&lt;/td&gt;&lt;td&gt;GPU Collective Communication&lt;/td&gt;&lt;td&gt;AllReduce、AllGather、ReduceScatter 等集合通信&lt;/td&gt;&lt;td&gt;Tensor / Expert Parallelism 的核心依赖，不是通用 KV Store&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/3FS&quot;&gt;3FS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;分布式文件系统&lt;/td&gt;&lt;td&gt;高性能共享文件和数据访问&lt;/td&gt;&lt;td&gt;模型权重加载、数据集和大规模缓存存储&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这里要区分 &lt;strong&gt;Collective Communication&lt;/strong&gt; 和 &lt;strong&gt;Point-to-Point KV Transfer&lt;/strong&gt;。NCCL 主要解决 GPU 集合通信；NIXL、Mooncake Transfer Engine 关注数据在生产者和消费者之间的传输；Mooncake Store、LMCache 关注 KV Cache 的存储、复用和分层管理。它们可以协作，但不能简单互相替代。&lt;/p&gt;
&lt;p&gt;对于 1000 人 Coding Agent 平台，KV Cache 项目值得重点研究，但部署顺序应是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先验证引擎内部 Prefix Cache；&lt;/li&gt;
&lt;li&gt;采集真实 Agent Session 的前缀复用率和上下文分布；&lt;/li&gt;
&lt;li&gt;再测试 CPU / DRAM / SSD Offload；&lt;/li&gt;
&lt;li&gt;当单实例缓存局部性明显限制容量时，才测试跨节点共享 KV；&lt;/li&gt;
&lt;li&gt;最后再决定是否分离 Prefill 和 Decode。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果直接从第一天就部署跨节点 KV Cache 和 P/D 分离，复杂度会明显增加，而且可能尚未有足够流量证明收益。&lt;/p&gt;
&lt;h3&gt;18.4 GPU Kernel 与算子库：决定性能上限&lt;/h3&gt;



























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;主要职责&lt;/th&gt;&lt;th&gt;与 B300 的关系&lt;/th&gt;&lt;th&gt;建议&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/flashinfer-ai/flashinfer&quot;&gt;FlashInfer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Attention、KV Cache、GEMM、MoE、Sampling Kernel&lt;/td&gt;&lt;td&gt;支持 Paged/Ragged KV、MLA、FP8/FP4、Blackwell GEMM 等&lt;/td&gt;&lt;td&gt;&lt;strong&gt;重点关注&lt;/strong&gt;，检查目标引擎是否已集成，避免重复手工替换&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Dao-AILab/flash-attention&quot;&gt;FlashAttention&lt;/a&gt;&lt;/td&gt;&lt;td&gt;高效 Attention Kernel&lt;/td&gt;&lt;td&gt;是多个推理框架常用的 Attention 实现基础之一&lt;/td&gt;&lt;td&gt;关注具体版本、GPU 架构和模型 Attention 类型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/NVIDIA/cutlass&quot;&gt;CUTLASS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CUDA C++ Kernel 模板库&lt;/td&gt;&lt;td&gt;Blackwell Tensor Core 和矩阵计算优化的重要基础&lt;/td&gt;&lt;td&gt;Kernel 工程师重点学习&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/triton-lang/triton&quot;&gt;Triton&lt;/a&gt;&lt;/td&gt;&lt;td&gt;GPU Kernel 编程语言 / 编译器&lt;/td&gt;&lt;td&gt;用于快速开发和优化 GPU Kernel；注意它不是 Triton Inference Server&lt;/td&gt;&lt;td&gt;对自定义算子和性能调优很有价值&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/tile-ai/tilelang&quot;&gt;TileLang&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tile-based Kernel DSL&lt;/td&gt;&lt;td&gt;DeepSeek TileKernels 等项目使用的 Kernel 开发方向&lt;/td&gt;&lt;td&gt;适合研究高性能算子和多后端 Kernel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepGEMM&quot;&gt;DeepGEMM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;FP8 / FP4 GEMM 和 MoE Kernel&lt;/td&gt;&lt;td&gt;DeepSeek 模型和 Blackwell 低精度矩阵计算相关&lt;/td&gt;&lt;td&gt;对 MoE / FP8 / FP4 workload 重点评估&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepEP&quot;&gt;DeepEP&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MoE 通信 Kernel&lt;/td&gt;&lt;td&gt;Expert Parallelism 的 Dispatch / Combine&lt;/td&gt;&lt;td&gt;与 GPU 网络和 NCCL 测试一起评估&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/ROCm/aiter&quot;&gt;AITER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;AMD GPU 优化算子&lt;/td&gt;&lt;td&gt;AMD MI 系列平台的算子路径&lt;/td&gt;&lt;td&gt;只有考虑 AMD GPU 时重点投入&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;大多数企业平台团队不应该自己维护一套 Attention Kernel。优先使用 vLLM / SGLang / TensorRT-LLM 已验证的 Kernel 组合，只有 Profiling 证明某个算子是瓶颈，且上游没有合适实现时，才开发自定义 Kernel。&lt;/p&gt;
&lt;h3&gt;18.5 量化与模型压缩&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;主要职责&lt;/th&gt;&lt;th&gt;适用场景&lt;/th&gt;&lt;th&gt;注意事项&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/NVIDIA/Model-Optimizer&quot;&gt;NVIDIA Model Optimizer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;NVIDIA 模型量化和优化工具&lt;/td&gt;&lt;td&gt;FP8、NVFP4 等 NVIDIA GPU 优化路径&lt;/td&gt;&lt;td&gt;重点验证 Blackwell 格式、校准和推理引擎集成&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vllm-project/llm-compressor&quot;&gt;llm-compressor&lt;/a&gt;&lt;/td&gt;&lt;td&gt;LLM 量化与压缩&lt;/td&gt;&lt;td&gt;为 vLLM 等推理后端准备量化模型&lt;/td&gt;&lt;td&gt;检查模型结构、量化算法、权重格式和运行时支持&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/bitsandbytes-foundation/bitsandbytes&quot;&gt;bitsandbytes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;低比特量化和优化器组件&lt;/td&gt;&lt;td&gt;低成本实验、特定模型量化&lt;/td&gt;&lt;td&gt;不要假定其量化路径等同于 Blackwell 原生 NVFP4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/AutoGPTQ/AutoGPTQ&quot;&gt;AutoGPTQ&lt;/a&gt;&lt;/td&gt;&lt;td&gt;GPTQ 量化&lt;/td&gt;&lt;td&gt;既有 GPTQ 模型和兼容生态&lt;/td&gt;&lt;td&gt;需要确认维护状态、模型支持和目标 GPU Kernel；不建议未经验证作为新平台默认方案&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;量化工具与推理引擎必须配套选择。量化产物的格式、Group Size、Scale、Activation Quantization、KV Cache 精度和 Kernel 支持都可能不同。一个模型可以被量化，不代表目标 Serving Engine 能以高性能加载它。&lt;/p&gt;
&lt;p&gt;对 B300 的建议是先用模型官方 FP8 权重建立基线，再测试 NVIDIA 原生 FP4 / NVFP4 或模型官方支持的低精度方案。比较时要同时看模型质量、工具调用正确率、长上下文退化、吞吐和成本，不能只看显存缩小比例。&lt;/p&gt;
&lt;h3&gt;18.6 Kubernetes GPU 管理、可观测性与性能测试&lt;/h3&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;主要职责&lt;/th&gt;&lt;th&gt;建议关注点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/NVIDIA/gpu-operator&quot;&gt;NVIDIA GPU Operator&lt;/a&gt;&lt;/td&gt;&lt;td&gt;在 Kubernetes 部署 Driver、Device Plugin、Container Toolkit、DCGM 等组件&lt;/td&gt;&lt;td&gt;GPU 节点标准化、升级、驱动管理和健康状态&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/NVIDIA/DCGM&quot;&gt;NVIDIA DCGM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;GPU 健康、性能和遥测&lt;/td&gt;&lt;td&gt;XID、ECC、温度、功耗、HBM、NVLink 和 GPU Health&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/prometheus/prometheus&quot;&gt;Prometheus&lt;/a&gt; / &lt;a href=&quot;https://github.com/grafana/grafana&quot;&gt;Grafana&lt;/a&gt;&lt;/td&gt;&lt;td&gt;指标采集与可视化&lt;/td&gt;&lt;td&gt;GPU、推理引擎、Router 和 Agent 的统一 Dashboard&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-collector&quot;&gt;OpenTelemetry&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace / Metric / Log 采集&lt;/td&gt;&lt;td&gt;关联 Agent Task、模型请求、KV Cache 和 GPU Worker&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/NVIDIA/aiperf&quot;&gt;NVIDIA AIPerf&lt;/a&gt;&lt;/td&gt;&lt;td&gt;生成式 AI Serving 性能测试&lt;/td&gt;&lt;td&gt;TTFT、ITL、吞吐和并发测试；注意固定模型和请求分布&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vllm-project/vllm/tree/main/benchmarks&quot;&gt;vLLM Benchmarks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;vLLM Serving Benchmark&lt;/td&gt;&lt;td&gt;适合推理引擎基准测试和回归&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vllm-project/guidellm&quot;&gt;GuideLLM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;LLM Serving 负载生成和性能分析&lt;/td&gt;&lt;td&gt;通过真实或合成请求分布测试服务能力&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/triton-inference-server/perf_analyzer&quot;&gt;GenAI-Perf&lt;/a&gt;&lt;/td&gt;&lt;td&gt;生成式 AI 推理性能分析工具&lt;/td&gt;&lt;td&gt;适合兼容相关接口的 Serving Benchmark，注意与 AIPerf 的工具定位重叠&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;性能工具也要分层：NCCL Tests 测通信，DCGM 测硬件状态，AIPerf / GuideLLM / vLLM Bench 测 Serving，Agent Evaluation 测代码任务成功率。没有一个工具可以替代完整的端到端压测。&lt;/p&gt;
&lt;h3&gt;18.7 Triton Inference Server 与 Triton 语言不要混淆&lt;/h3&gt;
&lt;p&gt;NVIDIA 生态里有两个容易混淆的项目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/triton-inference-server/server&quot;&gt;Triton Inference Server&lt;/a&gt;：模型 Serving Server，支持多种模型后端和协议，适合传统 ML、视觉、Embedding、Reranker 及多模型组合服务。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/triton-lang/triton&quot;&gt;Triton Language&lt;/a&gt;：GPU Kernel 编程语言和编译器，用来编写 GPU 算子。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在当前以自回归 LLM 为主的 Coding Agent 平台中，vLLM、SGLang、TensorRT-LLM 更适合作为核心 LLM Runtime；Triton Inference Server 可以承担非自回归模型或多模型组合 Serving，Triton Language 则属于 Kernel 开发工具。不要把它们当成同一层的替代品。&lt;/p&gt;
&lt;h3&gt;18.8 推荐的企业技术组合&lt;/h3&gt;
&lt;p&gt;对一个以 B300 / HGX B300 为主、约 1000 名开发者使用的企业平台，建议按阶段组合，而不是一次性引入全部开源项目。&lt;/p&gt;



















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;架构层&lt;/th&gt;&lt;th&gt;首选候选&lt;/th&gt;&lt;th&gt;第二候选 / 专项组件&lt;/th&gt;&lt;th&gt;首期是否必须&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU Node Runtime&lt;/td&gt;&lt;td&gt;NVIDIA Driver + CUDA + Container Toolkit&lt;/td&gt;&lt;td&gt;OFED / RDMA Core、Fabric Manager&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kubernetes GPU&lt;/td&gt;&lt;td&gt;NVIDIA GPU Operator&lt;/td&gt;&lt;td&gt;KubeRay（确有 Ray 负载时）&lt;/td&gt;&lt;td&gt;已有 K8s 时建议&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU Communication&lt;/td&gt;&lt;td&gt;NCCL + NCCL Tests&lt;/td&gt;&lt;td&gt;DeepEP、MoonEP、NIXL&lt;/td&gt;&lt;td&gt;NCCL 必须；EP / NIXL 按模型架构决定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Model Serving&lt;/td&gt;&lt;td&gt;vLLM&lt;/td&gt;&lt;td&gt;SGLang；TensorRT-LLM&lt;/td&gt;&lt;td&gt;是，至少选一个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Model-specific Runtime&lt;/td&gt;&lt;td&gt;DeepInfer（仅目标 DeepSeek 模型）&lt;/td&gt;&lt;td&gt;其它模型专用实现&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Distributed Serving&lt;/td&gt;&lt;td&gt;llm-d 或 NVIDIA Dynamo 或 AIBrix&lt;/td&gt;&lt;td&gt;根据现有 K8s 和推理架构选择&lt;/td&gt;&lt;td&gt;初期可以不引入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KV Cache&lt;/td&gt;&lt;td&gt;引擎内置 Prefix Cache&lt;/td&gt;&lt;td&gt;LMCache / Mooncake&lt;/td&gt;&lt;td&gt;内置缓存先行，外部缓存按数据验证&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kernel&lt;/td&gt;&lt;td&gt;推理引擎内置 Kernel&lt;/td&gt;&lt;td&gt;FlashInfer、DeepGEMM、FlashMLA、CUTLASS&lt;/td&gt;&lt;td&gt;不需要全部直接管理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Quantization&lt;/td&gt;&lt;td&gt;模型官方 FP8 + Model Optimizer / llm-compressor&lt;/td&gt;&lt;td&gt;FP4 / NVFP4 专项路径&lt;/td&gt;&lt;td&gt;FP8 基线必须，低精度按质量验证&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Metrics / Logs / Trace&lt;/td&gt;&lt;td&gt;DCGM + Prometheus + Grafana + OpenTelemetry&lt;/td&gt;&lt;td&gt;Loki / ClickHouse 等&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serving Benchmark&lt;/td&gt;&lt;td&gt;AIPerf / GuideLLM / vLLM Bench&lt;/td&gt;&lt;td&gt;自建 Trace Replay&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent Evaluation&lt;/td&gt;&lt;td&gt;企业内部 Coding Task Set&lt;/td&gt;&lt;td&gt;AgentBench 等公开评测&lt;/td&gt;&lt;td&gt;是，必须有内部任务集&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;推荐的初期架构&lt;/h4&gt;
&lt;pre&gt;flowchart TB
    subgraph Control[&quot;企业控制与管理层（CPU Nodes）&quot;]
      Auth[&quot;SSO / IAM / Policy&quot;]
      Gateway[&quot;AI Gateway / Model Router&quot;]
      Orchestrator[&quot;llm-d / Dynamo / 自建控制层（择一）&quot;]
      Observability[&quot;Prometheus / Grafana / OpenTelemetry&quot;]
    end

    subgraph Compute[&quot;GPU 推理层（HGX B300）&quot;]
      EngineA[&quot;vLLM Pool&quot;]
      EngineB[&quot;SGLang Pool&quot;]
      Specialized[&quot;DeepInfer Pool（可选）&quot;]
      Kernels[&quot;CUDA / NCCL / DeepEP / Kernel Libraries&quot;]
      EngineA --&amp;gt; Kernels
      EngineB --&amp;gt; Kernels
      Specialized --&amp;gt; Kernels
    end

    subgraph Cache[&quot;可选 KV Cache 层&quot;]
      Local[&quot;Engine Prefix Cache&quot;]
      Shared[&quot;Mooncake / LMCache（按需）&quot;]
      Local --&amp;gt; Shared
    end

    Agent[&quot;Coding Agent Runtime / Sandbox&quot;] --&amp;gt; Gateway
    Auth -.-&amp;gt; Gateway
    Gateway --&amp;gt; Orchestrator
    Orchestrator --&amp;gt; EngineA
    Orchestrator --&amp;gt; EngineB
    Orchestrator --&amp;gt; Specialized
    EngineA &amp;lt;--&amp;gt; Cache
    EngineB &amp;lt;--&amp;gt; Cache
    Specialized &amp;lt;--&amp;gt; Cache
    Compute --&amp;gt; Observability
    Control --&amp;gt; Observability&lt;/pre&gt;
&lt;p&gt;图中的 llm-d、Dynamo 和 AIBrix 是可选控制层，不是要求同时部署。初期若只有一个模型、一个引擎和少量副本，可以先用简单 Gateway + Kubernetes Service；等到多模型、多副本、KV-aware Routing 和独立 P/D Pool 成为真实需求，再引入更完整的控制平面。&lt;/p&gt;
&lt;h3&gt;18.9 最终选型原则&lt;/h3&gt;
&lt;p&gt;对于 B300 企业推理平台，最重要的不是开源项目数量，而是清楚划分职责并保持可替换性：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;模型与 Serving Engine 解耦&lt;/strong&gt;：模型仓库提供权重和模型配置，推理引擎负责运行，Gateway 负责模型路由和企业策略。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理引擎与控制平面解耦&lt;/strong&gt;：vLLM / SGLang / TensorRT-LLM 负责执行，Dynamo / llm-d / AIBrix 负责集群层调度和运营。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算通信与 KV 数据传输分开&lt;/strong&gt;：NCCL / DeepEP 处理集合通信和 MoE 通信，NIXL / Mooncake Transfer Engine 处理 KV 等数据移动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存缓存先于分布式缓存&lt;/strong&gt;：先把引擎内 Prefix Cache 用好，再根据真实命中率引入 LMCache 或 Mooncake。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel 采用上游集成优先&lt;/strong&gt;：先使用推理引擎已经验证的 Kernel，只有 Profiling 找到瓶颈才替换或自研。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能基准与业务评测并行&lt;/strong&gt;：AIPerf / GuideLLM 测服务吞吐，内部 Coding Task Set 测代码任务成功率和单位成功任务成本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制平面只保留一个主 Owner&lt;/strong&gt;：避免 Dynamo、llm-d、AIBrix 和自建 Gateway 对路由、扩缩容和模型生命周期产生重叠控制。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于当前项目，建议先深入阅读和 POC 的项目顺序是：&lt;strong&gt;vLLM、SGLang、DeepEP、DeepInfer、Mooncake、NVIDIA Dynamo / llm-d（二选一先做架构比较）、FlashInfer、NVIDIA GPU Operator、DCGM、AIPerf&lt;/strong&gt;。这组项目覆盖从 GPU 节点到模型 Serving、分布式推理、缓存、观测和压测的主要技术链路。其余项目根据模型架构和实际瓶颈逐步引入，而不是预先全部部署。&lt;/p&gt;
&lt;h2&gt;20. 业界真实案例：企业为什么自部署 GPU 推理，以及生产环境究竟怎么做&lt;/h2&gt;
&lt;p&gt;本章从企业实践而不是开源组件出发，回答几个架构决策问题：为什么不直接调用闭源模型 API？租 AWS、Google Cloud、IBM Cloud 或专业 GPU Cloud 的 GPU，算不算自部署？谁在使用这些平台？生产系统如何组织 GPU、Kubernetes、推理引擎、缓存和调度？实际踩过哪些坑？&lt;/p&gt;
&lt;p&gt;案例按控制边界分为三类：企业自有或自控推理平台；租 CSP / GPU Cloud 资源但自行运营推理服务；把推理基础设施交给专业平台运营商。第三类不是严格意义上的企业自部署，但对判断自建平台是否值得非常重要。厂商公开的性能和成本数字均保留其原始口径，不视为独立审计结果；公开资料没有披露的架构细节不会自行补齐。&lt;/p&gt;
&lt;h3&gt;19.1 自部署的定义：GPU 归谁所有不是关键&lt;/h3&gt;
&lt;p&gt;自部署（self-hosted / self-managed inference）的关键不是 GPU 的产权，而是企业是否控制模型服务的数据面和运行边界。&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;模式&lt;/th&gt;&lt;th&gt;GPU 资产归属&lt;/th&gt;&lt;th&gt;谁运营推理引擎与调度&lt;/th&gt;&lt;th&gt;数据和模型控制&lt;/th&gt;&lt;th&gt;是否属于企业自部署&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;企业自购 GPU、机房自建&lt;/td&gt;&lt;td&gt;企业&lt;/td&gt;&lt;td&gt;企业&lt;/td&gt;&lt;td&gt;企业&lt;/td&gt;&lt;td&gt;是，典型 On-Prem&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;企业租用 AWS EC2 GPU，在自己的 VPC / EKS 运行 vLLM&lt;/td&gt;&lt;td&gt;CSP&lt;/td&gt;&lt;td&gt;企业&lt;/td&gt;&lt;td&gt;企业控制主要服务边界&lt;/td&gt;&lt;td&gt;是，Cloud Self-Hosted&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;企业租用 CoreWeave / Lambda / Nebius 专属 GPU 集群，自行部署 K8s 和推理栈&lt;/td&gt;&lt;td&gt;GPU Cloud&lt;/td&gt;&lt;td&gt;企业或双方分工&lt;/td&gt;&lt;td&gt;取决于租户隔离、网络、运维权限和合同&lt;/td&gt;&lt;td&gt;可以是，需核实责任边界&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;企业租 Dedicated Endpoint，自己控制模型配置、容量和流量，但不管理节点和推理引擎&lt;/td&gt;&lt;td&gt;CSP / GPU Cloud&lt;/td&gt;&lt;td&gt;服务商&lt;/td&gt;&lt;td&gt;企业有一定模型和端点控制权&lt;/td&gt;&lt;td&gt;不是严格自部署，是 Dedicated Managed Inference&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Together AI / Fireworks / Bedrock / Vertex 等托管模型 API&lt;/td&gt;&lt;td&gt;服务商&lt;/td&gt;&lt;td&gt;服务商&lt;/td&gt;&lt;td&gt;主要由 API 合同、区域和保留策略约束&lt;/td&gt;&lt;td&gt;否，Managed API&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;企业在自己的 AWS Account 中创建 EKS、P4d/P5 GPU 节点、FSx for Lustre、VPC、IAM 和 ALB，把模型权重放进自己的存储，由自己运营 vLLM，即使没有购买 A100，也属于 Cloud Self-Hosted。反过来，服务商使用开源权重并不代表客户自部署；如果服务商管理节点、驱动、推理引擎和调度，客户只是调用 API，那么仍然是托管推理。&lt;/p&gt;
&lt;h3&gt;19.2 IBM Research + Red Hat：544 张 H100 服务数千个 Coding Agent&lt;/h3&gt;
&lt;p&gt;这是与本文目标最直接相关的公开案例之一。IBM Research 在 2026 年 9 月发布基于 llm-d 的部署报告：IBM Research、Red Hat 团队使用 544 张 NVIDIA H100 部署 GLM-5.2（约 753B 总参数、约 39B 激活参数的 MoE 模型），面向内部关键业务负载，并用 Agentic Benchmark 验证数千个并发 Coding Agent 的服务能力。IBM 报告称，峰值输出吞吐超过每分钟 660 万 Token，测试中最高支持 3,000 个并发 Coding Agent 且没有发生请求抢占。按其采用的当期云 GPU 租赁价格估算，单位 Token 成本约为商业闭源 API 的 1/5 到 1/10。这个 5–10 倍是 IBM 对特定模型、流量、租赁价格和 API 对比口径的测算，不是任何企业都能复制的固定成本优势。&lt;/p&gt;
&lt;p&gt;该案例最重要的不是 544 张卡，而是它对 Agentic Workload 的分析。团队基于 219 个真实 Claude Code Session 的数据，观察到典型请求的输入远大于输出：中位数约 195K 输入 Token，而输出约 317 Token；96% 的主 Agent 请求至少复用了前一个请求 90% 的输入内容。子 Agent 还会在没有预告的情况下并发启动，形成瞬时流量尖峰。这意味着 Coding Agent 的推理负载与普通聊天机器人不同：主要成本可能是重复读取上下文，而不是生成回答。&lt;/p&gt;
&lt;p&gt;系统组合包括：llm-d 做 Kubernetes-native 分布式推理编排；GLM-5.2 MoE 采用 Wide Expert Parallelism + Data Parallel Attention；Prefill 与 Decode 拆分为独立资源池；NIXL 在两组之间传输 KV Cache；Prefix-aware Routing 把请求路由到已经持有相关前缀缓存的 Worker；GPU KV Cache、CPU DRAM 分层缓存和 Peer-to-Peer KV Cache Sharing；Multi-Token Prediction 提升高并发 Decode 吞吐。&lt;/p&gt;
&lt;p&gt;公开的测试数据很有价值：精确 Prefix Matching 相比近似路由，在 CyberGym 测试中带来 79% 更高吞吐和 67% 更低 TTFT；完整系统把输入 Token 中约 85.2% 从缓存提供，未命中后需要重新 Prefill 的部分降到 14.8%。NIXL 在测试期间完成约 620 万次 KV Cache Transfer，平均每次约 2.71 GiB，Fleet P90 吞吐约 580 Gb/s，未观察到传输失败。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 大规模内部 Coding Agent、长上下文多轮 Agent 平台、已经拥有 H100 GPU Fleet 并希望提高其价值的组织。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 不能用普通 Chat Completion 的 QPS / Tokens per Second 模型估算 Coding Agent。要从 Agent Trace 得到输入长度、上下文重复率、子 Agent 并发、Prefill / Decode 比例和缓存命中率。对这类负载，路由是否命中 Prefix Cache、KV Cache 是否能跨 Worker 复用，可能比单 GPU 理论峰值算力更重要。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不要照搬：&lt;/strong&gt; 544 张 H100 是特定模型和负载的规模，不是 1000 名开发者的参考采购量。3000 并发是报告中的 benchmark / 内部负载结果，也不能直接等同于 3000 名同时活跃开发人员。必须用自己的 Agent Harness 和 Trace 重测。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://research.ibm.com/blog/running-open-models-on-h100-gpus-with-llmd&quot;&gt;IBM Research：How llm-d makes the most of the hardware you already have（2026-09-08）&lt;/a&gt;；&lt;a href=&quot;https://llm-d.ai/&quot;&gt;llm-d&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.3 Shopify：把高 Token 消耗的子任务交给自托管 Specialist Model&lt;/h3&gt;
&lt;p&gt;Shopify 在 2026 年 10 月公开了 Sidekick 的 Task Expert 实践。它不是把一个开源模型直接替换所有闭源模型，而是采用分层 Agent 架构：Frontier Model 负责与商家交互、规划和决定调用什么工具；上下文很重、任务边界清晰的子任务交给 Shopify 自己 Post-train 并托管的开源模型。&lt;/p&gt;
&lt;p&gt;一个具体例子是 GraphQL Subagent。商家询问哪些商品库存不足时，子 Agent 要读取 Shopify API Schema、搜索文档、编写并执行 GraphQL Query，再返回结果。该任务的输入 Token 约为输出 Token 的 40 倍。若一直使用按 Token 计费的 Frontier API，重复读取 Schema 和文档会造成较高成本。&lt;/p&gt;
&lt;p&gt;Shopify 基于 NVIDIA Nemotron 3.5 Lightning 做任务后训练。该 MoE 模型总参数约 30B，每 Token 激活约 3B。Shopify 报告称，经过六轮持续改进和约 61,000 条修复样本后，模型在其 GraphQL 任务 Judge 上达到 74.5 分，高于 Frontier Model 的 73 分；生产流量回放中，中位数完整响应时间为 0.87 秒，而 Frontier API 为 6.50 秒；最慢 1% 请求也快约 8 倍。该 Specialist Model 的服务成本比 Frontier Model 低约 90%。Shopify 还表示，跨其 Post-trained Models，自托管服务成本比 Frontier API 低约 90%–98%。&lt;/p&gt;
&lt;p&gt;值得借鉴的是它的工程流程，而不只是模型：先定义业务任务质量 Rubric；先把 Frontier Agent 做到足够好，形成质量基线；选择开源模型，在真实 Subagent、真实工具和同一个 Judge 中评估；从一开始就用 AIPerf 回放生产 Trace，输入内容使用合成文本，避免在性能测试中暴露客户数据；对 Batch Workload 比较 vLLM、SGLang 和 TensorRT-LLM；每晚把生产失败案例转化为训练数据，通过 Judge、Critic 和模拟商家回放持续修复模型。&lt;/p&gt;
&lt;p&gt;Shopify 还披露，使用 NVIDIA Megatron Bridge 在 Nebius 上进行跨节点后训练；同一个 FP8 后训练任务中，8 张 B300 相比 8 张 H200 快 1.86 倍，GPU-hours 减少 46%。这是训练效率对比，不应误读成推理吞吐提升。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 大型 SaaS、企业内部 Agent、具有稳定且重复的业务子任务、输入上下文显著大于输出的工作负载。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 自部署收益不一定来自把主模型全部换成开源模型。更稳妥的做法是把任务拆开：复杂规划继续使用 Frontier Model；Schema 查询、分类、抽取、固定工具调用等可评测子任务交给 Specialist Model。通过任务级评测、后训练和生产数据闭环，降低成本并减少单一供应商依赖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不要照搬：&lt;/strong&gt; Shopify 有明确业务任务、生产数据和专门评测体系。没有可靠 Ground Truth、Judge 校准和失败样本治理时，单纯 Fine-tune 不会自动得到同样收益。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://shopify.engineering/open-model-task-experts&quot;&gt;Shopify Engineering：How Shopify turns open models into task experts（2026-10-21）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.4 Perplexity：租 AWS A100 / H100，自己运营推理 API&lt;/h3&gt;
&lt;p&gt;Perplexity 的 pplx-api 是“租用 CSP GPU 仍然属于自部署”的典型案例。NVIDIA 客户案例披露，Perplexity 最初将 pplx-api 部署在 AWS EC2 P4d 实例上，每台 P4d 配备 8 张 A100 GPU；推理服务使用 TensorRT-LLM，并通过 AWS 与 Kubernetes 的集成扩展到数百张 GPU。模型服务面向外部开发者，支持多个开源模型。&lt;/p&gt;
&lt;p&gt;NVIDIA 案例给出的结果包括：相对其他部署平台，pplx-api 延迟最高可降低约 3.1 倍、首 Token 延迟最高可降低约 4.3 倍；切换外部推理 API 调用到 pplx-api 后，报告成本降低约 4 倍、每年节省约 60 万美元。后续在 AWS P5 H100 + FP8 配置下，相同配置比较 A100，延迟减半、吞吐提升约 200%。这些是 Perplexity / NVIDIA 公布的特定比较结果，不代表 H100 对任何模型都能得到相同提升。&lt;/p&gt;
&lt;p&gt;架构特点：GPU 资源租自 AWS EC2，不需要自己建设机房；模型服务和 API 产品由 Perplexity 自己运营；TensorRT-LLM 用于推理优化；Kubernetes 负责大规模部署和弹性扩展；通过小型 Classifier Model 把不同请求路由到不同 GPU Pod / 模型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 对外提供模型 API 的 AI 产品公司、需要高并发和稳定 SLA 的 SaaS、希望控制模型和推理优化而不愿自己建数据中心的团队。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 企业自部署的合理起点可以是租 CSP GPU，而不是先采购硬件。用租赁资源验证模型、服务架构、流量和单位成本，证明稳定需求后再决定长期 Reserved Capacity、Dedicated Cluster 或自购。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.nvidia.com/en-us/case-studies/perplexity/&quot;&gt;NVIDIA Customer Story：Perplexity&lt;/a&gt;；&lt;a href=&quot;https://blogs.nvidia.com/blog/ai-inference-platform/&quot;&gt;NVIDIA：Fast, Low-Cost Inference Offers Key to Profitable AI&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.5 Netflix：把 LLM Serving 接入已有模型平台，而不是另建孤岛&lt;/h3&gt;
&lt;p&gt;Netflix 在 2026 年公开了内部 Model Scoring Service（MSS）承载 LLM 的实践。它没有把 LLM Serving 当成完全独立的新平台，而是把模型推理集成到已有 JVM Serving Layer 和 MSS 中。&lt;/p&gt;
&lt;p&gt;已有 JVM Serving Layer 继续负责路由、Feature Retrieval、Candidate Generation、Post-processing 和 Logging。较小模型可以在 CPU 进程内运行；较大的 GPU 推理请求委托给 MSS。MSS 由 NVIDIA Triton 管理模型加载、Batching、GPU 调度和多框架 Serving，vLLM 负责实际 LLM Inference。系统同时提供内部 gRPC、KServe HTTP / gRPC 以及 OpenAI-compatible HTTP 接口。&lt;/p&gt;
&lt;p&gt;Netflix 公开的生产问题尤其有价值。Triton 的 vLLM Backend 与特定 vLLM API Surface 编译绑定，版本不匹配可能导致 Backend 完全无法加载，因此团队在构建服务镜像时固定兼容版本，并禁止模型作者在 Packaging 阶段自行覆盖 vLLM 版本。Triton 的 vLLM Backend 只需 JSON 配置模型权重和 Tokenizer，运行时动态生成 I/O Tensor Spec，降低模型制品与 Frontend 升级的耦合；需要自定义 Preprocess / Postprocess 或非标准执行流程的模型，则保留 Python Backend 作为 Escape Hatch。&lt;/p&gt;
&lt;p&gt;模型冷启动也被纳入平台设计：从 S3 或 Hugging Face 在启动时下载大型模型太慢，Netflix 在模型发布时就把权重物化到 Amazon FSx，启动时优先从高性能文件系统读取。部署层由 Java Control Plane 负责版本、健康检查、Autoscaling 和 Multi-region Rollout；模型接口稳定时采用 Red-Black 部署，接口发生破坏性变化时采用 Versioned Deployment，让新旧模型版本并行存在，代价是升级期间暂时增加 GPU 成本。&lt;/p&gt;
&lt;p&gt;可观测性方面，Triton 内置的 Metrics Bridge 只暴露了 40 多项 vLLM Metrics 中的 9 项，遗漏 Token Throughput、KV Cache Utilization 和 Prefix Cache Hit Rate 等关键指标。Netflix 因此增加轻量 Metrics Proxy，把 Triton HTTP Metrics 与 vLLM Prometheus MultiProcessCollector 的数据合并到统一 /metrics Endpoint。Constrained Decoding 的初始 Python 实现还受到 GIL 限制：Logits Processor 在 CPU 侧逐请求串行执行，Batch 越大尾延迟越差；团队迁移到 vLLM V1 的 Batch-level Processor，并把热点逻辑改为 C++，同时处理 Chunked Prefill 和 KV Cache Preemption 后 Token History 改变导致的状态机恢复问题。另一个 API 契约问题是 response_format 在某条集成路径中被接受却被丢弃，可能导致 JSON 约束没有真正生效。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 已经拥有成熟 Model Serving、MLOps 或 Feature Serving 平台的大型企业；不希望 LLM 再造一套独立控制面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; LLM 不一定要成为全新的平台孤岛。可以复用已有 Serving、Logging、Routing、KServe 和模型生命周期管理能力，只把 GPU Runtime 和 LLM 特有的 KV Cache / Decoding 能力作为专门扩展。API 兼容性必须做端到端契约测试，不能只检查 Gateway 返回 200。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://netflixtechblog.com/in-house-llm-serving-at-netflix-a5a8e799ea2c&quot;&gt;Netflix TechBlog：In-House LLM Serving at Netflix（2026-07-17）&lt;/a&gt;；&lt;a href=&quot;https://www.infoq.com/news/2026/07/netflix-llm-platform/&quot;&gt;InfoQ 对 Netflix 技术分享的整理（2026-07-27）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.6 Observe.AI：EKS 上真正的成本优化来自启动链路&lt;/h3&gt;
&lt;p&gt;Observe.AI 为 Contact Center Quality Assurance 提供 GenAI Moments，使用 LLM 分析客户与客服的对话。它在 AWS 上使用 EKS 运营 GPU 推理。业务增长时，系统遇到两个问题：GPU 推理成本较高，以及流量突增时新 GPU 节点和模型启动太慢。&lt;/p&gt;
&lt;p&gt;AWS 客户案例披露，模型从原先约 12–15 分钟的启动时间降到约 100 秒，LLM 每百万 Token 成本降低 40% 以上，整体基础设施成本也降低 40% 以上。&lt;/p&gt;
&lt;p&gt;关键优化并不是换一个更大的 GPU，而是改造模型冷启动和弹性扩容链路：原先新节点需要把模型权重从 S3 下载到本地磁盘，再加载到 GPU；团队引入 Run:ai Model Streamer，让模型权重可以从 S3 直接流入 GPU Memory。原先新节点启动时还要下载大型 Inference Container；团队改用 Bottlerocket AMI，并通过 EBS Snapshot 预置推理镜像，结合 EBS Fast Snapshot Restore 加速节点准备。扩缩容原先主要参考 CloudWatch Metrics；团队改为直接读取 SQS Queue 中的任务需求，让扩容依据更接近真正的待处理工作量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 业务负载有明显峰谷、使用异步队列、模型较大且 GPU 节点需要动态扩容的企业，例如客服质检、批量文档处理、离线代码分析和后台 Agent。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; GPU Auto Scaling 不等于 Kubernetes 把 Pod 副本数加上去。节点启动、镜像拉取、权重下载、模型加载、CUDA Graph 初始化和健康检查都可能耗时。必须把从发现需求到模型真正 Ready 的完整时间作为容量指标。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://aws.amazon.com/solutions/case-studies/observeai-case-study/&quot;&gt;AWS Customer Story：Observe.AI cuts AI inference costs by over 40%&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.7 AWS EKS + vLLM：客户在自己的 AWS Account 中运营模型服务&lt;/h3&gt;
&lt;p&gt;AWS 在 2025 年发布的参考架构展示了企业在自己 AWS Account 中部署 vLLM 的完整路径。架构使用 EKS、EC2 P4d（每台 8×A100）、EFA、FSx for Lustre、AWS Deep Learning Container、LeaderWorkerSet 和 ALB。&lt;/p&gt;
&lt;p&gt;模型权重存放在 FSx for Lustre；vLLM Pod 通过 Tensor Parallelism / Pipeline Parallelism 使用多 GPU，跨节点场景通过 EFA 提供高性能网络；ALB 对外暴露统一 API。AWS Deep Learning Container 提供经过预配置和测试的推理环境，降低 CUDA、NCCL、驱动和 EFA 依赖的安装工作。&lt;/p&gt;
&lt;p&gt;这不是特定企业的生产客户案例，而是 AWS 给自管 ML 用户的工程参考实现。它说明 CSP 可以托管 Kubernetes Control Plane 和提供 GPU 实例，但客户仍然自己管理模型权重、推理容器、模型配置和业务 API。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适用对象：&lt;/strong&gt; 已经使用 AWS、希望在现有 VPC / IAM / KMS / EKS 治理体系内运行模型服务的企业。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;需要注意：&lt;/strong&gt; 参考架构中的 P4d、FSx、EFA 和 LeaderWorkerSet 只是可运行起点，不等于生产平台已经完成。企业仍需补充私有模型仓库、镜像扫描、模型制品签名、身份认证、租户隔离、限流、审计、故障切换、容量配额和成本归属。多节点推理还需要独立验证 EFA / NCCL 拓扑和实际网络吞吐。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://aws.amazon.com/blogs/architecture/deploy-llms-on-amazon-eks-using-vllm-deep-learning-containers&quot;&gt;AWS Architecture Blog：Deploy LLMs on Amazon EKS using vLLM Deep Learning Containers（2025-08-14）&lt;/a&gt;；&lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/ml-inference-load-serve-model.html&quot;&gt;AWS EKS Load &amp;amp; Serve Models&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.8 Google Distributed Cloud Air-Gapped：监管和数据主权驱动的隔离部署&lt;/h3&gt;
&lt;p&gt;Google Distributed Cloud（GDC）Air-Gapped 提供了一个 Open Weight Model 参考架构，面向不能连接公有云、不能把数据发送到外部模型 API 的环境。它支持在客户控制的隔离集群中使用 Kubernetes 部署 vLLM 或 Ollama，模型权重存放在 Persistent Volume，镜像放入私有 Harbor Registry，通过 NetworkPolicy 和 ProjectNetworkPolicy 控制访问。&lt;/p&gt;
&lt;p&gt;部署过程包括：在有互联网的工作站下载模型权重和容器镜像；通过受控流程把容器镜像复制到隔离环境 Harbor；把模型权重上传到持久化卷，而不是打包进 Container Image；vLLM / Ollama Pod 挂载 PVC 后加载模型；Kubernetes Service / LoadBalancer 提供内部 API；Open WebUI 可作为可选 UI；使用 GPU Resource 和 Tensor Parallelism 部署模型，按环境能力使用 MIG。&lt;/p&gt;
&lt;p&gt;文档指出一个实际扩展限制：示例中的模型 PVC 使用 ReadWriteOnce；若 StorageClass 不支持 ReadOnlyMany，一个模型 Deployment 不能简单地挂载同一个 PVC 扩展多个副本，每个 Deployment 可能需要独立 PVC。这类存储访问模式限制容易在 POC 时被忽略，到了扩容阶段才暴露。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 银行、政府、国防、医疗、关键基础设施、研发数据高度敏感且有网络隔离要求的组织。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; Air-Gapped 不只是没有公网。镜像、模型权重、Tokenizer、依赖包、许可证、漏洞修复和升级都需要离线供应链流程。必须把模型制品、容器镜像、SBOM、签名、校验和、版本审批和离线补丁纳入平台设计。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://docs.cloud.google.com/distributed-cloud/hosted/docs/latest/gdcag/solutions/open-weight-models/reference-architecture&quot;&gt;Google Cloud：Open Weight Models reference architecture on GDC air-gapped&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.9 Cognition / Devin：在 CoreWeave 租用大规模 GPU，按 Agent 推理需求扩容&lt;/h3&gt;
&lt;p&gt;Cognition 公开表示，其在 CoreWeave 上运行 Devin 的训练、强化学习和生产推理，从桥接容量扩展到数千张 GPU，历时不到九个月。2026 年 CoreWeave 公告还提到，Cognition 与 CoreWeave 部署了 Vera Rubin NVL72，并由 Cognition 工程师执行客户侧推理基准；针对 SWE-2 Agentic Coding Workload，公开数据称相较 GB200 NVL72，Token Throughput 最高提升约 4.8 倍。&lt;/p&gt;
&lt;p&gt;这个案例说明专业 GPU Cloud 的价值不仅是按小时出租 GPU，还包括提前获得新一代硬件、机架级系统、网络和现场工程支持。对 Agentic Coding，长上下文、高并发、连续多步推理使 GPU 资源成为产品交付能力的一部分。&lt;/p&gt;
&lt;p&gt;公开资料没有完整披露 Devin 的生产推理集群具体软件栈、每个模型的 GPU 分配、实际利用率和完整成本，因此不能把它写成 CoreWeave 上某个可直接复制的 vLLM 部署方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; AI Native 产品公司、Agent SaaS、模型能力和推理吞吐直接决定收入的企业；需要快速获得大规模 GPU，而不愿从零建设数据中心的组织。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 专业 GPU Cloud 可以把机房、GPU 服务器、网络和部分集群运营交给供应商，但企业仍要管理模型服务、Agent 调度、请求优先级、KV Cache、模型升级、容量预测和业务 SLO。合同必须明确 GPU 代际、节点拓扑、网络带宽、故障替换、维护窗口、可用性、数据位置、网络隔离、预留容量和扩容交付时间。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://investors.coreweave.com/news/news-details/2026/CoreWeave-Delivers-NVIDIA-Vera-Rubin-NVL72-Performance-at-Production-Scale-Starting-With-Cognition/default.aspx&quot;&gt;CoreWeave：Cognition at Production Scale&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.10 Together AI + IBM Cloud + NVIDIA：专属 B300 集群由谁运营？&lt;/h3&gt;
&lt;p&gt;2026 年 8 月，IBM 宣布与 Together AI 达成多年期、约 2.4 亿美元的合作，在 IBM Cloud 上部署大规模 NVIDIA HGX B300 集群，采用 NVIDIA Spectrum-X Ethernet。IBM 提供 Cloud Infrastructure，NVIDIA 提供 GPU 和网络技术，Together AI 负责 Inference Platform。Together AI 在 2026 年 10 月介绍了该集群的企业推理用途。&lt;/p&gt;
&lt;p&gt;这是一个清楚的职责分工案例：GPU 服务器、机房、电力、网络和云基础设施由 IBM 提供；GPU 与网络平台由 NVIDIA 提供；模型运行、Serving Engine、模型适配和 Token 服务由 Together AI 运营；企业客户通过 Together AI 的服务消费推理能力。&lt;/p&gt;
&lt;p&gt;它不是每个企业在自己的账户中自建推理集群，而是专业推理服务商租用 / 采购 CSP 的 Dedicated GPU Capacity，再运营推理服务。对企业用户而言，这是介于公有 API 和完全自部署之间的方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 对开源模型有需求，但没有足够 GPU Infra 团队的企业；需要专属容量、较稳定价格和服务 SLA，又不想自己维护驱动、Kubernetes、NCCL 和推理引擎的组织。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 采购合同要把 Dedicated GPU 拆成可验证内容：是否独占物理 GPU、是否独占节点、网络是否独占、模型权重是否可自定义、服务商能否访问请求内容、模型更新和回滚由谁执行、容量扩容是否有保证、故障期间是否有替代资源。专属容量不等于数据主权，也不等于企业拥有完整运行控制权。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.together.ai/blog/expanding-our-enterprise-inference-capacity-with-ibm-cloud-and-nvidia&quot;&gt;Together AI：Expanding our enterprise inference capacity with IBM Cloud and NVIDIA（2026-10-06）&lt;/a&gt;；&lt;a href=&quot;https://www.prnewswire.com/news-releases/ibm-and-together-ai-sign-multi-year-agreement-to-scale-open-source-ai-inference-with-nvidia-ai-infrastructure-on-ibm-cloud-302847748.html&quot;&gt;IBM 新闻稿（2026-08-11）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.11 全球金融科技公司 + Together Dedicated Model Inference：56 张 B200 上的 Coding Agent 生产流量&lt;/h3&gt;
&lt;p&gt;Together AI 在 2026 年 9 月公开了一个匿名全球金融科技客户案例。客户用 GLM-5.2 运行内部 Coding Assistant，工作负载具有明显的工作时间峰值、低平均生成速率、长上下文和突发并发特征。它不是企业自己管理物理 GPU 和推理引擎，而是使用 Together 的 Dedicated Model Inference（DMI）；但客户工程团队拥有 Endpoint 配置、扩缩容、模型升级和蓝绿测试控制权。&lt;/p&gt;
&lt;p&gt;公开的生产配置包括：GLM-5.2 在 56 张 B200 上运行，14 个 Replica、每个 Replica 4 张 B200，Context Length 为 256K。客户优先考虑并发容量，而不是单 Replica 的最大吞吐。&lt;/p&gt;
&lt;p&gt;这个案例公开了真实的故障分析过程：客户把模型部署从较多小 Replica 调整为较少大 Replica，GPU 总数不变，但 Prefill 容量和 KV Cache Headroom 的比例发生变化。调整后几天内，Prefill 接近 100% 容量，请求开始排队 1–3 分钟，Decode Throughput 降到约 5 Token/s。Metrics API 分析一条持续 192 秒的慢请求后发现，它不是自己的计算量过大，而是排在其他请求形成的约 2.3M Token Pending Prefill 队列后面。团队发现默认 Cache-aware-by-hash 路由不适合当前会话分布，恢复经过调优的 Cache-session-aware Routing，并调整 Max In-flight per Worker 后，当天完成配置修复且没有停机。&lt;/p&gt;
&lt;p&gt;流量分布也很重要：客户报告的 Input Sequence Length p50 / p90 / p95 约为 81K / 163K / 178K Token，RPS p50 / p90 / p95 约为 3 / 6 / 7。它是低 RPS、超长输入、峰值并发显著的负载，不应该按普通聊天服务的平均 RPS 估算。&lt;/p&gt;
&lt;p&gt;客户还评估过 1M Context，但发现上下文长度翻倍会压缩并发容量，因此选择 256K / 512K 的工作区间。模型从 GLM-5.1 升级 GLM-5.2 时，在同一账户和 Endpoint Pattern 下完成切换，并通过自助控制面进行配置调整和蓝绿测试。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 金融科技、银行、证券、保险等拥有大量开发团队、Coding Agent 在工作时间集中使用、希望平台团队控制容量和模型发布节奏的组织。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; GPU 总数相同，不代表服务能力相同。Replica 数量、每个 Replica 的 GPU 数、Prefill / Decode 资源比例、Context Length、KV Cache 和 Router 策略都会改变有效并发。模型配置变更必须作为容量变更进行压测和灰度，不能当成普通参数调整。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;部署边界：&lt;/strong&gt; 这是 Dedicated Managed Inference，不是客户自己维护 GPU Driver / K8s / vLLM 的完整自部署。它展示了企业希望获得的运维自主权，也提醒我们：即使购买了专属 GPU 容量，若没有可操作的 Metrics API 和 Endpoint Configuration API，平台团队仍会成为所有扩容和故障排查的瓶颈。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.together.ai/blog/global-fintech-scales-coding-agent-traffic-with-dedicated-model-inference&quot;&gt;Together AI：How a global fintech scaled coding agent traffic with Dedicated Model Inference（2026-09-18）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.12 Samsung Semiconductor：On-Prem 平台首先解决数据控制和研发效率&lt;/h3&gt;
&lt;p&gt;Open WebUI 公布的 Samsung Semiconductor 客户案例称，Samsung Semiconductor 在内部 Kubernetes 集群部署了自托管 AI 平台，运行内部 LLM 和 SLM，使用内部数据库、内部网络隔离、内部 Observability Stack，并集成身份和审计控制。案例披露，团队先用 100 名分析人员进行 14 天试点，再在 30 天内扩大推广；研发团队报告开发周期缩短约 30%。&lt;/p&gt;
&lt;p&gt;这类案例与大规模 GPU 推理服务有明显区别：公开材料强调安全的内部 AI 使用入口、模型访问治理和研发流程效率，没有披露 GPU 型号、推理引擎、模型规模和底层 GPU 集群拓扑。因此不能从这份材料推导用了多少 GPU 或推理吞吐是多少。&lt;/p&gt;
&lt;p&gt;不过它披露了一个值得企业架构师注意的采用数据：首周活跃使用率较高，但后续每日活跃用户稳定在目标员工的 5%–10%。这说明“给 1000–5000 名员工部署一个私有 Chat UI”与“1000–5000 人每天都高频使用”完全不同。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 半导体研发、专有设计数据、实验室文档、内部知识和软件研发场景；首先需要建立员工使用入口、身份、审计和数据边界的企业。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 不要用员工总数推算 GPU 数量。先通过 Pilot 测出 DAU、并发 Session、每 Session 输入 Token、Agent / Chat 比例和峰值时间。平台推广也不能只交付 UI，还要有 SSO、审计、使用培训、帮助台和模型选择策略。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证据限制：&lt;/strong&gt; 该案例来自 Open WebUI 的客户案例页面，属于产品供应商发布的客户材料，性能和效率结果未经独立审计；它没有提供底层 GPU 和模型服务细节。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://docs.openwebui.com/enterprise/customers/samsung-semiconductor/&quot;&gt;Open WebUI：Samsung Semiconductor Private On-Prem AI Platform&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.13 Uber：混合使用自有机房 GPU 和 GCP GPU，资源编排跨集群&lt;/h3&gt;
&lt;p&gt;Uber 在 2026 年披露的 LLM Training Infrastructure 案例不是纯推理平台案例，但它说明企业不必在“全部自建”与“全部公有云”之间二选一。&lt;/p&gt;
&lt;p&gt;Uber 的内部 LLM 工作流同时使用自有 On-Prem 集群中的 A100 GPU，以及 Google Cloud 上的 H100 GPU VM。其 On-Prem 主机配置为 4×A100，GCP 主机使用 8×H100。资源通过内部 Crane Infrastructure 管理，Kubernetes 负责集群和硬件资源，Ray / KubeRay 负责分布式任务；多个 Kubernetes Cluster 通过 Federation Layer 根据资源可用性调度任务。&lt;/p&gt;
&lt;p&gt;训练栈使用 PyTorch、Ray、Hugging Face、DeepSpeed 和 NCCL，数据来自 Uber HDFS、Terrablob 和 Hugging Face。Uber 还讨论了 ZeRO-3 CPU Optimizer Offload 和 FlashAttention 对显存与训练吞吐的影响。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 已有企业数据中心和 GPU 资产，同时又需要 CSP 弹性资源的组织；需要在自有 GPU 和租赁 GPU 之间调度训练、微调、Batch Inference 或评估任务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 混合 GPU Fleet 的难点不是简单地把两个 Kubernetes Cluster 接起来，而是统一资源描述、GPU 型号能力、镜像和驱动兼容性、数据位置、网络带宽、身份凭据和任务可迁移性。不同云和本地集群的 GPU SKU、网络、存储和驱动栈并不完全等价。调度器必须知道任务能否跨集群运行，而不能只看还有多少张 GPU。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证据限制：&lt;/strong&gt; Uber 文章重点是 LLM Training / Fine-tuning Infrastructure，而不是证明同一套跨集群架构已经承担所有在线推理流量。它适合作为 Hybrid GPU Resource Management 案例，不应误称为生产 Coding Agent Serving 案例。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.uber.com/us/en/blog/open-source-and-in-house-how-uber-optimizes-llm-training/&quot;&gt;Uber Engineering：Open Source and In-House: How Uber Optimizes LLM Training（2026-04-14）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.14 Deutsche Telekom Industrial AI Cloud：把 GPU 作为主权 AI 基础设施提供给企业和公共部门&lt;/h3&gt;
&lt;p&gt;Deutsche Telekom 与 NVIDIA 建设了位于德国慕尼黑的 Industrial AI Cloud。Telekom 公开资料称，该 AI Factory 在 2026 年启动，采用最多约 10,000 张 NVIDIA Blackwell GPU（B200 与 RTX PRO 等），配套约 20 PB 存储，目标客户包括德国和欧洲企业、科研机构与公共部门。平台提供从数据中心、GPU Compute、软件平台、安全到行业应用的完整服务能力。&lt;/p&gt;
&lt;p&gt;它不是某家企业的内部自部署，而是区域性 Sovereign AI Infrastructure Provider。客户可以在本地司法管辖区内获得大规模 GPU 训练和推理能力，同时不必自行建设数据中心。&lt;/p&gt;
&lt;p&gt;公开客户和合作生态包括 SAP、Siemens、EY、Agile Robots、Wandelbots、Quantum Systems、PhysicsX 等；SOOFI 项目计划在该平台上训练和运行约 100B 参数的主权欧洲语言模型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 有数据主权、区域监管、工业数据和政府业务要求的欧洲企业与公共部门；需要大规模 GPU，但没有自建数据中心条件的机构。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 主权云不只是数据中心在本地。企业还要核实运营主体、管理员访问、远程运维、模型权重存放、日志和备份位置、供应链、加密密钥控制、跨境支持人员和故障恢复地点。数据驻留不自动等于完整数字主权。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.telekom.com/en/newsroom/latest-updates/media-information/2026/2/germany-s-first-ai-factory-for-industry&quot;&gt;Deutsche Telekom：Industrial AI Cloud（2026-02-04）&lt;/a&gt;；&lt;a href=&quot;https://www.telekom.com/en/newsroom/latest-updates/media-information/2025/11/ai-sovereignty-for-germany-and-europe&quot;&gt;Deutsche Telekom：AI sovereignty for Germany and Europe（2025-11-04）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.15 Ada：GPU Slicing 解决多模型协作中的资源碎片化&lt;/h3&gt;
&lt;p&gt;Ada 的客户服务 Agent 使用多个模型协作完成推理任务，其中一部分模型规模较小，并不需要独占一整张 GPU。AWS 客户案例披露，Ada 在迁移到 EKS 后，将模型容器部署在 Kubernetes 上，并对 Reasoning Engine 使用的 GPU 进行切分。AWS 报告称，GPU Slicing 让 GPU 使用成本效率提升约 20%；整体迁移还改善了部署速度和运维效率。&lt;/p&gt;
&lt;p&gt;这个案例提醒我们：企业内部并不是每个模型都需要 8 张 B300。模型池中可能同时存在大模型、Embedding、Reranker、Classifier、Guardrail、Small Language Model 和语音 / 视觉子模型。若所有服务都独占整卡，容易产生 GPU Fragmentation。&lt;/p&gt;
&lt;p&gt;但 GPU Sharing / Slicing 要区分 MIG、Time-slicing、MPS 和软件层虚拟化。它们的隔离、安全、显存保护、故障域和性能可预测性不同。多租户场景不能只为提高 GPU 利用率而牺牲性能隔离和安全边界。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 多模型、多服务、模型尺寸差异明显的企业 AI 平台；同时运行 Embedding、Reranker、分类、Guardrail 和多个小模型的团队。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://aws.amazon.com/solutions/case-studies/ada-support-eks-case-study/&quot;&gt;AWS Customer Story：Ada on Amazon EKS&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.16 反面参照：Superhuman / Grammarly 从自建 vLLM 转向托管 Serving&lt;/h3&gt;
&lt;p&gt;Superhuman（原 Grammarly）曾经运行自建 vLLM Serving Stack 和内部模型管理工具，支撑语法纠错模型。随着业务规模达到峰值 200K+ QPS，L40S GPU Fleet 的性能优化、容量规划、自动扩缩容和每次模型迭代所需的手工调优，逐渐占用精干 ML Infrastructure 团队的大量精力。&lt;/p&gt;
&lt;p&gt;2026 年，Superhuman 与 Databricks 合作迁移到 Databricks Model Serving Provisioned Throughput。公开材料称，联合优化将单个 H100 Pod 的吞吐从约 750 QPS 提高到 1,200 QPS，提升约 60%，并实现亚秒级 P99 延迟。优化包括 FP8 量化、减少 Python CPU 开销、把部分后处理从关键路径移走，以及 Attention Kernel 优化。团队在迁移前后通过质量评测和性能目标验证模型没有质量退化。&lt;/p&gt;
&lt;p&gt;这不是自部署成功案例，而是一个重要边界案例：即使企业已经有能力维护 vLLM，继续自建也未必有最高的业务价值。若团队真正的差异化在模型和产品，而 GPU Serving 的 Day-2 Operations 已成为负担，托管 Provisioned Throughput 可能更合理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 已经拥有内部推理平台、但规模和 SLA 要求不断增长的产品团队；需要判断是否应继续扩充 Infra Team，还是把 Serving 交给专业平台运营商。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.databricks.com/blog/how-superhuman-and-databricks-built-200k-qps-inference-platform-together&quot;&gt;Databricks：How Superhuman and Databricks built a 200K QPS inference platform together（2026-05-08）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;19.17 案例横向比较：不同组织到底在为什么付钱？&lt;/h3&gt;





















































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;案例&lt;/th&gt;&lt;th&gt;资源模式&lt;/th&gt;&lt;th&gt;谁使用&lt;/th&gt;&lt;th&gt;核心驱动&lt;/th&gt;&lt;th&gt;公开的工程经验&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;IBM Research / Red Hat&lt;/td&gt;&lt;td&gt;H100 Fleet，按云租赁价格核算&lt;/td&gt;&lt;td&gt;数千并发 Coding Agent / 内部业务&lt;/td&gt;&lt;td&gt;Agentic 输入 Token 成本、长上下文、模型自主权&lt;/td&gt;&lt;td&gt;Prefix-aware Routing、KV 分层、P/D 分离、NIXL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shopify&lt;/td&gt;&lt;td&gt;自有 GPU 服务 Specialist Model，Nebius 用于后训练&lt;/td&gt;&lt;td&gt;Sidekick 子 Agent&lt;/td&gt;&lt;td&gt;高重复输入、任务专用模型、成本与响应速度&lt;/td&gt;&lt;td&gt;Task Expert、Judge、生产数据闭环、Trace Replay&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Perplexity&lt;/td&gt;&lt;td&gt;AWS P4d / P5 租赁 GPU&lt;/td&gt;&lt;td&gt;外部 API 开发者与产品用户&lt;/td&gt;&lt;td&gt;API 成本、延迟、模型控制&lt;/td&gt;&lt;td&gt;TensorRT-LLM、Kubernetes、模型路由&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Netflix&lt;/td&gt;&lt;td&gt;内部 Model Scoring Service / GPU Runtime&lt;/td&gt;&lt;td&gt;Netflix 内部产品与 ML 工作流&lt;/td&gt;&lt;td&gt;复用现有 Serving、统一接口和生产控制&lt;/td&gt;&lt;td&gt;Triton + vLLM、版本锁定、端到端 API 契约&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Observe.AI&lt;/td&gt;&lt;td&gt;AWS EKS + GPU EC2&lt;/td&gt;&lt;td&gt;客户服务质检工作流&lt;/td&gt;&lt;td&gt;弹性、冷启动、单位 Token 成本&lt;/td&gt;&lt;td&gt;S3 到 GPU 权重加载、镜像预热、队列驱动扩容&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AWS EKS 参考架构&lt;/td&gt;&lt;td&gt;AWS GPU 实例租赁&lt;/td&gt;&lt;td&gt;客户自己的应用和开发者&lt;/td&gt;&lt;td&gt;在客户 AWS Account 中自管模型服务&lt;/td&gt;&lt;td&gt;EKS、EFA、FSx for Lustre、vLLM&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Google GDC Air-Gapped&lt;/td&gt;&lt;td&gt;客户控制的隔离基础设施&lt;/td&gt;&lt;td&gt;监管行业、内部用户&lt;/td&gt;&lt;td&gt;数据主权、网络隔离、BYOM&lt;/td&gt;&lt;td&gt;离线制品供应链、PVC、Harbor、NetworkPolicy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cognition / Devin&lt;/td&gt;&lt;td&gt;CoreWeave 专业 GPU Cloud&lt;/td&gt;&lt;td&gt;外部 Agent 产品用户&lt;/td&gt;&lt;td&gt;快速获得大规模 GPU 和新一代硬件&lt;/td&gt;&lt;td&gt;GPU Cloud 合作、Agentic Throughput、Rack-scale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Together AI&lt;/td&gt;&lt;td&gt;IBM Cloud Dedicated B300&lt;/td&gt;&lt;td&gt;Together 的企业推理客户&lt;/td&gt;&lt;td&gt;大规模专属推理容量&lt;/td&gt;&lt;td&gt;CSP / GPU Cloud / Inference Provider 分工&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Global Fintech&lt;/td&gt;&lt;td&gt;Together Dedicated Model Inference&lt;/td&gt;&lt;td&gt;内部 Coding Agent&lt;/td&gt;&lt;td&gt;峰值并发、长上下文、容量自助&lt;/td&gt;&lt;td&gt;Prefill 排队、缓存路由、Context 与并发取舍&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Samsung Semiconductor&lt;/td&gt;&lt;td&gt;On-Prem Kubernetes&lt;/td&gt;&lt;td&gt;研发人员和内部员工&lt;/td&gt;&lt;td&gt;研发数据保护、身份审计、员工效率&lt;/td&gt;&lt;td&gt;内部网络、SSO、审计、先试点再推广&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Uber&lt;/td&gt;&lt;td&gt;On-Prem A100 + GCP H100&lt;/td&gt;&lt;td&gt;内部模型研发团队&lt;/td&gt;&lt;td&gt;混合资源、训练弹性和资源利用&lt;/td&gt;&lt;td&gt;Kubernetes Federation、Ray / KubeRay&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Deutsche Telekom&lt;/td&gt;&lt;td&gt;区域 Sovereign AI Cloud&lt;/td&gt;&lt;td&gt;欧洲企业、科研和公共部门&lt;/td&gt;&lt;td&gt;数据主权、区域算力供给&lt;/td&gt;&lt;td&gt;本地数据中心、企业级 GPU 服务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ada&lt;/td&gt;&lt;td&gt;AWS EKS + GPU Sharing&lt;/td&gt;&lt;td&gt;客户服务 Agent&lt;/td&gt;&lt;td&gt;多模型资源碎片化&lt;/td&gt;&lt;td&gt;GPU Slicing、Kubernetes 多模型编排&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Superhuman&lt;/td&gt;&lt;td&gt;从自建 vLLM 转托管 Serving&lt;/td&gt;&lt;td&gt;大规模产品用户&lt;/td&gt;&lt;td&gt;Infra 运维负担和 SLA&lt;/td&gt;&lt;td&gt;FP8、CPU 热路径、Shadow / A/B 与托管服务&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这些案例对应几种不同经济和责任模型：自己买 GPU、自己运营；租 CSP GPU、自己运营；租专业 GPU Cloud 的 Dedicated Cluster；Dedicated Managed Inference；以及普通 Managed API。它们不是简单的技术先进程度排序，而是企业控制权、成本和运营责任的不同组合。&lt;/p&gt;
&lt;h3&gt;19.18 企业为什么要自部署：五类驱动因素，不能只讲“省钱”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;第一类：数据边界和监管要求。&lt;/strong&gt; 银行、保险、政府、医疗、国防、半导体研发和知识产权密集型企业，可能不允许源代码、客户数据、研究文档或交易数据离开企业控制的网络和司法管辖区。自部署能把模型权重、推理请求、日志和缓存放在企业控制的环境内。但这不自动解决安全问题：仍需做模型供应链、管理员访问、审计、密钥、日志脱敏、Prompt Injection 和数据外泄控制。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二类：长期、大量、可预测的 Token 消耗。&lt;/strong&gt; Coding Agent 的每个任务会调用模型多次，并可能启动并行子 Agent。输入 Token 常常远大于输出 Token，而且历史上下文重复出现。按 Token 计费的 API 成本会随着 Agent 使用量增加。IBM 和 Shopify 的案例都说明，当输入上下文很重、请求重复率高、任务可以专门优化时，开源模型 + 自有推理优化可能显著降低单位任务成本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三类：性能和服务行为可控。&lt;/strong&gt; 企业可以决定模型版本、量化精度、Context Length、Batching、KV Cache、路由策略、优先级、最大并发、模型更新窗口和故障降级策略。对内部 IDE / Coding Agent，企业可以按开发者、项目、任务优先级分配资源，而不必完全受外部 API 的限流和服务策略影响。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四类：模型定制和技术自主。&lt;/strong&gt; 企业可以做 LoRA / Fine-tuning、模型蒸馏、Tokenizer / Parser 适配、Tool Calling 约束、特定领域 Specialist Model，以及内部评测和持续改进。模型权重可控意味着模型行为可以被版本化、验证和回滚。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第五类：供应商风险和长期议价能力。&lt;/strong&gt; API 价格、模型版本、限流策略、可用区域和服务条款可能变化。自部署或混合部署可以降低单一供应商依赖，但也把一部分供应商风险转移成企业自己的硬件供应、软件兼容和运维风险。&lt;/p&gt;
&lt;p&gt;必须强调：&lt;strong&gt;“数据不能出企业”是自部署的强理由，但“自部署一定更便宜”不是。&lt;/strong&gt; 对低用量、波动很大、模型更新很快、没有 GPU 工程团队的组织，托管 API 往往更经济。&lt;/p&gt;
&lt;h3&gt;19.19 为什么租 CSP GPU 仍然有价值：它解决资本和设施问题，不会自动消除推理运维&lt;/h3&gt;
&lt;p&gt;租 GPU 的好处是：不需要一次性采购昂贵 GPU 服务器、交换机、机柜、电力和液冷设施；可以先租 1 台 8-GPU 节点或小型 GPU Pool 做 POC，避免过早锁定硬件；可以按需扩容，获得不同 GPU 代际和区域；可以复用 CSP 的 VPC、IAM、KMS、对象存储、Kubernetes 和监控；可以通过 Reserved Capacity / Savings Plans / Dedicated Cluster 获得比按需实例更稳定的容量和价格；并把数据中心设施运维交给 CSP。&lt;/p&gt;
&lt;p&gt;租 GPU 仍然需要企业自己处理：GPU Driver、CUDA、NCCL、容器、推理引擎和模型兼容；模型权重下载、存储、版本、缓存和启动时间；GPU 节点故障、XID、ECC、网络链路、RDMA、NCCL 错误；K8s 调度、模型 Replica、扩缩容、流量路由和负载隔离；KV Cache、Prefix Cache、Prefill / Decode、Batching 和量化；模型 API、认证、配额、审计、成本分摊和 SLO；云资源 Quota、区域容量、Spot 中断、预留合同和跨区恢复。&lt;/p&gt;
&lt;p&gt;因此，租 CSP GPU 不是“把运维外包给 AWS”。它通常只是把服务器采购、机房、供电和部分底层设施运维外包了；推理平台的 Day-2 Operations 仍然在企业。&lt;/p&gt;
&lt;h3&gt;19.20 自部署最容易踩的坑：从案例归纳的 12 条经验&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;按开发者人数买 GPU。&lt;/strong&gt; 注册用户、DAU、同时活跃 Agent、并发请求和 GPU 并发不是同一件事。先采集 Agent Trace，再建立容量模型。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用普通聊天流量估算 Coding Agent。&lt;/strong&gt; 输入上下文可能达到数万到数十万 Token，输出却很短；还会并发启动子 Agent。要按 Input Length、Prefix Reuse、Subagent Burst 和 Prefill / Decode 分别建模。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只看 Tokens/s，不看 Goodput。&lt;/strong&gt; 峰值 Token Throughput 不等于满足 SLO 的有效请求数。必须同时测 TTFT、TPOT / ITL、P95/P99、排队时间、请求完成率、错误率和 Agent Task Success Rate。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;忽略 KV Cache 和路由。&lt;/strong&gt; 长上下文下，缓存命中率和请求是否命中持有前缀的 Worker，可能直接决定系统能否承受并发。IBM 的数据说明，Prefix-aware Routing 的影响可能非常显著。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;盲目增加 Context Length。&lt;/strong&gt; Context 越长，单请求 KV Cache 占用越高，可并发 Session 越少。Together 金融科技案例展示，1M Context 不一定比 256K / 512K 更适合 Coding Agent。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只增加 GPU，不看 Prefill / Decode 比例。&lt;/strong&gt; Prefill 队列饱和时，Decode GPU 可能仍有资源；反之亦然。需要通过真实 Trace 判断是否值得做 P/D Disaggregation。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;把 Auto Scaling 当成即时扩容。&lt;/strong&gt; GPU 节点启动、镜像拉取、模型权重加载和 Runtime 初始化可能需要数分钟。必须有 Warm Pool、模型预热、镜像预置、权重流式加载和队列驱动扩容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不测试版本兼容矩阵。&lt;/strong&gt; Driver、CUDA、NCCL、Triton、vLLM、模型代码和 Kernel 版本互相影响。Netflix 案例表明，组件各自升级可能让部署无法加载或让 API 参数静默失效。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;以为 OpenAI-Compatible 就完全兼容。&lt;/strong&gt; Tool Calling、Reasoning Parser、Structured Output、Streaming、Cancellation、Logprobs、Response Format 和错误语义都要做契约测试。不能只验证 API 返回 200。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只测推理 Benchmark，不测真实业务质量。&lt;/strong&gt; FP8 / FP4、模型替换和 Fine-tuning 可能改变代码正确率、工具调用成功率和长任务稳定性。必须有内部 Coding Task Set、回归集和 Canary。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;低估存储和制品供应链。&lt;/strong&gt; 多副本扩容时，模型权重可能成为启动瓶颈；Air-Gapped 环境还需要离线镜像和模型供应链。模型权重不应临时从公共仓库下载到生产节点。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;忽略 GPU 故障和故障域。&lt;/strong&gt; 大规模集群中 GPU、NIC、交换机和节点故障是常态。要有 DCGM / XID 监控、节点隔离、Replica 冗余、模型重载和容量余量。GPU 利用率 100% 不是理想目标，生产服务必须保留处理突发和故障的 Headroom。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;19.21 自有 GPU、租 CSP GPU、Dedicated GPU Cloud、托管 API：经济性如何比较&lt;/h3&gt;
&lt;p&gt;不要只比较“每 GPU 小时价格”和“每百万 Token API 价格”。应统一到满足业务质量和 SLO 的成本口径。定义 GPU 租赁、预留或折旧成本为 (C_{gpu})，网络和跨区传输成本为 (C_{network})，模型权重、缓存、日志和高性能文件系统成本为 (C_{storage})，Kubernetes、监控、网关和数据库成本为 (C_{platform})，GPU Infra、Inference Engineering、SRE、安全和模型评测人力为 (C_{people})，自有 GPU 的电力、制冷、机房和资本成本为 (C_{facility})，质量与 SLA 达标的业务任务数为 (N_{success})。&lt;/p&gt;
&lt;p&gt;[
CostPerSuccessfulTask =
\frac{C_{gpu}+C_{network}+C_{storage}+C_{platform}+C_{people}+C_{facility}}
{N_{success}}
]&lt;/p&gt;
&lt;p&gt;API 方案的分子则应包含输入 / 输出 Token 费用、缓存费用、工具相关费用、专属吞吐或 SLA 附加费用，以及供应商切换和数据治理成本。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;场景&lt;/th&gt;&lt;th&gt;典型特征&lt;/th&gt;&lt;th&gt;更可能合适的模式&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;低用量、峰谷很大、模型需求频繁变化&lt;/td&gt;&lt;td&gt;GPU 长时间闲置，难以摊薄固定成本&lt;/td&gt;&lt;td&gt;托管 API / Serverless Inference&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;稳定中高用量、需要模型控制，但团队不想建机房&lt;/td&gt;&lt;td&gt;GPU 利用率可预测，已有 K8s / SRE 能力&lt;/td&gt;&lt;td&gt;CSP GPU + 自管推理，或 Dedicated GPU Cloud&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;长期高利用率、严格数据主权、模型和推理是核心能力&lt;/td&gt;&lt;td&gt;有足够平台团队，且有设施和采购能力&lt;/td&gt;&lt;td&gt;自购 GPU / 私有 GPU Cloud&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;用量大但缺乏 GPU 平台人才&lt;/td&gt;&lt;td&gt;需要固定容量和较稳定成本&lt;/td&gt;&lt;td&gt;Dedicated Managed Inference&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;工作负载混合&lt;/td&gt;&lt;td&gt;简单任务多、复杂任务少，部分任务有敏感数据&lt;/td&gt;&lt;td&gt;Hybrid：托管 API + 自管开源模型 + Specialist Model&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;自部署的盈亏平衡点不是一个固定 GPU 利用率。它取决于模型、输入 / 输出 Token 比例、API 单价、GPU 租赁单价、上下文长度、KV Cache 命中率、模型量化、SLO 和人力成本。建议用实际 Trace 计算每种方案的单位成功任务成本，而不是只算理论 Tokens/s。&lt;/p&gt;
&lt;h3&gt;19.22 对 1000 名开发者平台的建议：先混合，再逐步扩大自管范围&lt;/h3&gt;
&lt;p&gt;从这些案例推导，1000 名开发者的企业 Coding Agent 不必一开始就把所有请求迁移到自有 B300。更合理的路线是把模型按任务和数据边界分层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高敏感代码和企业私有上下文：&lt;/strong&gt; 优先进入企业控制的 VPC / 私有 GPU 集群，或经过严格验证的 Dedicated Inference。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;高频、输入很重、任务边界明确的工作：&lt;/strong&gt; 评估 Specialist Model、自托管开源模型和 Prefix Cache，优先从这类任务获取成本收益。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复杂规划、疑难调试和高质量代码生成：&lt;/strong&gt; 在质量和合规允许时保留 Frontier API，避免为了统一部署而牺牲任务成功率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embedding、Reranker、Classifier、Guardrail 等小模型：&lt;/strong&gt; 使用独立小模型池，必要时评估 MIG / GPU Sharing，避免占用大模型 GPU。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;离线代码扫描、批量文档处理和评估：&lt;/strong&gt; 使用可中断或低优先级 GPU Pool，与交互式 Coding Agent 隔离。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;峰值突发：&lt;/strong&gt; 通过弹性 CSP Capacity 或 Managed API 作为 Burst Capacity，避免为了极少数峰值长期购买大量闲置 GPU。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;建议实施顺序：先从现有 Coding Agent 采集脱敏 Trace，记录每任务模型调用次数、Input / Output Token、上下文长度、Cache Prefix、并行子 Agent、峰值并发、取消率、重试率和任务成功率；再选一个 Frontier API、一个开源模型和一个 Specialist Model，统一 Agent Harness、Tool Schema 和评测集；租 1–2 个 8-GPU 节点做 POC，验证单节点部署、模型质量、并发、TTFT、TPOT、KV Cache 和单位任务成本；之后测试多节点网络、RDMA / EFA / RoCE、NCCL、模型并行、权重加载、节点故障和扩容；首期选 vLLM 或 SGLang 建立稳定基线，不要同时运营多个复杂推理控制平面；真实数据证明需要时，再引入 llm-d / Dynamo、外部 KV Cache、P/D 分离和更复杂路由；最后保留托管 API 作为弹性和质量后备。&lt;/p&gt;
&lt;pre&gt;flowchart TB
    Dev[&quot;约 1000 名开发者 / IDE / Coding Agent&quot;]
    Agent[&quot;企业 Agent Runtime&amp;lt;br/&amp;gt;Session、工具调用、Sandbox、任务验证&quot;]
    Gateway[&quot;AI Gateway&amp;lt;br/&amp;gt;SSO、Policy、Quota、审计、模型路由&quot;]
    Router[&quot;Workload Router&amp;lt;br/&amp;gt;数据分类、任务类型、SLO、成本策略&quot;]

    subgraph Managed[&quot;托管模型与弹性容量&quot;]
      API[&quot;Frontier API / Managed Inference&quot;]
      Dedicated[&quot;Dedicated Managed Endpoint&quot;]
    end

    subgraph Private[&quot;企业自管推理平台（CSP GPU 或自有 GPU）&quot;]
      Control[&quot;Kubernetes / llm-d 或 Dynamo&amp;lt;br/&amp;gt;Deployment、Autoscaling、Routing&quot;]
      subgraph GPU[&quot;GPU Worker Pools&quot;]
        Code[&quot;Coding Model Pool&amp;lt;br/&amp;gt;vLLM / SGLang&quot;]
        Expert[&quot;Specialist Model Pool&amp;lt;br/&amp;gt;分类、抽取、工具子任务&quot;]
        Batch[&quot;Batch / Offline Pool&quot;]
      end
      KV[&quot;Prefix Cache / KV Cache&amp;lt;br/&amp;gt;GPU → CPU DRAM → 可选共享缓存&quot;]
      Obs[&quot;DCGM / Prometheus / OTel&amp;lt;br/&amp;gt;TTFT、TPOT、Goodput、成本&quot;]
      Control --&amp;gt; Code
      Control --&amp;gt; Expert
      Control --&amp;gt; Batch
      Code &amp;lt;--&amp;gt; KV
      Expert &amp;lt;--&amp;gt; KV
      GPU --&amp;gt; Obs
    end

    Dev --&amp;gt; Agent --&amp;gt; Gateway --&amp;gt; Router
    Router --&amp;gt; API
    Router --&amp;gt; Dedicated
    Router --&amp;gt; Control
    Gateway --&amp;gt; Obs
    Agent --&amp;gt; Obs&lt;/pre&gt;
&lt;p&gt;图中的托管 API 不是自部署的一部分，而是混合架构中的质量兜底和弹性容量。企业自管 GPU Pool 也不一定全部放在 On-Prem：可以先放在企业自己的 CSP Account / VPC 中，等负载、成本和运维能力稳定后再考虑长期预留或采购。&lt;/p&gt;
&lt;h3&gt;19.23 选型前必须向 CSP / GPU Cloud 问清楚的问题&lt;/h3&gt;




























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;必须问的问题&lt;/th&gt;&lt;th&gt;为什么重要&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU 资产&lt;/td&gt;&lt;td&gt;是物理独占 GPU、整机独占还是共享 GPU？能否指定型号、显存和代际？&lt;/td&gt;&lt;td&gt;避免把虚拟切片当成独占 GPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;拓扑&lt;/td&gt;&lt;td&gt;8 GPU 是否同一 NVLink 域？跨节点是什么 NIC、交换机和网络？&lt;/td&gt;&lt;td&gt;决定 TP / EP / P-D 的可行性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;网络&lt;/td&gt;&lt;td&gt;InfiniBand / RoCE / EFA 的有效带宽、超售比、拥塞控制和 RDMA 支持如何？&lt;/td&gt;&lt;td&gt;标称带宽不等于端到端有效带宽&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;容量&lt;/td&gt;&lt;td&gt;当前可交付数量、扩容 Lead Time、预留容量、故障替代 GPU 的承诺是什么？&lt;/td&gt;&lt;td&gt;新 GPU 紧缺时，合同容量和实际交付可能不同&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;隔离&lt;/td&gt;&lt;td&gt;VPC、节点、网络、存储和管理面分别如何隔离？运维人员能否访问内存或日志？&lt;/td&gt;&lt;td&gt;Dedicated 不等于完整数据隔离&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数据&lt;/td&gt;&lt;td&gt;Prompt、Completion、日志、模型权重和 KV Cache 是否会被服务商留存？&lt;/td&gt;&lt;td&gt;数据治理不能只看 API Retention Policy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;运维&lt;/td&gt;&lt;td&gt;Driver、Firmware、K8s、GPU Operator、NCCL、推理引擎由谁升级？谁负责回滚？&lt;/td&gt;&lt;td&gt;防止升级责任出现空档&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SLA&lt;/td&gt;&lt;td&gt;GPU 故障、网络故障、存储故障和整个节点故障分别如何计算 SLA？&lt;/td&gt;&lt;td&gt;不能只看 API Endpoint 可用性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;计费&lt;/td&gt;&lt;td&gt;按 GPU-hour、节点小时、预留容量还是 Token 计费？闲置容量、存储、出口、支持如何计费？&lt;/td&gt;&lt;td&gt;计算真实 TCO&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;退出&lt;/td&gt;&lt;td&gt;模型权重、缓存、日志和监控数据如何导出？终止合同后数据如何销毁？&lt;/td&gt;&lt;td&gt;避免被供应商锁定&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;19.24 本章结论&lt;/h3&gt;
&lt;p&gt;业界实践已经证明，企业自部署并不意味着必须拥有自己的 GPU 数据中心。Perplexity 在 AWS 上租 GPU 并运营自己的推理 API；IBM / Red Hat 以 H100 为基础验证数千个 Coding Agent 的开源模型服务；Cognition 在 CoreWeave 上获得大规模 Agentic Inference Capacity；Together AI 在 IBM Cloud 上运营专属 B300 推理集群。这些都说明 GPU 资产、推理平台和业务应用可以由不同主体分别负责。&lt;/p&gt;
&lt;p&gt;企业真正需要做的决策是：&lt;strong&gt;哪些控制权必须掌握在自己手里，哪些基础设施能力可以交给 CSP 或专业推理平台。&lt;/strong&gt; 数据边界、模型选择、请求路由、Agent Trace、质量评估和成本归属通常是企业需要保留的能力；机房、电力、GPU 服务器、部分 Kubernetes 管理和推理引擎运维则可以按组织能力外包。&lt;/p&gt;
&lt;p&gt;对约 1000 名开发者的 Coding Agent 平台，最值得借鉴的不是某个案例的 GPU 数量，而是三条共同经验：用真实 Agent Trace 而不是用户数估算容量，重点分析长上下文、重复输入、子 Agent 并发和 Prefill / Decode；用模型路由和 Specialist Model 把不同任务放到合适的成本层级，不要强制所有请求使用同一个大模型；把推理平台视为长期生产系统，建立版本兼容、缓存策略、冷启动优化、故障恢复、可观测性和单位成功任务成本核算。&lt;/p&gt;
&lt;p&gt;如果企业还没有成熟的 GPU Infra 团队，优先从租用 CSP GPU 的自管 POC 或 Dedicated Managed Inference 开始。只有当真实负载、质量收益、利用率和三年 TCO 都证明自管有优势时，再扩大长期预留容量或自购 GPU。自部署的目标不是拥有更多 GPU，而是以可接受的运营复杂度，获得数据、模型、性能和成本的可控性。&lt;/p&gt;
&lt;h2&gt;21. 更多业界案例：金融、医疗、自动化、制造业与云 GPU 平台&lt;/h2&gt;
&lt;p&gt;第 19 章已经讨论了大型 Coding Agent、企业自托管平台和 GPU Cloud。本章继续补充另一组案例，重点看不同产业的需求差异：金融机构为什么在自己的数据中心运行模型；医院如何让未经匿名化的病历留在院内；企业自动化平台为什么愿意租用 H200 并把 KV Cache 路由作为核心优化；汽车公司如何把 vLLM 纳入 Kubernetes 的生产运维；以及 CSP 和服务器厂商怎样把这些实践产品化。&lt;/p&gt;
&lt;p&gt;先说明证据口径。本章把案例分成三类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;客户生产 / 客户试点：&lt;/strong&gt; 有明确客户名称和部署结果，但仍需区分正式生产与有限范围 Pilot。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;客户与供应商联合技术实践：&lt;/strong&gt; 有真实客户负载和工程配置，但性能数字可能来自双方联合测试或特定配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;厂商参考架构：&lt;/strong&gt; 提供可复现的基础设施实现，说明“可以怎样部署”，不代表某个终端企业已经按该配置生产运行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;供应商发布的性能数字保留其原始口径，不视为独立审计结果；没有公开的信息不推断。&lt;/p&gt;
&lt;h3&gt;20.1 BC Card：韩国金融机构把 On-Prem GPU 推理平台用于多个业务流程&lt;/h3&gt;
&lt;p&gt;BC Card 是韩国支付和金融服务公司。Red Hat 于 2026 年 9 月发布的客户案例称，BC Card 基于 Red Hat OpenShift AI 建设了企业 AI 模型部署和运营平台，运行在 On-Prem GPU 环境中，覆盖加盟商筛查、RPA 和呼叫中心自动化等业务。&lt;/p&gt;
&lt;p&gt;公开案例给出的结果是：通过 vLLM、FP8 Dynamic Quantization 和 SLM Swarm Architecture，GPU 推理成本最高降低 70%，推理速度提升 2–3 倍，相关业务每年累计节省约 102,000 小时工作量。&lt;/p&gt;
&lt;p&gt;这个案例的架构意义在于，它不是只为一个聊天机器人部署一套大模型，而是建立一个可部署和运营多种 AI 模型的企业平台。金融机构的不同业务任务并不需要统一使用最大模型：加盟商筛查可能是信息抽取、风险分类和规则判断；RPA 需要结构化理解和工具调用；呼叫中心自动化则涉及语音转写、摘要、意图识别和辅助应答。将多个小模型组织成 SLM Swarm，可以让每个任务使用更合适的模型和资源，而不是把所有请求都路由给单个大模型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;部署边界：&lt;/strong&gt; 案例明确为 On-Prem GPU 和 OpenShift AI，但公开摘要没有给出 GPU 型号、GPU 数量、具体模型、节点拓扑、存储和网络配置。因此不能据此估算 BC Card 的集群规模，也不能推断其是否采用了多节点 Tensor Parallel 或 Prefill/Decode 分离。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 银行、支付机构、保险和大型金融服务组织；尤其是希望在同一个平台上运行多个受监管业务模型，而不是各部门自行搭建孤立推理服务的企业。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可借鉴经验：&lt;/strong&gt; 把模型服务做成平台能力，把业务任务做成可替换的 Model Endpoint；对不同任务建立独立质量评估和资源配额；量化和小模型编排应以业务质量为约束，而不是只追求 GPU 利用率。金融场景还要把模型调用、输入数据类别、输出、人工复核和模型版本纳入审计。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证据等级：&lt;/strong&gt; 厂商发布的具名客户案例。性能和效率数据是 Red Hat / 客户案例口径，公开摘要没有披露完整测试方法。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.redhat.com/en/resources/bc-card-openshift-ai-case-study&quot;&gt;Red Hat：BC Card enhances financial AI operations system with Red Hat OpenShift AI（2026-09-01）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.2 Tesla：从简单 vLLM StatefulSet 演进到 KServe + llm-d 的生产级推理管理&lt;/h3&gt;
&lt;p&gt;KServe 在 2026 年 4 月发布了一篇由 KServe、Red Hat 和 Tesla 工程师共同署名的生产实践文章。Tesla 的工程师明确参与了这套系统在生产环境中的验证。文章讨论的核心不是如何第一次启动 vLLM，而是如何在 Kubernetes 中规模化管理数百个 LLM、适配不同 Serving Topology，并处理 Day-2 Operations。&lt;/p&gt;
&lt;p&gt;团队最初把 vLLM 放在 Kubernetes StatefulSet 中。随着模型数量和部署规模增加，暴露出几个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;模型文件加载慢。&lt;/strong&gt; Llama 3 级别的模型权重达到数百 GB，直接依赖普通 NFS 读取 safetensors 不可接受。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地卷导致节点绑定。&lt;/strong&gt; 改用本地 LVM Persistent Volume 后，模型加载更快，但 Pod 和节点绑定变得僵硬；节点故障时需要人工删除 PVC 并重新调度，故障恢复操作不可接受。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;普通 Round Robin 不适合 LLM。&lt;/strong&gt; 请求被随机分配到 Worker，无法利用 Worker 上已有的 KV Cache；长 Prefill 请求可能集中在部分 GPU 上，其他 GPU 却没有得到有效利用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理拓扑需要演进。&lt;/strong&gt; 团队不希望 Kubernetes Operator 把系统锁定在单一 Prefill/Decode 架构，也希望通过标准 Kubernetes API 控制 vLLM 参数和硬件配置。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最终采用 KServe + llm-d + vLLM，并结合 Envoy、Envoy AI Gateway 和 Gateway API Inference Extension，实现 Prefix-cache-aware Routing。KServe 的 LLMInferenceService / LLMInferenceConfig 作为 Kubernetes API 暴露部署配置，llm-d 负责推理编排和路由，vLLM 负责模型执行。&lt;/p&gt;
&lt;p&gt;文章披露，在一套使用 Llama 3.1 70B、4 张 AMD MI300X、Tensor Parallel Size 为 4、最大上下文长度 65,536 的部署中，启用 Prefix Cache-aware Routing 后，输出 Token/s 提升约 3 倍，TTFT 降低约 2 倍。这是特定部署的前后对比，不代表所有模型和流量都能获得相同比例的收益。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 已有 Kubernetes 和 GPU Fleet、需要同时管理大量模型或多个模型版本的企业；尤其适合汽车、制造、研发等拥有多个内部 AI 应用团队的组织。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; GPU 推理的生产问题不止是模型进程是否存活。模型权重存储、节点故障后的卷恢复、Prefix Cache 命中、路由策略和推理拓扑都必须进入平台设计。用本地 NVMe 可以解决模型加载速度，却可能增加节点亲和和故障恢复复杂度；不能只优化启动性能而忽略可恢复性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;架构判断：&lt;/strong&gt; Tesla 这个案例值得作为 KServe + llm-d 的真实生产采用参考，但文章没有披露完整 GPU Fleet 规模、集群位置、云厂商和所有模型。因此不应将其描述成某种特定数量的 On-Prem GPU 集群。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://kserve.github.io/website/blog/production-grade-llm-inference-kserve-llm-d-vllm&quot;&gt;KServe：Production-Grade LLM Inference at Scale with KServe, llm-d, and vLLM（2026-04-21）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.3 Workato：租 DigitalOcean H200，Dynamo + vLLM 支撑企业 Agentic Automation&lt;/h3&gt;
&lt;p&gt;Workato 是企业自动化平台，AI Research Lab 正在把 Agentic AI 能力用于跨业务系统的推理、行动和流程编排。Workato 的平台累计处理超过 1 万亿次自动化工作负载，因此模型推理成本、吞吐和尾延迟会直接影响产品经济性。&lt;/p&gt;
&lt;p&gt;2026 年 3 月，DigitalOcean 公布了与 Workato 的联合部署和优化结果。Workato 使用 DigitalOcean Agentic Inference Cloud，由 DigitalOcean 提供 GPU 基础设施和 Managed Kubernetes，推理栈采用 NVIDIA Dynamo + vLLM，GPU 使用 NVIDIA H200。团队选择 H200 的重要原因是 141 GB HBM3e 显存，可以承载 100K Token 上下文对应的模型权重、KV Cache 和 Activation Buffer。公开测试中，整体工作负载内存占用约 125 GB。尽管单张 H200 能容纳该工作负载，团队仍使用每节点 8-way Tensor Parallel，以提高持续并发下的吞吐和延迟稳定性。&lt;/p&gt;
&lt;p&gt;系统并不是简单地把多个 vLLM Pod 放在 Load Balancer 后面，而是拆分为几个协作组件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dynamo Frontend：作为集群级 Router / Scheduler，决定请求应该交给哪个 Worker。&lt;/li&gt;
&lt;li&gt;vLLM Workers：运行模型并处理 Prefill / Decode。&lt;/li&gt;
&lt;li&gt;KV Cache Manager：跟踪各 Worker 的 KV Block、缓存重用和淘汰状态。&lt;/li&gt;
&lt;li&gt;DOKS：提供 Kubernetes 调度、服务发现和 Worker 部署环境。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认 Prefix Cache 只能让单个 Worker 利用本地缓存。如果两个具有相同长前缀的请求被分配到不同 Worker，仍可能重复计算 Prefill。Dynamo 的 KV-aware Router 维护跨 Worker 的缓存状态，综合 KV Overlap、Prefill 计算量和 Decode 负载选择 Worker。&lt;/p&gt;
&lt;p&gt;DigitalOcean 的技术文章报告，在相同 H200 硬件对比中，KV-aware Routing 使每 GPU 吞吐提升约 67%，高并发场景端到端延迟最多降低约 79%，TTFT 最多降低约 77%；对比其 A100 配置，H200 在相当性能下的硬件成本优势约 33%。DigitalOcean 的客户公告还报告模型推理成本降低 67%，达到每百万 Token 约 0.77 美元。所有数字都依赖其模型、负载、测试配置和服务计价口径，不能直接当作企业租赁 H200 的报价。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;部署边界：&lt;/strong&gt; 这是租用 DigitalOcean 的 GPU Cloud / Managed Kubernetes 并使用其 Agentic Inference Cloud，不是 Workato 自己管理底层 GPU 节点和 Kubernetes Control Plane 的完整自部署。Workato 参与模型和推理架构调优，DigitalOcean 承担平台和基础设施运营。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 企业自动化平台、Agent SaaS、需要处理大量企业工作流的 AI 产品；特别是长上下文、重复前缀、并发 Agent 较多的工作负载。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 对长上下文 Agent，集群级 KV-aware Routing 能直接改变单位 GPU 成本。它的价值不在于让单张 GPU 的 Kernel 更快，而在于避免不同 Worker 重复计算相同前缀。代价是系统复杂度明显上升：Router、Worker、KV Manager 需要同步状态，故障恢复和状态过期也必须纳入设计。没有足够的跨请求前缀重用时，额外的全局协调未必值得。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.digitalocean.com/blog/workato-nvidia-technical-deep-dive-agentic-inference-cloud&quot;&gt;DigitalOcean：How DigitalOcean’s Agentic Inference Cloud powered by NVIDIA GPUs Achieved 67% Lower Inference Costs for Workato（2026-03-04 更新）&lt;/a&gt;；&lt;a href=&quot;https://investors.digitalocean.com/news/news-details/2026/DigitalOcean-Powers-Workatos-Agentic-Enterprise-with-Production-scale-AI/default.aspx&quot;&gt;DigitalOcean Investor Relations：DigitalOcean Powers Workato’s Agentic Enterprise with Production-scale AI（2026-03-03）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.4 University Hospital Bonn：8 张 A100 在院内运行 DeepSeek-R1，处理未经匿名化的医疗数据&lt;/h3&gt;
&lt;p&gt;德国 University Hospital Bonn 的放射科和 IT 团队在 2025 年 7 月开展了一周的自托管 LLM 试点，并于 2026 年 3 月公开了研究论文。该案例对医疗、金融和其它高敏感数据行业很有参考价值，因为它明确把“数据不能离开机构网络”作为系统设计的前提。&lt;/p&gt;
&lt;p&gt;系统部署在医院自己的服务器上，配置为 8 张 NVIDIA A100 80 GB PCIe GPU，运行量化后的 DeepSeek-R1（671B 参数模型），推理服务使用 vLLM，前端使用 Open WebUI，并通过 Docker / Nginx 等组件组织服务。医院采用严格的网络分区、主机级 Egress Filtering 和主动隔离监控，确保模型服务不能未经授权访问外部网络。配套部署包还包含自动化隔离和加固测试。&lt;/p&gt;
&lt;p&gt;医院通过临床管理、合规、数据保护和信息安全审批，获准在受控环境中处理未经匿名化的 PHI（Protected Health Information）。一周 Pilot 有 22 名住院医师和放射科医生参与，使用 10 个预定义 Prompt Template。&lt;/p&gt;
&lt;p&gt;结果值得注意：系统稳定性和可用性评价较高；报告翻译、文字纠错、简化和基于已有文本的指南建议表现较好；基于影像发现开放式生成诊断结论时，出现了更多关键错误，例如临床相关幻觉或遗漏。研究团队因此明确强调，这套系统用于放射科文本辅助，不是自主临床决策系统。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 医院、医疗影像中心、临床研究机构，以及必须在内部处理未匿名化数据的组织。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安全架构应假设系统可能被攻破，采用 Network Segmentation、Host-enforced Egress Filtering 和持续 Isolation Monitoring，而不是只依赖“没有配置公网地址”。&lt;/li&gt;
&lt;li&gt;模型部署审批必须和技术建设并行。医院涉及临床管理、合规、数据保护、信息安全等多个责任主体。&lt;/li&gt;
&lt;li&gt;先从源文本约束明确的任务开始，例如翻译、校正、摘要和简化；开放式生成新结论必须单独验证，不能因模型在文字任务上表现好就直接扩展到临床决策。&lt;/li&gt;
&lt;li&gt;模型本身可以替换，网络隔离、日志治理、身份和审批机制应独立于模型实现。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;证据限制：&lt;/strong&gt; 这是医院作者发布的 arXiv Preprint，属于单中心、一周、22 人的用户试点，并非经过同行评审的临床疗效研究。错误数据来自参与者报告；不能把试点结果解释为模型可安全自主诊断。论文称该架构是面向超过 10,000 名员工正式服务的基础，但没有给出全院推广后的实际使用率和容量数据。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://arxiv.org/abs/2604.22768&quot;&gt;arXiv：Secure On-Premise Deployment of Open-Weights Large Language Models in Radiology: An Isolation-First Architecture with Prospective Pilot Evaluation（2026-03-25）&lt;/a&gt;；&lt;a href=&quot;https://github.com/ukbonn/ukb-gpt&quot;&gt;医院公开部署包 ukb-gpt&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.5 Dell + Meta PyTorch：把 vLLM Production Stack 产品化为 On-Prem AI Factory 的推理层&lt;/h3&gt;
&lt;p&gt;Dell 与 Meta PyTorch 团队在 2026 年公开了面向 Dell AI Factory 的 Enterprise-Ready vLLM Production Stack。它不是单个终端客户的案例，而是服务器厂商与开源框架团队合作，把 On-Prem LLM Serving 需要的组件组合成企业参考平台。&lt;/p&gt;
&lt;p&gt;底层由 Dell PowerEdge GPU Server、PowerScale Storage 和网络设备组成；Kubernetes 负责工作负载编排；vLLM 负责模型推理；vLLM Production Stack 提供 Kubernetes 原生部署、KV Cache-aware Routing、自动扩缩容、分布式追踪和监控、安全能力，以及 PII Detection / Jailbreak Prevention 等应用侧防护。方案还讨论 KV Cache Offloading 和 Semantic Routing，并展示了运行在该推理框架上的多任务 Chatbot。&lt;/p&gt;
&lt;p&gt;这个方案值得关注的不是某一项硬件 Benchmark，而是它试图将企业平台需要的能力组合起来：模型 Runtime、Kubernetes Operator、缓存路由、Observability、安全和数据平台集成。对企业来说，这比直接把一个 vLLM Container 放在 GPU 节点上更接近长期运营的平台。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 希望在企业机房或私有云建设 AI Factory 的大型组织；尤其是已经使用 Dell 服务器、存储和企业 Kubernetes 的客户。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; On-Prem 平台必须把存储、网络、GPU、模型 Runtime 和企业安全作为一套系统设计。KV Cache Offloading 也不是免费收益：缓存从 GPU 移到 CPU / 外部存储后，必须测量 PCIe、网络和存储传输成本，确认节省的 GPU HBM 是否抵得过搬运延迟。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证据等级：&lt;/strong&gt; 厂商联合参考架构和演示，不代表已有某个具名客户按全部组件上线。实际采购时仍应要求 Dell 提供指定 GPU SKU、NVLink / NIC 拓扑、存储吞吐、vLLM 版本矩阵和故障恢复测试结果。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://infohub.delltechnologies.com/en-us/p/enterprise-ready-llm-inferencing-with-the-vllm-production-stack-on-dell-ai-factory/&quot;&gt;Dell Technologies：Enterprise-Ready LLM Inferencing with the vLLM Production Stack on Dell AI Factory（2026-05-20）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.6 Oracle OCI：用 OKE + vLLM + Qdrant + Terraform 建立可自管的 GPU RAG / Agent 平台&lt;/h3&gt;
&lt;p&gt;Oracle 在 2026 年 7 月发布了一个完整的 OCI Open-Source AI 参考应用：在 Oracle Container Engine for Kubernetes（OKE）上运行 GPU-backed LLM、Qdrant、RAG 和 Agent Tool Calling，并通过 Terraform 一次性创建基础设施。&lt;/p&gt;
&lt;p&gt;架构包含 React / Nginx Frontend、FastAPI Backend、Qdrant Vector Database、vLLM Inference Endpoint 和 OCI Load Balancer。GPU 推理运行在独立 GPU Node Pool，使用 NVIDIA A10；CPU 应用和 GPU 推理分池，Kubernetes Device Plugin 将 nvidia.com/gpu 暴露为可调度资源。Worker 节点位于 Private Subnet，不分配 Public IP；只有 Load Balancer 对外暴露。IAM、Container Registry、网络、节点池和集群通过 Terraform 定义。&lt;/p&gt;
&lt;p&gt;这个参考实现还做了一个很重要的抽象：Backend 对推理后端保持相对无关。vLLM 通过 OpenAI-compatible API 暴露模型，业务 Backend 不需要知道 GPU 位于哪台机器，也不需要直接调用 CUDA 或访问 GPU 节点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 已经采用 OCI、希望把模型推理和 RAG / Agent 应用放在自己云账户内运营的企业；适合小规模 POC、部门级服务和作为后续企业平台的起点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; GPU Node Pool 必须与 CPU 应用分离，避免昂贵 GPU 被普通 Web / Backend Pod 占用；模型服务接口应通过内部 Service 暴露，而不是直接开放 GPU 节点；Terraform 应覆盖 IAM、网络、Registry 和 GPU Node Pool，不要只用 Terraform 创建 VM，剩余部分再手工配置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证据等级：&lt;/strong&gt; Oracle 官方可运行参考应用，不是具名终端客户生产案例。示例使用 A10，不能据此推断 OCI 的大型多节点 GPU 推理能力或特定模型吞吐。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://blogs.oracle.com/cloud-infrastructure/open-source-ai-oci-with-vllm-qdrant&quot;&gt;Oracle Cloud Infrastructure：Open-Source AI on OCI: Serving LLMs on Kubernetes with vLLM, Qdrant, and Terraform（2026-07-15）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.7 OVHcloud：租用 L40S GPU，在 Managed Kubernetes 上运行多模态 Qwen3-VL&lt;/h3&gt;
&lt;p&gt;OVHcloud 在 2026 年 10 月发布了 vLLM + Managed Kubernetes Service（MKS）的 Vision-Language Model 参考架构。方案运行 Qwen3-VL-8B-Instruct，使用两台 NVIDIA L40S GPU Node，提供 OpenAI-compatible API，监控采用 Prometheus、Grafana 和 DCGM。&lt;/p&gt;
&lt;p&gt;请求路径为 Load Balancer → Gateway → NGINX Ingress → vLLM Service → GPU Pod。GPU Worker Pool 和 Monitoring CPU Pool 分离，模型推理与监控服务不会争抢 GPU。平台还展示 TTFT、Throughput、GPU 利用率等指标，并将服务放在 OVHcloud Public Cloud 的欧洲数据中心。&lt;/p&gt;
&lt;p&gt;它展示了另一种租 GPU 的方式：企业不一定要自己运营 Kubernetes Control Plane。MKS 由 OVHcloud 管理，企业管理 GPU Worker Pool、vLLM、模型、Ingress、监控和应用。相比租裸 GPU VM，这减少了部分 Kubernetes 运维工作，但推理 Runtime、模型版本、缓存、容量和业务 API 仍由客户负责。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 欧洲企业、需要数据区域控制和数字主权的组织；希望使用开源推理栈，但不愿维护 Kubernetes Control Plane 的团队。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; 托管 Kubernetes 不等于托管推理。企业仍需自己处理 vLLM 升级、模型兼容、GPU Driver、推理参数、API 安全、请求配额和性能目标。参考架构中的两个 L40S 节点也不自动构成高可用：还需要验证跨 AZ、节点故障、模型加载和流量切换。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证据等级：&lt;/strong&gt; OVHcloud 官方部署指南，属于可复现参考架构，不是具名客户生产结果。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://blog.ovhcloud.com/en/posts/reference-architecture-deploying-a-vision-language-model-with-vllm-on-ovhcloud-mks-for-high-performance-inference-and-full-observability/&quot;&gt;OVHcloud：Reference Architecture: Deploying a vision-language model with vLLM on OVHcloud MKS（2026-10-04）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.8 Azure Arc：在 On-Prem / Edge Kubernetes 上运行 Ollama 和 vLLM&lt;/h3&gt;
&lt;p&gt;Microsoft Azure Kubernetes Service Engineering Blog 在 2026 年 4 月展示了通过 AKS enabled by Azure Arc 管理本地或边缘 Kubernetes 集群，并直接部署 Ollama 和 vLLM 的方案。这个案例的意义在于：企业不必把 GPU 节点迁移到 Azure 公有云，也可以通过 Azure Arc 统一管理分布在本地和边缘的 Kubernetes 环境。&lt;/p&gt;
&lt;p&gt;文章给出的 Ollama 示例使用 Kubernetes Deployment，将 Pod 通过 Node Selector 放到带 NVIDIA GPU 的节点，并申请 nvidia.com/gpu: 1；通过 Kubernetes Service 暴露推理 API。模型权重可以在 Pod 中拉取，之后通过 HTTP API 调用。该系列还覆盖 Triton / TensorRT-LLM、NVIDIA Dynamo 多节点推理、RDMA 和 GPU 资源管理等相关主题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;给谁用：&lt;/strong&gt; 制造业、零售、能源、分支机构；需要在工厂、实验室、门店或数据中心部署 GPU 推理，同时希望使用统一 Kubernetes 管理面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键经验：&lt;/strong&gt; Edge / On-Prem 的网络、存储和升级条件与公有云不同。模型权重不应在每次 Pod 重启时从互联网拉取；应使用企业镜像和模型制品仓库，设计离线更新、缓存和回滚流程。单副本 Ollama 适合验证连接和设备调度，不应直接视为生产级高并发服务。生产环境还要补齐认证、TLS、限流、模型版本管理、GPU 故障检测和多副本路由。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证据等级：&lt;/strong&gt; Microsoft 官方技术教程 / 参考部署，不是具名终端客户案例，也没有给出该示例的生产吞吐数据。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://blog.aks.azure.com/2026/04/07/ai-inference-on-aks-arc-part-3&quot;&gt;Microsoft AKS Engineering Blog：AI Inference on AKS enabled by Azure Arc: Generative AI with Open-Source LLM Server（2026-04-07）&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;20.9 案例横向比较：新增案例揭示了哪些不同的架构模式？&lt;/h3&gt;













































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;案例&lt;/th&gt;&lt;th&gt;部署模式&lt;/th&gt;&lt;th&gt;工作负载 / 用户&lt;/th&gt;&lt;th&gt;核心技术&lt;/th&gt;&lt;th&gt;最重要的经验&lt;/th&gt;&lt;th&gt;证据等级&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;BC Card&lt;/td&gt;&lt;td&gt;On-Prem OpenShift AI&lt;/td&gt;&lt;td&gt;金融筛查、RPA、呼叫中心&lt;/td&gt;&lt;td&gt;vLLM、FP8、SLM Swarm&lt;/td&gt;&lt;td&gt;多个小模型协作，按任务选择模型&lt;/td&gt;&lt;td&gt;具名客户案例&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tesla&lt;/td&gt;&lt;td&gt;生产环境 Kubernetes GPU Fleet&lt;/td&gt;&lt;td&gt;数百个模型 / 内部应用&lt;/td&gt;&lt;td&gt;KServe、llm-d、vLLM、Envoy&lt;/td&gt;&lt;td&gt;存储、故障恢复和 KV-aware Routing 都是 Day-2 核心&lt;/td&gt;&lt;td&gt;客户工程师参与的生产实践&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Workato&lt;/td&gt;&lt;td&gt;DigitalOcean Managed GPU / Kubernetes&lt;/td&gt;&lt;td&gt;企业 Agentic Automation&lt;/td&gt;&lt;td&gt;H200、Dynamo、vLLM、KV Manager&lt;/td&gt;&lt;td&gt;跨 Worker KV-aware Routing 减少重复 Prefill&lt;/td&gt;&lt;td&gt;客户联合技术实践&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;University Hospital Bonn&lt;/td&gt;&lt;td&gt;On-Prem 8×A100&lt;/td&gt;&lt;td&gt;放射科医生、医疗文本辅助&lt;/td&gt;&lt;td&gt;DeepSeek-R1、vLLM、Open WebUI&lt;/td&gt;&lt;td&gt;网络隔离和任务风险分级比模型参数更重要&lt;/td&gt;&lt;td&gt;单中心 Pilot / Preprint&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dell + Meta&lt;/td&gt;&lt;td&gt;On-Prem AI Factory 参考栈&lt;/td&gt;&lt;td&gt;企业多任务 Chatbot / RAG&lt;/td&gt;&lt;td&gt;vLLM Production Stack、K8s、KV Offload&lt;/td&gt;&lt;td&gt;把推理、存储、安全和可观测性产品化&lt;/td&gt;&lt;td&gt;厂商参考架构&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Oracle OCI&lt;/td&gt;&lt;td&gt;租 GPU + 自管 OKE 工作负载&lt;/td&gt;&lt;td&gt;RAG / Agent 应用&lt;/td&gt;&lt;td&gt;A10、vLLM、Qdrant、Terraform&lt;/td&gt;&lt;td&gt;CPU / GPU Node Pool 分离、Private Subnet、IaC&lt;/td&gt;&lt;td&gt;厂商参考应用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OVHcloud&lt;/td&gt;&lt;td&gt;租 L40S + Managed K8s&lt;/td&gt;&lt;td&gt;多模态推理&lt;/td&gt;&lt;td&gt;Qwen3-VL、vLLM、MKS、DCGM&lt;/td&gt;&lt;td&gt;Managed K8s 不等于 Managed Inference&lt;/td&gt;&lt;td&gt;厂商参考架构&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Azure Arc&lt;/td&gt;&lt;td&gt;On-Prem / Edge Kubernetes&lt;/td&gt;&lt;td&gt;本地模型推理&lt;/td&gt;&lt;td&gt;Ollama、vLLM、AKS Arc&lt;/td&gt;&lt;td&gt;统一管理面和离线模型供应链&lt;/td&gt;&lt;td&gt;厂商教程&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;20.10 从这些案例再提炼六条工程经验&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 金融行业往往需要的是模型平台，不是单一模型 Endpoint。&lt;/strong&gt; BC Card 的案例表明，风险筛查、RPA 和呼叫中心并不需要完全相同的模型。企业平台应提供统一身份、模型注册、部署、审计和配额能力，但允许每个任务使用不同模型、精度和 GPU 资源。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 医疗和敏感数据场景需要把网络隔离做成可验证的系统属性。&lt;/strong&gt; Bonn 的做法不是简单地把服务部署在内网，而是通过 Network Segmentation、Egress Filtering、Isolation Monitoring 和自动化测试验证没有未授权外联。合规审批和员工使用治理同样属于系统设计的一部分。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Kubernetes StatefulSet 不是完整的 LLM Serving 平台。&lt;/strong&gt; Tesla 的实践说明，模型权重存储、节点故障后的 PVC 恢复、Prefix Cache 路由和推理拓扑演进，都需要专门设计。一个可以启动的 Pod 和一个可持续运营的模型平台之间差距很大。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. 长上下文 Agent 的优化重点逐渐从单 GPU 性能转向集群级缓存调度。&lt;/strong&gt; Workato 使用 Dynamo 跟踪跨 Worker KV 状态，说明请求路由已经成为推理性能的一部分。但这种架构只在存在足够缓存重用时才值得增加复杂度，不能把 KV Manager 当作所有模型服务的默认组件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Managed Kubernetes 是一个很有价值的中间层。&lt;/strong&gt; OCI、OVHcloud 和 DigitalOcean 的实践说明，企业可以把 Kubernetes Control Plane 交给云厂商，而自己控制模型、推理容器、请求策略和业务 API。这样既不是普通托管 API，也不需要承担完整的 K8s Control Plane 运维。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. 厂商参考架构要经过客户负载验证才能进入生产设计。&lt;/strong&gt; Dell AI Factory、OCI OKE、OVHcloud MKS 和 Azure Arc 提供了部署起点，但没有证明在 1000 名开发者、数百个并发 Agent 或大规模 MoE 模型下的吞吐、故障恢复和成本。必须用目标模型、真实 Trace、目标 SLO 和故障注入测试验证。&lt;/p&gt;
&lt;p&gt;对企业 GPU 平台而言，这些新增案例进一步说明：架构选择不是简单比较 vLLM、SGLang 或 TensorRT-LLM 谁更快，而是确定企业需要控制到哪一层。可以由 CSP 托管 Kubernetes，也可以租专属 GPU；可以在 On-Prem 做网络隔离，也可以把大规模推理交给 Dedicated Inference Provider。真正需要企业自己掌握的是模型质量、数据边界、请求策略、容量预测、成本归属和故障责任。&lt;/p&gt;
&lt;h2&gt;结论&lt;/h2&gt;
&lt;p&gt;企业级 GPU AI Coding 平台不是“买几台 B300、安装 vLLM、开放一个 API”这么简单。真正的工程工作横跨 GPU 硬件、RDMA 网络、Kubernetes、分布式推理、Agent Runtime、安全隔离和生产运维。&lt;/p&gt;
&lt;p&gt;对于约 1000 名开发者的目标，合理的推进方式是先建立真实 workload profile，用一台 8-GPU HGX B300 节点验证模型与 Agent Harness，再逐步验证多节点网络和服务容量。只有当模型并行通信确实需要更大的 scale-up 域时，才应把 GB300 NVL72 纳入优先方案。采购规模应由满足 SLO 的 Goodput 和每个成功代码任务成本决定，而不是由注册用户数、GPU 峰值算力或厂商宣传的 Tokens/s 决定。&lt;/p&gt;
&lt;p&gt;最终交付物应当是一套可重复部署、可观测、可审计、可升级、可回滚并能持续进行容量与成本管理的企业 AI 平台，而不只是一个模型推理 Endpoint。&lt;/p&gt;</content:encoded></item><item><title>如何在 Snowflake 添加 Semantic View：手把手教程</title><link>https://devweekly.github.io/posts/%E5%A6%82%E4%BD%95%E5%9C%A8-snowflake-%E6%B7%BB%E5%8A%A0-semantic-view%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://devweekly.github.io/posts/%E5%A6%82%E4%BD%95%E5%9C%A8-snowflake-%E6%B7%BB%E5%8A%A0-semantic-view%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E7%A8%8B/</guid><description>从零开始，用投资组合持仓、证券主数据和每日估值建立 Snowflake Semantic View；覆盖 SQL/YAML 创建、查询、更新、自动部署、回归测试、安全治理与企业架构。</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;如何在 Snowflake 添加 Semantic View：手把手教程&lt;/h1&gt;
&lt;p&gt;这篇文章不假设你已经熟悉 Snowflake。我们会从一组常见的投资管理数据开始，逐步建立一个可查询、可维护、可自动部署的 Semantic View。重点不是把 SQL 跑通就结束，而是弄清楚业务指标为什么可信、修改怎样上线、失败怎样发现和回退，以及它在企业数据架构里应该放在哪里。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;资料核对日期：2026 年 10 月 28 日。&lt;/strong&gt; Snowflake 的语法、可用区域、产品状态和权限要求可能变化。本文涉及平台行为时优先引用 Snowflake 官方文档；示例中的数据库、账户、证券持仓和金额是可重复运行的教学 fixture，不代表任何真实客户或实时市场报价。示例业务模型和列名贴近投资组合分析，但接入实际数据前必须与数据所有者核对。&lt;/p&gt;
&lt;h2&gt;先说清楚：Semantic View 到底是什么？&lt;/h2&gt;
&lt;p&gt;可以先把它理解为一份在 Snowflake 内登记的、由机器和人都能理解的“业务数据说明书”，而不是另一份复制出来的数据。&lt;/p&gt;
&lt;p&gt;底层表通常使用技术字段名，连接关系也由工程师理解；业务人员却会问“某个组合在某个估值日的市场价值是多少”“按资产类别看未实现盈亏”。Semantic View 将物理表映射为逻辑表，并明确维度、事实、指标、关系和业务描述。查询者可以使用业务口径，而不必每次重新猜表怎么连、指标该怎么算。&lt;/p&gt;
&lt;p&gt;Snowflake 将 Semantic View 作为 schema 级对象管理，能纳入 Snowflake 的授权、目录和分享机制。它可以直接用 SQL 查询，也可以作为 Cortex Analyst / Cortex Agents 的业务语义上下文。新项目通常优先考虑原生 Semantic View；历史上基于 stage YAML 的 semantic model 仍有兼容场景，但两者不是同一个对象。参阅 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/overview&quot;&gt;Semantic Views 概览&lt;/a&gt; 和 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/yaml-vs-ddl&quot;&gt;YAML 与 DDL 的选择&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;几个容易混淆的名词&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;名词&lt;/th&gt;&lt;th&gt;实际职责&lt;/th&gt;&lt;th&gt;是否存放一份独立的业务明细数据&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;普通 View&lt;/td&gt;&lt;td&gt;保存一段 SQL 查询定义&lt;/td&gt;&lt;td&gt;通常不保存独立结果&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Materialized View&lt;/td&gt;&lt;td&gt;按其支持的规则维护预计算结果&lt;/td&gt;&lt;td&gt;是，维护物化数据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Semantic View&lt;/td&gt;&lt;td&gt;声明逻辑表、关系、维度、事实、指标及 AI 辅助信息&lt;/td&gt;&lt;td&gt;语义定义本身不是业务明细副本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;旧式 Semantic Model YAML&lt;/td&gt;&lt;td&gt;以 YAML 描述 Cortex Analyst 可使用的语义模型，常见旧流程涉及 stage&lt;/td&gt;&lt;td&gt;YAML 文件本身不是业务明细副本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cortex Analyst / Agent&lt;/td&gt;&lt;td&gt;根据语义信息和自然语言请求产生或执行分析查询&lt;/td&gt;&lt;td&gt;不是指标定义的权威来源&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Semantic View 不会自动把业务口径变正确，也不会因为加了 AI 描述就保证自然语言问题一定生成正确 SQL。它只是把业务知识、连接规则和指标计算变成显式、可审查的对象；底层数据质量、业务定义、权限和测试仍然要由团队负责。&lt;/p&gt;
&lt;h2&gt;本教程要做出什么？&lt;/h2&gt;
&lt;p&gt;本示例使用一个小型投资组合分析域：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;组合主数据：组合名称、投资策略、基础币种、风险属性。&lt;/li&gt;
&lt;li&gt;证券主数据：证券代码、名称、资产类别、行业、计价币种和发行地。&lt;/li&gt;
&lt;li&gt;每日持仓快照：估值日、组合、证券、持有数量、美元市场价值、美元成本基础、未实现盈亏和应计利息。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这是投资管理数据平台中常见的分析切面。我们刻意把每日持仓建模为&lt;strong&gt;快照事实表&lt;/strong&gt;：一行代表某个组合在某个估值日对某个证券的一笔汇总持仓。这里不是交易逐笔明细；也不包含税务批次、衍生品风险、公司行动等复杂数据。真实环境可能需要把托管账户、资产批次、价格来源、估值状态、报告币种、汇率和证券有效日期加入模型，不能简单把这个最小模型当成生产最终模型。&lt;/p&gt;
&lt;p&gt;仓库中的配套材料位于 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/tree/main/temp/snowflake-semantic-view&quot;&gt;temp/snowflake-semantic-view&lt;/a&gt;，包括 YAML 定义、建表和部署 SQL、测试 SQL、Python 部署脚本以及 Notebook。&lt;/p&gt;
&lt;h2&gt;一、准备 Snowflake 环境&lt;/h2&gt;
&lt;h3&gt;1. 登录并确认角色&lt;/h3&gt;
&lt;p&gt;打开 &lt;a href=&quot;https://app.snowflake.com/&quot;&gt;Snowsight&lt;/a&gt; 并登录。创建一个 Worksheet，确认当前连接的账户、角色、数据库、schema 和 warehouse。建议先在独立的 sandbox 数据库操作，不要直接使用生产数据或生产 schema。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SELECT CURRENT_ACCOUNT(),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       CURRENT_USER(),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       CURRENT_ROLE(),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       CURRENT_DATABASE(),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       CURRENT_SCHEMA(),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       CURRENT_WAREHOUSE();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果没有合适的数据库、schema、warehouse 或权限，请联系 Snowflake 管理员。不要为了教程长期使用 ACCOUNTADMIN；它适合受控的管理操作，不应成为应用和日常部署的默认运行角色。&lt;/p&gt;
&lt;p&gt;配套脚本使用数据库 SV_FINANCE_LAB 和 schema MART。你可以调整名称，但要同步调整 YAML 文件中三个物理表的完全限定名称以及后续 SQL 的目标 schema。&lt;/p&gt;
&lt;h3&gt;2. 创建隔离的练习对象&lt;/h3&gt;
&lt;p&gt;打开仓库中的 sql/00_setup_demo.sql，检查里面的对象名，再在 Worksheet 执行。脚本会创建一个教学数据库、三个表并插入少量确定性样例记录。&lt;strong&gt;不要在已有重要对象的同名数据库中执行；示例建表脚本是为隔离练习环境准备的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里故意把几类数据分开：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DIM_PORTFOLIO：组合维度，不是持仓明细。&lt;/li&gt;
&lt;li&gt;DIM_SECURITY：证券维度，不是价格历史。&lt;/li&gt;
&lt;li&gt;FACT_POSITION_DAILY：每日持仓快照事实表。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;样例代码使用了现实市场中能识别的证券代码和常见 ETF 名称，但演示持有数量、估值和成本数字是人工构造的固定测试数据，并非从行情源实时抓取。这样做的目的，是让每次运行都能得到可核对的预期结果，不能把这些金额用于投资决策。&lt;/p&gt;
&lt;h3&gt;3. 理解表的粒度，再继续&lt;/h3&gt;
&lt;p&gt;在建立语义模型之前，先把下面这句话写清楚：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FACT_POSITION_DAILY 的一行 = 一个估值日 + 一个组合 + 一个证券的汇总持仓。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因此，在此示例里组合、证券和估值日的组合键应当唯一。假如真实来源是 lot-level（税务批次级）持仓，则粒度已经不同，不能继续沿用相同的主键声明；需要先决定语义模型暴露 lot 级持仓，还是先在数据转换层汇总到组合/证券/估值日。&lt;/p&gt;
&lt;p&gt;可以先运行以下数据检查。它们很重要，因为 Snowflake 中普通表的主键约束通常不会替你保证每条加载路径都满足业务唯一性。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-- 检查预期的复合粒度是否重复&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SELECT PORTFOLIO_ID, SECURITY_ID, AS_OF_DATE, COUNT(*) AS ROWS_PER_KEY&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM SV_FINANCE_LAB.MART.FACT_POSITION_DAILY&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GROUP BY 1, 2, 3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;HAVING COUNT(*) &amp;gt; 1;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-- 检查组合维度主键&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SELECT PORTFOLIO_ID, COUNT(*)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM SV_FINANCE_LAB.MART.DIM_PORTFOLIO&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GROUP BY 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;HAVING COUNT(*) &amp;gt; 1;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-- 检查持仓是否存在无法关联的组合或证券&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SELECT COUNT(*) AS ORPHAN_POSITIONS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM SV_FINANCE_LAB.MART.FACT_POSITION_DAILY p&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LEFT JOIN SV_FINANCE_LAB.MART.DIM_PORTFOLIO f&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ON p.PORTFOLIO_ID = f.PORTFOLIO_ID&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LEFT JOIN SV_FINANCE_LAB.MART.DIM_SECURITY s&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ON p.SECURITY_ID = s.SECURITY_ID&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;WHERE f.PORTFOLIO_ID IS NULL OR s.SECURITY_ID IS NULL;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预期：重复键查询返回 0 行，孤立持仓数量为 0。真实环境中，如果结果不为零，应先修复来源数据或修正粒度，不要用 Semantic View 的定义去掩盖数据错误。&lt;/p&gt;
&lt;h3&gt;4. 配置创建对象所需的权限&lt;/h3&gt;
&lt;p&gt;创建 Semantic View 不只是对业务表有 SELECT 权限。创建者通常需要目标数据库和 schema 的 USAGE、schema 上的 CREATE SEMANTIC VIEW，以及定义中引用表/视图的 SELECT；修改已有对象还涉及其 OWNERSHIP 权限。具体要求请以 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/sql&quot;&gt;官方 SQL 操作文档&lt;/a&gt; 和账户的 RBAC 配置为准。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;GRANT USAGE ON DATABASE SV_FINANCE_LAB TO ROLE &amp;lt;MODEL_DEVELOPER_ROLE&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GRANT USAGE ON SCHEMA SV_FINANCE_LAB.MART TO ROLE &amp;lt;MODEL_DEVELOPER_ROLE&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GRANT CREATE SEMANTIC VIEW ON SCHEMA SV_FINANCE_LAB.MART&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  TO ROLE &amp;lt;MODEL_DEVELOPER_ROLE&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GRANT SELECT ON ALL TABLES IN SCHEMA SV_FINANCE_LAB.MART&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  TO ROLE &amp;lt;MODEL_DEVELOPER_ROLE&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上是说明性模板，尖括号内的角色名必须替换成实际名称；授权前应先与管理员确认职责分工，不要把模板原样执行。若同一角色需要管理后续新建的依赖表，是否授予 future grants 应单独评估。&lt;/p&gt;
&lt;h2&gt;二、设计语义模型：先定义业务，再写 YAML&lt;/h2&gt;
&lt;p&gt;这里不应该从“打开 YAML 编辑器”开始。YAML 是最终交付给 Snowflake 的结构化定义，不是业务人员讨论需求的好工具。若团队一开始就围绕 YAML 字段开会，大家很容易讨论 &lt;code&gt;primary_key&lt;/code&gt;、&lt;code&gt;expr&lt;/code&gt; 和 &lt;code&gt;data_type&lt;/code&gt; 怎么填，却没有先确认“市场价值究竟是什么”“一行数据代表什么”“同一指标能不能跨日期求和”。这些问题一旦在部署后才发现，修正成本会高得多。&lt;/p&gt;
&lt;p&gt;更合理的顺序是：先用业务问题确定范围，再写一份人能审阅的语义模型设计文档；通过业务与数据负责人评审后，把已确认的部分映射成 YAML 或 SQL DDL；最后在 Snowflake 验证、部署和对账。&lt;strong&gt;不要要求业务人员直接维护 YAML，也不要把 AI 生成的 YAML 当成已批准的业务定义。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;2.1 从要回答的问题开始，而不是从所有数据库列开始&lt;/h3&gt;
&lt;p&gt;先选定一个明确的分析场景。本例是“投资组合每日持仓分析”，目标问题包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在指定估值日，每个组合的持仓市场价值、成本基础和未实现盈亏是多少？&lt;/li&gt;
&lt;li&gt;某个组合的市场价值按资产类别、行业和证券如何分布？&lt;/li&gt;
&lt;li&gt;某个投资策略在指定估值日持有多少市场价值的资产？&lt;/li&gt;
&lt;li&gt;同一个组合在两个估值日之间的市场价值变化是多少？（这是跨日期比较，不是把两个日期的快照金额相加。）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题决定第一版 Semantic View 的范围。暂时不需要回答的内容，例如交易逐笔分析、税务批次、风险因子敞口和公司行动，不应为了“字段齐全”而一并塞进来。&lt;/p&gt;
&lt;p&gt;把问题整理成一张简单的需求表：&lt;/p&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;业务问题&lt;/th&gt;&lt;th&gt;需要的维度&lt;/th&gt;&lt;th&gt;需要的指标&lt;/th&gt;&lt;th&gt;必须澄清的口径&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;某日各组合的市场价值是多少？&lt;/td&gt;&lt;td&gt;估值日、组合&lt;/td&gt;&lt;td&gt;总市场价值&lt;/td&gt;&lt;td&gt;是否限定单一估值日、金额币种&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按资产类别查看组合分布&lt;/td&gt;&lt;td&gt;估值日、组合、资产类别&lt;/td&gt;&lt;td&gt;总市场价值&lt;/td&gt;&lt;td&gt;资产分类体系、未知分类如何处理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;比较成本与未实现盈亏&lt;/td&gt;&lt;td&gt;估值日、组合、证券&lt;/td&gt;&lt;td&gt;总成本基础、总未实现盈亏&lt;/td&gt;&lt;td&gt;成本和盈亏是否包含应计利息、费用、汇率影响&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;组合有多少项持仓？&lt;/td&gt;&lt;td&gt;估值日、组合&lt;/td&gt;&lt;td&gt;持仓数&lt;/td&gt;&lt;td&gt;计数的是组合-证券持仓行，还是税务批次/账户明细&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;比较两个估值日的市场价值&lt;/td&gt;&lt;td&gt;估值日、组合&lt;/td&gt;&lt;td&gt;各日总市场价值及其差值&lt;/td&gt;&lt;td&gt;先分别计算各日快照，再比较；不能直接把快照金额跨日相加&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这一阶段产出的是&lt;strong&gt;问题清单和口径问题清单&lt;/strong&gt;，不是 YAML。口径暂时无法达成一致时，应记录“待确认”、责任人和影响，不要让开发者自行选一个看似合理的公式。&lt;/p&gt;
&lt;h3&gt;2.2 先写一份可讨论的语义模型设计文档&lt;/h3&gt;
&lt;p&gt;建议在仓库中先创建 Markdown 文档，例如 &lt;code&gt;docs/semantic-models/investment-portfolio-overview.md&lt;/code&gt;。它面向业务专家、数据工程师、数据架构师和模型维护者，记录讨论结果、证据、决策及未决问题。Markdown 表格和普通语言比 YAML 更适合评审，因为它能解释为什么这样建模，而不仅是机器需要哪些字段。&lt;/p&gt;
&lt;p&gt;下面是本例的设计文档骨架。实际项目可以按规模删减，但应保留粒度、指标口径、连接关系和待确认事项。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;# Investment Portfolio Overview — Semantic Model Design&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 1. Purpose and scope&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;回答指定估值日的组合持仓价值、成本、未实现盈亏及其分类分布。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;不覆盖交易逐笔、税务批次、风险因子或实时定价。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 2. Consumers and example questions&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 投资运营：核对每日持仓总额。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 投资分析：按组合、资产类别和行业查看分布。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Cortex Analyst / Agent：回答上述范围内的自然语言问题。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 3. Grain and time semantics&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;事实粒度：每个估值日、组合、证券一行。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;业务日期：AS_OF_DATE，表示持仓估值日，不是数据加载时间。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;快照指标：市场价值、成本基础、未实现盈亏。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;跨日期规则：先按估值日分别聚合，不得直接对多个日快照求和。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 4. Business definitions&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;| Term | Definition | Currency | Aggregation | Owner / status |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;|---|---|---|---|---|&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;| Total Market Value | 指定估值日的持仓市场价值之和 | USD | SUM；跨估值日不可加 | 投资运营 / 已确认 |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;| Total Cost Basis | 来源持仓快照中的成本基础之和 | USD | SUM；跨估值日不可加 | 会计数据负责人 / 待确认成本口径 |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;| Unrealized P&amp;amp;L | 来源持仓快照提供的未实现盈亏之和 | USD | SUM；需核实应计利息约定 | 投资会计 / 待确认 |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 5. Logical tables and source mapping&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; POSITION_DAILY &amp;lt;- MART.FACT_POSITION_DAILY&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Grain: AS_OF_DATE + PORTFOLIO_ID + SECURITY_ID&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; PORTFOLIO &amp;lt;- MART.DIM_PORTFOLIO&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Grain: PORTFOLIO_ID&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; SECURITY &amp;lt;- MART.DIM_SECURITY&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Grain: SECURITY_ID&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 6. Relationships and cardinality assumptions&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;POSITION_DAILY.PORTFOLIO_ID -&amp;gt; PORTFOLIO.PORTFOLIO_ID (many-to-one)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;POSITION_DAILY.SECURITY_ID -&amp;gt; SECURITY.SECURITY_ID (many-to-one)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;需要用数据测试证明维表键唯一、事实表外键可匹配。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 7. Dimensions, facts and metrics&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;列出每个对消费者有用的业务字段、定义、来源列、类型、同义词和限制。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;不要把底层所有列自动暴露为维度或指标。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 8. Security and access&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;目标角色、允许使用者、底层表授权、敏感字段排除规则。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 9. Validation and acceptance&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 事实粒度无重复。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 维表主键唯一、事实外键无孤儿。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 语义指标与独立 SQL / 已批准报表对账。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 验证单日过滤、跨日查询、空值及异常数据行为。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 记录业务签署人、日期和验收结果。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 10. Open questions and decisions&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;每项记录问题、候选方案、影响、责任人、截止日期和最终决定。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这份文档不是又一个需要和 YAML 永久同步的“第二套模型定义”。它记录业务意图、理由、评审和证据；YAML/DDL 则是部署契约。二者职责不同：设计文档解释“为什么”，YAML/DDL 精确表达“部署什么”。字段级映射可以从设计文档生成或人工维护，但应通过评审和测试保持一致。&lt;/p&gt;
&lt;h3&gt;2.3 讨论过程应该怎么记录？&lt;/h3&gt;
&lt;p&gt;不必把每次会议的完整聊天记录都写进模型定义。把重要内容分成三类即可：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;已确认的定义&lt;/strong&gt;：放在设计文档的业务定义表中，标注负责人和确认状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;未决问题&lt;/strong&gt;：记录问题、候选口径、对查询结果的影响、责任人和截止日期。例如“未实现盈亏是否含应计利息？”未确认前不要把描述写成确定事实。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有长期影响的决策&lt;/strong&gt;：用简短的决策记录（ADR 或 Decision Log），说明背景、备选方案、决定、理由和后果。例如“选择日持仓快照作为第一版粒度，不支持税务批次级分析”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;评审时最好使用具体查询结果讨论，而不是抽象地争论字段名。拿一个组合、一个估值日和两三条持仓记录，手工计算期望总额，再请业务负责人确认“这是不是他们报表中的市场价值”。每个关键指标至少有一个可复算例子和独立 SQL 对账方式。&lt;/p&gt;
&lt;h3&gt;2.4 哪些字段必须有，哪些是可选的？&lt;/h3&gt;
&lt;p&gt;需要区分三件事：Snowflake 语法层面创建对象的最低要求、模型正确性所必需的业务信息，以及帮助自然语言查询的增强信息。三者不能混为一谈。&lt;/p&gt;






































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;级别&lt;/th&gt;&lt;th&gt;为什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Semantic View 名称&lt;/td&gt;&lt;td&gt;必需&lt;/td&gt;&lt;td&gt;创建并引用 schema 级对象所需的名称&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;至少一个逻辑表及其物理来源&lt;/td&gt;&lt;td&gt;必需&lt;/td&gt;&lt;td&gt;必须知道语义定义对应哪些真实数据对象&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;至少一个维度或指标&lt;/td&gt;&lt;td&gt;必需&lt;/td&gt;&lt;td&gt;需要暴露可分析的业务语义；只有表清单没有分析接口&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;事实表粒度&lt;/td&gt;&lt;td&gt;业务上必需，虽不一定是独立 YAML 字段&lt;/td&gt;&lt;td&gt;决定计数、聚合和时间语义是否正确，必须在设计文档中明确&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;指标公式和聚合口径&lt;/td&gt;&lt;td&gt;对每个指标必需&lt;/td&gt;&lt;td&gt;没有定义就无法保证不同消费者算出相同结果&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;关系与连接键&lt;/td&gt;&lt;td&gt;多表模型必需&lt;/td&gt;&lt;td&gt;多表查询必须明确怎样连接，避免重复放大&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;主键声明&lt;/td&gt;&lt;td&gt;强烈建议；多表关系和粒度校验尤其重要&lt;/td&gt;&lt;td&gt;表达逻辑表的唯一键假设；声明本身不能代替数据质量测试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;维度/事实/指标的数据类型和表达式&lt;/td&gt;&lt;td&gt;对每个已声明字段必需&lt;/td&gt;&lt;td&gt;Snowflake 需要可执行的表达式和类型定义&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;描述（description/comment）&lt;/td&gt;&lt;td&gt;语法上通常可选；生产模型强烈建议&lt;/td&gt;&lt;td&gt;记录业务口径、单位、时间限制和边界&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;同义词（synonyms）&lt;/td&gt;&lt;td&gt;可选，但自然语言使用时建议&lt;/td&gt;&lt;td&gt;帮助识别业务人员使用的不同叫法，不应代替正式定义&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Verified queries / 示例问答&lt;/td&gt;&lt;td&gt;可选的增强能力&lt;/td&gt;&lt;td&gt;为常见问题提供参考 SQL 和评估样例，提升可验证性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;标签、物化配置、额外治理属性&lt;/td&gt;&lt;td&gt;按需&lt;/td&gt;&lt;td&gt;只有在分类治理、性能或运维需求明确时才添加&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;准确的语法要求应以 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/semantic-view-yaml-spec&quot;&gt;Semantic View YAML 规范&lt;/a&gt; 为准。不要把“可选”理解为“没有价值”：对于面向 Cortex Analyst 或 Agent 的模型，清晰的描述、同义词、已验证问题和准确的关系往往比多暴露几十个字段更有用。&lt;/p&gt;
&lt;h3&gt;2.5 从业务术语映射到逻辑表、维度、事实和指标&lt;/h3&gt;
&lt;p&gt;先明确这些构件的职责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Logical table（逻辑表）&lt;/strong&gt;：给物理表一个语义层名称，并声明它的粒度、主键及要公开的字段。它不会复制数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relationship（关系）&lt;/strong&gt;：声明逻辑表之间如何连接。必须检查键唯一性、关系方向和连接后的行数是否异常增长。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dimension（维度）&lt;/strong&gt;：用于筛选、分组和描述对象，例如组合名称、证券代码、行业、估值日。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fact（事实）&lt;/strong&gt;：位于事实粒度上的数值或表达式，例如该组合-证券-估值日的市场价值、成本和未实现盈亏。事实通常是构造聚合指标的基础，不应把它和已聚合 KPI 混为一谈。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metric（指标）&lt;/strong&gt;：定义如何聚合事实或列，例如 &lt;code&gt;SUM(MARKET_VALUE_USD)&lt;/code&gt;。指标名要表达业务意义，描述要说明单位、适用时间范围和不能怎样使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面展示从设计文档到最终 YAML 的一个小型映射例子。它不是完整模型，而是用来说明“为什么要这样写”。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;设计文档中的决定&lt;/th&gt;&lt;th&gt;YAML 中的体现&lt;/th&gt;&lt;th&gt;目的&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;一行代表某估值日、组合、证券&lt;/td&gt;&lt;td&gt;&lt;code&gt;primary_key.columns&lt;/code&gt; 包含 &lt;code&gt;PORTFOLIO_ID&lt;/code&gt;、&lt;code&gt;SECURITY_ID&lt;/code&gt;、&lt;code&gt;AS_OF_DATE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;明确粒度和唯一性假设&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;估值日是业务日期，不是加载时间&lt;/td&gt;&lt;td&gt;&lt;code&gt;time_dimensions&lt;/code&gt; 中的 &lt;code&gt;AS_OF_DATE&lt;/code&gt; 及描述&lt;/td&gt;&lt;td&gt;让模型理解日期字段含义&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;市场价值以 USD 表示&lt;/td&gt;&lt;td&gt;&lt;code&gt;MARKET_VALUE_USD&lt;/code&gt; fact 的类型和描述&lt;/td&gt;&lt;td&gt;避免与证券交易币种混淆&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;总市场价值是单日快照的合计&lt;/td&gt;&lt;td&gt;&lt;code&gt;TOTAL_MARKET_VALUE_USD&lt;/code&gt; metric 的 &lt;code&gt;SUM(...)&lt;/code&gt;、描述和非加性日期设置&lt;/td&gt;&lt;td&gt;降低跨日误加总风险&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;组合和证券通过稳定 ID 连接&lt;/td&gt;&lt;td&gt;&lt;code&gt;relationships&lt;/code&gt; 的对应键&lt;/td&gt;&lt;td&gt;支持跨实体分组分析&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;例如，YAML 中的关键片段会类似这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;INVESTMENT_PORTFOLIO_OVERVIEW&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Daily position snapshot analytics. USD amounts are normalized upstream.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  Filter to one AS_OF_DATE for point-in-time portfolio totals.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tables&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;POSITION_DAILY&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;One row per valuation date, portfolio and security.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    base_table&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      database&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;SV_FINANCE_LAB&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      schema&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;MART&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      table&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;FACT_POSITION_DAILY&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    primary_key&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      columns&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;PORTFOLIO_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;SECURITY_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;AS_OF_DATE&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    time_dimensions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;AS_OF_DATE&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        expr&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;AS_OF_DATE&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        data_type&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;DATE&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Valuation business date, not ingestion timestamp.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    facts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;MARKET_VALUE_USD&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        expr&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;MARKET_VALUE_USD&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        data_type&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;NUMBER(20,2)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Position market value normalized to USD upstream.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    metrics&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;TOTAL_MARKET_VALUE_USD&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        expr&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;SUM(MARKET_VALUE_USD)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Sum for a selected valuation date; do not sum daily snapshots.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        non_additive_dimensions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;          - &lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;POSITION_DAILY&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            dimension&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;AS_OF_DATE&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            sort_direction&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;descending&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            null_order&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;last&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的 &lt;code&gt;primary_key&lt;/code&gt;、&lt;code&gt;expr&lt;/code&gt;、&lt;code&gt;data_type&lt;/code&gt; 和 &lt;code&gt;non_additive_dimensions&lt;/code&gt; 是面向 Snowflake 的机器可读定义；“为什么市场价值不能跨日求和”则应在设计文档和指标描述中同时讲清楚。正式示例还要补充其他维度、逻辑表关系和业务指标，并依据目标账户当前支持的 YAML 规范验证。&lt;/p&gt;
&lt;h3&gt;2.5.1 到底是谁把设计文档变成 YAML？不是让人逐字段照抄&lt;/h3&gt;
&lt;p&gt;先把分工说清楚：&lt;strong&gt;人负责确认业务含义，生成工具负责把已确认的定义翻译成 YAML，检查程序负责发现结构和技术错误，业务测试负责确认结果是否正确。&lt;/strong&gt; 不建议让业务人员一条条手写 YAML，也不能只给 AI 一段模糊的需求就让它直接生成并部署。&lt;/p&gt;
&lt;p&gt;这不是把中文逐句翻译成 YAML，而是“从设计稿生成程序配置”。设计文档里有些内容能直接映射，有些必须先补充信息，还有些只是背景说明，根本不应该变成 YAML 字段。&lt;/p&gt;
&lt;p&gt;以“总市场价值”为例：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;设计文档里的内容&lt;/th&gt;&lt;th&gt;生成时怎么处理&lt;/th&gt;&lt;th&gt;不能只靠什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;“市场价值以美元计”&lt;/td&gt;&lt;td&gt;找到已确认的来源列 MARKET_VALUE_USD，生成 fact 的名称、表达式、类型和描述&lt;/td&gt;&lt;td&gt;不能因为列名带 USD 就认定它真的已换算成美元；必须确认上游转换规则&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;“总市场价值 = 所选估值日的持仓市场价值之和”&lt;/td&gt;&lt;td&gt;生成 SUM(MARKET_VALUE_USD) 指标，并写清楚估值日限制&lt;/td&gt;&lt;td&gt;不能只生成一个 SUM 就认为口径正确；要用独立 SQL 对账&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;“一行代表估值日 + 组合 + 证券”&lt;/td&gt;&lt;td&gt;对照真实表列，生成主键声明；同时要求唯一性测试&lt;/td&gt;&lt;td&gt;YAML 里的主键声明不会替你清理重复数据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;“组合可以按策略分组”&lt;/td&gt;&lt;td&gt;找到组合维表的策略字段，并检查持仓到组合维表的关系&lt;/td&gt;&lt;td&gt;不能凭字段名猜连接键或关系基数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;“未实现盈亏是否含应计利息：待确认”&lt;/td&gt;&lt;td&gt;将它列为阻塞问题，不生成一个假装已确认的口径&lt;/td&gt;&lt;td&gt;不能让模型自行选择它认为合理的金融定义&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;因此，设计文档最好同时包含&lt;strong&gt;业务决定&lt;/strong&gt;和&lt;strong&gt;物理字段映射&lt;/strong&gt;。例如：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;业务概念&lt;/th&gt;&lt;th&gt;来源对象.字段&lt;/th&gt;&lt;th&gt;业务规则&lt;/th&gt;&lt;th&gt;状态&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;估值日&lt;/td&gt;&lt;td&gt;FACT_POSITION_DAILY.AS_OF_DATE&lt;/td&gt;&lt;td&gt;持仓估值所属日期，不是数据加载时间&lt;/td&gt;&lt;td&gt;已确认&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;持仓市场价值&lt;/td&gt;&lt;td&gt;FACT_POSITION_DAILY.MARKET_VALUE_USD&lt;/td&gt;&lt;td&gt;上游已转换为 USD；同一估值日内可加总&lt;/td&gt;&lt;td&gt;已确认，待数据对账&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;组合策略&lt;/td&gt;&lt;td&gt;DIM_PORTFOLIO.INVESTMENT_STRATEGY&lt;/td&gt;&lt;td&gt;按组合主数据中的当前策略分类&lt;/td&gt;&lt;td&gt;已确认；历史策略口径另议&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;未实现盈亏&lt;/td&gt;&lt;td&gt;FACT_POSITION_DAILY.UNREALIZED_PNL_USD&lt;/td&gt;&lt;td&gt;是否含应计利息尚未确定&lt;/td&gt;&lt;td&gt;&lt;strong&gt;阻塞生成/发布&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这张映射表是关键的中间层。它把“业务上想表达什么”和“数据库里实际存在哪一列”明确连起来。物理字段可以先由程序从 Snowflake 元数据中读取，再由工程师确认；AI 可以提出候选映射，但不能自行把候选项升级为已确认决定。&lt;/p&gt;
&lt;h3&gt;推荐做法：用 Prompt/Skill 生成初稿，但必须有硬性校验&lt;/h3&gt;
&lt;p&gt;实际流程可以自动化，建议把它做成一个可重复运行的 Skill 或脚本工作流，而不是每次临时写一段 Prompt：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;读取输入。&lt;/strong&gt; 获取经过评审的 Markdown 设计文档、当前 Snowflake 表和列的元数据、团队认可的 YAML 示例，以及 Snowflake 当前版本的 YAML 规范。不能只把 Markdown 丢给模型，因为它可能猜错物理列名、类型和支持的语法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;先做映射，不急着生成。&lt;/strong&gt; 让模型输出“业务概念 → 物理字段 → 逻辑表构件 → 需要的检查”的映射表。对找不到的字段、多个候选字段、未知类型、未确认的指标口径，必须明确标记为待确认，不能自行补全。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;人审映射表。&lt;/strong&gt; 数据工程师确认物理字段、类型、连接键和数据粒度；业务负责人确认指标公式、单位、时间范围、空值规则和跨期聚合限制。只需要人审有业务意义的决定，不需要人手工抄写每个 YAML 缩进。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成 YAML。&lt;/strong&gt; 根据已批准的映射表生成完整文件，同时列出每一段 YAML 对应设计文档的哪一项决定。设计文档中仍未确认且会影响正确性的内容，必须让生成流程报错或停止，不应悄悄生成看似完整的配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;机器校验。&lt;/strong&gt; 先运行 YAML 解析、字段白名单/必需字段检查和本地规则检查，再调用 Snowflake 的 SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(…, TRUE) 做服务端验证。服务端验证能发现一部分语法、对象引用和定义问题，但不能证明指标符合业务真实含义。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行数据与语义测试。&lt;/strong&gt; 在开发环境创建对象，运行唯一性、外键匹配、指标对账、跨日期误加总、空值与权限测试；把关键问题的期望 SQL 和期望结果一并版本化。全部通过后才允许合并和部署。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;把修改交回设计流程。&lt;/strong&gt; 如果测试发现“USD 实际不是美元”或“组合策略需要按历史日期还原”，应先修正设计文档和映射，再重新生成 YAML。不要只在 YAML 里打补丁，否则下次生成时容易把修正覆盖掉。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;一个可复用的生成 Prompt / Skill 约定&lt;/h3&gt;
&lt;p&gt;下面的内容可以作为团队 Skill 的核心指令。它的作用不是要求模型“尽量生成完整 YAML”，而是明确证据边界、输出顺序和失败条件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;你是 Snowflake Semantic View 定义生成器。输入包括：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;1. 已评审的语义模型设计 Markdown；&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;2. 从目标 Snowflake 环境读取的表、列、类型及约束元数据；&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;3. 团队认可的 YAML 示例和当前官方 YAML 规范。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;必须按以下顺序工作：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;A. 提取业务问题、粒度、指标公式、单位、时间语义、关系和待确认事项。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;B. 为每个业务概念匹配真实物理表和列；每个映射都要给出依据。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;C. 输出映射表，列出缺失字段、歧义、类型不匹配、关系基数风险和未确认的业务口径。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;D. 如果存在影响正确性的未决项，停止生成可部署 YAML，只输出问题清单和需要谁确认。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;E. 只有在映射已批准、阻塞项已清除后，才按提供的官方规范生成 YAML。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;F. 输出“设计文档条目 -&amp;gt; YAML 路径 -&amp;gt; 校验/测试”的追踪表，以及建议的独立 SQL 对账测试。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;禁止：&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;- 猜测不存在的表名、列名、类型或 Snowflake 不支持的 YAML 字段；&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;- 把列名或注释当作业务事实的充分证据；&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;- 自行决定未确认的金融指标口径；&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;- 将 YAML 解析成功或 Snowflake verify_only 成功表述为业务正确；&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;- 未经批准直接部署到生产。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;团队真正需要维护的是这份 Skill、YAML 规范版本、可信示例和测试集，而不是一份越写越长、每次都靠人临时发挥的 Prompt。若使用 Snowflake 的可视化或 AI 辅助建模功能，也应把生成结果导出到 Git，走相同的评审和测试流程。&lt;/p&gt;
&lt;p&gt;配套的 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/snowflake-semantic-view/skills/semantic-view-generator/SKILL.md&quot;&gt;Skill 规范&lt;/a&gt;、&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/snowflake-semantic-view/prompts/semantic_view_yaml_generator.md&quot;&gt;独立 Prompt 模板&lt;/a&gt;、&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/snowflake-semantic-view/scripts/validate_semantic_mapping.py&quot;&gt;映射校验脚本&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/snowflake-semantic-view/README.md&quot;&gt;实验目录说明&lt;/a&gt; 已放入仓库，可作为后续实践的起点。&lt;/p&gt;
&lt;h3&gt;怎样降低“生成成功但结果错了”的风险？&lt;/h3&gt;
&lt;p&gt;不能靠一个检查解决所有错误，要分层拦截：&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;检查层&lt;/th&gt;&lt;th&gt;主要发现什么&lt;/th&gt;&lt;th&gt;不能保证什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;设计文档检查&lt;/td&gt;&lt;td&gt;指标是否缺定义、是否有未决项、粒度是否说明&lt;/td&gt;&lt;td&gt;不能证明来源数据真的符合定义&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;元数据与映射检查&lt;/td&gt;&lt;td&gt;表/列不存在、类型不匹配、映射到错误对象&lt;/td&gt;&lt;td&gt;不能判断同名字段的业务意义是否一致&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;YAML 静态检查和 Snowflake verify_only&lt;/td&gt;&lt;td&gt;结构、语法、部分引用和定义错误&lt;/td&gt;&lt;td&gt;不能证明聚合结果符合业务口径&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数据质量测试&lt;/td&gt;&lt;td&gt;重复键、孤儿记录、空值、异常范围&lt;/td&gt;&lt;td&gt;不能独自决定一个指标在业务上应该怎么算&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;独立 SQL 对账&lt;/td&gt;&lt;td&gt;Semantic View 结果与经过批准的参考 SQL/报表是否一致&lt;/td&gt;&lt;td&gt;如果参考 SQL 本身错误，仍会一起错&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;业务验收和黄金问题回归&lt;/td&gt;&lt;td&gt;关键业务问题是否得到认可的数值和分组结果&lt;/td&gt;&lt;td&gt;不能替代持续监控和后续变更治理&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;例如，SUM(MARKET_VALUE_USD) 在语法上完全正确，但如果底层一行实际代表税务批次，而不是组合-证券的汇总持仓，或同一估值日的数据被重复加载，结果仍可能错误。机器可以发现重复键或对账差异；究竟应该按批次暴露还是先汇总，则必须由业务定义决定。&lt;/p&gt;
&lt;p&gt;最重要的原则是：&lt;strong&gt;人不必逐条手写 YAML，但人必须批准业务定义和关键字段映射；AI 可以生成，工具可以校验，只有可复现的测试和业务验收才能支持上线。&lt;/strong&gt; 这才是把自然语言设计文档可靠地转成部署文件的办法。&lt;/p&gt;
&lt;h3&gt;2.6 从设计文档到部署文件的交接清单&lt;/h3&gt;
&lt;p&gt;准备 YAML/DDL 之前，评审应能回答以下问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分析范围是什么，明确排除了什么？&lt;/li&gt;
&lt;li&gt;每张逻辑表的一行代表什么？主键假设是否由数据测试支持？&lt;/li&gt;
&lt;li&gt;每个指标的分子/分母、币种、时间口径、空值行为和聚合方式是什么？&lt;/li&gt;
&lt;li&gt;多表连接是怎样的基数关系？连接后有没有 fan-out 风险？&lt;/li&gt;
&lt;li&gt;每个维度和指标映射到哪个物理表、字段或 SQL 表达式？&lt;/li&gt;
&lt;li&gt;哪些定义已由业务确认，哪些仍是阻止上线的未决项？&lt;/li&gt;
&lt;li&gt;哪些自然语言问题应当得到怎样的 SQL 和预期结果？&lt;/li&gt;
&lt;li&gt;哪个角色负责建模、部署、授权、业务验收和后续变更？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只有这些问题得到足够回答后，才进入下一章的创建流程。此时 YAML 不再是设计讨论的起点，而是已评审的语义契约的一种部署表达。Snowflake 的逻辑表、关系、事实、维度和指标的具体语法见&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/sql&quot;&gt;官方 SQL 定义文档&lt;/a&gt;；YAML 字段及约束见 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/semantic-view-yaml-spec&quot;&gt;YAML 规范&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;二点七、底层数据表变化后，Semantic View 会自动感知吗？&lt;/h2&gt;
&lt;p&gt;这里必须区分“底层数据变化”和“底层表结构变化”。它们不是一回事，也不能都期待 Semantic View 自动完成同步。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论先说：Semantic View 不是会自动把底层 schema 重新扫描并更新业务语义的动态模型。&lt;/strong&gt; 它保存的是明确声明的逻辑表、列表达式、关系、维度、事实和指标。底层表增加了一个字段，不意味着这个字段会自动出现在 Semantic View 中；即使某个变更没有立刻报错，也不代表业务定义仍然正确。Snowflake 官方建议把语义视图定义放在 Git 中，通过验证、测试和 CI/CD 部署变更，而不是依赖人工发现漂移。&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/best-practices-dev&quot;&gt;开发与部署最佳实践&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;先区分三种变化&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;底层变化&lt;/th&gt;&lt;th&gt;Semantic View 会怎样&lt;/th&gt;&lt;th&gt;应采取的动作&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;表中新增一列&lt;/td&gt;&lt;td&gt;不会自动把新列作为维度、事实或指标暴露出来&lt;/td&gt;&lt;td&gt;判断该列是否属于业务分析范围；需要时更新设计文档和 YAML/DDL，再验证和部署&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;已被语义定义引用的列被删除、改名或类型发生不兼容变化&lt;/td&gt;&lt;td&gt;相关表达式可能无法解析，部署或查询可能失败；不应假定系统会自动改写定义&lt;/td&gt;&lt;td&gt;将上游变更视为契约变更；先更新映射、语义定义和测试，再发布&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;底层表的数据行新增或更新&lt;/td&gt;&lt;td&gt;语义定义通常不需要随每批数据变更而重写；查询读取底层数据&lt;/td&gt;&lt;td&gt;按数据管道本身的 SLA 检查数据新鲜度、质量和对账结果&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;底层表或视图的定义被替换，且 Semantic View 配置了物化&lt;/td&gt;&lt;td&gt;物化刷新可能在后续刷新时发现依赖变化；刷新失败可能导致物化暂停&lt;/td&gt;&lt;td&gt;检查物化刷新历史和状态，按需要恢复或重建物化；不要把物化刷新当成语义定义更新&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;维表的业务含义、分类规则或键关系变化，但列名不变&lt;/td&gt;&lt;td&gt;技术层面可能仍可查询，业务结果却可能已经错误&lt;/td&gt;&lt;td&gt;通过数据契约、业务评审、指标回归和数据对账识别；仅比较列名无法发现语义漂移&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;关于物化还有一个容易混淆的细节：底层对象变化不会立即等同于 Semantic View 定义被更新。Snowflake 文档说明，依赖变化会在下一次物化刷新时被处理；若刷新失败，物化可能被暂停。物化是查询性能优化机制，不是底层 schema 变更的自动治理机制。参阅&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/materializations&quot;&gt;物化及底层对象变化的处理方式&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;变化发生后，下一步应该怎么做？&lt;/h3&gt;
&lt;p&gt;推荐把上游数据模型变更纳入一个明确的联动流程。假设数据工程团队准备给 &lt;code&gt;FACT_POSITION_DAILY&lt;/code&gt; 增加 &lt;code&gt;PRICE_SOURCE&lt;/code&gt;，或者将 &lt;code&gt;MARKET_VALUE_USD&lt;/code&gt; 改名，流程不应该是“等 Semantic View 报错，再手工修 YAML”。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[&quot;上游表结构或业务口径变更&quot;] --&amp;gt; B[&quot;检测变更并定位依赖&quot;]
    B --&amp;gt; C[&quot;判断是否影响 Semantic View&quot;]
    C --&amp;gt; D{&quot;是否影响已暴露字段、关系或指标？&quot;}
    D -- 否 --&amp;gt; E[&quot;记录变更；运行基础兼容性检查&quot;]
    D -- 是 --&amp;gt; F[&quot;更新语义模型设计文档和字段映射&quot;]
    F --&amp;gt; G[&quot;业务/数据 owner 评审&quot;]
    G --&amp;gt; H[&quot;更新 YAML 或 SQL DDL&quot;]
    H --&amp;gt; I[&quot;静态检查与 Snowflake verify_only&quot;]
    I --&amp;gt; J[&quot;部署到开发环境&quot;]
    J --&amp;gt; K[&quot;查询回归、指标对账、权限检查&quot;]
    K --&amp;gt; L{&quot;全部通过？&quot;}
    L -- 否 --&amp;gt; M[&quot;阻止发布并修复或回滚&quot;]
    L -- 是 --&amp;gt; N[&quot;推广到测试/生产并记录版本&quot;]
    E --&amp;gt; O[&quot;记录结果和依赖状态&quot;]
    N --&amp;gt; O&lt;/pre&gt;
&lt;p&gt;建议将下面几个环节落到实际工程里：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;变更检测。&lt;/strong&gt; 在 dbt、SQL migration 或数据平台的 PR 中检查表的新增/删除/改名列、类型变化、主键/粒度变化。也可以定期从 Snowflake 元数据导出表结构，与上次已批准的 schema manifest 比较。仅靠定期比对列名还不够，因为“市场价值改成含应计利息”可能完全不改变 schema。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;依赖识别。&lt;/strong&gt; 维护“物理表/列 → 逻辑表字段 → 语义指标 → Verified Query/报表”的映射。对本例而言，&lt;code&gt;FACT_POSITION_DAILY.MARKET_VALUE_USD&lt;/code&gt; 不仅映射到同名 fact，还影响 &lt;code&gt;TOTAL_MARKET_VALUE_USD&lt;/code&gt; 及按组合、行业汇总的回归测试。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;影响分类。&lt;/strong&gt; 新增且未被使用的列通常不需要改 Semantic View；被引用列的删除、改名、类型变化属于高风险兼容性变更；指标口径或粒度变化属于业务契约变更，即使 SQL 仍然能运行，也必须重新评审。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;验证与发布。&lt;/strong&gt; 先运行 YAML 结构检查，再使用 &lt;code&gt;SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(..., TRUE)&lt;/code&gt; 做 Snowflake 侧验证；在隔离开发环境部署后，运行基于语义视图的查询、独立底表 SQL 对账和已批准的业务问题测试。只有测试通过才推广到生产。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;监控与回滚。&lt;/strong&gt; 记录部署的 Git commit、目标环境、验证结果和业务批准人。生产回归失败时停止推广，必要时重新部署上一个已知良好的定义；同时确认上游 schema 是否也需要回退。仅回滚 Semantic View 并不能修复已被破坏的底层表。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;如何把联动自动化？&lt;/h3&gt;
&lt;p&gt;第一版不必建设复杂的元数据平台，可以把检查放进现有 CI/CD：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上游表的 DDL/dbt model 变更触发依赖检查。&lt;/li&gt;
&lt;li&gt;Semantic View 的 YAML/DDL 与设计文档一起进入 Pull Request。&lt;/li&gt;
&lt;li&gt;CI 检查被引用的物理表和列是否存在、数据类型是否兼容，以及关键粒度/主键测试。&lt;/li&gt;
&lt;li&gt;使用专用开发角色连接 Snowflake，执行服务端验证和部署后的 smoke/regression tests。&lt;/li&gt;
&lt;li&gt;将验证结果作为发布门禁；失败时禁止晋级生产。&lt;/li&gt;
&lt;li&gt;定期对比 Git 中的定义与 Snowflake 当前对象，发现有人在 Snowsight 手工修改后造成的配置漂移。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Snowflake 提供 &lt;code&gt;SYSTEM$READ_YAML_FROM_SEMANTIC_VIEW&lt;/code&gt;，可把当前 Semantic View 导出为 YAML，适合用于差异比较和漂移检查；但导出当前对象不能替代 Git 中的评审历史，也不能自动判断业务定义是否正确。官方还建议尽可能把定义同步到 Git，并通过 CI/CD 做准确性检查和部署。&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/best-practices-dev&quot;&gt;官方开发与部署指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;需要特别注意：Snowflake 当前的语义视图 DDL 支持范围和物化行为有具体限制。若需要修改表、列、关系、事实、维度或指标，应按当前定义能力使用 &lt;code&gt;CREATE OR ALTER SEMANTIC VIEW&lt;/code&gt; 或受控的替换流程，而不是认为任意修改都可以通过 &lt;code&gt;ALTER SEMANTIC VIEW&lt;/code&gt; 完成。使用 &lt;code&gt;CREATE OR REPLACE&lt;/code&gt; 会删除已有物化；如果已经启用物化，应按官方说明评估使用 &lt;code&gt;CREATE OR ALTER&lt;/code&gt; 并检查物化状态。&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/sql/create-semantic-view&quot;&gt;CREATE SEMANTIC VIEW&lt;/a&gt; · &lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/sql/alter-semantic-view&quot;&gt;ALTER SEMANTIC VIEW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因此，设计阶段就应在语义模型文档中补充“上游依赖与变更策略”：谁拥有底层表、哪些列和指标属于契约、哪些变更必须通知语义模型 owner、哪些测试是发布门禁，以及发生故障时如何回滚。这样 Semantic View 才能随着数据平台演进，而不是成为一份上线后逐渐过期的静态配置。&lt;/p&gt;
&lt;h2&gt;三、创建 Semantic View：两条路径&lt;/h2&gt;
&lt;p&gt;Snowflake 支持 Snowsight 的可视化流程、SQL DDL 和 YAML。入门时，可以用 UI 帮忙探索表结构；需要代码评审、可重复部署和自动测试时，建议把 YAML 或 DDL 存在 Git 中，再从流水线部署。YAML 与 DDL 的能力基本接近，但并非每一个特性都完全相同；选定一种主要源文件格式后，避免让 UI、YAML 和 DDL 成为多人各自修改的多个真相源。&lt;/p&gt;
&lt;h3&gt;路径 A：通过 Snowsight 学习和探索&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在 Snowsight 打开 Cortex Analyst / Semantic View 相关工作区（具体导航会随产品界面调整）。&lt;/li&gt;
&lt;li&gt;使用创建向导选择底层表，查看自动生成的逻辑表和建议的业务描述。&lt;/li&gt;
&lt;li&gt;检查每个逻辑表的粒度，手动核对主键和关系。&lt;/li&gt;
&lt;li&gt;对建议的维度、事实、指标逐项确认。自动生成的字段注释只是草稿，不能作为业务确认。&lt;/li&gt;
&lt;li&gt;保存前用已知的 SQL 和业务报表校验指标；不要因为向导没有报错就直接发布。&lt;/li&gt;
&lt;li&gt;将 YAML 导出/保存到 Git，进入后续 PR、测试和发布流程。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;官方的 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/semantic-studio&quot;&gt;Semantic View Autopilot / Semantic Studio 文档&lt;/a&gt; 介绍了可视化建模和 AI 辅助流程。不同账号可用的功能和模型可能不同，需要按目标账户验证。&lt;/p&gt;
&lt;h3&gt;路径 B：以 YAML 为源，通过 SQL 创建（推荐用于自动化）&lt;/h3&gt;
&lt;p&gt;仓库中的 position_analytics.yaml 是本例的语义定义；它引用 SV_FINANCE_LAB.MART 中的三张教学表。先检查 database、schema、table 名称与你实际创建的对象一致。&lt;/p&gt;
&lt;p&gt;部署过程分为“只验证”和“真正部署”两步。&lt;/p&gt;
&lt;p&gt;第一步，只验证 YAML 是否可以创建 Semantic View。它不会部署对象：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &apos;SV_FINANCE_LAB.MART&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  $$ ...这里放 position_analytics.yaml 的完整内容... $$,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  TRUE&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第三个参数 TRUE 代表 verify_only。真实运行时，请将 YAML 完整内容放在 dollar-quoted string 中；如果 YAML 本身含有 $$，需要选择其他合适的 dollar-quote delimiter。不要把省略号当成可执行内容。&lt;/p&gt;
&lt;p&gt;第二步，验证通过后再部署。对于持续维护的场景，示例使用 create_or_alter 选项，而不是每次无差别地替换对象：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &apos;SV_FINANCE_LAB.MART&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  $$ ...这里放 position_analytics.yaml 的完整内容... $$,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  FALSE,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  TRUE&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里最后的 TRUE 表示使用 CREATE OR ALTER 语义。它可以在受支持的修改范围内调整已有对象，并尽可能保留不受影响的物化配置。部署前仍然需要检查当前版本对具体改动的支持情况。若用默认的 replace 行为，已有对象会被替换，权限、物化对象和下游依赖都应检查；不要把 replace 当成无风险的“保存”。&lt;/p&gt;
&lt;p&gt;手工调用示例见 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/snowflake-semantic-view/sql/10_deploy_semantic_view.sql&quot;&gt;sql/10_deploy_semantic_view.sql&lt;/a&gt;；完整的自动化部署实现位于 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/snowflake-semantic-view/scripts/deploy_semantic_view.py&quot;&gt;scripts/deploy_semantic_view.py&lt;/a&gt;。脚本直接读取仓库中的 YAML，避免手工维护两份重复定义。&lt;/p&gt;
&lt;h3&gt;如果你更习惯 SQL DDL&lt;/h3&gt;
&lt;p&gt;同样可以直接使用 CREATE SEMANTIC VIEW，逐一声明 TABLES、RELATIONSHIPS、FACTS、DIMENSIONS 和 METRICS。官方示例可以参考 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/sql&quot;&gt;SQL 创建语义视图&lt;/a&gt; 和 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/example&quot;&gt;完整示例&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;使用 DDL 的优点是 SQL 工程师熟悉、容易纳入 SQL review、可以通过支持 SQL 的连接方式执行。使用 YAML 的优点是结构更明确、适合模型字段多的场景、容易在 Pull Request 里审查差异。不要因为 YAML 看起来像配置文件，就忽略它包含 SQL 表达式和权限敏感的信息；也不要因为 DDL 是 SQL，就跳过语义层的业务审核。&lt;/p&gt;
&lt;h2&gt;四、创建后怎么检查和查询？&lt;/h2&gt;
&lt;h3&gt;1. 先检查对象是否真的部署成功&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SHOW SEMANTIC VIEWS IN SCHEMA SV_FINANCE_LAB.MART;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;DESCRIBE SEMANTIC VIEW&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SV_FINANCE_LAB.MART.INVESTMENT_PORTFOLIO_OVERVIEW;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;视图名由 YAML 中的 name 决定。本例名称为 INVESTMENT_PORTFOLIO_OVERVIEW。如果查询不到，依次检查当前 role、database、schema、目标名称和上一条部署调用的返回信息。不要仅以 Notebook 单元格没有报红判断部署成功。&lt;/p&gt;
&lt;p&gt;也可以用官方的 SHOW / DESCRIBE 命令查看指标、事实和维度元数据。管理命令列表见 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/sql&quot;&gt;Semantic View SQL 操作&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;2. 用业务问题验证指标口径&lt;/h3&gt;
&lt;p&gt;本例的教学 fixture 包含两个组合和同一个估值日的几项持仓。执行下面的测试 SQL：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;SELECT PORTFOLIO_NAME,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       AS_OF_DATE,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       AGG(TOTAL_MARKET_VALUE_USD) AS MARKET_VALUE_USD,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       AGG(TOTAL_COST_BASIS_USD) AS COST_BASIS_USD,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       AGG(TOTAL_UNREALIZED_PNL_USD) AS UNREALIZED_PNL_USD&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM SV_FINANCE_LAB.MART.INVESTMENT_PORTFOLIO_OVERVIEW&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;WHERE AS_OF_DATE = &apos;2026-10-27&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;GROUP BY PORTFOLIO_NAME, AS_OF_DATE&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ORDER BY PORTFOLIO_NAME;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;按仓库样例数据，US Equity Growth 的市值是 12,450 美元、成本基础 11,300 美元、未实现盈亏 1,150 美元；Core Fixed Income 的市值是 11,660 美元、成本基础 11,200 美元、未实现盈亏 460 美元。这些数字只是固定 fixture 的测试期望值。真实数据必须与可信的持仓/估值报表、总账或正式投资平台输出对账。&lt;/p&gt;
&lt;p&gt;如果用标准 SELECT 方式查询 Semantic View，需要按文档要求正确使用指标聚合语法（如 AGG）；也可以使用 SEMANTIC_VIEW 子句明确选择维度、事实和指标。参阅 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/querying&quot;&gt;查询 Semantic View&lt;/a&gt;。如果查询报错，不要先改指标定义，先确认视图里实际暴露的名称、粒度、过滤条件和调用语法。&lt;/p&gt;
&lt;h3&gt;3. 再核对底层 SQL&lt;/h3&gt;
&lt;p&gt;语义模型给出业务接口，但校验不能只依赖它自己。针对相同的估值日，直接对 FACT_POSITION_DAILY 与 DIM_PORTFOLIO 做 SQL 聚合，计算相同口径，再与 Semantic View 结果比对。两边若使用同一套错误的转换逻辑，仍可能一起出错，所以生产测试应包含已知结果、上游对账结果或业务签署过的 golden dataset。&lt;/p&gt;
&lt;p&gt;至少验证以下情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同一估值日、组合、证券没有重复键。&lt;/li&gt;
&lt;li&gt;没有无法关联的组合和证券。&lt;/li&gt;
&lt;li&gt;同一组合跨多个估值日时，查询强制选择一个时点或明确地计算日终时间序列。&lt;/li&gt;
&lt;li&gt;有缺失成本基础、负数量、空证券代码或晚到数据时，指标行为符合业务规则。&lt;/li&gt;
&lt;li&gt;组合币种与指标币种明确对应，转换到美元的时点与来源可追踪。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;五、维护操作：什么能 ALTER，什么应该重新部署？&lt;/h2&gt;
&lt;p&gt;Semantic View 的生命周期最容易踩坑的地方之一，是把它当成普通 View，以为任何列、指标或关系都可以用一条 ALTER 修改。实际支持范围更具体。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;需要做的变更&lt;/th&gt;&lt;th&gt;常见操作思路&lt;/th&gt;&lt;th&gt;需要检查什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;修改 comment、部分属性、标签或物化配置&lt;/td&gt;&lt;td&gt;使用支持该属性的 ALTER SEMANTIC VIEW&lt;/td&gt;&lt;td&gt;确认对应语法和所需权限&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;增加/删除/修改逻辑表、关系、事实、维度、指标或 verified queries&lt;/td&gt;&lt;td&gt;使用 CREATE OR ALTER SEMANTIC VIEW，或从源 YAML/DDL 重新部署&lt;/td&gt;&lt;td&gt;支持范围、依赖关系、指标回归、标签/权限是否保留&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;改名或移动对象&lt;/td&gt;&lt;td&gt;ALTER SEMANTIC VIEW 的 rename 能力或有计划的迁移&lt;/td&gt;&lt;td&gt;所有下游消费者和权限引用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;物化策略变化&lt;/td&gt;&lt;td&gt;ALTER SEMANTIC VIEW 的 materialization 操作&lt;/td&gt;&lt;td&gt;仓库成本、刷新延迟、指标兼容性和查询改写效果&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;回退一个错误的业务口径&lt;/td&gt;&lt;td&gt;从 Git 部署已知正常的上一个版本&lt;/td&gt;&lt;td&gt;不能只回滚代码；必须重跑测试并验证线上对象与权限&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;官方文档说明，ALTER SEMANTIC VIEW 并不能任意改动 Semantic View 的所有属性；表、字段及指标等语义定义要通过支持的 CREATE OR ALTER 或 replace 路径管理。特别是 CREATE OR ALTER 中没有写出的某些属性可能会被 unset；标签设置也有单独限制。请先看 &lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/sql/create-semantic-view&quot;&gt;CREATE SEMANTIC VIEW / CREATE OR ALTER&lt;/a&gt; 与 &lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/sql/alter-semantic-view&quot;&gt;ALTER SEMANTIC VIEW&lt;/a&gt; 的最新限制。&lt;/p&gt;
&lt;p&gt;一个稳妥的日常变更过程是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Git 分支修改 YAML/DDL，并在 PR 里解释业务口径变化、影响消费者和预期数值。&lt;/li&gt;
&lt;li&gt;对照物理表检查字段名、数据类型、键和新旧粒度。&lt;/li&gt;
&lt;li&gt;运行本地 YAML 检查，再用 Snowflake 的 verify_only 验证。&lt;/li&gt;
&lt;li&gt;将候选版本部署到隔离 schema 或测试数据库。&lt;/li&gt;
&lt;li&gt;跑语义对象检查、已知 SQL 回归、业务对账和权限测试；涉及自然语言消费时，再跑 Analyst/Agent 问答评估。&lt;/li&gt;
&lt;li&gt;通过评审后部署生产，验证部署的对象、权限、查询表现和使用方。&lt;/li&gt;
&lt;li&gt;如果失败，重新部署上一个已知正常的定义，并检查是否需要恢复 grants、物化配置或下游对象。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;六、如何自动创建、更新和验证？&lt;/h2&gt;
&lt;p&gt;自动化不是“写个脚本执行 CREATE”那么简单。核心是把模型定义、数据契约、测试和部署权限都变成可追踪的交付物。&lt;/p&gt;
&lt;h3&gt;推荐的最小流水线&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Git commit / Pull Request&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;静态检查 YAML、命名、必需字段、重复定义&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Snowflake verify_only（不改变目标对象）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Deploy to DEV / TEST schema&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;结构检查 + 业务数值回归 + 与权威报表对账&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;权限/负面测试 + 可选 Cortex Analyst 问答评估&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;人工业务审批或合规审批（按风险分级）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;部署到 PROD + 部署后 smoke test + 记录版本&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;仓库中的 scripts/deploy_semantic_view.py 演示了如何读取 YAML，通过 Snowflake Python Connector 调用 SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML：默认只验证；显式传入 —deploy 后才部署。scripts/test_semantic_view.py 和 sql/20_smoke_tests.sql 演示对象/数据回归测试。Notebook 把这些步骤拆成可交互的执行单元，适合刚开始学习时逐步运行。&lt;/p&gt;
&lt;h3&gt;为什么要先 verify_only？&lt;/h3&gt;
&lt;p&gt;SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML 支持 verify_only 参数。传 TRUE 时，Snowflake 验证给定 YAML 是否可用于创建 Semantic View，但不真正创建对象；验证通过后，再执行部署调用。该过程能够捕获许多模型定义和表达式问题，却不能证明业务金额正确、角色权限恰当或自然语言问答准确。&lt;/p&gt;
&lt;h3&gt;Notebook 如何使用？&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在本机安装 Python 依赖：snowflake-connector-python、PyYAML 和 Jupyter。&lt;/li&gt;
&lt;li&gt;配置连接环境变量，而不是把密码或私钥写进 Notebook。交互式本地练习可以使用 externalbrowser 等已配置的认证方式；自动化服务应按组织的安全标准选择短时凭据、工作负载身份或密钥对认证。&lt;/li&gt;
&lt;li&gt;在仓库目录启动 Jupyter，打开 01_semantic_view_workshop.ipynb。&lt;/li&gt;
&lt;li&gt;先执行连接和只读检查，再运行验证单元格。&lt;/li&gt;
&lt;li&gt;只有在确认账号、目标 schema、权限与测试状态后，才执行部署单元格。&lt;/li&gt;
&lt;li&gt;运行后续的 smoke tests，并保存查询结果、query ID、提交 SHA、目标环境和部署人等非敏感审计信息。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要在公开 Notebook、Git 历史或 GitHub Actions 日志中输出密码、私钥、访问令牌、客户级数据或整份敏感结果集。&lt;/p&gt;
&lt;h3&gt;CI/CD 工具如何选择？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SQL + Python Connector&lt;/strong&gt;：简单直接，适合用代码部署 YAML/DDL 并运行测试。前提是连接与凭据生命周期设计正确。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dbt&lt;/strong&gt;：如果转换模型本来就在 dbt 中维护，可以研究 Snowflake 官方文档推荐的 Semantic View dbt package，把语义定义和数据模型放入同一个变更流程。先核对 package 的当前版本、支持特性和目标环境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DCM Projects&lt;/strong&gt;：Snowflake 当前文档已列出在 DCM project definition file 中使用 DEFINE SEMANTIC VIEW 的声明式管理路径，部署时会按定义协调完整的 Semantic View。文档将相关支持标记为 Preview；而且 DEFINE SEMANTIC VIEW 只能写在 DCM 项目定义文件中，不是可单独执行的 SQL。仅在目标账户已启用且团队接受预览能力边界时评估。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Actions / 其他 CI&lt;/strong&gt;：负责执行静态检查、调用部署脚本、运行回归并保留流水线结果。不要让 CI 以人类管理员的长期凭证部署所有对象。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snowsight / Semantic Studio&lt;/strong&gt;：适合探索、首次建模和人工交互，不应让生产对象长期脱离 Git 的可审查定义。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terraform&lt;/strong&gt;：基础设施自动化可以管理部分 Snowflake 资源，但不要假设 Semantic View 的全部功能都已由当前 provider 原生覆盖。请按当前官方 provider 文档验证支持范围；不要用未经验证的自定义封装代替生产测试。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Snowflake 官方的 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/best-practices-dev&quot;&gt;Semantic View 开发与部署实践&lt;/a&gt; 明确建议将 YAML/DDL 版本化、由 Git 变更触发测试与部署，并保留已知正常的定义用于回滚。官方也提供了 &lt;a href=&quot;https://www.snowflake.com/en/developers/guides/semantic-view-eval-cicd/&quot;&gt;带评估门禁的 Semantic View CI/CD 示例&lt;/a&gt;，展示静态检查、部署候选版本、评估和晋级的流程。该示例中的分数阈值是演示配置，不应直接当作生产验收门槛。&lt;/p&gt;
&lt;h2&gt;七、回归测试应该测什么？&lt;/h2&gt;
&lt;p&gt;只检查“SQL 能执行”远远不够。语义层同时承载计算逻辑、业务名称和连接图，因此建议分层测试。&lt;/p&gt;























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;测试层&lt;/th&gt;&lt;th&gt;要证明什么&lt;/th&gt;&lt;th&gt;例子&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;源文件检查&lt;/td&gt;&lt;td&gt;YAML 可解析、文件完整、命名稳定、定义没有意外删改&lt;/td&gt;&lt;td&gt;YAML parser、必需字段检查、diff review&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Snowflake 定义验证&lt;/td&gt;&lt;td&gt;Snowflake 可以接受这份定义&lt;/td&gt;&lt;td&gt;verify_only 调用成功&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对象检查&lt;/td&gt;&lt;td&gt;目标环境部署了预期对象和指标&lt;/td&gt;&lt;td&gt;SHOW / DESCRIBE SEMANTIC VIEW&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数据契约&lt;/td&gt;&lt;td&gt;业务粒度、主键唯一、外键引用、必需字段完整&lt;/td&gt;&lt;td&gt;重复键、孤立键、空值和有效日期检查&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数值回归&lt;/td&gt;&lt;td&gt;关键指标和可信来源一致&lt;/td&gt;&lt;td&gt;指定估值日的市场价值、成本基础、盈亏和组合汇总&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;边界测试&lt;/td&gt;&lt;td&gt;不常见情况也遵循定义&lt;/td&gt;&lt;td&gt;多估值日、空成本、缺失证券、零分母、币种差异&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;权限测试&lt;/td&gt;&lt;td&gt;用户只能读取被批准的语义对象和数据&lt;/td&gt;&lt;td&gt;用低权限角色验证允许访问与拒绝访问的查询&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自然语言评估&lt;/td&gt;&lt;td&gt;AI 使用的指标和连接符合业务问题&lt;/td&gt;&lt;td&gt;同义问法、歧义问法、时间范围、分组、越权/越界问题&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;生产验证&lt;/td&gt;&lt;td&gt;发布后对象状态、性能与授权仍符合预期&lt;/td&gt;&lt;td&gt;smoke tests、Query History、结果对账和异常告警&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;对重要的金融指标，建立一组经过业务人员确认的参考问题及 SQL，记录参考结果、口径说明、适用日期与审批人。修改定义后，不只看总体准确率；要检查失败案例是否集中在某类资产、某个关系路径、日期窗口、负值/空值或币种上。&lt;/p&gt;
&lt;p&gt;如果使用 Cortex Analyst，可维护 Verified Query Repository（VQR）中的自然语言问题和对应 SQL，改善常见问题的生成效果。verified query 本身也要经过审查：官方文档提醒其 SQL 要使用语义模型中的逻辑名称，且错误的 verified query 会负面影响结果。参考 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/verified-query-repository&quot;&gt;Verified Query Repository&lt;/a&gt; 与 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/improving-accuracy&quot;&gt;改善 Cortex Analyst 准确性&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确结果必须独立核对。&lt;/strong&gt; SQL 语法检查成功、Snowflake 接受 YAML、Agent 返回了 SQL、回答附带了来源，这些都不单独构成金额正确的证据。金融场景尤其应当保留数据血缘、计算口径、估值时点和可复现的对账证据。&lt;/p&gt;
&lt;h2&gt;八、金融服务业场景中的关键设计点&lt;/h2&gt;
&lt;h3&gt;1. 粒度和 join fan-out 是第一风险&lt;/h3&gt;
&lt;p&gt;持仓表连接到一对一的组合维度和证券维度时，逻辑较简单。但如果再连接交易、证券报价、评级历史、托管账户或多条价格记录，粒度可能迅速变化。例如一条持仓连接到三条价格记录，市场价值就可能被重复三次。不要仅凭列名相似就加关系；需要验证右侧键是否唯一、有效日期是否匹配、连接结果行数是否异常扩大。&lt;/p&gt;
&lt;p&gt;Snowflake 会根据键与关系定义验证一部分模型约束，但模型声明的主键不能替代上游数据质量测试。关于事实表粒度和事实类型，可参考 Kimball Group 的 &lt;a href=&quot;https://www.kimballgroup.com/2008/11/fact-tables/&quot;&gt;Fact Tables&lt;/a&gt; 与 &lt;a href=&quot;https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/periodic-snapshot-fact-table/&quot;&gt;Periodic Snapshot Fact Tables&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;2. 市值和余额通常不能跨时间简单求和&lt;/h3&gt;
&lt;p&gt;每日持仓是 periodic snapshot。市场价值是可在同一个估值时点跨证券/组合相加的指标，但通常不能把 10 月 1 日到 10 月 31 日每天的市场价值全部加起来，称为“月度资产规模”。这会把重复存在的资产当成多次独立交易。需要月末资产规模时，应选择月末快照；需要日均资产规模时，应按清晰的日期日历和缺失日规则计算平均值；需要资金流和交易量时，应使用对应的交易/流量事实表，而不是用存量快照代替。&lt;/p&gt;
&lt;p&gt;对同样的原因，投资回报率通常也不能简单对各持仓行的百分比求平均。先明确资金加权收益、时间加权收益、未实现盈亏率或其他指标的业务定义，再确定分母、时间段、现金流、费用和币种处理。&lt;/p&gt;
&lt;h3&gt;3. 时间语义要写清楚&lt;/h3&gt;
&lt;p&gt;金融数据会有 trade date、settlement date、as-of date、pricing timestamp、effective date、load timestamp 等不同时间。它们不是同义词。一个问题说“截至昨天”，到底是估值日、交易日，还是数据完成入仓的时间？如果没有定义，模型可能给出看似合理但业务不一致的答案。&lt;/p&gt;
&lt;p&gt;对历史证券属性、评级、评级机构覆盖、组合策略等慢变维度，可能需要基于有效起止日期进行 as-of/range relationship。Snowflake 支持某些基于日期/时间/数值范围的关系定义；使用前应阅读 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/semantic-view-yaml-spec&quot;&gt;YAML 关系规范&lt;/a&gt;，并测试边界日期、重叠有效期和没有有效匹配的情况。&lt;/p&gt;
&lt;h3&gt;4. 币种和精度不是可忽略的细节&lt;/h3&gt;
&lt;p&gt;至少区分交易币种、证券计价币种、组合基础币种、报告币种和换汇后的标准币种。每个换算需要明确汇率来源、汇率日期、报价方向和缺失汇率的处理方式。USD 后缀应意味着上游确实已经完成定义明确的美元换算，不应仅仅是为了让模型更容易回答而改名。&lt;/p&gt;
&lt;p&gt;金融金额计算应尽量使用适当精度的 DECIMAL/NUMBER，避免过早转换为浮点数；比率应在聚合后的合适分子/分母上计算，并明确分母为零的规则。若需要跨期比较或监管披露，更要保留计算输入、模型版本与日期口径。&lt;/p&gt;
&lt;h3&gt;5. 指标需要负责人和变更治理&lt;/h3&gt;
&lt;p&gt;为每个重要指标指定业务负责人、技术负责人、定义文档、来源表、适用口径、测试集和变更审批人。即使只有一个 Semantic View，也可能有不同的指标 owner：投资运营负责估值字段，绩效团队负责回报率口径，风险团队负责风险敞口口径。修改 “market value” 的解释，应该像修改一项受治理的接口，而不是普通注释编辑。&lt;/p&gt;
&lt;h3&gt;6. 按业务域拆分，不要建立全企业超大模型&lt;/h3&gt;
&lt;p&gt;Snowflake 建议从明确的业务问题和较小范围开始，以便调试和提高准确性；一个可以实践的起点是围绕投资组合分析选择少量逻辑表和 5–10 个最重要的问题。这个数字是启动建议，不是产品硬限制。太大的 Semantic View 可能增加上下文、检索和 SQL 生成复杂度，也可能把本来不应共享的数据定义混在一起。&lt;/p&gt;
&lt;p&gt;建议按投资组合、交易、风险、绩效归因、客户/账户和研究内容划分边界，再通过清晰的数据契约连接跨域数据。不要仅因为它们在同一个数据库就全部塞进一个模型。&lt;/p&gt;
&lt;h2&gt;九、企业架构和安全治理：Semantic View 不是安全魔法&lt;/h2&gt;
&lt;h3&gt;推荐的分层架构&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;来源系统 / 市场数据 / 托管与交易平台&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;数据接入、质量检查、历史与血缘&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;标准化 Data Mart（事实表、维度、有效日期、币种）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Semantic View（业务名词、关系、指标、描述、验证问题）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      +-------+---------+&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      |                 |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      v                 v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  BI / SQL 分析     Cortex Analyst / Agent&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      |                 |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      +-------+---------+&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;              |&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   业务对账、审计、权限和监控&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;语义层最好建立在稳定的数据产品或 Mart 上，而不是直接绑定所有原始落地表。原始层应负责保留来源语义和数据血缘，转换层负责标准化与历史处理，Semantic View 负责统一的消费口径。这样源表列名变化时，可以优先在模型层或转换层处理，而不是让每个消费者分别修补 SQL。&lt;/p&gt;
&lt;h3&gt;权限需要分层设计&lt;/h3&gt;
&lt;p&gt;至少分开考虑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;谁可以修改物理表和数据转换逻辑。&lt;/li&gt;
&lt;li&gt;谁可以创建或更新 Semantic View。&lt;/li&gt;
&lt;li&gt;谁拥有 Semantic View 的 OWNERSHIP。&lt;/li&gt;
&lt;li&gt;谁只能对已批准的 Semantic View 执行 SELECT。&lt;/li&gt;
&lt;li&gt;Cortex Agent/服务角色运行时需要什么依赖对象权限。&lt;/li&gt;
&lt;li&gt;哪些字段需要掩码、哪些行受租户/客户/法律实体限制、哪些输出不可导出。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对普通 SQL 使用场景，Snowflake 文档说明查询者可以通过 Semantic View 本身的 SELECT 权限查询，而不必直接拥有底层表的 SELECT 权限；但 Cortex Agents 对底层数据的运行权限有额外要求，必须依据官方权限说明验证，不能把两种调用模式混为一谈。参考 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/querying&quot;&gt;查询权限&lt;/a&gt; 和 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/best-practices-dev&quot;&gt;开发部署中的权限设计&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;尤其不要认为“有 Semantic View 就自动有行列级安全”。需结合 Snowflake 的对象授权、owner rights 行为、行访问策略、掩码策略、安全视图、Agent 执行角色和数据共享方式做端到端测试。用真实的低权限测试角色验证允许与拒绝的场景，不要只靠管理员角色测试成功路径。&lt;/p&gt;
&lt;h3&gt;元数据也要纳入风险评估&lt;/h3&gt;
&lt;p&gt;Semantic View 的名称、描述、同义词、标签和 SQL 指令可能被用于解释模型或辅助 SQL 生成。不要把个人信息、客户敏感数据、账户号码、未公开交易计划或受监管数据放进不必要的描述和元数据字段。标签适合分类与治理，但并不代替真正的授权控制。&lt;/p&gt;
&lt;h3&gt;何时考虑物化和性能优化？&lt;/h3&gt;
&lt;p&gt;先让模型口径正确，再基于真实查询和 Query Profile 评估瓶颈。Semantic View 物化可以预聚合选定维度与指标，但截至本文资料核对日，Snowflake 官方文档仍将这项功能标记为 Preview；正式使用前应再次核对目标账号的可用状态、权限和限制。&lt;/p&gt;
&lt;p&gt;官方文档给出的典型流程是先设置最大可接受的数据陈旧时间，再定义物化内容。下面是一个单独的“销售收入”例子，演示语法；它不是本教程投资组合持仓模型的直接部署脚本。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-- 先确认角色拥有 Semantic View 的 OWNERSHIP，&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-- 且在目标 schema 上具备 ADD SEMANTIC VIEW MATERIALIZATION。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ALTER SEMANTIC VIEW ANALYTICS_DB.MART.SALES_ANALYTICS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SET MAX_STALENESS = &apos;1 hour&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ALTER SEMANTIC VIEW ANALYTICS_DB.MART.SALES_ANALYTICS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ADD MATERIALIZATION REVENUE_BY_CUSTOMER_YEAR&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  WAREHOUSE = ANALYTICS_WH&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  REFRESH_MODE = AUTO&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  AS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    DIMENSIONS CUSTOMERS.CUSTOMER_NAME, ORDERS.ORDER_YEAR&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    METRICS ORDERS.TOTAL_REVENUE;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SHOW MATERIALIZATIONS IN SEMANTIC VIEW&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ANALYTICS_DB.MART.SALES_ANALYTICS;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果要手工刷新、暂停或恢复，可以使用以下管理操作（执行前替换为真实对象名和物化名）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;ALTER SEMANTIC VIEW ANALYTICS_DB.MART.SALES_ANALYTICS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  REFRESH MATERIALIZATION REVENUE_BY_CUSTOMER_YEAR;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ALTER SEMANTIC VIEW ANALYTICS_DB.MART.SALES_ANALYTICS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  SUSPEND MATERIALIZATION REVENUE_BY_CUSTOMER_YEAR;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ALTER SEMANTIC VIEW ANALYTICS_DB.MART.SALES_ANALYTICS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  RESUME MATERIALIZATION REVENUE_BY_CUSTOMER_YEAR;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ALTER SEMANTIC VIEW ANALYTICS_DB.MART.SALES_ANALYTICS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  DROP MATERIALIZATION REVENUE_BY_CUSTOMER_YEAR;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里有几条容易遗漏的限制。第一，官方文档说明半可加指标（semi-additive metrics）、窗口指标和指定关系路径的指标不能放进物化定义；本教程的持仓市场价值、成本基础、未实现盈亏和持仓计数都按估值日处理为时间维度上的半可加指标，因此不要直接把这些指标放进上面的物化例子。第二，CREATE OR REPLACE SEMANTIC VIEW 会立即删除既有物化对象；若要在修改语义定义时尽可能保留未受影响的物化配置，应使用受支持的 CREATE OR ALTER 路径。对已经被修改的物化所依赖的字段/指标，仍需检查其是否进入 suspended 状态以及是否需要重新建立。第三，物化收益取决于消费路径：Snowflake 当前文档指出，Semantic SQL（SEMANTIC_VIEW 子句或直接查询 Semantic View）可以使用物化结果，但 Cortex Analyst、Cortex Agents 和 Snowflake CoWork 如果生成的是直接访问底层表的物理 SQL，则不能利用 Semantic View 的物化。不要假设“给 Agent 配了物化”就会自动变快。&lt;/p&gt;
&lt;p&gt;刷新仓库、刷新延迟、FULL/INCREMENTAL 可用性、额外存储与计算成本、查询是否命中物化，都应通过实际执行历史和查询计划验证。参考 &lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/materializations&quot;&gt;Semantic View 物化文档&lt;/a&gt; 与 &lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/sql/alter-semantic-view&quot;&gt;ALTER SEMANTIC VIEW 语法&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;对于日终持仓或监管汇总，结果正确和新鲜度往往比追求每个问题都最低延迟更重要。把 SLA 写进数据产品契约：例如最大延迟、估值日期、来源完成标志、迟到记录补算与重新对账规则。&lt;/p&gt;
&lt;h2&gt;十、业界可以借鉴的做法&lt;/h2&gt;
&lt;p&gt;这里把官方能力、厂商解决方案和通用数据建模经验分开看。厂商案例有参考价值，但不是独立性能基准，也不意味着任何账户都能复现它的结果。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;模型定义放 Git。&lt;/strong&gt; Snowflake 官方建议 Semantic View YAML/DDL 版本化、由 PR 审查并触发测试；不要让生产定义只存在于某个人的 Snowsight 工作区。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;从稳定业务域起步。&lt;/strong&gt; 选择一个具体分析问题，把少量表、关键指标和参考 SQL 做正确，再扩展到更多领域。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;明确事实表粒度。&lt;/strong&gt; Kimball 的经典建议是先声明每一行代表什么，再选择维度与事实；这是避免金融分析重复汇总的基本防线。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;把数据质量和语义质量分别测试。&lt;/strong&gt; 数据检查保证键、时间和金额输入满足契约；语义测试保证指标、关系和自然语言生成按照业务口径工作。两者不能互相替代。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提供经验证的“黄金问题”。&lt;/strong&gt; 真实用户反复问的关键问题应有已校验 SQL 和预期结果。VQR 能帮助 Cortex Analyst 处理相似问题，但每个示例都必须保持准确并及时更新。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用多环境推广，而不是直接覆盖生产。&lt;/strong&gt; 在 DEV 验证定义、在 TEST 跑业务回归，在 PROD 受控发布。Snowflake 文档提到 schema clone 可用于同一账户内的环境推广；跨账户应核对 replication 和其他部署约束。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;部署与权限变更要一起审查。&lt;/strong&gt; 被覆盖或重建的对象可能涉及 grants、所有权和下游依赖。上线脚本应核对真实权限，不要假设所有路径自动保留所有授权。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用服务身份和最小权限运行流水线。&lt;/strong&gt; CI/CD 角色只获得所需 schema、底层对象和 Semantic View 权限。优先采用组织批准的 workload identity 或短期认证机制，避免长期凭证散落在配置文件里。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;先定义失败门槛，再看评估分数。&lt;/strong&gt; 可以把解析、数值差异、越权测试设为硬门槛；对自然语言质量，阈值应通过领域测试集和真实业务风险制定。教程里的阈值不能直接挪到生产。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回归问题集也要版本化。&lt;/strong&gt; 指标定义改变时同步更新参考问题、期望结果和业务审批说明；否则模型定义变了，测试却仍然只检查旧口径。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;把模型规模和消费者边界一起设计。&lt;/strong&gt; 一个语义模型越大并不代表覆盖越好。按领域拆分可以减少歧义，并降低 AI 在不相关指标里找错定义的机会。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不要把可解释描述当成数值证据。&lt;/strong&gt; 注释、同义词和 LLM 的解释有助于理解，但关键金融数字仍要能映射到来源、转换逻辑、估值日期和权威对账。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;物化由证据驱动。&lt;/strong&gt; 观察常见查询、响应时间和刷新成本后再考虑物化；不要把每个指标都提前聚合。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;明确跨 BI、Agent 和 SQL 客户端的治理范围。&lt;/strong&gt; Semantic View 对使用 Snowflake 的消费者很有价值，但如果其他系统另有一份重复指标定义，应明确哪份定义是权威的，以及怎么防止口径漂移。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;为模型变更建立 owner。&lt;/strong&gt; 指标定义属于业务契约，数据工程不能独自决定绩效口径。模型发布前的业务确认和技术测试应该留下记录。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;采用平台声明式部署时，也要评估功能状态和差异。&lt;/strong&gt; DCM Projects 可把 Semantic View 放在目标状态定义中管理，但相关能力当前标记为 Preview；不能因为声明式配置方便就忽略项目部署约束、权限差异和未支持的属性。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可继续阅读以下资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/overview&quot;&gt;Snowflake：Semantic Views 概览&lt;/a&gt; —— 对象定位和能力边界。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/best-practices-modeling&quot;&gt;Snowflake：建模最佳实践&lt;/a&gt; —— 领域范围、描述、关系、指标和精度迭代。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/best-practices-dev&quot;&gt;Snowflake：开发与部署最佳实践&lt;/a&gt; —— Git、权限、环境推广、dbt 和自动化。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/semantic-view-yaml-spec&quot;&gt;Snowflake：YAML 规范&lt;/a&gt; —— YAML 的正式字段定义。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/sql/create-semantic-view&quot;&gt;Snowflake：CREATE SEMANTIC VIEW&lt;/a&gt; 与 &lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/sql/alter-semantic-view&quot;&gt;ALTER SEMANTIC VIEW&lt;/a&gt; —— DDL 语法和修改边界。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/yaml-vs-ddl&quot;&gt;Snowflake：YAML/DDL 选型&lt;/a&gt; —— 两种定义方式的特性差异。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/materializations&quot;&gt;Snowflake：Semantic View 物化&lt;/a&gt; —— 物化配置、刷新、权限、限制和监控；官方页面当前标记为 Preview。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/dcm-projects/dcm-projects-supported-entities&quot;&gt;Snowflake：DCM Projects 支持的对象类型&lt;/a&gt; —— DEFINE SEMANTIC VIEW 的声明式部署路径与限制。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/stored-procedures/system_create_semantic_view_from_yaml&quot;&gt;Snowflake：从 YAML 创建对象的系统存储过程&lt;/a&gt; —— verify_only 与 create_or_alter 参数。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/querying&quot;&gt;Snowflake：Semantic View 查询方式&lt;/a&gt; —— SELECT、SEMANTIC_VIEW 子句和权限。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/user-guide/views-semantic/verified-query-repository&quot;&gt;Snowflake：Verified Query Repository&lt;/a&gt; —— 黄金问题、参考 SQL 和 Cortex Analyst。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.snowflake.com/en/developers/guides/semantic-view-eval-cicd/&quot;&gt;Snowflake：Eval-gated CI/CD 示例&lt;/a&gt; —— 从静态验证到候选发布与评估门禁的参考实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.snowflake.com/en/developers/guides/investment-portfolio-analytics-with-snowflake-cortex/&quot;&gt;Snowflake：投资组合分析解决方案&lt;/a&gt; —— 资产管理分析、Cortex Analyst 与文档搜索的官方解决方案案例。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.snowflake.com/en/blog/engineering/version-control-semantic-views/&quot;&gt;Snowflake：使用 Terraform 管理 Semantic View 版本&lt;/a&gt; —— 可作为 IaC 方向的实践参考；落地前仍需检查当前 provider 能力。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.kimballgroup.com/2008/11/fact-tables/&quot;&gt;Kimball Group：事实表设计&lt;/a&gt; —— 粒度、交易事实、周期快照和累积快照。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/periodic-snapshot-fact-table/&quot;&gt;Kimball Group：周期快照事实表&lt;/a&gt; —— 为什么余额类指标要小心跨期汇总。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://snowflake.atscale.com/blog/how-to-build-snowflake-semantic-view/&quot;&gt;AtScale：如何构建与治理 Snowflake Semantic View&lt;/a&gt; —— 从粒度、关系、指标到持续核对的供应商实践视角，需结合官方文档和本企业环境判断。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;十一、常见问题排查&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;YAML 验证失败。&lt;/strong&gt; 先定位错误对应的逻辑表、表达式、类型或关系。确认每个物理表真实存在、列名准确、主键来自底层列或受支持表达式；再逐个缩小定义，而不是一次性反复修改所有字段。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;部署成功但 SHOW 查不到。&lt;/strong&gt; 检查调用时的目标 database/schema、YAML 中的 name、当前 role 是否有可见性，以及是否部署到了另一个环境。不要只依赖 Worksheet 当前 UI 选择状态。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总额比原始报表大很多。&lt;/strong&gt; 优先检查连接是否造成 fan-out、物理表是否存在重复键、快照是否跨多个日期求和、底层是否把多个币种直接加在一起。不要先尝试用 DISTINCT 把数字“修回去”，这往往会隐藏粒度问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修改 YAML 后 UI 里面的版本没变化，或 UI 修改被覆盖。&lt;/strong&gt; 先确定唯一权威来源。若团队把 Git 里的 YAML 作为源，就从它部署并把 UI 修改同步回仓库。不要让两条写入路径并行维护同一个对象。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cortex Analyst 生成错误 SQL。&lt;/strong&gt; 检查指标描述是否写清楚分子/分母、币种、日期和过滤条件；检查关系图和字段同义词；增加并审查 verified queries，并把错误问题加入评估集。不要只用更长的 prompt 掩盖错误的语义关系。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有 SELECT 权限仍无法通过 Agent 使用。&lt;/strong&gt; 普通 SQL 访问和 Cortex Agent 的依赖权限可能不同。按官方文档逐项核对 Semantic View、底层表/视图以及服务运行角色的实际授权；使用最小权限角色复现问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一切运行正常但性能或成本变差。&lt;/strong&gt; 检查真实 Query Profile、扫描量、warehouse 规格和并发、重复查询模式，以及是否有必要的物化配置。不要先扩大 warehouse 或为每个指标建物化对象。&lt;/p&gt;
&lt;h2&gt;最后：一个可交付的 Semantic View 应该有哪些东西？&lt;/h2&gt;
&lt;p&gt;不是一份成功创建的对象，而是一套可解释、可复现并且有人负责的业务契约。最低限度应包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有粒度声明的数据模型与明确的主外键关系。&lt;/li&gt;
&lt;li&gt;经业务确认的指标说明、币种与时间口径。&lt;/li&gt;
&lt;li&gt;Git 中的 YAML 或 DDL 及可审查的变更历史。&lt;/li&gt;
&lt;li&gt;创建前的定义验证与部署后的对象检查。&lt;/li&gt;
&lt;li&gt;关键指标的参考 SQL、期望结果和对账证据。&lt;/li&gt;
&lt;li&gt;低权限角色的授权测试，以及必要的负面测试。&lt;/li&gt;
&lt;li&gt;为 Cortex Analyst/Agent 准备并持续维护的 verified queries 和评估问题。&lt;/li&gt;
&lt;li&gt;明确的 owner、发布流程、回滚步骤和生产监控。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只要先把这些约束做实，Semantic View 就不只是给 AI 看的一份 schema 描述，而是可以被 SQL、BI 和受治理的 AI 消费共同使用的业务语义接口。&lt;/p&gt;</content:encoded></item><item><title>Dev weekly 2026-Oct-26</title><link>https://devweekly.github.io/posts/dev-weekly-2026-oct-26/</link><guid isPermaLink="true">https://devweekly.github.io/posts/dev-weekly-2026-oct-26/</guid><description>Dev weekly</description><pubDate>Mon, 26 Oct 2026 02:02:03 GMT</pubDate><content:encoded>&lt;h3&gt;AI and Programming&lt;/h3&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twimlai.com/podcast/twimlai/airbnb-building-company-brain-ai-agents&quot;&gt;Airbnb Is Building a ‘Company Brain’ for AI Agents with Ahmad Al-Dahle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/deepseek-ai/DeepInfer&quot;&gt;DeepInfer&lt;/a&gt; is the high-performance inference framework that powers DeepSeek’s large-scale production services. This open-source release provides offline inference with the core features needed for serving at scale.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aaif.io/&quot;&gt;Agentic AI Foundation&lt;/a&gt; Agent Skills，MCP，Goose，OpenSandbox，OpenEnv，OpenResponse，Agent2Agent&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/emilk/egui&quot;&gt;egui&lt;/a&gt; an easy-to-use immediate mode GUI in Rust that runs on both web and native&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www2.statmt.org/wmt24/literary-translation-task.html&quot;&gt;Discourse-Level Literary Translation&lt;/a&gt; &lt;a href=&quot;https://github.com/tencent-ailab/GuoFeng-Webnovel&quot;&gt;https://github.com/tencent-ailab/GuoFeng-Webnovel&lt;/a&gt; 有 training data 和 testing data&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Tencent-Hunyuan/Hy-Memory/blob/main/README.zh.md&quot;&gt;Hy Memory&lt;/a&gt; 面向自演化 LLM Agent 的工业级双系统认知记忆引擎与 Python SDK&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lfai.landscape2.io/&quot;&gt;LF AI &amp;amp; Data Landscape&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ly05010419/MacNativeGames&quot;&gt;MacNativeGames&lt;/a&gt; 支持旷野之息 王国之泪&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://openai.com/index/low-resource-programming-languages/&quot;&gt;Advancing coding in low‑resource programming languages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.codingnow.com/2026/10/qwerty.html&quot;&gt;QWERTY 键盘布局的发展历史&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/research/employment-at-anthropic&quot;&gt;How employment is changing at Anthropic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aiengg.dev/blog/how-openai-scaled-postgres-to-manage-800-million-users&quot;&gt;How OpenAI scaled Postgres to manage 800 million users&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/wmt-conference/wmt26-general-mt/tree/main&quot;&gt;WMT26 General Translation Shared Task&lt;/a&gt; &lt;a href=&quot;https://github.com/wmt-conference/wmt26-terminology/&quot;&gt;https://github.com/wmt-conference/wmt26-terminology/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.cloudflare.com/obsessive-inference-optimization/&quot;&gt;Cutting our inference bill by 68% by being obsessive about optimization&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/blogs/machine-learning/build-a-semantic-layer-for-agentic-ai-on-aws-with-atscale-and-amazon-bedrock-agentcore/&quot;&gt;Build a semantic layer for agentic AI on AWS with AtScale and Amazon Bedrock AgentCore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.llamaindex.ai/blog/introducing-extractbench-pro&quot;&gt;ExtractBench Pro: The Long Tail of Document Extraction&lt;/a&gt; &lt;a href=&quot;https://github.com/run-llama/ExtractBench&quot;&gt;https://github.com/run-llama/ExtractBench&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nsh.dev/&quot;&gt;NSH: one module, native everywhere&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.databricks.com/resources/ebook/big-book-of-data-engineering&quot;&gt;Big Book of Data Engineering&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/keenthemes/reui&quot;&gt;ReUI&lt;/a&gt; Design-forward shadcn/ui platform with MCP fluency for agents.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Tahsine/kaggle-llm-server&quot;&gt;Free LLM Server — Qwen3.6 on Kaggle GPU&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.infoq.com/minibooks/evolutionary-architecture/&quot;&gt;Evolutionary Architecture in Practice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.appinn.com/strata-macos-35b-model/&quot;&gt;Strata 现已支持 macOS，还能运行更轻量的 Qwen3.6-35B-A3B&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/JetBrains/thinkrail&quot;&gt;thinkrail from JetBrains&lt;/a&gt; Vibe code with pi in a lightweight, real IDE that customises itself around the way you work — The Vibe You Need&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Aryanutkarsh/SeeCode&quot;&gt;SeeCode&lt;/a&gt; Animated, explorable diagrams for Claude and other coding agents, from a short JSON spec.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pele.run/&quot;&gt;Pele&lt;/a&gt; is a lightweight open source library that renders Mermaid diagrams to SVG, themed with CSS variables.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/blackboardsh/electrobun&quot;&gt;electrobun&lt;/a&gt; Build fast, compact, cross-platform desktop apps with TypeScript, Zig, Rust, Go, or Odin.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Others&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://anyway.fm/fonts/&quot;&gt;Anyway.Fonts&lt;/a&gt; 读取本机字体，显示&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s/IjIfBTMXkDUbVBWgpN558Q&quot;&gt;他不想写侦探小说，却写出了最受欢迎的“怪盗罗平”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://zdic.net/&quot;&gt;汉典&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.dutongjian.com/&quot;&gt;读通鉴&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://visual-learning.app/claw-machine&quot;&gt;The claw machine&lt;/a&gt; vibe 出来的抓娃娃机&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ballpoint-gambit.vercel.app/&quot;&gt;vibe 出来的国际象棋游戏&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://artisms.geekplux.com/&quot;&gt;艺术流派志&lt;/a&gt; 艺术风格如何开始、长什么样子，又如何一脉相承、彼此反叛；每个流派配有三件真实作品。 &lt;a href=&quot;https://github.com/geekplux/artisms/tree/main&quot;&gt;https://github.com/geekplux/artisms/tree/main&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://zip0.com/category/movie&quot;&gt;在线电影&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://april-zhu.com/colorfigures&quot;&gt;Colorfigures&lt;/a&gt; Describe an everyday object. AI draws it hand-inked and isometric, with buttons that actually work. Turn it all the way round and see inside.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://p.migdal.pl/invisible-cities-opus-5.5/&quot;&gt;Invisible Cities&lt;/a&gt; by opus5.5&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sael.net/flatpack/&quot;&gt;step by step Billy&lt;/a&gt; 宜家 billy 组装，vibe 出来的&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://learn-arduino-red.vercel.app/&quot;&gt;Learn Arduino&lt;/a&gt; vibe 出来的&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://permit.petercai.com/play/?scenario=blank_slate&quot;&gt;SimCity&lt;/a&gt; vibe 出来的&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s/82cy_tqVmCiTBVRsxM9MLg&quot;&gt;字节最没存在感APP，年轻人抢着充钱&lt;/a&gt; 猫箱，处于 AI 的灰色地带。&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>给老程序员的 Transformer 实战入门：从矩阵乘法到金融时序模型</title><link>https://devweekly.github.io/posts/%E7%BB%99%E8%80%81%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84-transformer-%E5%AE%9E%E6%88%98%E5%85%A5%E9%97%A8%E4%BB%8E%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%E5%88%B0%E9%87%91%E8%9E%8D%E6%97%B6%E5%BA%8F%E6%A8%A1%E5%9E%8B/</link><guid isPermaLink="true">https://devweekly.github.io/posts/%E7%BB%99%E8%80%81%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84-transformer-%E5%AE%9E%E6%88%98%E5%85%A5%E9%97%A8%E4%BB%8E%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%E5%88%B0%E9%87%91%E8%9E%8D%E6%97%B6%E5%BA%8F%E6%A8%A1%E5%9E%8B/</guid><description>面向有扎实编程基础、但没有深度学习经验的开发者，从张量和矩阵乘法讲起，手写注意力，再用 PyTorch 训练 Transformer，最后把它用于金融时序、欺诈检测、收益率曲线和基金业务数据。</description><pubDate>Sun, 25 Oct 2026 01:00:00 GMT</pubDate><content:encoded>&lt;p&gt;如果你熟悉 C++、Java、Python 或数据库系统，理解 Transformer 不需要先把自己变成数学家。你需要补上的主要不是编程能力，而是几套新的思维模型：用张量表达批量数据，用可微分函数表达模型，用损失函数表达“错得有多严重”，再通过自动求导和优化器不断调整模型内部的数字。&lt;/p&gt;
&lt;p&gt;本文就是为这样的读者写的：有多年软件开发经验，但没有系统学习过深度学习。目标不是让你背诵一堆神经网络名词，而是让你看懂 Transformer 的数据流，亲手实现注意力机制，跑通训练与评估，并知道怎么把同一套方法迁移到市场价格、交易欺诈、利率曲线、持仓、交易订单簿和基金会计等金融场景。&lt;/p&gt;
&lt;p&gt;文中的样例分为两类。第一类是小型合成时间序列，用于稳定、快速地观察模型训练流程；它不是实际市场数据，也不能证明存在可交易的预测能力。第二类是研究目录里已有的公开数据实验，适合进一步做真实数据验证。两类实验不能混为一谈。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;建议按顺序动手，而不是一次性读完整篇文章：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先理解张量形状与训练循环。&lt;/li&gt;
&lt;li&gt;运行手写注意力实现，观察 Q、K、V 和 Attention Weights。&lt;/li&gt;
&lt;li&gt;训练一个很小的 Transformer，确认损失下降、模型能保存和加载。&lt;/li&gt;
&lt;li&gt;再运行 ETF 或国债收益率曲线实验，并与简单基线比较。&lt;/li&gt;
&lt;li&gt;最后再阅读多头注意力、掩码、长序列、预训练以及金融生产架构。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;一、先建立正确的心理模型：Transformer 到底是什么？&lt;/h2&gt;
&lt;h3&gt;1.1 它不是一种特殊的程序语言，也不等于 ChatGPT&lt;/h3&gt;
&lt;p&gt;Transformer 是一种神经网络架构。2017 年论文 &lt;a href=&quot;https://arxiv.org/abs/1706.03762&quot;&gt;Attention Is All You Need&lt;/a&gt; 提出了以注意力机制为核心、摆脱循环结构的序列建模架构。它最初用于机器翻译，后来被广泛应用于文本、图像、时间序列、推荐系统和结构化事件数据。&lt;/p&gt;
&lt;p&gt;LLM（大语言模型）通常是以 Transformer 为主体、用海量文本进行预训练的一类模型，但 Transformer 的输入并不一定是文字。输入也可以是价格、收益率、订单簿、持仓数量、风险指标、交易类型等结构化数据。&lt;/p&gt;
&lt;p&gt;因此，应当区分三个概念：&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;概念&lt;/th&gt;&lt;th&gt;可以怎么理解&lt;/th&gt;&lt;th&gt;典型例子&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Transformer&lt;/td&gt;&lt;td&gt;一种神经网络架构，提供序列中各位置交换信息的方式&lt;/td&gt;&lt;td&gt;使用最近 60 个交易日预测未来 5 日收益&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;训练目标&lt;/td&gt;&lt;td&gt;告诉模型应该学会什么&lt;/td&gt;&lt;td&gt;预测下一事件、补全被遮住的字段、预测未来收益或欺诈标签&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LLM&lt;/td&gt;&lt;td&gt;通常使用 Transformer、在大规模文本上预训练的模型类别&lt;/td&gt;&lt;td&gt;对话、代码生成、文本摘要&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;在金融应用中，完全可以训练一个几万或几十万个参数的小型 Transformer，让它处理数字序列。它既不需要生成文本，也不需要调用外部大模型。&lt;/p&gt;
&lt;h3&gt;1.2 模型是一个可训练的函数&lt;/h3&gt;
&lt;p&gt;在普通业务系统里，我们会写一组固定规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输入数据；&lt;/li&gt;
&lt;li&gt;执行确定的逻辑；&lt;/li&gt;
&lt;li&gt;返回输出。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;神经网络也可以看作一个函数，不过其内部包含很多可调整的数值，称为参数。设输入为 x，模型参数为 theta，则模型输出可以写成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;y_hat = model(x; theta)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如，给模型最近 30 个交易日、每一天 5 个特征的数据，它可能输出未来 5 个交易日的累计收益预测。函数结构由我们编写，参数则由训练过程根据数据调整。&lt;/p&gt;
&lt;p&gt;深度学习不是让计算机自己发明程序结构。我们仍然决定输入字段、模型架构、输出含义、损失函数、数据切分、优化器和运行环境。训练只是根据样本寻找一组更合适的参数。&lt;/p&gt;
&lt;h3&gt;1.3 训练、验证、推理是三种不同工作&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;训练（training）&lt;/strong&gt; 是把已知输入与目标送入模型，根据预测错误调整参数。&lt;strong&gt;验证（validation）&lt;/strong&gt; 是用未参与本轮参数更新的数据比较不同训练轮次或超参数，决定选哪一个模型。&lt;strong&gt;推理（inference）&lt;/strong&gt; 是固定参数，只计算新输入的输出。&lt;/p&gt;
&lt;p&gt;这三件事对应三种不同的数据使用规则。测试集不应参与参数更新，也不应被反复用于挑选模型；否则测试集就不再是独立的最终评估。&lt;/p&gt;
&lt;p&gt;对于有时间顺序的金融数据，训练、验证和测试通常需要按时间先后划分，而不是把所有样本随机打乱后再拆分。否则模型可能在训练阶段看到发生在测试时点之后的数据，造成时间泄漏。可参考 &lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html&quot;&gt;scikit-learn 的 TimeSeriesSplit 文档&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;二、老程序员最先要理解的新概念：Tensor&lt;/h2&gt;
&lt;h3&gt;2.1 Tensor 并不神秘&lt;/h3&gt;
&lt;p&gt;可以把 Tensor 理解为带有形状、数据类型和设备位置的多维数组。它与 NumPy 数组相似，但 PyTorch Tensor 还能参与自动求导，并可在 CPU、GPU 或 Apple Silicon 的 MPS 设备上运算。&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;名称&lt;/th&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;例子&lt;/th&gt;&lt;th&gt;在金融数据里的含义&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Scalar&lt;/td&gt;&lt;td&gt;0 维&lt;/td&gt;&lt;td&gt;0.031&lt;/td&gt;&lt;td&gt;一笔预测误差&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vector&lt;/td&gt;&lt;td&gt;1 维&lt;/td&gt;&lt;td&gt;5 个数字&lt;/td&gt;&lt;td&gt;一个交易日的 5 个特征&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Matrix&lt;/td&gt;&lt;td&gt;2 维&lt;/td&gt;&lt;td&gt;30 × 5&lt;/td&gt;&lt;td&gt;连续 30 个交易日，每天 5 个特征&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tensor&lt;/td&gt;&lt;td&gt;3 维&lt;/td&gt;&lt;td&gt;128 × 30 × 5&lt;/td&gt;&lt;td&gt;一批 128 个样本，每个样本 30 天、每天 5 个特征&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Transformer 入门阶段最重要的形状是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;X 的形状 = [batch, time_steps, features]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;B：batch size，一次并行处理多少个训练样本；&lt;/li&gt;
&lt;li&gt;T：sequence length，每个样本包含多少个时间位置；&lt;/li&gt;
&lt;li&gt;F：每个时间位置包含多少个原始特征。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如形状是 128 × 30 × 5，表示一次处理 128 个样本，每个样本有 30 个时间位置，每个时间位置含 5 个数值特征。&lt;/p&gt;
&lt;p&gt;这和传统程序的循环可以对应起来：如果逐个样本、逐个时间点循环，会反复执行相似运算；Tensor 运算则把这些操作批量化，由底层数值库决定如何利用 CPU 向量指令、并行线程或 GPU。&lt;/p&gt;
&lt;h3&gt;2.2 先认识 Linear：它就是矩阵乘法加偏置&lt;/h3&gt;
&lt;p&gt;最常见的神经网络层之一是线性层：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Y = X @ W + b&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;假设输入有 5 个特征，输出宽度设为 32，那么权重矩阵 W 可以是 5 × 32，偏置 b 的长度为 32。每个样本的 5 个数字就被映射成 32 个数字。&lt;/p&gt;
&lt;p&gt;这不比普通的矩阵运算神秘。不同之处在于，矩阵里的权重不是我们手工配置，而是训练时会不断调整的参数。&lt;/p&gt;
&lt;p&gt;一个模型由多个这样的映射、非线性函数、注意力层和归一化层组成。参数数量决定了模型可以表达多复杂的关系，但参数多不保证准确率更高。&lt;/p&gt;
&lt;h3&gt;2.3 为什么还需要非线性？&lt;/h3&gt;
&lt;p&gt;如果只把多个线性层连续相乘：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;XW_1W_2W_3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;从整体看仍然只是一个线性变换，可以合并为 XW。它不能表达任意复杂的非线性关系。&lt;/p&gt;
&lt;p&gt;因此，神经网络会在一些层之间加入非线性激活函数，例如 ReLU 或 GELU。这些函数使网络不仅能重新组合特征，还能学习非线性的决策边界。&lt;/p&gt;
&lt;p&gt;Transformer 中有一个前馈网络（Feed-Forward Network, FFN），本质上就是每个时间位置各自执行的一组线性变换和非线性激活。注意力负责位置之间的信息交互，FFN 负责对每个位置的表示进一步计算。&lt;/p&gt;
&lt;h2&gt;三、从机器学习训练循环看 PyTorch&lt;/h2&gt;
&lt;p&gt;先不讨论 Transformer。任何常见的监督学习训练流程，几乎都可以拆成下面几步。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[准备输入 X 与目标 y] --&amp;gt; B[模型前向计算]
    B --&amp;gt; C[计算预测与真实目标之间的 Loss]
    C --&amp;gt; D[自动求导计算梯度]
    D --&amp;gt; E[优化器更新模型参数]
    E --&amp;gt; F{还有训练 Batch？}
    F --&amp;gt;|是| B
    F --&amp;gt;|否| G[在验证集评估]
    G --&amp;gt; H[选择最佳模型并在测试集评估]&lt;/pre&gt;
&lt;h3&gt;3.1 Loss 是训练的目标，不是业务最终指标&lt;/h3&gt;
&lt;p&gt;例如，模型预测未来收益为 0.012，真实值为 0.008，预测误差是 0.004。对于连续数值预测，可以用均方误差（MSE）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;MSE = mean((y_pred - y_true) ** 2)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者使用 Huber Loss，它在小误差附近类似平方损失，在大误差时对极端值相对稳健。对于二分类问题，可以使用 Binary Cross-Entropy；对于多分类问题，常见的是 Cross-Entropy。&lt;/p&gt;
&lt;p&gt;但 Loss 并不等于所有业务目标。例如，风险模型训练时可以最小化分类损失；业务部门可能真正关心的是每天只能调查最高风险 1% 的情况下能找到多少欺诈。训练目标与业务评估指标应当明确区分。&lt;/p&gt;
&lt;h3&gt;3.2 梯度下降和自动求导&lt;/h3&gt;
&lt;p&gt;假设模型参数是 theta，损失是 L(theta)。直觉上，梯度告诉我们每个参数增加或减少一点，会怎样影响损失。优化器按梯度给出的方向更新参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;theta = theta - learning_rate * gradient(loss, theta)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的 eta 是学习率，控制每一步更新的尺度。&lt;/p&gt;
&lt;p&gt;多层神经网络有很多参数，手工推导全部偏导数既繁琐又容易出错。PyTorch 使用自动求导（autograd）记录前向计算过程，再按链式法则计算梯度。官方文档将其描述为一种反向自动微分系统：&lt;a href=&quot;https://docs.pytorch.org/docs/stable/notes/autograd.html&quot;&gt;PyTorch Autograd mechanics&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;在代码里，核心流程通常只有几行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;optimizer.zero_grad(&lt;/span&gt;&lt;span&gt;set_to_none&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# 清除上一个 Batch 的梯度&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;prediction &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; model(x)                  &lt;/span&gt;&lt;span&gt;# Forward pass&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;loss &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; loss_fn(prediction, y)          &lt;/span&gt;&lt;span&gt;# 计算 Loss&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;loss.backward()                        &lt;/span&gt;&lt;span&gt;# 计算每个可训练参数的梯度&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;optimizer.step()                       &lt;/span&gt;&lt;span&gt;# 根据梯度更新参数&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这几行的执行顺序很重要。忘记清理梯度会让不同 Batch 的梯度意外累加；漏掉 backward，参数就没有新的梯度；漏掉 optimizer.step，模型也不会更新。&lt;/p&gt;
&lt;h3&gt;3.3 Epoch、Batch 和 Learning Rate&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Batch&lt;/strong&gt;：一次前向计算和反向计算处理的一批样本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Epoch&lt;/strong&gt;：训练集完整参与一次训练所需的全部 Batch。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning rate&lt;/strong&gt;：一次参数更新的步幅。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizer&lt;/strong&gt;：根据梯度更新参数的算法，例如 AdamW。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation loss&lt;/strong&gt;：参数更新后，在独立验证数据上的损失。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;训练 100 个 Epoch 不一定比训练 10 个更好。如果模型在训练集上继续变好，但验证集指标开始变差，很可能出现了过拟合。通常保存验证指标最好的模型，而不是无条件使用最后一个 Epoch 的参数。&lt;/p&gt;
&lt;h2&gt;四、Transformer 的核心：Self-Attention&lt;/h2&gt;
&lt;p&gt;这部分是整篇教程的关键。你不需要一开始就记住所有层的名字，只要先真正弄懂注意力如何用矩阵运算建立时间位置之间的联系。&lt;/p&gt;
&lt;h3&gt;4.1 普通序列模型为什么需要注意力？&lt;/h3&gt;
&lt;p&gt;假设某个企业账户最近有 30 笔支付。我们要判断当前交易是否可疑。&lt;/p&gt;
&lt;p&gt;只使用当前交易行，模型看不到完整历史；使用固定窗口统计可以知道过去一小时交易 8 笔，但不一定能区分这 8 笔的顺序和组合；传统 RNN 或 GRU 逐步读取历史，通过隐藏状态汇总过去，但序列越长，训练并行化和长期依赖处理就可能越困难。&lt;/p&gt;
&lt;p&gt;Self-Attention 的思路是：在计算一个时间位置的表示时，让它能够根据内容直接读取其他位置的信息，并学习每个位置应获得多大权重。&lt;/p&gt;
&lt;p&gt;例如当前交易是第一次在某国出现的大额消费，模型可能需要同时考虑过去的地理习惯、近期金额、刚刚发生的设备变更和相似交易。注意力提供的是一种可学习的信息组合机制，它本身并不懂什么叫“欺诈”或“异常”；这些关系仍然需要由训练数据和损失函数教给模型。&lt;/p&gt;
&lt;h3&gt;4.2 Query、Key、Value 是什么？&lt;/h3&gt;
&lt;p&gt;对每个输入位置的向量 x_i，通过三个可学习的线性映射得到：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Q = X @ W_Q; K = X @ W_K; V = X @ W_V&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以把它们当作三种不同用途的向量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Query（Q）&lt;/strong&gt;：当前位置要寻找什么样的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key（K）&lt;/strong&gt;：每个历史位置提供什么样的匹配线索。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value（V）&lt;/strong&gt;：每个位置真正携带、供其他位置读取的信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这只是理解机制的类比。模型并不会把它们解释成自然语言问题，也不需要我们手工规定每个维度是什么意义。Q、K、V 的权重都是可训练的。&lt;/p&gt;
&lt;p&gt;当前位置的 Query 与所有 Key 计算相似度，得到注意力分数。Transformer 通常使用点积相似度，并除以 sqrt(d_k) 做缩放：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;scores = Q @ K.T / sqrt(head_dim)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;除以 sqrt(d_k) 是为了让点积的数值尺度不随维度增长得过大，从而让 Softmax 和梯度更容易工作。&lt;/p&gt;
&lt;p&gt;随后沿着 Key 的维度执行 Softmax，把分数转为一组总和为 1 的权重：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;weights = softmax(scores, dim=-1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最终输出是各个 Value 的加权组合：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;output = weights @ V&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用程序思维看，这就是矩阵乘法、缩放和 Softmax。需要训练的是 Q、K、V 三个投影矩阵，以及模型其他层里的参数。&lt;/p&gt;
&lt;h3&gt;4.3 一个形状示例&lt;/h3&gt;
&lt;p&gt;假设输入是 30 天、每一天映射成 32 维向量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输入的投影结果形状为 B×30×32；&lt;/li&gt;
&lt;li&gt;如果只有一个注意力头，Q、K、V 可以分别按形状 B×30×32 表示；&lt;/li&gt;
&lt;li&gt;Q @ K.T 的分数矩阵形状为 B×30×30；&lt;/li&gt;
&lt;li&gt;其中一行表示某个时间位置对 30 个位置的关注程度；&lt;/li&gt;
&lt;li&gt;AV 的形状又回到 B×30×32。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意力分数矩阵不是一个普通的“相关系数矩阵”。它是可学习投影后的点积，再经过 Softmax 得到的权重。不能直接把它当成因果关系、统计相关性或模型解释。&lt;/p&gt;
&lt;h3&gt;4.4 动手：用 PyTorch 手写 Attention&lt;/h3&gt;
&lt;p&gt;下面是注意力核心计算的最小实现。完整、可运行的版本放在 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/attention_from_scratch.py&quot;&gt;attention_from_scratch.py&lt;/a&gt;，文件中还实现了多头注意力和因果掩码，并包含形状及权重校验。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; math&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; torch&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; scaled_dot_product_attention&lt;/span&gt;&lt;span&gt;(q, k, v, allowed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # q: [batch, heads, query_len, head_dim]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # k: [batch, heads, key_len, head_dim]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # v: [batch, heads, key_len, head_dim]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    scores &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; q &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt; k.transpose(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; math.sqrt(q.shape[&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; allowed &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; not&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # allowed=True 表示可见；False 表示屏蔽该位置&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        scores &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; scores.masked_fill(&lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt;allowed, torch.finfo(scores.dtype).min)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    weights &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; torch.softmax(scores, &lt;/span&gt;&lt;span&gt;dim&lt;/span&gt;&lt;span&gt;=-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    output &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; weights &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; output, weights&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在你可以在本地执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; -r&lt;/span&gt;&lt;span&gt; requirements.txt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; attention_from_scratch.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重点观察以下内容，而不是只看程序有没有报错：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入的每个 Token 有多少维，经过几个投影之后形状是否符合预期。&lt;/li&gt;
&lt;li&gt;Attention Weights 的最后一维沿 Key 位置展开，各行的权重和应当接近 1。&lt;/li&gt;
&lt;li&gt;关闭因果掩码时，每个位置能关注窗口内所有位置。&lt;/li&gt;
&lt;li&gt;打开因果掩码时，位置 i 不能关注 i+1 及之后的未来位置。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;4.5 什么时候需要 Causal Mask？&lt;/h3&gt;
&lt;p&gt;这取决于任务，不能把掩码作为 Transformer 的固定装饰。&lt;/p&gt;
&lt;p&gt;如果任务是预测下一个 Token，输入序列在每个位置只能利用当前及之前的 Token，否则训练时就会通过未来 Token 直接看到答案。这时需要因果掩码（causal mask）。&lt;/p&gt;
&lt;p&gt;如果任务是用过去 30 个完整交易日来预测第 31 天之后的结果，那么整个窗口在预测时都已发生。窗口内没有相对于当前预测时点的未来事件，因此 Encoder 可以让这 30 个历史位置彼此关注，不一定需要因果掩码。&lt;/p&gt;
&lt;p&gt;这两种任务经常被混淆。决定是否使用掩码的标准，不是“时间序列就必须 mask”，而是&lt;strong&gt;每一个输出在业务决策时点究竟允许看到哪些输入&lt;/strong&gt;。&lt;/p&gt;
&lt;h2&gt;五、多头注意力、位置编码与 Transformer Block&lt;/h2&gt;
&lt;p&gt;理解一个注意力头之后，再看剩下的结构会容易得多。&lt;/p&gt;
&lt;h3&gt;5.1 Multi-Head Attention：不是简单重复算几遍&lt;/h3&gt;
&lt;p&gt;多头注意力将表示投影到多个较小的子空间，每个头独立计算自己的 Q、K、V 和注意力权重，随后拼接并投影回模型维度：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;MultiHead(Q, K, V)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;= Concat(head_1, ..., head_h) @ W_O&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如模型宽度 d_model = 32，使用 4 个头，则每个头的维度 d_k = 8。每个头都有独立的投影参数，可以学习不同的信息交互模式。&lt;/p&gt;
&lt;p&gt;但不要过度解释某一个头。一个头可能对近期事件、另一头可能对金额或类别模式形成响应，但不能因为注意力权重高，就直接断言它是某种业务因果关系。注意力权重只是模型内部计算的一部分。&lt;/p&gt;
&lt;h3&gt;5.2 Transformer 并不会自动知道时间顺序&lt;/h3&gt;
&lt;p&gt;注意力本身处理的是内容之间的匹配。如果把一组输入位置交换，注意力机制并不会像 RNN 一样因为读取顺序不同就自动得到不同表示；如果只给它一组完全不带位置信息的向量，就无法仅凭注意力区分“第 2 天”和“第 20 天”。&lt;/p&gt;
&lt;p&gt;因此，Transformer 需要位置或时间信息。常见做法包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正弦/余弦位置编码；&lt;/li&gt;
&lt;li&gt;可学习的位置向量；&lt;/li&gt;
&lt;li&gt;相对位置偏置；&lt;/li&gt;
&lt;li&gt;时间间隔（例如距上一笔交易过去多少分钟）编码；&lt;/li&gt;
&lt;li&gt;日历周期特征，例如星期、月份、交易时段；&lt;/li&gt;
&lt;li&gt;针对不规则事件序列设计的连续时间编码。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;入门案例使用可学习的位置向量；金融事件序列中还常需要将事件间隔作为独立特征。一天前的交易和三个月前的交易，即使位置索引相同，也不应该自动被视为同样遥远或同样相关。&lt;/p&gt;
&lt;h3&gt;5.3 一个完整的 Transformer Encoder Layer&lt;/h3&gt;
&lt;p&gt;常见的 Encoder Layer 可以概括成：&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[输入表示 X] --&amp;gt; B[Multi-Head Self-Attention]
    B --&amp;gt; C[Residual + LayerNorm]
    C --&amp;gt; D[逐位置 Feed-Forward Network]
    D --&amp;gt; E[Residual + LayerNorm]
    E --&amp;gt; F[输出表示]&lt;/pre&gt;
&lt;p&gt;这里有几个重要构件：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Residual Connection（残差连接）&lt;/strong&gt; 把原始输入加回子层输出，使网络在较深时更容易优化，并保留原有信息通路。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LayerNorm（层归一化）&lt;/strong&gt; 对单个样本内部的特征进行归一化，帮助训练数值更稳定。它与对原始金融字段做 StandardScaler 不是同一回事：前者是模型内部的运算，后者是训练数据的预处理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feed-Forward Network&lt;/strong&gt; 对每个位置独立执行线性映射、非线性激活和投影。它负责加工表示，Self-Attention 则负责不同位置之间的信息交流。&lt;/p&gt;
&lt;p&gt;多层 Encoder 将这些计算重复堆叠。入门不需要从零复刻所有生产优化；先理解数据形状、前向传播、损失和梯度，再逐步阅读框架实现，效率更高。&lt;/p&gt;
&lt;h2&gt;六、Encoder、Decoder 与不同的训练目标&lt;/h2&gt;
&lt;p&gt;不是所有 Transformer 都有相同的结构。理解任务与结构之间的对应关系，比记住架构名称更重要。&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;架构&lt;/th&gt;&lt;th&gt;典型工作方式&lt;/th&gt;&lt;th&gt;适合的任务&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Encoder-only&lt;/td&gt;&lt;td&gt;读取完整输入上下文，产生每个位置的表示&lt;/td&gt;&lt;td&gt;事件序列分类、欺诈评分、市场状态识别、数值预测&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Decoder-only&lt;/td&gt;&lt;td&gt;使用因果掩码，逐步预测下一个 Token&lt;/td&gt;&lt;td&gt;文本生成、下一事件预测、交易序列生成&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Encoder-Decoder&lt;/td&gt;&lt;td&gt;Encoder 编码输入，Decoder 生成目标序列&lt;/td&gt;&lt;td&gt;机器翻译、条件序列生成、某些多步预测任务&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;训练目标也有所不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;监督学习&lt;/strong&gt;：给出输入和标注目标，例如欺诈标签、未来收益、是否发生结算异常。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下一事件预测&lt;/strong&gt;：根据过去事件预测下一笔交易的类别、金额区间或事件类型。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;掩码重建&lt;/strong&gt;：把已知序列的一部分隐藏，让模型还原隐藏字段。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对比学习&lt;/strong&gt;：让模型学习哪些序列表示应该接近、哪些应当分开。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多任务学习&lt;/strong&gt;：同时学习多个相关目标，例如下一商户、金额区间和事件类型。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;自监督学习不是无中生有地发现事实，而是从未标注数据里构造训练目标。对于金融应用，“行为不常见”并不等于“欺诈”，“历史上很像正常用户”也不等于“一定安全”。自监督输出通常需要通过有标签的下游任务、业务规则和独立验证来形成业务决策。&lt;/p&gt;
&lt;h2&gt;七、从理论到可执行程序：跑通一个小型 Transformer&lt;/h2&gt;
&lt;p&gt;现在开始第一个完整练习。为了避免将真实市场的复杂性与初学者的程序错误混在一起，我们先用合成数据构造一个具有弱时间依赖的序列，预测未来 5 个时间点的累计收益。这个实验用来理解模型训练，不代表真实市场存在可稳定利用的预测信号。&lt;/p&gt;
&lt;h3&gt;7.1 安装环境&lt;/h3&gt;
&lt;p&gt;项目的实验代码位于研究目录下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/attention_from_scratch.py&quot;&gt;手写 Attention 实现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/toy_transformer.py&quot;&gt;可独立运行的小型 Transformer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/requirements.txt&quot;&gt;依赖列表&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 macOS、Linux 或 Windows 的 Python 环境中执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; venv&lt;/span&gt;&lt;span&gt; .venv&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; .venv/bin/activate&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; pip&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; --upgrade&lt;/span&gt;&lt;span&gt; pip&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; -r&lt;/span&gt;&lt;span&gt; requirements.txt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; attention_from_scratch.py&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; toy_transformer.py&lt;/span&gt;&lt;span&gt; --epochs&lt;/span&gt;&lt;span&gt; 8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows PowerShell 的虚拟环境激活命令为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;.venv\Scripts\Activate.ps1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;样例默认自动选择 CUDA、Apple Silicon MPS 或 CPU。它是一个小模型，一开始使用 CPU 完全可以。不要为了运行一个教学级 Transformer，先把大把时间花在配置 GPU 环境上。&lt;/p&gt;
&lt;h3&gt;7.2 这个数据集到底是什么？&lt;/h3&gt;
&lt;p&gt;程序生成一条可重复的合成时间序列，包含 5 个特征：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;特征&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;th&gt;是否在时点 t 可用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;return_1d&lt;/td&gt;&lt;td&gt;当前时间点已观察到的收益&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;momentum_5d&lt;/td&gt;&lt;td&gt;截至 t 的过去 5 个时间点累计收益&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;volatility_20d&lt;/td&gt;&lt;td&gt;截至 t 的历史波动率&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;market_factor&lt;/td&gt;&lt;td&gt;合成市场因子&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;volume_shock&lt;/td&gt;&lt;td&gt;当前量能相对于过去窗口的偏离&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;输入窗口的形状为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;X 的形状是 B×30×5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目标则是时点 t 之后第 1 到第 5 个时间点的收益累计值。也就是说，我们用截至 t 的 30 个位置来预测未来，而不是将未来数据作为当前输入。&lt;/p&gt;
&lt;p&gt;程序会按时间切分训练、验证和测试数据；标准化器只使用训练时间范围内的数据拟合。标签跨越训练/验证/测试边界时，会在边界附近留出隔离间隔，以减少未来标签与之前训练数据重叠的问题。&lt;/p&gt;
&lt;h3&gt;7.3 先看模型定义：把输入映射成表示&lt;/h3&gt;
&lt;p&gt;核心模型在 toy_transformer.py 中。下面是最关键的部分：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; TinyTransformer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nn&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Module&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    def&lt;/span&gt;&lt;span&gt; __init__&lt;/span&gt;&lt;span&gt;(self, n_features, window, d_model&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;32&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                 n_heads&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, n_layers&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, dropout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0.1&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        self&lt;/span&gt;&lt;span&gt;.input_projection &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nn.Linear(n_features, d_model)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        self&lt;/span&gt;&lt;span&gt;.position &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nn.Parameter(torch.randn(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, window, d_model) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 0.02&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        layer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nn.TransformerEncoderLayer(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            d_model&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;d_model,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            nhead&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;n_heads,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            dim_feedforward&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;d_model &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            dropout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dropout,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            activation&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;gelu&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            batch_first&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            norm_first&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        self&lt;/span&gt;&lt;span&gt;.encoder &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nn.TransformerEncoder(layer, &lt;/span&gt;&lt;span&gt;num_layers&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;n_layers)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        self&lt;/span&gt;&lt;span&gt;.head &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nn.Sequential(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            nn.LayerNorm(d_model),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            nn.Linear(d_model, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    def&lt;/span&gt;&lt;span&gt; forward&lt;/span&gt;&lt;span&gt;(self, x):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # x: [batch, window, input_features]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        z &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; self&lt;/span&gt;&lt;span&gt;.input_projection(x) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; self&lt;/span&gt;&lt;span&gt;.position[:, :x.shape[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;], :]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        z &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; self&lt;/span&gt;&lt;span&gt;.encoder(z)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # 最后一个历史位置的表示 -&amp;gt; 一个未来收益预测值&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; self&lt;/span&gt;&lt;span&gt;.head(z[:, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, :]).squeeze(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这段程序与传统的业务代码有些相似：输入先经过一组映射，然后进入多层处理，再将最终结果送入输出头。不过，映射的参数不是我们手工配置，而是在训练中逐步学习。&lt;/p&gt;
&lt;p&gt;逐行拆开看：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;input_projection&lt;/strong&gt; 把每个时间点的 5 个输入特征映射成 32 维表示。注意，它对每个时间点做相同的映射。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;position&lt;/strong&gt; 给不同时间位置加入可学习的位置信息。不加入位置信息，模型很难稳定地理解历史顺序。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TransformerEncoder&lt;/strong&gt; 堆叠两层 Encoder。每层包含多头注意力、前馈网络、残差连接和归一化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;z[:, -1, :]&lt;/strong&gt; 取最后一个时间位置的向量，因为这个位置对应输入窗口的结束时点。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;head&lt;/strong&gt; 将 32 维表示映射到一个标量，也就是未来 5 个时间点的累计收益预测。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此处选 Encoder-only 架构，是因为预测目标是一个数值，并不需要逐步生成一个 Token 序列。&lt;/p&gt;
&lt;h3&gt;7.4 为什么训练代码有这么多步骤？&lt;/h3&gt;
&lt;p&gt;Transformer 模型定义出来，并不意味着它已经学会任何东西。它刚初始化的参数通常是随机的，必须通过训练来调整。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;optimizer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; torch.optim.AdamW(model.parameters(), &lt;/span&gt;&lt;span&gt;lr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1e-3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;loss_fn &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nn.HuberLoss()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; xb, yb &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; train_loader:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    optimizer.zero_grad(&lt;/span&gt;&lt;span&gt;set_to_none&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    prediction &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; model(xb)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    loss &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; loss_fn(prediction, yb)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    loss.backward()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    torch.nn.utils.clip_grad_norm_(model.parameters(), &lt;/span&gt;&lt;span&gt;max_norm&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1.0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    optimizer.step()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;理解这段代码时，可以把它拆成一个迭代事务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;获取一个 Batch；&lt;/li&gt;
&lt;li&gt;执行前向计算，得到预测；&lt;/li&gt;
&lt;li&gt;将预测与真实目标比较，计算 Loss；&lt;/li&gt;
&lt;li&gt;沿计算图反向计算梯度；&lt;/li&gt;
&lt;li&gt;根据梯度更新参数；&lt;/li&gt;
&lt;li&gt;进入下一个 Batch。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这里使用 AdamW，它是深度学习中常见的优化器之一。Gradient Clipping 会限制梯度范数，避免某些训练步骤的梯度过大。它们是可配置的训练策略，不是 Transformer 注意力公式的一部分。&lt;/p&gt;
&lt;p&gt;训练结束后，程序不会直接拿最后一轮模型做最终评估。它会根据验证集误差保留表现最好的参数，再在测试集上进行一次最终测量。&lt;/p&gt;
&lt;h3&gt;7.5 运行结果应该怎样看？&lt;/h3&gt;
&lt;p&gt;命令执行时会打印设备、数据形状、训练/验证/测试样本数量，以及每一轮训练损失和验证指标。最终会在 outputs/toy_transformer/ 中生成：&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;文件&lt;/th&gt;&lt;th&gt;用途&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;summary.json&lt;/td&gt;&lt;td&gt;训练配置、验证过程和最终评估指标&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;predictions.csv&lt;/td&gt;&lt;td&gt;测试区间的真实值与预测值&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;transformer.pt&lt;/td&gt;&lt;td&gt;模型参数、输入特征名、窗口、预测跨度和标准化信息&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;程序同时计算零预测基线和一个简单 Ridge 回归基线。你应当比较 Transformer 是否在同一测试样本上获得更低的 MAE / RMSE，而不是只看训练损失有没有下降。&lt;/p&gt;
&lt;p&gt;如果 Transformer 输给基线，这并不表示程序出错。合成数据可能只包含有限的时间依赖，线性模型本来就可能足够好。这个结果恰恰说明：增加模型复杂度，不等于增加预测价值。&lt;/p&gt;
&lt;h3&gt;7.6 推荐的调试顺序&lt;/h3&gt;
&lt;p&gt;如果结果不对，不要立刻增加层数或参数。更有效的排查顺序如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查输入与标签的时间对齐，确认预测目标确实位于输入窗口之后。&lt;/li&gt;
&lt;li&gt;打印一个样本的特征矩阵和标签，人工确认取样逻辑。&lt;/li&gt;
&lt;li&gt;检查张量形状，尤其是 Batch、序列长度和特征数是否按预期排列。&lt;/li&gt;
&lt;li&gt;先把模型缩小、训练少量样本，确认 Loss 可以下降。&lt;/li&gt;
&lt;li&gt;检查训练集与验证集曲线；训练损失下降而验证损失持续上升，通常需要考虑过拟合。&lt;/li&gt;
&lt;li&gt;与简单基线比较，确认模型不只是学会了输出一个接近平均值的结果。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;软件工程师通常会写单元测试验证函数契约。深度学习项目也需要类似纪律：检查数据契约、形状、损失数值、梯度是否为有限值、模型序列化是否可恢复，以及预测时是否依赖了不可用字段。&lt;/p&gt;
&lt;h2&gt;八、把样例迁移到真实金融时序&lt;/h2&gt;
&lt;p&gt;合成数据适合调试，却不能回答真实业务问题。接下来使用研究目录中已有的公开数据实验，观察同一类模型在实际数据管道里还要面对哪些问题。&lt;/p&gt;
&lt;h3&gt;8.1 ETF 多资产趋势与风险分析&lt;/h3&gt;
&lt;p&gt;项目提供了 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/investment_research/transformer_research.py&quot;&gt;investment_research/transformer_research.py&lt;/a&gt;，使用 Yahoo Finance 的公开 ETF 行情，构造多资产特征，并预测未来 5 个交易日收益。默认资产包括 SPY、QQQ、IWM、EFA、TLT、GLD 和 SHY，分别代表不同市场和资产类别的代理。&lt;/p&gt;
&lt;p&gt;运行方式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/investment_research&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; venv&lt;/span&gt;&lt;span&gt; .venv&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; .venv/bin/activate&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; -r&lt;/span&gt;&lt;span&gt; requirements.txt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; transformer_research.py&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --start&lt;/span&gt;&lt;span&gt; 2012-01-01&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --end&lt;/span&gt;&lt;span&gt; 2026-01-01&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --epochs&lt;/span&gt;&lt;span&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体参数以脚本的命令行帮助与 README 为准。第一次运行需要能访问行情源；如果下载失败，应先检查数据是否成功取得，不要把空数据或不完整数据当作模型结果。&lt;/p&gt;
&lt;p&gt;这个研究项目的重要之处不是承诺通过 Transformer 赚钱，而是让你检查完整的研究流程：行情下载、特征构造、标签对齐、时间外划分、训练标准化、模型训练、预测评估和示例组合回测。项目同时保留动量、Ridge 和零预测等基线，有利于验证复杂模型是否真的带来增量价值。&lt;/p&gt;
&lt;p&gt;Yahoo Finance 数据适合教学和研究练习，但并不等同于严谨的机构级 point-in-time 数据。它不能自动处理历史证券池变化、退市样本、生存者偏差、真实成交价差、交易限制、完整公司行为和可交易性问题。回测结果不能被当成投资建议或实盘盈利保证。&lt;/p&gt;
&lt;h3&gt;8.2 用 FRED 国债收益率曲线做多变量预测&lt;/h3&gt;
&lt;p&gt;另一个例子是 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/investment_research/pricing_curve_transformer.py&quot;&gt;pricing_curve_transformer.py&lt;/a&gt;。它从 FRED 获取不同期限的美国国债收益率，例如 3 个月、2 年、5 年、10 年和 30 年，并利用历史收益率水平、期限差和变化构造输入，预测未来 5 个交易日的 10 年期收益率变化。&lt;/p&gt;
&lt;p&gt;它展示了 Transformer 对多变量时间序列的用法：模型不是把每个期限独立预测，而是能够在历史窗口中建模不同期限的共同变化。不过，收益率预测与债券定价、风险计量、P&amp;amp;L 预测仍是不同任务。若要把预测结果用于定价或风险管理，还要加上久期、凸性、曲线构建、现金流和业务规则，并进行独立验证。&lt;/p&gt;
&lt;h3&gt;8.3 支付欺诈序列：为什么是序列模型而不只是表格分类&lt;/h3&gt;
&lt;p&gt;研究目录还包括 PaySim 的手把手实验 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/README.md&quot;&gt;hands_on/README.md&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/train.py&quot;&gt;train.py&lt;/a&gt;。这个实验从逻辑回归开始，再用 GRU 处理账户交易序列，按时间切分，并输出 PR-AUC、ROC-AUC 和人工审核预算下的 Recall 等指标。&lt;/p&gt;
&lt;p&gt;为什么先提供 GRU？因为先建立一个能运行、有基线、有正确时间切分的序列模型，比直接上复杂 Transformer 更容易判断新增结构是否有用。之后可以将 GRU Encoder 替换成 Transformer Encoder，保持数据、标签、时间切分和评估方法不变，做可比较的实验。&lt;/p&gt;
&lt;p&gt;PaySim 是模拟的移动支付数据，并不是真实银行交易。它能够帮助初学者学习类别不平衡、序列构造和评估方法，但结果不能直接外推到真实银行卡欺诈、反洗钱或信用风险。&lt;/p&gt;
&lt;h2&gt;九、金融数据不是普通文本：几个专门需要处理的问题&lt;/h2&gt;
&lt;p&gt;在 NLP 里，一个 Token 可能是一个词或子词；金融序列里的一个 Token 则经常是一笔交易、一个市场时间点或一项业务事件。事件有多种字段，常见处理方式是分别编码，再组合成事件表示。&lt;/p&gt;
&lt;p&gt;例如，一笔交易可能包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数值字段：金额、交易前后余额、价格、数量、收益率；&lt;/li&gt;
&lt;li&gt;类别字段：交易类型、币种、支付方式、商户类别、资产类别；&lt;/li&gt;
&lt;li&gt;时间字段：事件发生时间、事件到达系统时间、与上一个事件的间隔；&lt;/li&gt;
&lt;li&gt;状态字段：成交、撤单、结算、已确认欺诈、人工调整等业务状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9.1 数值字段与类别字段&lt;/h3&gt;
&lt;p&gt;金额、余额和价格不能直接当作类别 ID。可以对偏态严重的非负金额做 log1p 变换，再用训练集的均值和标准差进行标准化；收益率、利率差和变化量则要根据业务意义与分布选择合适的变换。&lt;/p&gt;
&lt;p&gt;类别字段通常要映射到 Embedding 或 One-Hot 表示。对商户、账户、证券、交易对手等高基数字段，独立维护每一个 ID 的参数可能非常昂贵，还会遇到新 ID 的冷启动问题。可采用频率阈值、哈希桶、层级回退或类别级默认表示，但必须在训练与服务中使用同一套规则。&lt;/p&gt;
&lt;h3&gt;9.2 时间信息至少有三种&lt;/h3&gt;
&lt;p&gt;对每个事件，最好区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Event time&lt;/strong&gt;：业务事件实际发生的时刻。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observed/arrival time&lt;/strong&gt;：系统真正收到事件、使它可被模型使用的时刻。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision time&lt;/strong&gt;：模型做出评分或业务决策的时刻。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在支付授权、反欺诈、AML、持仓快照和基金会计中，这三类时间可能不同。如果回填历史时仅按事件发生时间取数，可能把当时尚未到达系统的信息加入输入，造成训练时使用未来信息的泄漏。&lt;/p&gt;
&lt;p&gt;必须为模型定义一份明确的 point-in-time 契约：在每一个决策时点，哪些事件已经发生、哪些数据已经到达、哪些标签已经成熟。训练与在线特征服务必须遵守同一契约。&lt;/p&gt;
&lt;h3&gt;9.3 Padding 与 Masking&lt;/h3&gt;
&lt;p&gt;为了把多个不同长度的序列放入同一个 Batch，常见做法是将较短序列补成相同长度，这称为 Padding。但补齐位置不是真实事件，如果模型没有正确屏蔽这些位置，注意力可能从无意义的零值中学习到错误模式。&lt;/p&gt;
&lt;p&gt;当序列长度差异很大时，Padding 还会白白增加计算量。金融生产系统中，事件长度可能从 1 笔到几百笔；因此，选择固定窗口、按长度分桶、使用正确的 Padding Mask 或构造不补齐的小 Batch，都有实际影响。模型结构的收益必须和数据准备、内存、CPU/GPU 延迟一同评估。&lt;/p&gt;
&lt;h2&gt;十、不同金融业务场景如何选择 Transformer 目标&lt;/h2&gt;
&lt;p&gt;不是每一种金融数据都应该直接输出一个分类标签。先定义业务问题，再选择序列主体、输入窗口和训练目标。&lt;/p&gt;




































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;业务领域&lt;/th&gt;&lt;th&gt;可以建立的任务&lt;/th&gt;&lt;th&gt;主要输入&lt;/th&gt;&lt;th&gt;适合的模型输出&lt;/th&gt;&lt;th&gt;重要的数据问题&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;投资研究&lt;/td&gt;&lt;td&gt;未来收益、波动率或资产排序预测&lt;/td&gt;&lt;td&gt;历史价格、收益、成交量、跨资产因子&lt;/td&gt;&lt;td&gt;连续预测值、排序分数或区间&lt;/td&gt;&lt;td&gt;时间外验证、退市与生存者偏差、交易成本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pricing / 利率&lt;/td&gt;&lt;td&gt;未来曲线变化、波动率或定价残差预测&lt;/td&gt;&lt;td&gt;不同期限利率、期限差、市场状态&lt;/td&gt;&lt;td&gt;多变量连续预测、区间&lt;/td&gt;&lt;td&gt;发布日/可用时间、日历、曲线构建规则&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Holdings&lt;/td&gt;&lt;td&gt;持仓变化、集中度或风险异常识别&lt;/td&gt;&lt;td&gt;证券、数量、市值、组合与交易事件&lt;/td&gt;&lt;td&gt;异常分数、未来持仓变化&lt;/td&gt;&lt;td&gt;公司行动、持仓快照时点、证券主数据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reference Data&lt;/td&gt;&lt;td&gt;主数据变更异常、映射错误或变更影响识别&lt;/td&gt;&lt;td&gt;标的、实体映射、源系统变更事件&lt;/td&gt;&lt;td&gt;异常分类、影响范围或优先级&lt;/td&gt;&lt;td&gt;生效日期、版本、来源系统、人工确认&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fund Accounting&lt;/td&gt;&lt;td&gt;现金差异、应计异常、break 类型与解决时间&lt;/td&gt;&lt;td&gt;交易、结算、应计、费用、余额、工单状态&lt;/td&gt;&lt;td&gt;残差预测、分类或超时概率&lt;/td&gt;&lt;td&gt;会计规则版本、合同参数、结算日历、标签删失&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Trade / Order Book&lt;/td&gt;&lt;td&gt;执行成本代理、成交概率或订单流异常&lt;/td&gt;&lt;td&gt;订单簿快照、成交、撤单、市场状态&lt;/td&gt;&lt;td&gt;成交概率、未来价格变化、成本区间&lt;/td&gt;&lt;td&gt;决策时点、队列位置、基准价格和成交假设&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Payment / Fraud&lt;/td&gt;&lt;td&gt;欺诈评分、下一事件意外程度&lt;/td&gt;&lt;td&gt;账户/卡/设备的历史交易、事件类型和时间差&lt;/td&gt;&lt;td&gt;风险分数、异常字段分数、Embedding&lt;/td&gt;&lt;td&gt;延迟标签、类别不平衡、跨实体历史、点时一致性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Financial News&lt;/td&gt;&lt;td&gt;新闻事件对市场状态或风险的关联分析&lt;/td&gt;&lt;td&gt;时间戳、来源、实体、文本向量和行情序列&lt;/td&gt;&lt;td&gt;文本/市场融合表示、事件分类&lt;/td&gt;&lt;td&gt;新闻可用时间、重复报道、前视偏差和文本标签&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;注意：此表中的“可以建立”是任务设计方向，不意味着公开数据已经具备全部业务字段。研究目录的补充报告 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/additional_financial_transformer_use_cases_data_gaps_2026-10-24.md&quot;&gt;additional_financial_transformer_use_cases_data_gaps_2026-10-24.md&lt;/a&gt; 专门记录了哪些用例有可用数据、哪些还缺真实业务标签和数据契约。&lt;/p&gt;
&lt;p&gt;特别是基金会计和交易执行：公共市场数据可以帮助学习收益率曲线和订单簿的序列建模，但不等于拥有真实基金分录、合同费率、成交意图、清算状态或确认的会计差错标签。缺少业务数据时，应先构建合成数据来验证程序流程，再明确列出真实 PoC 仍需要哪些字段，不能将模拟标签说成真实业务结果。&lt;/p&gt;
&lt;h2&gt;十一、生产实践为什么经常采用“Transformer + GBDT”而不是全面替换&lt;/h2&gt;
&lt;p&gt;一个非常实用的架构模式是让 Transformer 负责学习历史序列的上下文表示，再把这些表示和已有的结构化特征交给 LightGBM、XGBoost、逻辑回归或其他决策模型。&lt;/p&gt;
&lt;p&gt;这不是说 Transformer 不够强，而是不同模型擅长的事情不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transformer 能够在历史事件之间建立可学习的关系。&lt;/li&gt;
&lt;li&gt;GBDT 对结构化特征和非线性交互有很强的工程适配性，训练、推理与局部解释工具也相对成熟。&lt;/li&gt;
&lt;li&gt;规则引擎适合表达明确、需要确定性执行的业务规则。&lt;/li&gt;
&lt;li&gt;最终决策系统还要处理阈值、预算、权限、人工复核和审计，不应等同于单个模型。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;金融交易反欺诈就是很典型的例子。研究材料中的 Ramp 案例使用 Transformer 学习交易历史，并把行为 Embedding、字段级意外程度等特征送入现有 XGBoost，而不是让 Transformer 单独承担所有拒绝决策。原文还显示，总收益中有相当部分来自金额加权损失，不能把完整方案的收益都归因于 Transformer。参见 &lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/transformer_sequence_financial_services_survey_2026-10-24.md&quot;&gt;Ramp 案例研究材料&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这个组合架构有几个优势：它可以复用既有的数值特征平台、标签训练管道和决策系统；可以单独验证 Transformer 提供的特征是否真正增加预测价值；出现延迟问题时，也可以降级到已验证的旧模型。&lt;/p&gt;
&lt;p&gt;但也不能把这个模式当成固定答案。在有大量、可靠序列数据并且目标适合端到端学习的场景，直接训练序列分类或多任务模型也可能合理。正确做法是从简单基线开始，通过消融实验确认每一个新增组件的价值。&lt;/p&gt;
&lt;h2&gt;十二、金融时序模型的评估：比训练本身更容易出错&lt;/h2&gt;
&lt;h3&gt;12.1 先定义问题，再选择指标&lt;/h3&gt;
&lt;p&gt;不同输出类型对应不同指标。预测未来收益或利率变化，可以使用 MAE、RMSE、方向命中率和按时间切片的误差；欺诈检测需要 PR-AUC、Recall@K、Precision@K 和损失金额覆盖率；异常检测要重视误报成本、检测提前量和调查预算；基金会计差异预测可以评估异常金额误差、根因分类和 SLA 内解决的概率。&lt;/p&gt;
&lt;p&gt;不要仅使用 Accuracy。假设 100,000 笔交易中有 100 笔欺诈，一个将所有交易都判为正常的模型仍然能达到 99.9% 准确率，却完全没有发现欺诈。类别不平衡问题必须采用符合任务与业务预算的指标。&lt;/p&gt;
&lt;h3&gt;12.2 时间切分与标签成熟度&lt;/h3&gt;
&lt;p&gt;对于时间序列，训练集应来自较早时段，验证集位于其后，测试集再位于更晚时段。若标签定义为未来 5 天累计收益，训练目标就必须在训练边界前完整结束；否则边界附近的训练样本会使用验证期的未来收益作为标签。&lt;/p&gt;
&lt;p&gt;欺诈标签和基金会计差错标签也有成熟期。例如支付之后数周才确认的欺诈，如果把近期尚未收到争议的交易直接标为正常，模型训练和测试都会被污染。这类数据需要显式记录标签状态与成熟时间，并避免把“暂未发现问题”直接当成“已确认正常”。&lt;/p&gt;
&lt;h3&gt;12.3 标准化、填充和编码也可能泄漏&lt;/h3&gt;
&lt;p&gt;常见的数据泄漏不只发生在标签字段中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果先对全量数据计算标准化参数，再按时间切分，未来数据已经影响了训练预处理。&lt;/li&gt;
&lt;li&gt;如果类别词表、目标编码或异常阈值利用全量标签生成，可能隐含使用了测试期的信息。&lt;/li&gt;
&lt;li&gt;如果用最终修订的参考数据替代当时版本，历史结果不再代表当时可获得的数据。&lt;/li&gt;
&lt;li&gt;如果对不同长度序列填充后，没有屏蔽 padding 位置，模型可能学到数据准备过程的伪模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，数据管道也需要版本化和测试。训练时如何构造输入，应该尽可能与生产推理时实际能拿到的输入一致。&lt;/p&gt;
&lt;h3&gt;12.4 消融：证明复杂度创造了增量价值&lt;/h3&gt;
&lt;p&gt;至少比较以下几组模型：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;简单业务基线，例如零预测、动量、固定规则或当前生产模型。&lt;/li&gt;
&lt;li&gt;常见机器学习基线，例如逻辑回归、Ridge、LightGBM 或 XGBoost。&lt;/li&gt;
&lt;li&gt;纯序列模型，例如 GRU、TCN 或小型 Transformer。&lt;/li&gt;
&lt;li&gt;组合模型，例如原有结构化特征加 Transformer 的 Embedding 或异常分数。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;每组应使用相同测试窗口、相同标签定义、可比的数据清洗和相同的成本假设。若 Transformer 与现有基线相差不大，就要问它是否真的增加了业务价值；有时候更好的特征工程、更合理的损失函数、更及时的重训或更低的延迟，比扩展模型更有价值。&lt;/p&gt;
&lt;h2&gt;十三、常见误区：程序能跑不代表实验可信&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;误区一：模型训练损失下降，就说明模型有效。&lt;/strong&gt; 训练损失下降只能表明模型在训练样本上拟合得更好。还要检查验证集、测试集和与简单基线的对比。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误区二：Transformer 天生适合所有表格数据。&lt;/strong&gt; 如果每个样本是一行没有可靠时序关系的表格，梯度提升树往往是值得优先比较的强基线。Transformer 的优势更可能来自有意义的序列结构和跨事件交互。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误区三：注意力权重就是解释。&lt;/strong&gt; 注意力权重显示计算过程中如何分配信息混合的权重，但它不自动构成业务因果解释，也不能直接视为监管需要的理由码。高风险业务仍需独立的特征归因、规则证据、案例分析和人工复核流程。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误区四：模型越大、窗口越长越好。&lt;/strong&gt; 长序列可能带来更高计算开销和更多噪声。在一些欺诈案例里，近期行为断裂比极长的历史更有价值；更长的历史也可以通过检索、统计特征或分层编码处理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误区五：Transformer 一定需要 GPU。&lt;/strong&gt; 小型模型在 CPU 上也可以完成教学和中等规模实验；GPU 的价值取决于序列长度、批量大小、模型结构和吞吐要求。训练和生产推理应分别测试。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误区六：预测分数可以直接触发业务动作。&lt;/strong&gt; 在金融服务里，模型分数通常只是决策系统的一个输入。权限、规则、阈值、损失成本、服务时限、审计和人工复核仍须明确定义。&lt;/p&gt;
&lt;h2&gt;十四、从入门走向生产的建议架构&lt;/h2&gt;
&lt;p&gt;下面的架构把模型本身放在整个系统中的正确位置：数据契约决定可见历史，序列编码器学习表示，任务头或下游模型输出预测，最后由业务决策层结合约束与规则形成动作。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[业务事件与市场数据] --&amp;gt; B[Point-in-time 数据契约]
    B --&amp;gt; C[数据清洗与字段编码]
    C --&amp;gt; D[历史窗口与时间特征]
    D --&amp;gt; E[Transformer Encoder]
    E --&amp;gt; F[Embedding / 任务分数]
    F --&amp;gt; G[下游分类器或风险模型]
    H[确定性规则与业务约束] --&amp;gt; I[决策服务]
    G --&amp;gt; I
    I --&amp;gt; J[允许 / 拒绝 / 告警 / 人工复核]
    J --&amp;gt; K[审计记录与后续标签]
    K --&amp;gt; L[评估、漂移监控和重训]
    L --&amp;gt; E&lt;/pre&gt;
&lt;p&gt;一个可治理的实现至少应保存：数据快照与特征版本、训练/验证/测试的时间范围、标签成熟策略、模型版本、代码和依赖版本、训练配置、基线和消融结果、推理延迟、输出分布及异常情况。上线还需要影子运行、受控流量、降级路径和回滚方式。&lt;/p&gt;
&lt;p&gt;对于实时授权或其他同步关键链路，应先定义严格的时延预算。特征读取、序列构造、推理与决策会共同消耗时间。超时后应退回经过验证的旧模型或规则，而不是无限等待模型输出。&lt;/p&gt;
&lt;h2&gt;十五、动手练习：按这个顺序扩展，而不是一开始就堆模型&lt;/h2&gt;
&lt;p&gt;完成前面的代码后，可以按阶段继续。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;练习 1：观察 Attention。&lt;/strong&gt; 在 attention_from_scratch.py 中分别运行因果与非因果注意力。改变输入向量，检查各个位置的注意力权重如何变化，并验证每一行权重之和仍然接近 1。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;练习 2：控制模型容量。&lt;/strong&gt; 将 toy_transformer.py 的层数从 2 改成 1，将模型宽度从 32 改成 16，观察训练时间和验证指标变化。再分别试更长的历史窗口，记录训练成本，不要仅凭一次结果判断优劣。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;练习 3：做一个公平的时间外对比。&lt;/strong&gt; 在 ETF 研究脚本中分别运行 Transformer、动量基线和 Ridge。固定日期区间、资产池、预测跨度和测试样本，比较 MAE、方向判断以及交易成本敏感性分析。不要用测试集挑参数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;练习 4：将 GRU 替换为 Transformer。&lt;/strong&gt; 在 PaySim 反欺诈实验里保持标签、样本切分、输入特征和指标一致，只替换序列编码器。先确认数据流程和基线正确，再观察 Transformer 有没有增益。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;练习 5：增加时间间隔特征。&lt;/strong&gt; 对交易事件加入与上一事件的时间差，并比较加入前后的验证指标。特别注意事件时间与到达时间不能混淆。时间差应使用当前决策时点可见的信息构造。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;练习 6：从单输出扩展为多任务。&lt;/strong&gt; 对交易序列同时预测下一事件类型、金额区间或掩码字段；再将学到的表示输出给一个简单分类器。比较多任务表征是否改善下游预测，以及额外训练和维护成本是否合理。&lt;/p&gt;
&lt;p&gt;做这些练习的目的是建立可复现的实验纪律，而不是寻找一次性最高的指标。每次变更都应该留下参数、数据范围、测试结果和基线对照。&lt;/p&gt;
&lt;h2&gt;十六、参考材料与代码导航&lt;/h2&gt;
&lt;h3&gt;本文相关论文和官方文档&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Vaswani et al., &lt;a href=&quot;https://arxiv.org/abs/1706.03762&quot;&gt;Attention Is All You Need&lt;/a&gt;, 2017。Transformer 架构的原始论文。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.pytorch.org/docs/stable/generated/torch.nn.TransformerEncoder.html&quot;&gt;PyTorch TransformerEncoder 文档&lt;/a&gt;。Encoder 结构、参数与输入输出约定。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.pytorch.org/docs/stable/notes/autograd.html&quot;&gt;PyTorch Autograd mechanics&lt;/a&gt;。自动求导与反向传播。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html&quot;&gt;scikit-learn TimeSeriesSplit&lt;/a&gt;。时间序列的验证切分。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ranaroussi.github.io/yfinance/&quot;&gt;yfinance 文档&lt;/a&gt;。教学用公开行情数据接口。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;devweekly 中的配套研究与代码&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/transformer_sequence_financial_services_survey_2026-10-24.md&quot;&gt;Transformer 金融服务序列建模综述&lt;/a&gt;：工业案例、研究谱系、模型架构和落地模式。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/additional_financial_transformer_use_cases_data_gaps_2026-10-24.md&quot;&gt;金融 Transformer 用例与数据缺口清单&lt;/a&gt;：Pricing、Holdings、Reference Data、Fund Accounting、Trade 等场景的输入、标签和数据需求。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/attention_from_scratch.py&quot;&gt;手写 Attention&lt;/a&gt;：从 Q/K/V 到多头注意力和因果掩码。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/toy_transformer.py&quot;&gt;小型 Transformer 教学程序&lt;/a&gt;：合成金融时序、训练循环、基线和输出文件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/investment_research/transformer_research.py&quot;&gt;ETF 多资产 Transformer 实验&lt;/a&gt;：公开行情与时间外预测研究。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/investment_research/pricing_curve_transformer.py&quot;&gt;国债收益率曲线实验&lt;/a&gt;：多期限利率与未来曲线变化预测。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devweekly/devweekly.github.io/blob/main/temp/transformer_sequence_financial_services_survey_2026-10-24/hands_on/train.py&quot;&gt;PaySim 序列欺诈实验&lt;/a&gt;：逻辑回归和 GRU 基线，可作为 Transformer 替换实验的起点。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;结语&lt;/h2&gt;
&lt;p&gt;对有编程经验的人来说，掌握 Transformer 的第一步不是直接微调一个大模型，而是理解它的计算结构：输入是带明确形状的张量；注意力用 Q、K、V 计算序列位置之间的加权信息组合；位置编码提供时序信息；损失函数定义学习目标；自动求导计算梯度；优化器不断更新参数。&lt;/p&gt;
&lt;p&gt;要把这个模型变成可信的金融应用，还得再加上数据时间契约、时间外测试、基线对照、类别不平衡指标、推理时延和降级机制。真正的工程能力不是让 Transformer 跑起来，而是能够证明它在指定业务条件下，比更简单的替代方案多带来了什么价值，并且知道当数据、模型或服务出现问题时如何安全地处理。&lt;/p&gt;</content:encoded></item><item><title>Thompson Sampling 如何优化 LLM 路由：从贝叶斯探索到生产成本控制</title><link>https://devweekly.github.io/posts/thompson-sampling-%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96-llm-%E8%B7%AF%E7%94%B1%E4%BB%8E%E8%B4%9D%E5%8F%B6%E6%96%AF%E6%8E%A2%E7%B4%A2%E5%88%B0%E7%94%9F%E4%BA%A7%E6%88%90%E6%9C%AC%E6%8E%A7%E5%88%B6/</link><guid isPermaLink="true">https://devweekly.github.io/posts/thompson-sampling-%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96-llm-%E8%B7%AF%E7%94%B1%E4%BB%8E%E8%B4%9D%E5%8F%B6%E6%96%AF%E6%8E%A2%E7%B4%A2%E5%88%B0%E7%94%9F%E4%BA%A7%E6%88%90%E6%9C%AC%E6%8E%A7%E5%88%B6/</guid><description>从 Ramp 的生产实践出发，解释 Thompson Sampling 如何结合延迟分布、失败率、超时约束与模型成本进行在线路由，并分析实现边界和生产落地要点。</description><pubDate>Sat, 24 Oct 2026 09:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;先说结论：模型路由不是一张静态排行榜&lt;/h2&gt;
&lt;p&gt;Ramp Builders 在 2026 年 7 月发布的文章 &lt;a href=&quot;https://builders.ramp.com/post/thompson-sampling-model-routing&quot;&gt;Online Learning for Cost-Efficient LLM Routing&lt;/a&gt;，介绍了他们如何在内部 LLM Gateway 中使用 Thompson Sampling，在线学习模型及服务等级的延迟表现，并结合供应商失败率、调用时限和成本，动态调整候选路由顺序。Ramp 报告称，在一组更大流量的实验中，成本下降了 26.3%，错误率变化为下降 0.09 个百分点；另一个以流式响应为主的用例节省约 30%。这些是 Ramp 报告的生产结果，不应直接外推为所有应用都能获得的收益。&lt;/p&gt;
&lt;p&gt;这篇文章最值得学习的地方，并不是“用某个算法挑便宜模型”，而是把三个原本分开的信号放进同一个在线决策循环：&lt;strong&gt;失败率&lt;/strong&gt;，即供应商是否正在限流或发生服务侧故障；&lt;strong&gt;延迟分布&lt;/strong&gt;，即在当前场景里有多大概率赶不上 deadline，而不只是平均响应要多久；以及&lt;strong&gt;调用成本&lt;/strong&gt;，即当多个候选都能满足业务要求时，优先使用成本更低的选项。&lt;/p&gt;
&lt;p&gt;算法也不是一次性选出永久最优的模型，而是持续观察反馈，在探索尚不确定的候选项和利用当前表现较好的候选项之间动态调整。&lt;/p&gt;
&lt;h2&gt;一、为什么模型路由需要在线学习&lt;/h2&gt;
&lt;p&gt;很多系统最初使用静态优先级：首选模型失败后再尝试第二个，依次回退。这能表达应用对模型的偏好，也容易理解和排查，但它隐含了一个假设：候选项的相对表现大致稳定。&lt;/p&gt;
&lt;p&gt;现实中的模型服务并不满足这个假设。服务端负载、地区、时段、配额、限流、供应商内部调度，以及 Standard、Flex、Priority 等服务等级，都可能改变实际延迟和失败概率。同一个模型在深夜可能很快，在业务高峰时却可能持续排队；一个更便宜的服务等级可能在大部分时间都足够快，但在高峰期发生明显退化。&lt;/p&gt;
&lt;p&gt;仅根据历史平均延迟做静态排序会遇到两个问题。首先，过去快不代表现在快，历史均值会掩盖短期变化。其次，均值不能刻画尾部：对于有六秒硬超时的用户交互，平均两秒的模型并不一定安全，关键是它超过六秒的概率有多大。&lt;/p&gt;
&lt;p&gt;这使模型路由更像一个&lt;strong&gt;在线决策问题&lt;/strong&gt;：每次请求都要在满足业务约束的候选项中作出选择，之后再用真实结果更新对候选项的判断。&lt;/p&gt;
&lt;h3&gt;候选项不只是模型名称&lt;/h3&gt;
&lt;p&gt;Ramp 的示例把模型与服务等级作为独立候选项。同一个 Gemini 模型的 Flex、Standard 和 Priority 可以有不同的价格、延迟和可用性；不同供应商的模型则有不同的能力与服务特征。因此，“选哪个模型”实际可能是在选择一个路由组合：&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;路由维度&lt;/th&gt;&lt;th&gt;可能影响的指标&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;模型&lt;/td&gt;&lt;td&gt;质量、能力、输出长度、推理开销、价格&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;供应商&lt;/td&gt;&lt;td&gt;服务稳定性、限流、区域覆盖和故障模式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;服务等级&lt;/td&gt;&lt;td&gt;单价、排队延迟、吞吐和优先级&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;调用场景&lt;/td&gt;&lt;td&gt;deadline、输入输出规模、流式或非流式、任务质量要求&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;当前时间与负载状态&lt;/td&gt;&lt;td&gt;实时延迟、失败率及服务拥塞&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这些维度不应不加区分地合并统计。面向六秒交互场景的路由策略，未必适用于后台批处理；擅长代码生成的模型，也未必能替代金融信息抽取任务中的质量基线。后文会讨论如何划分统计上下文，以及为什么质量和安全条件应先于成本排序。&lt;/p&gt;
&lt;h2&gt;二、Thompson Sampling：不是随机挑选，而是把不确定性纳入决策&lt;/h2&gt;
&lt;p&gt;Thompson Sampling 是一种常用于多臂老虎机（Multi-Armed Bandit）的贝叶斯在线决策方法。名字来自一个经典比喻：有多台老虎机，每台的回报概率未知，每次只能拉其中一台。系统既想尽量获得高回报，又需要试用那些可能更好、但目前证据还不足的选项。&lt;/p&gt;
&lt;p&gt;把每个模型路由组合看作一台老虎机，就能理解它解决的问题。某个候选目前看起来最好，可能因为它确实表现优秀，也可能只是样本少、运气好。另一个候选目前的观测均值略差，却可能因为数据不足而仍有相当概率表现更好。&lt;/p&gt;
&lt;p&gt;Thompson Sampling 的做法是：为每个候选维护一个关于真实表现的概率分布；每次决策时，从各自的后验分布中采样一个可能的真实参数；再根据采样结果计算候选得分，选择得分最高的候选。拿到请求结果后，系统更新相应候选的统计分布。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[接收请求与业务约束] --&amp;gt; B[筛出允许使用的模型和服务等级]
    B --&amp;gt; C[读取各候选的在线统计状态]
    C --&amp;gt; D[为未知性能参数采样]
    D --&amp;gt; E[估计失败与超过 deadline 的风险]
    E --&amp;gt; F[结合成本和调用方偏好计算路由分数]
    F --&amp;gt; G[排序并尝试首选候选]
    G --&amp;gt; H{请求成功且满足时限？}
    H --&amp;gt;|是| I[记录延迟、成本与结果]
    H --&amp;gt;|否| J[按回退策略尝试下一候选]
    J --&amp;gt; I
    I --&amp;gt; K[更新失败率和延迟后验]
    K --&amp;gt; C&lt;/pre&gt;
&lt;h3&gt;探索与利用如何平衡&lt;/h3&gt;
&lt;p&gt;假设路由 A 的成功率已观察几万次，估计很稳定；路由 B 只观察了十几次，当前平均延迟略高，但不确定性也很大。如果总是选当前平均表现最好的 A，系统可能永远无法发现 B 在某些时段更有优势。&lt;/p&gt;
&lt;p&gt;Thompson Sampling 不需要设置一个固定比例，比如“每 100 次请求中的 5 次用于探索”。它通过参数分布体现不确定性：数据不足的候选通常拥有更宽的后验分布，因此在某些采样轮次中可能获得更好的估计值，被选中的机会也更高；随着观测增加，分布会逐步收敛，路由会更频繁地选择证据支持的优势候选。&lt;/p&gt;
&lt;p&gt;这里的“随机”不是任意抽签。候选的入选概率由已有数据、先验假设和决策目标共同决定。探索不是额外增加的一项业务流量，而是在线决策本身对不确定性的处理方式。&lt;/p&gt;
&lt;p&gt;不过，Thompson Sampling 并不意味着系统一定能在任意变化的环境中找到全局最优路由。经典多臂老虎机分析通常建立在一组明确假设上；真实模型服务会发生漂移，候选之间可能并不等价，deadline 和成本也会变化。因此，生产系统需要用近期统计、上下文切片和持续监控应对非平稳环境，不能只套用算法名称就认为问题已经解决。&lt;/p&gt;
&lt;h2&gt;三、Ramp 如何分别估计失败率和延迟风险&lt;/h2&gt;
&lt;p&gt;原文没有把失败率与延迟塞进同一个指标，而是分开建模，再在选路时组合。这是一个重要的设计选择：失败与慢响应是不同的故障模式，触发机制不同，治理措施也不同。&lt;/p&gt;
&lt;h3&gt;3.1 用 EWMA 追踪近期失败率&lt;/h3&gt;
&lt;p&gt;Ramp 使用指数加权移动平均（EWMA）跟踪失败率，只纳入真正由供应商侧导致的故障，例如限流和服务端错误。调用方发送了非法参数、请求格式错误等问题，不应该被统计成“模型服务不可靠”，否则路由器会惩罚一个本来运行正常的候选。&lt;/p&gt;
&lt;p&gt;EWMA 的直觉是给最近的观测更高权重，较早的观测权重则随时间衰减。它与简单的全历史平均不同：如果某个供应商刚刚开始限流，最近的错误会更快地改变估计值；当服务恢复后，近期的成功结果也会逐渐把估计值拉下来。&lt;/p&gt;
&lt;p&gt;它需要在响应速度与噪声之间权衡。更新过快会对偶发错误反应过度，更新过慢则可能在限流已经发生后仍大量选择故障候选。实际实现还需要明确失败分类、采样窗口、更新频率、初始值与衰减速度。Ramp 的文章解释了所采用的思路，但没有公开这些配置的完整数值。&lt;/p&gt;
&lt;h3&gt;3.2 为什么要对数延迟建模&lt;/h3&gt;
&lt;p&gt;延迟是正数，并且在生产系统里经常呈现右偏长尾：大部分请求很快，少量请求却因排队、重试或服务抖动变得很慢。如果直接假设原始延迟服从对称的正态分布，可能会低估长尾风险。&lt;/p&gt;
&lt;p&gt;Ramp 对延迟取对数，并对对数延迟的均值和方差建模。换言之，假设延迟 L 的对数近似服从正态分布：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;原始延迟始终大于零。&lt;/li&gt;
&lt;li&gt;对数转换可以把乘法尺度上的差异变得更适合统计建模。&lt;/li&gt;
&lt;li&gt;如果对数延迟近似正态，原始延迟可用对数正态分布描述，从而估计超过任意 deadline 的概率。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这里的重点不是“延迟一定严格服从对数正态分布”。这是一个可用于在线计算的建模假设，仍需结合真实的延迟分布、尾部表现和残差检查来验证。供应商服务的延迟可能是多峰分布，例如部分请求命中缓存、部分请求走慢路径；这时单一分布可能过于简单。&lt;/p&gt;
&lt;h3&gt;3.3 Normal-Inverse-Gamma 后验在做什么&lt;/h3&gt;
&lt;p&gt;原文使用 Normal-Inverse-Gamma（NIG）共轭先验描述对数延迟的未知均值和方差。对非贝叶斯读者，可以把它理解为同时维护两类不确定性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当前路由的典型延迟到底有多快，即未知均值的不确定性。&lt;/li&gt;
&lt;li&gt;这条路由的波动与长尾到底有多严重，即未知方差的不确定性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当新请求完成时，系统不需要把全部历史原始样本重新读入内存。它可以累积样本数、对数延迟的均值与离差平方和等充分统计量，再更新后验参数。Ramp 提到这些统计状态被汇总存储在 Redis 中，这使多个请求处理进程可以共享在线学习所需的状态。&lt;/p&gt;
&lt;p&gt;原文给出的更新式为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;κₙ = κ₀ + n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;μₙ = (κ₀ × μ₀ + n × meanLog) / κₙ&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;αₙ = α₀ + n / 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;βₙ = β₀&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;     + 0.5 × deviationSum&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;     + κ₀ × n × (meanLog − μ₀)² / (2 × κₙ)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中，μ₀、κ₀、α₀、β₀ 是先验参数；n 是已观测样本数；meanLog 是对数延迟的样本均值；deviationSum 是对数延迟相对于样本均值的离差平方和。参数的精确定义与先验初始化必须保持一致，否则不同进程的更新会产生不兼容的状态。&lt;/p&gt;
&lt;p&gt;这些公式本身并不会直接告诉路由器“下一次应该选谁”。它们的作用是更新不确定性模型。决策时，算法从后验中抽样得到可能的均值和方差，再用它们计算延迟超过 deadline 的概率；这个概率会继续参与候选路由的评分。&lt;/p&gt;
&lt;p&gt;一个实现层面的细节是：NIG 的优势在于可以用小规模充分统计量进行在线更新，但前提是统计口径稳定。比如不能把不同 deadline、不同请求类型或完全不同的工作负载不加区分地混进同一条延迟分布，否则均值和方差即使计算正确，也不再代表某个具体决策场景。&lt;/p&gt;
&lt;h2&gt;四、如何把失败率、超时概率和价格合并&lt;/h2&gt;
&lt;p&gt;对于有 deadline 的请求，Ramp 把“坏结果”定义为两种情况之一：调用直接失败，或者调用没有直接失败但响应时间超过业务时限。&lt;/p&gt;
&lt;p&gt;原文使用的公式是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;P(bad_outcome)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  = P(failure)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    + (1 − P(failure)) × P(latency &amp;gt; deadline)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;举个直观的例子。某路由的供应商失败概率是 2%；在没有发生这类失败的请求中，有 5% 超过 deadline。那么坏结果概率为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;2% + (1 − 2%) × 5% = 6.9%&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为什么不是简单的 2% + 5%？因为第二项被定义为“未直接失败的前提下超时”的风险，概率要乘上请求没有直接失败的概率。这种写法把两类结果分开计算，避免在概率口径一致的条件下重复计数。&lt;/p&gt;
&lt;p&gt;在 Ramp 的方案里，失败率来自前一步的 EWMA；超时概率则通过采样后验里的对数延迟均值和方差，并计算分布位于 deadline 右侧的面积得到。如果某次采样结果为 μ、σ²，且对数延迟近似正态，那么：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;P(L &amp;gt; d | μ, σ²) = 1 − Φ((ln(d) − μ) / σ)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中 d 是 deadline，Φ 是标准正态分布的累积分布函数。Thompson Sampling 的关键在于，μ 和 σ² 不是被视为完全确定的数字，而是从当前后验分布中抽样得到。于是系统不仅考虑“当前估计有多慢”，还把“我对这个估计有多确定”带进决策。&lt;/p&gt;
&lt;p&gt;最后，路由器将风险与相对成本组合成候选分数，排序后尝试首选模型，如果调用失败则按回退策略继续。这里有一个必须说明的边界：&lt;strong&gt;Ramp 的文章没有披露最终评分函数的完整表达式、成本归一化方式和风险权重。&lt;/strong&gt; 因此，能够从文章重建的是它的算法结构和风险估计方法，而不是声称写出一段代码就能逐项复现 Ramp 的生产路由器。&lt;/p&gt;
&lt;p&gt;一个生产实现可以选择不同目标，例如先设定最大失败概率和最大超时概率，再在可行候选中最小化成本；也可以把成本与坏结果风险合成为统一的效用函数。但两种设计表达的是不同的风险偏好，必须通过业务 SLO 与实验来确定，不能从 Thompson Sampling 这个名称中自动推导出来。&lt;/p&gt;
&lt;h2&gt;五、案例复盘：为什么系统会在故障时切换，恢复后又切回来&lt;/h2&gt;
&lt;p&gt;Ramp 把这一策略先用于一个有六秒 deadline 的 LLM reranker。最初的候选偏好列表较短，主要包括 Gemini 3.1 Flash Lite Standard 和 GPT 5.4 Nano Standard。之后他们扩大了候选集合，把相同模型的不同服务等级也加入路由选项：&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;候选模型&lt;/th&gt;&lt;th&gt;服务等级&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Gemini 3.1 Flash Lite&lt;/td&gt;&lt;td&gt;Flex&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gemini 3.1 Flash Lite&lt;/td&gt;&lt;td&gt;Standard&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gemini 3.1 Flash Lite&lt;/td&gt;&lt;td&gt;Priority&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPT 5.4 Nano&lt;/td&gt;&lt;td&gt;Flex&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPT 5.4 Nano&lt;/td&gt;&lt;td&gt;Standard&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这个扩展很重要。路由器的决策不再只是“Gemini 还是 GPT”，还包括“同一个模型应该走哪种服务等级”。它能利用模型能力相同、但价格或运行特征不同的候选之间的差异。&lt;/p&gt;
&lt;p&gt;部署时，Gemini 3.1 Flash Lite 正好处于限流较严重的时期。系统的候选份额迅速转向 GPT 5.4 Nano；在 Gemini 恢复后，流量又逐渐回流。这个变化说明，路由的选择依据不是永久写死的供应商偏好，而是近期观测和模型不确定性。它也反映了为什么只做“失败后回退”往往不够：当首选仍然偶尔成功、但持续变慢或频繁触发限流时，系统可能需要在错误彻底发生之前就重新排序。&lt;/p&gt;
&lt;p&gt;文章还报告了一个有意思的选择：系统使用了 GPT 5.4 Nano Flex，而不是 GPT 5.4 Nano Standard。原文列出的同期数据如下：&lt;/p&gt;


























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;服务等级&lt;/th&gt;&lt;th&gt;调用次数&lt;/th&gt;&lt;th&gt;P50&lt;/th&gt;&lt;th&gt;平均延迟&lt;/th&gt;&lt;th&gt;P95&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Nano Standard&lt;/td&gt;&lt;td&gt;4,710&lt;/td&gt;&lt;td&gt;1.73 秒&lt;/td&gt;&lt;td&gt;2.43 秒&lt;/td&gt;&lt;td&gt;6.22 秒&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Nano Flex&lt;/td&gt;&lt;td&gt;5,930&lt;/td&gt;&lt;td&gt;1.84 秒&lt;/td&gt;&lt;td&gt;2.53 秒&lt;/td&gt;&lt;td&gt;6.34 秒&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;从中位数和平均延迟看，两种服务等级的差异很小，Flex 的典型延迟略高；但在相似延迟表现下，Flex 的价格约为 Standard 的一半，路由器因此可以选择更便宜的候选。&lt;/p&gt;
&lt;p&gt;这里值得留意一个细节：&lt;strong&gt;两种服务等级的 P95 都超过了六秒 deadline。&lt;/strong&gt; 这与“典型延迟远低于时限”并不矛盾，却意味着不能把均值或 P50 当成 SLA 保证。只看平均延迟，容易低估尾部请求超时的风险。Ramp 的思路通过估计超过 deadline 的概率处理这一点；在自己的系统里复现时，必须验证这个概率估计与真实超时率是否相符。&lt;/p&gt;
&lt;p&gt;Ramp 报告的更大流量实验结果是成本节省 26.3%，错误率变化下降 0.09 个百分点。此后，他们又将该策略实现为适用于流式场景的版本，并用于 Ramp Inspect，报告节省约 30%。这些数字说明在线路由可能同时改善成本和可靠性，但公开文章没有给出足以独立复算的完整实验设置，例如完整流量构成、成本口径、实验置信区间以及所有质量指标。因此，它们适合作为生产实践的信号，不应被当作在不同任务和供应商组合下的收益承诺。&lt;/p&gt;
&lt;h2&gt;六、这套策略与常见路由方案有什么区别&lt;/h2&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方案&lt;/th&gt;&lt;th&gt;优点&lt;/th&gt;&lt;th&gt;主要局限&lt;/th&gt;&lt;th&gt;更适合的情形&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;静态优先级与失败回退&lt;/td&gt;&lt;td&gt;简单、可解释、容易排障&lt;/td&gt;&lt;td&gt;通常在明确失败后才切换；无法主动适应持续延迟退化&lt;/td&gt;&lt;td&gt;低流量、候选差异小、稳定性要求高且无需动态优化的业务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按历史平均延迟排序&lt;/td&gt;&lt;td&gt;实现容易，能利用历史数据&lt;/td&gt;&lt;td&gt;对近期变化反应慢，可能忽略延迟分布和尾部风险&lt;/td&gt;&lt;td&gt;探索阶段或延迟分布相对稳定的系统&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按即时健康状态切换&lt;/td&gt;&lt;td&gt;能对故障和限流快速响应&lt;/td&gt;&lt;td&gt;健康检查、错误率阈值难以表达性能差异；未必能找到低成本选项&lt;/td&gt;&lt;td&gt;需要明确故障隔离与快速止损的基础路由层&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Thompson Sampling + 风险与成本评分&lt;/td&gt;&lt;td&gt;同时考虑数据不确定性、动态性能与成本&lt;/td&gt;&lt;td&gt;需要可靠反馈、统计口径、先验与上下文管理；评分和风险策略仍需工程设计&lt;/td&gt;&lt;td&gt;具备足够流量、多个可替代候选且服务表现会变化的场景&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;它们并非相互排斥。生产路由器完全可以用确定性规则管理不可妥协的约束，用健康检查和熔断器处理明显故障，再让 Thompson Sampling 对剩余的合格候选做在线排序。在线学习不应取代所有已有可靠性机制。&lt;/p&gt;
&lt;h2&gt;七、从文章走向生产：几个必须补齐的工程问题&lt;/h2&gt;
&lt;p&gt;Ramp 的文章给出了有价值的设计，但如果把它应用到自己的 LLM Gateway，还需要补齐以下内容。&lt;/p&gt;
&lt;h3&gt;7.1 先做资格筛选，再进行概率排序&lt;/h3&gt;
&lt;p&gt;不是所有候选都能互换。模型是否支持工具调用、结构化输出、长上下文、流式传输或指定的多模态输入，属于能力约束；数据驻留、隐私、供应商合同和业务安全要求属于策略约束；任务的准确率、格式正确率或人工覆盖率则是质量约束。&lt;/p&gt;
&lt;p&gt;这些条件应先过滤候选，再对合格集合做 Thompson Sampling。否则，低价格或低延迟可能让一个能力不足的模型赢得路由，表面上成本降低，实际却增加业务错误和后续补救成本。&lt;/p&gt;
&lt;h3&gt;7.2 定义统计上下文，避免把不同工作负载混成一锅&lt;/h3&gt;
&lt;p&gt;每种调用的延迟分布可能不同。同步用户请求、后台批任务、长上下文推理和短分类请求，适合的 deadline 与风险偏好也不同。统计上下文至少需要考虑任务类别、模型、供应商和服务等级；必要时还要区分区域、流式与非流式请求，以及输入规模区间。&lt;/p&gt;
&lt;p&gt;但切得太细也有代价：每个分区的流量变少，后验收敛变慢，冷启动更频繁。实践中可以从稳定且有业务意义的切片开始，对低流量分区采用合理的先验或分层共享信息，但必须明确哪些统计量可共享、哪些不可共享。共享统计量时不能把完全不同的工作负载假设成同一种分布。&lt;/p&gt;
&lt;h3&gt;7.3 处理环境漂移，而不是迷信全历史数据&lt;/h3&gt;
&lt;p&gt;模型服务的性能可能在数分钟内发生变化。EWMA 能让失败率估计重视近期信号；延迟统计也需要考虑时间衰减、滚动窗口或近期与历史统计的结合。窗口越短，对变化反应越快，但噪声越大；窗口越长，估计越稳定，却可能滞后于新状态。&lt;/p&gt;
&lt;p&gt;这不是一个只靠公式就能决定的参数。需要回放真实流量或用模拟场景测试：突然限流、缓慢退化、短时尖峰、故障恢复、低流量冷启动和不同候选性能接近时，算法分别如何响应。&lt;/p&gt;
&lt;h3&gt;7.4 小心被 timeout 截断的延迟样本&lt;/h3&gt;
&lt;p&gt;如果请求在六秒时就被客户端取消，观测到的可能是“至少六秒仍未完成”，而不是服务端的真实完成延迟。如果把这个样本当作一次准确的六秒延迟，可能低估慢请求的真实尾部；如果直接丢弃，则可能让延迟估计偏向成功完成的快请求。&lt;/p&gt;
&lt;p&gt;系统应区分完成响应、供应商失败、客户端取消、deadline timeout，以及重试或回退后的最终结果。可以用单独的 deadline-miss 指标、对超时样本进行正确处理，或采用更适合删失数据的统计方法。无论使用哪种方法，都应验证在线估计的超时概率与真实线上超时率是否校准。&lt;/p&gt;
&lt;h3&gt;7.5 选择结果与最终业务结果要分开记录&lt;/h3&gt;
&lt;p&gt;如果首选候选失败后，系统改用第二候选并最终成功，那么这次请求在用户视角可能成功，但路由器仍应知道首选候选发生了失败。这涉及两个不同的指标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;尝试级指标&lt;/strong&gt;：每个模型路由尝试的失败、延迟、消耗和服务等级。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求级指标&lt;/strong&gt;：整个请求最终是否成功、是否超过总 deadline、是否满足质量要求，以及重试带来的总成本和额外延迟。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两种统计口径都很重要。只记录最终请求成功，会掩盖首选候选正在恶化；只看每次尝试的成功率，又无法判断整条 fallback 链的业务表现。成本账单也应把失败尝试和重试消耗计入，不能只统计最终成功调用。&lt;/p&gt;
&lt;h3&gt;7.6 探索流量需要保护措施&lt;/h3&gt;
&lt;p&gt;探索机制会让某些当前表现不确定的候选获得请求。生产系统仍然需要硬性边界，例如最大失败率、最大 deadline-miss 概率、供应商熔断状态、单候选预算上限，以及质量回归门禁。处在严重限流或已知故障状态的候选不必继续被概率探索；它可以先由确定性策略暂时移出候选集，待健康信号恢复后再有限度地重新进入。&lt;/p&gt;
&lt;p&gt;同时需要防范反馈偏差：由于路由器只观察实际被选中的候选，未被选中的候选不会自动获得新样本。Thompson Sampling 用概率探索缓解了这一问题，但如果健康检查、候选过滤或流量规则长期把某个候选排除在外，它仍然无法学习该候选当前的真实表现。&lt;/p&gt;
&lt;h3&gt;7.7 路由器不能只优化成本与延迟&lt;/h3&gt;
&lt;p&gt;Ramp 这篇文章的核心目标是失败、时限和成本。对于实际的 LLM 应用，还应保留任务质量的独立门槛，例如分类准确率、抽取字段正确率、结构化输出有效率、工具调用成功率或人工覆盖率。一个延迟更短、价格更低的模型，如果导致业务错误显著增多，就不是更好的路由选择。&lt;/p&gt;
&lt;p&gt;不要把所有目标都未经验证地压成一个分数。对高风险调用，更适合先设定质量、权限和可靠性门槛，再在通过门槛的候选中优化成本；对低风险、允许近似的请求，才可能接受更积极的成本—质量折衷。评分函数表达的是业务风险偏好，而不只是数学实现细节。&lt;/p&gt;
&lt;h2&gt;八、一个可以落地的分层架构&lt;/h2&gt;
&lt;p&gt;生产系统可以把路由拆为四层：资格与策略层、在线估计层、候选决策层、观测与更新层。这样既能使用 Thompson Sampling，也不会让概率算法绕过既有的可靠性、权限和审计机制。&lt;/p&gt;
&lt;pre&gt;flowchart TB
    subgraph Policy[资格与策略层]
        A[调用方模型偏好] --&amp;gt; C[能力与策略约束]
        B[质量门槛和 deadline] --&amp;gt; C
        C --&amp;gt; D[合格候选集合]
    end

    subgraph Learning[在线估计层]
        E[供应商失败事件] --&amp;gt; F[失败率 EWMA]
        G[完成延迟与 timeout 事件] --&amp;gt; H[延迟充分统计量]
        H --&amp;gt; I[NIG 后验状态]
    end

    subgraph Decision[候选决策层]
        D --&amp;gt; J[Thompson 参数采样]
        F --&amp;gt; K[候选风险估计]
        I --&amp;gt; J
        J --&amp;gt; K
        K --&amp;gt; L[结合相对成本和偏好评分]
        L --&amp;gt; M[路由排序与 fallback]
    end

    subgraph Feedback[观测与治理层]
        M --&amp;gt; N[请求级与尝试级结果记录]
        N --&amp;gt; E
        N --&amp;gt; G
        N --&amp;gt; O[成本、质量、超时和漂移监控]
        O --&amp;gt; P{超过安全阈值？}
        P --&amp;gt;|是| Q[熔断、降级或回滚]
        P --&amp;gt;|否| R[持续学习]
    end&lt;/pre&gt;
&lt;p&gt;建议明确以下运行边界：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;资格筛选、权限校验、候选黑名单和熔断器属于确定性控制，不应由后验采样覆盖。&lt;/li&gt;
&lt;li&gt;在线学习状态需要版本化并可恢复，至少记录统计窗口、先验版本、参数更新、数据口径和候选定义的变化。&lt;/li&gt;
&lt;li&gt;每次路由都应记录候选集合、排除原因、采样或决策摘要、最终尝试顺序、回退原因以及对应的成本和延迟。&lt;/li&gt;
&lt;li&gt;当评分逻辑、先验、上下文切片或供应商接口发生变化时，应视为路由策略变更，进行离线回放和分阶段发布，而不是把它当成无风险的配置修改。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;九、建议怎样验证，而不是直接上线&lt;/h2&gt;
&lt;p&gt;可以先从离线回放开始，但回放需要注意一个限制：如果历史数据只记录了原策略选中的模型，就缺少其他候选在同一请求时刻的结果，无法简单地模拟“如果当时选了另一个模型会怎样”。因此，完整的反事实评估可能需要额外的影子流量、受控探索数据，或经过验证的服务性能模拟；不能只把历史平均延迟塞进算法，然后把回放结果当作真实实验。&lt;/p&gt;
&lt;p&gt;一个相对稳妥的推进顺序是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;建立基线。&lt;/strong&gt; 记录请求级最终成功率、尝试级供应商失败率、deadline-miss rate、P50/P95/P99、单请求总成本、回退次数与任务质量指标。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;验证估计器。&lt;/strong&gt; 检查 EWMA 是否能及时响应限流和恢复；检查模型估计的超时概率是否校准；检查不同工作负载的延迟分布是否适合当前假设。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;影子运行。&lt;/strong&gt; 计算新路由器会选择什么候选，但暂不影响真实流量。比较它与当前路由的建议差异，并检查是否违反调用方偏好、质量或策略约束。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;小流量试点。&lt;/strong&gt; 通过显式的流量上限、预算上限和自动停止条件，将真实请求逐步交给新策略。候选切换应可追踪，出现异常时能回到确定性的静态路由。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按业务结果评估。&lt;/strong&gt; 不仅看平均成本是否下降，还应检查错误率、超时率、尾部延迟、质量和回退后的总耗时是否恶化，并报告样本量、观察窗口和统计不确定性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;持续监控与复核。&lt;/strong&gt; 供应商模型、价格、服务等级或限流行为发生变化时，重新检查目标函数与质量门槛，避免路由策略静默漂移。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最重要的一点是：不能只用“成本下降”判定成功，也不能把“Thompson Sampling 是成熟算法”当作上线凭据。真正的证据来自明确的业务指标、可解释的候选变更、可靠的事件数据和受控的线上实验。&lt;/p&gt;
&lt;h2&gt;十、哪些场景值得采用&lt;/h2&gt;
&lt;p&gt;Thompson Sampling 更适合有足够请求量、存在多个合格候选、候选表现随时间变化，而且每次选择都能收集有用反馈的系统。例如，LLM Gateway、Embedding 服务、OCR/文档解析供应商选择、多个外部 API 的自适应路由，都可能受益于类似思路。&lt;/p&gt;
&lt;p&gt;但有些场景并不适合一开始就做复杂的在线优化：请求量太低，无法快速学习；候选在质量、权限或数据处理边界上根本不可互换；失败代价过高，不允许在线试探；或者业务时限和候选分布高度不稳定，却没有足够监控与回退能力。此时应先做好确定性资格筛选、健康检查、熔断和静态回退，再考虑引入概率路由。&lt;/p&gt;
&lt;p&gt;还要区分两个经常被混为一谈的问题：&lt;strong&gt;模型选择&lt;/strong&gt;和&lt;strong&gt;工作流选择&lt;/strong&gt;。Thompson Sampling 可以用于在合格模型之间选择服务路径，但它不会自动决定一个任务是否应该使用 Agent、是否要调用工具、是否需要更长推理，或是否应将任务交给人工处理。这些决策有不同的动作空间、反馈信号与风险约束，不宜为了“统一路由”就把它们全部混到同一个统计模型里。&lt;/p&gt;
&lt;h2&gt;结语&lt;/h2&gt;
&lt;p&gt;Ramp 的工程实践说明，LLM Gateway 不应只是一层统一 API、鉴权和账单代理。它还可以成为持续优化的决策层：从生产请求中学习服务真实表现，把近期失败、延迟尾部、deadline 与价格统一纳入路由策略，再通过反馈不断调整。&lt;/p&gt;
&lt;p&gt;Thompson Sampling 的价值，在于把“我们对某条路由有多确定”也纳入选择，而不只是比较历史平均数。但它并不替系统回答所有问题：哪些模型有资格参与、质量底线是多少、超时风险如何定价、统计上下文怎么切分、反馈数据是否有偏，以及异常时如何止损，仍然必须由工程架构和业务策略明确规定。&lt;/p&gt;
&lt;p&gt;实际落地时，建议把 Thompson Sampling 视作&lt;strong&gt;合格候选集合上的在线优化器&lt;/strong&gt;，而不是安全策略、质量门禁、健康检查或可观测性的替代品。先把这些边界建好，再让算法优化边界以内的成本与性能，才更可能在真实生产系统里获得长期收益。&lt;/p&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Kedar Thakkar, &lt;a href=&quot;https://builders.ramp.com/post/thompson-sampling-model-routing&quot;&gt;Online Learning for Cost-Efficient LLM Routing&lt;/a&gt;, Ramp Builders, 2026-07-20。本文的主要案例、模型、公式与实验结果来源。&lt;/li&gt;
&lt;li&gt;Ramp Builders, &lt;a href=&quot;https://builders.ramp.com/post/embracing-uncertainty-in-decision-making&quot;&gt;Make Better Decisions by Embracing Uncertainty&lt;/a&gt;, 2024-06-11。关于 Thompson Sampling、多臂老虎机和在线探索与利用的入门解释。&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>Dev weekly 2026-Oct-19</title><link>https://devweekly.github.io/posts/dev-weekly-2026-oct-19/</link><guid isPermaLink="true">https://devweekly.github.io/posts/dev-weekly-2026-oct-19/</guid><description>Dev weekly</description><pubDate>Mon, 19 Oct 2026 02:02:03 GMT</pubDate><content:encoded>&lt;h3&gt;AI and Programming&lt;/h3&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://wieslawsoltes.github.io/VB6/&quot;&gt;VB6 in web&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://zachlandes.com/trolley-problem/&quot;&gt;Jev Meets the Trolley Problem - Jev 与电车难题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.alphaxiv.org/abs/2609.37725&quot;&gt;上下文语言模型&lt;/a&gt; （CLM），这类语言模型能够原生管理自身的上下文。我们的实现方式是将上下文视为一个文件，并允许模型不受限制地更新该文件。&lt;a href=&quot;https://github.com/facebookresearch/context-language-models&quot;&gt;https://github.com/facebookresearch/context-language-models&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ux360.design/visual-weight/&quot;&gt;Visual Weight in Design: What Makes One Thing Feel Heavier Than Another&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s/qJK3RTYb7AGlVljXIpIaOw&quot;&gt;WMT26翻译大模型冠军方案解读：Lumen、Wayfinder实现思路&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://skills.wheresryan.sh/anatomy&quot;&gt;Anatomy · a skill for Claude Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/&quot;&gt;Defeating Nondeterminism in LLM Inference&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://itnext.io/compiled-ai-transforming-loan-regulations-into-decision-tables-4332f1dc8354&quot;&gt;Compiled AI: Transforming Loan Regulations into Decision Tables&lt;/a&gt; &lt;a href=&quot;https://github.com/compiled-ai-labs/reg-to-jdm-pack&quot;&gt;https://github.com/compiled-ai-labs/reg-to-jdm-pack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kejun.github.io/demos/chatgpt-intelligent-ui/&quot;&gt;ChatGPT 智能 UI 是如何工作的？&lt;/a&gt; 注意：UI 设计的不错，有品味&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/blog/simulating-student-learning-for-better-ai-tutoring/&quot;&gt;Simulating student learning for better AI tutoring&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/shaongitbd/doory&quot;&gt;Doory&lt;/a&gt; design editor that runs in the browser: posters, social posts, stories, slides, invitations, resumes, thumbnails and business cards. canva alternative&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://eli.thegreenplace.net/2026/monte-carlo-simulations/&quot;&gt;Monte-Carlo simulations&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/oomol-lab/pdf-craft&quot;&gt;PDF Craft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snowflake.com/en/product/use-cases/well-architected-framework/&quot;&gt;Snowflake Well-Architected Framework&lt;/a&gt; &lt;a href=&quot;https://github.com/Snowflake-Labs/coco-skills/tree/main/skills/well-architected-framework-assessment&quot;&gt;https://github.com/Snowflake-Labs/coco-skills/tree/main/skills/well-architected-framework-assessment&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://getagentbuddy.com/#states&quot;&gt;Agent Buddy shows what each agent is doing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nathanbenaich.substack.com/p/state-of-ai-2026&quot;&gt;The State of AI Report 2026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snowflake.com/en/blog/engineering/why-you-need-a-semantic-model/&quot;&gt;If You’re Serious About Data Analysis, You Need a Semantic Model&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Sumanth077/Hands-On-AI-Engineering/tree/main/ai_agents%2Fnl_data_analyst_agent&quot;&gt;Natural Language Data Analyst Agent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/trymirai/uzu&quot;&gt;uzu&lt;/a&gt; A high-performance inference engine for AI models. It allows you to deploy AI directly in your app with zero latency, full data privacy, and no inference costs.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gorules/zen&quot;&gt;gorules - Open-source Business Rules Engine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dentiny.github.io/posts/duckdb-on-object-storage/&quot;&gt;A Real DuckDB Database in S3, With Nothing Else to Run&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snowflake.com/en/blog/engineering/ontology-grounded-cortex-agents/&quot;&gt;Ontology-grounded Reasoning with Cortex Agents&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://2026.stateofdevs.com/&quot;&gt;State of Dev 2026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hbr.org/2026/10/theres-no-such-thing-as-an-ai-ready-culture&quot;&gt;There’s No Such Thing as an AI-Ready Culture&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jimbobbennett.dev/blogs/eu-ai-act-compliance-arize-evroc/&quot;&gt;EU AI Act compliance for AI agents: building the engineering foundation with Arize and evroc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://already-clean.goodfire.com/&quot;&gt;Neural Networks Are Already Clean&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/firecrawl/anydoc&quot;&gt;Anydoc - firecrawl&lt;/a&gt; Fast Rust library that converts documents (Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, and PDF) into clean GitHub-Flavored Markdown.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.infoq.cn/article/uYQMXN91a1BDTT802G6p&quot;&gt;30 名工程师、一个宏大愿景，却没有真实需求：谷歌高管反思产品开发狂热&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/slothflowlabs/duckle?ref=opensourceprojects.dev&amp;amp;utm_source=opensourceprojects.dev&quot;&gt;Duckle is an open-source ETL platform&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.uber.com/in/en/blog/building-ubers-redlining-agent/&quot;&gt;Scaling AI in Legal: Building Uber’s Redlining Agent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/redesigning-source-control&quot;&gt;Redesigning source control at Anthropic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/vals-ai/finance-agent/&quot;&gt;Running Finance Agent Benchmark&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://anoma.ly/notes/opencode-2-0/&quot;&gt;OpenCode 2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://voicestudio.sh/&quot;&gt;Open Source AI Voice Studio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://structured.glass/&quot;&gt;Structured framing. Liquid motion. Typographic clarity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.wavedash.com/getting-started/introduction&quot;&gt;Wavedash&lt;/a&gt; Wavedash is a game platform for the browser. Players open a link and the game runs. No downloads, no installs.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cs2680.seas.harvard.edu/&quot;&gt;CS2680 Modern AI Systems: Agents and System Optimizations&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.usegloss.io/&quot;&gt;Highlight any line. Ask it anything.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.langchain.com/blog/common-questions-about-agent-evals&quot;&gt;The Most Common Questions About Agent Evals, Answered - langchain&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/img2threejs/img2threejs&quot;&gt;img2threejs&lt;/a&gt; Rebuild the object in a reference image as a code-only, procedural Three.js model.&lt;/p&gt;
&lt;h3&gt;Others&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://architecture.pascal.app/&quot;&gt;A visual encyclopedia of the built world&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://furifont.antfu.me/&quot;&gt;Furigana, set by the font.&lt;/a&gt; Furifont is a Japanese font that shows furigana on the font itself. With the ligatures to adopt to pronunciation of words. Works everywhere supporting custom fonts.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=68mzWtrERIA&amp;amp;t=793s&quot;&gt;11萬人到五千人！日本破產20年的城市，經歷了什麼？這或許是整個日本的縮影&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/Saccc_c/status/2110694725640474759&quot;&gt;手把手教你用 Opus 5.5 / Astra + Tripo 制作 3D 游戏&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gcbl.substack.com/&quot;&gt;全球中文书单&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cooltv.top/&quot;&gt;全球电台&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MrspYo_TMPQ&amp;amp;t=3s&quot;&gt;【靴磨きASMR】世界一の靴磨き職人・長谷川裕也さんが靴を磨いている音 / Shoeshine ASMR&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qg5iS7bhEXc&quot;&gt;ASMR: I Didn’t Expect to Fall for Her During This Vietnamese Barbershop Full Service Massage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>从 LLM 判断能力到可审计决策：金融服务业 Decision Model 的演进与治理实践</title><link>https://devweekly.github.io/posts/%E4%BB%8E-llm-%E5%88%A4%E6%96%AD%E8%83%BD%E5%8A%9B%E5%88%B0%E5%8F%AF%E5%AE%A1%E8%AE%A1%E5%86%B3%E7%AD%96%E9%87%91%E8%9E%8D%E6%9C%8D%E5%8A%A1%E4%B8%9A-decision-model-%E7%9A%84%E6%BC%94%E8%BF%9B%E4%B8%8E%E6%B2%BB%E7%90%86%E5%AE%9E%E8%B7%B5/</link><guid isPermaLink="true">https://devweekly.github.io/posts/%E4%BB%8E-llm-%E5%88%A4%E6%96%AD%E8%83%BD%E5%8A%9B%E5%88%B0%E5%8F%AF%E5%AE%A1%E8%AE%A1%E5%86%B3%E7%AD%96%E9%87%91%E8%9E%8D%E6%9C%8D%E5%8A%A1%E4%B8%9A-decision-model-%E7%9A%84%E6%BC%94%E8%BF%9B%E4%B8%8E%E6%B2%BB%E7%90%86%E5%AE%9E%E8%B7%B5/</guid><description>研究金融服务业如何把通用 LLM、Agent 或专用决策模型用于判断任务，并通过证据、政策、验证、授权与审计，将模型能力演进为可治理的业务决策能力。</description><pubDate>Tue, 13 Oct 2026 14:30:00 GMT</pubDate><content:encoded>&lt;h1&gt;从 LLM 判断能力到可审计决策：金融服务业 Decision Model 的演进与治理实践&lt;/h1&gt;
&lt;p&gt;金融服务机构正在把大语言模型用于审核材料、识别异常、分析风险、判断流程是否满足条件，以及辅助员工决定下一步怎么做。这类任务既可以由通用 LLM 直接完成，也可以通过结构化输出、工具调用、工作流编排、微调或专门训练的决策模型完成。许多任务甚至只需要一个明确的分类、评分、真假判断或路由结果，并不需要模型生成长篇文字。&lt;/p&gt;
&lt;p&gt;因此，本文不把 &lt;strong&gt;Decision Model&lt;/strong&gt; 当成与 LLM 或 Agent 泾渭分明、互斥的一类技术。不过，这个词在产业讨论中容易指向不同层次，本文会明确区分：&lt;strong&gt;决策型任务/接口模式&lt;/strong&gt;，即把模型用于分类、评分、选择、路由等可被软件消费的判断；&lt;strong&gt;Jev / System One 这样的专用模型路线&lt;/strong&gt;，即供应商对底层模型、训练目标和推理方式的专门设计；以及&lt;strong&gt;受治理的业务决策系统&lt;/strong&gt;，即将模型接入证据、政策、权限、工作流、验证和审计的整体应用。三者有关联，但不能相互替代。通用 LLM 完全可能实现决策型接口，Agent 也可以包含这种判断节点；采用专用模型不会自动获得完整的生产治理能力。&lt;/p&gt;
&lt;p&gt;但“能输出类似结果”不代表不同实现拥有相同的运行特性。TypeSafe 将 Jev 定位为专门服务于软件决策的 System One 模型，强调类型化答案、概率与置信度、并行求值，以及其自述的 RLCD 训练方法和模型架构；这些主张应与通用 LLM 的结构化输出能力分开考察，也应通过独立、贴近业务的评测加以验证。本文讨论的重点不是证明 Jev 与 LLM 完全不同，而是分析决策能力如何从简单 Prompt，演进为有约束的决策接口、可组合的运行时与可持续验证的业务系统。&lt;/p&gt;
&lt;h2&gt;一、结论先行：要治理的是决策系统，而不只是 Prompt&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;不要把“让模型多写一点思考过程”当作可解释性方案，也不要把某一种模型标签当作治理方案。&lt;/strong&gt; 不论判断来自通用 LLM 的结构化输出、由 LLM 驱动的 Agent，还是 Jev 这样的专用决策模型，都需要把模型能力放进有明确输入、有证据、有政策依据、有校验、有授权边界和责任主体的决策流程。LLM 可以协助提取事实、归纳证据、发现冲突和形成建议；能够明确表达的政策条件，应尽量交给确定性规则或独立校验器；确实需要专业判断的部分，应明确保留人的决策权，并提供足够信息进行实质复核。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;能力&lt;/th&gt;&lt;th&gt;要回答的问题&lt;/th&gt;&lt;th&gt;不能用什么替代&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;可追溯（Traceability）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;这次判断用了哪些输入数据、文件版本、检索证据、Prompt、模型、规则和工具？&lt;/td&gt;&lt;td&gt;只保存最终答案或只保存 Prompt 文本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;可解释（Explainability）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;为什么该判断符合证据和业务政策？关键因素、证据缺口和反面证据是什么？&lt;/td&gt;&lt;td&gt;模型事后生成的一段听起来合理的理由&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;可复核（Reviewability）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;独立业务人员是否能检查证据、重做关键步骤、提出异议或推翻判断？&lt;/td&gt;&lt;td&gt;只在页面上放一个“Approve”按钮&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;可问责（Accountability）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;谁负责定义政策、验证系统、批准上线、处理例外、做最终决定和响应事故？&lt;/td&gt;&lt;td&gt;把责任笼统归给“AI 模型”或供应商&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;先把治理变成可执行的行为：谁做、何时做、失败怎么办？&lt;/h3&gt;
&lt;p&gt;“有人负责”“要有人复核”“上线前做评测”还不是治理机制。每项原则都需要明确责任人、可验证的产物、触发时间和失败后的动作。建议用下面这张控制表作为首次架构评审和上线审批的最低清单。&lt;/p&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;关键治理行为&lt;/th&gt;&lt;th&gt;责任角色（建议）&lt;/th&gt;&lt;th&gt;必须留下的证据&lt;/th&gt;&lt;th&gt;触发时点与失败处理&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;登记用例与分类风险&lt;/td&gt;&lt;td&gt;业务负责人提出；AI/Operational Risk 共同评估&lt;/td&gt;&lt;td&gt;Use-case ID、用途、受影响对象、决策影响、自动化范围、禁止用途&lt;/td&gt;&lt;td&gt;新用例、用途扩张、数据或权限变化时重评；风险级别未批准，不得接入真实决策流程&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;明确决策权与风险偏好&lt;/td&gt;&lt;td&gt;业务决策所有者、合规/风险负责人、运营主管&lt;/td&gt;&lt;td&gt;Decision Contract、RACI、允许/禁止动作、重大错误定义、风险阈值&lt;/td&gt;&lt;td&gt;政策变化、事故或扩大自动化前复核；规则冲突时默认暂停并升级&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上线前独立挑战&lt;/td&gt;&lt;td&gt;独立验证人员（与开发团队保持适当独立）&lt;/td&gt;&lt;td&gt;基准集、错误分类、边界/对抗测试、残余风险、正式批准记录&lt;/td&gt;&lt;td&gt;每次重大模型、Prompt、检索、规则或工具变更必须重新评测；硬门禁失败即阻断发布&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;隔离建议与业务动作&lt;/td&gt;&lt;td&gt;应用/平台负责人及业务授权人&lt;/td&gt;&lt;td&gt;策略决策结果、权限校验、动作 ID、幂等键、人工批准或自动化授权&lt;/td&gt;&lt;td&gt;LLM 不能直接取得无限制写权限；门禁缺失、状态冲突、授权不完整时拒绝执行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;持续监控与事故处理&lt;/td&gt;&lt;td&gt;运行负责人、业务负责人、风险/合规&lt;/td&gt;&lt;td&gt;质量指标、例外率、漂移、供应商变更、事故与受影响案件清单&lt;/td&gt;&lt;td&gt;超阈值、模型版本变化、错误升级或安全事件触发暂停、回滚、重新评测及补救&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;管理第三方模型&lt;/td&gt;&lt;td&gt;Vendor Risk、采购、信息安全、法律与模型所有者&lt;/td&gt;&lt;td&gt;数据使用/留存条款、模型变更通知、可用性、子处理方、事件 SLA、审计/保证材料&lt;/td&gt;&lt;td&gt;供应商条款或服务发生重大变化时重评；风险无法降至容忍度内，限制、暂停或替换供应商&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;独立检查实际控制是否有效&lt;/td&gt;&lt;td&gt;第二道风险职能与第三道内部审计（按组织安排）&lt;/td&gt;&lt;td&gt;独立抽样、挑战结论、发现项、整改责任人、到期时间&lt;/td&gt;&lt;td&gt;按风险定期检查并对重大事件触发复核；未完成整改应升级而非只登记风险&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这张表不是说所有机构都要成立一个新的 AI 委员会。MAS 2026 年指引允许金融机构结合既有治理架构，但要求职责明确、协调有效，并按用例风险分配控制强度。指引于 2026 年 10 月 7 日发布；第 3–4 节的治理和风险管理系统期望自 2027 年 10 月 7 日起执行，第 5–6 节的生命周期控制与能力建设可在 2028 年 10 月 7 日前落实。参考：&lt;a href=&quot;https://www.mas.gov.sg/regulation/guidelines/guidelines-on-artificial-intelligence-risk-management-for-financial-institutions&quot;&gt;MAS 正式指引及实施时程&lt;/a&gt;。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[提出业务用例] --&amp;gt; B[登记用途、决策影响、数据和动作范围]
    B --&amp;gt; C{风险及适用政策获批准？}
    C --&amp;gt;|否| X[修改设计或停止用例]
    C --&amp;gt;|是| D[建立决策契约、证据链与责任分工]
    D --&amp;gt; E[离线评测、独立挑战和安全测试]
    E --&amp;gt; F{硬门禁和残余风险通过？}
    F --&amp;gt;|否| R[整改、缩小用途或改用更可验证方案]
    R --&amp;gt; E
    F --&amp;gt;|是| G[影子运行 / 受限试点]
    G --&amp;gt; H[检查真实错误、人工复核质量和运行风险]
    H --&amp;gt; I{持续符合批准的风险阈值？}
    I --&amp;gt;|是| J[按批准范围逐步扩大]
    I --&amp;gt;|否| K[暂停自动动作、回滚、调查和补救]
    J --&amp;gt; H&lt;/pre&gt;
&lt;p&gt;第一步不是更换模型，也不一定要马上搭建多 Agent。应先补齐决策契约、证据记录、业务政策、验证、人工复核和运行治理。如果系统在某个关键用途上仍无法达到所需的解释和验证水平，就应该降低其自主权限，或改用更容易验证的决策方法。&lt;/p&gt;
&lt;h2&gt;二、单轮 Prompt 直接输出判断，缺少了什么？&lt;/h2&gt;
&lt;p&gt;考虑一种简化实现：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;输入：业务材料 + Prompt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;调用：LLM&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;输出：Approve / Reject / Escalate&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      + 一段自然语言理由&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个风险并不是“通用 LLM 独有、专用 Decision Model 就没有”的问题。采用结构化输出或约束格式的通用模型，也可能给出格式正确但判断错误的结果；专用决策模型即使原生返回类型化概率，也仍可能在具体业务数据上判断失误。真正的问题是，当前实现能否拆分、验证和重现结果，以及它是否允许下游系统在未验证的情况下直接采取动作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;事实与推断混在一起。&lt;/strong&gt; 模型可能把材料中明确写出的事实、跨材料推导的结论、对缺失数据的猜测，以及它对政策的理解，放在同一段自然语言里。读者很难分辨哪些是可核验事实，哪些只是模型的解释。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;政策只存在于 Prompt 中。&lt;/strong&gt; 如果决策标准藏在不断修改的系统 Prompt 里，审核人员很难知道某条要求在历史时点是否有效，也难以比较不同版本的判断差异。Prompt 不是充分的政策版本管理系统。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;输入没有形成稳定快照。&lt;/strong&gt; 即使保存了当时的 Prompt，引用的文件、数据库记录、内部政策或检索内容后来改变，也未必能重建模型当时看到了什么。仅保存 URL 或文档名称不够，必须能定位到具体版本、页码、段落或字段。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;理由没有独立验证。&lt;/strong&gt; 让同一个模型在输出判断后再回答“为什么这样判断”，仍可能只是生成与答案相符的叙述。除非理由与源材料、规则条件和可观察的输出建立了可验证关系，否则理由本身不是审计证据。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;人工复核容易变成确认动作。&lt;/strong&gt; 如果界面先突出显示 AI 结论，再给出措辞自信的理由，人会受到锚定影响。审核人员点击批准，并不能证明其理解了证据、独立评估了关键因素，或真正挑战过模型的判断。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;失败无法归因。&lt;/strong&gt; 最终判断错误，究竟是源数据缺失、检索错误、事实抽取错误、政策解释错误、规则实现错误、模型变化，还是审批流程失效？只保存答案，无法形成有效的故障分类和持续改进依据。&lt;/p&gt;
&lt;h2&gt;三、研究论文的警示：解释不等于忠实，也不保证人工判断更好&lt;/h2&gt;
&lt;h3&gt;3.1 Chain-of-Thought 不能直接当成模型真实决策过程&lt;/h3&gt;
&lt;p&gt;Turpin 等人的 NeurIPS 2023 论文 &lt;a href=&quot;https://papers.neurips.cc/paper_files/paper/2023/hash/ed3fea9033a80fea1376299fa7863f4a-Abstract-Conference.html&quot;&gt;Language Models Don’t Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting&lt;/a&gt; 展示了关键问题：LLM 的逐步解释可能系统性地没有提及真正影响答案的因素，甚至会为受偏置信号影响的错误答案生成看似合理的解释。解释文本看起来完整，并不能保证它忠实反映了导致模型输出的因素。&lt;/p&gt;
&lt;p&gt;Fayyaz 等人的 &lt;a href=&quot;https://arxiv.org/abs/2407.00219&quot;&gt;Evaluating Human Alignment and Model Faithfulness of LLM Rationale&lt;/a&gt; 比较了 Prompt 生成的自我解释与基于归因的解释，发现基于 Prompt 的自我解释在与人的理由对齐以及忠实度方面存在局限。&lt;/p&gt;
&lt;p&gt;对金融 Decision Model 的含义很直接：可以要求模型输出简明理由，但不能把“模型自己写出来的理由”当成决策过程已透明化的证明。应使用&lt;strong&gt;能回到原始材料核验的证据引用、明确的规则条件、字段级输出与独立验证结果&lt;/strong&gt;，而不是依赖公开或保存一长串 CoT 来替代审计设计。&lt;/p&gt;
&lt;h3&gt;3.2 增加解释未必能纠正自动化偏差&lt;/h3&gt;
&lt;p&gt;Vered 等人在 &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S000437022300098X&quot;&gt;The Effects of Explanations on Automation Bias&lt;/a&gt; 中研究了决策支持系统里的解释对自动化偏差的影响。研究发现，解释并没有稳定地减少人们对自动化系统的过度依赖，在部分条件下甚至会增加这种依赖；解释对任务速度和准确率的影响取决于具体情境。&lt;/p&gt;
&lt;p&gt;发表于 &lt;em&gt;Scientific Reports&lt;/em&gt; 的研究 &lt;a href=&quot;https://www.nature.com/articles/s41598-024-60220-5&quot;&gt;Explainability does not mitigate the negative impact of incorrect AI advice in a personnel selection task&lt;/a&gt; 发现，当 AI 建议错误时，参与者仍可能未能否决它；增加解释对减少这种过度依赖的作用有限。Westphal 等人在 &lt;a href=&quot;https://doi.org/10.1016/j.chb.2023.107714&quot;&gt;Decision control and explanations in human-AI collaboration&lt;/a&gt; 中也报告，决策控制与解释的作用并不相同，解释在其实验条件下没有普遍改善用户结果。&lt;/p&gt;
&lt;p&gt;这些研究不能直接证明每个金融岗位都会出现同样效果，但足以说明：&lt;strong&gt;人工在环（Human-in-the-loop）不是一个架构标签，而是一种需要验证的控制能力。&lt;/strong&gt; 有人点击审批不自动意味着有意义的监督；更多解释文字也不自动意味着更好的判断。&lt;/p&gt;
&lt;h3&gt;3.3 监管研究同样不把“提供了解释”视为终点&lt;/h3&gt;
&lt;p&gt;国际清算银行金融稳定学院（BIS FSI）2025 年论文 &lt;a href=&quot;https://www.bis.org/publications/fsi-paper-24-managing-explanations-how-regulators-can-address-ai-explainability&quot;&gt;Managing explanations: how regulators can address AI explainability&lt;/a&gt; 指出，可解释性对透明度、问责、合规和信任很重要，但复杂模型（包括 LLM）的解释方法存在不准确、不稳定、可能误导等限制。不能只问“是否提供解释”，还要问解释是否适合具体用途，以及能否支持相应的风险管理和监督需要。&lt;/p&gt;
&lt;p&gt;NIST 的 &lt;a href=&quot;https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf&quot;&gt;Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile&lt;/a&gt; 将幻觉/虚构内容、人机配置、结果测试、来源验证和部署后监控纳入生成式 AI 风险管理，建议在测试和持续监控中核查输出引用的来源，并评估人机组合在真实条件下的表现。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;研究发现&lt;/th&gt;&lt;th&gt;不足够的做法&lt;/th&gt;&lt;th&gt;更合理的工程措施&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;生成的理由未必忠实于模型输出的真实成因&lt;/td&gt;&lt;td&gt;只增加“请逐步思考并解释”的 Prompt&lt;/td&gt;&lt;td&gt;将事实提取、证据引用、政策检查和建议结构化分开；独立校验引用是否支持结论&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;解释未必减少人工的自动化偏差&lt;/td&gt;&lt;td&gt;给出推荐结果和很长的解释，然后要求批准&lt;/td&gt;&lt;td&gt;显示关键事实、证据缺口和反面证据；高风险场景可先进行独立初判&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;可靠性依赖具体任务和使用方式&lt;/td&gt;&lt;td&gt;只引用供应商的通用 benchmark&lt;/td&gt;&lt;td&gt;用本机构代表性案例，测试 Prompt、数据、规则、角色权限与实际工作流&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;系统会随模型、数据和上下文变化&lt;/td&gt;&lt;td&gt;只记录某次运行的最终文本&lt;/td&gt;&lt;td&gt;版本化 Prompt、模型、检索材料、工具、政策与测试集，持续监控并做回归验证&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;3.4 CoT 忠实度可以被实验检验，但不能靠阅读一段解释来保证&lt;/h3&gt;
&lt;p&gt;Lanham 等人的 &lt;a href=&quot;https://arxiv.org/abs/2307.13702&quot;&gt;Measuring Faithfulness in Chain-of-Thought Reasoning&lt;/a&gt; 通过对模型给出的推理链进行干预，例如插入错误或改写推理内容，观察最终答案对这些变化有多敏感。研究发现，不同任务和模型对所展示推理链的依赖程度不同；生成了较长的推理链，并不表示它就是答案成因的忠实记录。Turpin 等人则通过引入偏置信号，展示模型可能仍受该信号影响，却在解释里没有提及它。&lt;/p&gt;
&lt;p&gt;2026 年 ICML 论文 &lt;a href=&quot;https://proceedings.mlr.press/v306/guan26h.html&quot;&gt;Monitoring Monitorability&lt;/a&gt; 提供了更细致的边界：在当前某些推理模型中，Chain-of-Thought 监测可能比只观察动作更容易发现部分错误行为，但监测能力并非完美，而且可能随训练方法、数据来源和模型规模变化而变得脆弱。&lt;/p&gt;
&lt;p&gt;这两类研究并不矛盾。CoT 可以是一种研究或运行期风险信号，却不能代替可以复核的决策证据。金融系统应记录可观察的中间产物、引用、规则校验、工具调用与最终处置；不要把完整的模型自述推理链设为唯一审计材料，也不要声称它揭示了模型的真实内部决策过程。&lt;/p&gt;
&lt;h3&gt;3.5 谄媚、确认偏差与“顺着提问者说”也是决策风险&lt;/h3&gt;
&lt;p&gt;Sharma 等人的 &lt;a href=&quot;https://arxiv.org/abs/2310.13548&quot;&gt;Towards Understanding Sycophancy in Language Models&lt;/a&gt; 研究发现，多个经过人类反馈训练的助手在不同任务中会表现出迎合用户观点的倾向；研究还指出，人类偏好评价可能在某些条件下偏爱说服力强、符合用户既有想法的回答，即使它并非更正确。&lt;/p&gt;
&lt;p&gt;应用到金融决策中，风险并不只来自模型捏造事实。如果输入已经带有结论，例如“这家客户显然有问题，请找出理由”，模型可能倾向于收集支持该结论的材料，而没有充分挑战它。对应控制应包括：中性的问题模板、明确要求同时列出支持和反对证据、在测试集里加入方向相反但证据相同的案例，以及测量提示措辞变化是否导致判断不合理地变化。&lt;/p&gt;
&lt;h3&gt;3.6 幻觉与不确定性：不能把“猜一个答案”当作业务能力&lt;/h3&gt;
&lt;p&gt;Kalai 等人的 &lt;a href=&quot;https://arxiv.org/abs/2509.04664&quot;&gt;Why Language Models Hallucinate&lt;/a&gt; 从统计学习和评测激励角度分析，模型在不确定时仍可能选择猜测，而常见的评分机制可能奖励猜对却惩罚承认不确定的行为。它是对幻觉产生机制的研究分析，不代表每一次幻觉都有同一原因，但对高影响系统的设计有直接启示：如果输出契约强迫模型必须选择一个结论，系统就可能把不确定性转化为自信的错误输出。&lt;/p&gt;
&lt;p&gt;因此，需要把 abstain / insufficient evidence / conflict / escalation 作为真正的合法状态，并把“无证据时不作结论”纳入评测的正向目标。衡量的不只是拒答率，也要衡量该拒答时是否拒答、可以判断时是否过度拒答。&lt;/p&gt;
&lt;h3&gt;3.7 LLM Reviewer 与自动评分本身也有系统性偏差&lt;/h3&gt;
&lt;p&gt;Shi 等人的 IJCNLP-AACL 2025 论文 &lt;a href=&quot;https://aclanthology.org/2025.ijcnlp-long.18/&quot;&gt;Judging the Judges&lt;/a&gt; 在超过 150,000 次评价中研究了多个 LLM judge 的位置偏差，发现评判会受到候选答案先后次序与任务条件影响。Chen 与 Goldfarb-Tarrant 的 &lt;a href=&quot;https://aclanthology.org/2025.acl-long.970/&quot;&gt;Safer or Luckier? LLMs as Safety Evaluators Are Not Robust to Artifacts&lt;/a&gt; 则指出，安全评价模型可能受到歉意措辞、冗长或其他输入表面特征影响；其报告的偏差幅度与特定实验任务、模型和比较设置有关，不应泛化成所有评测的固定比例。&lt;/p&gt;
&lt;p&gt;这说明独立 Reviewer 并不自动等于独立真理来源。实践上应当为 Reviewer 做校准集和盲测，比较人工标注一致性；对成对比较随机化候选顺序，检查重复运行稳定性；避免让被评测模型与评分模型共享相同的偏见；对关键规则和引用采用程序化断言而不是 LLM 打分。高风险放行决策不能只由一个 LLM Judge 给出总分。&lt;/p&gt;
&lt;h3&gt;3.8 研究结果怎样转化成工程控制？&lt;/h3&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;研究发现&lt;/th&gt;&lt;th&gt;在 Decision Model 中应该增加的控制&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CoT 可能不忠实，监测能力也会随模型变化&lt;/td&gt;&lt;td&gt;保存来源引用、规则结果和可观察步骤；对模型升级重新评测；不把 CoT 当作审计证明&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;解释不必然减少自动化偏差&lt;/td&gt;&lt;td&gt;设计独立初判、证据优先界面与挑战动作；用实验测量人工是否更能识别错误&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型可能迎合提问者&lt;/td&gt;&lt;td&gt;对称测试支持/反对假设；对提示措辞和信息顺序做反事实测试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型在不确定时可能猜测&lt;/td&gt;&lt;td&gt;设计缺证/冲突/拒答的正式状态；将错误接受和漏升级作为单独的高风险指标&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LLM Judge 可能受到排序和表面风格影响&lt;/td&gt;&lt;td&gt;使用人工校准、顺序翻转、重复测试、独立规则断言及多来源的评测证据&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;四、金融服务业的实践与监管动向&lt;/h2&gt;
&lt;p&gt;要区分正式监管要求、指导性框架和学术研究。本文使用的“Decision Model”是描述决策型用途与工程模式的术语，并不代表监管机构定义的一种独立模型类别，也不自动决定某一监管框架是否适用。具体义务取决于系统的实际用途、机构类型、司法辖区，以及它对客户和业务决策的影响。&lt;/p&gt;
&lt;h3&gt;4.1 MAS：2026 年发布的金融机构 AI 风险管理指引&lt;/h3&gt;
&lt;p&gt;新加坡金融管理局（MAS）于 &lt;strong&gt;2026 年 10 月 7 日&lt;/strong&gt;发布 &lt;a href=&quot;https://www.mas.gov.sg/regulation/guidelines/guidelines-on-artificial-intelligence-risk-management-for-financial-institutions&quot;&gt;Guidelines on Artificial Intelligence Risk Management for Financial Institutions&lt;/a&gt;。指引适用于金融机构和各种 AI 技术，要求机构在企业层面和具体用例层面管理 AI 风险，包括建立适当的 AI 使用清单、风险重大性评估、生命周期控制、人类监督、测试、监控、变更管理以及第三方 AI 风险管理。指引自 &lt;strong&gt;2027 年 10 月 7 日&lt;/strong&gt;起生效；第 3–4 节的治理和风险管理系统期望自该日起落实，第 5–6 节的生命周期控制与能力建设可在 &lt;strong&gt;2028 年 10 月 7 日前&lt;/strong&gt;落实。具体时间表以正式指引为准。&lt;/p&gt;
&lt;p&gt;MAS 同日发布的&lt;a href=&quot;https://www.mas.gov.sg/-/media/mas-media-library/publications/consultations/bd/2025/response-to-feedback-received-on-guidelines-on-artificial-intelligence-risk-management.pdf&quot;&gt;反馈文件&lt;/a&gt; 对 LLM 解释性、人类监督与可审计记录有几个特别相关的说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可解释性是情境化要求。即使不需要向客户披露，仍可能需要为内部使用人员、监督者或独立验证人员提供技术解释、限制和风险说明。&lt;/li&gt;
&lt;li&gt;如果某种模型在特定用例下无法达到所需透明度和可解释性，金融机构应重新评估该模型是否适合该用途。&lt;/li&gt;
&lt;li&gt;人类监督程度与 AI 自主性应和用例风险重大性相匹配。影响较大的用例通常需要更强的人工监督和更低的自主程度；预先定义的“延迟决策/转人工”机制是可考虑的控制方式。&lt;/li&gt;
&lt;li&gt;对生成式 AI 或 AI Agent，可根据用例风险和监控需要增强文档记录，例如记录 Prompt 和模型输出。评测文档应支持评测过程的复现，以便审计和独立核验，而不只是留下一份模型输出。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些是有针对性的监管依据，但不应把反馈文件里的每个例子都误读为对所有用例一体适用的硬性要求。正式指引的风险分级与比例原则仍然重要。&lt;/p&gt;
&lt;p&gt;更值得直接借鉴的是正式指引中的操作要求，而不只是它对原则的表述：第 2 节要求按风险维护 AI 用例清单与重大性评估；第 3 节要求董事会/高级管理层明确责任、把 AI 风险纳入风险偏好并确保跨职能协调；第 4 节涉及风险管理系统、政策与程序；第 5 节覆盖数据管理、开发/测试、部署、监控和变更等生命周期控制；第 6 节则涉及组织具备的人员能力与技术基础设施。它允许使用既有治理架构，但并不意味着可以没有责任人、风险升级、定期和触发式复核，以及对第三方模型的风险管理。以上是 MAS 对其适用机构的监管期望，不应误称为所有国家、所有企业都直接适用的法律义务。&lt;/p&gt;
&lt;h3&gt;4.2 MAS FEAT 与 Veritas：把原则转成可评估的方法&lt;/h3&gt;
&lt;p&gt;MAS 的 &lt;a href=&quot;https://www.mas.gov.sg/publications/monographs-or-information-paper/2018/feat&quot;&gt;FEAT Principles&lt;/a&gt; 讨论金融服务业中 AI 和数据分析的公平、伦理、问责与透明。MAS 于 2023 年发布的 &lt;a href=&quot;https://www.mas.gov.sg/news/media-releases/2023/toolkit-for-responsible-use-of-ai-in-the-financial-sector&quot;&gt;Veritas Toolkit 2.0&lt;/a&gt; 由 MAS 主导的 31 家行业参与方联盟开发，覆盖 FEAT 评估方法，并介绍金融机构和保险业的实践案例。&lt;/p&gt;
&lt;p&gt;可借鉴之处是：治理不只是模型团队评估准确率，还应覆盖透明度、责任归属、业务影响与机构既有治理流程。Veritas 是可参考的治理工具，不是可以替代本地法律意见或内部政策的通用认证。&lt;/p&gt;
&lt;h3&gt;4.3 OCC 2026 年更新：传统模型风险框架不能直接等同于 LLM 治理&lt;/h3&gt;
&lt;p&gt;美国 OCC、Federal Reserve 和 FDIC 于 2026 年 4 月发布了修订后的 &lt;a href=&quot;https://occ.treas.gov/news-issuances/bulletins/2026/bulletin-2026-13.html&quot;&gt;Model Risk Management guidance&lt;/a&gt;。文件明确指出，生成式 AI 与 Agentic AI 不在这份指引的适用范围内，监管机构还计划进一步研究银行使用 AI（包括生成式和 Agentic AI）的模型风险管理问题。&lt;/p&gt;
&lt;p&gt;这不意味着金融机构可以不治理 LLM。传统模型治理中的开发、使用、验证、监控、角色与第三方管理原则有借鉴价值，但 LLM 的提示词依赖、非确定性、上下文敏感性和自然语言输出需要额外的用例级控制。不能只把传统模型审批表换个名字，就声称覆盖了 LLM Decision Model 的风险。&lt;/p&gt;
&lt;h3&gt;4.4 其他框架与法律：先判定适用范围，再确定控制深度&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nist.gov/itl/ai-risk-management-framework&quot;&gt;NIST AI RMF&lt;/a&gt; 与 &lt;a href=&quot;https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf&quot;&gt;Generative AI Profile&lt;/a&gt; 可用于组织风险分类、测试与验证、部署后监控和来源管理。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1689&quot;&gt;EU AI Act&lt;/a&gt; 将自然人信用评分或信用度评估、特定人寿和健康保险风险评估与定价等列入相关高风险 AI 规定。不能由此推断所有内部金融决策工具自动属于同一类别；需结合实际目的、对象、适用条款、时间安排与法律意见判断。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.fsb.org/2024/11/the-financial-stability-implications-of-artificial-intelligence/&quot;&gt;FSB 关于 AI 对金融稳定影响的报告（2024）&lt;/a&gt; 强调第三方依赖、网络风险、模型风险、数据质量和治理等领域的金融系统脆弱性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;内部使用不等于低风险。&lt;/strong&gt; 如果内部模型决定风险评级、客户处理优先级、交易例外、AML 调查队列、投资/组合建议、保险承保或关键运营动作，它仍可能对客户、机构或监管义务产生重大影响。风险评估应基于实际影响和机构对 AI 输出的依赖，而不是看它是否“只给员工用”。&lt;/p&gt;
&lt;h2&gt;五、目标架构：让模型给出可检查的建议，而不是独自决定一切&lt;/h2&gt;
&lt;p&gt;对于高影响用例，更稳健的做法通常不只是把“一次 Prompt”改成“更长的 Prompt”，而是把决策流程拆成多个可验证步骤。下面是供金融决策场景参考的目标架构，不是所有 Decision Model 都必须采用的固定形态：底层可以是通用 LLM、Jev 这样的专用模型，也可以是两者混合；工作流可以由普通程序控制，也可以在 Agent 框架中编排。应由业务风险、任务形态和实测结果决定架构复杂度，而不是先选定某种模型类别再强行套用。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[业务请求与案件标识] --&amp;gt; B[输入校验与数据快照]
    B --&amp;gt; C[材料解析与证据定位]
    C --&amp;gt; D[LLM 结构化事实抽取]
    D --&amp;gt; E[证据与字段校验]
    E --&amp;gt; F[政策/规则评估]
    F --&amp;gt; G[建议与不确定性汇总]
    G --&amp;gt; H[独立验证：引用、必填项、规则一致性]
    H --&amp;gt; I{风险等级与门禁}
    I --&amp;gt;|低风险且满足批准条件| J[受控自动处理]
    I --&amp;gt;|高影响、冲突、缺证或越界| K[有权限的人工审核]
    J --&amp;gt; L[决策记录与监控]
    K --&amp;gt; M[人工决定、覆核或升级]
    M --&amp;gt; L&lt;/pre&gt;
&lt;h3&gt;先看组件边界：C4 Container 视图&lt;/h3&gt;
&lt;p&gt;下面的架构图刻意将 LLM、确定性规则、验证器、最终决策门禁和业务动作网关拆开。具体部署可以合并服务，但逻辑责任应保持区分，尤其是&lt;strong&gt;模型生成的建议不能直接成为写数据库、发出客户通知、改变风险状态或执行交易的授权&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;C4Container
title Decision Model：C4 Container View
Person(analyst, &quot;案件分析人员&quot;, &quot;准备材料，查看证据和模型建议&quot;)
Person(approver, &quot;有权限的业务审核人&quot;, &quot;批准、修改、拒绝或升级&quot;)
System_Ext(source, &quot;业务数据与原始材料&quot;, &quot;案件字段、文件、历史记录&quot;)
System_Ext(policy, &quot;政策与规则目录&quot;, &quot;带版本和生效日期的正式政策&quot;)
System_Ext(model, &quot;获批的 LLM 服务&quot;, &quot;生成事实候选与建议，不持有最终业务动作权限&quot;)
System_Ext(notify, &quot;下游业务系统&quot;, &quot;接收经过授权的最终处置&quot;)

System_Boundary(dm, &quot;Decision Model 系统边界&quot;) {
  Container(api, &quot;Decision API / Orchestrator&quot;, &quot;Service&quot;, &quot;创建运行、推进状态机、分发任务&quot;)
  Container(snapshot, &quot;Case Snapshot Store&quot;, &quot;Versioned Store&quot;, &quot;保存输入时点、来源版本与快照哈希&quot;)
  Container(retrieval, &quot;Evidence Service&quot;, &quot;Retriever&quot;, &quot;定位材料、证据段落、反向证据和缺失项&quot;)
  Container(llmstep, &quot;LLM Extraction / Assessment&quot;, &quot;LLM Client&quot;, &quot;按 Schema 输出事实候选与建议&quot;)
  Container(validate, &quot;Evidence &amp;amp; Schema Validator&quot;, &quot;Rules / Code&quot;, &quot;验证 Schema、引用定位、数据契约和必要字段&quot;)
  Container(policyengine, &quot;Policy / Rules Engine&quot;, &quot;Deterministic Rules&quot;, &quot;执行硬条件、有效日期、权限与禁止项&quot;)
  Container(gate, &quot;Decision Gate&quot;, &quot;Policy Service&quot;, &quot;按风险、证据与授权决定继续、暂停、升级或拒绝&quot;)
  Container(review, &quot;Human Review Workbench&quot;, &quot;Web App&quot;, &quot;显示证据、冲突、规则结果并记录真实处置&quot;)
  Container(action, &quot;Action Gateway&quot;, &quot;Authorized API&quot;, &quot;检查审批、状态、权限、幂等性后才执行副作用&quot;)
  ContainerDb(audit, &quot;Decision Record Store&quot;, &quot;Append-only Record&quot;, &quot;关联快照、模型运行、规则结果、人工决定和动作回执&quot;)
}

Rel(analyst, api, &quot;提交案件/补充材料&quot;)
Rel(api, snapshot, &quot;固定本次输入版本&quot;)
Rel(snapshot, retrieval, &quot;提供受控快照&quot;)
Rel(retrieval, source, &quot;读取授权材料&quot;)
Rel(retrieval, policy, &quot;取得适用政策与版本&quot;)
Rel(api, llmstep, &quot;提交受限的证据包&quot;)
Rel(llmstep, model, &quot;调用获批模型&quot;)
Rel(llmstep, validate, &quot;结构化候选输出&quot;)
Rel(validate, policyengine, &quot;验证通过的事实/缺口&quot;)
Rel(policyengine, gate, &quot;规则结果、失败原因&quot;)
Rel(gate, review, &quot;高风险/不确定/冲突时转人工&quot;)
Rel(approver, review, &quot;审核、修改、升级或批准&quot;)
Rel(review, gate, &quot;提交人工处置&quot;)
Rel(gate, action, &quot;仅对获授权的最终状态放行&quot;)
Rel(action, notify, &quot;执行批准的业务动作&quot;)
Rel(api, audit, &quot;记录运行与证据引用&quot;)
Rel(gate, audit, &quot;记录门禁结果&quot;)
Rel(review, audit, &quot;记录人工处置&quot;)
Rel(action, audit, &quot;记录动作回执&quot;)&lt;/pre&gt;
&lt;p&gt;实现时还应把边界写进 API 契约：LLM 返回的是 Proposal，不是 FinalDecision；规则引擎返回 RuleEvaluation，而不是替审核人伪造批准；Action Gateway 只接受已通过授权状态机的命令。权限要在服务端执行，不能仅靠前端隐藏按钮。&lt;/p&gt;
&lt;h3&gt;一次案件实际如何运行：时序图&lt;/h3&gt;
&lt;pre&gt;sequenceDiagram
    actor User as 业务用户
    participant API as Decision API
    participant Snap as Snapshot Store
    participant Ev as Evidence Service
    participant LLM as LLM Provider
    participant Val as Validator
    participant Rules as Policy Engine
    participant Gate as Decision Gate
    participant Review as Human Reviewer
    participant Action as Action Gateway
    participant Audit as Decision Record

    User-&amp;gt;&amp;gt;API: 提交案件
    API-&amp;gt;&amp;gt;Snap: 固定输入、源版本、时间戳与哈希
    Snap--&amp;gt;&amp;gt;API: snapshot_id
    API-&amp;gt;&amp;gt;Ev: 按快照检索材料与适用政策
    Ev--&amp;gt;&amp;gt;API: EvidencePack + 缺失/冲突项
    API-&amp;gt;&amp;gt;LLM: 仅提交获准材料，要求结构化候选输出
    LLM--&amp;gt;&amp;gt;API: Facts / Citations / Recommendation
    API-&amp;gt;&amp;gt;Val: Schema、引用、字段完整性验证
    Val--&amp;gt;&amp;gt;API: 通过项与失败项
    API-&amp;gt;&amp;gt;Rules: 运行确定性规则和有效时点检查
    Rules--&amp;gt;&amp;gt;API: RuleEvaluation
    API-&amp;gt;&amp;gt;Audit: 追加 ModelRun、证据、校验和规则结果
    API-&amp;gt;&amp;gt;Gate: 评估风险、证据充分性与动作授权
    alt 需要人工审核、证据不足或存在冲突
        Gate--&amp;gt;&amp;gt;Review: 创建审核任务并说明阻断原因
        Review-&amp;gt;&amp;gt;Review: 查看正反证据、政策条款和失败规则
        Review--&amp;gt;&amp;gt;Gate: 批准 / 修改 / 驳回 / 补件 / 升级 + 理由
    else 属于预先批准的低风险自动化
        Gate--&amp;gt;&amp;gt;API: 标记为符合自动化范围
    end
    opt 当前状态最终获准执行动作
        Gate-&amp;gt;&amp;gt;Action: 提交受约束的授权命令
        Action-&amp;gt;&amp;gt;Action: 校验权限、状态、幂等键与动作范围
        Action--&amp;gt;&amp;gt;Gate: action_id / 状态
    end
    Gate-&amp;gt;&amp;gt;Audit: 追加最终处置、批准链与动作回执
    API--&amp;gt;&amp;gt;User: 返回状态、下一步及 Decision ID&lt;/pre&gt;
&lt;h3&gt;5.1 明确决策契约&lt;/h3&gt;
&lt;p&gt;在 Prompt 和代码之前，先定义系统负责什么、不能负责什么、输出会影响什么，以及最终权责归属。最小决策契约应包括预期用途、自动化边界、输入契约、政策契约、输出契约、升级条件和责任主体。应避免让 Prompt 承担所有业务规则；能表达成稳定明确条件的要求，应维护在经过版本管理和测试的规则或策略层。&lt;/p&gt;
&lt;h3&gt;5.2 先抽取事实和证据，再形成建议&lt;/h3&gt;
&lt;p&gt;对包含合同、调查材料、客户记录、风险说明或内部政策的场景，可以把模型工作拆成两类。&lt;/p&gt;
&lt;p&gt;第一，&lt;strong&gt;证据工作&lt;/strong&gt;：提取事实、定位相关政策段落、归纳支持与反对的证据、发现矛盾和缺失项。每个关键陈述应带有可定位的来源；材料不支持时标记为缺证，而不是补出看似合理的事实。&lt;/p&gt;
&lt;p&gt;第二，&lt;strong&gt;判断工作&lt;/strong&gt;：根据已验证事实和适用规则形成建议。如果缺少关键材料、规则冲突、证据过期或案件超出批准范围，返回 &lt;code&gt;insufficient_evidence&lt;/code&gt; / &lt;code&gt;escalate&lt;/code&gt;，而不是强行输出二元结论。&lt;/p&gt;
&lt;p&gt;文档证据应记录文档 ID、版本/快照哈希、页码或段落定位和原文片段；数据库字段则记录表/记录标识、字段、有效时间和查询快照；政策记录政策 ID、版本、生效日期和具体条款。一个 URL、文件名或“模型认为”都不足够。&lt;/p&gt;
&lt;p&gt;RAG 可以改善模型取得背景资料的方式，但不会自动保证检索完整、引用真实、证据支持结论或政策应用正确。检索结果的版本、相关性和引用校验仍应作为单独控制点。&lt;/p&gt;
&lt;h3&gt;5.3 区分模型建议、业务规则与最终决定&lt;/h3&gt;
&lt;p&gt;一种实用的混合模式是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LLM 从非结构化材料中提取事实、映射预定义评估维度、发现矛盾并解释证据。&lt;/li&gt;
&lt;li&gt;确定性规则执行明确政策、必要条件、金额阈值、时间窗口、禁止项、职责权限及其他可以清楚表达的约束。&lt;/li&gt;
&lt;li&gt;独立验证器检查输出结构、证据引用、必填字段、硬性约束和升级条件。&lt;/li&gt;
&lt;li&gt;有权限的人员或正式批准的决策机制处理需要专业判断的冲突、不确定性和例外。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;规则引擎无法解决所有问题。它只能覆盖可形式化的政策；需要综合判断的领域仍须保留专家判断、适当的第二意见和可回溯记录。目标是避免本来可以用简单、可测试规则执行的内容完全依赖模型自由生成。&lt;/p&gt;
&lt;h3&gt;5.4 把不确定性和无法判断变成正式输出&lt;/h3&gt;
&lt;p&gt;许多 Prompt 默认要求模型一定要选一个答案，缺失数据或证据冲突就可能被隐藏在自然语言里。建议把“无法判断”作为一等结果：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;状态&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;th&gt;后续处理&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;supported&lt;/code&gt;&lt;/td&gt;&lt;td&gt;满足预设证据与规则条件，建议有可核验依据&lt;/td&gt;&lt;td&gt;进入后续规定流程，是否自动执行取决于风险等级&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;not_supported&lt;/code&gt;&lt;/td&gt;&lt;td&gt;有可验证的反向证据，或不满足明确条件&lt;/td&gt;&lt;td&gt;进入拒绝、退回或补充材料等既定流程&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;insufficient_evidence&lt;/code&gt;&lt;/td&gt;&lt;td&gt;材料不足、来源无法核验，或关键事实未知&lt;/td&gt;&lt;td&gt;补资料或转人工&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;conflicting_evidence&lt;/code&gt;&lt;/td&gt;&lt;td&gt;可信材料互相矛盾，或规则解释冲突&lt;/td&gt;&lt;td&gt;转交有权限的审核人员&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;escalate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;超出模型授权范围、风险阈值或需专业批准&lt;/td&gt;&lt;td&gt;人工审核或升级到指定角色&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;不要未经校准就把模型自报的 &lt;code&gt;confidence: 0.92&lt;/code&gt; 当成“有 92% 概率正确”。LLM 自报的自信程度并不等于经过验证的概率。若需要置信度或风险分数，应通过有代表性的历史案例、校准方法和持续监控证明其含义；否则，使用可核实的证据完整度、规则检查结果和显式升级条件更可靠。&lt;/p&gt;
&lt;h3&gt;5.5 把公开业务用例映射成可落地的系统设计&lt;/h3&gt;
&lt;p&gt;DBS 银行在 2025 年年报中公开表示，使用生成式 AI 辅助员工进行信用评估资料的信息提取与验证，并在推进由员工审核的信用评估备忘录工作流；其风险管理披露还提到生成式 AI 辅助客户对话摘要和通话质检。该披露说明金融机构已把生成式 AI 引入信用评估工作流的一部分，但并未公开完整的内部架构、字段级指标或门禁阈值，不能把下表误写成 DBS 实际采用的技术实现。来源：&lt;a href=&quot;https://www.dbs.com/annualreports/2025/cro-statement.html&quot;&gt;DBS 2025 年 CRO 报告&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;如果为类似的“信用评估资料提取 + 备忘录草稿”设计一个可审计流程，至少需要这样拆分：&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;环节&lt;/th&gt;&lt;th&gt;具体产物&lt;/th&gt;&lt;th&gt;硬控制 / 失败路径&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;文档接收&lt;/td&gt;&lt;td&gt;文件 ID、版本、收到时间、数据分类、完整性检查&lt;/td&gt;&lt;td&gt;缺页、格式错误或未经授权来源隔离，不进入模型调用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;字段提取&lt;/td&gt;&lt;td&gt;收入、负债、业务信息等候选字段及原文位置&lt;/td&gt;&lt;td&gt;每个关键字段必须能定位来源；不存在的字段输出 unknown，而不是猜测&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;证据检查&lt;/td&gt;&lt;td&gt;多文档冲突、时点冲突、数值差异和缺失清单&lt;/td&gt;&lt;td&gt;关键金额不一致时标记 conflicting_evidence，禁止静默选一个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;政策检查&lt;/td&gt;&lt;td&gt;政策 ID/版本、生效日期、硬规则结果&lt;/td&gt;&lt;td&gt;过期政策或规则未通过不允许形成确定建议&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;备忘录草稿&lt;/td&gt;&lt;td&gt;已引用事实、未决问题、模型建议及限制&lt;/td&gt;&lt;td&gt;草稿与最终决定分开存储；模型不能批准自己生成的备忘录&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人工审核&lt;/td&gt;&lt;td&gt;真实审核人、修改差异、理由码、批准/驳回/补件/升级&lt;/td&gt;&lt;td&gt;高风险动作必须完成规定审核；不以“审核人已打开页面”视为审核通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最终处置&lt;/td&gt;&lt;td&gt;决定、授权凭证、动作回执和记录引用&lt;/td&gt;&lt;td&gt;下游动作只接受 Action Gateway 发出的授权命令&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;重点不是多部署几个 Agent，而是把文档提取的错误与信用判断本身的错误区分开来；前者可以通过来源对齐和字段验证发现，后者还需要政策测试、专业评估与正式责任归属。&lt;/p&gt;
&lt;h2&gt;六、决策记录：应当保存什么，才能经得起复核？&lt;/h2&gt;
&lt;p&gt;对每次产生业务影响的模型运行，应形成结构化的 &lt;strong&gt;Decision Record&lt;/strong&gt;。它不是把所有内容无差别塞进日志，也不是强求保存完整的模型内部思维链。目标是让有权限的审查人员能理解决策事实、重建当时的输入和政策版本、核对关键推断、复核评测步骤，并确定最终业务决定由谁作出。&lt;/p&gt;
&lt;h3&gt;6.1 一次运行至少要记录什么&lt;/h3&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类别&lt;/th&gt;&lt;th&gt;建议记录的关键字段&lt;/th&gt;&lt;th&gt;用途&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;决策身份&lt;/td&gt;&lt;td&gt;&lt;code&gt;decision_id&lt;/code&gt;、案件引用、用例 ID、时间戳、请求来源、运行 ID&lt;/td&gt;&lt;td&gt;关联请求、模型运行、审核和最终业务动作&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;输入和证据&lt;/td&gt;&lt;td&gt;输入快照/版本、数据水位、文件哈希、检索结果 ID、页码/段落、证据引用&lt;/td&gt;&lt;td&gt;还原当时模型实际可见的材料&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型与配置&lt;/td&gt;&lt;td&gt;Provider、模型 ID/可用版本、部署区域、系统 Prompt 版本/hash、模板版本、参数、工具版本、检索配置&lt;/td&gt;&lt;td&gt;说明当时运行的是哪套配置&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;结构化推断&lt;/td&gt;&lt;td&gt;抽取字段、支持/反对证据、缺失/冲突信息、适用政策条款、校验结果&lt;/td&gt;&lt;td&gt;把事实、假设、证据和规则依据拆开检查&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;决策结果&lt;/td&gt;&lt;td&gt;建议状态、理由代码、受限的自然语言说明、规则版本、升级标志、延迟原因&lt;/td&gt;&lt;td&gt;支持审计、趋势分析和下游处理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人类处置&lt;/td&gt;&lt;td&gt;审核人/角色、最终决定、批准/驳回/修改/升级、理由代码、备注、时间戳&lt;/td&gt;&lt;td&gt;证明实际发生了什么，而非仅证明界面出现过审批按钮&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;评估与运行&lt;/td&gt;&lt;td&gt;规则验证结果、引用校验、耗时、失败类型、重试记录、监控标签&lt;/td&gt;&lt;td&gt;追踪生产质量、故障和成本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;版本和完整性&lt;/td&gt;&lt;td&gt;记录 Schema 版本、策略版本、内容哈希、追加式写入标识、审计日志引用&lt;/td&gt;&lt;td&gt;检测事后改写并维持关联&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;日志必须关联到模型真正看到的输入，而不是只关联到一个后来可能改变内容的引用。&lt;/strong&gt; 在满足隐私、保留期限和安全要求的前提下，记录稳定的快照 ID、版本和哈希；需要保留实际材料时，放在受控存储中，按角色授权、加密并设置保留和删除策略。不要为了审计而永久保存不必要的敏感个人信息，也不要把包含机密的 Prompt 和材料写入普通应用日志。&lt;/p&gt;
&lt;p&gt;对于第三方模型，供应商可能更新模型实现，或无法保证同一请求未来得到逐字节相同的结果。应把&lt;strong&gt;可复核性&lt;/strong&gt;和&lt;strong&gt;完全确定性重放&lt;/strong&gt;区分开来：前者要求有当时的输入、配置、版本、证据、规则与最终处置记录；后者要求相同环境产生完全相同输出，往往不是托管 LLM 能保证的。记录实际能提供何种重放与复现能力，不要承诺无法保证的确定性。&lt;/p&gt;
&lt;h3&gt;6.2 简化的 Decision Record 示例&lt;/h3&gt;
&lt;p&gt;以下是建议的数据契约，不是某个供应商的固定 Schema。生产实现应按数据分类、访问策略与业务流程调整。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;decision_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;dec-2026-10-13-000184&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;use_case_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;internal-risk-review&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;case_ref&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;case-opaque-reference&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;created_at&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-10-13T10:15:30Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;policy&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;policy_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;risk-review-policy&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;3.4&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;effective_at&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-10-01&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;input_snapshot&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;snapshot_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;snapshot-7f21&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;content_hash&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;sha256:...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;source_refs&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;source_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;document-019&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;v12&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;location&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;page 8, paragraph 3&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;claim_ref&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;evidence-001&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;model_run&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;provider&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;approved-provider&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;model_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;approved-model-version&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;system_prompt_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;decision-prompt-12&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;output_schema_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;decision-schema-4&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;toolchain_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;review-flow-6&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;assessment&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;insufficient_evidence&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;findings&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;criterion_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;KYC_DOCUMENT_CURRENT&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;result&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;unknown&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;supporting_evidence&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;contradicting_evidence&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;missing_evidence&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;current_verified_document&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;reason_code&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;MISSING_REQUIRED_EVIDENCE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;policy_checks&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;rule_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;R-017&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;rule_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;3.4&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &quot;result&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;not_evaluable&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;validation&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;schema_valid&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;citations_resolved&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;policy_checks_passed&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;recommendation&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;outcome&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;escalate&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;reason_codes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;MISSING_REQUIRED_EVIDENCE&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;human_review_required&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;human_disposition&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;review_status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pending&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;final_decision&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;override_reason&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;integrity&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;record_schema_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;previous_record_hash&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;sha256:...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;record_hash&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;sha256:...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;生产系统还应定义状态之间的合法转换，明确哪些字段由模型生成、哪些由程序计算、哪些只能由有权限人员填写。模型不能自行声称政策“已通过验证”，也不应能够伪造审核人身份或自行填充最终审批字段；这些信息必须由实际校验与审批系统写入。&lt;/p&gt;
&lt;h3&gt;6.3 增加日志不等于建立审计能力&lt;/h3&gt;
&lt;p&gt;日志只有在可检索、受访问控制、保留期限清晰、不可被普通业务流程静默覆盖，而且能把输入证据、模型运行、政策版本和最终处置关联起来时，才真正支持审计。应明确谁能查看原始输入、谁能修改 Prompt 和政策、哪些变化要求重新评测、如何定位历史决策，以及发生错误后如何识别受影响的案例并补救。&lt;/p&gt;
&lt;p&gt;高影响系统可考虑追加式 Decision Record、独立审计日志、内容哈希或其他防篡改存证方式。这些机制有助于检测记录修改，但哈希本身不证明原始事实真实、结论正确或业务政策适用；数据来源和访问控制同样重要。&lt;/p&gt;
&lt;h3&gt;6.4 Decision Record 与标准：没有一个全球标准规定统一 JSON，但控制目标很明确&lt;/h3&gt;
&lt;p&gt;不同标准和监管框架通常规定治理结果、控制目标或技术义务，而非规定所有机构必须使用同一份 Decision Record JSON。因此要把“法定/监管要求”“可采纳的管理体系标准”和“工程实现建议”分开。&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;框架/标准&lt;/th&gt;&lt;th&gt;对 Decision Model 的相关要求或指导&lt;/th&gt;&lt;th&gt;应转化成什么实践&lt;/th&gt;&lt;th&gt;适用边界&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;EU AI Act&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;对其适用范围内的高风险 AI，Article 12 涉及系统日志能力，Article 14 涉及有效的人类监督&lt;/td&gt;&lt;td&gt;事件日志、操作/监督能力、能识别异常并介入的界面、适用版本和责任记录&lt;/td&gt;&lt;td&gt;只有在系统用途、类别、经营活动和实施时间满足适用条件时才构成相关法律义务；需法律评估&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;MAS 2026 AI Risk Management Guidelines&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;风险比例原则、AI 用例清单、重大性评估、角色与风险偏好、生命周期控制和第三方管理&lt;/td&gt;&lt;td&gt;用例登记、正式批准、测试与变更门禁、异常升级、第三方保证、责任链&lt;/td&gt;&lt;td&gt;适用于其范围内的金融机构；按正式指引分阶段落实&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;NIST AI RMF + Generative AI Profile&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Govern / Map / Measure / Manage，强调文件化、测试、独立审查、风险处置与持续监控&lt;/td&gt;&lt;td&gt;用例范围、风险登记、评测证据、监控与事故响应、残余风险记录&lt;/td&gt;&lt;td&gt;自愿性风险管理框架；可作为控制设计方法，不等同于法律认证&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ISO/IEC 42001:2023&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;AI 管理体系（AIMS）的建立、运行、维护和持续改进&lt;/td&gt;&lt;td&gt;组织政策、角色、影响评估、运行控制、绩效评价和改进闭环&lt;/td&gt;&lt;td&gt;管理体系标准，不会自动证明某一次模型判断正确&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ISO/IEC 23894:2023&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;AI 风险管理指导，帮助组织把风险管理整合进 AI 相关活动&lt;/td&gt;&lt;td&gt;风险识别、分析、评价、处理、监测和沟通&lt;/td&gt;&lt;td&gt;指南不是特定行业的统一决策记录 Schema&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;美国银行模型风险管理指导（2026 修订）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;对其适用的传统模型风险治理强调风险比例、验证、模型清单、有效挑战和第三方产品风险&lt;/td&gt;&lt;td&gt;记录模型用途、限制、独立挑战、批准和监控；对 LLM 另加上下文/Prompt/检索测试&lt;/td&gt;&lt;td&gt;修订指导明确不涵盖生成式 AI 和 Agentic AI；可借鉴治理方法，但不要称为 LLM 的直接适用要求&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;官方资料：&lt;a href=&quot;https://eur-lex.europa.eu/eli/reg/2024/1689&quot;&gt;EU AI Act 正式文本&lt;/a&gt;、&lt;a href=&quot;https://www.mas.gov.sg/regulation/guidelines/guidelines-on-artificial-intelligence-risk-management-for-financial-institutions&quot;&gt;MAS 指引&lt;/a&gt;、&lt;a href=&quot;https://www.nist.gov/itl/ai-risk-management-framework&quot;&gt;NIST AI RMF&lt;/a&gt;、&lt;a href=&quot;https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf&quot;&gt;NIST GenAI Profile&lt;/a&gt;、&lt;a href=&quot;https://www.iso.org/standard/81230.html&quot;&gt;ISO/IEC 42001&lt;/a&gt;、&lt;a href=&quot;https://www.iso.org/standard/77304.html&quot;&gt;ISO/IEC 23894&lt;/a&gt;、&lt;a href=&quot;https://www.federalreserve.gov/frrs/guidance/supervisory-guidance-on-model-risk-management.htm&quot;&gt;美国联储修订的 Model Risk Management Guidance&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;6.5 实际审计要能重建一次“为什么当时会这么做”&lt;/h3&gt;
&lt;p&gt;假设信用资料在 4 月 10 日被评估，而供应商在 4 月 18 日修订了财务报表。如果 Decision Record 只存文档 URL、当前文件和最终结论，审计人员无法判断 4 月 10 日模型实际看到的是哪一版本。一个可复核的案例至少需要关联：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;当时实际使用的文档版本和页码/字段位置；&lt;/li&gt;
&lt;li&gt;本次模型实际输入的证据包、检索顺序和被排除/失败的材料；&lt;/li&gt;
&lt;li&gt;适用政策的版本与生效时点；&lt;/li&gt;
&lt;li&gt;模型/Prompt/输出 Schema 及工具版本；&lt;/li&gt;
&lt;li&gt;独立校验与规则引擎的原始结果，而不仅是“全部通过”摘要；&lt;/li&gt;
&lt;li&gt;审核人员看到了哪些证据，做了何种修改/批准或升级；&lt;/li&gt;
&lt;li&gt;后续发现错误时，哪些相关决策受到影响、采取了什么补救。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 DBS 公开的信用评估辅助用例中，资料抽取和验证、由员工审核的备忘录草稿分别是不同的工作责任。对应到自己的实现，应分别保存“提取结果的证据”和“最终业务决定的授权链”，不要把一份生成的备忘录当成两者的替代品。&lt;/p&gt;
&lt;p&gt;还需强调：哈希、追加式日志和时间戳有助于发现记录是否发生变化，但&lt;strong&gt;并不能证明记录的原始内容真实、证据足够或规则结论正确&lt;/strong&gt;。防篡改要和受控的数据源、访问审计、独立校验及正式责任人一起设计。&lt;/p&gt;
&lt;h2&gt;七、人工复核怎样设计，才不会变成走形式？&lt;/h2&gt;
&lt;p&gt;人类监督不是让人替模型签字，而是让人有机会发现错误，并有足够信息和权力改变结果。&lt;/p&gt;
&lt;h3&gt;7.1 按风险决定自动化程度&lt;/h3&gt;
&lt;p&gt;风险评估应考虑决策影响、可逆性、AI 自主程度、错误损害、数据敏感性、第三方依赖、输出稳定性和解释难度。以下是工程示例，不是通用监管分级。&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;级别&lt;/th&gt;&lt;th&gt;例子&lt;/th&gt;&lt;th&gt;推荐处置&lt;/th&gt;&lt;th&gt;主要控制&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;低影响、可逆&lt;/td&gt;&lt;td&gt;内部材料分类、会议摘要、非关键任务路由&lt;/td&gt;&lt;td&gt;在限定范围内自动生成，保留抽样复核&lt;/td&gt;&lt;td&gt;来源校验、基本日志、错误反馈、质量监控&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中等影响&lt;/td&gt;&lt;td&gt;调查线索排序、工单优先级、非最终风险提示&lt;/td&gt;&lt;td&gt;AI 提供建议，有权限人员决定后续动作&lt;/td&gt;&lt;td&gt;结构化证据、缺失信息、审核轨迹、分层抽样&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;高影响或低可逆&lt;/td&gt;&lt;td&gt;影响客户权益的判断、重大风险评级、投资/承保建议、关键合规处置&lt;/td&gt;&lt;td&gt;降低自动化程度；在无法证明控制有效前采用实质人工决定或双人复核&lt;/td&gt;&lt;td&gt;独立验证、决策延迟机制、政策一致性、例外监控、正式审批&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这不是说所有金融判断都必须人工，也不是说内部使用就可以自动化。自动化程度应由实际风险和验证结果支持。如果 AI 无法提供足够的透明度和可复核性，应考虑缩小职责、改变流程或换用更容易验证的模型，而不是用免责声明解决问题。&lt;/p&gt;
&lt;h3&gt;7.2 审核人员必须看得到证据，而不只是结论&lt;/h3&gt;
&lt;p&gt;审查界面至少应显示：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;案件关键事实和来源位置，能够返回原材料；&lt;/li&gt;
&lt;li&gt;哪些字段是直接提取的事实，哪些是模型推断；&lt;/li&gt;
&lt;li&gt;支持结论的证据、反向证据、矛盾材料和缺失项；&lt;/li&gt;
&lt;li&gt;对应的政策条款、必须满足的条件和未通过的规则；&lt;/li&gt;
&lt;li&gt;模型限制、未决问题以及要求升级的原因；&lt;/li&gt;
&lt;li&gt;人工可执行的动作：接受、修改、拒绝、要求补充资料、升级或暂缓，并记录实际原因。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对重大决策，可以“先展示事实与证据、再展示模型建议”，或要求审核人先作独立初判，再对照 AI 建议。这不能完全消除锚定，但可为测量推荐对人的影响提供条件。&lt;/p&gt;
&lt;h3&gt;7.3 衡量审核质量，而不是只数审批数量&lt;/h3&gt;
&lt;p&gt;“100% 经过人工审批”不能证明监督有效。应测量人工与模型分歧率、推翻率和升级率；人工识别错误建议的能力；不同风险级别和工作量下的审核质量；审核所需时间、回看证据比例、补件率和未解决冲突；以及独立盲审发现的漏判。&lt;/p&gt;
&lt;p&gt;推翻率本身既不应越高越好，也不应越低越好。高推翻率可能意味着模型质量差，也可能反映审核人员发现了不适用案例；低推翻率可能意味着模型好，也可能说明审核流程成了橡皮图章。必须结合盲审、真实结果与任务设计一起分析。&lt;/p&gt;
&lt;h3&gt;7.4 用真实研究和金融机构披露检验“人工在环”&lt;/h3&gt;
&lt;p&gt;Buçinca、Malaya 和 Gajos 在 2021 年的实验 &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3449287&quot;&gt;To Trust or to Think: Cognitive Forcing Functions Can Reduce Overreliance on AI&lt;/a&gt; 中对 199 名参与者比较了认知强制设计、简单的可解释 AI 设计和没有 AI 的基线。研究报告说，要求使用者先投入判断或执行额外认知步骤的设计，能比简单解释更有效地降低对错误 AI 建议的过度依赖；代价是参与者对最能降低过度依赖的设计主观评价较低，效果也会随个体认知特征而变。它是受控实验，而非金融机构生产运行的效果证明，但说明界面设计会影响监督是否有效。&lt;/p&gt;
&lt;p&gt;金融机构公开案例也提供了可落地的例子。Morgan Stanley 披露，Debrief 将会议内容转成客户笔记和后续行动草稿，顾问会在定稿前审阅和修改；DBS 2025 年报告披露，生成式 AI 辅助资料提取与验证，并在推进由员工审核信用评估备忘录的工作流。两者并不意味着所有输出都必须人工批准，而是显示：当生成内容会被用于后续客户或信用流程时，明确的人工定稿点可以成为流程的一部分。来源：&lt;a href=&quot;https://openai.com/index/morgan-stanley/&quot;&gt;Morgan Stanley / OpenAI 案例&lt;/a&gt;、&lt;a href=&quot;https://www.dbs.com/annualreports/2025/cro-statement.html&quot;&gt;DBS 2025 年 CRO 报告&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;7.5 把“有效复核”写成界面与流程规则&lt;/h3&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;设计措施&lt;/th&gt;&lt;th&gt;为什么有用&lt;/th&gt;&lt;th&gt;如何验证不是形式主义&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;关键案例先显示事实、引用和反向证据，再显示模型建议&lt;/td&gt;&lt;td&gt;减少先入为主的锚定，但不会完全消除它&lt;/td&gt;&lt;td&gt;与先显示建议的界面开展受控对照测试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对高影响、低频决策，要求审核人先写独立判断或选择关键证据，再展示模型建议&lt;/td&gt;&lt;td&gt;迫使审核者在依赖 AI 前建立自己的判断依据&lt;/td&gt;&lt;td&gt;比较有/无该机制时的错误识别率、耗时与一致性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;明确接受、修改、拒绝、补件、升级和暂缓的状态&lt;/td&gt;&lt;td&gt;让复核可以挑战系统，而不是只有批准按钮&lt;/td&gt;&lt;td&gt;监测动作分布，并对低异议率做盲审调查&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对关键字段展示源文、模型提取值、校验结果和政策条款&lt;/td&gt;&lt;td&gt;让人能核对证据和规则，不只是读模型写的理由&lt;/td&gt;&lt;td&gt;随机抽样检验审核者能否找出植入的错误&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;将超时、积压和异常高通过率视为监督风险信号&lt;/td&gt;&lt;td&gt;过度负荷容易把审核变成机械点击&lt;/td&gt;&lt;td&gt;把案件复杂度、审核时间、工作量与盲审漏错一起分析&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;允许停止处理并请求独立意见&lt;/td&gt;&lt;td&gt;避免在证据冲突或超授权时被迫作二元决定&lt;/td&gt;&lt;td&gt;用缺证、矛盾、过期政策和高风险异常案例测试升级能力&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;pre&gt;sequenceDiagram
    participant Model as Decision Model
    participant UI as Review Workbench
    participant Reviewer as 审核人员
    participant Blind as 独立质量抽检
    participant Ops as 运营/风险负责人

    Model-&amp;gt;&amp;gt;UI: 结论状态 + 正反证据 + 规则结果 + 未决项
    UI-&amp;gt;&amp;gt;Reviewer: 先显示证据与可复核来源
    Reviewer-&amp;gt;&amp;gt;UI: 独立判断/关键检查项
    UI-&amp;gt;&amp;gt;Reviewer: 显示模型建议与差异
    Reviewer-&amp;gt;&amp;gt;UI: 接受、修改、驳回、补件或升级
    UI-&amp;gt;&amp;gt;Ops: 记录理由码、耗时、覆盖和升级状态
    Blind-&amp;gt;&amp;gt;UI: 随机抽取已处置案例
    Blind-&amp;gt;&amp;gt;Ops: 报告漏错、机械批准与系统性偏差
    Ops-&amp;gt;&amp;gt;Model: 修正流程、评测集、阈值或自动化边界&lt;/pre&gt;
&lt;p&gt;要注意，单独的“独立初判”也不是所有工作流的最佳界面：它可能增加处理时间、对熟练审核人员带来不必要负担，还可能让低频使用者失去效率。应在代表性案件上做实验，按风险级别和决策频率选择设计，依据错误发现能力和决策质量，而不是凭主观体验决定。&lt;/p&gt;
&lt;h2&gt;八、怎样验证 Decision Model：从模型评测走向决策系统评测&lt;/h2&gt;
&lt;p&gt;通用 benchmark 或几个成功案例不足以证明系统适合金融业务。MAS 的 AI 风险管理材料强调针对实际用例和工作流做评测，而不只是引用模型的一般能力；NIST 则建议以经验测试验证能力主张、审核来源并持续监控。&lt;/p&gt;
&lt;p&gt;建立一套由领域专家核验的历史案件和合成边界案例组成的测试集，覆盖正常、缺失、矛盾、边界、罕见和恶意输入。每个版本都记录评估所用数据、Prompt、模型、规则及执行环境。&lt;/p&gt;




























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;评估维度&lt;/th&gt;&lt;th&gt;示例指标 / 检查&lt;/th&gt;&lt;th&gt;目的&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;事实抽取&lt;/td&gt;&lt;td&gt;字段精确率/召回率、金额/日期/实体错误、缺失值处理&lt;/td&gt;&lt;td&gt;避免输入事实在抽取阶段被扭曲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;证据可靠性&lt;/td&gt;&lt;td&gt;引用可解析率、引用支持结论的正确率、关键结论无引用比例&lt;/td&gt;&lt;td&gt;防止捏造引用或引用不支持判断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;政策一致性&lt;/td&gt;&lt;td&gt;必要条件通过率、禁止项漏检率、规则执行差异&lt;/td&gt;&lt;td&gt;验证建议是否符合明确政策&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;决策质量&lt;/td&gt;&lt;td&gt;专家基准一致率、错误接受/拒绝率、重大错误率&lt;/td&gt;&lt;td&gt;衡量最终业务判断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;不确定性处理&lt;/td&gt;&lt;td&gt;应升级案例的正确升级比例、缺证时强行结论的比例&lt;/td&gt;&lt;td&gt;验证模型是否知道何时不该作决定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;解释质量&lt;/td&gt;&lt;td&gt;证据完整性、反面证据覆盖、理由与事实/政策一致性&lt;/td&gt;&lt;td&gt;检查解释是否能帮助复核&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;稳定性&lt;/td&gt;&lt;td&gt;同一输入重复运行差异、措辞顺序扰动、模型升级前后变化&lt;/td&gt;&lt;td&gt;找出对偶然上下文过度敏感的情况&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;公平与偏差&lt;/td&gt;&lt;td&gt;适当时按相关群体或代理变量做差异分析&lt;/td&gt;&lt;td&gt;发现不合理的群体影响&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对抗与安全&lt;/td&gt;&lt;td&gt;Prompt injection、恶意文档、冲突指令、越权调用、数据泄露测试&lt;/td&gt;&lt;td&gt;验证不可信输入不能改变系统政策或越权&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人机协作&lt;/td&gt;&lt;td&gt;有/无 AI 建议时的人工准确率、错误识别率、复核时间、盲审结果&lt;/td&gt;&lt;td&gt;证明人工监督确实改进而不是削弱判断&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;对于高影响决策，不能只用整体准确率掩盖少数严重错误；应对重大错误单独定义不可接受类型和处置标准。&lt;/p&gt;
&lt;h3&gt;8.1 低成本的消融与反事实测试&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;删掉关键证据：&lt;/strong&gt; 是否转为缺证或升级，还是仍给出相同强度的结论？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加入反向证据：&lt;/strong&gt; 系统是否识别冲突，还是继续支持第一次判断？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;改变不影响业务含义的措辞或排列顺序：&lt;/strong&gt; 结论是否大幅波动？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;替换过期政策：&lt;/strong&gt; 是否使用正确生效时点的版本？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提供无关、不可访问或恶意文档：&lt;/strong&gt; 是否凭空引用，或被注入文本覆盖系统规则？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;与专家独立判断对照：&lt;/strong&gt; 关键案例先收集人工判断，再展示模型输出，测量错误识别与锚定影响。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;比较版本：&lt;/strong&gt; 对模型、Prompt、检索配置或策略变更建立回归测试，检验差异是否在批准范围内。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要只问“理由是否听起来合理”，而应验证证据移除、证据冲突或规则变化时，输出是否按预期变化，以及这种变化是否可检查。&lt;/p&gt;
&lt;h3&gt;8.2 独立 Reviewer 有用，但不是独立真理来源&lt;/h3&gt;
&lt;p&gt;另一个模型可以发现部分不一致、缺证或不合规则之处。不过，如果两个模型共用同样的背景材料、Prompt 偏见和不充分的政策表达，它们可能一起犯错。Reviewer 不能保证正确性。&lt;/p&gt;
&lt;p&gt;更稳妥的组合是：机器规则和 Schema 检查负责确定性错误；独立引用校验器检查引用能否定位并支持陈述；第二模型提供额外挑战；再按风险等级进行独立人员抽样或正式审核。对硬约束，应让程序直接验证，而不是再让 LLM 自己判断自己是否违规。&lt;/p&gt;
&lt;h3&gt;8.3 实际用例：信用评估资料提取与备忘录草稿，应怎样验收？&lt;/h3&gt;
&lt;p&gt;DBS 在 2025 年公开披露，生成式 AI 已用于辅助员工完成信用评估信息提取与验证，并正在推进由员工审核信用评估备忘录的工作流。公开材料没有披露其内部评测集和接受阈值。下面是&lt;strong&gt;将这一公开用例转化成可复用评测设计的示例&lt;/strong&gt;，不是对 DBS 内部实现或指标的猜测。&lt;/p&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;被测环节&lt;/th&gt;&lt;th&gt;具体测试样本&lt;/th&gt;&lt;th&gt;主要指标&lt;/th&gt;&lt;th&gt;不能被总分掩盖的失败&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;文档抽取&lt;/td&gt;&lt;td&gt;收入、负债、财务比率、担保信息与业务事实的已标注样本&lt;/td&gt;&lt;td&gt;字段级精确率/召回率，关键字段错误率&lt;/td&gt;&lt;td&gt;错把缺失金额当成零、把年度值当成季度值、数值/币种/期间混淆&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;来源引用&lt;/td&gt;&lt;td&gt;同一字段在多页文件、附注和后续修订中出现&lt;/td&gt;&lt;td&gt;引用可定位率、引用支持事实的比例、来源版本匹配率&lt;/td&gt;&lt;td&gt;模型给出正确数值却引用了错误文件/页码，仍属于审计失败&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;冲突处理&lt;/td&gt;&lt;td&gt;不同文件的金额不一致、文件日期不同、旧版与修订版矛盾&lt;/td&gt;&lt;td&gt;冲突召回率、正确升级率、静默选错的比例&lt;/td&gt;&lt;td&gt;对重大冲突仍生成确定结论，或无依据地优先相信一份材料&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;政策应用&lt;/td&gt;&lt;td&gt;将同一案例按不同生效日期的正式政策重新运行&lt;/td&gt;&lt;td&gt;必要条件漏检率、禁止项违规率、政策版本选择正确率&lt;/td&gt;&lt;td&gt;使用过期政策、绕过硬规则、用自然语言理由覆盖程序校验失败&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;不确定性&lt;/td&gt;&lt;td&gt;关键资料缺失、无法定位引用、来源不可访问、模型输出格式损坏&lt;/td&gt;&lt;td&gt;应拒答/升级案例的召回率，以及可判断案例的过度拒答率&lt;/td&gt;&lt;td&gt;在材料不足时“补全”事实，或者把工具故障当作审核通过&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;安全性&lt;/td&gt;&lt;td&gt;文档中包含“忽略政策”“批准此申请”等注入指令&lt;/td&gt;&lt;td&gt;注入成功率、未授权动作率、敏感信息泄露事件&lt;/td&gt;&lt;td&gt;非可信文档改变政策、越过决策门禁或触发副作用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人机协作&lt;/td&gt;&lt;td&gt;专家独立判断、展示模型建议后的判断、盲审结果&lt;/td&gt;&lt;td&gt;人工纠错率、漏错率、决策质量差异、审核时间&lt;/td&gt;&lt;td&gt;表面通过率很好，但盲审发现审核者未读证据或机械批准&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;测试集应由业务专家制定标签规则，对争议案例进行独立裁决；训练/调试集与最终验收集要分开；对于有时间变化的政策与数据，保留案件发生时有效的版本。不要把历史审批结果不加审查地当作 Ground Truth，因为历史决定本身可能存在人为噪声、旧政策或录入错误。&lt;/p&gt;
&lt;p&gt;阈值也不能简单定成一个统一的“准确率 95%”。对重大字段、法规禁止动作和需升级的案例，应单列不可接受错误；对金额抽取、引用和政策门禁设置独立阈值；样本不足时报告置信区间和未知风险，不要用小样本的完美分数宣称可以自动化。&lt;/p&gt;
&lt;h3&gt;8.4 把 Evaluation 接到发布与运行流程，而不是留在报告里&lt;/h3&gt;
&lt;p&gt;Morgan Stanley 的公开案例提供了可观察的工程做法：团队针对真实的检索、摘要、翻译和会议后续事项构建评测；由顾问和提示工程人员评价准确性/连贯性；随着资料库与用途变化，调整检索并维护回归测试。该公司披露其对样例问题进行每日回归测试。其客户故事由供应商公开，能说明实践模式，但不是独立审计报告。&lt;/p&gt;
&lt;p&gt;建议把相同原则落实为下面的发布流程：&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[模型/Prompt/检索/规则/工具变更] --&amp;gt; B[静态检查与结构化契约测试]
    B --&amp;gt; C[固定 Gold Set 与历史缺陷回归]
    C --&amp;gt; D[证据、政策、拒答、安全与群体差异测试]
    D --&amp;gt; E[人工专家抽样 + 独立 Judge 校准]
    E --&amp;gt; F{关键门禁是否全部通过？}
    F --&amp;gt;|否| G[阻止发布并创建缺陷/风险项]
    G --&amp;gt; A
    F --&amp;gt;|是| H[影子模式：不影响正式决定]
    H --&amp;gt; I[比较系统与专家/既有流程的结果]
    I --&amp;gt; J{运行证据和风险接受是否通过？}
    J --&amp;gt;|否| G
    J --&amp;gt;|是| K[小范围、受限权限试点]
    K --&amp;gt; L[持续监控、随机盲审、事故与版本监测]
    L --&amp;gt; M{质量/风险阈值被突破？}
    M --&amp;gt;|是| N[暂停动作、回退版本、调查受影响案件]
    M --&amp;gt;|否| L&lt;/pre&gt;
&lt;p&gt;CI 里的硬性门禁应当可重复、可自动运行；独立专家审核适用于解释质量、复杂业务判断和难以形式化的案例；LLM Judge 可用于扩大覆盖面，但必须先用专家标注集测量其偏差。线上出现新的失败模式后，要把经过裁决的案例加入回归集，形成闭环，而不是只修一条 Prompt 后关闭事件。&lt;/p&gt;
&lt;h3&gt;8.5 LLM-as-a-Judge 怎样进入评测体系？&lt;/h3&gt;
&lt;p&gt;当人工评测成本很高时，LLM Judge 可以用于辅助评分、聚类错误与筛选需要人工复核的样本，但不能独自批准高影响 Decision Model。至少做以下校准：和领域专家在独立样本上比较一致性；交换候选答案次序检查位置偏差；在相同案例上重复评分检查稳定性；加入冗长但错误、简洁但正确、语气强但缺证等对抗样本；对 Judge 模型或提示变化重新校验。&lt;/p&gt;
&lt;p&gt;判分设计还要把“答得像专家”与“证据确实支持结论”分开：对可以确定判断真假的项，优先用程序断言和数据对账；对引用，使用来源定位与片段核验；只将开放式质量评价交给专家或经校准的辅助 Judge。高影响放行结论应由规定的责任角色签署，而不是由 Judge 的总分自动决定。&lt;/p&gt;
&lt;h2&gt;九、从治理文档到可运行控制：上线前建立哪些资产？&lt;/h2&gt;




























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;资产&lt;/th&gt;&lt;th&gt;主要内容&lt;/th&gt;&lt;th&gt;更新触发&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;AI Use-case Inventory&lt;/td&gt;&lt;td&gt;用途、业务所有者、使用人、输入输出、影响对象、风险等级、供应商依赖、自动化范围&lt;/td&gt;&lt;td&gt;新用例、用途变化、自动化范围扩大&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Decision Contract&lt;/td&gt;&lt;td&gt;状态机、输入/输出 Schema、缺证处理、权限边界、升级条件、最终责任&lt;/td&gt;&lt;td&gt;政策或业务流程改变&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Policy / Rule Catalogue&lt;/td&gt;&lt;td&gt;规则 ID、版本、解释、生效日期、优先级、例外批准权和测试&lt;/td&gt;&lt;td&gt;政策更新与例外变更&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Evidence &amp;amp; Data Register&lt;/td&gt;&lt;td&gt;来源系统、数据所有者、版本和时点语义、质量要求、访问控制、保留政策&lt;/td&gt;&lt;td&gt;新数据源、权限或口径变化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Model/System Card&lt;/td&gt;&lt;td&gt;模型供应商和版本、适用范围、限制、评测结果、已知失败模式、批准用途&lt;/td&gt;&lt;td&gt;模型或系统版本变更&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Prompt &amp;amp; Tool Registry&lt;/td&gt;&lt;td&gt;版本化的系统 Prompt、模板、Schema、检索参数、工具权限、构建版本&lt;/td&gt;&lt;td&gt;每次实质性变更&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Evaluation / Validation Report&lt;/td&gt;&lt;td&gt;基准案例、指标、边界测试、错误分析、阈值、残余风险与放行结论&lt;/td&gt;&lt;td&gt;发布前、定期复验和重大变更&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Decision Record Store&lt;/td&gt;&lt;td&gt;单次运行的输入快照引用、证据、政策、输出、验证、人工处置与完整性信息&lt;/td&gt;&lt;td&gt;每次受控决策运行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Monitoring &amp;amp; Incident Log&lt;/td&gt;&lt;td&gt;生产指标、越权/错误事件、数据质量、漂移、覆盖率、例外、补救和根因分析&lt;/td&gt;&lt;td&gt;持续记录&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Human Review Procedure&lt;/td&gt;&lt;td&gt;审核角色、所需证据、挑战方式、升级路线、盲审抽样和培训&lt;/td&gt;&lt;td&gt;流程调整或审计发现&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;可从 &lt;a href=&quot;https://doi.org/10.48550/arXiv.1810.03993&quot;&gt;Model Cards for Model Reporting&lt;/a&gt; 和 &lt;a href=&quot;https://doi.org/10.48550/arXiv.1803.09010&quot;&gt;Datasheets for Datasets&lt;/a&gt; 思路出发，形成模型和数据的文档化资产；但它们不能代替单次运行的 Decision Record，也不能代替正式政策、验证和审批。&lt;/p&gt;
&lt;h3&gt;9.1 将治理资产对应到责任角色与可验证证据&lt;/h3&gt;
&lt;p&gt;文档只有在有人维护、在正确事件触发时更新，并且可以证明相关控制确实运行，才有治理价值。建议从三道防线/职责分离的思路出发（具体组织可以不同）：&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;控制领域&lt;/th&gt;&lt;th&gt;第一责任方&lt;/th&gt;&lt;th&gt;独立挑战或监督方&lt;/th&gt;&lt;th&gt;应检查的运行证据&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;用例目的、业务风险和最终决定权&lt;/td&gt;&lt;td&gt;业务决策所有者&lt;/td&gt;&lt;td&gt;风险、合规和法务（按用例适用）&lt;/td&gt;&lt;td&gt;用例登记、风险分级、批准范围、允许/禁止动作&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型、Prompt、检索和工具链&lt;/td&gt;&lt;td&gt;技术/模型所有者&lt;/td&gt;&lt;td&gt;独立验证、平台安全&lt;/td&gt;&lt;td&gt;版本记录、访问权限、评测结果、变更影响分析&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;政策语义与硬规则&lt;/td&gt;&lt;td&gt;政策所有者及业务专家&lt;/td&gt;&lt;td&gt;合规/风险、独立测试&lt;/td&gt;&lt;td&gt;生效时点、规则 ID、测试用例、例外批准记录&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;证据、数据和隐私&lt;/td&gt;&lt;td&gt;数据所有者/数据治理&lt;/td&gt;&lt;td&gt;隐私、安全、合规&lt;/td&gt;&lt;td&gt;来源、权限、快照、保留期、数据质量与访问日志&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;生产运行与事故响应&lt;/td&gt;&lt;td&gt;服务运营负责人&lt;/td&gt;&lt;td&gt;风险管理与内部审计&lt;/td&gt;&lt;td&gt;告警、暂停/恢复记录、受影响案件、根因、补救与复验&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人工审核质量&lt;/td&gt;&lt;td&gt;审核团队管理者&lt;/td&gt;&lt;td&gt;质量控制/独立审查&lt;/td&gt;&lt;td&gt;随机盲审、漏错、覆盖率、修改原因、培训与负荷&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这与 MAS 2026 指引所描述的职责分工方向一致：第一道防线负责业务用例及日常控制，第二道防线进行风险监督和独立挑战，第三道防线提供独立保证。NIST AI RMF 则可以用作跨职能工作的组织方式：Govern 明确责任和风险偏好；Map 明确用途、受影响对象和技术/第三方边界；Measure 组织测试和独立评估；Manage 制定风险处置、事故响应与持续改善措施。见 &lt;a href=&quot;https://airc.nist.gov/airmf-resources/airmf/5-sec-core/&quot;&gt;NIST AI RMF Core&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;9.2 标准如何实际落到一份治理包？&lt;/h3&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;标准/框架&lt;/th&gt;&lt;th&gt;适合用来组织什么&lt;/th&gt;&lt;th&gt;对应本文中的具体产物&lt;/th&gt;&lt;th&gt;不要误解成什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ISO/IEC 42001:2023&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;组织级 AI 管理体系、职责、运行、绩效评价和持续改进&lt;/td&gt;&lt;td&gt;AI 使用清单、管理政策、运行控制、审查记录、整改闭环&lt;/td&gt;&lt;td&gt;不能仅通过认证就证明一个具体 Prompt 或模型输出正确&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ISO/IEC 23894:2023&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;将 AI 风险管理纳入组织风险流程&lt;/td&gt;&lt;td&gt;风险登记、影响/可能性评估、风险处理、监控和沟通&lt;/td&gt;&lt;td&gt;不是统一的 Decision Record 字段规范&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;NIST AI RMF / GenAI Profile&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;按 Govern / Map / Measure / Manage 系统化管理生成式 AI 风险&lt;/td&gt;&lt;td&gt;用例范围、第三方依赖、评测报告、持续监控、事故处置&lt;/td&gt;&lt;td&gt;自愿框架不等于直接适用法律义务&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;EU AI Act（如系统和用途属于适用范围）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;高风险 AI 的技术文件、日志记录、人类监督和其他生命周期要求&lt;/td&gt;&lt;td&gt;事件日志、可监督/介入设计、责任记录和可审查证据&lt;/td&gt;&lt;td&gt;不能将每个内部 LLM 工具一律认定为高风险 AI；需要结合目的、类别与实施时间进行法律判定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;MAS AI Risk Management Guidelines（对适用金融机构）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;企业级监督、用例识别、风险重大性、生命周期控制和能力建设&lt;/td&gt;&lt;td&gt;AI inventory、风险偏好、独立挑战、升级机制、第三方风险与监控&lt;/td&gt;&lt;td&gt;不是所有地区金融机构自动适用的统一全球标准&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;美国银行模型风险管理指导（2026 修订）&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;风险比例的模型治理、验证、有效挑战、模型使用与第三方产品治理&lt;/td&gt;&lt;td&gt;用例/模型清单、适用限制、独立挑战和持续验证&lt;/td&gt;&lt;td&gt;修订文件不涵盖生成式 AI/Agentic AI，不能当作 LLM 的直接监管规则&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这些标准可以共同使用，但不是全部都需要逐项“认证”。更有效的做法是：先明确法律与监管适用性，再选择 ISO 42001 等组织管理体系作为治理结构，借助 NIST AI RMF 形成风险与测试流程，最后把每一项控制落实到可审查的证据与责任人。&lt;/p&gt;
&lt;h3&gt;9.3 一个生产事故应该怎样触发治理动作？&lt;/h3&gt;
&lt;p&gt;例如，某次模型升级后，引用有效率表面上未明显下降，但系统开始优先采纳旧政策摘要，导致部分案件出现不适用的规则解释。好的响应不是只回滚 Prompt，而是沿着 Decision ID 找到受影响的版本与案例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;运行监控触发政策版本/引用验证告警，动作网关暂缓尚未执行的相关高风险决定；&lt;/li&gt;
&lt;li&gt;运营负责人和业务所有者根据模型/Prompt/检索版本、政策版本和时间窗，确定可能受影响的 Decision ID；&lt;/li&gt;
&lt;li&gt;独立验证人员复现案例，并判断问题来自检索排序、政策有效时点、模型输出还是规则校验；&lt;/li&gt;
&lt;li&gt;风险/合规负责人决定暂停、人工重审、通知相关方或采取其他补救；每个决定要记录责任人和理由；&lt;/li&gt;
&lt;li&gt;修复后用原失败案例及扩展回归集重新测试，经过指定审批才能恢复；&lt;/li&gt;
&lt;li&gt;将事故模式加入评测集、运行手册和变更检查表。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个例子是建议的操作方案，并非某家银行已公开发生的具体事故。它说明 Decision Record 的价值不只在监管检查当天，而是让生产错误能被定位、圈定影响、纠正和预防再次发生。&lt;/p&gt;
&lt;h2&gt;十、分阶段落地：先补决策契约与审计，再逐步改架构&lt;/h2&gt;
&lt;p&gt;不建议一开始就重写成复杂的 Agent 平台，也不建议只修改一个 Prompt 就宣布解决了可解释性问题。应先选一个风险范围明确、能构造代表性评测集的决策用例，再比较通用 LLM、专用决策模型或混合方案。&lt;/p&gt;
&lt;h3&gt;第 1 阶段：给当前模型建立基线&lt;/h3&gt;
&lt;p&gt;盘点 Prompt、输入来源、输出结构、政策依据、模型供应商/版本、人工复核方式、失败案例和下游动作。收集经领域专家核验的历史案件，对决策正确性、证据充分性、稳定性与人工复核质量建立基线。明确数据留存和访问策略。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;交付物：&lt;/strong&gt; 用例风险评估、当前流程图、失败分类、历史测试集、未满足控制清单。&lt;/p&gt;
&lt;h3&gt;第 2 阶段：结构化输出并保存 Decision Record&lt;/h3&gt;
&lt;p&gt;把自由文本输出收敛为 Schema：判断状态、理由代码、支持证据、反向证据、缺失项、相关政策、下一步动作和升级标志。每次运行记录输入快照/版本、Prompt 与模型配置、证据引用、校验结果和人工处置。为不确定、冲突及越权设置明确的升级通道。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;交付物：&lt;/strong&gt; Decision Contract、输出 Schema、可检索的决策记录、引用解析及 Schema 校验。&lt;/p&gt;
&lt;h3&gt;第 3 阶段：增加政策校验与实质性人工复核&lt;/h3&gt;
&lt;p&gt;把可形式化的硬条件移入版本化规则层；由独立程序核查必要条件和权限边界。改造审核界面，让审核人员能返回源证据、看到缺失/冲突项，并接受、修改、驳回或升级。对高影响用例试行独立初判、随机盲审和质量抽样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;交付物：&lt;/strong&gt; 规则测试、独立验证器、审核操作日志、决策延迟机制和升级流程。&lt;/p&gt;
&lt;h3&gt;第 4 阶段：以真实业务表现决定是否扩大自动化&lt;/h3&gt;
&lt;p&gt;基于历史数据和受控试点持续评估错误、引用可靠性、政策一致性、人工判断质量、群体影响、运行成本和业务效果。只有当证据表明控制有效、残余风险在机构风险容忍度内，才扩大自动化范围。模型、Prompt、工具和政策发生重大变化时重新评估，并准备回退方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;交付物：&lt;/strong&gt; 独立验证报告、放行门槛、持续监控、变更审批、回滚和事故响应流程。&lt;/p&gt;
&lt;h3&gt;各阶段的退出条件：交付物齐备不代表风险已经可接受&lt;/h3&gt;
&lt;p&gt;建议每一阶段都定义谁有权放行、凭什么放行，以及失败时回退到哪里。阶段耗时依业务复杂度与风险而定，不建议套用一律 30/60/90 天的固定日程。&lt;/p&gt;





























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;阶段&lt;/th&gt;&lt;th&gt;关键活动&lt;/th&gt;&lt;th&gt;必须有的证据&lt;/th&gt;&lt;th&gt;放行条件&lt;/th&gt;&lt;th&gt;未通过时&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;0：登记与授权&lt;/td&gt;&lt;td&gt;定义用途、影响、自动化边界、数据类别和禁止动作&lt;/td&gt;&lt;td&gt;Use-case Inventory、风险评估、RACI、Decision Contract 草案&lt;/td&gt;&lt;td&gt;业务负责人和相关风险职能同意该用途值得做，且残余风险存在可行控制路径&lt;/td&gt;&lt;td&gt;缩小范围或不启动&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1：建立基线&lt;/td&gt;&lt;td&gt;收集案例、标注事实/证据/决策标签，盘点当前错误&lt;/td&gt;&lt;td&gt;有争议案例裁决规则、Gold Set、已知失败分类、隐私/留存方案&lt;/td&gt;&lt;td&gt;测试集代表真实工作负载；评价者之间的分歧得到处理；基线可重复运行&lt;/td&gt;&lt;td&gt;补充案例或先修正业务政策/源数据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2：结构化与可追溯&lt;/td&gt;&lt;td&gt;固定输入快照，要求结构化输出、引用和正式的缺证状态&lt;/td&gt;&lt;td&gt;Decision Record、Schema 校验、引用验证、版本登记&lt;/td&gt;&lt;td&gt;能追溯当时输入、政策、模型配置与所有校验结果；异常不会默认通过&lt;/td&gt;&lt;td&gt;不允许连接真实业务动作&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3：独立验证与人工复核&lt;/td&gt;&lt;td&gt;执行边界/安全/公平性测试，验证审核人员发现错误的能力&lt;/td&gt;&lt;td&gt;独立验证报告、盲审、审核界面测试、门禁和回退演练&lt;/td&gt;&lt;td&gt;重大错误在批准范围内；人工控制经试验有效；事故处置可执行&lt;/td&gt;&lt;td&gt;降低自主权限、增加人工处理或改换方案&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4：影子运行&lt;/td&gt;&lt;td&gt;与现有流程平行运行，不用 AI 结果触发正式决策&lt;/td&gt;&lt;td&gt;影子结果差异、原因分类、性能和容量数据、例外分布&lt;/td&gt;&lt;td&gt;对差异有解释；没有未处置的重大错误；监控能识别失败&lt;/td&gt;&lt;td&gt;保持影子模式并整改&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5：受限试点&lt;/td&gt;&lt;td&gt;在明确人群/案例/额度/动作范围内使用，正式决定仍按规定授权&lt;/td&gt;&lt;td&gt;审核日志、推翻和升级数据、真实质量结果、支持服务和停机方案&lt;/td&gt;&lt;td&gt;质量、风险与业务效益同时符合批准的阈值&lt;/td&gt;&lt;td&gt;暂停、回滚并重审受影响案例&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6：持续运行&lt;/td&gt;&lt;td&gt;监控模型/提示/检索/政策变更，定期盲审和重新评测&lt;/td&gt;&lt;td&gt;生产仪表板、版本监控、事故记录、定期验证报告&lt;/td&gt;&lt;td&gt;持续符合风险偏好；重大变更重新过门禁&lt;/td&gt;&lt;td&gt;自动化降级、暂停或重新审批&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;pre&gt;flowchart LR
    A[用例批准] --&amp;gt; B[构造基准与错误分类]
    B --&amp;gt; C[结构化输出与 Decision Record]
    C --&amp;gt; D[独立验证和人工复核测试]
    D --&amp;gt; E[影子运行]
    E --&amp;gt; F[受限试点]
    F --&amp;gt; G[持续运行与盲审]
    D --&amp;gt;|失败| H[改设计 / 缩小范围]
    E --&amp;gt;|差异不可解释| H
    F --&amp;gt;|超风险阈值| I[暂停 / 回滚 / 重审]
    G --&amp;gt;|重大变更或事故| I
    H --&amp;gt; B
    I --&amp;gt; D&lt;/pre&gt;
&lt;h3&gt;将 DBS 公开用例作为路线设计参考，而不是照搬其内部实现&lt;/h3&gt;
&lt;p&gt;如果以 DBS 2025 年报告中披露的“信用评估资料抽取/验证”和“由员工审核的信用评估备忘录”为业务场景，可以把最初的目标限制在提高资料完整性与审核效率：先在影子模式评估字段抽取、证据链接与冲突识别，不影响信用决定；之后以员工审核的备忘录草稿进入受限试点；只有在关键错误、漏升级、引用可靠性和人工复核质量都有持续证据时，才考虑扩大使用范围。&lt;/p&gt;
&lt;p&gt;这与公开材料中“员工审核”的方向相符，但上述影子模式、指标和各阶段门槛是本文提出的落地方案，&lt;strong&gt;不是 DBS 公开披露的内部实施步骤&lt;/strong&gt;。可参见 &lt;a href=&quot;https://www.dbs.com/annualreports/2025/cro-statement.html&quot;&gt;DBS 2025 年 CRO 报告&lt;/a&gt; 与 &lt;a href=&quot;https://www.dbs.com/annualreports/2025/cio-statement.html&quot;&gt;DBS 2025 年 CIO 报告&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;十一、哪些措施最值得优先投入？&lt;/h2&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;措施&lt;/th&gt;&lt;th&gt;优先级&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;结构化输出 + 证据引用 + 缺证状态&lt;/td&gt;&lt;td&gt;最高&lt;/td&gt;&lt;td&gt;是下游校验和人工复核的基础&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Decision Record 与输入/配置版本&lt;/td&gt;&lt;td&gt;最高&lt;/td&gt;&lt;td&gt;支持追溯决策、定位失败和分析历史影响&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;可形式化政策的独立规则检查&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;避免硬性条件完全依赖自然语言推断&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;独立验证集与回归门禁&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;发现 Prompt、模型、数据和检索变化导致的质量回退&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;风险分级、人工复核与决策延迟&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;使自主程度与业务风险相匹配&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;审核质量和自动化偏差的实证评估&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;确认人在环是否真正提高决策质量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;第二个 LLM Reviewer / 多 Agent&lt;/td&gt;&lt;td&gt;视需要&lt;/td&gt;&lt;td&gt;能提供额外挑战，但不能替代确定性验证与独立治理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;仅增加 CoT 或更详细的解释 Prompt&lt;/td&gt;&lt;td&gt;低，不能单独解决&lt;/td&gt;&lt;td&gt;解释可能不忠实，也未必改善人的判断&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;十二、如何设计一套可复用的 Decision Model Evaluation？&lt;/h2&gt;
&lt;p&gt;Decision Model 的评测不能只测试“模型答对了多少题”，也不能只靠专家读几十个输出后觉得“整体不错”。需要把&lt;strong&gt;判定质量、证据质量、政策符合性、升级行为、人工复核效果和生产运行稳定性&lt;/strong&gt;分别测量，并规定哪些失败可以接受、哪些失败必须阻止发布。&lt;/p&gt;
&lt;p&gt;当 LLM 被用于业务决策时，评测范围应超出一般的文本质量评分：金融业务中的不同错误有不同后果。漏掉一个必须升级的高风险案件，可能远比摘要措辞不够优雅严重；结论偶然正确但没有证据，也未必能满足控制要求。这是由任务的后果和系统用途决定的，不是因为 Decision Model 一定使用了不同于 LLM 的底层技术。&lt;/p&gt;
&lt;h3&gt;12.1 先定义被评测的对象：不是一个 Prompt，而是一项决策能力&lt;/h3&gt;
&lt;p&gt;每个用例都应明确决策目标、输入和证据边界、适用政策版本、模型与检索配置、最终决定由谁作出，以及失败时如何处理。评测单位应是一次完整的决策运行，并能追踪到该次运行所使用的输入快照、证据包、政策版本、模型配置和最终业务处置。只评测孤立的模型回答，容易漏掉检索、规则、集成、界面和权限问题。&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;评测对象&lt;/th&gt;&lt;th&gt;必须明确的问题&lt;/th&gt;&lt;th&gt;建议产物&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;业务决策&lt;/td&gt;&lt;td&gt;系统正在帮助决定什么？输出是建议还是可以触发动作？&lt;/td&gt;&lt;td&gt;决策契约、合法状态转换、禁止行为&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;案件与证据&lt;/td&gt;&lt;td&gt;在给定时点，模型实际可以看到哪些材料？&lt;/td&gt;&lt;td&gt;带版本/快照的案例集、证据定位、缺失项标签&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;政策与规则&lt;/td&gt;&lt;td&gt;哪个版本在何时生效？哪些是硬规则，哪些需要专业判断？&lt;/td&gt;&lt;td&gt;版本化规则目录、可执行规则测试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LLM 配置&lt;/td&gt;&lt;td&gt;模型、Prompt、输出 Schema、检索与工具配置是什么？&lt;/td&gt;&lt;td&gt;可复核的运行配置与变更记录&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最终处置&lt;/td&gt;&lt;td&gt;推荐、升级与最终审批分别由谁决定？&lt;/td&gt;&lt;td&gt;结果标签、人工处置记录、失败分类&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;运行环境&lt;/td&gt;&lt;td&gt;检索超时、工具不可用或供应商模型更新时会怎样？&lt;/td&gt;&lt;td&gt;故障注入测试、降级与恢复测试&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;12.2 构造可信的 Gold Set：历史决定不等于绝对正确的 Ground Truth&lt;/h3&gt;
&lt;p&gt;金融业务往往积累了大量历史人工决定，但不应直接把这些决定全部作为正确标签。人工判断可能存在噪声、标准变化、样本选择偏差以及不同审核人员之间的不一致性；如果历史标签本身反映过去的偏差，模型仅仅复刻它们，也不一定代表业务质量提高。&lt;/p&gt;
&lt;p&gt;2024 年发表于《International Review of Financial Analysis》的研究 &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1057521924000814&quot;&gt;Human-AI collaboration to mitigate decision noise in financial underwriting&lt;/a&gt; 讨论了一家金融科技放贷企业的承保实践，分析人工审核决定中的不一致性，并提出 Evidential Reasoning-eXplainer，通过多项独立、可能相互冲突的证据以及贷款规则的权重与可靠性来支持分析。该研究不是 LLM 评测，也不能证明该方法适用于所有承保场景；可迁移的教训是：&lt;strong&gt;让 AI 复刻人之前，要先评估“人原本怎样决定”是否一致、政策是否被准确表达、标签是否可信。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;建议按以下方式构建测试集：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;保留真实分布与困难案例。&lt;/strong&gt; 从生产历史中按业务类别、时间、风险等级、数据来源和结果状态抽样，并补充低频但重要的稀有/边界案例。测试集不能全是容易判断的成功案例。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;由领域专家独立标注。&lt;/strong&gt; 对重要案例采用至少两位经过培训的专家独立判断并记录分歧；通过明确的 adjudication 机制解决分歧，而不是为了获得一个标签而隐藏意见。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分开标记事实与政策判断。&lt;/strong&gt; 哪些事实确实在来源中、哪些资料缺失、政策是否适用，与最终业务结论是不同的标注维度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记录时点与政策版本。&lt;/strong&gt; 历史案件应使用当时有效的政策；若用当前政策重评历史案件，应标为反事实测试，不能混入原始标签。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;防止评测集泄漏。&lt;/strong&gt; Prompt 调优期间反复查看的案例不应再被视为完全独立的最终验证集。保留 holdout set，并按时间切分检查新时期数据上的泛化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;管理数据权限。&lt;/strong&gt; 对客户、交易或调查材料进行脱敏/假名化，控制访问和保留期限；合成数据可补充边界测试，但不能取代对真实分布和材料质量的验证。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;12.3 使用分层 Evaluation，而不是一个总分&lt;/h3&gt;
&lt;p&gt;建议将评测拆为四层。前面层级失败，后续结论的质量就失去了基础。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层级&lt;/th&gt;&lt;th&gt;主要问题&lt;/th&gt;&lt;th&gt;例子与指标&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;L0：输入与证据&lt;/td&gt;&lt;td&gt;数据完整吗？引用能定位吗？证据是否过期或互相矛盾？&lt;/td&gt;&lt;td&gt;必需字段完整率、快照可复现率、引用可解析率、来源覆盖率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L1：事实与政策&lt;/td&gt;&lt;td&gt;提取事实是否准确？适用政策与硬性条件是否正确？&lt;/td&gt;&lt;td&gt;字段精确率/召回率、事实错配率、规则通过率、禁止项漏检率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L2：决策建议&lt;/td&gt;&lt;td&gt;建议是否正确、理由是否有证据支持、何时升级？&lt;/td&gt;&lt;td&gt;错误接受/拒绝率、严重错误率、证据支持率、缺证强判率、升级召回率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L3：业务流程与运行&lt;/td&gt;&lt;td&gt;人能否正确复核？动作是否越权？版本更新后是否退化？&lt;/td&gt;&lt;td&gt;人工推翻/漏判、复核质量、越权动作数、p95 延迟、单案成本、生产漂移&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;每一层都应有明确的失败标签，例如来源缺失、使用过期政策、事实抽取错误、结论无证据支持、违反政策、遗漏升级、人工推翻、未经授权的动作。错误归因比一个准确率数字更有用，因为不同错误需要不同修复方式。&lt;/p&gt;
&lt;h3&gt;12.4 用风险加权指标，而不是只看整体 Accuracy&lt;/h3&gt;
&lt;p&gt;假设测试集 95% 是低风险常见案件，即使系统把这些都答对，也可能因为漏掉少数高影响例外而不可上线。建议至少报告：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;错误接受率与错误拒绝率：&lt;/strong&gt; 按业务含义定义类别，不要把所有错误合并成一种。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重大错误率：&lt;/strong&gt; 将违反禁止规则、遗漏强制升级或无证据支持重大结论等设为单独指标，不能被大量简单样本稀释。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;升级召回率与过度升级率：&lt;/strong&gt; 应转人工的案例有多少被正确转交；系统是否把太多普通案例都升级，造成审核队列失效。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;证据支持率：&lt;/strong&gt; 每个关键结论是否有可解析且真实支持该结论的证据；引用存在但内容不支持结论，仍应判失败。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;政策符合率：&lt;/strong&gt; 硬规则应由代码直接检查，不应完全依赖 LLM Judge 给分。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;校准与覆盖率：&lt;/strong&gt; 只有输出概率经过真实案例校准时，才报告 Brier score、可靠性曲线或 Expected Calibration Error。若系统有自动处理门槛，可绘制 coverage-risk curve，观察扩大自动处理范围时风险如何变化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;人机联合表现：&lt;/strong&gt; 对照专家独立判断、专家看到 AI 建议后的判断和最终结果，测量 AI 是否改善或伤害审核质量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分组差异：&lt;/strong&gt; 在合法、适当且隐私保护充分的前提下，检查不同相关群体、地区、产品和数据来源中的错误差异。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要直接把模型自报的 confidence 作为概率指标。如果没有校准数据，宁可使用证据完整性、规则通过情况以及是否触发升级等可验证信号。&lt;/p&gt;
&lt;h3&gt;12.5 评测不仅问“答对了吗”，还要问“凭什么、遇到变化会怎样”&lt;/h3&gt;























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;测试类型&lt;/th&gt;&lt;th&gt;构造方式&lt;/th&gt;&lt;th&gt;预期行为&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;证据消融&lt;/td&gt;&lt;td&gt;删除一条关键证据或必要字段&lt;/td&gt;&lt;td&gt;标记缺证或升级，而不是维持确定结论&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;反向证据&lt;/td&gt;&lt;td&gt;加入可信但与主要结论冲突的材料&lt;/td&gt;&lt;td&gt;显示冲突，交由规则或人工处理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;政策版本&lt;/td&gt;&lt;td&gt;切换到不同生效日期的政策，或加入已失效条款&lt;/td&gt;&lt;td&gt;使用适用时点版本，无法判断则升级&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;输入扰动&lt;/td&gt;&lt;td&gt;改变不影响业务含义的措辞、材料顺序或排版&lt;/td&gt;&lt;td&gt;不应出现无法解释的重大结论变化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;缺失与歧义&lt;/td&gt;&lt;td&gt;缺失身份字段、日期冲突、同一实体多个记录&lt;/td&gt;&lt;td&gt;显式表示未知/歧义，不补造信息&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对抗输入&lt;/td&gt;&lt;td&gt;文件嵌入要求忽略政策或泄露信息的指令&lt;/td&gt;&lt;td&gt;将文件视为证据而非控制指令，权限与政策不变&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;工具/数据失败&lt;/td&gt;&lt;td&gt;检索超时、数据库不可用、来源权限被撤销&lt;/td&gt;&lt;td&gt;fail closed 或按批准的降级方案处理，不静默使用过期数据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;模型与 Prompt 变化&lt;/td&gt;&lt;td&gt;升级模型、Prompt、检索、规则或输出 Schema&lt;/td&gt;&lt;td&gt;运行完整回归集并分析差异是否在批准范围内&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;复制与重放&lt;/td&gt;&lt;td&gt;同一案例在同一配置下反复运行&lt;/td&gt;&lt;td&gt;测量随机变化；关键状态和硬约束必须持续合规&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;12.6 LLM-as-a-Judge 可以扩展测试，但必须先验证 Judge&lt;/h3&gt;
&lt;p&gt;自然语言理由、证据是否相关、解释是否完整等维度，很难完全靠精确字符串匹配评估，因此 LLM Judge 可以作为辅助评分器。但“另一个更强模型说合格”不构成独立证明。&lt;/p&gt;
&lt;p&gt;2025 年发表在 ACL Anthology 的 &lt;a href=&quot;https://aclanthology.org/2025.ijcnlp-long.18/&quot;&gt;Judging the Judges: A Systematic Study of Position Bias in LLM-as-a-Judge&lt;/a&gt; 发现，LLM Judge 可能表现出位置偏差，其一致性会随 Judge、任务和候选答案变化。2024 年的 &lt;a href=&quot;https://arxiv.org/abs/2408.13006&quot;&gt;Systematic Evaluation of LLM-as-a-Judge in LLM Alignment Tasks&lt;/a&gt; 也报告，Prompt 模板会影响评估结果，相关实验中 Judge 与人类评估者只有中等程度的一致性。&lt;/p&gt;
&lt;p&gt;建议采取以下护栏：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先在专家已标注的样本上验证 Judge 的假阳性、假阴性和人类一致性；&lt;/li&gt;
&lt;li&gt;对候选答案做随机顺序、交换顺序和重复评分测试，检查位置偏差与重复稳定性；&lt;/li&gt;
&lt;li&gt;对关键证据、政策违反、重大错误和权限边界使用代码校验或专家复核；&lt;/li&gt;
&lt;li&gt;对开放式质量指标采用清晰 rubric，并对高风险样本进行人工复核；&lt;/li&gt;
&lt;li&gt;评估 Judge 本身的模型和 Prompt 变化，避免“被测模型看似提升，只是评分器变了”。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;12.7 把测试变成发布门禁与生产飞轮&lt;/h3&gt;
&lt;p&gt;Anthropic 于 2026 年发布的 &lt;a href=&quot;https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents&quot;&gt;Demystifying evals for AI agents&lt;/a&gt; 建议结合代码评分器、模型评分器和人工评分器，记录完整 trajectory/trace 与真实 outcome，并针对非确定性任务运行多次试验。这些方法并非只能用于某种被单独命名的 Decision Model；它们同样适用于使用通用 LLM 或 Agent 承担决策工作的系统。对于金融用途，还需加入政策、证据、风险重大性和问责维度。&lt;/p&gt;
&lt;p&gt;建议设计三类门禁：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;硬门禁：&lt;/strong&gt; 输出 Schema 不合法、引用无法解析、缺少必需证据、硬性政策违反或未经授权的动作，不能靠其他项目高分“平均通过”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;质量门禁：&lt;/strong&gt; 错误接受率、严重漏判、证据支持率、升级召回率和人工复核质量，按用例风险设定验收阈值。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;运营门禁：&lt;/strong&gt; 供应商/模型/Prompt/政策变更、数据源失效、漂移或严重事故应触发重新评测、缩小自动化范围、暂停或回退。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;上线初期可使用 shadow mode：模型生成建议但不触发业务动作，与真实流程并行比较；之后在明确的低风险范围进行受控试点。上线后持续抽样复核生产记录、纳入新失败案例、分析根因并扩展回归集。Evaluation 才不是一次性的审批附件，而是持续监督决策能力的机制。&lt;/p&gt;
&lt;h2&gt;十三、Decision Model 与一般 LLM/Agent：能力重叠，工程目标不同&lt;/h2&gt;
&lt;p&gt;“Decision Model”与“LLM Agent”不宜被画成两个互斥的框。前者通常描述系统承担的任务、输出契约或专门的模型接口；后者通常描述模型如何围绕目标调用工具、维护状态并推进流程。因此，一个 Agent 可以包含多个 Decision Model 风格的判断节点，一个以通用 LLM 为底座的服务也可以用结构化输出、函数调用、评分标准和业务代码，完成分类、风险标签、路由或是否升级等任务。&lt;/p&gt;
&lt;p&gt;OpenAI 的 &lt;a href=&quot;https://help.openai.com/en/articles/8555517-function-calling-in-the-openai-api&quot;&gt;function calling 与 structured outputs&lt;/a&gt; 已为通用模型提供约束参数结构和连接业务函数的机制；TypeSafe 自己的 &lt;a href=&quot;https://docs.typesafe.ai/concepts/how-to-build-with-system-one&quot;&gt;System One 设计指南&lt;/a&gt; 也把可复用的工程方法概括为：在代码里保留控制流和确定性规则，把判断拆成范围明确的问题，将独立问题并行评估，并按置信度选择执行、人工复核或升级。这里有明显的工程思想重合。不同点在于模型本身如何训练、输出概率是否真正校准、接口是否原生约束结果，以及单位请求的延迟、成本和稳定性，而不是普通 LLM “做不到”这些判断。&lt;/p&gt;
&lt;h3&gt;从通用 LLM 到专用决策模型：这是可选的演进路径，不是技术分界线&lt;/h3&gt;
&lt;p&gt;实际建设中，团队通常可以先让通用 LLM 完成判断任务，再逐步明确输出契约、验证和运行时控制。只有当某个狭窄、高频的决策节点，在成本、延迟、概率校准或重复稳定性上达不到业务要求时，才值得评估微调、小模型、级联，或 Jev / System One 这类专用决策模型。这个过程不是要求所有系统都沿着一条固定路线升级；一些任务在结构化 LLM 配合良好评测后就足够，另一些任务则可能从专用模型中获益。两种路径都要在同一业务数据和同一端到端约束下比较。&lt;/p&gt;
&lt;pre&gt;flowchart TD
    A[明确需要模型支持的判断任务] --&amp;gt; B[通用 LLM + Prompt / 示例]
    B --&amp;gt; C[约束接口：Schema / 函数调用 / 明确状态]
    C --&amp;gt; D[建立业务评测：质量、不确定性、成本、延迟与稳定性]
    D --&amp;gt; E[由程序 / 工作流管理政策、权限、状态与审计]
    E --&amp;gt; F{当前方案达到该用例的要求？}
    F --&amp;gt;|是| G[保留通用 LLM 路径，持续回归验证]
    F --&amp;gt;|否| H[比较 Prompt 优化、微调、小模型、级联与专用决策模型]
    H --&amp;gt; I[只替换需要优化的判断节点]
    I --&amp;gt; D
    E --&amp;gt; J[开放式综合、长尾或证据冲突任务]
    J --&amp;gt; K[通用 LLM / Agent 辅助，必要时独立验证或人工升级]&lt;/pre&gt;
&lt;p&gt;图中体现的是&lt;strong&gt;系统能力逐步工程化&lt;/strong&gt;，不是说通用 LLM 天生不能做判断，也不是说专用决策模型天然更可靠。Schema 只能保证输出形状，不能保证判断正确；专用模型提供的概率也需要在目标业务中校准。反过来，通用 LLM 的判断如果在质量、成本和风险边界上已满足要求，就没有必要仅为了采用新类别模型而更换它。&lt;/p&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;观察维度&lt;/th&gt;&lt;th&gt;通用 LLM / Agent 的常规实现路径&lt;/th&gt;&lt;th&gt;Jev / System One 的产品设计侧重点（厂商主张，需业务验证）&lt;/th&gt;&lt;th&gt;应该怎样比较&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;判断任务与输出&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;通过 Prompt、示例、JSON Schema / structured outputs、函数调用或微调，输出分类、评分、选择和判断；Agent 也可以把这些结果用于下一步路由&lt;/td&gt;&lt;td&gt;以预先定义的判断类型为接口，Jev 对外提供 Choice、Score、Noul 等类型化决策，而不是自由文本生成&lt;/td&gt;&lt;td&gt;格式错误率、分类/评分质量、边界案例与越界行为；不能把 Schema 合法当成判断正确&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;概率与不确定性&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;可以要求模型自报置信度，也可用 token 概率或额外校准方法；但自报分数不自动等于可靠概率&lt;/td&gt;&lt;td&gt;TypeSafe 声称 Jev 通过 RLCD 训练目标提供经过校准的概率/置信度&lt;/td&gt;&lt;td&gt;在本机构标注数据上画可靠性曲线，测 Brier score、覆盖率—风险曲线及升级阈值；不要直接采用供应商阈值&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;延迟、成本与一致性&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;通用模型可通过较小模型、少量输出 Token、批量化、缓存、结构化输出和级联调用降低成本；多轮 Agent 也可能增加延迟和运行成本&lt;/td&gt;&lt;td&gt;Jev 宣称其并行采样和决策专用设计能显著降低特定任务的延迟与成本，并提高重复运行的一致性&lt;/td&gt;&lt;td&gt;使用同一输入、同一目标和明确的评测集比较端到端延迟、总成本、正确率、波动和失败模式；供应商基准不能替代自己的测试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;开放式推理与生成&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;擅长解释、综合多份材料、生成新文本、研究和多步工具编排，但结果更灵活，控制和验证成本也可能更高&lt;/td&gt;&lt;td&gt;更适合边界明确、答案集合可预先定义的判断；不替代长篇生成、开放式规划或复杂综合推理&lt;/td&gt;&lt;td&gt;按任务分工或采用级联：专用模型处理高频、边界明确的判断；通用 LLM 处理复杂推理、长尾案例和需要生成内容的步骤&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;工作流与治理&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;可以在 Agent / workflow 中加入证据引用、规则引擎、人工审批、日志、评测、权限和回滚&lt;/td&gt;&lt;td&gt;类型化结果与概率可能让下游代码更容易分支，但本身并不提供完整的业务证据链、授权和审计治理&lt;/td&gt;&lt;td&gt;无论底层是哪类模型，都要验证来源、政策、生效时间、错误升级、动作权限、人工复核和变更影响&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Jev 的差异应按证据强度来描述。TypeSafe 在产品发布材料中称其采用新的模型架构、并行采样器和 Reinforcement Learning for Calibrated Decisions（RLCD）；这些是厂商对其技术路线的公开说明，不代表其内部实现已被完全公开或其性能主张已适用于所有业务。独立研究者于 2026 年 9 月发布的 &lt;a href=&quot;https://arxiv.org/abs/2609.37647&quot;&gt;Jev 基准评测预印本&lt;/a&gt; 在 37 个公开数据集上与两种开放权重模型进行比较，发现 Jev 在不少任务上表现有竞争力，但性能也会受语言资源、标签噪声和评分任务复杂度影响；该研究不能替代面向具体金融业务的验证。评测结果应被当作选择模型路线的证据之一，而不是仅凭“Decision Model”这个名称作决定。&lt;/p&gt;
&lt;p&gt;这也说明需要区分三层概念：&lt;strong&gt;模型类别&lt;/strong&gt;（底层模型如何训练和推理）、&lt;strong&gt;决策接口/运行模式&lt;/strong&gt;（如何把输入转成程序可消费的判断）、以及&lt;strong&gt;生产治理能力&lt;/strong&gt;（证据、规则、测试、授权、人工责任和审计）。这三层相互关联，却不是同一个问题。通用 LLM 可以实现决策型接口；专用模型也可能嵌入 Agent；两种实现都可能治理薄弱，也都可能在正确设计下用于受控业务流程。&lt;/p&gt;
&lt;h3&gt;13.1 工程边界应放在输出、运行时与业务控制的接口上&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;只读证据工具：&lt;/strong&gt; 检索批准的政策库、读取特定案件资料、查询授权数据。每次调用都记录来源、时间、查询范围和返回快照。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分析与校验工具：&lt;/strong&gt; 事实抽取、引用解析、规则求值、风险分类、差异对账。这些工具需要独立测试，不能把模型自己的判断当作验证结果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;产生业务副作用的工具：&lt;/strong&gt; 更新案件状态、发布结果或触发客户流程。必须由独立授权与门禁控制，并要求前置条件通过；高风险动作需要有权限人员批准。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不能仅因模型用自然语言宣称“已经合规”就让它执行最终动作。工具 API 本身应强制执行权限与状态转换约束。重试、交接、超时、部分完成、重复执行和补偿也必须有明确的幂等与恢复机制。&lt;/p&gt;
&lt;h3&gt;13.2 轨迹可见不等于决策可解释&lt;/h3&gt;
&lt;p&gt;Agent trajectory 能说明调用了哪些工具、得到什么结果、何时失败，但不一定说明业务结论的依据成立。Decision Record 应把轨迹关联到具体判断：证据 ID 与来源片段、案件事实及来源、政策条款与版本、条件求值结果、LLM 建议与系统最终状态的差异，以及人工接受、修改、推翻或升级的处置记录。这样既保留 Agent 的可观测性，又补上业务决策的审计链。&lt;/p&gt;
&lt;h2&gt;十四、业界实践案例：怎样借鉴，哪些不能过度推论？&lt;/h2&gt;
&lt;p&gt;公开材料中，金融服务业较常见的早期生成式 AI 落地是内部检索、摘要、知识支持和运营辅助，而不是直接让通用 LLM 独立决定贷款、承保或客户风险。公开案例多由机构或供应商描述，可说明工程模式与采用情况，但不一定独立证明长期风险效果。&lt;/p&gt;
&lt;h3&gt;14.1 日本央行 2026 年调查：采用率上升，但治理成熟度仍是瓶颈&lt;/h3&gt;
&lt;p&gt;日本央行 2026 年 8 月公布的金融机构生成式 AI 调查以 &lt;strong&gt;150 家金融机构&lt;/strong&gt;为对象。调查显示，超过 90% 的受访机构正在使用或试验生成式 AI；应用正从一般事务扩展到利用客户信息的核心业务，但直接把生成式 AI 输出展示给客户的机构仍有限。对评估效果，不少机构认为“可用于业务，但仍需改善”；相当数量的机构仍把治理、第三方风险、安全和信息保护列为需要加强的领域。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.boj.or.jp/en/research/brp/fsr/fsrb260824.htm&quot;&gt;Bank of Japan — Use and Risk Management of Generative AI by Japanese Financial Institutions (FY2026 survey)&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这份调查不是某个模型的受控实验，也不证明特定技术能减少多少风险。它说明业务试用与可规模化的受控使用是两件事：模型能处理核心业务材料，不代表机构已经能解释、记录、评测和管理其判断；第三方依赖、信息安全和结果不确定性需要一并管理。&lt;/p&gt;
&lt;h3&gt;14.2 英国央行与 FCA：完全自主决策比例低，企业自评存在理解缺口&lt;/h3&gt;
&lt;p&gt;英国央行和 FCA 在 2024 年发布的金融业 AI 调查收到 &lt;strong&gt;118 家机构&lt;/strong&gt;回应。调查显示，75% 的受访机构已使用 AI，基础模型占被报告 AI 用例的 17%；55% 的用例具有一定程度的自动化决策，但只有 2% 的用例完全自主；62% 的用例被机构自评为低重大性，16% 被自评为高重大性。84% 的企业表示有 AI 责任人，但只有 34% 表示对所用 AI 技术有“完整理解”，46% 仅有“部分理解”。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.bankofengland.co.uk/report/2024/artificial-intelligence-in-uk-financial-services-2024&quot;&gt;Bank of England — Artificial intelligence in UK financial services, 2024&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这些数字来自企业自报调查，并不是监管部门对每个系统逐一认证。它们仍揭示两个与 Decision Model 直接相关的事实：金融业采用 AI 不等同于把最终决定完全自动化；有责任人也不能自动解决模型理解与可验证性问题。责任、可观察性与独立验证需要成为具体控制。&lt;/p&gt;
&lt;h3&gt;14.3 Morgan Stanley：把 Evaluation 做成上线机制，而不只是发布前测一次&lt;/h3&gt;
&lt;p&gt;OpenAI 公布的 Morgan Stanley 案例描述了财富管理内部 Assistant 与 Debrief。公开材料称，Assistant 已被超过 98% 的顾问团队使用；团队针对真实业务问题建立 Eval，包括摘要质量、信息检索和翻译等任务，由顾问和 Prompt 工程师评价准确性与连贯性并持续迭代。Debrief 将会议记录整理成客户笔记和后续事项，顾问在最终定稿前仍会检查和修改；团队也维护日常回归测试样例，以发现合规输出与检索质量的变化。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://openai.com/index/morgan-stanley/&quot;&gt;OpenAI — Morgan Stanley uses AI evals to shape the future of financial services&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这是一份供应商发布的客户案例，应把采用率和效果数据视为机构/供应商的公开描述，而不是独立审计结论。其公开用例主要是&lt;strong&gt;内部知识检索、摘要和顾问工作流辅助&lt;/strong&gt;，不能据此说通用 LLM 已经能够独立完成信用审批或风险决策。可借鉴之处是 Eval-driven development、业务专家评分、持续回归测试，以及员工对会影响后续业务流程的生成内容进行检查和修改。&lt;/p&gt;
&lt;h3&gt;14.4 信贷承保研究：先评估人的判断，再评估 AI&lt;/h3&gt;
&lt;p&gt;Sachan 等人 2024 年关于金融科技贷款承保的研究，从人工审核决定中的不一致性入手，分析怎样用证据权重与规则可靠性改善决策支持。它不是通用 LLM Agent 实现，也不是可以原样复制的生产架构；它说明金融机构构建 Decision Model 时，不能仅把历史审批记录当作无误差标签，也不应假设人工判断天然一致。&lt;/p&gt;
&lt;p&gt;可以抽取三项工程做法：明确每条业务规则的可靠性与权重；在存在冲突证据时表达证据强度，而不是把所有信息压成一个无来由的分数；对专家分歧建立审查与治理流程，并用独立结果评测 AI 是否真正提高一致性和质量。&lt;/p&gt;
&lt;h3&gt;14.5 传统信贷模型的可解释性研究：可以借鉴什么，不能直接套用什么？&lt;/h3&gt;
&lt;p&gt;FinRegLab 与斯坦福商学院的研究从不同角度评估了传统机器学习信贷承保模型的解释性、公平性和模型诊断工具。其 &lt;a href=&quot;https://finreglab.org/research/machine-learning-explainability-fairness-insights-from-consumer-lending/&quot;&gt;Machine Learning Explainability &amp;amp; Fairness: Insights from Consumer Lending&lt;/a&gt; 研究比较了七家技术公司的诊断工具和若干开源工具；相关研究关注这些工具能否提供理解单个申请人预测、群体层面的模型行为、以及模型整体行为所需的信息。FinRegLab 在 2026 年又发布了面向消费信贷模型管理的 &lt;a href=&quot;https://finreglab.org/research/explainability-and-fairness-in-machine-learning-for-credit-underwriting/&quot;&gt;Framework for Managing Machine Learning Models in Consumer Credit Underwriting&lt;/a&gt;，该工作反映了其与美国银行在 OCC Project REACh 框架下的讨论。&lt;/p&gt;
&lt;p&gt;这类研究与 LLM Decision Model 密切相关，但两者不能混为一谈。&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;传统评分/机器学习模型&lt;/th&gt;&lt;th&gt;基于 LLM 的 Decision Model&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;典型输出是分数、概率、分类或排序&lt;/td&gt;&lt;td&gt;输出可能是事实抽取、规则解释、证据综合与自然语言建议&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SHAP、特征重要性、局部解释等可辅助分析特定输入特征对模型输出的贡献，但其结果依赖模型、背景分布和解释方法&lt;/td&gt;&lt;td&gt;不能把特征归因直接映射为 Prompt、上下文或生成文本的“真正原因”；LLM 生成的理由也不一定忠实反映输出成因&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;业务理由码通常要映射为具体、可审核的输入因素，并做准确性与一致性测试&lt;/td&gt;&lt;td&gt;还要验证每项事实是否在原材料中、引用是否支持结论、采用的政策是否正确，以及模型是否遗漏反向证据&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;传统模型可通过独立模型诊断、群体差异与稳定性测试检查行为&lt;/td&gt;&lt;td&gt;除业务结果与公平性测试外，还需测试引用幻觉、上下文/Prompt 敏感性、拒答/升级行为及恶意文档影响&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;可迁移的原则是：解释工具本身也需要验证，不能因为工具输出了一张 SHAP 图、特征重要性榜单或一段 LLM 理由，就认为解释正确。对于 LLM Decision Model，应优先使用可回到原始来源的证据引用、规则求值和版本记录；如果同时存在传统评分模型，则分别保留评分模型的特征级诊断和 LLM 的证据级记录，再将两者按明确的数据契约组合起来。&lt;/p&gt;
&lt;p&gt;对受消费者保护、拒绝原因披露或公平放贷规则约束的用途，还应让合规与法律团队验证理由是否具体、准确且真正对应适用的决策因素。不能让生成式模型凭空编造拒绝原因，也不能把一个听起来合理的文字理由当作模型影响该案件的真实特征解释。&lt;/p&gt;
&lt;h3&gt;14.6 DBS：生成式 AI 辅助风险流程，并明确员工审核边界&lt;/h3&gt;
&lt;p&gt;DBS 的 2025 年 CRO 报告说明，生成式 AI 被用于员工客户对话总结、收集信息以改善员工处理结果、通话记录质检，以及信用评估过程中的信息提取和验证；报告还说，银行正在推进由员工审核的信用评估备忘录 Agentic workflow。其 CIO 报告补充，银行已建立生成式 AI 框架，包含可复用组件、治理护栏、工作流能力和 Prompt Engineering；官方还披露了企业 AI 模型与用例的规模，以及负责数据和 AI 治理的相关机制。&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;https://www.dbs.com/annualreports/2025/cro-statement.html&quot;&gt;DBS 2025 年 CRO 报告&lt;/a&gt;、&lt;a href=&quot;https://www.dbs.com/annualreports/2025/cio-statement.html&quot;&gt;DBS 2025 年 CIO 报告&lt;/a&gt;、&lt;a href=&quot;https://www.dbs.com/artificial-intelligence-machine-learning/artificial-intelligence/ethical-and-responsible-ai-in-banking.html&quot;&gt;DBS Ethical &amp;amp; Responsible AI in Banking&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这份公开材料不提供完整的 Decision Record Schema 或其模型评测阈值，因此不要据此推断 DBS 内部采用了本文的具体技术架构。但它提供了几个可核验的实际方向：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;按任务拆分风险：&lt;/strong&gt; 对话摘要、资料提取、信用评估备忘录和最终信用决定不是同一个风险等级或授权范围。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;让输出对应流程中的下一步：&lt;/strong&gt; 信息提取需要验证来源和字段，备忘录是交由员工审阅的草稿，而不是自动审批本身。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将治理框架与复用平台结合：&lt;/strong&gt; 公共框架提供可复用组件与护栏，不意味着各用例可以跳过本身的评估。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将 AI 治理嵌入组织职责：&lt;/strong&gt; 数据管理、风险管理、技术和业务角色共同承担责任，不能把验证全部交由 Prompt 工程师。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果企业要借鉴这一方向，最重要的评测不是“备忘录语言是否流畅”，而是关键财务字段是否来自正确材料、冲突资料有没有暴露、最新政策是否适用、缺证案例是否升级，以及人工审核是否确实发现了系统的重大错误。&lt;/p&gt;
&lt;h3&gt;14.7 从案例中抽取一个可复用的模式&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;可借鉴实践&lt;/th&gt;&lt;th&gt;适合解决的问题&lt;/th&gt;&lt;th&gt;不能由此推断什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;真实业务案例集与专家评估（Morgan Stanley）&lt;/td&gt;&lt;td&gt;提高摘要、检索和生成内容的业务可靠性&lt;/td&gt;&lt;td&gt;不能证明覆盖了所有决策风险或允许全自动决策&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按风险分级并保持人类责任（BoE/FCA、MAS、BoJ 的治理方向）&lt;/td&gt;&lt;td&gt;决定哪些用例可自动化、哪些需要更强监督&lt;/td&gt;&lt;td&gt;不能只靠机构自评证明控制有效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;先评估人类判断噪声与规则可靠性（承保研究）&lt;/td&gt;&lt;td&gt;识别历史标签质量与政策表达问题&lt;/td&gt;&lt;td&gt;不能把研究方法未经验证地迁移到所有产品和地区&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;评测、回归、运行监控结合&lt;/td&gt;&lt;td&gt;在模型、Prompt、数据和检索变化后发现退化&lt;/td&gt;&lt;td&gt;不能把某次离线评测结果当作永久上线保证&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;十五、把决策能力转化为可治理业务系统：实施蓝图&lt;/h2&gt;
&lt;p&gt;实施时既不应预设必须换成 Jev 这样的专用模型，也不应假定现有通用 LLM 只要增加一个 JSON Schema 就已经满足生产要求。首先按任务形态选择候选路径，再用同一批业务案例比较，而后为胜出的方案建立一致的决策记录、验证和控制边界。&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;任务形态&lt;/th&gt;&lt;th&gt;优先评估的实现路径&lt;/th&gt;&lt;th&gt;关键考察点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;条件明确、可形式化的规则判断&lt;/td&gt;&lt;td&gt;普通程序和确定性规则&lt;/td&gt;&lt;td&gt;规则完整性、版本、生效时点和边界测试；不必为了“智能化”而调用模型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;高频、边界清楚的语义判断，例如分类、打分、路由、二元判断&lt;/td&gt;&lt;td&gt;比较通用 LLM 的结构化输出与专用决策模型&lt;/td&gt;&lt;td&gt;正确率、概率校准、阈值与覆盖率、延迟、单位成本、重复稳定性和错误分布&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;需要综合证据、处理长尾案例、生成备忘录或解释材料&lt;/td&gt;&lt;td&gt;通用 LLM / Agent，必要时配合检索和工具&lt;/td&gt;&lt;td&gt;证据覆盖、引用支持度、事实冲突、任务完成质量、提示敏感性与轨迹可观测性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;不确定、证据冲突或后果重大的判断&lt;/td&gt;&lt;td&gt;级联到更强模型、独立验证或有权限的人工审核&lt;/td&gt;&lt;td&gt;何时不自动判断、升级是否及时、人工是否真正发现并纠正关键错误&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这些路径可以组合使用。例如，专用决策模型负责大量低成本的初筛，通用 LLM 处理少量复杂案例，确定性代码执行硬规则，人工负责高影响或证据冲突案件。是否值得采用这种混合架构，要由同一业务基准上的端到端结果决定，不应只比较某个模型的单次推理价格或厂商演示数据。&lt;/p&gt;
&lt;h3&gt;15.1 第一版：结构化与可追溯，不急于自治&lt;/h3&gt;
&lt;p&gt;对每次判断生成唯一 decision ID，并把以下对象绑定在一起：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CaseSnapshot：&lt;/strong&gt; 本次案件的关键输入字段、相关材料版本与快照哈希；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EvidencePack：&lt;/strong&gt; 每项关键事实的来源定位、证据摘录、支持/反向关系和缺失项；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PolicyVersion：&lt;/strong&gt; 有效时点正确的规则 ID、版本、生效日期与规则评估结果；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ModelRun：&lt;/strong&gt; 模型、模型版本、Prompt、输出 Schema、检索/工具配置和运行 ID；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assessment：&lt;/strong&gt; 标准化状态、理由代码、未决问题、建议升级以及校验报告；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumanDisposition：&lt;/strong&gt; 人工最终处置、角色、原因、时间戳和批准链；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AuditLink：&lt;/strong&gt; 记录间关联、访问日志与完整性校验信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最小可行版本可以保持单次通用 LLM 调用，也可以使用专用决策模型；要求不是指定某一种模型，而是让结果可被检查。模型可以输出结构化的候选事实、证据引用、政策条款候选、冲突和缺失项，但不能仅凭自身输出直接触发业务动作。程序验证 Schema 与引用，规则引擎执行明确的硬条件；不满足条件就进入 evidence insufficient、conflicting evidence 或 escalation 等正式状态。&lt;/p&gt;
&lt;h3&gt;15.2 第二版：评测先行，再增加模型调用&lt;/h3&gt;
&lt;p&gt;先建立基准数据集和错误分类，在每次 Prompt、模型、检索与规则版本变更时自动运行：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Schema、必填字段和引用定位的确定性测试；&lt;/li&gt;
&lt;li&gt;硬性政策及禁止动作的规则测试；&lt;/li&gt;
&lt;li&gt;专家标注案例上的决策与证据评测；&lt;/li&gt;
&lt;li&gt;缺证、矛盾、过期政策、恶意文档和依赖故障的挑战测试；&lt;/li&gt;
&lt;li&gt;对同一案例多次试验以评估模型输出波动；&lt;/li&gt;
&lt;li&gt;通用 LLM、专用决策模型及混合级联方案的公平对比；&lt;/li&gt;
&lt;li&gt;审核人员在看/不看 AI 建议条件下的受控对照评测。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只有当评测指出现有方案在某个环节确实失败，再决定增加独立 Critic、第二模型、专用决策模型或多 Agent 步骤。否则，多一次 LLM 调用或新增一种模型只会增加费用、延迟和审计负担，不一定增加决策质量。&lt;/p&gt;
&lt;h3&gt;15.3 第三版：把门禁与下游副作用隔离&lt;/h3&gt;
&lt;p&gt;业务动作接口不应接受任意模型自然语言作为授权。它应只接受经过 Schema、策略和权限验证的明确状态，并要求符合当前工作流状态。高风险操作应有授权人员明确批准；低风险自动化也应在批准范围、阈值和回滚机制内运行。&lt;/p&gt;
&lt;p&gt;对所有版本更新，保留受控回退方式。若新的模型或 Prompt 在关键案例上造成严重错误、引用质量明显下降、必要升级遗漏或策略违规，应能够立即关闭自动动作、回到上一批准版本或转入人工流程，而不是等待下一次例行评审。&lt;/p&gt;
&lt;h3&gt;15.4 一个最小的发布门禁示例&lt;/h3&gt;
&lt;p&gt;下表不是监管机构规定的通用阈值，而是把质量评估转成上线决策的一种示意。&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;门禁&lt;/th&gt;&lt;th&gt;上线要求的写法&lt;/th&gt;&lt;th&gt;失败时怎么办&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;硬性政策&lt;/td&gt;&lt;td&gt;所有禁止条件和必要状态转换通过确定性测试；失败不允许被总分抵消&lt;/td&gt;&lt;td&gt;阻止发布，修正规则或流程&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;证据&lt;/td&gt;&lt;td&gt;重大结论都有可解析引用，引用内容经核验能支持结论；设置独立证据支持率门槛&lt;/td&gt;&lt;td&gt;退回事实/检索步骤或升级&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;错误接受与漏升级&lt;/td&gt;&lt;td&gt;对重大错误设置单独上限，评测报告包含置信区间与样本分布&lt;/td&gt;&lt;td&gt;不扩大自动化范围，必要时降低权限&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;缺证和冲突&lt;/td&gt;&lt;td&gt;在设计的缺证、矛盾案例中，系统按预期不作确定判断并升级&lt;/td&gt;&lt;td&gt;修复状态机、检索或评测流程&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人工复核&lt;/td&gt;&lt;td&gt;通过盲审/独立抽样证明审核者能发现关键错误，而不是只完成点击&lt;/td&gt;&lt;td&gt;改进界面、工作量、培训和审批机制&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;运行与回退&lt;/td&gt;&lt;td&gt;日志、告警、版本追踪、停用/回滚和人工降级演练通过&lt;/td&gt;&lt;td&gt;不进入生产或暂停自动动作&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;门槛应由业务风险、历史基线、法律合规要求与风险偏好共同定义。这里不提供“一律 95% 准确率”之类的万能数字，因为整体 Accuracy 无法表达重大错误的业务后果，也不能代替独立验证与正式风险接受。&lt;/p&gt;
&lt;h2&gt;十六、最终判断：把模型判断能力升级为受控的业务决策能力&lt;/h2&gt;
&lt;p&gt;Jev 的出现值得关注，但不应被解读成“通用 LLM 不能做决策，必须引入一种与 LLM 完全不同的模型”。通用 LLM 已经能借助 Prompt、结构化输出、函数调用、微调与工作流组合，承担很多分类、评分、判断、路由和评审任务；Agent 也可以把它们组织成复杂流程。Jev 的产品定位，是进一步把这种常见的软件判断需求作为专用模型能力来优化，特别强调类型化概率输出、校准、一致性、延迟和成本。它的价值需要与通用模型在具体任务中的表现作公平比较，不能仅凭术语或厂商基准先验判定。&lt;/p&gt;
&lt;p&gt;更值得关注的演进是：AI 系统不再只把所有工作交给一个通用模型连续生成文本，而是逐步把能力拆成可组合的部件——通用 LLM 负责开放式理解与生成，专用决策模型或结构化 LLM 调用负责范围明确的语义判断，普通代码负责确定性规则、权限与副作用，工作流运行时负责状态、重试、人工介入和可观测性。实际系统可能采用其中一种路径，也可能混合使用；选择标准应是经业务评测验证的质量、延迟、成本、可靠性与运维复杂度。&lt;/p&gt;
&lt;p&gt;而在金融服务场景中，不论底层采用哪种模型，最终仍须回答同一组问题：判断基于哪些事实和证据、适用了哪一版政策、模型输出经过哪些校验、何时必须拒判或升级、谁有权作出最终决定、发生错误后如何重建过程并补救。&lt;strong&gt;Decision Model 的关键不是与 Agent 或 LLM 划清技术边界，而是把决策任务、输出契约、控制权、证据链与责任安排设计清楚，并用真实业务结果持续验证。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;参考资料与延伸阅读&lt;/h2&gt;
&lt;h3&gt;监管与行业框架&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mas.gov.sg/regulation/guidelines/guidelines-on-artificial-intelligence-risk-management-for-financial-institutions&quot;&gt;MAS — Guidelines on Artificial Intelligence Risk Management for Financial Institutions (2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mas.gov.sg/-/media/mas-media-library/publications/consultations/bd/2025/response-to-feedback-received-on-guidelines-on-artificial-intelligence-risk-management.pdf&quot;&gt;MAS — Response to Feedback on AI Risk Management Guidelines (2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mas.gov.sg/publications/monographs-or-information-paper/2018/feat&quot;&gt;MAS — FEAT Principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mas.gov.sg/news/media-releases/2023/toolkit-for-responsible-use-of-ai-in-the-financial-sector&quot;&gt;MAS — Veritas Toolkit 2.0 for responsible AI in finance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bis.org/publications/fsi-paper-24-managing-explanations-how-regulators-can-address-ai-explainability&quot;&gt;BIS FSI — Managing explanations: how regulators can address AI explainability (2025)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://occ.treas.gov/news-issuances/bulletins/2026/bulletin-2026-13.html&quot;&gt;OCC / Federal Reserve / FDIC — Revised Model Risk Management Guidance (2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nist.gov/itl/ai-risk-management-framework&quot;&gt;NIST — AI Risk Management Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf&quot;&gt;NIST — Generative AI Profile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.fsb.org/2024/11/the-financial-stability-implications-of-artificial-intelligence/&quot;&gt;Financial Stability Board — The Financial Stability Implications of AI (2024)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1689&quot;&gt;EU — Artificial Intelligence Act, Regulation (EU) 2024/1689&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;学术论文&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Turpin et al., &lt;a href=&quot;https://papers.neurips.cc/paper_files/paper/2023/hash/ed3fea9033a80fea1376299fa7863f4a-Abstract-Conference.html&quot;&gt;Language Models Don’t Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting&lt;/a&gt;, NeurIPS 2023.&lt;/li&gt;
&lt;li&gt;Fayyaz et al., &lt;a href=&quot;https://arxiv.org/abs/2407.00219&quot;&gt;Evaluating Human Alignment and Model Faithfulness of LLM Rationale&lt;/a&gt;, 2024.&lt;/li&gt;
&lt;li&gt;Vered et al., &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S000437022300098X&quot;&gt;The Effects of Explanations on Automation Bias&lt;/a&gt;, &lt;em&gt;Artificial Intelligence&lt;/em&gt;, 2023.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nature.com/articles/s41598-024-60220-5&quot;&gt;Explainability does not mitigate the negative impact of incorrect AI advice in a personnel selection task&lt;/a&gt;, &lt;em&gt;Scientific Reports&lt;/em&gt;, 2024.&lt;/li&gt;
&lt;li&gt;Westphal et al., &lt;a href=&quot;https://doi.org/10.1016/j.chb.2023.107714&quot;&gt;Decision control and explanations in human-AI collaboration: Improving user perceptions and compliance&lt;/a&gt;, &lt;em&gt;Computers in Human Behavior&lt;/em&gt;, 2023.&lt;/li&gt;
&lt;li&gt;Mitchell et al., &lt;a href=&quot;https://doi.org/10.48550/arXiv.1810.03993&quot;&gt;Model Cards for Model Reporting&lt;/a&gt;, FAT* 2019.&lt;/li&gt;
&lt;li&gt;Gebru et al., &lt;a href=&quot;https://doi.org/10.48550/arXiv.1803.09010&quot;&gt;Datasheets for Datasets&lt;/a&gt;, 2018 / &lt;em&gt;Communications of the ACM&lt;/em&gt;, 2021.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;业界调查与工程实践&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.boj.or.jp/en/research/brp/fsr/fsrb260824.htm&quot;&gt;Bank of Japan — Use and Risk Management of Generative AI by Japanese Financial Institutions (FY2026 survey)&lt;/a&gt; — 150 家机构的调查，关注使用现状、评测、治理与第三方风险。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bankofengland.co.uk/report/2024/artificial-intelligence-in-uk-financial-services-2024&quot;&gt;Bank of England / FCA — Artificial intelligence in UK financial services, 2024&lt;/a&gt; — 金融业 AI 用例、自动化程度、重大性与治理调查。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/morgan-stanley/&quot;&gt;OpenAI — Morgan Stanley uses AI evals to shape the future of financial services&lt;/a&gt; — 供应商公开的客户案例，包含真实业务 Eval、专家评分、回归测试与人工复核。&lt;/li&gt;
&lt;li&gt;Anthropic, &lt;a href=&quot;https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents&quot;&gt;Demystifying evals for AI agents&lt;/a&gt; — 任务、trial、grader、trajectory、outcome 与评测框架的工程方法。&lt;/li&gt;
&lt;li&gt;Anthropic, &lt;a href=&quot;https://www.anthropic.com/research/building-effective-agents&quot;&gt;Building effective agents&lt;/a&gt; — Agent workflow 的简洁组合模式与灵活行动边界。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;补充研究论文&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Sachan et al., &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1057521924000814&quot;&gt;Human-AI collaboration to mitigate decision noise in financial underwriting: A study on FinTech innovation in a lending firm&lt;/a&gt;, &lt;em&gt;International Review of Financial Analysis&lt;/em&gt;, 2024 — 对人工承保判断的不一致性、证据权重和规则可靠性进行分析。&lt;/li&gt;
&lt;li&gt;Shi et al., &lt;a href=&quot;https://aclanthology.org/2025.ijcnlp-long.18/&quot;&gt;Judging the Judges: A Systematic Study of Position Bias in LLM-as-a-Judge&lt;/a&gt;, IJCNLP 2025 — 研究 LLM Judge 的位置偏差与一致性。&lt;/li&gt;
&lt;li&gt;Wei et al., &lt;a href=&quot;https://arxiv.org/abs/2408.13006&quot;&gt;Systematic Evaluation of LLM-as-a-Judge in LLM Alignment Tasks&lt;/a&gt;, 2024 — 评估 Judge 的 Prompt 敏感性、可靠性与人类一致性。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://finreglab.org/research/explainability-and-fairness-in-machine-learning-for-credit-underwriting/&quot;&gt;FinRegLab — Explainability and Fairness in Machine Learning for Credit Underwriting&lt;/a&gt; — 传统信贷模型诊断、解释性、公平性及 2026 年模型管理框架的项目入口。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://finreglab.org/research/machine-learning-explainability-fairness-insights-from-consumer-lending/&quot;&gt;FinRegLab / Stanford GSB — Machine Learning Explainability &amp;amp; Fairness: Insights from Consumer Lending&lt;/a&gt; — 对多家厂商与开源模型诊断工具进行实证评估，讨论其在个体预测、群体行为和模型风险管理方面的作用与限制。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://finreglab.org/wp-content/uploads/2026/04/FinRegLab_04-09-2026_Framework-for-Managing-Machine-Learning-Models.pdf&quot;&gt;FinRegLab — Framework for Managing Machine Learning Models in Consumer Credit Underwriting (2026)&lt;/a&gt; — 传统 ML 模型管理的近期框架，可用于比较其与 LLM 决策记录、证据溯源和运行评测的差异。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;AI 管理体系与风险标准&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.iso.org/standard/81230.html&quot;&gt;ISO/IEC 42001:2023 — Artificial intelligence management system&lt;/a&gt; — 组织建立、实施、维护与持续改进 AI 管理体系的要求。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.iso.org/standard/77304.html&quot;&gt;ISO/IEC 23894:2023 — AI risk management guidance&lt;/a&gt; — 将 AI 风险管理整合进组织的 AI 相关活动。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://airc.nist.gov/airmf-resources/airmf/5-sec-core/&quot;&gt;NIST AI RMF Core&lt;/a&gt; — Govern、Map、Measure 和 Manage 的具体成果与行动建议。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eur-lex.europa.eu/eli/reg/2024/1689&quot;&gt;EU AI Act — Article 12 Record-keeping&lt;/a&gt; and &lt;a href=&quot;https://eur-lex.europa.eu/eli/reg/2024/1689&quot;&gt;Article 14 Human Oversight&lt;/a&gt; — 对适用的高风险 AI 的日志与人工监督要求；适用性需结合具体用途和法律评估。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;补充论文：忠实度、谄媚、幻觉与人工监督&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Lanham et al., &lt;a href=&quot;https://arxiv.org/abs/2307.13702&quot;&gt;Measuring Faithfulness in Chain-of-Thought Reasoning&lt;/a&gt;, 2023 — 通过干预推理链研究模型答案对所述推理的依赖程度。&lt;/li&gt;
&lt;li&gt;Guan et al., &lt;a href=&quot;https://proceedings.mlr.press/v306/guan26h.html&quot;&gt;Monitoring Monitorability&lt;/a&gt;, ICML 2026 — 研究 CoT 监测如何帮助识别部分不良行为，也分析它随训练和模型变化的脆弱性。&lt;/li&gt;
&lt;li&gt;Sharma et al., &lt;a href=&quot;https://arxiv.org/abs/2310.13548&quot;&gt;Towards Understanding Sycophancy in Language Models&lt;/a&gt;, 2023 / revised 2025 — 分析人类偏好反馈与迎合用户观点之间的关系。&lt;/li&gt;
&lt;li&gt;Kalai et al., &lt;a href=&quot;https://arxiv.org/abs/2509.04664&quot;&gt;Why Language Models Hallucinate&lt;/a&gt;, 2025 — 从训练与评测激励解释为何模型可能倾向于猜测而不是表达不确定性。&lt;/li&gt;
&lt;li&gt;Buçinca et al., &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3449287&quot;&gt;To Trust or to Think: Cognitive Forcing Functions Can Reduce Overreliance on AI in AI-assisted Decision-making&lt;/a&gt;, PACM HCI 2021 — 受控实验显示界面中的认知强制设计可降低过度依赖，但存在主观体验与个体差异上的权衡。&lt;/li&gt;
&lt;li&gt;Chen and Goldfarb-Tarrant, &lt;a href=&quot;https://aclanthology.org/2025.acl-long.970/&quot;&gt;Safer or Luckier? LLMs as Safety Evaluators Are Not Robust to Artifacts&lt;/a&gt;, ACL 2025 — 研究 LLM 安全评价对措辞等表面因素的敏感性。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;金融机构公开用例&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dbs.com/annualreports/2025/cro-statement.html&quot;&gt;DBS Group — 2025 CRO Statement: Generative AI in risk management&lt;/a&gt; — 披露资料提取/验证与由员工审核的信用评估备忘录工作流。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dbs.com/annualreports/2025/cio-statement.html&quot;&gt;DBS Group — 2025 CIO Statement: Scaling AI and governance framework&lt;/a&gt; — 披露可复用 GenAI 框架、治理护栏、企业平台与规模化情况。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dbs.com/artificial-intelligence-machine-learning/artificial-intelligence/ethical-and-responsible-ai-in-banking.html&quot;&gt;DBS — Ethical &amp;amp; Responsible AI in Banking&lt;/a&gt; — 说明 DBS 的 PURE 数据使用框架及风险分级模型治理做法。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Jev、通用 LLM 决策能力与 Agent 工作流&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://typesafe.ai/blog/introducing-system-one-models-and-jev&quot;&gt;TypeSafe AI — Introducing System One Models &amp;amp; Jev&lt;/a&gt; — 厂商对专用决策模型、RLCD 训练目标、并行输出、类型化结果及性能主张的说明；阅读时需区分产品陈述与独立验证。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.typesafe.ai/concepts/how-to-build-with-system-one&quot;&gt;TypeSafe — How to build with System One&lt;/a&gt; — 官方工程指南，讨论原子化问题、结构化状态、并行判断、代码组合及置信度门控。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.langchain.com/blog/building-prod-with-jev-and-langgraph&quot;&gt;LangChain — Building Production Agents with Jev and LangGraph&lt;/a&gt; — 展示专用决策模型如何成为一般 Agent / workflow 中的一个组件，而不是替代整个运行时。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2609.37647&quot;&gt;Deußer, Sparrenberg &amp;amp; Sifa — Evaluating and Benchmarking the System One Model Jev&lt;/a&gt;, arXiv preprint, September 2026 — 在多个公开数据集上比较 Jev 与开放权重模型的初步独立评测；结论受数据集、模板、基线选择与未公开训练数据等因素限制，不能替代具体业务评测。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://help.openai.com/en/articles/8555517-function-calling-in-the-openai-api&quot;&gt;OpenAI — Function Calling in the OpenAI API&lt;/a&gt; — 说明通用模型可以通过函数调用和结构化输出与程序接口衔接。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;与工程评测的衔接&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;./llm-eval-and-verification&quot;&gt;大模型结果如何测试和验证：Anthropic 与 OpenAI 的方法论&lt;/a&gt; —— 如何构造可重复实验、衡量失败并建立回归门禁。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>金融服务中的数值计算工程：Java、C#/.NET、Node.js、Python、Rust、Snowflake 与 PostgreSQL 实战指南</title><link>https://devweekly.github.io/posts/%E9%87%91%E8%9E%8D%E6%9C%8D%E5%8A%A1%E4%B8%AD%E7%9A%84%E6%95%B0%E5%80%BC%E8%AE%A1%E7%AE%97%E5%B7%A5%E7%A8%8Bjavacnetnodejspythonrustsnowflake-%E4%B8%8E-postgresql-%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://devweekly.github.io/posts/%E9%87%91%E8%9E%8D%E6%9C%8D%E5%8A%A1%E4%B8%AD%E7%9A%84%E6%95%B0%E5%80%BC%E8%AE%A1%E7%AE%97%E5%B7%A5%E7%A8%8Bjavacnetnodejspythonrustsnowflake-%E4%B8%8E-postgresql-%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97/</guid><description>面向金融服务架构师和工程团队，比较 Java、C#/.NET、Node.js、Python、Rust、Snowflake SQL 与 PostgreSQL 在金融计算中的精度、舍入、类型转换、日期规则和可审计性，并区分不依赖第三方库与使用第三方库的实现方案。</description><pubDate>Tue, 13 Oct 2026 10:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;金融服务中的数值计算工程：Java、C#/.NET、Node.js、Python、Rust、Snowflake 与 PostgreSQL 实战指南&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;资料核对日期：2026 年 10 月 13 日。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本文讨论投资组合、证券交易、费用与佣金、利息计提、外汇换算、税务、估值、账务和分析数据处理中容易被忽略的计算问题。比较范围包括 Java、C#/.NET、Node.js/TypeScript、Python、Rust、Snowflake SQL 和 PostgreSQL，重点回答：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每种语言或平台的原生数值模型有什么限制？&lt;/li&gt;
&lt;li&gt;不引入第三方库时，怎样把风险降到可接受的程度？&lt;/li&gt;
&lt;li&gt;哪些第三方库值得考虑，分别解决什么问题、又带来什么边界？&lt;/li&gt;
&lt;li&gt;当同一计算跨越应用、数据库、JSON API 和数据管道时，怎样确保结果一致、可复算、可对账？&lt;/li&gt;
&lt;li&gt;应该在什么地方舍入，什么地方保留中间精度？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是工程设计指南，不是投资、会计、税务或法律意见。具体舍入规则、利息日计数约定、税务规则、支付渠道金额单位和估值政策，应以产品合同、适用法规、业务政策及经过批准的模型规范为准。&lt;/p&gt;
&lt;h2&gt;一、先明确一个判断：金融计算不是简单地把 double 换成 decimal&lt;/h2&gt;
&lt;p&gt;金融系统最容易暴露的问题，通常不是某一行代码写错，而是不同组件分别做了“看起来合理”的处理，最后结果却对不上。&lt;/p&gt;
&lt;p&gt;例如，一个组合管理系统可能通过 Python 计算研究指标，由 Node.js API 提供服务，Java 交易服务负责费用与账务处理，PostgreSQL 保存交易状态，Snowflake 汇总历史数据。每个系统都能正常执行自己的计算，但仍可能出现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同一个金额在 API 中是 JSON number，进到 Node.js 后变成 IEEE 754 双精度浮点数；&lt;/li&gt;
&lt;li&gt;PostgreSQL 列是 NUMERIC，ORM 或驱动返回应用后却转成浮点数；&lt;/li&gt;
&lt;li&gt;Java 使用 BigDecimal，Python 使用 Decimal，但二者的舍入模式或中间精度不同；&lt;/li&gt;
&lt;li&gt;Snowflake NUMBER 运算与 PostgreSQL NUMERIC 运算对除法的输出 scale 处理不同；&lt;/li&gt;
&lt;li&gt;某个服务逐行舍入，另一个服务先汇总后舍入，最终相差几分；&lt;/li&gt;
&lt;li&gt;同一笔利息在工作日、日历日、时区截止点或 day-count convention 不同的条件下被重复计提或少计一天；&lt;/li&gt;
&lt;li&gt;外汇汇率、价格、数量或费用的单位没有写清楚，数值没有丢精度，但业务结果仍然错误；&lt;/li&gt;
&lt;li&gt;代码升级或数据重放后，重新计算的历史结果与原账务记录不一致。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以需要将三个目标分开：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;数值精度（precision）：&lt;/strong&gt; 内部表示与运算能保留多少位、是否发生二进制近似、溢出或截断。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;业务舍入（rounding）：&lt;/strong&gt; 哪个阶段按什么规则舍弃哪些位，以及舍入差额归属谁。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;业务正确性（business semantics）：&lt;/strong&gt; 用什么币种、单位、利率定义、估值时间点、市场日历、公式版本与业务规则进行计算。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;使用十进制定点数可以减少第一类风险，却不会自动解决第二和第三类问题。&lt;/p&gt;
&lt;h2&gt;二、先建立跨语言的计算规则&lt;/h2&gt;
&lt;h3&gt;1. 区分四种数值表示&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;表示方式&lt;/th&gt;&lt;th&gt;典型形式&lt;/th&gt;&lt;th&gt;适合什么&lt;/th&gt;&lt;th&gt;主要风险&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;二进制浮点数&lt;/td&gt;&lt;td&gt;Java double、JS Number、Python float、Rust f64、SQL FLOAT&lt;/td&gt;&lt;td&gt;统计、数值分析、模型计算以及有明确误差容忍度的算法&lt;/td&gt;&lt;td&gt;多数十进制小数不能被二进制精确表示；比较、累加及不同计算顺序会产生差异&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;十进制定点/十进制数&lt;/td&gt;&lt;td&gt;Java BigDecimal、Python Decimal、Rust Decimal、Snowflake NUMBER、PostgreSQL NUMERIC&lt;/td&gt;&lt;td&gt;金额、费率、价格、税额与要求精确十进制语义的计算&lt;/td&gt;&lt;td&gt;仍然需要控制精度、scale、除法和舍入策略；部分类型的精度范围有限&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;定标整数（scaled integer）&lt;/td&gt;&lt;td&gt;整数分、以微单位计价的价格、整数 basis points&lt;/td&gt;&lt;td&gt;明确量纲和小数位的金额、费率或部分固定精度数据&lt;/td&gt;&lt;td&gt;乘法中间值可能溢出；并非所有货币都是两位小数；除法仍会产生余数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;有理数&lt;/td&gt;&lt;td&gt;分子/分母，例如 1/3&lt;/td&gt;&lt;td&gt;需要精确保留分数关系的计算&lt;/td&gt;&lt;td&gt;分子分母可能快速增长；最终进入货币单位时仍须舍入；平方根、对数等一般不能用有限有理数表示&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;二进制浮点不是“坏技术”。它广泛用于科学计算和定量模型，在明确接受误差并经过数值稳定性验证的风险模型中可以是正确选择。错误在于把它不加区分地用于需要逐分对账的账务金额、费用、结算和支付金额。&lt;/p&gt;
&lt;p&gt;Python 的官方文档用 0.1 说明这一点：其真实二进制值不是精确的十分之一。JavaScript Number 也是 IEEE 754 双精度数，Rust f64 同样是 binary64；PostgreSQL 的 real/double precision 及 Snowflake FLOAT 也属于近似浮点语义。参见 &lt;a href=&quot;https://docs.python.org/3/tutorial/floatingpoint.html&quot;&gt;Python 浮点数说明&lt;/a&gt;、&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_strings&quot;&gt;MDN Numbers&lt;/a&gt;、&lt;a href=&quot;https://doc.rust-lang.org/std/primitive.f64.html&quot;&gt;Rust f64&lt;/a&gt;、&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-numeric.html&quot;&gt;PostgreSQL 数值类型&lt;/a&gt; 和 &lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/data-types-numeric&quot;&gt;Snowflake 数值类型&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;2. 钱不是一个数字&lt;/h3&gt;
&lt;p&gt;一个可用于金融业务的金额至少应该包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数值；&lt;/li&gt;
&lt;li&gt;币种代码；&lt;/li&gt;
&lt;li&gt;计量单位或小数位约定；&lt;/li&gt;
&lt;li&gt;对应的业务语义，例如成交金额、应计利息、费用、净资产或可用余额。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;USD 100.00、JPY 100 和 KWD 100.000 都是“100”，但币种和最小货币单位不同。不能把“金额统一乘 100”作为通用规则。币种小数位应该基于受版本管理的货币元数据（例如 ISO 4217），同时核对支付服务商或产品合同是否有自己的接口金额单位约定。支付渠道的特殊规则应放在该渠道适配器内，而不是悄悄改变核心账本的货币语义。&lt;/p&gt;
&lt;p&gt;类似地，下面这些数字也不能随意互换：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5% 与 5（小数表示是 0.05）；&lt;/li&gt;
&lt;li&gt;125 basis points 与 1.25%；&lt;/li&gt;
&lt;li&gt;股价、每份额价格、份额数量与成交总额；&lt;/li&gt;
&lt;li&gt;基础货币/报价货币方向相反的 FX 汇率；&lt;/li&gt;
&lt;li&gt;年利率、日利率、月利率和有效年化利率；&lt;/li&gt;
&lt;li&gt;市场价格、账面价格、净值、应计利息与已结算现金。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为核心模型建立 Money、Rate、Quantity、Price、Currency、ExchangeRate、AccruedAmount 这类明确的领域类型，比在业务代码中四处传递普通 number / double / decimal 更重要。领域类型应阻止币种不匹配、单位混用以及不合规的隐式转换。&lt;/p&gt;
&lt;h3&gt;3. 不要把所有金额都强行限制在货币最小单位&lt;/h3&gt;
&lt;p&gt;定标整数适合已经明确量纲的结算金额，例如以分表示的 USD 账面金额。但下面这些值通常需要保留中间精度：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每股价格、基金份额或部分资产的 fractional quantity；&lt;/li&gt;
&lt;li&gt;利率、收益率、折扣、税率、FX 汇率；&lt;/li&gt;
&lt;li&gt;逐日利息计提中尚未到入账舍入阶段的金额；&lt;/li&gt;
&lt;li&gt;比例分摊和组合权重；&lt;/li&gt;
&lt;li&gt;曲线插值、收益率曲线、贴现因子及定量模型的中间结果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，一笔 USD 余额最终只需要精确到 0.01，并不意味着计算每日应计利息时也必须每天先舍入到 0.01。这样会把每天的舍入误差累积进业务结果。通常应保留适当的中间精度，在业务规定的计提、过账或支付边界舍入，并能说明这个边界为什么在这里。&lt;/p&gt;
&lt;h3&gt;4. 把舍入规则当成显式业务规则&lt;/h3&gt;
&lt;p&gt;“保留两位小数”是不完整的需求。至少要明确：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;目标 scale：保留到整数、分、毫，还是更多位；&lt;/li&gt;
&lt;li&gt;舍入模式：HALF_UP、HALF_EVEN、向零截断、向正无穷或向负无穷等；&lt;/li&gt;
&lt;li&gt;半值的定义与负数行为；&lt;/li&gt;
&lt;li&gt;舍入发生在哪个阶段：逐行、逐笔、逐日、逐账户、逐批次还是汇总之后；&lt;/li&gt;
&lt;li&gt;舍入差额由谁承担，如何分配给明细；&lt;/li&gt;
&lt;li&gt;舍入策略是否会随产品、市场、税务规则或政策版本变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;常见差异如下：&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;输入&lt;/th&gt;&lt;th&gt;HALF_UP / half away from zero&lt;/th&gt;&lt;th&gt;HALF_EVEN&lt;/th&gt;&lt;th&gt;向零截断&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2.5 舍入到整数&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3.5 舍入到整数&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-2.5 舍入到整数&lt;/td&gt;&lt;td&gt;-3&lt;/td&gt;&lt;td&gt;-2&lt;/td&gt;&lt;td&gt;-2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-3.5 舍入到整数&lt;/td&gt;&lt;td&gt;-4&lt;/td&gt;&lt;td&gt;-4&lt;/td&gt;&lt;td&gt;-3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;不同运行时的默认规则不同。Python Decimal 的默认 context 是 HALF_EVEN；Java BigDecimal 必须在涉及舍入时明确传入 RoundingMode，或用明确配置的 MathContext；Snowflake ROUND 默认采用 HALF_AWAY_FROM_ZERO，也支持对定点数指定 HALF_TO_EVEN；PostgreSQL NUMERIC 的 round 在半值时远离零，而 double precision 的半值行为通常更接近 ties-to-even，但平台行为应核实。参见 &lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/math/BigDecimal.html&quot;&gt;Java BigDecimal&lt;/a&gt;、&lt;a href=&quot;https://docs.python.org/3/library/decimal.html&quot;&gt;Python Decimal&lt;/a&gt;、&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/functions/round&quot;&gt;Snowflake ROUND&lt;/a&gt; 和 &lt;a href=&quot;https://www.postgresql.org/docs/current/functions-math.html&quot;&gt;PostgreSQL 数学函数&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不要依赖默认值。&lt;/strong&gt; 不同系统即使都使用十进制精确类型，也有可能因为舍入模式、scale 或舍入时点不一致而生成不同的账务结果。&lt;/p&gt;
&lt;h3&gt;5. 中间过程必须有精度预算&lt;/h3&gt;
&lt;p&gt;把最终结果定义为两位小数，不代表每一步都应该保留两位。假设要计算：&lt;/p&gt;
&lt;p&gt;价格 × 数量 × 汇率 − 费用 + 应计利息&lt;/p&gt;
&lt;p&gt;每一个输入字段可能各有 scale；乘法会增加小数位，除法可能产生无限循环小数，累加又可能增加整数位。若中间步骤太早把精度压缩，后面的高精度计算无法恢复已被丢弃的数字。&lt;/p&gt;
&lt;p&gt;需要为计算链设计精度预算：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输入允许多大数值范围、最多多少位；&lt;/li&gt;
&lt;li&gt;哪些字段是金额，哪些是价格、数量或比率；&lt;/li&gt;
&lt;li&gt;中间结果预留多少整数位与小数位；&lt;/li&gt;
&lt;li&gt;何处使用高精度中间结果；&lt;/li&gt;
&lt;li&gt;哪一步必须舍入，使用何种模式；&lt;/li&gt;
&lt;li&gt;超过精度或范围时是拒绝交易、进入异常队列，还是按经过批准的降级策略处理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;尤其要区分“精度位数（significant digits）”与“scale（小数点后的位数）”。一个 NUMERIC(18, 8) 只有 10 位整数位；一个精度为 18 的十进制浮点 context 则不是同样的约束。&lt;/p&gt;
&lt;h3&gt;6. 精确类型也会溢出、截断或产生不适当的结果&lt;/h3&gt;
&lt;p&gt;BigDecimal、Decimal、NUMERIC 或定标整数不能代表“绝不会错”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;固定宽度 Decimal 仍有最大有效位数和 scale；&lt;/li&gt;
&lt;li&gt;定标整数相乘时，中间值可能超出 64 位或 128 位；&lt;/li&gt;
&lt;li&gt;数据库列可能因精度不足而拒绝或舍入输入；&lt;/li&gt;
&lt;li&gt;BigDecimal 的除法在没有规定结果精度时遇到无限循环小数会抛异常；&lt;/li&gt;
&lt;li&gt;Python Decimal 会按当前 context 的 precision 和 rounding 处理运算，并可针对 Inexact 等信号配置 trap；&lt;/li&gt;
&lt;li&gt;某些计算可能输出 NaN、Infinity 或负零。不同语言、驱动和数据库处理这些值的方式不同；&lt;/li&gt;
&lt;li&gt;类型转换、序列化和格式化可能再次丢精度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;金融路径中应该把溢出、无效输入、意外舍入和精度不足变成可观察的错误，而不是让其静默变成 0、NULL、浮点近似值或被截断的金额。&lt;/p&gt;
&lt;h2&gt;三、金融计算常见问题清单&lt;/h2&gt;
&lt;p&gt;以下清单可以用于架构评审、代码审查和系统迁移检查。&lt;/p&gt;














































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;问题类别&lt;/th&gt;&lt;th&gt;常见错误方式&lt;/th&gt;&lt;th&gt;推荐工程控制&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;二进制浮点误差&lt;/td&gt;&lt;td&gt;用 double/Number/float/f64 计算费用、应付金额或账面余额&lt;/td&gt;&lt;td&gt;对需要逐分一致的金额使用定标整数或精确十进制类型；浮点只用于经过误差验证的数值模型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;隐式类型转换&lt;/td&gt;&lt;td&gt;精确 decimal 被转换为 float，或精度数被拼接为 JSON number&lt;/td&gt;&lt;td&gt;在接口与驱动边界显式指定类型，金融数值优先用十进制字符串或经验证的 decimal 编码&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;非安全整数/溢出&lt;/td&gt;&lt;td&gt;JS Number 超出安全整数范围；int64 乘法溢出&lt;/td&gt;&lt;td&gt;明确范围，用 checked arithmetic 或更宽中间类型；超范围时失败而非环绕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;舍入模式差异&lt;/td&gt;&lt;td&gt;Java、Python、Snowflake、PostgreSQL 使用不同默认舍入&lt;/td&gt;&lt;td&gt;统一命名业务舍入模式并以测试向量验证各端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;舍入时点差异&lt;/td&gt;&lt;td&gt;先舍入每行再汇总，和先汇总后舍入&lt;/td&gt;&lt;td&gt;业务规则指定计算阶段，保留未舍入中间值，并用明细合计校验总额&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;余数分配&lt;/td&gt;&lt;td&gt;把 100.00 按比例分成几份后，合计为 99.99 或 100.01&lt;/td&gt;&lt;td&gt;明确差额分配算法，采用稳定排序与确定性 tie-breaker；分配结果必须精确等于原总额&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;除法与比例&lt;/td&gt;&lt;td&gt;1/3、利率换算、FX 换算没有规定 scale&lt;/td&gt;&lt;td&gt;指定输出精度和舍入模式；内部按足够精度计算，最终只在规定边界舍入&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;货币单位&lt;/td&gt;&lt;td&gt;假设所有货币都以两位小数表示&lt;/td&gt;&lt;td&gt;货币元数据版本化；内部币种与支付渠道接口单位分开管理&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;利率与百分比单位&lt;/td&gt;&lt;td&gt;5 被理解为 5% 而不是 500%&lt;/td&gt;&lt;td&gt;Rate / Percentage / BasisPoints 使用明确类型和转换函数，不让普通数字跨单位流动&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;日期和时区&lt;/td&gt;&lt;td&gt;使用服务器本地时间作为估值时点，日界线发生偏差&lt;/td&gt;&lt;td&gt;区分 instant、业务日期、市场日期；时区、cut-off、假日日历及生效时间显式化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;利息日计数&lt;/td&gt;&lt;td&gt;用自然日计算代替 ACT/360 或 30/360&lt;/td&gt;&lt;td&gt;明确产品约定、起止日是否包含、闰年处理、复利频率和日历规则&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FX 报价方向&lt;/td&gt;&lt;td&gt;把 base/quote 方向反了，或用倒数代替有 bid/ask 的市场报价&lt;/td&gt;&lt;td&gt;记录货币对方向、买卖方向、报价源、时间戳与精度，不默认汇率可直接互逆&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SQL 精度规则&lt;/td&gt;&lt;td&gt;NUMBER / NUMERIC 除法输出 scale 不同，隐式 cast 改变精度&lt;/td&gt;&lt;td&gt;重要表达式显式 CAST、指定目标 precision/scale 和舍入点；跨库进行黄金样例比对&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NULL / 零 / 缺失&lt;/td&gt;&lt;td&gt;将缺报价、无交易和金额为零混为一谈&lt;/td&gt;&lt;td&gt;定义缺失语义；拒绝把 NULL、0、NaN 或空字符串随意互换&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;求和顺序&lt;/td&gt;&lt;td&gt;浮点聚合顺序变化导致结果尾数不同&lt;/td&gt;&lt;td&gt;对账金额使用精确类型；对浮点模型控制归并次序和容差，必要时使用补偿求和&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;JSON 与消息队列&lt;/td&gt;&lt;td&gt;高精度数被消费端解析为浮点数&lt;/td&gt;&lt;td&gt;精度要求高的金额以 string 或受控 decimal schema 传输；明确版本和量纲&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;重试与重复执行&lt;/td&gt;&lt;td&gt;超时后重试，重复记账或重复支付&lt;/td&gt;&lt;td&gt;业务幂等键、唯一约束、状态机和原子事务；数值精度不能代替交易幂等性&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;公式与政策变更&lt;/td&gt;&lt;td&gt;新规则重算旧数据，无法解释历史差异&lt;/td&gt;&lt;td&gt;保存公式/政策版本、输入快照、数据时间点、原始值、中间审计信息及结果&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;浮点特殊值&lt;/td&gt;&lt;td&gt;NaN 在比较中表现异常，Infinity 意外通过校验&lt;/td&gt;&lt;td&gt;入口验证有限值，阻止 NaN/Infinity 进入账务字段；为模型数值定义专用规则&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;显示与存储混淆&lt;/td&gt;&lt;td&gt;仅格式化显示到两位，误以为内部已舍入&lt;/td&gt;&lt;td&gt;存储值、业务舍入值和显示字符串分开；界面格式化不能充当计算规则&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;一个简单但有用的例子：整数分也会遇到舍入问题&lt;/h3&gt;
&lt;p&gt;将 USD 10.00 存为 1000 分，能够精确加减。但如果分成三份：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每份精确数学值为 333.333… 分；&lt;/li&gt;
&lt;li&gt;三份都直接截断为 333 分，合计为 999 分；&lt;/li&gt;
&lt;li&gt;每份独立四舍五入为 333 分，仍然合计为 999 分；&lt;/li&gt;
&lt;li&gt;某一份补 1 分，才能使分配总和严格等于 1000 分。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以整数分解决的是“金额如何精确存储与加减”，不解决“不可整除的金额如何公平而确定地分配”。对分摊、分红、费用分配与部分退款，应定义剩余单位的分配规则，并保证所有明细之和等于总额。&lt;/p&gt;
&lt;p&gt;一种常见模式是先使用高精度计算每份的理想值，再将结果量化到货币单位，把余数按小数余量排序后分配；余量相同时必须用稳定的业务键打破平局。是否适合具体业务，还需要符合产品和会计规则。&lt;/p&gt;
&lt;h2&gt;四、Java：BigDecimal 是原生工具，但必须用对&lt;/h2&gt;
&lt;p&gt;Java 的标准库提供 BigDecimal 和 BigInteger，不需要引入第三方库即可做任意精度整数和十进制计算。BigDecimal 内部使用未缩放整数和 scale 表示数值，并允许显式控制精度与舍入。&lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/math/BigDecimal.html&quot;&gt;官方 BigDecimal API&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;不依赖第三方库&lt;/h3&gt;
&lt;p&gt;金额、费率和需要精确十进制语义的计算，优先使用 BigDecimal。关键规则包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从字符串或原始十进制文本创建 BigDecimal，不要从已经是 double 的值创建；&lt;/li&gt;
&lt;li&gt;有舍入的计算必须显式指定 scale 和 RoundingMode；&lt;/li&gt;
&lt;li&gt;除法若结果不终止，必须指定 scale / rounding mode，或用明确的 MathContext；&lt;/li&gt;
&lt;li&gt;对金额量纲建立 Money 等领域对象，避免任意 BigDecimal 混用不同币种；&lt;/li&gt;
&lt;li&gt;需要任意精度整数时用 BigInteger；固定宽度 long 运算可使用 Math.addExact / Math.multiplyExact 做溢出检查；&lt;/li&gt;
&lt;li&gt;区分数值相等和表示相等。BigDecimal 的 compareTo 比较数值；equals 还考虑 scale，所以 2.0 和 2.00 的 equals 结果不同。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; java.math.BigDecimal;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; java.math.RoundingMode;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BigDecimal amount &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; BigDecimal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;10.00&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BigDecimal rate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; BigDecimal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;0.0725&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 中间结果不提前舍入。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BigDecimal rawFee &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; amount.&lt;/span&gt;&lt;span&gt;multiply&lt;/span&gt;&lt;span&gt;(rate);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 仅在经过业务规则批准的边界量化到两位小数。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BigDecimal fee &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; rawFee.&lt;/span&gt;&lt;span&gt;setScale&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, RoundingMode.HALF_UP);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不要这样创建金额：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;// double 里的近似值会被完整带入 BigDecimal。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BigDecimal wrong &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; BigDecimal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0.1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 从十进制文本构造，保留输入表达的精确十进制值。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;BigDecimal right &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; BigDecimal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;0.1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BigDecimal.valueOf(double) 使用 double 的规范字符串表示，通常比 new BigDecimal(double) 更易理解；但如果原始数据最初已经经过 double 转换，那么原始精度可能早已丢失。最好的办法仍然是在入口使用原始十进制字符串或精确整数单位。&lt;/p&gt;
&lt;p&gt;还要注意：BigDecimal 的“任意精度”不是没有代价，也不代表每一步都应无限保留位数。业务应定义允许的精度与最终量化规则，控制运算成本及数据库映射。&lt;/p&gt;
&lt;h3&gt;借助第三方库&lt;/h3&gt;
&lt;p&gt;第三方库的价值主要在于 Money/Currency 类型、币种元数据、格式化与业务 API，而非 BigDecimal 本身缺乏十进制能力。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joda.org/joda-money/&quot;&gt;Joda-Money&lt;/a&gt;：提供 Money 和 Currency 等领域抽象；适合希望限制币种与金额混用的应用。对高精度利息中间值、汇率与价格，仍需明确选用的数值表示以及如何进入或退出 Money 类型。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://javamoney.github.io/&quot;&gt;JSR 354 / javax.money&lt;/a&gt; 及其实现（例如 Moneta）：提供货币金额与货币算术的 API 抽象。需在项目中明确使用的实现、舍入策略和货币元数据版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;引入 Money 库也不能替代业务规则设计。库知道“金额和币种”不代表它知道某个债券采用什么 day-count convention、税务舍入规则或交易市场的结算日历。&lt;/p&gt;
&lt;h2&gt;五、Node.js / TypeScript：没有内置 Decimal，BigInt 只能解决整数问题&lt;/h2&gt;
&lt;p&gt;JavaScript 的 Number 是 IEEE 754 双精度浮点数。它的最大安全整数是 2^53 − 1；大于该范围的整数不一定能够准确区分。BigInt 可以表示任意大的整数，但不能表示十进制小数；BigInt 除法会得到整数结果，例如 5n / 2n 为 2n。&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_strings&quot;&gt;MDN：Numbers and strings&lt;/a&gt;；&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt&quot;&gt;MDN：BigInt&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;不依赖第三方库&lt;/h3&gt;
&lt;p&gt;核心方案有两种：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方案 A：用安全范围内的整数存储货币最小单位。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于最大值有明确上限的结算金额，可以用 number 表示整数分，但必须在入口和计算后检查 Number.isSafeInteger，并且每个中间结果也要保持在安全范围内。只检查最后结果不够，因为中间值可能已经失真。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方案 B：用 BigInt 表示定标整数。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于金额较大或乘法中间值可能超过安全整数范围的场景，使用 BigInt 作为整数金额单位、bps 或其他明确 scale 的定标数。用整数乘法和除法处理 rate，并自行实现经过测试的舍入规则。BigInt 与 Number 不能混用；序列化时通常需要把金额编码为十进制字符串，因为 JSON.stringify 默认不能直接序列化 BigInt。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; amountMinor&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; 1000&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// 例如 USD 10.00，对应 1000 分&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; rateBps&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; 725&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;;     &lt;/span&gt;&lt;span&gt;// 725 bps = 7.25%&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; denominator&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; 10000&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; numerator&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; amountMinor &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; rateBps;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; whole&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; numerator &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; denominator;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; remainder&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; numerator &lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; denominator;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 这里仅演示 HALF_UP 的正数路径。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 正负数、负值的半值、溢出和目标 scale 必须由完整的领域函数处理。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; roundedMinor&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  whole &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (remainder &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt; &amp;gt;=&lt;/span&gt;&lt;span&gt; denominator &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt; :&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; apiValue&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  amountMinor: roundedMinor.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  currency: &lt;/span&gt;&lt;span&gt;&quot;USD&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个例子故意不把舍入逻辑封装成通用函数：生产实现应支持正负金额，明确 HALF_EVEN / HALF_UP / 向零截断等政策，且为除数为零、币种 scale、负数和最大范围写测试。BigInt 的整数精确性并不会自动让比例计算正确。&lt;/p&gt;
&lt;p&gt;对需要股价、数量、FX 率等超过币种最小单位精度的输入，不能简单转成分再计算；要使用更高 scale 的定标数或十进制库。&lt;/p&gt;
&lt;h3&gt;借助第三方库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MikeMcl/decimal.js&quot;&gt;decimal.js&lt;/a&gt;：基于可配置精度的十进制运算。适合需要高精度小数、比率和计算链的应用。要集中设置 precision 与 rounding，避免不同模块各自使用默认配置。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MikeMcl/bignumber.js&quot;&gt;bignumber.js&lt;/a&gt;：提供任意精度的十进制数值运算，支持可配置舍入。适用于不能只用最小货币单位表达的计算。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MikeMcl/big.js&quot;&gt;big.js&lt;/a&gt;：较轻量的任意精度十进制库，适合基础十进制运算需求。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dinerojs.com/&quot;&gt;Dinero.js&lt;/a&gt;：更关注货币、币种与金额运算抽象，适合应用层 Money 领域模型；应核实所用版本的金额表示、舍入和扩展方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;库的引入不应导致系统同时出现多种互不兼容的 decimal 规则。应确定核心数值类型，并将输入解析、数据库映射和 API 序列化集中处理。特别要检查金额是否被 JSON parser、ORM、日志模板或前端再次转换为 Number。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Node.js 的特别风险：&lt;/strong&gt; JSON 数字字面量本身没有携带一个强制的任意精度十进制类型。若对端只提供 JSON number，而金额必须精确，接收服务可能在业务代码运行前就失去原始十进制文本。优先要求上游将金额作为字符串传输，或使用支持任意精度数字原文的解析方案；单纯执行 String(parsedNumber) 不能恢复丢失的精度。&lt;/p&gt;
&lt;h2&gt;六、Python：标准库 Decimal 能力很强，但默认 context 不是无限精度&lt;/h2&gt;
&lt;p&gt;Python 同时提供 int、float、decimal.Decimal 和 fractions.Fraction。int 可自动扩展任意精度（受可用资源限制）；float 使用二进制浮点；Decimal 是标准库十进制算术；Fraction 表示有理数。&lt;a href=&quot;https://docs.python.org/3/library/decimal.html&quot;&gt;Python Decimal 文档&lt;/a&gt;、&lt;a href=&quot;https://docs.python.org/3/tutorial/floatingpoint.html&quot;&gt;Python 浮点数说明&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;不依赖第三方库&lt;/h3&gt;
&lt;p&gt;对金额、费用、费率和十进制计算链，通常可以直接使用标准库 Decimal：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从字符串构造，例如 Decimal(“0.1”)，不要直接把 float 传入；&lt;/li&gt;
&lt;li&gt;理解当前 context 的 precision、rounding、exponent 范围和 traps；&lt;/li&gt;
&lt;li&gt;在特定计算中用 localcontext 明确精度与舍入模式，避免依赖被其他代码更改的全局状态；&lt;/li&gt;
&lt;li&gt;在审核严格的计算中，可对 Inexact、Rounded 或 FloatOperation 信号设置监控或 trap；&lt;/li&gt;
&lt;li&gt;用 quantize 将结果舍入到规定 scale，而不是仅使用 format 显示两位小数。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; decimal &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Decimal, localcontext, &lt;/span&gt;&lt;span&gt;ROUND_HALF_UP&lt;/span&gt;&lt;span&gt;, Inexact&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;amount &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Decimal(&lt;/span&gt;&lt;span&gt;&quot;10.00&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;rate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Decimal(&lt;/span&gt;&lt;span&gt;&quot;0.0725&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; localcontext() &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; ctx:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ctx.prec &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 40&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # 如业务要求异常结果必须显式暴露，可开启 Inexact trap。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # 需要注意：开启后，非终止除法也可能直接抛出异常。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # ctx.traps[Inexact] = True&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    raw_fee &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; amount &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; rate&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    fee &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; raw_fee.quantize(Decimal(&lt;/span&gt;&lt;span&gt;&quot;0.01&quot;&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;rounding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;ROUND_HALF_UP&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(fee)  &lt;/span&gt;&lt;span&gt;# Decimal(&apos;0.73&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Decimal 构造自 float 时，会准确保留该 float 的二进制近似值，而不是自动猜测开发者原本想输入的十进制数字。例如，Decimal(0.1) 会带入一长串十进制数字；这不是 Decimal 出错，而是输入转换已经明确了一个不同的值。&lt;/p&gt;
&lt;p&gt;Decimal 的 context precision 影响运算结果，不只是限制输入。默认 precision 通常是 28 位有效数字；对长精度的组合计算、汇率和中间步骤，应根据数值范围设定 context，并处理除法等可能产生非终止小数的运算。如果只把最终结果 quantize 到两位，但运算过程的 context 太小，早期丢掉的有效数字仍然无法恢复。&lt;/p&gt;
&lt;p&gt;Fraction 可以在不引入第三方库的情况下精确表示 1/3 等有理数，适合某些份额和比例算法。可是分子分母可能膨胀，且平方根、对数等运算不一定能保持有限有理数。它并不是所有金融算法的通用替代品。&lt;/p&gt;
&lt;h3&gt;借助第三方库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/py-moneyed/py-moneyed&quot;&gt;py-moneyed&lt;/a&gt;：提供货币和 Money 类型，帮助把金额与币种绑定；数值运算仍需和 Decimal 等精确表示协作，货币元数据及舍入政策也要经过业务校验。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://numpy.org/&quot;&gt;NumPy / pandas&lt;/a&gt;：对统计、行情分析和批量数值计算很有用，但常见的 float64 数组仍然是近似二进制浮点。不要因为数据在 DataFrame 里就把 float64 用作账务金额。Python Decimal 放进通用数组中也可能退化为 object 类型并影响性能，需要在准确性和效率之间进行明确设计。&lt;/li&gt;
&lt;li&gt;面向数值模型的第三方数学库可以扩展算法能力，但若返回 float，结果仍需要按模型的误差标准处理；这类库本身不会赋予结果精确的货币语义。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Python 的优势是 Decimal 在标准库中，不意味着每个 Pandas/Spark/JSON/数据库接口都会自动保留 Decimal。对所有转换边界都要做类型和往返验证。&lt;/p&gt;
&lt;h2&gt;七、Rust：标准库没有十进制 Decimal，需要明确选择整数还是第三方类型&lt;/h2&gt;
&lt;p&gt;Rust 标准库的 f32/f64 是二进制浮点类型；标准库没有通用 Decimal 类型。无第三方依赖时，Rust 可以通过 i64 / i128 定标整数、checked arithmetic 与明确的比例算法，准确处理范围内的整数运算。使用时必须明确整数单位和溢出策略。&lt;/p&gt;
&lt;h3&gt;不依赖第三方库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;对金额使用 minor units，或对价格、数量、费率采用明确 scale 的整数；&lt;/li&gt;
&lt;li&gt;对乘法使用更宽的中间类型（例如输入为 i64 时，部分场景先转为 i128），并使用 checked_add、checked_mul 等方法检测溢出；&lt;/li&gt;
&lt;li&gt;进入输出货币单位时，显式处理除法余数和舍入模式；&lt;/li&gt;
&lt;li&gt;把币种、scale、单位及舍入模式封装为领域结构体，而不是让各模块独立约定整数含义；&lt;/li&gt;
&lt;li&gt;对定量模型使用 f64 时，应明确可接受的误差、稳定性和跨版本再现要求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;定标整数的核心难点是范围和中间运算。例如两个合法 i64 值相乘，结果仍可能超出 i64。溢出检查需要发生在结果产生之前，而不应寄希望于最后再验证。&lt;/p&gt;
&lt;h3&gt;借助第三方库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.rs/rust_decimal/latest/rust_decimal/&quot;&gt;rust_decimal&lt;/a&gt;：面向金融用途的定精度十进制类型，采用有限宽度的整数系数与 scale。基本算术很方便，但其有效位数和 scale 上限是实实在在的限制。必须测试极大本金、长精度价格、复合比例和中间乘积，不能仅看库名中的 Decimal 就假定精度无限。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.rs/bigdecimal/latest/bigdecimal/&quot;&gt;bigdecimal&lt;/a&gt;：用大整数系数和十进制位置支持更广的精度范围，适合需要更大精度/scale 的场景。性能、分配成本和运算复杂度应在代表性负载下测量。&lt;/li&gt;
&lt;li&gt;若需要额外的 Money/Currency 抽象，优先考察能明确表达币种、scale 与序列化语义的类型设计。不要只包装一个 Decimal 字段就认为单位不可能混淆。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特别注意 Rust 的 serde JSON 配置。一些 Decimal 类型可以配置为输出 JSON 数字，也可以配置为输出字符串。若消费者是 JavaScript，输出为 JSON number 可能再次失去精度；必须根据接口契约选择格式，并在端到端测试中验证。&lt;/p&gt;
&lt;h2&gt;八、C# / .NET：decimal 很适合金额，但它不是任意精度数值类型&lt;/h2&gt;
&lt;p&gt;C# 的 System.Decimal 是 .NET 标准库提供的十进制数值类型。它由 96 位整数系数、符号和 scale 组成，scale 可表示 0 到 28 位小数；有效精度大约为 28–29 位十进制数字，最大绝对值约为 7.9228 × 10^28。它能精确表示常见的十进制金额输入，但范围和精度都有限，并不像 Java BigDecimal 或 Python Decimal 一样支持任意大的系数。&lt;/p&gt;
&lt;p&gt;Microsoft 将 decimal 明确定位于金额、利率等需要十进制精度的计算。文档同时提醒，decimal 仍然需要舍入：例如 1 / 3 的结果只能保留有限位，随后再乘以 3 也可能得到 0.9999999999999999999999999999，而不是数学意义上的 1。&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/fundamentals/runtime-libraries/system-decimal&quot;&gt;Microsoft：System.Decimal&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;不依赖第三方库&lt;/h3&gt;
&lt;p&gt;对金额、费用、税额和固定精度比率，优先使用 C# 的 decimal，而不是 double 或 float。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; System&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Globalization&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;decimal&lt;/span&gt;&lt;span&gt; amount&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; 10.00m&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;decimal&lt;/span&gt;&lt;span&gt; rate&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; 0.0725m&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// decimal 运算，保留中间值，不立即量化到货币单位。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;decimal&lt;/span&gt;&lt;span&gt; rawFee&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; amount &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; rate;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 仅在业务规定的边界进行舍入。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// AwayFromZero 只是本例选择；生产策略要由业务规则决定。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;decimal&lt;/span&gt;&lt;span&gt; fee&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; Math.&lt;/span&gt;&lt;span&gt;Round&lt;/span&gt;&lt;span&gt;(rawFee, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, MidpointRounding.AwayFromZero);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 从 API 文本解析时，显式指定文化设置，不依赖服务器当前区域。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;decimal&lt;/span&gt;&lt;span&gt; parsed&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; decimal&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &quot;1234.56&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    NumberStyles.Number,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    CultureInfo.InvariantCulture);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关键事项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;使用 decimal 字面量后缀 m。&lt;/strong&gt; 例如 0.1m 会按 decimal 字面量处理；不要先把值放入 double，再强制转换成 decimal，转换不能恢复已丢失的原始十进制输入。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;舍入模式要显式指定。&lt;/strong&gt; Math.Round(decimal, digits) 默认使用 MidpointRounding.ToEven，也就是 ties-to-even / banker’s rounding。它不一定符合产品要求。若规则规定半值远离零，应使用 MidpointRounding.AwayFromZero；其他模式需按运行时支持情况选择并建立测试。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;decimal 不意味着除法无限精确。&lt;/strong&gt; 除法结果需要落入有限的 precision/scale；不能在一串计算的每个步骤都随意舍入。用领域函数定义最终量化边界，并用边界测试检查结果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;范围仍然有限。&lt;/strong&gt; 超出 decimal 可表达范围的运算会触发 OverflowException。不要在捕获异常后把结果静默替换为 0 或默认值；应明确失败、拒绝输入或进入异常处理流程。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不要依赖当前区域解析机器接口数据。&lt;/strong&gt; 小数分隔符可能是点，也可能是逗号。数据库和 API 的机器格式需要固定文化规则；货币符号和本地化格式只用于展示。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储精度和金额精度不是一回事。&lt;/strong&gt; .NET decimal 可保留到 28 位小数，但这不代表所有币种都应该保留 28 位，也不代表价格、利率、中间值和最终可支付金额使用同一个 scale。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对宽整数乘法另行检查范围。&lt;/strong&gt; 若用 long 存储定标整数，乘法中间值可能溢出。现代 .NET 提供 BigInteger，可在不引入第三方库时做任意精度整数计算；但 BigInteger 本身不包含小数点、币种或舍入规则，需要自己封装系数和 scale。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C# 与 Java/Python 的差异是值得注意的：Java BigDecimal 和 Python Decimal 都提供更灵活的 precision 控制；C# decimal 的常见算术更直接，但固定的数值范围可能不适合所有高精度估值、长链中间运算或极大累计值。对于绝大多数日常金额、订单、费用和账务字段，decimal 通常足够；对于高精度定量计算或需要超出其范围的数值，应先定义实际精度需求，再选择 BigInteger 定标整数或经过评估的高精度库。&lt;/p&gt;
&lt;h3&gt;借助第三方库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/RemyDuijkeren/NodaMoney&quot;&gt;NodaMoney&lt;/a&gt;：为 .NET 提供 Money 和 Currency 类型、货币元数据、解析/格式化、舍入策略以及金额拆分能力，避免业务代码把币种规则散落在各处。它不是任意精度数学引擎，金额运算仍受其底层数值类型和配置约束。&lt;/li&gt;
&lt;li&gt;如果系统需要更复杂的多币种金额、汇率或特定业务约定，应把第三方 Money 类型放在领域模型层，并检查该库对 currency minor unit、scale、JSON 序列化、金额拆分和 context 的具体行为。Money 类型可以减少单位混用，但不能代替利息日计数、税务规则和估值政策。&lt;/li&gt;
&lt;li&gt;对科学计算、风险模型或矩阵运算，应单独选择经过验证的数值算法和相关库。不要因为这些库提供高性能 double 运算，就用它们计算应付金额、佣金或账面余额。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NodaMoney 的发布说明提供了一个值得注意的工程案例：库的 MoneyContext、舍入和反序列化行为曾随版本演进；例如，反序列化的 Money 值可能根据当前 context 应用舍入。升级库版本时，不应只跑编译与基本加减测试，还要验证 JSON/数据库往返后金额是否变化，context 是否隐式影响业务结果，以及拆分金额是否仍然满足“所有份额之和等于原金额”。&lt;a href=&quot;https://github.com/RemyDuijkeren/NodaMoney/releases&quot;&gt;NodaMoney releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C# 的核心建议：&lt;/strong&gt; 用 decimal 解决常规十进制金额计算，用显式的 MidpointRounding 和统一的金额领域类型约束业务；不要把 decimal 当成无限精度；对外部输入、数据库映射、序列化、版本升级与边界溢出建立自动化测试。&lt;/p&gt;
&lt;h2&gt;九、Snowflake：NUMBER 很适合精确数值计算，但精度和 scale 有上限&lt;/h2&gt;
&lt;p&gt;Snowflake 的 NUMBER/DECIMAL/NUMERIC 是定点数，最大 precision 为 38 位，scale 最多可达 37；默认 NUMBER 的精度/scale 为 NUMBER(38,0)。FLOAT、DOUBLE 等是近似浮点数。Snowflake 文档也说明，不同算术运算的结果 precision 和 scale 依赖输入类型，不能把 NUMBER(38, 18) 理解为每次运算都能无损保留任意多位小数。&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/data-types-numeric&quot;&gt;Snowflake Numeric Data Types&lt;/a&gt;、&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/operators-arithmetic&quot;&gt;Arithmetic Operators&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;不依赖第三方库&lt;/h3&gt;
&lt;p&gt;业务数值建议优先使用明确的 NUMBER(p,s)，并在关键表达式中控制精度：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-- 原始字段保留合理的业务精度和范围&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; TABLE&lt;/span&gt;&lt;span&gt; trade_input&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    quantity       &lt;/span&gt;&lt;span&gt;NUMBER&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    price          &lt;/span&gt;&lt;span&gt;NUMBER&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    fee_rate       &lt;/span&gt;&lt;span&gt;NUMBER&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    currency_code  &lt;/span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-- 关键表达式明确类型，并在业务指定的舍入边界量化&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ROUND&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        CAST&lt;/span&gt;&lt;span&gt;(quantity &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; NUMBER&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        *&lt;/span&gt;&lt;span&gt; CAST&lt;/span&gt;&lt;span&gt;(price &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; NUMBER&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;)),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        &apos;HALF_EVEN&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; rounded_trade_amount&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; trade_input;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;示例仅演示显式类型与舍入位置；NUMBER 的精度和 scale 应按实际字段范围、乘法中间精度和后续运算推导，不能复制后不做容量分析。&lt;/p&gt;
&lt;p&gt;实践中要注意：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;避免将关键金额列、费率列和计算表达式转为 FLOAT。只把最后结果 CAST 回 NUMBER，并不能修复中途已经发生的近似误差。&lt;/li&gt;
&lt;li&gt;对乘法和除法，检查输出 precision/scale 规则和精度上限；若后续还要多次运算，需留出中间精度，而不是在每一条 SQL 的每个字段上都直接限定为两位。&lt;/li&gt;
&lt;li&gt;明确 CAST 与 ROUND 的位置。把字段存为 NUMBER(18,2) 会把字段 scale 作为存储契约；这与保存高精度中间值再在支付/入账边界舍入不是一回事。&lt;/li&gt;
&lt;li&gt;Snowflake ROUND 默认采用 HALF_AWAY_FROM_ZERO。若业务规定 HALF_TO_EVEN，应显式指定舍入模式；该参数适用于定点数，不能直接用于 FLOAT。&lt;/li&gt;
&lt;li&gt;处理除零时，不要仅为了避免 SQL 报错就无条件改成 DIV0 或 DIV0NULL。它们对除零情况的处理意味着业务语义变化；如果比率无法计算，应判断是无效数据、缺失值还是有业务定义的零值。&lt;/li&gt;
&lt;li&gt;注意 NULL 传播与聚合语义。缺失价格、缺失汇率不能随意变成零；SUM 忽略 NULL 也不等于“数据完整”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Snowflake 官方还列有 DECFLOAT 数据类型，具有动态十进制指数和最多 38 位有效数字。是否用于核心业务字段，应结合目标 Snowflake 环境、版本支持、驱动映射及团队规范验证；对明确固定 scale 的金额，NUMBER(p,s) 通常更容易表达 schema 契约。不能假设每个客户端版本都用相同方式把新的数值类型映射为语言对象。&lt;/p&gt;
&lt;h3&gt;借助第三方库&lt;/h3&gt;
&lt;p&gt;Snowflake SQL 计算本身通常无需第三方十进制库：精确数值应优先用 Snowflake 原生 NUMBER/DECFLOAT 能力。第三方组件更可能存在于应用端或数据转换层，例如 Python Decimal、Java BigDecimal、Node.js Decimal 库、Rust Decimal 类型。&lt;/p&gt;
&lt;p&gt;需要关注的其实是跨系统映射：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connector 返回 NUMBER 时，应用中究竟收到 Decimal、整数还是字符串？&lt;/li&gt;
&lt;li&gt;NUMBER(38, n) 是否被某个驱动或 ORM 无损映射？&lt;/li&gt;
&lt;li&gt;SQL 查询结果导出到 Arrow、pandas、Node.js 对象或 JSON 时，scale 与精度是否保留？&lt;/li&gt;
&lt;li&gt;客户端重新计算同一个公式时，是否用了和 SQL 相同的舍入策略？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些都应通过使用真实最大值与小数位的 round-trip test 验证，而不是依靠驱动“支持 Snowflake”这一描述。&lt;/p&gt;
&lt;h2&gt;十、PostgreSQL：优先 NUMERIC，而不是把 money 当作通用财务模型&lt;/h2&gt;
&lt;p&gt;PostgreSQL 提供整数类型、real/double precision 以及 NUMERIC/DECIMAL。NUMERIC 支持精确十进制运算，并且可容纳的精度范围很大；real 和 double precision 是近似浮点类型。官方明确建议要求精确存储和计算的货币金额使用 NUMERIC，而不是浮点数。&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-numeric.html&quot;&gt;PostgreSQL Numeric Types&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;不依赖第三方库&lt;/h3&gt;
&lt;p&gt;常规账务金额可使用 NUMERIC(p,s)；当中间值需要更大精度时，也可以评估未显式限定 precision/scale 的 NUMERIC，并设置合理的数据边界及应用校验。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; TABLE&lt;/span&gt;&lt;span&gt; account_posting&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    posting_id    &lt;/span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;span&gt; PRIMARY KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    currency_code &lt;/span&gt;&lt;span&gt;CHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;NOT NULL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    amount        &lt;/span&gt;&lt;span&gt;NUMERIC&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;NOT NULL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    posted_amount &lt;/span&gt;&lt;span&gt;NUMERIC&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;NOT NULL&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;-- 应按业务规则在指定阶段舍入，而不是对所有中间字段一律保留两位。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ROUND&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(amount), &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; total_amount&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; account_posting&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; currency_code &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;USD&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同样，这里的精度只是示例，不是所有金融系统的推荐固定值。对于交易金额、费用、证券价格、利息和比率，字段应分别设计。&lt;/p&gt;
&lt;p&gt;PostgreSQL 特别容易踩到的几个点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;NUMERIC 与 DOUBLE 的舍入规则不一样。&lt;/strong&gt; PostgreSQL 的 ROUND(numeric) 在半值时远离零；double precision 的半值处理通常是 ties-to-even，但具体行为由平台决定。跨系统复算必须显式定义业务模式，而不是依赖 SQL 函数的默认值。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;整数除法会截断。&lt;/strong&gt; 两个整数相除可能不是你想要的小数比例；在表达式中使用明确的 NUMERIC 类型，并验证除法结果 scale。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NUMERIC(p,s) 的 scale 是契约。&lt;/strong&gt; 输入超过 scale 时会被量化到所需 scale；超出整数位范围可能报错。存储列的定义应该与字段允许范围和业务规则一致。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;money 类型不是多币种领域建模。&lt;/strong&gt; 它的 fractional precision 受 lc_monetary 配置影响，输入/输出与本地化有关；不同环境间迁移或比较时容易引起歧义。PostgreSQL 文档也提醒不要用浮点数处理 money。对跨币种、多种金额精度以及可审计计算，一般优先考虑 NUMERIC 配合 currency_code 和明确的金额模型。&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-money.html&quot;&gt;PostgreSQL Monetary Types&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;检查客户端驱动的数据映射。&lt;/strong&gt; 数据库列是 NUMERIC，不代表每个客户端都会以无损的语言类型返回。有些驱动会将任意精度 numeric 返回字符串，正是为了避免先转换到有限精度浮点类型。不要为了方便而无条件 parseFloat。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;借助第三方库&lt;/h3&gt;
&lt;p&gt;PostgreSQL 内部没有必要为 NUMERIC 再装一套第三方十进制算术库。第三方库主要用于应用客户端对数据库数值的无损映射和领域类型封装。&lt;/p&gt;
&lt;p&gt;例如，Rust 的 rust_decimal 提供可选的 PostgreSQL 集成能力，但其自身的数字范围小于 PostgreSQL NUMERIC 的完整能力范围，读取超出 rust_decimal 范围的数据库值可能失败或需要改用更宽的表示。若要求保留数据库可存储的完整精度，可以考虑 BigDecimal 类型映射或直接以字符串/系数+scale 形式处理，再根据业务边界转换。&lt;/p&gt;
&lt;p&gt;同理，Java BigDecimal、Python Decimal 与 Node.js 的十进制库都可以用于客户端计算，但必须验证 ORM / driver 的实际映射，而不是只看数据库 schema。&lt;/p&gt;
&lt;h2&gt;十一、跨语言和跨数据库的一致性：应如何设计系统？&lt;/h2&gt;
&lt;h3&gt;1. 定义计算契约，而不是仅定义字段类型&lt;/h3&gt;
&lt;p&gt;每一项重要金融计算应说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输入字段、类型、单位和范围；&lt;/li&gt;
&lt;li&gt;公式及操作顺序；&lt;/li&gt;
&lt;li&gt;精度和 scale 规则；&lt;/li&gt;
&lt;li&gt;舍入模式及舍入节点；&lt;/li&gt;
&lt;li&gt;处理空值、除零、负值、溢出和异常市场数据的方式；&lt;/li&gt;
&lt;li&gt;使用的交易日期、估值日期、时区、市场日历及 day-count convention；&lt;/li&gt;
&lt;li&gt;公式、数据、市场数据及业务政策的版本；&lt;/li&gt;
&lt;li&gt;需要保证哪些不变量，例如交易分配总额等于母交易总额。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于投资组合估值，至少要区分 instrument price、quantity、currency、FX rate、accrued interest、market value 和 base-currency value。不同资产可能使用不同数量精度、价格精度和应计利息规则。不能把一个通用的 Money 类型当作所有字段的统一替代品。&lt;/p&gt;
&lt;h3&gt;2. 明确哪个组件是权威计算方&lt;/h3&gt;
&lt;p&gt;如果同一个公式由 Java 服务、PostgreSQL、Snowflake 和 Python Notebook 分别计算，系统很容易产生“每个都算得通，但互相对不上”的问题。&lt;/p&gt;
&lt;p&gt;可以采用以下原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;交易记账、费用、余额、已实现损益等需要即时一致的核心结果，应有明确的权威计算服务或事务边界；&lt;/li&gt;
&lt;li&gt;需要数据库内处理的大规模聚合，可以由 SQL 计算，但公式应有版本管理和对账测试；&lt;/li&gt;
&lt;li&gt;Snowflake 与 PostgreSQL 如果都计算相同财务指标，应明确哪边是权威值，哪边是验证或分析值；&lt;/li&gt;
&lt;li&gt;AI Agent 可以生成查询、提出解释、调用被授权的计算接口，但不能自己改变金额精度、舍入模式、授权边界或经过批准的业务口径。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要把“把 SQL 搬进 Snowflake”视为纯性能重构。如果计算原来由 Java BigDecimal 完成，迁移到 Snowflake NUMBER 后，要验证除法 scale、ROUND 模式、NULL 处理及汇总位置，不能只检查 SQL 的语法等价。&lt;/p&gt;
&lt;h3&gt;3. 建立跨栈黄金测试向量（golden vectors）&lt;/h3&gt;
&lt;p&gt;把典型输入、预期输出、舍入政策和异常结果固定下来，供 Java、Node.js、Python、Rust、PostgreSQL 和 Snowflake 共用。测试集至少包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0.1 + 0.2 与精确十进制语义；&lt;/li&gt;
&lt;li&gt;2.675 舍入到两位小数；&lt;/li&gt;
&lt;li&gt;正数和负数的半值边界；&lt;/li&gt;
&lt;li&gt;0、负数、最大金额、最大合法数量和最小非零价格；&lt;/li&gt;
&lt;li&gt;1/3、汇率换算和不能整除的金额分摊；&lt;/li&gt;
&lt;li&gt;最大 precision 和 scale 边界、整数溢出及除数为零；&lt;/li&gt;
&lt;li&gt;NULL、缺失价格、NaN、Infinity 和负零的处理；&lt;/li&gt;
&lt;li&gt;不同币种的 minor unit；&lt;/li&gt;
&lt;li&gt;交易跨越市场日界线、闰年、假日和夏令时；&lt;/li&gt;
&lt;li&gt;重新执行同一个输入时产生完全相同的账务结果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对账金额应按业务要求逐单位精确比较，而不是统一使用“误差小于 0.0001 就算相等”。浮点模型可以使用有依据的绝对和相对误差阈值，但这个阈值必须属于模型验证的一部分，不应外溢到账务金额核对。&lt;/p&gt;
&lt;h3&gt;4. 浮点模型要关注算法稳定性与运行可重复性&lt;/h3&gt;
&lt;p&gt;在风险、量化研究、蒙特卡洛模拟或统计计算中，浮点数可能是适当选择，但还应注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大数和小数相加会丢失低位；不同的聚合顺序可能生成不同结果；&lt;/li&gt;
&lt;li&gt;直接减去两个接近的数会产生 catastrophic cancellation；&lt;/li&gt;
&lt;li&gt;迭代算法、函数库、CPU 与运行时版本可能影响部分数值结果；&lt;/li&gt;
&lt;li&gt;单纯增加小数位显示精度不会增加已经丢失的信息；&lt;/li&gt;
&lt;li&gt;对需要跨运行完全复现的计算，要记录参数、随机种子、算法版本、运行环境和数据快照。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以考虑 Kahan / Neumaier 等补偿求和算法或稳定的数值算法，但这些方法是降低特定数值误差，不是把浮点数变成精确十进制账务类型。&lt;/p&gt;
&lt;h3&gt;5. 结果需要能复算、能对账、能解释&lt;/h3&gt;
&lt;p&gt;对于重要的金额结果，建议保存或能够追溯：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;原始输入与单位；&lt;/li&gt;
&lt;li&gt;输入来源及业务时间点；&lt;/li&gt;
&lt;li&gt;使用的公式和政策版本；&lt;/li&gt;
&lt;li&gt;经过必要规范化的中间值；&lt;/li&gt;
&lt;li&gt;最终未舍入值（在政策和存储要求允许时）、舍入值及舍入模式；&lt;/li&gt;
&lt;li&gt;执行服务/数据库查询的版本或标识；&lt;/li&gt;
&lt;li&gt;对应的 transaction ID / calculation ID / Snowflake query ID；&lt;/li&gt;
&lt;li&gt;与交易总额、订单总额、持仓估值或总账控制值进行的校验结果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这并不意味着把所有中间值无限期复制到每张表。应根据可审计性、隐私、成本和保留策略决定存储方式，但至少必须能够在授权范围内用原始输入和对应版本重现结果。&lt;/p&gt;
&lt;h2&gt;十二、金融计算常见场景的额外注意事项&lt;/h2&gt;
&lt;h3&gt;利息计提与复利&lt;/h3&gt;
&lt;p&gt;利息不是简单的本金乘年利率。要明确年利率是名义利率还是有效利率、起止日是否包含、是否使用 ACT/360、ACT/365F、ACT/ACT 或 30/360 等 day-count convention、如何处理闰年、利息多久资本化，以及周末和假日是否改变计息区间。对于按日计提的金额，还需要区分每天保留的精度和实际入账的舍入点。&lt;/p&gt;
&lt;p&gt;一个公式即使在所有语言中完全一致，只要日期计数规则不同，结果也会不同。因此 day-count convention 和市场日历需要成为有版本的业务配置，不应埋在各个服务的方法里。&lt;/p&gt;
&lt;h3&gt;外汇换算&lt;/h3&gt;
&lt;p&gt;FX 相关字段必须记录币种对方向、报价方式、bid/ask 或 mid、数据源、时间戳和精度。把 1 个 base currency 对应多少 quote currency 与倒过来的汇率混淆，会造成数量级或方向错误。市场存在 bid/ask spread 时，也不能简单通过取倒数来代替反向报价。&lt;/p&gt;
&lt;p&gt;汇率通常比货币金额需要更多小数位。计算过程中保留 rate 精度，在产品规定的换汇/结算边界量化到目标货币单位，并将输入汇率及其时间点保留到可追溯记录。&lt;/p&gt;
&lt;h3&gt;费用、税务和比例分摊&lt;/h3&gt;
&lt;p&gt;应区分费用计算、逐行税额、票据总税额和最终结算金额。逐项舍入再汇总与汇总后舍入可能不同，不能让界面、支付服务和账务系统分别决定各自的舍入点。具体规则应遵从适用法规与产品政策。&lt;/p&gt;
&lt;p&gt;对于按比例分配的金额，必须制定差额分配规则，并通过不变量确保分配总和等于母总额。不能简单把尾差一律塞给最后一行，除非这就是经过批准且可稳定重现的业务规则。&lt;/p&gt;
&lt;h3&gt;投资组合估值与持仓&lt;/h3&gt;
&lt;p&gt;持仓估值通常涉及价格、份额、应计利息、汇率、公司行动、市场时间戳与估值政策。证券价格与持仓数量可能有比法币金额更多的小数位；不能在计算前就把价格和数量都量化到货币最小单位。应明确每一项数值字段的单位、精度和更新时点，并针对拆股、分红、债券应计利息和多币种组合建立业务校验。&lt;/p&gt;
&lt;p&gt;组合的市值汇总、交易账簿和总账对账需要清晰分工：某个系统的聚合值可以是分析结果，但不能未经规则定义就覆盖权威记账事实。&lt;/p&gt;
&lt;h3&gt;反复执行、事件重放与并发&lt;/h3&gt;
&lt;p&gt;精确计算也可能被重复执行。网络超时后，服务可能不知道数据库是否已经成功记账；工作流重跑可能把同一事件重复应用；两个并发退款都通过了“余额足够”的检查，最后却超出可退金额。&lt;/p&gt;
&lt;p&gt;处理这些风险要用幂等键、唯一业务标识、事务、并发控制和明确状态机。舍入规则和数值类型只能保证每次计算的数学行为，不会自动提供交易幂等性或防止重复记账。&lt;/p&gt;
&lt;h2&gt;十三、业界实践：真实系统暴露的问题，往往不只是浮点数&lt;/h2&gt;
&lt;p&gt;官方文档解释了类型的规则；支付与账务工程团队的实践，则更能说明为什么“所有金额都存整数分”或“全部改成 Decimal”仍然可能不够。下面选取公开的工程经验和支付平台文档，重点关注可以转化为架构约束的教训。&lt;/p&gt;
&lt;h3&gt;1. Modern Treasury：用整数最小单位做账务金额，把精确性作为账本不变量&lt;/h3&gt;
&lt;p&gt;Modern Treasury 在其工程文章 &lt;a href=&quot;https://www.moderntreasury.com/journal/floats-dont-work-for-storing-cents&quot;&gt;Floats Don’t Work For Storing Cents&lt;/a&gt; 中介绍了自身的货币表示实践：支付订单中主要使用 64 位整数表示货币最小单位，在 PostgreSQL 中用 BIGINT 存储，并连同货币代码记录小数位语义。美元 12.34 这样的金额会保存为 1234，而不是浮点数 12.34。&lt;/p&gt;
&lt;p&gt;这个决策有非常直接的工程收益：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;金额加减与相等判断是精确整数运算；&lt;/li&gt;
&lt;li&gt;数据库、应用和下游支付接口之间，不需要反复从近似浮点转换成金额；&lt;/li&gt;
&lt;li&gt;BIGINT 适用于有明确范围的支付金额，存储和运算成本也比较可控；&lt;/li&gt;
&lt;li&gt;对账与账本不变量不必靠浮点容差掩盖一分钱的差异。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但这并不是“所有金融数值都应该是整数”的证据。整数表示有一个前提：必须定义整数的单位，且能表达目标值。对于价格、FX 汇率、比例、应计利息中间值和非整数份额，可能需要比结算货币最小单位更高的精度；整数乘法也会遇到范围和余数问题。若使用 64 位整数，需推导最大允许金额并验证运算中间值；不能只检查最终余额。&lt;/p&gt;
&lt;h3&gt;2. Neon Commerce：扩展到 JPY 时，“一律存分”把简单问题变成了隐式转换陷阱&lt;/h3&gt;
&lt;p&gt;Neon Commerce 的两篇公开工程文章 &lt;a href=&quot;https://www.neonpay.com/blog/representing-money-at-scale-is-hard&quot;&gt;Representing money at scale is hard (part 1)&lt;/a&gt; 和 &lt;a href=&quot;https://www.neonpay.com/blog/more-money-more-problems-part-2-of-2&quot;&gt;More money, more problems (part 2)&lt;/a&gt; 记录了一个很具体的多币种设计教训。&lt;/p&gt;
&lt;p&gt;最初用整数 cents 表示金额时，USD/EUR/GBP 的主路径很简单。扩展到日元后，团队为避免重写显示逻辑，把 JPY 金额也存成“乘以 100”的数字，例如 123 日元存为 12300。这样虽然能让显示逻辑继续除以 100，却也允许系统表示根本不合法的值，例如 JPY 1.23。之后折扣、税额和对外 API 又需要在不同位置重复判断“这个币种要不要除以 100”，规则分散后很容易漏掉。&lt;/p&gt;
&lt;p&gt;他们后来采用了更明确的分层：使用支持精确十进制运算的 big.js 承载一般数值，封装带有 amount 与 scale 的 Decimal，再用 Money 对象把币种和其规定的 scale 绑定；在边界处转换成支付 API 要求的整数最小单位，并拒绝那些会悄悄丢精度的转换。文章还强调，不同币种的 Money 不能相加，即使它们恰好有相同的 scale；将 10 元折扣分给三行，也必须分配余数，确保份额合计仍为 10 元。&lt;/p&gt;
&lt;p&gt;这段经验说明了两点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;整数最小单位是边界协议和账务金额的好选择，不是所有中间数值的通用表示。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;币种 scale 必须进入类型与领域规则。&lt;/strong&gt; 不要在每个函数里散落着 if JPY then divide by 100 这样的特殊逻辑。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3. Stripe Tax：真实税务计算会“先汇总再舍入”，再把舍入差额分回明细&lt;/h3&gt;
&lt;p&gt;Stripe 的 &lt;a href=&quot;https://docs.stripe.com/tax/calculating&quot;&gt;Calculate tax 文档&lt;/a&gt; 描述了其自动税计算的一种路径：保留计算精度，按适用税率分组计算税额总量，再将税额舍入到币种最小单位，随后将舍入后的税额分配回各个明细行。某一行可能需要调整一个最小货币单位，才能让所有行项目重新加总到交易总额。&lt;/p&gt;
&lt;p&gt;这不是可以无条件复制到所有税务辖区的通用税法规则，但它说明一个重要事实：&lt;strong&gt;逐行 ROUND 与先计算汇总税额再分摊，可能产生不同金额。&lt;/strong&gt; 即使每一步都使用精确 Decimal，算法顺序不同仍然会造成差异。&lt;/p&gt;
&lt;p&gt;产品、税务和账务团队应决定哪个金额是权威值，以及采用行级、税率组级、发票级还是其他规定的舍入层级。如果将某个税务或计费系统的实现迁移到 Java、C#、PostgreSQL 或 Snowflake，不应只复制公式，还要复现它的舍入节点和余数分配规则。否则新旧系统都“计算正确”，却无法对账。&lt;/p&gt;
&lt;h3&gt;4. 支付服务商：内部金额模型和外部 API 单位不是同一个概念&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.stripe.com/currencies&quot;&gt;Stripe 的币种文档&lt;/a&gt; 说明，API 金额通常以币种 minor unit 传入：1000 表示 USD 10.00，而 JPY 10 代表 10 日元。同时还存在特殊情况：部分币种在支付和提现场景中的单位规则不同；兼容旧规则的币种可能要求金额具有固定的末尾零，或者要求提现金额必须是特定增量的整数倍。换句话说，外部支付 API 的金额格式不仅取决于 ISO 4217 的一般币种信息，还取决于服务商、交易类型与具体 API 的契约。&lt;/p&gt;
&lt;p&gt;建议将内部 Money 领域模型与支付渠道适配器隔离：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;内部记录统一的 currency code、金额值、单位和政策版本；&lt;/li&gt;
&lt;li&gt;每个 PSP adapter 按其官方契约转换到 API 所要求的 minor unit 或十进制字符串；&lt;/li&gt;
&lt;li&gt;记录发送给服务商的金额与内部金额的对应关系；&lt;/li&gt;
&lt;li&gt;明确处理不支持的 scale、超过支付上限的金额以及无效单位，不要自动猜测或默默舍入；&lt;/li&gt;
&lt;li&gt;对支付成功、部分捕获、退款、冲正和结算报告使用相同的金额语义与稳定交易标识进行对账。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这比让核心账本永久采用某个支付供应商的字段格式更稳健，也便于将来切换服务商或接入多渠道。&lt;/p&gt;
&lt;h3&gt;5. C# Money 库：库的默认 Context 也可能悄悄改变数据&lt;/h3&gt;
&lt;p&gt;NodaMoney 的 &lt;a href=&quot;https://github.com/RemyDuijkeren/NodaMoney/releases&quot;&gt;发布记录&lt;/a&gt; 和实现文档可以看到，MoneyContext 用于配置舍入、scale 与精度；Money 的拆分必须处理舍入余数；序列化与反序列化也可能按当前 context 应用金额规则。相关版本变化曾影响反序列化时的舍入行为。&lt;/p&gt;
&lt;p&gt;这提供了一个适用于所有语言的教训：不要把舍入策略作为不可见的全局默认值。特别是当应用将 Money 对象写入 JSON、消息队列或数据库，再由另一服务读取时，应明确反序列化会不会量化金额、是否保留输入 scale，以及 context 是否由环境配置隐式决定。&lt;/p&gt;
&lt;p&gt;对第三方数值库做升级时，应加入如下契约测试：同样的金额经过 encode → decode 后必须保持预期数值；同样的输入使用批准的舍入策略必须得到相同输出；Money split 的所有份额之和必须严格等于原始金额；无效币种 scale 或超范围金额必须显式失败。&lt;/p&gt;
&lt;h3&gt;6. 账本经验：精确金额不能替代双重记账、幂等性和不可变事件&lt;/h3&gt;
&lt;p&gt;Modern Treasury 的 &lt;a href=&quot;https://www.moderntreasury.com/journal/how-to-scale-a-ledger-part-i&quot;&gt;How to Scale a Ledger&lt;/a&gt; 讨论了可扩展账本中的不变性、双重记账和并发控制。实际金融系统除了要防止每笔金额因舍入而变化，还必须防止同一业务事件被重复记账、余额被并发写坏，或无法从历史记录解释某个余额为何形成。&lt;/p&gt;
&lt;p&gt;在核心账务路径中，应把数值规则与状态/交易规则一起设计：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用明确的事务边界与幂等键处理超时重试；&lt;/li&gt;
&lt;li&gt;保存不可变的记账事件或可审计的冲正事件，不通过直接改写历史值来“抹平”差异；&lt;/li&gt;
&lt;li&gt;对借贷平衡、分配合计、退款不超过可退金额等不变量实施数据库约束或事务性校验；&lt;/li&gt;
&lt;li&gt;保留源事件、计算政策版本、交易状态和对账结果的关联；&lt;/li&gt;
&lt;li&gt;将无法对齐的记录放进异常处理流程，而不是通过浮点容差或人工改数自动消掉差异。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些经验将金融计算从“数字类型正确”推进到“整个资金流可验证”。后者才是生产系统需要保证的结果。&lt;/p&gt;
&lt;h2&gt;十四、落地建议：如何在新系统和遗留系统中应用&lt;/h2&gt;
&lt;h3&gt;新建金融服务&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;先定义金额、价格、数量、费率、汇率和日期语义，确定每种字段的允许范围、scale 和币种/单位。&lt;/li&gt;
&lt;li&gt;为每个核心计算确定权威执行位置、精度预算和舍入规则。&lt;/li&gt;
&lt;li&gt;为各个语言选择唯一的主要数值表示，避免一个服务同时随意混用 Number、BigInt、Decimal 和字符串。&lt;/li&gt;
&lt;li&gt;对数据库 schema、SQL 表达式、驱动映射和 API 序列化做端到端验证。&lt;/li&gt;
&lt;li&gt;把黄金测试向量和金额不变量放入 CI，且在升级语言、驱动、数据库版本或数值库时重跑。&lt;/li&gt;
&lt;li&gt;为溢出、无效价格、缺失汇率和计算不一致建立明确失败路径与告警。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;遗留系统现代化&lt;/h3&gt;
&lt;p&gt;不要先对所有 double 做全局替换。先分类使用场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;已记账余额、交易费用、现金、支付和结算：优先精确类型并做历史对账；&lt;/li&gt;
&lt;li&gt;价格、数量、收益率、利率、FX 率：先制定允许的 scale 与中间精度；&lt;/li&gt;
&lt;li&gt;分析、风险模型与统计数据：评估浮点误差是否在模型容忍范围内；&lt;/li&gt;
&lt;li&gt;只用于显示与报表的值：确保显示格式没有被误认为业务舍入；&lt;/li&gt;
&lt;li&gt;跨语言与数据库边界：查明实际运行时类型而不只是数据库列类型。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;之后从高风险金额路径开始建立回归测试，用典型历史交易和边界数据对比旧结果与新结果。差异必须分类为旧系统错误、业务规则修正、舍入规则变化、数据源变化或实现差异。不要通过容差掩盖本应精确一致的账务差额。&lt;/p&gt;
&lt;h3&gt;监控什么&lt;/h3&gt;
&lt;p&gt;除了服务错误率与执行时间，还应监控：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计算失败、溢出和被拒绝的无效数值；&lt;/li&gt;
&lt;li&gt;非预期的舍入或精度信号；&lt;/li&gt;
&lt;li&gt;源系统与目标系统的金额不一致笔数及金额总量；&lt;/li&gt;
&lt;li&gt;交易、费用、持仓、现金和总账对账差异；&lt;/li&gt;
&lt;li&gt;缺失价格、缺失汇率和过期市场数据；&lt;/li&gt;
&lt;li&gt;重新计算与历史记录之间的差异；&lt;/li&gt;
&lt;li&gt;API 数值解析异常、数据库类型转换异常和超时重试导致的重复请求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;任何“容差”都应该有明确的业务含义。它可能适用于统计模型的近似输出，但不应该用来让本应精确相等的同币种账务金额通过对账。&lt;/p&gt;
&lt;h2&gt;十五、技术选择矩阵&lt;/h2&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;平台&lt;/th&gt;&lt;th&gt;不借助第三方库&lt;/th&gt;&lt;th&gt;借助第三方库&lt;/th&gt;&lt;th&gt;最需要防范的问题&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Java&lt;/td&gt;&lt;td&gt;BigDecimal、BigInteger；固定范围时 checked long 运算&lt;/td&gt;&lt;td&gt;Joda-Money、JSR 354 实现用于 Money/Currency 抽象&lt;/td&gt;&lt;td&gt;double 构造、除法异常、equals 与 compareTo、scale 和舍入时点&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Node.js / TypeScript&lt;/td&gt;&lt;td&gt;安全范围内的整数，或 BigInt 定标整数；自行实现明确舍入&lt;/td&gt;&lt;td&gt;decimal.js、bignumber.js、big.js；Dinero.js 用于货币抽象&lt;/td&gt;&lt;td&gt;Number 精度、BigInt 序列化、JSON 数值解析、库默认 precision 与 rounding&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Python&lt;/td&gt;&lt;td&gt;Decimal、int、Fraction&lt;/td&gt;&lt;td&gt;py-moneyed 管理 Money/Currency；NumPy/pandas 用于适合浮点的分析&lt;/td&gt;&lt;td&gt;Decimal context、从 float 构造、与 DataFrame/JSON/数据库之间的类型退化&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rust&lt;/td&gt;&lt;td&gt;i64/i128 定标整数、checked_* 运算；f64 仅用于经过验证的近似模型&lt;/td&gt;&lt;td&gt;rust_decimal、bigdecimal&lt;/td&gt;&lt;td&gt;固定 Decimal 的范围上限、整数中间值溢出、serde 数值序列化与数据库映射&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;C# / .NET&lt;/td&gt;&lt;td&gt;decimal、BigInteger；明确 Math.Round 的 MidpointRounding&lt;/td&gt;&lt;td&gt;NodaMoney；Money/Currency 领域抽象&lt;/td&gt;&lt;td&gt;decimal 不是任意精度；默认 ToEven 舍入、区域化解析、溢出和 Context/JSON 映射&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Snowflake&lt;/td&gt;&lt;td&gt;NUMBER(p,s)，必要时评估 DECFLOAT；显式 CAST/ROUND&lt;/td&gt;&lt;td&gt;SQL 数值计算通常不需要第三方十进制库；应用层仍要选精确类型&lt;/td&gt;&lt;td&gt;38 位 precision 上限、scale 传播、FLOAT 隐式参与、ROUND 模式、NULL/除零语义&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PostgreSQL&lt;/td&gt;&lt;td&gt;NUMERIC/DECIMAL、整数类型；显式 ROUND/CAST&lt;/td&gt;&lt;td&gt;客户端 Decimal/BigDecimal 类型映射与 Money 领域库&lt;/td&gt;&lt;td&gt;NUMERIC(p,s) 约束、NUMERIC 与 FLOAT 的舍入差异、整数除法、money 的 locale/固定 scale&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;表中的“无第三方库”不意味着零工程成本。尤其是 Node.js 和 Rust，如果选择定标整数，就必须自己实现并彻底测试舍入、单位转换、溢出和余数分配；若采用十进制库，也必须锁定版本并明确配置。对跨应用和数据库边界的金融数值，类型和规则的统一通常比某个库的 API 更重要。&lt;/p&gt;
&lt;h2&gt;十六、最终结论&lt;/h2&gt;
&lt;p&gt;金融服务中的数值正确性，不是“全部改成 decimal”这么简单，也不是某种语言天然优于其他语言。真正可靠的设计应同时做到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;账务金额、价格、数量、费率和汇率有明确类型和单位；&lt;/li&gt;
&lt;li&gt;在需要逐单位精确一致的路径中避免二进制浮点；&lt;/li&gt;
&lt;li&gt;定义中间精度、舍入模式、舍入时点和余数分配规则；&lt;/li&gt;
&lt;li&gt;对各语言与数据库的类型转换、SQL scale 规则和序列化做端到端测试；&lt;/li&gt;
&lt;li&gt;为溢出、缺失数据、重复执行和规则版本提供明确控制；&lt;/li&gt;
&lt;li&gt;用黄金测试向量、业务不变量和对账监控证明行为，而不是相信一套类型声明。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;技术选择上，Java 可以用标准库 BigDecimal/BigInteger；C#/.NET 可优先使用 decimal，并通过显式舍入策略与 Money 领域类型约束行为；Python 可以优先用标准库 Decimal；Snowflake 与 PostgreSQL 可通过原生定点/精确数值类型进行计算。Node.js 原生缺少 Decimal，需要在受控范围内选择安全整数/BigInt，或者统一采用十进制第三方库；Rust 则通常需要定标整数或 Decimal crate。&lt;/p&gt;
&lt;p&gt;但无论用什么语言，最终需要回答的都一样：&lt;strong&gt;输入是什么、单位是什么、何时舍入、用什么规则舍入、超出范围怎么办、结果能否跨系统复算和对账。&lt;/strong&gt; 这些规则如果没有明确下来，换用任意精度 Decimal 也只是把一部分错误变少，而不是让金融计算自动正确。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;h3&gt;语言与运行时&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/math/BigDecimal.html&quot;&gt;Java BigDecimal API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/math/package-summary.html&quot;&gt;Java BigInteger / BigDecimal 数学包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/decimal.html&quot;&gt;Python Decimal 标准库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/tutorial/floatingpoint.html&quot;&gt;Python 浮点数：误差与限制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_strings&quot;&gt;MDN JavaScript Numbers and strings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt&quot;&gt;MDN BigInt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/std/primitive.f64.html&quot;&gt;Rust f64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.rs/rust_decimal/latest/rust_decimal/&quot;&gt;rust_decimal 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.rs/bigdecimal/latest/bigdecimal/&quot;&gt;bigdecimal 文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;C# / .NET 与 Money 类型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/fundamentals/runtime-libraries/system-decimal&quot;&gt;Microsoft: System.Decimal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/system.decimal.round?view=net-10.0&quot;&gt;Microsoft: Decimal.Round&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/system.midpointrounding?view=net-10.0&quot;&gt;Microsoft: MidpointRounding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/RemyDuijkeren/NodaMoney&quot;&gt;NodaMoney 源码与发布记录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/RemyDuijkeren/NodaMoney/releases&quot;&gt;NodaMoney releases：Context、拆分与序列化行为变更&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;业界经验与支付实践&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.moderntreasury.com/journal/floats-dont-work-for-storing-cents&quot;&gt;Modern Treasury: Floats Don’t Work For Storing Cents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.moderntreasury.com/journal/how-to-scale-a-ledger-part-i&quot;&gt;Modern Treasury: How to Scale a Ledger, Part I&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.neonpay.com/blog/representing-money-at-scale-is-hard&quot;&gt;Neon Commerce: Representing money at scale is hard (part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.neonpay.com/blog/more-money-more-problems-part-2-of-2&quot;&gt;Neon Commerce: More money, more problems (part 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.stripe.com/currencies&quot;&gt;Stripe: Supported currencies and API amount units&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.stripe.com/tax/calculating&quot;&gt;Stripe: Calculate tax and allocate rounded tax totals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;数据库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/data-types-numeric&quot;&gt;Snowflake Numeric Data Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/operators-arithmetic&quot;&gt;Snowflake Arithmetic Operators: precision and scale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.snowflake.com/en/sql-reference/functions/round&quot;&gt;Snowflake ROUND 和舍入模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-numeric.html&quot;&gt;PostgreSQL Numeric Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-money.html&quot;&gt;PostgreSQL Monetary Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/functions-math.html&quot;&gt;PostgreSQL Mathematical Functions and Operators&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;金额与币种建模&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joda.org/joda-money/&quot;&gt;Joda-Money&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://javamoney.github.io/&quot;&gt;JSR 354 / JavaMoney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/py-moneyed/py-moneyed&quot;&gt;py-moneyed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MikeMcl/decimal.js&quot;&gt;decimal.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MikeMcl/bignumber.js&quot;&gt;bignumber.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MikeMcl/big.js&quot;&gt;big.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dinerojs.com/&quot;&gt;Dinero.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在决定生产实现之前，请再次核对目标语言版本、第三方库版本、Snowflake 驱动兼容性及 PostgreSQL 版本。数值库的精度、舍入与序列化选项可能随版本变化，核心金融规则应通过自己的回归测试固定，而不是只依靠外部文档。&lt;/p&gt;</content:encoded></item></channel></rss>