OpenViking 提供内置记忆抽取模板,用于指导模型从会话中识别值得保存的信息,并生成对应的记忆内容。你可以在控制台的“记忆策略”页面修改模板,调整各类记忆的抽取范围、字段生成要求和正文组织方式。
例如,个人开发者可以要求优先记录长期协作偏好,企业管理员可以为营销助手统一设置品牌信息的描述规范,或要求事件记忆排除只需临时查询的促销信息。本文介绍个人版用户和企业版管理员如何配置、发布、验证和恢复记忆抽取模板。
开始前,请确认已开通 OpenViking 库,并具备目标库或数据空间的策略管理权限。验证配置效果时,还需要有已接入 OpenViking 的 Agent,或能够提交会话消息并执行 Commit 的应用。Commit 会提交会话记录并触发记忆抽取,具体接入方法见使用 OpenViking 个人版快速接入记忆。
版本 | 配置入口 | 生效范围 |
|---|---|---|
个人版 | 目标库主页 → 记忆策略 | 当前库。个人版只有一个 User,库内统一使用这一套策略。 |
企业版 | 当前数据空间 → 空间配置 → 记忆策略 | 当前数据空间(Account)下的所有 User 及其 Peer。其他数据空间不受影响,不支持为单个 User 或 Peer 单独覆盖模板。 |
企业版管理员发布前应核对数据空间名称,并评估其中各类 Agent 的使用需求。同一空间内的多个 User 会共同使用该空间的抽取模板;需要采用不同模板的业务,可分别在不同数据空间中配置。
生效时间:自定义模板发布后,用于生效范围内后续增量 Commit 的记忆抽取。发布操作不会立即重写已有记忆,也不会自动重新处理历史会话。后续抽取涉及已有记忆时,仍按系统规定的更新规则处理。
当前支持以下六类内置记忆。所有类型都可修改“记忆类型描述”,用于说明哪些信息值得抽取、哪些信息应排除;各类型还提供对应的字段生成说明,部分类型支持编辑 Markdown 正文模板。
记忆类型 | 内容用途 | 除类型描述外,可编辑的配置 |
|---|---|---|
Profile(用户画像) | 稳定身份、背景与长期状态的总览 | 用户画像正文生成说明 |
Preferences(用户偏好) | 按主题记录长期喜好、习惯与协作要求 | 偏好主题名称、偏好正文的生成说明 |
Entities(实体) | 重要人物、组织、地点、产品及其关系 | 实体分类、实体名称、实体卡片正文的生成说明 |
Events(事件) | 具有后续参考价值的具体事件、决定、承诺与结果 | 事件名称、事件摘要的生成说明;Markdown 正文模板 |
Soul(助手行为原则) | 助手持续遵循的核心价值、行为边界、沟通气质与连续性要求 | 核心价值、边界规则、沟通气质、连续性规则的生成说明;Markdown 正文模板 |
Identity(助手身份) | 助手名称、身份设定、表达气质和自我介绍 | 身份类型、助手名称、表达气质、标志 Emoji、头像、自我介绍的生成说明;Markdown 正文模板 |
点击需要调整的记忆类型,查看当前生效配置。建议先阅读类型描述和各字段的说明,确定要调整的范围。
按需调整字段生成说明,例如主题命名、实体分类、摘要长度或正文表达要求。
对于 Events、Soul、Identity,确有排版需要时再修改 Markdown 正文模板;其他情况下可保留默认模板。
可结合页面提供的变量说明和文件预览,检查当前配置影响的 URI 或 Markdown 区域。
记忆类型 | 开放字段中文标题 | YAML 配置项 / Field | 中文描述提示 | 可使用的变量及含义 |
|---|---|---|---|---|
Profile | 记忆类型描述 | description | 什么信息应该被识别为用户画像? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值,也可写 {% if language == 'en' %}…{% endif %} 条件。 |
用户画像正文 | fields[].description | Profile 文件正文应该怎么写? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此要求正文使用指定语言,或按语言编写不同的格式指令。 | |
Preferences | 记忆类型描述 | description | 什么信息应该被识别为用户偏好? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。 |
偏好主题名称 | fields[].description | 每份偏好文件的主题怎么命名? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于要求 topic 采用相应语言;也可用 {% if language == 'en' %} 区分英文 snake_case 命名与其他语言的自然命名规则。 | |
偏好正文 | fields[].description | 偏好文件正文应该怎么写? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束 Markdown 正文的语言和分语言格式。 | |
Entities | 记忆类型描述 | description | 什么对象应该被识别为第三方实体? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。 |
实体分类 | fields[].description | 实体应该归入哪个目录? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于要求 category 采用相应语言;也可用 {% if language == 'en' %} 区分英文 snake_case 与其他语言的自然命名规则。 | |
实体名称 | fields[].description | 实体文件应该叫什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于按该语言补充实体名称的写法和规范。 | |
实体卡片正文 | fields[].description | 实体卡片正文应该怎么写? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束实体卡片正文的语言和分语言格式。 | |
Events | 记忆类型描述 | description | 什么内容应该拆成一条独立事件? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。 |
事件名称 | fields[].description | 事件文件应该叫什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于要求 event_name 采用相应语言;也可用 {% if language == 'en' %} 区分英文 snake_case 与其他语言的自然命名规则。 | |
事件摘要 | fields[].description | 事件摘要应该保留什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束事件摘要的输出语言和分语言写法。 | |
Markdown 正文模板 | content_template | 最终 Markdown 文件应该如何排版? | 字段变量
正文与时间方法
模板支持 {% if %} 条件、{% for %} 循环和 {% set x = ... %} 局部变量;set 创建的变量仅在当前模板内使用。 | |
Soul | 记忆类型描述 | description | 什么信息应该更新助手的 Soul? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。 |
核心价值 | fields[].description | Core Truths 应该提取什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束核心价值内容的输出语言。 | |
边界规则 | fields[].description | Boundaries 应该提取什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束边界规则内容的输出语言。 | |
沟通气质 | fields[].description | Vibe 应该提取什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束沟通气质内容的输出语言。 | |
连续性规则 | fields[].description | Continuity 应该提取什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束连续性规则内容的输出语言。 | |
Markdown 正文模板 | content_template | 最终 Markdown 文件应该如何排版? | 字段变量
模板支持 {% if %} 条件、{% for %} 循环和 {% set x = ... %} 局部变量;set 创建的变量仅在当前模板内使用。 | |
Identity | 记忆类型描述 | description | 什么信息应该更新助手身份? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。 |
身份类型 | fields[].description | Creature 应该怎么描述? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束身份类型内容的输出语言。 | |
助手名称 | fields[].description | 助手名称应该如何提取? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此补充名称的语言、字符或格式要求,但不会改变系统的 immutable 更新规则。 | |
表达气质 | fields[].description | Vibe 应该怎么描述? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束表达气质内容的输出语言。 | |
标志 Emoji | fields[].description | 哪个 Emoji 能代表助手? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于按语言环境补充 Emoji 的选择要求。 | |
头像 | fields[].description | Avatar 应该记录什么? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于按语言环境补充头像路径或 URL 的说明要求。 | |
自我介绍 | fields[].description | 自我介绍应该怎么写? | {{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束自我介绍的语言、语气和长度。 | |
Markdown 正文模板 | content_template | 最终 Markdown 文件应该如何排版? | 字段变量
模板支持 {% if %} 条件、{% for %} 循环和 {% set x = ... %} 局部变量;set 创建的变量仅在当前模板内使用。 |
支持在指令中使用底部提供的变量,变量的使用支持 Jinja2 语法,可参考:Jinja2 - Template designer guide。
发布完成后,新的指令立即生效,在后续的记忆抽取管线中自动应用。
选择一组不含敏感信息的代表性会话,至少覆盖“应保留”“应排除”和“信息不足”三种情况。企业版建议先在测试数据空间验证,再将确认后的配置应用到业务数据空间。
模板发布成功仅说明配置已生效。是否满足业务需求,应以实际会话的抽取、更新和检索结果为准。相关操作见 了解 OpenViking 的记忆机制,定制开发 Agent 记忆接入。
为什么发布后,已有记忆没有变化?
发布只切换后续 Commit 使用的抽取模板,不会触发历史记忆的批量重写。请用新的代表性会话验证配置,并分别检查新建和更新的结果。
为什么文件预览符合预期,实际抽取仍有差异?
文件预览用于说明字段与 URI、Markdown 内容的对应关系,不执行模型抽取。实际结果受会话证据、类型判断、字段说明和系统更新规则共同影响。建议使用典型会话逐项检查,并优先修改含糊或相互矛盾的要求。
能否通过本功能新建待办、实事等自定义的记忆类型?
当前仅支持表中六类内置记忆的开放配置。新增记忆类型、增加业务字段暂未开放配置。