想象你雇了一位叫小助的管家,他记性不算好,但非常会“偷懒”:最近谈的客户、刚定的行程,都写在便利贴上贴满办公桌,随手一抓就能看到;三个月前的合同细节,则被他整理成档案,放进书房标注姓名的档案柜里。便利贴就是短期记忆,档案柜就是长期记忆。真正的 AI Agent 也一样:它无法把整个世界背在脑子里,只需要一张“桌面”和一套便利贴系统——短期记忆向量数据库(Pinecone、Chroma)就是给这套便利贴“贴标签、按意思查找、定期换新”的智能仓储系统。本文会带你认识短期记忆与长期记忆的区别、Pinecone 与 Chroma 怎么选、记忆如何存取检索、上下文窗口如何分配,以及便利贴墨迹变淡的衰减策略,让你从零搭出一个会“记住事”的 Agent。

岗位关联

掌握短期记忆向量数据库接入,能让你的 Agent 在多轮对话中持续记得用户说过什么,不再“换个话题就失忆”,这是从 Demo 走向可交付产品必须跨过的一道坎。

目录
  1. 可视化演示
  2. 记忆类型划分
  3. 向量库选型
  4. 记忆存储设计
  5. 记忆检索机制
  6. 上下文窗口管理
  7. 记忆衰减策略
  8. 工程实践要点
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示Agent短期记忆向量数据库的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Agent短期记忆向量数据库:Agen Agent短期记忆与长期记忆架 Pinecone向量数据库接入 核心机制可视化 Agent短期记忆向量数据库整体架构与关键组件

记忆类型划分

管家小助每天开工前做两件事:把桌面上过期的便利贴撕掉,再从档案柜抽出今天要用的客户资料。便利贴上的内容新鲜、易得、随手可改,但放久了就失去意义;档案柜里的资料厚重、稳定、按规矩归档,需要时能翻出来。Agent 的记忆系统也是这样分层的:短期记忆负责当前对话中的临时上下文,长期记忆负责沉淀用户偏好、项目背景等跨会话信息。

在技术实现上,短期记忆通常放在向量数据库里,因为它的读写在毫秒级完成,且天然适合“按意思找内容”;长期记忆则可以落在更稳定的结构化存储中,甚至也放在向量库里,只是用不同的命名空间或集合隔离。Agent 在每一轮对话中,先把本次会话的要点作为短期记忆写入,再从短期记忆里抽取出高频且重要的片段,经过整合后转存为长期记忆。

用来描述“记忆还热不热”的指标可以写成:

所以,并非所有记忆都该被一视同仁。管家会把便利贴按新旧分层,Agent 也应按热度把记忆分成“正在使用的短期记忆”和“等待沉淀的长期记忆”,这是整个记忆管理的第一块基石。

H(t)=H0×e−λtH(t) = H_0 \times e^{-\lambda t}
这条公式描述记忆热度随时间流失:刚写入时热度最高,越久没被碰过,热度越低。
  1. 记忆热度 H(t)t 时刻这条记忆对 Agent 的“新鲜程度”,决定它是否容易被检索出来。
    H(t)H(t)
  2. 初始热度 H_0记忆刚写入瞬间的热度值,通常设为 1,代表最热。
    H0H_0
  3. 指数衰减项 e^{-\lambda t}热度随时间指数下降,λ 越大降得越快,对应便利贴墨迹褪色的速度。
    e−λte^{-\lambda t}

向量库选型

给便利贴安家前,管家得先选仓库:是租用云端私人档案库,还是在办公室买一个铁皮柜?Pinecone 就像云端档案库,全托管、免运维、按量付费,数据量大了能自动扩容;Chroma 就像本地铁皮柜,开源、免费、跑在自己机器上,数据不出内网,适合快速验证和隐私敏感场景。两者没有绝对优劣,只有合不合适。

