You need to enable JavaScript to run this app.
文档中心
向量数据库VikingDB

向量数据库VikingDB

复制全文
下载 pdf
使用 OpenViking 接管 Agent 记忆
自定义记忆抽取指令
复制全文
下载 pdf
自定义记忆抽取指令

OpenViking 提供内置记忆抽取模板,用于指导模型从会话中识别值得保存的信息,并生成对应的记忆内容。你可以在控制台的“记忆策略”页面修改模板,调整各类记忆的抽取范围、字段生成要求和正文组织方式。
例如,个人开发者可以要求优先记录长期协作偏好,企业管理员可以为营销助手统一设置品牌信息的描述规范,或要求事件记忆排除只需临时查询的促销信息。本文介绍个人版用户和企业版管理员如何配置、发布、验证和恢复记忆抽取模板。

适用范围与使用前提

开始前,请确认已开通 OpenViking 库,并具备目标库或数据空间的策略管理权限。验证配置效果时,还需要有已接入 OpenViking 的 Agent,或能够提交会话消息并执行 Commit 的应用。Commit 会提交会话记录并触发记忆抽取,具体接入方法见使用 OpenViking 个人版快速接入记忆

版本

配置入口

生效范围

个人版

目标库主页 → 记忆策略
Image

当前库。个人版只有一个 User,库内统一使用这一套策略。

企业版

当前数据空间 → 空间配置 → 记忆策略
Image

当前数据空间(Account)下的所有 User 及其 Peer。其他数据空间不受影响,不支持为单个 User 或 Peer 单独覆盖模板。

企业版管理员发布前应核对数据空间名称,并评估其中各类 Agent 的使用需求。同一空间内的多个 User 会共同使用该空间的抽取模板;需要采用不同模板的业务,可分别在不同数据空间中配置。
生效时间:​自定义模板发布后,用于生效范围内后续增量 Commit 的记忆抽取。发布操作不会立即重写已有记忆,也不会自动重新处理历史会话。后续抽取涉及已有记忆时,仍按系统规定的更新规则处理。

可以自定义哪些内容

当前支持以下六类内置记忆。所有类型都可修改“记忆类型描述”,用于说明哪些信息值得抽取、哪些信息应排除;各类型还提供对应的字段生成说明,部分类型支持编辑 Markdown 正文模板。

记忆类型

内容用途

除类型描述外,可编辑的配置

Profile(用户画像)

稳定身份、背景与长期状态的总览

用户画像正文生成说明

Preferences(用户偏好)

按主题记录长期喜好、习惯与协作要求

偏好主题名称、偏好正文的生成说明

Entities(实体)

重要人物、组织、地点、产品及其关系

实体分类、实体名称、实体卡片正文的生成说明

Events(事件)

具有后续参考价值的具体事件、决定、承诺与结果

事件名称、事件摘要的生成说明;Markdown 正文模板

Soul(助手行为原则)

助手持续遵循的核心价值、行为边界、沟通气质与连续性要求

核心价值、边界规则、沟通气质、连续性规则的生成说明;Markdown 正文模板

Identity(助手身份)

助手名称、身份设定、表达气质和自我介绍

身份类型、助手名称、表达气质、标志 Emoji、头像、自我介绍的生成说明;Markdown 正文模板

配置并发布自定义模板

查看当前模板

点击需要调整的记忆类型,查看当前生效配置。建议先阅读类型描述和各字段的说明,确定要调整的范围。

  • 当前使用系统默认模板:点击“配置自定义模板”,以默认配置为基础编辑。
  • 当前使用自定义模板:点击“编辑自定义模板”,以当前已发布配置为基础修改。

Image

编辑记忆抽取指令

按需调整字段生成说明,例如主题命名、实体分类、摘要长度或正文表达要求。
对于 Events、Soul、Identity,确有排版需要时再修改 Markdown 正文模板;其他情况下可保留默认模板。
可结合页面提供的变量说明和文件预览,检查当前配置影响的 URI 或 Markdown 区域。

