触发条件与术语
告诉 Lore 一条记忆该在什么时候出现,以及哪些词应该找到它。
触发条件决定记忆何时出现,术语决定哪些词能找到它。把触发条件写成一个未来的情境,把术语写成人们会输入的词,召回就能通过两条路径匹配到这条记忆。两者各司其职,不要混用。
触发条件
触发条件描述的是应当唤起这条记忆的情境。请把它写成未来会遇到的情境,而不是内容摘要。Agent 会根据触发条件判断记忆是否与当前任务相关,所以它应当点明任务、涉及的区域或出现的症状。
使用这个句式:
When [doing a task], [touching an area], or [seeing a symptom] in [project or product].| 触发条件 | 判断 | 原因 |
|---|---|---|
| 修改 checkout-api 中的退款或支付 webhook 时 | 好 | 一个情境,点明了涉及的区域 |
| checkout-api 中退款 webhook 重试失败时 | 好 | 点明 Agent 会看到的症状,仍然是一个情境 |
| 重要的 webhook 信息 | 弱 | 没有说明何时适用 |
| 摘要:webhook 按 event.id 保证幂等 | 弱 | 描述的是内容,不是情境 |
| 修改 webhook、退款邮件或发票时 | 弱 | 三个情境用 OR 连接,应拆成三条记忆 |
请遵循三条规则:
- 一条记忆只对应一个情境。 如果描述触发条件时需要用到“或”,就把记忆拆成每个情境一个节点。
- 描述未来,而不是内容。 问自己:什么时候有人会需要这条记忆?
- 使用工作中的用语。 用团队实际使用的词来描述任务、区域或症状。
注意
触发条件检查会在新建记忆时提醒缺少触发条件;无论是新建还是修改触发条件,它都会提醒使用了 OR 逻辑。提醒不会阻止保存。检查只识别中文的 OR 标记(或、或者、以及),不会识别英文单词 "or",因此请自行检查英文触发条件。
Lore 会根据触发条件生成记忆的视图,因此清楚的情境也有助于语义召回。
术语
术语收录的是人们真正会输入、用来找到这条记忆的词:名称、别名、缩写、同一概念的中英文写法,以及错误名称。
| 应该添加 | 示例 |
|---|---|
| 产品和项目名称,包括带连字符的写法 | checkout api、checkout-api |
| 缩写 | RLS(行级安全) |
| 中英文写法 | 退款回调、refund webhook |
| 人们会粘贴的错误名称和症状 | duplicate key、idempotency conflict |
| 提示词中会出现的工具名和文件名 | stripe、CLAUDE.md |
以下内容不要添加:
- 泛泛的词,例如
code、test、fix。它们会匹配到太多记忆。 - 整句或粘贴的日志。术语应当是简短的词组。
- 没人会输入的词。只出现在内容里、没人会搜的词对召回没有帮助。
- 不同形式的重复项。Lore 只去掉完全相同的重复项,所以
Stripe和stripe可能会存为两个术语。选定一种写法即可。
术语如何参与匹配
术语会参与三种匹配:
| 匹配方式 | 说明 | 默认权重 |
|---|---|---|
| 精确匹配 | 提示词中出现的术语即为精确匹配。 | 0.30(recall.weights.w_exact) |
| 术语语义匹配 | 术语会被向量化,因此语义相近的提示词也能匹配。 | 0.25(recall.weights.w_glossary_semantic) |
| 全文匹配(词法) | 术语文本与其他文本一起按词参与全文检索。 | 0.03(recall.weights.w_lexical) |
召回如何工作说明了这些信号如何组合。
举个例子,假设提示词是:
为什么 stripe 退款 webhook 会插入两行?stripe 和 refund webhook 是术语的精确匹配。这个问题的含义也接近触发条件。在这种情况下,记忆可以同时通过术语和视图被匹配到。两条独立的路径让它更容易被找到。
触发条件、术语与内容对比
| 触发条件 | 术语 | 内容 | |
|---|---|---|---|
| 回答的问题 | 这条记忆何时应当出现? | 哪些词应该找到它? | 什么是真的,Agent 应该怎么做? |
| 写法 | 一个未来的情境 | 简短的词和别名 | 事实、规则、决策或工作流 |
| 示例 | 修改 checkout-api 中的退款或支付 webhook 时 | refund webhook、stripe | 退款 webhook 按 event.id 保证幂等。 |
| 召回通过以下方式使用 | 视图和关键词搜索 | 精确匹配、术语语义匹配和全文匹配 | 视图和关键词搜索 |
| 常见错误 | 把内容摘要当作触发条件 | 添加泛泛的词 | 把触发条件写进内容 |