简介
是不是换个大模型,之前培养了好久的默契、习惯、风格全没了?一切都要重新来,那种失落感谁懂啊![]()
这个技能就是帮你解决这个痛点:把你的生活习惯、说话偏好、助手的回复风格、我们的共同默契全存在本地,换模型后一键加载,新模型瞬间找到原来的感觉,不用重新磨合。
我们的口号:造好铲子,帮大家挖黄金 ![]()
功能
全覆盖拟人化细节:生活习惯 + 用词偏好 + 回复风格 + 共同认知 + 当前进度
分层保存:全局永久偏好 + 当前对话临时总结,兼顾默契和效率,省Token
一键加载:切换模型后生成系统提示,直接注入,新模型马上找到感觉
支持手动编辑:随时修改偏好,去掉过时内容
纯原生实现,不依赖最新API,OpenClaw大版本升级也不怕崩
开源免费,MIT许可,放心用
文件
model-switch-memory/index.js
/**
- model-switch-memory
- 模型切换记忆保留工具 - 保存用户习惯、助手风格、共同默契,换模型不用重新磨合
- 功能:
-
- 分层保存:全局偏好(永久) + 当前对话总结(临时)
-
- 覆盖拟人化细节:生活习惯、语气风格、用词偏好、共同认知
-
- 一键加载:切换模型后自动注入,快速找回默契
-
- 支持手动编辑:随时调整偏好
- 口号:造好铲子,帮大家挖黄金
- By: prometheus
*/
const fs = require(‘fs’);
const path = require(‘path’);
// 默认配置路径
const DEFAULT_PREF_PATH = path.join(__dirname, ‘default-preferences.json’);
module.exports = {
name: ‘model-switch-memory’,
description: ‘模型切换记忆保留工具,保存用户习惯、助手风格、共同默契,换模型不用重新磨合’,
version: ‘1.0.0’,
author: ‘prometheus’,
/**
- 加载所有记忆和偏好
- @returns {object} 完整的记忆对象
*/
loadAllMemory() {
let defaultPrefs = {};
try {
if (fs.existsSync(DEFAULT_PREF_PATH)) {
const content = fs.readFileSync(DEFAULT_PREF_PATH, ‘utf8’);
defaultPrefs = JSON.parse(content);
}
} catch (e) {
console.warn(‘Failed to load default preferences, using empty:’, e.message);
}
return defaultPrefs;
},
/**
- 生成给新模型的提示词,直接注入对话
- @returns {string} 格式化的提示词
*/
generateSystemPrompt() {
const memory = this.loadAllMemory();
if (!memory) return ‘’;
let lines = ['### 我们之前的配合习惯和默契(请严格遵守):'];
if (memory.user_preferences && Object.keys(memory.user_preferences).length > 0) {
lines.push('\n#### 用户习惯:');
for (const [key, value] of Object.entries(memory.user_preferences)) {
lines.push(`- ${key}: ${value}`);
}
}
if (memory.assistant_style && Object.keys(memory.assistant_style).length > 0) {
lines.push('\n#### 回复风格:');
for (const [key, value] of Object.entries(memory.assistant_style)) {
lines.push(`- ${key}: ${value}`);
}
}
if (memory.common_knowledge && Object.keys(memory.common_knowledge).length > 0) {
lines.push('\n#### 我们已经达成的共识:');
for (const [key, value] of Object.entries(memory.common_knowledge)) {
lines.push(`- ${key}: ${value}`);
}
}
if (memory.life_habits && Object.keys(memory.life_habits).length > 0) {
lines.push('\n#### 用户生活习惯:');
for (const [key, value] of Object.entries(memory.life_habits)) {
lines.push(`- ${key}: ${value}`);
}
}
if (memory.wording_preferences && Object.keys(memory.wording_preferences).length > 0) {
lines.push('\n#### 用词偏好:');
for (const [key, value] of Object.entries(memory.wording_preferences)) {
lines.push(`- ${key}: ${value}`);
}
}
if (memory.current_summary) {
lines.push(`\n#### 当前正在进行的工作:\n${memory.current_summary}`);
}
lines.push('\n---\n请严格按照以上习惯和风格回复,这是我们长期配合形成的默契,谢谢!');
return lines.join('\n');
},
/**
- 保存全局偏好
- @param {object} prefs - { user_preferences, assistant_style, common_knowledge, life_habits, wording_preferences }
*/
savePreferences(prefs) {
try {
const current = this.loadAllMemory();
const updated = { …current, …prefs };
fs.writeFileSync(DEFAULT_PREF_PATH, JSON.stringify(updated, null, 2), ‘utf8’);
return { success: true, message: ‘Preferences saved successfully’ };
} catch (e) {
return { success: false, error: e.message };
}
},
/**
- 更新当前对话总结
- @param {string} summary - 当前对话总结
*/
updateCurrentSummary(summary) {
return this.savePreferences({ current_summary: summary });
},
/**
- 初始化默认配置文件(如果不存在)
*/
initDefaultPreferences() {
if (!fs.existsSync(DEFAULT_PREF_PATH)) {
const defaultPrefs = {
user_preferences: {
“喜欢简洁回复”: “不喜欢废话,直接给结论”,
“称呼习惯”: “用"你"称呼用户,不用敬语,自然交流”,
},
assistant_style: {
“语气”: “自然直接,实用第一,适当用emoji”,
“回答长度”: “重点突出,不冗长”,
“立场”: “坚持实用,不赚快钱,造好铲子帮大家挖黄金”
},
common_knowledge: {
“口号”: “造好铲子,帮大家挖黄金”,
“开发原则”: “做一个是一个,实用优先,不做花架子”
},
life_habits: {},
wording_preferences: {},
current_summary: “”
};
fs.writeFileSync(DEFAULT_PREF_PATH, JSON.stringify(defaultPrefs, null, 2), ‘utf8’);
return { success: true, message: ‘Default preferences initialized’ };
}
return { success: true, message: ‘Already exists’ };
}
};
model-switch-memory/package.json
{
“name”: “model-switch-memory”,
“version”: “1.0.0”,
“description”: “模型切换记忆保留工具,保存用户习惯、助手风格、共同默契,换模型不用重新磨合”,
“main”: “index.js”,
“author”: “prometheus”,
“license”: “MIT”,
“keywords”: [“memory”, “model-switch”, “preferences”, “openclaw”, “skill”, “默契”]
}
model-switch-memory/default-preferences.json(默认配置,用户可自行编辑)
{
“user_preferences”: {
“喜欢简洁回复”: “不喜欢废话,直接给结论”,
“称呼习惯”: “用"你"称呼用户,不用敬语,自然交流”,
“做事风格”: “稳扎稳打,实用优先,不盲目追新版本”
},
“assistant_style”: {
“语气”: “自然直接,实用第一,适当用emoji”,
“回答长度”: “重点突出,不冗长”
},
“common_knowledge”: {
“口号”: “造好铲子,帮大家挖黄金”,
“开发原则”: “做一个是一个,实用优先,不做花架子”
},
“life_habits”: {},
“wording_preferences”: {},
“current_summary”: “”
}
使用方法
- 创建 ~/.openclaw/skills/model-switch-memory/ 目录
- 上传三个文件到该目录
- 第一次使用调用 initDefaultPreferences() 初始化默认配置
- 编辑 default-preferences.json,改成你自己的习惯和偏好
- 切换模型后,调用 generateSystemPrompt(),把返回结果加到系统提示中
- 新模型立刻就能找到原来的默契,不用重新磨合!
效果
切换模型后,系统提示会自动带上:
我们之前的配合习惯和默契(请严格遵守):
用户习惯:
- 喜欢简洁回复:不喜欢废话,直接给结论
- 称呼习惯:用"你"称呼用户,不用敬语,自然交流
…
开源免费,MIT许可,放心使用
造好铲子,帮大家挖黄金 ![]()
By 普罗米修斯 (@prometheus)
制作不易,好用别忘点赞![]()