各个记忆类型的配置说明

记忆类型

开放字段中文标题

YAML 配置项 / Field

中文描述提示

可使用的变量及含义

Profile

记忆类型描述

description

什么信息应该被识别为用户画像?
决定什么样的信息会触发 Profile 记忆的抽取;对应文件已存在时,可能进入更新流程。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值,也可写 {% if language == 'en' %}…{% endif %} 条件。

用户画像正文

fields[].description
name: content

Profile 文件正文应该怎么写?
决定 profile.md 中生成哪些信息,以及标题和项目符号的格式。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此要求正文使用指定语言,或按语言编写不同的格式指令。

Preferences

记忆类型描述

description

什么信息应该被识别为用户偏好?
决定什么样的信息会触发 Preferences 记忆的抽取;对应文件已存在时,可能进入更新流程。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。

偏好主题名称

fields[].description
name: topic

每份偏好文件的主题怎么命名?
决定最终 URI 中的文件名;不同主题会生成不同文件。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于要求 topic 采用相应语言;也可用 {% if language == 'en' %} 区分英文 snake_case 命名与其他语言的自然命名规则。

偏好正文

fields[].description
name: content

偏好文件正文应该怎么写?
生成结果会直接成为该主题文件的 Markdown 正文。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束 Markdown 正文的语言和分语言格式。

Entities

记忆类型描述

description

什么对象应该被识别为第三方实体?
决定什么样的信息会触发 Entities 记忆的抽取;对应文件已存在时,可能进入更新流程。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。

实体分类

fields[].description
name: category

实体应该归入哪个目录?
生成 entities 下的分类目录,例如 people。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于要求 category 采用相应语言;也可用 {% if language == 'en' %} 区分英文 snake_case 与其他语言的自然命名规则。

实体名称

fields[].description
name: name

实体文件应该叫什么?
生成分类目录下的文件名,例如 lina.md。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于按该语言补充实体名称的写法和规范。

实体卡片正文

fields[].description
name: content

实体卡片正文应该怎么写?
决定实体文件的 H1、简介、H2 章节与项目符号内容。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束实体卡片正文的语言和分语言格式。

Events

记忆类型描述

description

什么内容应该拆成一条独立事件?
决定什么样的信息会被抽取为新的 Events 事件文件。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。

事件名称

fields[].description
name: event_name

事件文件应该叫什么?
生成日期目录下的文件名;名称只概括一个原子事件。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于要求 event_name 采用相应语言;也可用 {% if language == 'en' %} 区分英文 snake_case 与其他语言的自然命名规则。

事件摘要

fields[].description
name: summary

事件摘要应该保留什么?
生成结果会写入文件的 Summary,并作为事件 Overview 的链接标题。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束事件摘要的输出语言和分语言写法。

Markdown 正文模板

content_template

最终 Markdown 文件应该如何排版?
模板使用已生成字段组织文件正文;标题、顺序、固定文案和条件分支都会按此渲染。

字段变量

  • {{ event_name }}:LLM 根据本次 Session 中与该事件有关的 messages 生成的原子事件名称;同时会成为事件 .md 文件名的一部分。
  • {{ goal }}:LLM 从该事件的来源 messages 概括出的事件目的;内置字段说明要求不超过 5 个词。
  • {{ summary }}:LLM 根据 ranges 指向的来源 messages 生成的事实摘要;可直接写入正文,并作为 Events Overview 中的链接标题。
  • {{ ranges }}:本次 Commit 送入抽取流程的 messages 中,支撑该事件的消息位置范围,例如 0-3,7。长消息可能在编号前被切分;该值主要作为下列方法的入参,不建议直接展示给最终用户。

