记忆库配置
记忆库(Memory Config)是记忆系统的核心配置单元,定义了记忆的存储方式、检索策略和提取行为。本文档详细介绍记忆库的各项配置参数。
创建记忆库
在「记忆系统」管理页面,点击「新建」按钮,在弹出的配置抽屉中填写各项参数。配置分为两大区域:基础配置和提取配置。
基础配置
基础配置定义了记忆库的身份信息和存储后端。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| 名称 | string | 是 | -- | 记忆库的显示名称,建议包含业务含义 |
| 状态 | enum | 否 | 启用 | 启用或禁用。禁用状态的记忆库不会参与记忆提取和检索 |
| 向量存储实例 | select | 否 | -- | 选择用于存储记忆向量的存储实例(PgVector/Milvus/Elasticsearch) |
| Embedding 模型 | select | 是 | -- | 选择用于将记忆文本转化为向量的 Embedding 模型 |
Embedding 模型选择
Embedding 模型决定了记忆的向量化质量,直接影响语义检索的准确性。选择时需要考虑:
- 模型能力:选择支持中文语义理解的 Embedding 模型,如
text-embedding-3-small、bge-large-zh等。 - 向量维度:不同模型产出的向量维度不同,需要与向量存储实例的配置匹配。
- 成本与性能:更大的模型通常有更好的语义理解能力,但推理成本和延迟也更高。
向量存储实例
向量存储实例用于持久化记忆向量。如果不选择,系统将使用默认的存储实例。可用的存储类型包括:
- PgVector:PostgreSQL 的向量扩展,适合已有 PostgreSQL 数据库的场景。
- Milvus:专业的向量数据库,适合大规模记忆存储场景。
- Elasticsearch:支持向量检索的全文搜索引擎。
TIP
如果同时需要全文检索能力(BM25),可以启用搜索引擎选项并选择对应的搜索引擎实例。
搜索引擎配置
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 启用搜索引擎 | boolean | 关闭 | 是否启用 BM25 全文检索,启用后记忆检索将支持混合检索(向量 + BM25) |
| 搜索引擎实例 | select | -- | 启用搜索引擎后,选择用于全文检索的搜索引擎实例 |
提取配置
提取配置定义了系统从对话中自动提取记忆的行为参数。
提取参数
| 参数 | 类型 | 默认值 | 范围 | 说明 |
|---|---|---|---|---|
| 提取模型 | select | -- | -- | 用于从对话中提取记忆的 CHAT 类型模型。建议选择理解能力强的模型 |
| 提取间隔 | number | 4 | 1-1000 | 每隔多少轮对话触发一次记忆提取 |
| 单次最大提取数 | number | 5 | 1-100 | 每次提取最多生成多少条记忆 |
| 记忆过期天数 | number | 0 | 0-365 | 记忆的有效期天数。设为 0 表示永不过期 |
提取间隔说明
提取间隔决定了记忆提取的频率。例如,设为 4 表示每经过 4 轮对话(即用户发送 4 条消息后),系统会自动分析最近的对话内容并提取记忆。
- 间隔较小(如 2-4):提取更频繁,能更及时捕捉关键信息,但会增加 LLM 调用开销。
- 间隔较大(如 8-10):提取不那么频繁,适合长对话场景,可降低成本。
记忆过期天数说明
设置记忆的有效期可以自动清理过时的信息。例如:
- 0(默认):记忆永不过期,一直保留。
- 30:记忆在创建 30 天后自动失效。
- 90:适合季度性的业务场景。
提取提示词
记忆提取的核心在于 LLM 对对话内容的理解和摘要能力。Snail AI 提供两种提示词模式:
默认提示词
系统内置了一套经过优化的默认提取提示词,能够从对话中识别并提取五种类型的记忆(FACT、DECISION、PREFERENCE、TASK_PROGRESS、REFERENCE)。对于大多数场景,默认提示词已经足够使用。
自定义提示词
如果默认提示词不满足业务需求,可以切换到自定义模式,编写专属的提取提示词。自定义提示词需要满足以下要求:
- 必须输出 JSON 数组:提取结果必须是 JSON 格式的记忆条目数组。
- 必须包含 memoryType 字段:每条记忆必须指定类型(FACT/DECISION/PREFERENCE/TASK_PROGRESS/REFERENCE)。
- 必须包含 title 和 content 字段:每条记忆必须有标题和内容。
自定义提示词注意事项
自定义提示词会完全替代默认提示词。请确保提示词覆盖了所有必要的提取逻辑,否则可能导致记忆提取质量下降或格式错误。
检索配置
检索配置定义了记忆检索时的策略和参数。这些参数在记忆检索与调试界面中也可以实时调整。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 最大召回数 | number | 8 | 每次检索最多返回的记忆条数(1-100) |
| 查询改写 | boolean | 关闭 | 是否在检索前对查询语句进行改写优化 |
| 融合策略 | enum | WEIGHTED_SUM | 混合检索的融合策略(RRF 或加权求和) |
| 稠密向量权重 | number | 0.5 | 融合策略为加权求和时,向量检索结果的权重(0-1) |
| RRF K 值 | number | 60 | 融合策略为 RRF 时的 K 参数(1-200) |
| 启用阈值过滤 | boolean | 关闭 | 是否启用相似度阈值,过滤掉低于阈值的结果 |
| 相似度阈值 | number | 0.65 | 启用阈值过滤后,低于此值的记忆将被过滤(0-1) |
| 启用重排序 | boolean | 关闭 | 是否使用 Rerank 模型对检索结果进行重排序 |
| 重排序模型 | select | -- | 启用重排序后,选择用于重排序的 RERANKER 模型 |
| 进入重排序数量 | number | 30 | 送入重排序模型的候选记忆数量(1-500) |
融合策略说明
当同时启用向量检索和全文检索时,需要选择融合策略将两路检索结果合并:
RRF(Reciprocal Rank Fusion)
RRF 是一种基于排名的融合方法,不依赖于分数的绝对值,而是根据每条结果在各检索通道中的排名位置进行加权。
- K 值:控制排名靠前结果的权重衰减速度。K 值越大,排名靠前和靠后的结果权重差异越小。
- 适用场景:当向量检索和全文检索的分数量级差异较大时,RRF 能更公平地融合两路结果。
加权求和(Weighted Sum)
加权求和通过设定稠密向量权重(denseWeight),直接对两路检索的分数进行加权计算:
最终分数 = denseWeight * 向量分数 + (1 - denseWeight) * BM25分数- denseWeight = 0.5:向量检索和全文检索各占一半权重。
- denseWeight = 0.8:更偏重向量(语义)检索。
- denseWeight = 0.2:更偏重全文(关键词)检索。
重排序说明
重排序(Rerank)是一个可选的精排步骤。开启后,系统先通过向量检索和/或全文检索获取较多的候选结果(由"进入重排序数量"控制),然后使用 Rerank 模型对候选结果进行更精确的相关性排序,最终返回排序后的 Top N 结果。
推荐配置
对于大多数场景,建议:
- 最大召回数设为 5-10
- 启用相似度阈值,阈值设为 0.6-0.7
- 如果可用,启用重排序可以显著提升检索质量
配置示例
基础场景
适用于简单的对话记忆需求,单一向量检索:
| 参数 | 值 |
|---|---|
| Embedding 模型 | text-embedding-3-small |
| 提取间隔 | 4 |
| 单次最大提取数 | 5 |
| 最大召回数 | 8 |
| 融合策略 | WEIGHTED_SUM |
| 阈值过滤 | 关闭 |
| 重排序 | 关闭 |
高精度场景
适用于需要精确记忆召回的专业领域场景:
| 参数 | 值 |
|---|---|
| Embedding 模型 | text-embedding-3-large 或 bge-large-zh |
| 提取间隔 | 2 |
| 单次最大提取数 | 8 |
| 搜索引擎 | 启用 |
| 最大召回数 | 10 |
| 融合策略 | RRF(K=60) |
| 阈值过滤 | 启用(阈值 0.65) |
| 重排序 | 启用 |
| 进入重排序数量 | 50 |
下一步
- 记忆检索与调试 -- 测试和调试记忆的检索效果