agentic_huge_data_base / wiki
页面 Mem0 · 11.1 自定义提示词·DeepWiki 中文全文译文

11.1 · 自定义提示词(Custom Prompts)

长期记忆与上下文管理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mem0 章节11.1 状态全文译文 模块测试、发布与运维、检索、召回与索引、配置治理、系统架构
源码线索
  • docs/images/openclaw-architecture.png
  • mem0-ts/src/oss/src/llms/base.ts
  • mem0-ts/src/oss/src/prompts/index.ts
  • mem0-ts/src/oss/src/tests/sqlite-path-resolution.test.ts
  • mem0-ts/src/oss/tests/extract-json.test.ts
  • mem0-ts/src/oss/tests/remove-code-blocks.test.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
模块标签
  • 测试、发布与运维
  • 检索、召回与索引
  • 配置治理
  • 系统架构
  • 智能体运行时

章节正文

自定义提示词

自定义提示词

相关源文件

本章引用的主要源码文件:

  • docs/images/openclaw-architecture.png
  • mem0-ts/src/oss/src/llms/base.ts
  • mem0-ts/src/oss/src/prompts/index.ts
  • mem0-ts/src/oss/src/tests/sqlite-path-resolution.test.ts
  • mem0-ts/src/oss/tests/extract-json.test.ts
  • mem0-ts/src/oss/tests/remove-code-blocks.test.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
  • mem0/memory/utils.py
  • openclaw/.gitignore
  • tests/configs/test_prompts.py
  • tests/memory/test_main.py
  • tests/test_chatty_llm_parsing.py
  • tests/test_main.py
  • tests/test_memory.py
  • tests/test_proxy.py

本文档介绍 Mem0 中的自定义提示词系统,该系统允许开发者覆盖用于记忆操作的默认大语言模型(LLM)提示词。自定义提示词可以针对特定领域需求(如医疗、法律或技术用例)微调事实提取和记忆更新行为。

概述

Mem0 使用基于大语言模型(LLM)的提示词执行两项关键记忆操作:

  1. 事实提取:分析对话消息以提取相关事实和信息。
  2. 记忆更新:根据提取的事实和现有记忆,确定要执行的记忆操作(ADDUPDATEDELETENONE)。

自定义提示词系统允许用户替换默认提示词,同时保持所需的 JSON 输出格式和操作语义。

数据流与代码实体映射

下图展示了自定义提示词如何从配置进入执行管线,将自然语言空间(提示词)映射到代码实体空间(函数和类)。

Mem0 · 数据流与代码实体映射 · 图 1
Mem0 · 数据流与代码实体映射 · 图 1

来源:mem0/configs/base.py:59-66, mem0/memory/main.py:560-600, mem0/configs/prompts.py:405-459, mem0/memory/utils.py:15-29

配置字段

MemoryConfig 类提供了自定义提示词的字段。这些字段可以在初始化时设置,也可以通过配置字典设置。

字段类型描述文件引用
custom_fact_extraction_promptOptional[str]用于从对话中提取事实的自定义提示词。mem0/configs/base.py:64
custom_update_memory_promptOptional[str]用于确定记忆更新操作的自定义提示词。mem0/configs/base.py:65
custom_instructionsOptional[str]追加到默认提示词中的额外指令。mem0/configs/base.py:66

来源:mem0/configs/base.py:59-66

默认提示词

事实提取提示词

Mem0 根据系统是提取关于用户还是关于代理的事实,提供了专门的提示词。

  • USER_MEMORY_EXTRACTION_PROMPT:专注于个人偏好、细节和计划。它严格忽略助手或系统消息,以防止从人工智能建议中"幻觉"出用户事实。mem0/configs/prompts.py:62-120
  • AGENT_MEMORY_EXTRACTION_PROMPT:专注于人工智能的能力、个性特征和知识领域。mem0/configs/prompts.py:122-173
记忆更新提示词

DEFAULT_UPDATE_MEMORY_PROMPT(以及 get_update_memory_messages 中的逻辑)处理将新事实与现有存储同步的逻辑。它指示大语言模型(LLM)输出一个包含记忆项数组的 JSON 对象,每个记忆项都分配了一个事件:

  • ADD:新信息。
  • UPDATE:已修改的信息(需要 old_memory 字段)。
  • DELETE:矛盾或已移除的信息。
  • NONE:无需更改。

来源:mem0/configs/prompts.py:175-323, mem0-ts/src/oss/src/prompts/index.ts:105-150

实现细节:JSON 强制

当使用支持 json_object 响应格式的模型(如 OpenAI)时,Mem0 包含一个安全工具函数 ensure_json_instruction。此函数检查自定义或默认提示词中是否包含单词"json"。如果缺失,它会追加一条强制指令,以确保 API 调用不会失败。

# mem0/memory/utils.py:36-58
def ensure_json_instruction(system_prompt, user_prompt):
    combined = (system_prompt + user_prompt).lower()
    if "json" not in combined:
        system_prompt += (
            "\n\nYou must return your response in valid JSON format "
            "with a 'facts' key containing an array of strings."
        )
    return system_prompt, user_prompt

来源:mem0/memory/utils.py:36-58

记忆操作判定逻辑

get_update_memory_messages 函数是构建提示词的主要入口点,该提示词用于决定如何根据新事实修改现有记忆。

Mem0 · 记忆操作判定逻辑 · 图 2
Mem0 · 记忆操作判定逻辑 · 图 2

来源:mem0/configs/prompts.py:405-459

使用示例

在 Python 中设置自定义提示词
from mem0 import Memory

config = {
    "custom_fact_extraction_prompt": "仅从文本中提取医疗症状。",
    "custom_update_memory_prompt": "将新症状与旧症状进行比较。如果某个症状已'治愈',则 DELETE 它。"
}

memory = Memory.from_config(config)
运行时覆盖提示词

add() 方法允许一次性覆盖提示词,绕过配置级别的提示词。这在 _add_to_vector_store 中处理,该方法优先使用 prompt 参数而不是 self.custom_instructions

# 运行时覆盖示例
memory.add(
    "我今天感觉好多了。",
    user_id="alice",
    prompt="专门提取健康状态信息。"
)

来源:mem0/memory/main.py:560-600, tests/memory/test_main.py:93-104

自定义提示词的最佳实践

  1. 输出格式:自定义事实提取提示词必须返回一个 JSON 对象,其中包含一个 "facts" 键,该键对应一个字符串列表:{"facts": ["事实 1", "事实 2"]}mem0/configs/prompts.py:56, mem0-ts/src/oss/src/prompts/index.ts:12-17
  2. 更新模式:自定义更新提示词必须返回一个 JSON 对象,其中包含一个 "memory" 键,该键对应包含 idtextevent 以及可选的 old_memory 的对象。mem0-ts/src/oss/src/prompts/index.ts:20-43
  3. 思考块:如果使用推理模型(如 DeepSeek-R1),Mem0 的 remove_code_blocks 工具函数会自动剥离 <think> 标签,以防止 JSON 解析错误。mem0/memory/utils.py:109-121
  4. 语言一致性:建议指示提示词检测用户的语言,并使用相同的语言记录事实。mem0/configs/prompts.py:59, mem0-ts/src/oss/src/prompts/index.ts:93

来源:mem0/memory/utils.py:109-121, mem0/configs/prompts.py:56-59, mem0-ts/src/oss/src/prompts/index.ts:20-43