OpenViking Prompt 模板系统深度指南:格式规范、模板全景与安全自定义
【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking
导读
本文是 OpenViking 提示词模板系统的完整技术指南,覆盖openviking/prompts/templates/下全部内置模板的分类、处理阶段与外部能力影响,详解常规 Prompt 与 Memory Schema 两类 YAML 的格式要求,并给出覆盖加载、扩展示例、风险评估与验证排障的完整自定义流程。读完本文,你将掌握如何在不破坏调用方契约的前提下,安全地调整模型行为、摘要风格、记忆提取偏好与检索意图规划。
本文只涉及openviking/prompts/templates/目录下的模板文件,以及少量与模板加载相关的配置项(prompts.templates_dir、OPENVIKING_PROMPT_TEMPLATES_DIR、memory.custom_templates_dir),不会展开到其他无关模块。
一、模板系统概览
OpenViking 的提示词分为两大类别:
- 常规 Prompt 模板(Regular Prompt Templates)
- 存放于
openviking/prompts/templates/<category>/*.yaml - 用于指导模型执行具体任务,如图像理解、文档摘要、记忆提取、检索意图分析等
- 存放于
- 记忆 Schema 模板(Memory Schema Templates)
- 存放于
openviking/prompts/templates/memory/*.yaml - 用于定义某一种记忆类型的字段、文件名模板、内容模板与存储目录规则
- 存放于
从使用角度看,这些模板服务于以下处理阶段。每个模板都对应一项或多项外部能力:
| 类别 | 代表模板 | 主要用途 | 生效阶段 | 受影响的外部能力 |
|---|---|---|---|---|
vision | vision.image_understanding | 图像、页面与表格理解 | 资源解析与扫描文档理解 | 图像解析、PDF 页面理解、表格提取结果 |
parsing | parsing.context_generation | 文档结构切分与语义节点生成 | 资源摄取与解析 | 文档章节结构、节点摘要、图片摘要 |
semantic | semantic.document_summary | 文件级与目录级摘要 | 语义索引 | 文件摘要、目录概览、下游检索质量 |
retrieval | retrieval.intent_analysis | 检索意图分析与查询规划 | 检索前分析 | 检索查询规划与召回方向 |
compression | compression.ov_wm_v2 | 工作记忆压缩与会话归档摘要 | 会话提交 / 记忆管线 | 会话压缩与工作记忆质量 |
memory | profile | 记忆类型定义 | 记忆持久化与更新 | 各类记忆的组织方式与最终内容 |
processing | processing.tool_chain_analysis | 从交互或资源背景中提取经验 | 后处理与经验提炼 | 策略提取、工具链经验、交互学习结果 |
indexing | indexing.relevance_scoring | 候选相关性评估 | 检索与索引支撑 | 相关性评分质量 |
skill | skill.overview_generation | Skill 信息蒸馏 | Skill 资源处理 | Skill 检索摘要 |
test | test.skill_test_generation | 自动测试用例生成 | 测试与验证支撑 | Skill 测试用例生成 |
源码侧的管理入口
所有常规模板的加载与渲染由PromptManager(openviking/prompts/manager.py)统一负责。它以全局单例形式对外暴露(get_manager()),并提供两个便捷函数render_prompt(prompt_id, variables)与get_llm_config(prompt_id)。模板文件通过yaml.safe_load解析后,用 pydantic 模型(PromptMetadata、PromptVariable、PromptTemplate)做结构校验,再经 Jinja2 完成变量插值渲染。调用方遍布图像解析(parse/vlm.py)、检索意图分析(retrieve/intent_analyzer.py)、会话提交(session/session.py)、Skill 处理(utils/skill_processor.py)等多个模块。
二、Prompt 文件格式要求
2.1 常规 Prompt YAML
一个常规 Prompt 模板通常包含以下字段:
metadata: id: "semantic.document_summary" name: "Document Summary" description: "Generate summary for documentation files" version: "1.0.0" language: "en" category: "semantic" variables: - name: "file_name" type: "string" description: "Input file name" required: true template: | ... output_schema: ... llm_config: ...各字段含义:
metadata- 描述模板身份与类别
id通常与文件路径对应,例如semantic.document_summary
variables- 定义模板接受的输入变量
- 常见字段包括
name、type、description、default、required与max_length
template- 真正发送给模型的提示词主体
- 使用 Jinja2 变量渲染(
{{ var_name }})
output_schema- 可选
- 描述期望的输出结构,调用方可用其约束模型输出
llm_config- 可选
- 描述建议的模型侧参数(如
temperature),不属于提示词主体本身
以仓库内置的 semantic/document_summary.yaml 为例,其variables定义了file_name、content、output_language三个必填变量,template主体用{{ output_language }}、{{ file_name }}、{{ content }}占位,并对输出长度(60–180 词)、输出语言、忠实度规则(不得虚构文件中不存在的事实与实体)做了详细约束;其llm_config指定了temperature: 0.0以保证摘要稳定性。
编写常规 Prompt 时应遵循以下准则:
- 保持
metadata.id与模板类别、用途一致 - 保持变量名稳定,以兼容调用方
- 确保
template内的占位符与variables中的定义一一对应 - 若模板期望结构化输出,需明确指定字段、格式与约束
- 若输入对长度敏感,通过
max_length或上游截断控制提示词大小
源码级验证:
PromptManager.render()(manager.py)在渲染前会先应用variables中定义的默认值,再调用_validate_variables()检查必填变量是否缺失、变量类型是否匹配(支持string、int、float、bool四种类型映射),随后将字符串类型变量按max_length截断,最后用 Jinja2 渲染。这解释了为何template占位符必须与variables定义严格一致——缺失必填变量会直接抛出ValueError。
2.2 Memory Schema YAML
memory/*.yaml文件不是常规的提示词文本模板,它们定义的是记忆类型。下面示例仅展示通用字段的结构;某个内置模板是否包含content_template,或目录是否使用子目录,取决于具体记忆类型:
memory_type: "profile" description: "User profile memory" fields: - name: "content" type: "string" description: "Profile content" merge_op: "patch" filename_template: "profile.md" content_template: | ... embedding_template: | ... directory: "viking://user/{{ user_space }}/memories/..." enabled: true operation_mode: "upsert" stage: "user" peer_enabled: true各字段含义:
memory_type:记忆类型名称description:记忆类型的定义及其提取要求fields:该记忆类型包含的字段filename_template:用于生成文件名的模板content_template:写入记忆文件时使用的内容主体模板embedding_template:用于渲染语义检索用嵌入文本的模板;未设置时使用默认表示directory:该记忆类型的存储目录enabled:该记忆类型是否启用operation_mode:记忆类型的更新模式,如upsert(也见add_only)stage:提取阶段。默认user,参与会话用户记忆提取;agent保留给轨迹、经验等执行派生的 schemapeer_enabled:当peer_id或消息范围标识出某个 peer 时,该记忆类型是否单独存储在 peer 目录下。默认true;对必须保留在当前用户空间下的记忆设为false
仓库内置的 memory/profile.yaml 是真实范例:其directory为viking://user/{{ user_space }}/memories,filename_template为profile.md,fields中定义了带merge_op: patch的content字段,并在description中详细规定了"仅保留持久当前状态(durable current state)"的分类规则(身份/教育/职业/家庭/健康入 profile,过渡事件入 events,偏好入 preferences,实体入 entities,临时状态丢弃)。而 memory/trajectories.yaml 则展示了stage: agent、operation_mode: add_only、agent_only: true的用法,其filename_template直接使用 Jinja2 变量:{{ trajectory_name }}_{{ extract_context.get_session_timestamp() }}.md,并提供了embedding_template用于检索锚点文本的渲染。
编写 Memory Schema 时应重点关注:
- 字段粒度是否稳定
- 文件名模板是否可预测、可搜索
- 目录规则是否与预期的检索范围匹配
- 合并策略对该记忆类型是否合适
三、内置模板全景参考
以下按类别列出全部当前模板。阅读本节时记住一个简单规则:常规 Prompt 模板关注Purpose(用途)与Key inputs(关键输入);Memory Schema 关注Purpose(用途)与Key fields(关键字段)。
3.1 Compression(压缩)
此类提示词主要用于会话压缩与工作记忆更新。长期记忆提取使用memory类别中基于 v2 架构的模板。
compression.ov_wm_v2- 生效阶段:首次工作记忆生成阶段
- 影响:归档会话概览与当前工作记忆质量
- 用途:为会话创建初始的结构化工作记忆文档
- 关键输入:
messages
compression.ov_wm_v2_update- 生效阶段:增量工作记忆更新阶段
- 影响:归档会话概览与当前工作记忆连续性
- 用途:使用 keep / update / append 操作更新已有工作记忆文档
- 关键输入:
previous_working_memory、messages
compression.structured_summary- 生效阶段:会话归档摘要生成阶段
- 影响:归档会话摘要与下游回顾/检索质量
- 用途:为归档会话生成结构化摘要
- 关键输入:
latest_archive_overview、messages
源码示例:compression/ov_wm_v2.yaml 展示了 Jinja2 条件渲染的用法——
{% if latest_archive_overview %}与{% if checkpoint_instructions %}控制可选上下文是否进入提示词,并要求所有内容用{{ output_language }}书写、保留 7 段英文规范标题以保证既有归档可被机器识别。
3.2 Indexing(索引)
此类提示词主要用于为检索或索引流程提供相关性判断。
indexing.relevance_scoring- 生效阶段:候选相关性评估阶段
- 影响:检索排序与候选过滤质量
- 用途:评估候选内容与用户查询的相关性
- 关键输入:
query、candidate
3.3 Memory(记忆)
这些 YAML 文件定义不同记忆类型的结构,不是单次推理提示词。它们共同决定用户记忆与 peer 记忆如何被存储、更新以及被后续检索使用。
cases- 生效阶段:案例记忆持久化与更新阶段
- 影响:可训练、可评估的任务案例积累
- 用途:定义具体的任务输入、评估标准与支撑证据
- 关键字段:
case_name、task_signature、input、rubric、evidence
entities- 生效阶段:实体记忆持久化与更新阶段
- 影响:人物、项目、组织、系统等实体的长期存储
- 用途:定义命名实体及其属性的存储结构
- 关键字段:
category、name、content
events- 生效阶段:事件记忆持久化与更新阶段
- 影响:事件回顾、时间线感知保留与对话叙事记录
- 用途:定义结构化事件记忆,如摘要、目标与时间范围
- 关键字段:
event_name、goal、summary、ranges
experiences- 生效阶段:经验记忆持久化与更新阶段
- 影响:从任务结果中提炼的可复用指导
- 用途:记录持久的执行经验及其取代的旧记忆
- 关键字段:
experience_name、content、supersedes
identity- 生效阶段:Agent 身份记忆持久化阶段
- 影响:Agent 身份设置的长期一致性
- 用途:定义 Agent 的名称、人格、氛围、头像与自我介绍字段
- 关键字段:
name、creature、vibe、emoji、avatar、introduction
preferences- 生效阶段:偏好记忆持久化与更新阶段
- 影响:用户偏好召回与下游个性化行为
- 用途:定义不同主题下的用户偏好记忆
- 关键字段:
user、topic、content
profile- 生效阶段:用户画像记忆持久化与更新阶段
- 影响:用户画像、工作背景与稳定属性的长期存储
- 用途:定义"用户是谁"的存储结构
- 关键字段:
content
skills- 生效阶段:Skill 使用记忆持久化与更新阶段
- 影响:Skill 使用统计、经验积累与推荐工作流
- 用途:定义 Skill 使用次数、成功率、最佳适用场景及相关信息
- 关键字段:
skill_name、total_executions、success_count、fail_count、best_for、recommended_flow
soul- 生效阶段:Agent 灵魂记忆持久化阶段
- 影响:Agent 的核心边界、连续性与长期身份稳定性
- 用途:定义 Agent 的核心事实、边界、氛围与连续性
- 关键字段:
core_truths、boundaries、vibe、continuity
tools- 生效阶段:工具使用记忆持久化与更新阶段
- 影响:工具使用经验、最优参数与失败模式积累
- 用途:定义工具调用统计与工具使用经验的存储结构
- 关键字段:
tool_name、static_desc、call_count、success_time、when_to_use、optimal_params
trajectories- 生效阶段:Agent 轨迹记忆持久化阶段(
stage: agent,仅追加) - 影响:从 Agent 任务轨迹(多步决策、工具调用与执行痕迹)提炼的可复用操作契约
- 用途:定义"任务轨迹中产生了哪些可复用操作/契约"的紧凑轨迹记忆
- 关键字段:
trajectory_name、outcome、retrieval_anchor、content
- 生效阶段:Agent 轨迹记忆持久化阶段(
源码级验证:记忆 Schema 的加载由 session/memory/memory_type_registry.py 中的
MemoryTypeRegistry._load_schemas()完成。加载顺序为:内置memory/目录 → (若开启experimental_memory_switch)memory/experimental_memory/实验模板 → (若配置memory.custom_templates_dir)自定义目录以replace=True覆盖加载。这与文档中"先加载内置、再补充自定义"的行为完全一致,也解释了新增记忆类型时为何会"扩展"而非"整体替换"。
3.4 Parsing(解析)
此类提示词主要用于将原始资源内容转换为更易检索、更易理解的结构化节点、章节、摘要或图片概览。
parsing.chapter_analysis- 生效阶段:长文档章节切分阶段
- 影响:文档章节结构与页面组织
- 用途:分析文档内容并切分为合理的章节结构
- 关键输入:
start_page、end_page、total_pages、content
parsing.context_generation- 生效阶段:文档节点语义生成阶段
- 影响:节点摘要/概览质量与下游检索匹配
- 用途:为文本节点生成更简短、利于检索的语义标题、摘要与概览
- 关键输入:
title、content、children_info、instruction、context_type、is_leaf
parsing.image_summary- 生效阶段:图像节点摘要阶段
- 影响:图像资源的语义概览与下游检索
- 用途:为图像内容生成简洁摘要
- 关键输入:
context
parsing.semantic_grouping- 生效阶段:语义分组与切分阶段
- 影响:文档节点粒度与内容分块质量
- 用途:基于语义判断内容应合并还是拆分
- 关键输入:
items、threshold、mode
补充发现:除文档列出的 4 个模板外,仓库
parsing/目录下还包含audio_summary.yaml与video_summary.yaml,分别服务音频与视频资源的语义摘要生成,属于多媒体解析链路的一部分。
3.5 Processing(处理)
此类提示词主要用于从交互记录、工具链与资源背景中提炼策略或经验,服务于后处理与知识积累,而非单轮直接回答。
processing.interaction_learning- 生效阶段:交互后经验提取阶段
- 影响:可复用交互经验,以及有效资源与成功 Skill 的提炼
- 用途:从交互记录中提取可复用经验
- 关键输入:
interactions_summary、effective_resources、successful_skills
processing.strategy_extraction- 生效阶段:资源添加后策略提取阶段
- 影响:资源背景意图的结构化提取与复用
- 用途:从资源添加关联的原因、指令与摘要中提取使用策略
- 关键输入:
reason、instruction、abstract
processing.tool_chain_analysis- 生效阶段:工具链分析阶段
- 影响:工具组合模式识别与工具经验积累
- 用途:分析工具调用链并识别有价值的用法模式
- 关键输入:
tool_calls
3.6 Retrieval(检索)
此类提示词主要用于在检索前理解用户意图并决定查询计划与上下文类型。
retrieval.intent_analysis- 生效阶段:检索前意图分析阶段
- 影响:检索查询规划、召回方向以及不同上下文类型下的搜索质量
- 用途:基于压缩摘要、近期消息与当前消息生成检索计划
- 关键输入:
compression_summary、recent_messages、current_message、context_type、target_abstract
补充发现:
retrieval/目录下还包含recall_rewrite.yaml(召回改写)与两个 SFT 专用版本ov_intent_analysis_sft_v4.yaml、ov_intent_analysis_sft_v7.yaml,可用于与当前意图分析模板对照实验。
3.7 Semantic(语义)
此类提示词主要用于生成文件级与目录级摘要,是语义索引的重要组成部分。
semantic.code_summary- 生效阶段:代码文件摘要阶段
- 影响:代码文件的语义索引、代码检索与理解结果
- 用途:聚焦结构、函数、类与关键逻辑生成代码文件摘要
- 关键输入:
file_name、content、output_language
semantic.document_summary- 生效阶段:文档文件摘要阶段
- 影响:文档摘要、文档检索与概览质量
- 用途:为 Markdown、文本、RST 等文档文件生成摘要
- 关键输入:
file_name、content、output_language
semantic.file_summary- 生效阶段:通用文件摘要阶段
- 影响:目录索引与通用文件检索质量
- 用途:为单个文件生成摘要,作为目录摘要/概览生成的上游输入
- 关键输入:
file_name、content、output_language
semantic.overview_generation- 生效阶段:目录概览生成阶段
- 影响:目录概览、层级检索与导航体验
- 用途:从文件摘要与子目录摘要生成目录级概览
- 关键输入:
dir_name、file_summaries、children_abstracts、output_language
3.8 Skill(技能)
此类提示词主要用于将 Skill 内容压缩为适合检索与复用的摘要。
skill.overview_generation- 生效阶段:Skill 内容处理阶段
- 影响:Skill 检索摘要与 Skill 发现质量
- 用途:从 Skill 的名称、描述与内容中提取关键检索信息
- 关键输入:
skill_name、skill_description、skill_content
补充发现:
skill/目录下还有privacy_extraction.yaml(隐私信息提取,配合 privacy/skill_extractor.py 使用),另有独立的skill_extract/session_skills.yaml用于会话级 Skill 提取。
3.9 Test(测试)
此类提示词主要用于辅助生成测试用例。
test.skill_test_generation- 生效阶段:Skill 测试支撑阶段
- 影响:Skill 场景测试设计与验证样本生成
- 用途:基于多个 Skill 的名称与描述生成测试用例
- 关键输入:
skills_info
3.10 Vision(视觉)
此类提示词主要用于图像、页面、表格与多模态文档分析,直接影响图像解析与扫描文档理解。
vision.batch_filtering- 生效阶段:多图批量过滤阶段
- 影响:多图文档理解中对图像的保留/丢弃决策
- 用途:批量判断多张图像是否值得纳入文档理解
- 关键输入:
document_title、image_count、images_info
vision.image_filtering- 生效阶段:单图过滤阶段
- 影响:图像是否进入下游理解流程
- 用途:判断单张图像对文档理解是否有意义
- 关键输入:
document_title、context
vision.image_understanding- 生效阶段:图像理解阶段
- 影响:图像解析结果,以及图像
abstract、overview、detail_text三层信息的质量 - 用途:使用 VLM 为图像生成三层信息
- 关键输入:
instruction、context
vision.page_understanding- 生效阶段:扫描页理解阶段
- 影响:扫描版 PDF 页面理解与下游语义结果
- 用途:理解单个基于图像的文档页面
- 关键输入:
instruction、page_num
vision.page_understanding_batch- 生效阶段:多页批量理解阶段
- 影响:批量理解扫描页面时的效率与一致性
- 用途:批量理解多个基于图像的文档页面
- 关键输入:
page_count、instruction
vision.table_understanding- 生效阶段:表格理解阶段
- 影响:表格图像解析、表格摘要与结构理解
- 用途:分析表格图像并生成三层信息
- 关键输入:
instruction、context
vision.unified_analysis- 生效阶段:统一多模态分析阶段
- 影响:包含图像、表格与章节的复杂文档的解析结果
- 用途:批量分析文档图像、表格与章节相关信息
- 关键输入:
title、instruction、reason、content_preview、image_count、images_section、table_count、tables_section
四、如何自定义 Prompt
OpenViking 支持两种主要自定义模式:
- 覆盖常规 Prompt 模板(Override Regular Prompt Templates)
- 扩展记忆 Schema(Extend Memory Schemas)
在具体操作前,可先用下表判断变更风险:
| 变更类型 | 风险等级 | 说明 |
|---|---|---|
| 修改提示词措辞、添加示例、调整语气 | 低 | 通常只改变模型行为风格,不改变调用方契约 |
| 修改输出风格、提取偏好或摘要粒度 | 中 | 会改变结果分布,应针对目标能力重新验证 |
| 修改变量名、输出结构或记忆字段名 | 高 | 极易破坏与调用方或解析逻辑的兼容性 |
修改directory、filename_template或merge_op | 极高 | 直接改变记忆存储位置、组织方式与更新行为 |
4.1 覆盖常规 Prompt 模板
适用场景:
- 希望调整记忆提取偏好
- 希望改变摘要风格
- 希望图像理解输出更详细或更简洁
- 希望改变检索意图规划行为
可用配置:
prompts.templates_dir- 环境变量
OPENVIKING_PROMPT_TEMPLATES_DIR
加载优先级(从 manager.py 的_resolve_templates_dir实现可以确认):
- 显式传入的模板目录
- 环境变量
OPENVIKING_PROMPT_TEMPLATES_DIR ov.conf中的prompts.templates_dir- 内置模板目录
openviking/prompts/templates/
即常规 Prompt 自定义采用"先查自定义目录、找不到同相对路径时回退内置模板"的机制。_resolve_template_path()(manager.py)会把形如vision.image_understanding的 ID 解析为vision/image_understanding.yaml,先在自定义目录查找,不存在则回退内置目录——这意味着你只需覆盖同路径文件,无需改动任何调用代码。
推荐做法:
- 先从内置模板目录复制目标文件
- 保持相同的类别目录与文件名
- 只修改提示词主体或输出要求
- 避免修改调用方已依赖的变量名
示例目录:
custom-prompts/ ├── compression/ │ └── ov_wm_v2.yaml ├── retrieval/ │ └── intent_analysis.yaml └── semantic/ └── document_summary.yaml示例配置(ov.conf / JSON):
{ "prompts": { "templates_dir": "/path/to/custom-prompts" } }或使用环境变量:
export OPENVIKING_PROMPT_TEMPLATES_DIR=/path/to/custom-prompts对应配置模型定义见 openviking_cli/utils/config/prompts_config.py(PromptsConfig.templates_dir)与 openviking_cli/utils/config/consts.py(OPENVIKING_PROMPT_TEMPLATES_DIR_ENV)。
影响示例:
- 修改
compression.ov_wm_v2- 主要影响初始工作记忆生成
- 最终影响会话归档质量与下游召回结果
- 修改
retrieval.intent_analysis- 主要影响检索前查询规划
- 最终影响搜索方向与召回质量
- 修改
semantic.document_summary- 主要影响文档摘要
- 最终影响文档索引与摘要输出
4.2 扩展记忆 Schema
适用场景:
- 希望新增业务专属记忆类型
- 希望调整既有记忆类型的字段结构
- 希望改变记忆存储目录或文件名模板
可用配置:
memory.custom_templates_dir
加载行为(与 memory_type_registry.py 的_load_schemas实现一致):
- 先加载内置记忆 Schema
- 若配置了
memory.custom_templates_dir,随后加载该目录下的 Schema(以replace=True覆盖同名类型) - 因此记忆自定义更像"扩展与补充",而非对内置集合的整体替换
示例目录:
custom-memory/ ├── project_decisions.yaml └── user_preferences_ext.yaml示例配置:
{ "memory": { "custom_templates_dir": "/path/to/custom-memory" } }扩展记忆 Schema 时的建议:
- 先参照既有
memory/*.yaml文件的风格 - 确认新记忆类型确实需要独立
- 保持字段命名清晰稳定,便于未来更新
- 确保
directory与filename_template易于搜索和维护
影响示例:
- 新增
project_decisions- 影响记忆持久化类型与下游搜索组织
- 修改
preferences- 影响用户偏好记忆的组织方式与召回粒度
- 修改
tools- 影响工具经验积累与工具使用推荐
4.3 自定义过程中的高风险变更
以下变更最容易破坏既有工作流:
- 修改常规 Prompt 的变量名
- 修改 Prompt 的期望输出结构而不同步更新下游解析逻辑
- 修改记忆 Schema 的关键字段名
- 修改
directory——这会改变检索范围 - 修改
filename_template——这会改变历史文件的组织方式 - 修改
merge_op——这会改变既有记忆的更新方式
如果目标只是提升质量,以下通常是更安全的优先动作:
- 在提示词中添加更清晰的输出示例
- 强化"保留什么、忽略什么"的规则
- 调整摘要粒度或响应风格
- 每次只修改一个 Prompt 类别,而不是同时修改多个
保守操作顺序:
- 先复制现有模板
- 先改指令内容与措辞
- 最后改结构字段
- 一次只改一个 Prompt 类别,便于隔离影响
五、验证与排障
修改 Prompt 后,应在两个层面验证:模板是否真正被加载,以及能力输出是否符合预期变化。
5.1 第一步:验证模板是否被拾取
检查清单:
- 自定义目录是否配置正确
- 文件路径是否与原模板保持相同相对路径
- YAML 是否合法
- 变量名是否仍与原模板匹配
对于常规 Prompt,重点关注:
- 模板是否加载成功
- 目标阶段是否真的使用了该模板
对于记忆 Schema,重点关注:
- 新 Schema 是否加载成功
- 目标记忆类型是否真正参与提取与持久化
排障提示:
PromptManager默认开启模板缓存(enable_caching=True),修改模板文件后如需立即生效,可调用clear_cache()(manager.py)或重启服务,避免旧模板驻留内存。
5.2 第二步:验证外部结果是否改变
最有效的验证是能力导向的:
- 修改了
vision模板:重新解析图像、表格或扫描 PDF,检查结果是否变化 - 修改了
semantic或parsing模板:重新导入文档或文件,检查摘要与结构是否变化 - 修改了
retrieval模板:重新运行相关搜索,检查查询规划与召回行为是否变化 - 修改了
compression模板:重新触发会话提交或记忆处理,检查提取与合并结果是否变化 - 修改了
memorySchema:检查最终持久化的记忆文件、目录与字段结构
5.3 常见问题排查
| 症状 | 首先检查 |
|---|---|
| 修改后结果完全不变 | 自定义目录未生效,或文件路径不匹配 |
| 模型报告缺少变量 | 模板变量名与调用方提供的变量不匹配 |
| 返回内容格式损坏 | Prompt 输出格式变了,但下游解析仍期望旧结构 |
| 新记忆类型始终不出现 | memory.custom_templates_dir未生效,或 Schema 未正确加载 |
| 检索质量变差 | retrieval、semantic或compression模板改动过猛 |
六、附录
6.1 模板目录
内置 Prompt 模板目录:
openviking/prompts/templates/包含(实际目录以仓库为准,比指南更丰富):
compression/:压缩、提取与合并indexing/:相关性评估memory/:记忆类型定义(含experimental_memory/实验模板子目录)parsing/:结构分析与语义节点生成(含音频/视频摘要)processing/:经验与策略提取retrieval/:检索意图分析(含召回改写与 SFT 对照版本)semantic/:文件与目录摘要skill/:Skill 摘要(含隐私提取)skill_extract/:会话级 Skill 提取test/:测试用例生成vision/:图像、页面与表格理解
6.2 关键配置项
与 Prompt 自定义相关的主要配置项:
| 配置项 | 用途 |
|---|---|
prompts.templates_dir | 常规 Prompt 模板的覆盖目录 |
OPENVIKING_PROMPT_TEMPLATES_DIR | 常规 Prompt 模板覆盖目录的环境变量 |
memory.custom_templates_dir | 自定义记忆 Schema 目录 |
6.3 实用经验法则
如果你的目标是:
- 改变模型如何说话、如何提取或如何摘要
- 优先修改常规 Prompt 模板
- 改变记忆的样子、存储位置或组织方式
- 优先修改或扩展记忆 Schema
如果不确定该改哪一层,问自己一个问题:
"我要改的是模型的指令,还是最终记忆文件的结构?"
这个问题通常足以帮你判断应修改常规 Prompt 还是记忆 Schema。前者控制"模型怎么说",后者控制"记忆长什么样、存在哪里、如何被组织与更新",两者边界清晰,遵循此原则即可安全地完成 OpenViking 提示词体系的定制。
【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考