正文与时间方法

  • {{ extract_context.get_resource_event_content(ranges, summary) }}:判断 ranges 是否指向一次资源添加事件;如果是,返回带 Markdown 资源链接的事件正文,否则返回空内容。可用于区分资源事件与普通事件。
  • {{ extract_context.get_first_message_time_from_ranges(ranges) }}:读取 ranges 中最早一条来源消息的 created_at,返回 YYYY-MM-DD;无法取得时间时返回空内容。
  • {{ extract_context.get_first_message_time_with_weekday_from_ranges(ranges) }}:返回 ranges 中最早一条来源消息的日期和星期,格式为 YYYY-MM-DD (Weekday),例如 2026-08-18 (Tuesday);无法取得时间时返回空内容。
  • {{ extract_context.get_event_content(ranges, summary, 0) }}:在格式化后的原始 ChatLog 与 summary 之间选择事件正文。第三个参数是 ratio_threshold;当前内置模板传 0,存在原消息时优先返回原始 ChatLog。
  • {{ extract_context.get_year(ranges) }}:返回 ranges 中最早一条来源消息的四位年份;无法取得消息时间时回退为系统当前年份。
  • {{ extract_context.get_month(ranges) }}:返回 ranges 中最早一条来源消息的两位月份;无法取得消息时间时回退为系统当前月份。
  • {{ extract_context.get_day(ranges) }}:返回 ranges 中最早一条来源消息的两位日期;无法取得消息时间时回退为系统当前日期。

模板支持 {% if %} 条件、{% for %} 循环和 {% set x = ... %} 局部变量;set 创建的变量仅在当前模板内使用。

Soul

记忆类型描述

description

什么信息应该更新助手的 Soul?
决定什么样的信息会触发 Soul 记忆的抽取或更新。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。

核心价值

fields[].description
name: core_truths

Core Truths 应该提取什么?
生成结果写入 Core Truths 章节。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束核心价值内容的输出语言。

边界规则

fields[].description
name: boundaries

Boundaries 应该提取什么?
生成结果写入 Boundaries 章节。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束边界规则内容的输出语言。

沟通气质

fields[].description
name: vibe

Vibe 应该提取什么?
生成结果写入 Vibe 章节。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束沟通气质内容的输出语言。

连续性规则

fields[].description
name: continuity

Continuity 应该提取什么?
生成结果写入 Continuity 章节。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束连续性规则内容的输出语言。

Markdown 正文模板

content_template

最终 Markdown 文件应该如何排版?
模板使用已生成字段组织文件正文;标题、顺序、固定文案和条件分支都会按此渲染。

字段变量

  • {{ core_truths }}:本次抽取结果与 soul.md 现有内容按系统 Merge Op 合并后的最终核心价值;写入 Core Truths 章节。
  • {{ boundaries }}:本次抽取结果与 soul.md 现有内容按系统 Merge Op 合并后的最终边界规则;写入 Boundaries 章节。
  • {{ vibe }}:本次抽取结果与 soul.md 现有内容按系统 Merge Op 合并后的最终沟通气质;写入 Vibe 章节。
  • {{ continuity }}:本次抽取结果与 soul.md 现有内容按系统 Merge Op 合并后的最终连续性规则;写入 Continuity 章节。

模板支持 {% if %} 条件、{% for %} 循环和 {% set x = ... %} 局部变量;set 创建的变量仅在当前模板内使用。

Identity

记忆类型描述

description

什么信息应该更新助手身份?
决定什么样的信息会触发 Identity 记忆的抽取或更新。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于变量插值和 Jinja 条件。

身份类型

fields[].description
name: creature

Creature 应该怎么描述?
生成结果写入 Creature 行。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束身份类型内容的输出语言。

助手名称

fields[].description
name: name

助手名称应该如何提取?
生成结果写入 Name 行;已有名称仍受 immutable 更新规则约束。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此补充名称的语言、字符或格式要求,但不会改变系统的 immutable 更新规则。

表达气质

fields[].description
name: vibe

Vibe 应该怎么描述?
生成结果写入 Vibe 行。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束表达气质内容的输出语言。

标志 Emoji

fields[].description
name: emoji

哪个 Emoji 能代表助手?
生成结果写入 Emoji 行。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于按语言环境补充 Emoji 的选择要求。

