自定义提示词
自定义提示词
相关源文件
本章引用的主要源码文件:
docs/images/openclaw-architecture.pngmem0-ts/src/oss/src/llms/base.tsmem0-ts/src/oss/src/prompts/index.tsmem0-ts/src/oss/src/tests/sqlite-path-resolution.test.tsmem0-ts/src/oss/tests/extract-json.test.tsmem0-ts/src/oss/tests/remove-code-blocks.test.tsmem0/__init__.pymem0/configs/prompts.pymem0/memory/main.pymem0/memory/storage.pymem0/memory/utils.pyopenclaw/.gitignoretests/configs/test_prompts.pytests/memory/test_main.pytests/test_chatty_llm_parsing.pytests/test_main.pytests/test_memory.pytests/test_proxy.py
本文档介绍 Mem0 中的自定义提示词系统,该系统允许开发者覆盖用于记忆操作的默认大语言模型(LLM)提示词。自定义提示词可以针对特定领域需求(如医疗、法律或技术用例)微调事实提取和记忆更新行为。
概述
Mem0 使用基于大语言模型(LLM)的提示词执行两项关键记忆操作:
- 事实提取:分析对话消息以提取相关事实和信息。
- 记忆更新:根据提取的事实和现有记忆,确定要执行的记忆操作(
ADD、UPDATE、DELETE、NONE)。
自定义提示词系统允许用户替换默认提示词,同时保持所需的 JSON 输出格式和操作语义。
数据流与代码实体映射
下图展示了自定义提示词如何从配置进入执行管线,将自然语言空间(提示词)映射到代码实体空间(函数和类)。
来源: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_prompt | Optional[str] | 用于从对话中提取事实的自定义提示词。 | mem0/configs/base.py:64 |
custom_update_memory_prompt | Optional[str] | 用于确定记忆更新操作的自定义提示词。 | mem0/configs/base.py:65 |
custom_instructions | Optional[str] | 追加到默认提示词中的额外指令。 | mem0/configs/base.py:66 |
来源:mem0/configs/base.py:59-66
默认提示词
事实提取提示词
Mem0 根据系统是提取关于用户还是关于代理的事实,提供了专门的提示词。
USER_MEMORY_EXTRACTION_PROMPT:专注于个人偏好、细节和计划。它严格忽略助手或系统消息,以防止从人工智能建议中"幻觉"出用户事实。mem0/configs/prompts.py:62-120AGENT_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/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
自定义提示词的最佳实践
- 输出格式:自定义事实提取提示词必须返回一个 JSON 对象,其中包含一个
"facts"键,该键对应一个字符串列表:{"facts": ["事实 1", "事实 2"]}。mem0/configs/prompts.py:56,mem0-ts/src/oss/src/prompts/index.ts:12-17 - 更新模式:自定义更新提示词必须返回一个 JSON 对象,其中包含一个
"memory"键,该键对应包含id、text、event以及可选的old_memory的对象。mem0-ts/src/oss/src/prompts/index.ts:20-43 - 思考块:如果使用推理模型(如 DeepSeek-R1),Mem0 的
remove_code_blocks工具函数会自动剥离<think>标签,以防止 JSON 解析错误。mem0/memory/utils.py:109-121 - 语言一致性:建议指示提示词检测用户的语言,并使用相同的语言记录事实。
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