选型要看四个维度:数据规模、运维成本、访问延迟、隐私合规。如果你做的是面向海量用户的 SaaS 产品,Pinecone 的托管索引和 serverless 计费能省掉大量运维人力;如果你在企业内网做知识库问答,Chroma 的本地部署让敏感文档完全不出域。开发期和 Demo 阶段,Chroma 一行命令就能跑起来,十分推荐。

把选型决策写成打分公式,可以让比较更理性:

选库不是追新,而是量体裁衣。云端档案库适合大场面,本地铁皮柜适合小家庭;等 Agent 的业务形态稳定,再按真实数据重新打分也不迟。

choice=arg⁡max⁡db∈{P,C}(w1⋅speed(db)+w2⋅scale(db)+w3⋅cost(db))\text{choice} = \mathop{\arg\max}_{db \in \{P, C\}} \left(w_1 \cdot \text{speed}(db) + w_2 \cdot \text{scale}(db) + w_3 \cdot \text{cost}(db)\right)
通俗说:给每个候选数据库的速度、扩展能力、成本分别打分并加权求和,谁总分高就选谁。
  1. 决策结果 choice最终选定的向量数据库,要么是 Pinecone,要么是 Chroma。
    choice\text{choice}
  2. 候选集合 \{P, C\}P 代表 Pinecone,C 代表 Chroma,代表当前二选一的方案池。
    db∈{P,C}db \in \{P, C\}
  3. 加权求和速度、规模、成本各有权重 w1、w2、w3,反映业务最看重哪一项。
    w1⋅speed+w2⋅scale+w3⋅costw_1 \cdot \text{speed} + w_2 \cdot \text{scale} + w_3 \cdot \text{cost}
  4. argmax 取最大在所有候选中挑出总分最高的那个,也就是最匹配当前场景的仓库。
    arg⁡max⁡db∈{P,C}\mathop{\arg\max}_{db \in \{P, C\}}

记忆存储设计

管家收便利贴有个习惯:先快速浏览内容,用荧光笔划出关键词,在角落写上日期和客户名,再贴到对应区域。Agent 存储记忆的流程如出一辙:先把原始文本切片,再用嵌入模型把每一片变成向量,最后连同元数据一起写入向量数据库。

切片是为了迎合模型的输入上限——一段 2000 字的对话不能直接变成一个向量,要按语义切成若干块,每块几百 token,甚至让相邻切片有少量重叠,避免关键句正好被切碎。嵌入向量化则是给内容“划关键词”:模型把「用户喜欢极简风格」变成一串数字,使语义相近的句子在向量空间里靠得近。元数据则像便利贴角上的日期和客户名,用来做精确过滤,比如“只查今天上午的对话”。

为了让不同长度的文本可比,存入前通常要做归一化:

存得整齐,才找得容易。给每张便利贴画好关键词、写好日期再上墙,Agent 后续检索时才能像管家一样,一眼锁定最相关的那几张。

v^=v∥v∥\hat{\mathbf{v}} = \frac{\mathbf{v}}{\|\mathbf{v}\|}
意思是把向量的长度统一成 1,只保留方向,这样比较两条记忆时只看“语义方向”是否一致,而不受文本长短影响。
  1. 原始向量 v嵌入模型把一段文本编码成的数字列表,每个维度刻画内容的一个侧面。
    v\mathbf{v}
  2. 模长 ||v||向量起点到终点的距离,由所有分量平方和开根号得到。
    ∥v∥=∑i=1dvi2\|\mathbf{v}\| = \sqrt{\sum_{i=1}^{d} v_i^2}
  3. 归一化向量 v̂原始向量除以模长后的单位向量,长度恒为 1,便于后续统一计算相似度。
    v^=v∥v∥\hat{\mathbf{v}} = \frac{\mathbf{v}}{\|\mathbf{v}\|}

记忆检索机制

当用户问“我之前说喜欢什么风格”时,管家不会一张张翻便利贴找“风格”二字,而是回忆当时的语境:简约、简洁、不要太花哨——这些词在意思上都是同一件事。Agent 的检索也一样,不是字符串匹配,而是语义匹配:把用户当前的问题也变成向量,再去库里找方向最接近的记忆向量。