头像

fields[].description
name: avatar

Avatar 应该记录什么?
生成结果写入 Avatar 行。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可用于按语言环境补充头像路径或 URL 的说明要求。

自我介绍

fields[].description
name: introduction

自我介绍应该怎么写?
生成结果写入分隔线后的正文。

{{ language }}:本次正在抽取的 Session messages 中,User messages 的主导语言;常见值如 zh-CN、en。若 Session 没有 User message,才回退为全部 messages 的主导语言;若系统设置 output_language_override,则使用覆盖值。可据此约束自我介绍的语言、语气和长度。

Markdown 正文模板

content_template

最终 Markdown 文件应该如何排版?
模板使用已生成字段组织文件正文;标题、顺序、固定文案和条件分支都会按此渲染。

字段变量

  • {{ name }}:本次抽取结果与 identity.md 现有内容按系统 Merge Op 合并后的最终助手名称;写入 Name 行。已有名称受 immutable 规则保护,后续抽取通常不会替换首次确定的名称。
  • {{ creature }}:本次抽取结果与 identity.md 现有内容按系统 Merge Op 合并后的最终身份类型;写入 Creature 行。
  • {{ vibe }}:本次抽取结果与 identity.md 现有内容按系统 Merge Op 合并后的最终表达气质;写入 Vibe 行。
  • {{ emoji }}:本次抽取结果与 identity.md 现有内容按系统 Merge Op 合并后的最终标志 Emoji;写入 Emoji 行。
  • {{ avatar }}:本次抽取结果与 identity.md 现有内容按系统 Merge Op 合并后的最终头像路径或 URL;写入 Avatar 行。
  • {{ introduction }}:本次抽取结果与 identity.md 现有内容按系统 Merge Op 合并后的最终自我介绍;写入分隔线后的正文。

模板支持 {% if %} 条件、{% for %} 循环和 {% set x = ... %} 局部变量;set 创建的变量仅在当前模板内使用。

支持在指令中使用底部提供的变量,变量的使用支持 Jinja2 语法,可参考:Jinja2 - Template designer guide
发布完成后,新的指令立即生效,在后续的记忆抽取管线中自动应用。

验证实际抽取效果

选择一组不含敏感信息的代表性会话,至少覆盖“应保留”“应排除”和“信息不足”三种情况。企业版建议先在测试数据空间验证,再将确认后的配置应用到业务数据空间。

  1. 通过已接入的 Agent 或应用提交新会话,确认消息已回流到目标库、数据空间和 User。
  2. 等待插件或应用完成 Commit。自行开发接入时,按会话接口提交并检查处理结果。
  3. 在文件系统中查看本次新增或更新的记忆,核对信息范围、命名、正文格式及 User/Peer 归属。
  4. 发起相关检索,确认预期内容可以被找到,且没有产生不应保存的信息。若未生成记忆,先检查消息、Commit 状态和所选记忆类型的抽取条件。

模板发布成功仅说明配置已生效。是否满足业务需求,应以实际会话的抽取、更新和检索结果为准。相关操作见 了解 OpenViking 的记忆机制定制开发 Agent 记忆接入

常见问题

为什么发布后,已有记忆没有变化?
发布只切换后续 Commit 使用的抽取模板,不会触发历史记忆的批量重写。请用新的代表性会话验证配置,并分别检查新建和更新的结果。
为什么文件预览符合预期,实际抽取仍有差异?
文件预览用于说明字段与 URI、Markdown 内容的对应关系,不执行模型抽取。实际结果受会话证据、类型判断、字段说明和系统更新规则共同影响。建议使用典型会话逐项检查,并优先修改含糊或相互矛盾的要求。
能否通过本功能新建待办、实事等自定义的记忆类型?
当前仅支持表中六类内置记忆的开放配置。新增记忆类型、增加业务字段暂未开放配置。

最近更新时间:2026.09.22 22:12:21
这个页面对您有帮助吗?
有用
有用
无用
无用