Lore

提升召回质量

先修记忆本身,再用真实提问调整阈值和权重。

多数召回问题源于记忆的写法,而不是设置。先修改记忆,再用真实提示词检查结果。只有在记忆本身正确、结果仍然不对时,才调整设置。

先改善记忆的结构

按顺序完成以下步骤:

  1. 让记忆只讲一个主题。参见哪些内容应该放进 Lore。
  2. 给它一个具体的路径,以概念命名,不包含日期。参见路径与域。
  3. 写一个具体的触发条件:一个未来的情境。参见触发条件与术语。
  4. 添加术语,覆盖人们实际会输入的词,包括另一种语言的写法。
  5. 如实设置优先级。参见优先级。
  6. 确认嵌入模型已配置。召回需要它,参见下文的“必须配置嵌入模型”。
  7. 用真实提示词测试,并在修改任何设置之前先阅读结果。

症状与首先检查的地方

症状首先检查
正确的记忆从不出现它的触发条件和术语。用团队实际使用的词写一个提示词来测试。
某条记忆出现在无关的提示词中是否过于宽泛。拆分它,检查触发条件中是否有 OR 用语;如果它只是背景信息,就降低优先级。
太多弱相关的记忆出现记忆是否足够具体。如果足够具体,就提高 recall.display.min_display_score。见下方配置项。
中文提示词匹配效果差PostgreSQL 中是否有 pg_jieba 或 zhparser。参见下文的“中文召回”。无论如何,都应补充中文术语。
语义匹配缺失嵌入模型是否已配置。更改嵌入模型会重建视图。
召回从来没有结果嵌入模型是否已配置。没有它,召回会失败。用 lore_status 检查后端健康状态。
召回经常被跳过服务器是否太慢。超时会跳过召回并给出提示。
长提示词丢失了重点召回只使用前 200 个字符。把主题写在前面。
有用的记忆排名太低它的触发条件和术语。优先级只带来很小的加分。

可调整的设置

只有在记忆结构正确之后才调整设置。每次只改一个值,然后用同样的提示词重新测试。

配置项默认值作用何时修改
recall.display.min_display_score0.60得分低于此值的候选会被扣留当 Shown 很高而 Used 很低时提高它。只有当你确认正确的记忆总是刚好低于阈值被扣留时,才降低它。
recall.display.max_display_items3每次召回最多展示的记忆条数想让注入的内容更精简时调低。只有当相关记忆不断被条数上限截掉时,才调高。
recall.safety.max_query_chars200参与召回的长提示词字符数长提示词丢失关键词时调高。把主题放在提示词开头。
recall.safety.timeout_ms2000超过此时间即跳过召回只有服务器持续较慢时才调高。超时意味着该提示词完全没有召回。
recall.weights.w_exact0.30精确匹配的权重保持默认。先修改术语。
recall.weights.w_glossary_semantic0.25术语语义匹配的权重当基于含义的术语匹配效果较弱时,可以考虑调高。
recall.weights.w_dense0.30视图(语义)匹配的权重当记忆能通过含义找到,但排名太低时,可以考虑调高。
recall.weights.w_lexical0.03全文匹配的权重保持默认,除非已经配置了中文全文检索。参见下文的“中文召回”。
recall.bonus.priority_base 和 recall.bonus.priority_step0.05 和 0.01优先级加分保持默认。应改为如实设置优先级。
recall.recency.enabledtrue开启或关闭时间加分当旧的稳定规则应与近期笔记同等排序时关闭。
recall.recency.half_life_days180时间加分减半所需的天数调低(例如 30)以偏向近期工作。保持 180 则效果更温和。
recall.recency.max_bonus0.04最大时间加分保持默认。
recall.recency.priority_exempt1优先级不高于此值的记忆不随时间衰减保持默认。

自托管服务可以在 /settings 中修改设置,也可以通过 API 修改。只有服务器设置了 API_TOKEN 时,才需要带上 Authorization 请求头:

curl -X PUT http://127.0.0.1:18901/api/settings \
  -H "Authorization: Bearer lm_your_token" \
  -H "Content-Type: application/json" \
  -d '{"patch": {"recall.display.min_display_score": 0.65}}'

Loremem 云服务的召回行为设置位于设置 → 偏好。

中文召回

中文词之间没有空格,因此中文的词法匹配依赖 PostgreSQL 中的中文分词器。Lore 优先使用 pg_jieba,没有时使用 zhparser。

  • 两者都未安装时,PostgreSQL 会退回到 simple 文本检索,中文匹配效果会明显变弱。
  • Lore 的 PostgreSQL 镜像 fffattiger/pgvector-zhparser:pg16 同时包含这两个扩展,并预先加载了 pg_jieba。
  • 如果你使用自己的 PostgreSQL,请参见使用自己的 PostgreSQL。
  • 无论数据库如何配置,都应把中文术语加入术语列表,例如 退款回调。人们会直接输入这些词。

必须配置嵌入模型

召回使用嵌入模型进行语义匹配。没有嵌入模型,召回无法运行:调用会失败,插件则在没有召回块的情况下继续运行。

  • Loremem 云服务:模型已经预先配置。在设置 → 模型中选择嵌入配置。更改它会重建视图和召回索引,并消耗模型配额。
  • **自托管:**在 /setup 中设置嵌入端点,之后也可以在 /settings 中修改。它必须是兼容 OpenAI 的 /v1/embeddings 端点,并提供 base URL、API key 和模型名称。

要获得最完整的 gist 和 question 视图,还需要 View LLM。没有它时,Lore 会根据内容、触发条件和术语生成较简单的视图。参见生成的视图。

用真实提示词测试

用你在工作中真正会输入的提示词来测试。自己编造的关键词测试,无法反映 Agent 实际会发送的内容。

  1. 打开召回页面:在 Loremem 云服务中是控制台的召回页面;在自托管服务中是 /recall。
  2. 输入一条真实的提示词并运行召回。
  3. 查看候选、它们的顺序和分数。
  4. 判断正确的记忆卡在哪一步。如果它在所有阶段都没有出现,就修改记忆;如果它被找到了却被扣留,就检查展示阈值和条数上限。每个阶段显示什么,参见召回分析。
  5. 修改记忆,然后用同一条提示词重新运行。只有在记忆本身正确时,才调整设置。

定期检查的简单流程

  1. 每个重要决策之后,写入或更新记忆。参见写好一条记忆。
  2. 每周用真实提示词为每个活跃项目跑一遍召回,检查哪些记忆出现了。
  3. 查看召回分析,找出噪声较大或从未被采用的记忆。
  4. 每发现一个问题,只修复一条记忆。不要同时修改多个设置。
  5. 大规模清理之前先备份。参见备份与恢复。

提示

记下提示词、你预期的结果和实际返回的结果。每次修改后用同样的提示词重新测试,就能看出改动是否有效。