ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Operit 记忆提取附加规则:为长期记忆库自定义入库范围、分类与表达偏好

Operit 记忆提取附加规则:为长期记忆库自定义入库范围、分类与表达偏好 AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆【免费下载链接】OperitThe most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent项目地址https://gitcode.com/gh_mirrors/op/Operit点击查看免费下载导读Operit 的长期记忆库原本只使用内置知识图谱提示词进行自动与手动 AI 整理用户无法限定入库范围、分类偏好或文本写法。本文介绍记忆提取附加规则Memory Extraction Custom Rules功能的完整实现它允许用户在每个记忆空间独立保存一段文本规则由自动保存调度器与手动更新共用在知识图谱提取提示词中以受控标签注入同时保持内置长期价值筛选与严格 JSON 输出协议不变。读完本文你将掌握该功能的存储结构、UI 入口、保存链路、提示词注入方式以及如何编写一份高质量的记忆提取规则。背景旧实现的局限与意图修正旧实现的限制在引入附加规则之前记忆库的设置链路存在明确的短板见 01_settings_and_prompt_integration.md记忆库设置只保存检索权重关键词 / 标签 / 向量 / 边权重、自动保存间隔和嵌入模型配置三类内容自动保存与手动更新都会进入MemoryLibrary.generateAnalysis生成知识图谱但知识图谱提示词不接受用户规则。其结果正如 index.md 所描述长期记忆的自动与手动 AI 整理只使用内置知识图谱提示词用户无法限定入库范围、分类偏好或文本写法。意图修正本次修改确立了三项目标在当前记忆空间的偏好中保存文本规则——规则按记忆空间profileId隔离存储在自动保存设置区的间隔说明下方提供多行编辑框——入口位于记忆库设置的自动保存分组内在知识图谱提取提示词中将规则限定为入库范围、分类和表达偏好——规则只能细化这三个维度继续要求严格 JSON 输出。预期结果同时被明确为三条可验收标准切换记忆空间时显示各自独立的规则自动保存与手动更新使用相同规则恢复默认时清空该记忆空间的规则。存储层按记忆空间隔离的规则持久化规则的持久化落在 MemorySearchSettingsPreferences.kt 中。该类以profileId为粒度创建 SharedPreferences 文件class MemorySearchSettingsPreferences(context: Context, profileId: String) { private val searchPrefs context.applicationContext.getSharedPreferences( memory_search_settings_$profileId, Context.MODE_PRIVATE ) // ... companion object { private const val KEY_MEMORY_EXTRACTION_CUSTOM_RULES memory_extraction_custom_rules const val DEFAULT_MEMORY_EXTRACTION_CUSTOM_RULES } }关键实现细节MemorySearchSettingsPreferences.ktloadMemoryExtractionCustomRules()从 SharedPreferences 读取memory_extraction_custom_rules键默认值为空字符串DEFAULT_MEMORY_EXTRACTION_CUSTOM_RULES 若取到 null 会抛出IllegalStateException以暴露异常状态saveMemoryExtractionCustomRules(rules: String)以apply()异步落盘写入该键键名与存储文件memory_search_settings_$profileId均带 profileId 后缀因此每个记忆空间的规则天然隔离切换记忆空间时读取到的是各自独立的规则——这正是切换记忆空间时显示各自的规则这一预期结果的存储层保证。值得注意的是同文件中的自动保存间隔KEY_AUTO_SAVE_INTERVAL_MINUTES默认 5 分钟允许范围 130 分钟与规则共用一个搜索设置文件这与编辑入口放在自动保存设置分组中的 UI 设计保持了一致。UI 层记忆库设置弹窗中的多行规则编辑入口弹窗的输入承载规则编辑入口位于记忆库设置的弹窗组件 MemorySearchSettingsDialog.kt 中。该弹窗新增了memoryExtractionCustomRules: String入参并以本地状态承载编辑中的文本Composable fun MemorySearchSettingsDialog( currentConfig: MemorySearchConfig, autoSaveIntervalMinutes: Int, memoryExtractionCustomRules: String, // ... onSave { config, cloudConfig, autoSaveIntervalMinutes, memoryExtractionCustomRules - ... } ) { var editedMemoryExtractionCustomRules by remember(memoryExtractionCustomRules) { mutableStateOf(memoryExtractionCustomRules) } // 自动保存分组内的多行编辑框OutlinedTextField 多行形态 }按照 01_settings_and_prompt_integration.md 的定位该编辑框以多行文本框形态置于自动保存设置的间隔说明下方即自动保存分组内。弹窗的挂载与保存回调弹窗由记忆库主界面 MemoryScreen.kt 挂载保存回调同时把规则文本交给 ViewModelif (uiState.isSearchSettingsDialogVisible) { MemorySearchSettingsDialog( memoryExtractionCustomRules uiState.memoryExtractionCustomRules, onSave { config, cloudConfig, autoSaveIntervalMinutes, memoryExtractionCustomRules - viewModel.saveSearchSettings(config, cloudConfig, autoSaveIntervalMinutes, memoryExtractionCustomRules) viewModel.searchMemories() }, // ... ) }uiState.memoryExtractionCustomRules来自 ViewModel 的 UI 状态切换记忆空间时由 ViewModel 重新加载从而满足切换记忆空间时显示各自的规则。保存链路ViewModel 的读写与归一化规则在 MemoryViewModel.kt 中完成读写闭环。加载方向loadSearchSettingsMemoryViewModel.kt从searchSettingsPreferences.loadMemoryExtractionCustomRules()读取后写入_uiState配合记忆空间切换即可在弹窗中展示当前空间规则。保存方向saveSearchSettingsMemoryViewModel.kt一次保存同时落盘检索配置、自动保存间隔与附加规则fun saveSearchSettings( newConfig: MemorySearchConfig, newCloudConfig: CloudEmbeddingConfig, autoSaveIntervalMinutes: Int, memoryExtractionCustomRules: String ) { // 归一化检索配置与自动保存间隔coerceIn 1..30 分钟 viewModelScope.launch(Dispatchers.IO) { searchSettingsPreferences.save(normalizedSearchConfig) searchSettingsPreferences.saveAutoSaveIntervalMinutes(normalizedInterval) searchSettingsPreferences.saveMemoryExtractionCustomRules(memoryExtractionCustomRules) repository.saveCloudEmbeddingConfig(normalizedCloudConfig) } }恢复默认的语义在 01_settings_and_prompt_integration.md 中被定义为清空该记忆空间的规则由于DEFAULT_MEMORY_EXTRACTION_CUSTOM_RULES 恢复默认即把空字符串写入该空间的 SharedPreferences规则随之失效。提示词接入规则如何在知识图谱提取中生效读取与注入规则真正影响记忆提取的路径在 MemoryLibrary.kt 的generateAnalysisMemoryLibrary.kt。该函数在构建候选记忆检索后读取当前记忆空间的规则并传入提示词构建器val memorySearchSettings MemorySearchSettingsPreferences(context, profileId) val searchConfig memorySearchSettings.load() val memoryExtractionCustomRules memorySearchSettings.loadMemoryExtractionCustomRules() // ... val systemPrompt FunctionalPrompts.buildKnowledgeGraphExtractionPrompt( duplicatesPromptPart duplicatesPromptPart, existingMemoriesPrompt existingMemoriesPrompt, existingFoldersPrompt existingFoldersPrompt, useEnglish useEnglish, profileDocument profileDocument, profileUpdateEnabled profileUpdateEnabled, memoryExtractionCustomRules memoryExtractionCustomRules )这里可以清晰看到规则与既有检索机制的配合本地混合检索策略问题导向的紧凑查询 权重打分取前 15 条候选记忆先做粗筛LLM 最终决策阶段才看到规则文本。规则不会改变本地检索打分只作用于 AI 的知识图谱生成决策。提示词中的受控注入格式FunctionalPrompts.kt 的buildKnowledgeGraphExtractionPromptFunctionalPrompts.kt将规则包裹在专用标签中注入提示词。中文版格式如下【用户指定的记忆提取附加规则】 memory_extraction_custom_rules $memoryExtractionCustomRules /memory_extraction_custom_rules 使用这些规则细化记忆领域、入库重点、文件夹、标签或写法。写入前筛选、证据要求和严格 JSON 输出协议仍然必须遵守。英文版[User-specified memory extraction rules]语义一致Use these rules to refine the memory domain, retention focus, folder selection, tags, or writing style. The selection gate, evidence requirements, and strict JSON output contract remain mandatory.这段指令被插入在【标题与内容写法】与【连接关系规则】之间位于整个提示词中段的规则区。两条红线始终生效**规则只能细化refine**记忆领域、入库重点、文件夹选择、标签或写法——即文档所言的入库范围、分类和表达偏好内置的写入前筛选Selection gate、证据要求与严格 JSON 输出协议保持强制——用户规则不能关闭内置筛选项也不能放松 JSON schema 要求。JSON 输出协议不受影响提示词后半段的严格输出 schema 保持完整FunctionalPrompts.kt除{}外必须输出main、new、update、merge、links开启资料自动更新时含profile_markdowncredibility、importance、weight必须是 0.01.0 的 JSON 数字。规则的注入不改变这一协议AI 仍需返回合法 JSON 对象。服务端解析侧 MemoryLibrary.kt 的parseAnalysisResult对缺失字段、空值、越界浮点数均做严格校验任何不符合协议的输出都会在解析阶段被拒绝。自动保存与手动更新共用同一规则自动保存链路自动保存由 MemoryAutoSaveScheduler.kt 驱动轮询器每 60 秒 tick 一次按记忆空间检查候选消息数量不足 5 条时继续累计达到门槛后把同一会话内的候选消息按时间排序、分批每会话每轮最多 20 条候选、单批最多 48 条消息组装成对话历史最终调用MemoryLibrary.saveMemoryNow( context context, toolHandler toolHandler, conversationHistory conversationHistory, content memoryContent, aiService memoryService, profileIdOverride profileId )saveMemoryNow内部进入saveMemory→generateAnalysis与手动更新走的是同一条提取函数。由于规则读取发生在generateAnalysis内部且以profileId为键自动保存调度器无需任何额外改动即可复用当前记忆空间的规则——这正是自动保存与手动更新使用相同规则这一预期结果的实现原理。手动更新链路手动更新如用户主动触发保存或记忆库工具的写入同样调用MemoryLibrary.saveMemoryNow/saveMemoryWindowNow后者支持自定义分析历史条数因而也必然经过同一段规则读取与提示词注入逻辑。从源码结构看任何进入generateAnalysis的路径——无论来源是自动调度器、手动保存还是窗口保存——都能获得一致的规则作用效果。编写一份高质量的记忆提取规则结合提示词注入段的措辞细化记忆领域、入库重点、文件夹、标签或写法规则文本应围绕四个可控维度组织记忆领域Domain限定只关心哪些主题例如只记录与项目 A 相关的技术决策与依赖版本变化入库重点Retention focus说明高价值信号例如用户明确表达的偏好与约束优先入库寒暄、天气、临时心情不入库分类偏好Folder / tags给出文件夹归属与标签习惯例如技术类记忆一律放入 folder_path 为tech/的目录标签统一使用中文小写表达偏好Writing style约束内容写法例如content 用 2~3 句客观陈述不写第一人称。需要注意的约束边界规则不应试图关闭内置筛选如所有对话都入库会被 Selection gate 拦截常识性问答仍返回{}规则不应要求 AI 输出 JSON 以外的文本输出协议强制为单一 JSON 对象规则不应包含未来计划或推测内容——内置策略要求 content 只写已发生事实 当前已确认状态规则为空字符串时默认状态提示词注入段会插入空内容功能退化为纯内置提示词行为等价于旧实现。验证与交付要点依据 01_settings_and_prompt_integration.md 的验收清单功能交付时需验证切换记忆空间在多个记忆空间分别填写不同规则并切换弹窗中应分别显示各自保存的文本存储层由memory_search_settings_$profileId文件隔离保证自动保存与手动更新一致性同一记忆空间下观察自动保存调度器触发的入库结果与手动触发的入库结果在领域、分类、写法上符合同一份规则两者共用generateAnalysis恢复默认执行恢复默认操作后该记忆空间的规则被清空再次打开弹窗显示空文本后续提取恢复内置提示词行为严格 JSON 协议规则注入后AI 输出仍必须符合main/new/update/merge/links的 schema解析层校验不应出现回归。总结记忆提取附加规则在 Operit 中形成了一条完整、可验证的功能链路存储层MemorySearchSettingsPreferences.kt按记忆空间隔离持久化规则文本 → UI 层MemorySearchSettingsDialog.kt 与 MemoryScreen.kt提供多行编辑入口 → ViewModelMemoryViewModel.kt完成读写闭环 → 提取核心MemoryLibrary.kt 的generateAnalysis在每次自动或手动提取时读取规则并注入提示词FunctionalPrompts.kt 的buildKnowledgeGraphExtractionPrompt。该设计在放开用户定制能力的同时通过规则只能细化、不能覆盖的措辞、内置 Selection gate 与严格 JSON 协议守住了记忆图谱的事实质量底线。对于希望让 Operit 长期记忆更贴合自身工作流与偏好的用户这是一项可直接上手配置的能力。赞分享AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆【免费下载链接】OperitThe most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent项目地址https://gitcode.com/gh_mirrors/op/Operit点击查看免费下载相关推荐为 AI 构建长期记忆gin-vue-admin 仓库中 aiDoc 记忆层的目录设计与写入规则为 AI 构建长期记忆gin vue admin 仓库中 aiDoc 记忆层的目录设计与写入规则 长期记忆long term memory是 AI 协后端前端认证鉴权低代码企业应用gin-vue-admin 的 aiDoc 长期记忆层跨任务稳定偏好与协作规则的沉淀规范gin vue admin 的 aiDoc 长期记忆层跨任务稳定偏好与协作规则的沉淀规范 导读 aiDoc/memory/long term/ 是 gin v后端前端认证鉴权低代码任务调度Agno 记忆优化实战用 Summarize 与自定义策略压缩 Agent 长期记忆Agno 记忆优化实战用 Summarize 与自定义策略压缩 Agent 长期记忆 记忆是 Agent 长期会话能力的核心但无限制累积的用户记忆会迅速膨胀人工智能大模型AI AgentAgent 框架多智能体工具调用RAGAgent 工作流Agent 记忆上一篇Virtual-Display-Driver虚拟显示器驱动技术指南下一篇5步释放30GBCzkawka跨平台系统清理工具新手入门教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表