两个向量“方向接近”的程度用余弦相似度衡量,取值范围在 -1 到 1 之间,越接近 1 表示越像。实际工程中,通常会取出相似度最高的前 K 条(Top-K 召回),再配合元数据过滤和阈值校验,把分数低于阈值的噪音记忆剔除。

余弦相似度的定义如下:

管家靠“意思”找便利贴,Agent 靠余弦相似度找记忆。语义检索让 Agent 面对“换个说法”的提问也能稳定命中,这正是向量数据库相对传统数据库的核心价值。

sim(q,m)=q⋅m∥q∥×∥m∥=cos⁡θ\mathrm{sim}(\mathbf{q}, \mathbf{m}) = \frac{\mathbf{q} \cdot \mathbf{m}}{\|\mathbf{q}\| \times \|\mathbf{m}\|} = \cos\theta
通俗说:它看的是两个向量的夹角大小,夹角越小代表两条记忆“说得越是一回事”。
  1. 查询向量 q用户当前说的话经过嵌入模型转换后的向量,比如“我之前喜欢什么风格”。
    q\mathbf{q}
  2. 记忆向量 m曾经存入知识库的一条历史记忆文本所对应的向量。
    m\mathbf{m}
  3. 分子点积 q·m逐维相乘再求和,体现两个向量在方向上的重叠程度。
    q⋅m=∑i=1dqimi\mathbf{q} \cdot \mathbf{m} = \sum_{i=1}^{d} q_i m_i
  4. 分母模长相乘把文本长度差异归一化,只保留方向信息。
    ∥q∥×∥m∥\|\mathbf{q}\| \times \|\mathbf{m}\|
  5. cosθ结果就是两者夹角的余弦值,越接近 1 语义越接近。
    cos⁡θ\cos\theta

上下文窗口管理

管家的桌面只有一张,一次能摊开的便利贴数量有限——贴太多反而什么也看不清。大模型也有类似的“桌面”:上下文窗口,通常用 token 数量表示。系统提示词、检索到的历史记忆、最近几轮对话、留给模型的输出空间,都要挤在这个窗口里。

管理窗口的第一步是算预算:模型有最大 token 上限,比如 128K,但你不能真把它全用光。要预留一部分给系统提示词和模型输出,剩下的才能装检索记忆。第二步是压缩:把早几轮的对话让大模型总结成摘要,用摘要代替原文,能节省大量空间。第三步是排序注入:按相关度把记忆从高到低排列,把最相关的内容放在 prompt 中更靠前或更靠后的位置,因为模型对这两端的内容注意力更强。

可用上下文可以由这个关系式表达:

桌面就那么大,关键是分清什么必须摆、什么可以收。上下文管理不是把窗口塞满,而是像管家一样每次只挑最有用的一小摞便利贴端上桌。

Tctx=Tmax⁡−Treserved−ToutT_{\text{ctx}} = T_{\max} - T_{\text{reserved}} - T_{\text{out}}
这是典型的“桌面规划”:先把必须占用的地方留出来,剩下的才是给便利贴的空间。
  1. 可用上下文 T_ctx真正能用来放检索记忆和对话历史的 token 数量。
    TctxT_{\text{ctx}}
  2. 模型上限 T_max大模型一次能处理的全部 token 数,比如 128000。
    Tmax⁡T_{\max}
  3. 保留空间 T_reserved系统提示词、工具定义等固定内容占用的 token。
    TreservedT_{\text{reserved}}
  4. 输出空间 T_out给模型生成回答预留的 token,避免生成到一半被截断。
    ToutT_{\text{out}}

记忆衰减策略

便利贴贴久了,字迹会淡,最后连自己都看不清。管家每周会做一次清理:把褪色的便利贴扔掉或转记到档案柜。Agent 的记忆衰减不是定时删除那么简单,而是一套“降温”机制:旧记忆不会被立刻销毁,而是在检索打分时被逐步降权,让新鲜且重要的内容更容易浮现。

