本次功能
记忆开关
支持:
- 每个会话单独开启 / 关闭记忆注入
- 关闭后仍保留记忆数据,但不会参与回答
- 方便对比“有记忆”和“无记忆”的回复差异
1)改 web/src/utils/session.js
createSession 里新增字段
return {
id: crypto.randomUUID(),
title,
mode,
customPrompt: persona.systemPrompt,
temperature: 0.7,
topP: 1,
maxTokens: 1200,
memoryEnabled: true,
pinned: false,
loadSessions 里的 normalize 增加默认值
return {
mode,
customPrompt:
item.customPrompt ||
item.messages?.find(m => m.role === 'system')?.content ||
persona.systemPrompt,
temperature: 0.7,
topP: 1,
maxTokens: 1200,
memoryEnabled: true,
pinned: false,
...item,
}
2)改 server/app.py
ChatRequest 新增字段
class ChatRequest(BaseModel):
messages: List[Message]
session_id: Optional[str] = None
temperature: Optional[float] = 0.7
top_p: Optional[float] = 1
max_tokens: Optional[int] = 1200
memory_enabled: Optional[bool] = True
build_final_messages 改成支持记忆开关
def build_final_messages(messages: List[dict], session_id: str = "", memory_enabled: bool = True):
session_memories = get_session_memories(session_id or "") if memory_enabled else []
memory_prompt = build_memory_prompt(session_memories) if memory_enabled else ""
final_messages = []
for item in messages:
if item["role"] == "system":
final_messages.append({
"role": "system",
"content": f'{item["content"]}\n\n{memory_prompt}'.strip()
})
else:
final_messages.append(item)
return final_messages, session_memories
/api/chat 里调用改一下
final_messages, session_memories = build_final_messages(
messages,
req.session_id or "",
req.memory_enabled if req.memory_enabled is not None else True,
)
/api/chat/stream 里调用也改一下
final_messages, session_memories = build_final_messages(
messages,
req.session_id or "",
req.memory_enabled if req.memory_enabled is not None else True,
)
3)改 web/src/App.vue
新增计算属性
const currentMemoryEnabled = computed(() => {
return currentSession.value?.memoryEnabled ?? true
})
新增状态
const memoryEnabledDraft = ref(true)
增加监听
watch(
currentMemoryEnabled,
newVal => {
memoryEnabledDraft.value = !!newVal
},
{ immediate: true }
)
新增保存方法
const handleSaveMemorySetting = () => {
if (!currentSession.value) return
sessions.value = sortSessions(
sessions.value.map(item =>
item.id === currentSessionId.value
? {
...item,
memoryEnabled: !!memoryEnabledDraft.value,
updatedAt: Date.now(),
}
: item
)
)
}
流式请求 body 增加字段
body: JSON.stringify({
messages,
session_id: currentSession.value.id,
temperature: currentSession.value.temperature,
top_p: currentSession.value.topP,
max_tokens: currentSession.value.maxTokens,
memory_enabled: currentSession.value.memoryEnabled,
}),
4)改模板
在参数面板里追加记忆开关块
<div class="param-item">
<label class="param-label">memory</label>
<div class="memory-switch-row">
<label class="memory-switch-label">
<input v-model="memoryEnabledDraft" type="checkbox" />
<span>{{ memoryEnabledDraft ? '开启记忆注入' : '关闭记忆注入' }}</span>
</label>
<button class="prompt-btn small" @click="handleSaveMemorySetting">保存记忆设置</button>
</div>
<div class="param-tip">关闭后会保留记忆数据,但不会注入到对话上下文</div>
</div>
5)补充样式
.memory-switch-row {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 10px;
}
.memory-switch-label {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 14px;
color: #111827;
}
.prompt-btn.small {
padding: 6px 10px;
font-size: 12px;
}
6)怎么验证
nice !
本次 提交修改 代码
完整代码请看仓库,仓库地址:github.com/huanhunmao/… star 🌟🌟🌟 谢谢~