[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"consumer-news-detail-934":3,"consumer-news-interaction-934":38,"consumer-news-related-934":41},{"detail":4,"item":34},{"card":5,"schemaVersion":21,"fields":22,"content":28},{"id":6,"kind":7,"targetType":8,"targetId":9,"subtype":7,"typeLabel":10,"title":11,"subtitle":12,"summary":13,"coverUrl":14,"badgeText":14,"href":15,"sourceName":12,"meta":16,"metrics":18,"tags":19,"resolved":20},"NEWS_ARTICLE:934","news","NEWS_ARTICLE",934,"资讯","Memory 记忆设计讨论：为什么 Agent Memory 不能只靠向量数据库？","博客园","这是 Agent Memory 系列的第二篇文章。上一篇先给出了一个总体判断：Memory 是一套让 Agent 能够持续使用历史上下文的能力。 这篇只讨论一个经常出现的问题： 既然 Agent 需要从历史信息中找内容，接入向量数据库不就可以了吗？ 我的答案是：向量数据库很有用，但它只解决了召回问题","","\u002Fnews\u002F934",[17],"2026",{},[],true,"consumer-content-detail-v1",{"sourceName":12,"authorName":23,"summary":13,"description":13,"publishTime":24,"updateTime":25,"sourceUrl":26,"language":27},"杜文龙","2026-09-10T19:55","2026-09-11T15:21:59","https:\u002F\u002Fwww.cnblogs.com\u002Fduwenlong\u002Fp\u002F22926147","中文",{"format":29,"policy":30,"normalized":20,"html":31,"text":32,"wordCount":33,"hasBody":20},"HTML","NEWS_CONTENT_V1","\u003Cp>这是 Agent Memory 系列的第二篇文章。上一篇先给出了一个总体判断：Memory 是一套让 Agent 能够持续使用历史上下文的能力。\u003C\u002Fp>\n\u003Cp>这篇只讨论一个经常出现的问题：\u003C\u002Fp>\n\u003Cblockquote>\n \u003Cp>既然 Agent 需要从历史信息中找内容，接入向量数据库不就可以了吗？\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>我的答案是：\u003Cstrong>向量数据库很有用，但它只解决了召回问题的一部分，不能单独承担 Memory。\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ch2>一、向量数据库解决了什么\u003C\u002Fh2>\n\u003Cp>向量数据库通常把文本或其他内容转换成向量，再根据向量之间的距离找出语义上相似的内容。\u003C\u002Fp>\n\u003Cp>例如，用户说：\u003C\u002Fp>\n\u003Cblockquote>\n \u003Cp>继续处理我上次的旅行计划。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>系统可以把这句话转换成向量，然后从历史对话中找出和“旅行计划”语义相近的内容。这比只依赖关键词更灵活，因为“出行安排”“订酒店”“航班选择”可能没有相同的字面词，却属于同一个语义主题。\u003C\u002Fp>\n\u003Cp>对于长文本、开放问法和模糊表达，向量检索确实很有价值。\u003C\u002Fp>\n\u003Cp>但“相似”不等于“应该使用”。\u003C\u002Fp>\n\u003Ch2>二、相似内容不一定是当前上下文\u003C\u002Fh2>\n\u003Cp>假设用户过去有两个旅行计划：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>去年夏天的日本旅行\u003C\u002Fli>\n \u003Cli>今年冬天的家庭旅行\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>用户说“继续上次的旅行计划”，两个计划都可能被向量检索召回。相似度只能说明它们都和旅行有关，不能判断用户指的是哪一个。\u003C\u002Fp>\n\u003Cp>因此，系统还需要结合：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>任务标识\u003C\u002Fli>\n \u003Cli>时间范围\u003C\u002Fli>\n \u003Cli>目的地\u003C\u002Fli>\n \u003Cli>当前会话\u003C\u002Fli>\n \u003Cli>用户的指代习惯\u003C\u002Fli>\n \u003Cli>是否存在多个候选任务\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>如果有两个候选都合理，最好的行为不是让模型硬猜，而是向用户澄清。\u003C\u002Fp>\n\u003Ch2>三、向量检索不知道权限\u003C\u002Fh2>\n\u003Cp>再看一个更严重的问题。\u003C\u002Fp>\n\u003Cp>用户可能同时参与个人旅行、家庭旅行和公司的商务出差。它们的记录来源不同，允许使用的范围也不同。\u003C\u002Fp>\n\u003Cp>向量检索只关心内容是否相似，并不天然知道：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>这条信息属于谁？\u003C\u002Fli>\n \u003Cli>当前 Agent 是否有权访问？\u003C\u002Fli>\n \u003Cli>信息是否只允许在某个任务中使用？\u003C\u002Fli>\n \u003Cli>是否包含不应该暴露给当前应用的内容？\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>“先把所有相似内容搜出来，再让模型判断哪些不能看”是很危险的做法。因为敏感信息已经进入了模型上下文，后面的 Prompt 约束不能替代真正的访问控制。\u003C\u002Fp>\n\u003Cp>更可靠的顺序应该是：\u003C\u002Fp>\n\u003Cblockquote>\n \u003Cp>先确认用户、任务和权限范围，再做召回；召回结果还要经过服务端过滤，最后才交给模型。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>权限不是检索结果的一个排序因素，而是检索前的硬约束。\u003C\u002Fp>\n\u003Ch2>四、向量检索不知道信息是否过期\u003C\u002Fh2>\n\u003Cp>用户去年说过：“预算控制在 8000 元以内。”\u003C\u002Fp>\n\u003Cp>今年他说：“这次预算可以到 10000 元。”\u003C\u002Fp>\n\u003Cp>两句话都可能和当前旅行计划相关，向量检索也可能把它们都找出来。但系统必须知道后一条在当前计划中替代了前一条，而不是让模型自己猜哪条更新。\u003C\u002Fp>\n\u003Cp>这需要结构化字段，例如：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>生效时间\u003C\u002Fli>\n \u003Cli>失效时间\u003C\u002Fli>\n \u003Cli>版本号\u003C\u002Fli>\n \u003Cli>替代关系\u003C\u002Fli>\n \u003Cli>当前状态\u003C\u002Fli>\n \u003Cli>适用范围\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>向量可以帮助找到候选内容，但不能替代版本和生命周期管理。\u003C\u002Fp>\n\u003Ch2>五、向量检索无法处理事实冲突\u003C\u002Fh2>\n\u003Cp>用户可能先说“酒店最好靠近市中心”，后来又说“这次为了安静，远一点也可以”。\u003C\u002Fp>\n\u003Cp>这不是简单的重复信息，而是一个条件变化：通常偏好可能仍然是靠近市中心，但本次任务有一个明确例外。\u003C\u002Fp>\n\u003Cp>如果所有内容只保存成向量，系统很难可靠表达：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>长期偏好是什么\u003C\u002Fli>\n \u003Cli>本次例外是什么\u003C\u002Fli>\n \u003Cli>例外适用到什么时候\u003C\u002Fli>\n \u003Cli>本次例外是否已经结束\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>真正的 Memory 需要一个处理冲突的过程。新信息应该先成为候选，再由规则、来源、时间和用户确认决定它是新增、更新、替代，还是只在当前任务中临时生效。\u003C\u002Fp>\n\u003Ch2>六、向量检索也不能表示任务进度\u003C\u002Fh2>\n\u003Cp>“酒店已经筛选了三家，但还没有确认付款”是任务状态，不是语义记忆。\u003C\u002Fp>\n\u003Cp>如果把它写成一段摘要并向量化，下一次召回时可能找得到，但系统无法保证它是当前任务的最新状态，也无法安全地执行下一步。\u003C\u002Fp>\n\u003Cp>任务状态至少应该结构化表示：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>goal: 完成家庭旅行预订\ndone: 已确定目的地，已筛选酒店\nmissing: 尚未确认酒店和付款方式\nnext: 展示三家候选酒店\nblocker: 等待用户确认\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>这类数据应该直接查询，而不是依赖相似度和摘要推断。\u003C\u002Fp>\n\u003Ch2>七、那向量数据库应该放在哪里\u003C\u002Fh2>\n\u003Cp>我的理解是，向量检索应该作为 Retrieval，也就是召回层的一部分。\u003C\u002Fp>\n\u003Cp>一条更完整的读取链路可以是：\u003C\u002Fp>\n\u003Col>\n \u003Cli>确认当前用户、任务、会话和权限\u003C\u002Fli>\n \u003Cli>查询结构化的任务状态和当前有效事实\u003C\u002Fli>\n \u003Cli>用关键词检索精确匹配内容\u003C\u002Fli>\n \u003Cli>用向量检索补充语义相关内容\u003C\u002Fli>\n \u003Cli>根据时间和来源进行排序\u003C\u002Fli>\n \u003Cli>检查来源、完整性、时效性和上下文预算\u003C\u002Fli>\n \u003Cli>组装成 Agent 可以使用的上下文\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>向量召回在这里很重要，但它的位置是“帮助找到相关内容”，而不是“定义什么内容可以成为事实”。\u003C\u002Fp>\n\u003Ch2>八、为什么第一阶段不必急着选择最复杂的存储\u003C\u002Fh2>\n\u003Cp>如果事件契约、来源、作用域和事实更新机制还没有定义清楚，先建设复杂的存储系统，往往会把一个尚未明确的产品问题包装成数据库问题。\u003C\u002Fp>\n\u003Cp>一个更稳妥的起点是：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>用关系表保存事件、证据、候选、正式记忆和任务状态\u003C\u002Fli>\n \u003Cli>为正文和证据建立可追溯引用\u003C\u002Fli>\n \u003Cli>用向量索引提供语义召回\u003C\u002Fli>\n \u003Cli>让索引可以重建，而不是把索引当作唯一事实来源\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这样未来可以增加全文检索、图关系查询或其他索引，而不用改变产品事实的定义。\u003C\u002Fp>\n\u003Ch2>结论\u003C\u002Fh2>\n\u003Cp>向量数据库解决的是“哪些内容语义上相似”。\u003C\u002Fp>\n\u003Cp>Agent Memory 还要解决：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>这条内容是否属于当前任务\u003C\u002Fli>\n \u003Cli>当前 Agent 是否有权看到\u003C\u002Fli>\n \u003Cli>信息是否仍然有效\u003C\u002Fli>\n \u003Cli>新旧事实如何冲突\u003C\u002Fli>\n \u003Cli>任务做到哪一步\u003C\u002Fli>\n \u003Cli>用户如何纠正和删除\u003C\u002Fli>\n \u003Cli>外部动作是否真的成功\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>所以更准确的说法是：\u003C\u002Fp>\n\u003Cblockquote>\n \u003Cp>向量数据库可以是 Agent Memory 的一个重要组件，但向量数据库本身不是 Agent Memory。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>下一篇继续讨论：如果不把所有内容塞进一个向量库，工程上到底应该设计哪些数据对象。\u003C\u002Fp>","这是 Agent Memory 系列的第二篇文章。上一篇先给出了一个总体判断：Memory 是一套让 Agent 能够持续使用历史上下文的能力。 这篇只讨论一个经常出现的问题： 既然 Agent 需要从历史信息中找内容，接入向量数据库不就可以了吗？ 我的答案是：向量数据库很有用，但它只解决了召回问题的一部分，不能单独承担 Memory。 一、向量数据库解决了什么 向量数据库通常把文本或其他内容转换成向量，再根据向量之间的距离找出语义上相似的内容。 例如，用户说： 继续处理我上次的旅行计划。 系统可以把这句话转换成向量，然后从历史对话中找出和“旅行计划”语义相近的内容。这比只依赖关键词更灵活，因为“出行安排”“订酒店”“航班选择”可能没有相同的字面词，却属于同一个语义主题。 对于长文本、开放问法和模糊表达，向量检索确实很有价值。 但“相似”不等于“应该使用”。 二、相似内容不一定是当前上下文 假设用户过去有两个旅行计划： 去年夏天的日本旅行 今年冬天的家庭旅行 用户说“继续上次的旅行计划”，两个计划都可能被向量检索召回。相似度只能说明它们都和旅行有关，不能判断用户指的是哪一个。 因此，系统还需要结合： 任务标识 时间范围 目的地 当前会话 用户的指代习惯 是否存在多个候选任务 如果有两个候选都合理，最好的行为不是让模型硬猜，而是向用户澄清。 三、向量检索不知道权限 再看一个更严重的问题。 用户可能同时参与个人旅行、家庭旅行和公司的商务出差。它们的记录来源不同，允许使用的范围也不同。 向量检索只关心内容是否相似，并不天然知道： 这条信息属于谁？ 当前 Agent 是否有权访问？ 信息是否只允许在某个任务中使用？ 是否包含不应该暴露给当前应用的内容？ “先把所有相似内容搜出来，再让模型判断哪些不能看”是很危险的做法。因为敏感信息已经进入了模型上下文，后面的 Prompt 约束不能替代真正的访问控制。 更可靠的顺序应该是： 先确认用户、任务和权限范围，再做召回；召回结果还要经过服务端过滤，最后才交给模型。 权限不是检索结果的一个排序因素，而是检索前的硬约束。 四、向量检索不知道信息是否过期 用户去年说过：“预算控制在 8000 元以内。” 今年他说：“这次预算可以到 10000 元。” 两句话都可能和当前旅行计划相关，向量检索也可能把它们都找出来。但系统必须知道后一条在当前计划中替代了前一条，而不是让模型自己猜哪条更新。 这需要结构化字段，例如： 生效时间 失效时间 版本号 替代关系 当前状态 适用范围 向量可以帮助找到候选内容，但不能替代版本和生命周期管理。 五、向量检索无法处理事实冲突 用户可能先说“酒店最好靠近市中心”，后来又说“这次为了安静，远一点也可以”。 这不是简单的重复信息，而是一个条件变化：通常偏好可能仍然是靠近市中心，但本次任务有一个明确例外。 如果所有内容只保存成向量，系统很难可靠表达： 长期偏好是什么 本次例外是什么 例外适用到什么时候 本次例外是否已经结束 真正的 Memory 需要一个处理冲突的过程。新信息应该先成为候选，再由规则、来源、时间和用户确认决定它是新增、更新、替代，还是只在当前任务中临时生效。 六、向量检索也不能表示任务进度 “酒店已经筛选了三家，但还没有确认付款”是任务状态，不是语义记忆。 如果把它写成一段摘要并向量化，下一次召回时可能找得到，但系统无法保证它是当前任务的最新状态，也无法安全地执行下一步。 任务状态至少应该结构化表示： goal: 完成家庭旅行预订 done: 已确定目的地，已筛选酒店 missing: 尚未确认酒店和付款方式 next: 展示三家候选酒店 blocker: 等待用户确认 这类数据应该直接查询，而不是依赖相似度和摘要推断。 七、那向量数据库应该放在哪里 我的理解是，向量检索应该作为 Retrieval，也就是召回层的一部分。 一条更完整的读取链路可以是： 确认当前用户、任务、会话和权限 查询结构化的任务状态和当前有效事实 用关键词检索精确匹配内容 用向量检索补充语义相关内容 根据时间和来源进行排序 检查来源、完整性、时效性和上下文预算 组装成 Agent 可以使用的上下文 向量召回在这里很重要，但它的位置是“帮助找到相关内容”，而不是“定义什么内容可以成为事实”。 八、为什么第一阶段不必急着选择最复杂的存储 如果事件契约、来源、作用域和事实更新机制还没有定义清楚，先建设复杂的存储系统，往往会把一个尚未明确的产品问题包装成数据库问题。 一个更稳妥的起点是： 用关系表保存事件、证据、候选、正式记忆和任务状态 为正文和证据建立可追溯引用 用向量索引提供语义召回 让索引可以重建，而不是把索引当作唯一事实来源 这样未来可以增加全文检索、图关系查询或其他索引，而不用改变产品事实的定义。 结论 向量数据库解决的是“哪些内容语义上相似”。 Agent Memory 还要解决： 这条内容是否属于当前任务 当前 Agent 是否有权看到 信息是否仍然有效 新旧事实如何冲突 任务做到哪一步 用户如何纠正和删除 外部动作是否真的成功 所以更准确的说法是： 向量数据库可以是 Agent Memory 的一个重要组件，但向量数据库本身不是 Agent Memory。 下一篇继续讨论：如果不把所有内容塞进一个向量库，工程上到底应该设计哪些数据对象。",2098,{"id":6,"kind":7,"title":11,"summary":13,"image":14,"href":15,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":37},"#2563eb","16 \u002F 10",[7,8],{"targetType":8,"targetId":9,"likedByMe":39,"likeCount":40,"commentCount":40,"contentLikeCount":40,"contentCommentCount":40,"sourceLikeCount":40,"sourceCommentCount":40},false,0,[42,51,57,63,72,79,85,92],{"id":43,"kind":7,"title":44,"summary":45,"image":46,"href":47,"meta":48,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":49},"NEWS_ARTICLE:927","HelloCrab - 短视频开源爬虫，仅供学习参考","HelloCrab 基于 Avalonia、Playwright、AI与 FFmpeg 的跨平台桌面采集器，支持9大平台，以及 Android、iOS、Browser 远程控制端。 Made By ChatGPT &amp; Vincent with ❤ 平台 是否接入 哔哩哔哩 ✅ 抖音 ✅ 快手","https:\u002F\u002Fwww.cnblogs.com\u002Fhupo376787\u002Fp\u002FScreenshot\u002FWindows.jpg","\u002Fnews\u002F927","2026 · 软件开发",[50],"软件开发",{"id":52,"kind":7,"title":53,"summary":54,"image":14,"href":55,"meta":48,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":56},"NEWS_ARTICLE:929",".NET 异常处理的\"暗门\"：代码里写满 catch，你依然能抓住它——从一个 AI Agent 运行时的源码说起","一个健壮的系统，必然到处都是有意的 catch；异常被消化不等于问题不存在。 观测与韧性，是一个硬币的两面——降级逻辑保证系统不崩，FirstChance 保证你能看见它为什么降级。","\u002Fnews\u002F929",[50],{"id":58,"kind":7,"title":59,"summary":60,"image":14,"href":61,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":62},"NEWS_ARTICLE:928","架构师化繁为简，执行者化简为繁","新手改三天，你改三行——反而是你显得更不重要。因为化繁为简做得越纯熟，产出看起来越小。这篇聊聊两种能力的辩证关系，以及为什么'看不见'的那部分工作，恰恰是最难的部分。","\u002Fnews\u002F928",[7,8],{"id":64,"kind":7,"title":65,"summary":66,"image":67,"href":68,"meta":69,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":70},"NEWS_ARTICLE:930","基于 vLLM+Nginx 构建负载均衡推理集群","企业内部私有环境部署大模型推理集群时，很容易遇到流量调度混乱、节点负载失衡、会话上下文丢失、接口缺少鉴权防护等一系列问题，单 vLLM 推理节点难以支撑并发请求。本文基于 Ubuntu 22.04 系统环境，搭建 Nginx + vLLM-Semantic-Router + vLLM-Router","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1379525\u002F202609\u002F1379525-20260910165534385-2022408098.png","\u002Fnews\u002F930","2026 · 人工智能",[71],"人工智能",{"id":73,"kind":7,"title":74,"summary":75,"image":76,"href":77,"meta":69,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":78},"NEWS_ARTICLE:932","2026年AI编程工具大全，33个主流工具一次看懂","事情是这样的，前两天看到一张图，是某个社区官网的「支持的工具」清单，我数了数，整整31个AI编程工具。 两年前这份清单撑死5个，现在直接31个，而且我居然每一个都认识。。。 干脆整理成一篇，顺手把最近字节的TraeWork和豆包工作也补了进来，凑成33个。 今天给大家推荐一遍，每个工具说说它是干什么","https:\u002F\u002Fimage.kjdaohang.com\u002Fimg\u002F20260909210838518.png","\u002Fnews\u002F932",[71],{"id":80,"kind":7,"title":81,"summary":82,"image":14,"href":83,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":84},"NEWS_ARTICLE:931","SH 中文化样例数据使用手册","在数据库演示与 PoC 场景中，Oracle 自带的 SH 示例模式虽然经典，但英文维度数据往往让国内演示效果打折扣。笔者整理了一套方案：保留 SH 标准英文对象名，同时装载中文化维度数据，并按参数生成可复现的销售历史数据，方便个人测试与概念验证。 01 | 环境准备 使用前请确认满足以下条件： O","\u002Fnews\u002F931",[7,8],{"id":86,"kind":7,"title":87,"summary":88,"image":89,"href":90,"meta":48,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":91},"NEWS_ARTICLE:933","写给 C++ 工程师的 OpenClaw.NET 上手指南：用你熟悉的 C++ 思维，跑起一个生产级 AI Agent","它像一个「基于 boost.asio + REST 端点的常驻服务」——对外是 HTTP \u002F WebSocket \u002F 各 IM 的 webhook，对内跑着一个能调工具、读写记忆、跨渠道对话的 AI Agent——只不过协程不用你手写 promise_type，内存不用你管 new\u002Fdelete。","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260905070811424-1837144874.jpg","\u002Fnews\u002F933",[50],{"id":93,"kind":7,"title":94,"summary":95,"image":96,"href":97,"meta":69,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":98},"NEWS_ARTICLE:935","[Agent Memory \u002F 强化学习] MemPO源码学习笔记 ---（1）--- 总体","[Agent Memory \u002F 强化学习] MemPO源码学习笔记 （1） 总体 目录[Agent Memory \u002F 强化学习] MemPO源码学习笔记 （1） 总体0x00 概要0x01 基础 &amp; 背景1.1 用RL训练记忆系统的要点1.2 主要难点1.3 主要思路1.4 RL训练方案1.","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1850883\u002F202609\u002F1850883-20260906190854637-986949885.jpg","\u002Fnews\u002F935",[71]]