衰减结合三个因素:时间、访问频率、重要性。时间越久权重越低;被频繁命中的记忆说明经常用得上,可以补偿一部分衰减;带“用户明确偏好”这类高重要性标签的记忆,即使老了也值得保留。当一条短期记忆多次被检索且被判断为重要时,Agent 会把它整合进长期记忆库,相当于管家把反复用到的便利贴抄写归档到档案柜。

综合检索分数可以写成:

墨迹变淡不是撕掉便利贴,而是让它从桌面中央慢慢移到角落。衰减策略让 Agent 既不会遗忘关键事实,又不会被陈年旧事淹没——这正是短期记忆和长期记忆之间那道平滑的滑梯。

score(m)=sim(q,m)×importance(m)×e−λ Δt\text{score}(m) = \mathrm{sim}(q, m) \times \text{importance}(m) \times e^{-\lambda \, \Delta t}
一条记忆要被取用,既要语义上跟当前问题像,又要在业务上够重要,还得没老到被遗忘。
  1. 综合分数 score(m)检索时给每条记忆排名的最终依据。
    score(m)\text{score}(m)
  2. 语义相似度 sim(q,m)查询向量与记忆向量的余弦相似度,衡量“像不像”。
    sim(q,m)\mathrm{sim}(q, m)
  3. 重要性 importance(m)业务层面给记忆标注的权重,如用户画像、明确偏好更高。
    importance(m)\text{importance}(m)
  4. 时间衰减项 e^{-\lambda \Delta t}Δ t 是距今时长,时间越长,这项越小,把旧记忆压到后排。
    e−λ Δte^{-\lambda \, \Delta t}

工程实践要点

再好的便利贴系统,也得靠规矩运转。管家会在每周一固定整理桌面、给常用便利贴做备份、把不同客户的便签分颜色贴。Agent 接入向量数据库后,同样需要几条工程纪律:命名空间隔离、批量写入、缓存加速、监控调参。

命名空间隔离相当于给每个用户一个独立的“抽屉”,避免 A 用户的记忆串到 B 用户那里,这在多租户产品中是必须的。批量写入则是把多条记忆攒成一批再入库,而不是来一条写一条,显著降低网络开销和写入压力。缓存加速针对的是高频命中的热点记忆——把 Top 几条放进内存缓存,查询时先查缓存再查向量库。监控则要盯住检索命中率、平均延迟、库体积和衰减参数,像管家定期检查便利贴有没有贴满、有没有过期。

召回结果是否可用的最终门槛是阈值:

工程实践的本质是把“能跑”变成“跑得稳”。命名空间不乱串、写入不拥堵、缓存命中了、阈值卡住了,这套便利贴系统才算真正融入 Agent 的日常。

R={m∈M  |  score(m)≥θ}R = \left\{ m \in M \;\middle|\; \text{score}(m) \ge \theta \right\}
只有综合分数超过阈值 θ 的记忆才允许被端上桌面,宁缺毋滥,避免把不相关的旧事当成回忆。
  1. 召回集合 R最终进入 prompt 的记忆列表。
    RR
  2. 记忆库 M向量数据库里当前所有的短期记忆。
    m∈Mm \in M
  3. 阈值条件分数不低于 θ 的记忆才被保留。
    score(m)≥θ\text{score}(m) \ge \theta

AI 应用场景

智能客服 Agent 的会话记忆

阶段:记忆存储与语义检索

解决的问题:传统客服机器人每个会话都是“失忆”的,用户说过“我要退掉上周的订单”后,下一轮追问又被反问是什么订单。接入 Pinecone 后,每轮对话的关键信息切片、嵌入、入库,下一轮先做 Top-K 检索再拼进 prompt,客服就能始终记得上下文。

具体案例:某电商平台的售前助手在用户多轮咨询中检索到“用户来自杭州、预算 5000 元、偏好机械键盘”,于是推荐商品时自动过滤掉异地发货的选项,成交转化率提升约 15%。

企业本地知识库问答 Agent

阶段:向量库选型与本地部署

解决的问题:企业内部文档涉及商业机密,不能传到外部 SaaS 服务。选择 Chroma 本地部署,文档切片后用嵌入模型向量化并存储在本地,查询同样在内网完成,既享受语义检索的效果,又满足数据不出域的安全要求。

具体案例:某律所的合同问答助手把过去五年的合同按条款切片存入 Chroma,律师提问“去年某客户合同的违约责任条款怎么写的”,助手秒级召回相关段落并给出摘要。

个性化推荐 Agent 的记忆整合

阶段:记忆衰减与长短期转换

解决的问题:短期记忆如果无限累积,会让检索越来越慢、噪声越来越大。通过衰减策略,把低频旧记忆逐步降权,同时把反复出现的高重要性记忆(如“用户只喝无糖可乐”)转存长期记忆库,Agent 的推荐既跟得上最近偏好,又不会忘记长期习惯。

具体案例:一款会员制点单助手观察到用户最近三次都在下午点咖啡,便自动把“下午提神需求”设为高权重短期记忆,同时保留“忌乳糖”这一长期画像,推荐结果更精准。

Python 演示

python35 行
import mathimport time class ShortTermMemory:    def __init__(self, top_k=3, decay_rate=0.1):        self.top_k = top_k        self.decay_rate = decay_rate        self.memories = []     def _norm(self, vec):        length = math.sqrt(sum(v * v for v in vec))        return [v / length for v in vec]     def add_memory(self, text, vec):        normed = self._norm(vec)        self.memories.append({'vec': normed, 'text': text, 'time': time.time()})     def search(self, query_vec, k=None):        q = self._norm(query_vec)        scored = []        for m in self.memories:            age = time.time() - m['time']            sim = sum(a * b for a, b in zip(q, m['vec']))            score = sim * math.exp(-self.decay_rate * age)            scored.append((score, m['text']))        scored.sort(reverse=True, key=lambda x: x[0])        return [text for _, text in scored[: (k or self.top_k)]] if __name__ == '__main__':    store = ShortTermMemory()    store.add_memory('用户偏好简约风格的界面', [0.9, 0.1, 0.3, 0.2])    store.add_memory('用户所在城市是杭州', [0.2, 0.8, 0.7, 0.1])    store.add_memory('用户上周买过机械键盘', [0.6, 0.4, 0.2, 0.8])    query = [0.8, 0.2, 0.3, 0.1]    print('检索结果:', store.search(query, k=2))
目的:演示短期记忆从写入到检索的完整链路,用乘积形式把相似度和时间衰减结合成最终排序分数。
  1. self.memories = []用列表模拟向量数据库的记忆库,每条记忆是一个字典。
  2. def _norm(self, vec)把向量归一化成长度 1,后续点积直接等价于余弦相似度。
  3. self.memories.append({'vec': normed, 'text': text, 'time': time.time()})写入一条记忆,相当于 Chroma 的 add 操作。
  4. q = self._norm(query_vec)查询向量同样归一化,保证和库中向量在同一尺度上比较。
  5. sim = sum(a * b for a, b in zip(q, m['vec']))归一化后用点积计算余弦相似度。
  6. score = sim * math.exp(-self.decay_rate * age)相似度乘以时间衰减项,模拟便利贴墨迹变淡。
  7. scored.sort(reverse=True, key=lambda x: x[0])按综合分数从高到低排序,取 Top-K 召回。
  8. store.add_memory('用户偏好简约风格的界面', [0.9, 0.1, 0.3, 0.2])写入一条测试记忆,向量维度为 4。
  9. print('检索结果:', store.search(query, k=2))执行一次语义查询,返回最相关的两条记忆文本。

常见误区

误区很多初学者觉得,让 Agent“记住”上下文最简单的办法,就是把 session 里所有历史消息一股脑拼到 prompt 里丢给大模型,反正现在窗口够大。

正解上下文窗口再大,也经不起多轮对话无限累积。塞满之后不仅浪费 token,还会让模型被无关信息干扰——就像管家把一整柜档案全堆到桌上,反而找不到该用的那张便利贴。正确做法是把历史对话切片、嵌入、写入向量库,只检索当前任务最相关的 Top-K 记忆再注入 prompt。

为何常见:ChatGPT 等产品展示的超长上下文能力,让人误以为“全塞进去”最省事,没意识到成本、速度和注意力分配都会随之恶化。

误区很多人以为只要 `pip install chromadb` 再把文本 `add` 进去,Agent 就自动拥有记忆了,检索和衰减都不用管。

正解向量数据库只是便利贴的存放架,真正的工作是整套流水线:文本切片、嵌入向量化、元数据标注、语义检索、阈值过滤、上下文注入、记忆衰减。只存不查等于把便利贴扔进柜子永不翻看;只查不筛则会把不相关记忆也带进对话。就像管家只买了个柜子、从不分类整理,等于没请管家。

为何常见:向量数据库的 API 看起来太简单了,add 和 query 两个方法掩盖了背后需要设计的记忆策略。

误区对比文章常把“全托管”“云原生”当作高级卖点,于是初学者形成印象:Pinecone 功能强、有 scale,所有项目直接选 Pinecone 就行。

正解Pinecone 像云端的专业档案仓库,适合数据量大、追求弹性、不想维护基础设施的团队;Chroma 像办公室自购的铁皮柜,适合本地开发、隐私敏感、数据量小的场景。选型要看规模、运维成本、访问延迟和数据合规,而不是看谁听起来更“高级”。

为何常见:人们容易把“托管”等同于“更好”,忽略了本地部署在隐私、延迟和离线场景中的独特价值。

误区有同学认为衰减策略很简单:写个定时任务,把超过 7 天的记录全部删除就行。

正解粗暴删除会把高价值旧记忆一起丢掉。真正的衰减是“降温”而非“烧毁”:检索时用时间衰减系数调整排序分数,让旧记忆排到后面;对于多次被访问的重要记忆,反而应补偿权重并转存为长期记忆。管家整理桌面的方式是把没用的便利贴扔进垃圾桶,但对重要的旧信息是归档而不是销毁。

为何常见:把“衰减”按字面理解成删除是最自然的联想,忽略了它本质是检索过程中的一种加权排序策略。

误区写检索代码时只按相似度降序取 Top-1,认为分数最高那条就是 Agent 该用的记忆。

正解语义相似不代表任务相关。比如用户问“帮我看看订单”,历史里“帮我看一下手机订单”分很高,但另一条“用户昨天申请了退款”才是当前真正需要的信息。所以检索要综合相似度、重要性和时间衰减,还要设置阈值:分数太低的记忆宁可不用,避免张冠李戴。

为何常见:“越像越有用”的直觉很强,但向量检索只衡量语义接近度,并不理解当前任务的真实目标。

面试题

Q1. Agent 的短期记忆最适合用下面哪个比喻?

单选题 · easy

  • A.档案柜里永久归档的合同资料
  • B.办公桌上随贴随换的便利贴← 正确答案
  • C.电脑中只读的配置文件
  • D.云端备份的全量聊天日志

答案:B。短期记忆的特点是容量小、时效短、频繁读写,正好对应便利贴;档案柜对应长期记忆,配置文件对应固定规则,全量日志则没有取舍和衰减。

Q2. Pinecone 最突出的产品特点是什么?

单选题 · easy

  • A.全托管的云端向量数据库服务← 正确答案
  • B.只支持本机离线部署运行
  • C.不提供任何向量索引能力
  • D.必须搭配指定大模型使用

答案:A。Pinecone 的核心优势是全托管、免运维、按量计费的云端向量数据库;本地离线部署是 Chroma 的特点,索引是向量库的基本能力,Pinecone 也不绑定特定大模型。

Q3. Chroma 相比 Pinecone 更适合下列哪种场景?

单选题 · mid

  • A.本地开发与轻量级原型验证← 正确答案
  • B.超大规模分布式流量爆发
  • C.完全不需要存储的业务系统
  • D.必须使用旧式数据库的场景

答案:A。Chroma 开源、轻量、可嵌入式运行,特别适合本地开发和原型验证;超大规模流量是 Pinecone 的强项;不需要存储和中选逻辑无关;Chroma 是向量库而非旧式数据库。

Q4. 把一段记忆文本变成向量并写入数据库的过程,正确的称呼是?

单选题 · mid

  • A.文本切片与嵌入向量编码← 正确答案
  • B.建立索引和主键约束
  • C.压缩成加密的哈希串
  • D.加载到内存的缓存区

答案:A。记忆入库前要先切片,再用嵌入模型编码成向量;主键约束属于关系型数据库概念,哈希串无法保留语义关系,缓存加载只是存储环节的性能优化。

Q5. 两个记忆向量的余弦相似度主要在衡量什么?

单选题 · mid

  • A.它们在方向上的接近程度← 正确答案
  • B.它们绝对长度的差值大小
  • C.它们包含的零元素数量
  • D.它们在磁盘中的物理距离

答案:A。余弦相似度只看方向夹角,夹角越小越接近,与向量长度无关;长度差、零元素数量、磁盘物理距离都不在余弦公式的意义范围内,这也保证了它不受文本长短影响。

Q6. 上下文窗口管理中的“token 预算”指的是什么?

单选题 · mid

  • A.给系统提示词、历史和答案分配 token 的计划← 正确答案
  • B.向量数据库允许的最大连接数
  • C.训练模型时显卡的显存容量
  • D.Agent 同时调用的 API 数量

答案:A。token 预算是指在一个上下文窗口内,合理分配系统指令、检索记忆、对话历史和输出空间的计划;连接数、显存、API 数量都与 prompt 的 token 规划无关。

Q7. 综合打分检索中,时间衰减通常如何影响记忆排序?

单选题 · hard

  • A.用指数衰减项降低旧记忆的权重← 正确答案
  • B.把旧记忆全部立即物理删除
  • C.只按时间倒序返回所有记录
  • D.每次查询随机筛选历史数据

答案:A。衰减的本质是在打分时乘以类似 e^{-λΔt} 的项,让旧记忆权重降低、排到后面,而不是删除;只按时间倒序会忽略相关性,随机筛选更不可取。

Q8. 一条短期记忆转存为长期记忆通常发生在什么时候?

单选题 · hard

  • A.多次被访问且重要性评分较高时← 正确答案
  • B.每天凌晨定时清空数据库时
  • C.模型完成一次参数更新之后
  • D.向量维度超过配置上限时

答案:A。短期转长期需要满足“高频访问 + 高重要性”两个条件,本质是记忆的沉淀;定时清空是删除,模型参数更新无关,维度超限是配置问题不是记忆价值判断。

Q9. 短期记忆向量数据库需要管理哪些操作?

多选题 · mid

  • A.记忆片段做嵌入编码再写入← 正确答案
  • B.语义检索后做 Top-K 召回← 正确答案
  • C.按上下文预算筛选注入内容← 正确答案
  • D.为训练集标注实体关系

答案:ABC。存储、检索、上下文注入是短期记忆管理的三段核心流程;训练集标注属于模型训练阶段的工作,与推理时记忆管理无关。

Q10. 关于命名空间隔离,下列说法正确的是?

多选题 · mid

  • A.不同用户的记忆可放在不同命名空间← 正确答案
  • B.命名空间之间查询互不干扰← 正确答案
  • C.命名空间可以完全替代缓存机制
  • D.命名空间适合多租户场景的隔离← 正确答案

答案:ABD。命名空间是向量库中按用户或项目切分数据的手段,能实现查询隔离和多租户管理;但它解决的是数据隔离问题,缓存解决的是性能问题,两者职责不同,不能互相替代。