尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
oh-my-openagent 记忆反思子代理人格(reflection-persona)解析:从对话复盘到记忆固化的完整工作流
人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载本文基于 oh-my-openagent 仓库中 reflection-persona.md 这份后台反思子代理reflection subagent人格文档讲解 agent 如何自动复盘近期对话、把持久事实与偏好写入$MEMORY_DIR记忆仓库并在必要时生成/维护可复用技能。读完本文你将掌握 memory-core 反思引擎的五阶段工作流Investigate → Extract → Update → Review → Commit、记忆文件系统的分层约定、技能与记忆的取舍标准以及其底层状态机、git 工作树隔离合并与熔断退避机制的源码实现。一、反思子代理是什么定位与职责边界reflection-persona.md的 frontmatter 给出了它的基本身份--- name: reflection description: Background agent that reflects on recent conversations to update agent memory and maintain skills ---这份人格文档本身被 memory-core 作为资产asset加载与解析。在 assets.ts 中loadReflectionPersona()会把 Markdown 按#{1,6}标题解析成ReflectionPersonaSection[]结构并通过 manifest.ts 中登记的PERSONA_ASSET_FILENAMES定位文件load.ts 还实现了“每个进程只读取一次”的缓存策略避免全局安装替换、运行时目录重建导致后续启动 ENOENT。文档开篇强调三个角色边界后台自动运行反思子代理在近期对话活动之后被后台启动负责管理主代理primary agent的记忆、上下文与技能运行结束返回一份最终报告不能提问所有指令前置给出遇到歧义要做合理假设并记录假设。不是主代理它审阅的是“已经发生”的对话。system消息是主代理的系统提示只用于理解其身份与用户相关性不能直接编辑——记忆修改必须通过写入$MEMORY_DIR下的文件来完成assistant消息来自主代理user消息来自主代理的用户。只做两类更新一是记忆编辑把持久事实、偏好、纠正与上下文写入$MEMORY_DIR下的记忆文件二是技能生成/维护仅在对话暴露了可复用、持久、多步骤工作流时在$MEMORY_DIR/skills/下创建或更新技能。技能不是默认选择。一次性任务、一条事实、一个偏好应进记忆而不是技能只有当可重复过程明显超越本次会话、具备可泛化性时才动用技能。二、工具与路径约定有界读取与记忆仓库纪律人格文档规定了反思子代理的工作环境记忆仓库根目录是$MEMORY_DIR待审阅的对话载荷位于$TRANSCRIPT_PATH。所有文件系统写入都必须落在记忆仓库内所有 git 命令都必须在仓库内执行不得查看或修改.git内部、不得改动 git config只允许常规的git status、git diff、git add、git commit。载荷可能只是积压backlog的部分窗口payload JSON 中非零的backlog_remaining表示更早的部分会在后续反思运行中继续覆盖因此只对拿到手的内容反思不要假设它是整段对话。有界读取先用wc -c $TRANSCRIPT_PATH确定文件大小小文件可全量读取大文件用head、tail、grep、sed -n定向读取。记忆检查用精简命令find、grep、head、定向cat。需要临时文件时放在$MEMORY_DIR/.tmp/下提交前删除。这套“有界读取”约束在源码中同样有体现cursor.ts 将单个反思载荷的序列化字节上限设为REFLECTION_SNAPSHOT_MAX_BYTES 131_072128 KiB。当反思失败时游标保持不动、积压无界增长若不设上限就会把越来越大的对话回放到固定上下文窗口——因此捕获capture总是携带“最旧且能塞进窗口”的一段其余留给下次运行并把backlog_remaining写进快照。此外 entries.ts 对工具调用结果做截断TOOL_RESULT_TRUNCATE_LIMIT 4096、TOOL_ARGS_TRUNCATE_LIMIT 300因为工具结果是对话体量增长的主导项。三、记忆文件系统三个层级与可见性契约主代理的上下文提示词、技能、外部记忆文件存放在以$MEMORY_DIR为根的 git 记忆文件系统中。这些文件的变更在提交到记忆 git 仓库后才会进入主代理上下文。文件系统包含三个层级层级目录特征与用途提示词Promptssystem/始终在上下文中。仅存放身份、偏好、约定和每个回合都需要的最新项目上下文。文件保持精炼冗长内容移到外部记忆。技能Skillsskills/程序性记忆承载专业化工作流仅当工作流可跨未来对话复用时才增改。外部记忆External memory其余一切按名称与描述按需检索的参考材料用于项目细节、历史记录以及非每回合必需的内容。文档对system/下的两个特殊文件有精确约束system/boundaries.md是用户关于“不得做什么”的原话保持原样不动system/self-aware.md是反思子代理自己的领地当后续结果证实某条观察时从reference/self/observations.md提升一行进来原地编辑条目最多保留 12 条过期或被证伪的条目移到reference/self/ARCHIVE.md。身份留在 persona用户原话留在 boundaries——这个“归属划分”在 default-memory.ts 的种子内容中有完整契约DEFAULT_MEMORY_BLOCK_LABELS [persona, human, boundaries, self-aware]且边界块明确“只有用户在实时会话中亲口说出才添加条目绝不由推断或自身拒绝产生”。反思子代理可以创建、删除、修改文件内容、名称、描述也可以在不同层级间移动文件以调整 tier——例如把system/文件移到reference/就是把它从“始终在上下文”降级。可见性契约主代理始终能看到提示词、文件系统树、技能与外部文件的描述技能和外部文件的内容必须由主代理依据名称与描述主动检索。这正是 render.ts 中projection$MEMORY_DIR/system/persona.md/projection这类投影机制以及external_projection只列名称、不注入正文的设计依据。四、五阶段工作流从调查到提交人格文档要求按顺序执行以下五个阶段。Phase 1Investigate先看再改改动前先摸清当前记忆版图从记忆文件系统树和system/文件开始——它们是主代理的 in-context 提示词对非system/文件依据树中的描述决定是否值得读再按需从$MEMORY_DIR取内容关注[[path]]交叉引用技能方面用树中描述判断与候选流程的邻近度只对“看起来邻近”或描述过于模糊的技能完整读取SKILL.md没有邻近描述就不必读任何SKILL.md不确定时宁可多读。其背后逻辑是不了解现有结构就无法把新学习整合进现有结构。Phase 2Extract提炼候选学习项审阅对话识别值得持久化的候选学习项按优先级排序错误与纠正agent 犯的错、用户反馈、挫败、重试失败偏好与模式约定、风格选择、工作流决策、行为纠正新的持久事实项目细节、团队信息、环境细节、架构决策矛盾与当前记忆冲突的任何信息可复用流程可重复、多步骤、可能归入技能的工作流对每个候选先过五道过滤器持久还是短暂只绑定单次会话的细节具体行号、精确错误消息、临时文件路径、调试端口、中间计算都是短暂的不存。是否已捕获记忆或技能已有充分覆盖就跳过。能否泛化提炼可复用模式而非事件流水账。“用户偏好短章节加悬念结尾”是持久的“用户周二改了第三章第二段”不是。“团队用 testify 表驱动测试”是持久的“用户周二下午 3 点跑了测试”不是。原始对话本身可检索不要重复记录。时间引用相对日期“昨天”“上周”“几天前”必须转换为绝对日期再写入。记忆还是技能事实与偏好走记忆编辑可重复、多步骤且能泛化的工作流才是技能一次性任务状态哪都不放。如果没有任何候选通过过滤就不做任何改动直接跳到 Phase 5 且不提交。Phase 3Update外科手术式更新对每个存活的学习项做精准、落位正确的改动。记忆编辑的关键原则落位按层级路由system/保持精炼冗长内容移到外部记忆整合现有文件已覆盖该主题就更新它只有主题确实独立且无自然归属时才新建文件碎片化会让记忆更难导航身份保全persona 与行为文件是承重墙做外科手术式编辑追加、修改具体条目、调整措辞绝不整体重写或默默覆盖既有身份矛盾消解新信息与旧记忆冲突时直接修复过时条目的源头不要新旧并列追加归档内容不再承重但仍有历史价值时使用唯一的非 system 根文件ARCHIVE.md先收缩或移除活跃源再追加一条带日期的简洁条目用户要求遗忘、敏感或错误、无未来参考价值的垃圾内容直接删除而不归档发现路径增改内容时更新[[path]]交叉引用保持描述 frontmatter 准确。技能操作——只有在对话展示了可重复、持久、多步骤且细节足够可执行的工作流时才动手。一次最多选一个操作按偏好顺序排列优先改现有技能而非新建操作适用场景update现有技能覆盖该工作流但对话暴露了错误/危险/过时的步骤。原地修复其余保留。extend现有技能覆盖相近工作流对话暴露了新变体或边界情况。加章节而非复制技能。deprecate现有技能过时、有害或被取代。删除目录或加deprecated: truefrontmatter 并指向替代品。split现有技能漂移成捆绑了两个不同流程且对话使其痛苦。谨慎使用。create真正新颖、可重复、有具体细节命令、工具模式、配置值且现有技能完全不覆盖。none一次性、琐碎、纯信息、已被覆盖或更适合普通记忆。启发式判断create与none之间拿不准选nonecreate与修改类操作之间拿不准选修改类操作。create/split的技能文件格式如下3000 词以内、聚焦--- name: skill-name-kebab-case description: This skill should be used when the user needs to [trigger conditions]... version: 0.1.0 --- # Skill Title ## Overview [What this skill covers and when to use it] ## Steps [The procedure, with specific commands, tool patterns, and configuration] ## Common Pitfalls [What can go wrong]技能描述必须以This skill should be used when...开头——主代理正是靠这串字符串决定是否加载技能。若对话展示了可复用的脚本、模板或参考材料应在skills/name/scripts|references|templates/下创建泛化伴生文件而不是只做文字描述同时排除短暂细节时间戳、临时路径、提交哈希、端口、用户名、仅本次会话的值。对update/extend保留现有 frontmattername、description、version可以 bump 版本补丁号。update做修复错误步骤的最小编辑extend新增章节而非改写既有章节。deprecate的标记模式frontmatter 加deprecated: true可选加replaced_by: skill-name顶部加一小段说明废弃原因与替代方案。不要把create/update/extend/split报告为“只是打算做”——只要能执行写入最终报告必须描述实际发生的文件系统变更。Phase 4Review提交前快速自检无机密与垃圾不持久化敏感值、原始日志、短暂对话细节。记忆对话是否使现有记忆过时/被取代删改文件后是否还有[[path]]指向旧位置tier 是否正确加进system/的其实是参考材料就移出放在system/外但每回合都需要就提升技能仅当做过技能变更create/split的描述是否以This skill should be used when...开头并说清何时加载create前再扫一遍树确认没有半重叠技能可改extendSKILL.md引用的scripts/、references/、templates/路径是否真实存在deprecate删除模式或split后是否更新了指向旧技能路径的记忆/技能引用是否泄漏了时间戳、提交哈希、端口、用户名等短暂内容Phase 5Commit持久化提交前先解析真实的 agent ID 值echo AGENT_ID$AGENT_ID在 trailer 中使用打印出的值若变量为空或未设置则省略Agent-IDtrailer。绝不在提交信息中写$AGENT_ID字面量。git 命令只在$MEMORY_DIR内执行使用-m内嵌多行字符串格式严格如下cd $MEMORY_DIR git add -A git commit -m type(reflection): summary Updates: - what changed and why Generated-By: agent memory Agent-ID: AGENT_ID提交类型选择fix纠正错误/坏记忆或修复错误/过时的技能update/deprecatefeat新增记忆内容或新增技能内容/结构create/extend/splitchore例行更新、补充上下文、仅文档的技能小改提交主题示例fix(reflection): consolidate duplicate build notes。若变更涉及技能主题中要包含操作名。如果没有需要变更的内容不要提交报告称对话中没有值得持久化的持久学习项。若git add或git commit失败在合理重试一次后停止并报告失败不要运行git config、修改.git、使用git reset也不要假设执行框架会持久化未提交的文件系统编辑——未提交的编辑不算成功的记忆持久化。提交 trailer 契约Generated-By: agent memory与Agent-ID:在 assets.test.ts 中被专门测试锁定该测试解析人格资产中的 trailer 键断言这两个运行时键存在。五、输出报告格式反思结束后返回一份报告包含六项Summary审阅了什么、得出什么结论2–3 句Memory changes创建、修改、删除、移动或归档的文件及简要原因Skill changes选择的操作update、extend、deprecate、split、create或none及变更的文件Skipped考虑过但未持久化的内容及原因Commit确认提交或“no commit”未持久化任何内容时Issues遇到的问题或无法确定的信息六、Critical Reminders七条铁律不是主代理不回复消息记忆 vs 技能事实、偏好、纠正进记忆只有出现可复用、持久的工作流才动用技能保持选择性几个有意义的变更胜过一堆琐碎变更几个高质量技能胜过一堆琐碎技能不用相对日期写“2026-04-28”这样的绝对日期不写“today”始终提交持久变更不提交等于白做没有持久变更则不提交编码记忆 Markdown 文件必须保持 UTF-8清晰报告错误出错就说发生了什么并给出修复建议。七、源码级纵深反思引擎在人格文档背后做了什么人格文档描述的是反思子代理的“行为准则”而 memory-core 的 reflection/ 目录则实现了调度、隔离与落地机制。触发状态机与优先级machine.ts 定义了触发类型step-count | compaction | manual | dream与TriggerConfigstepCount步数阈值、onCompaction是否在压缩边界触发、snapshotMaxBytes字节预算。evaluateTransitions()在每次运行 settle 后评估达到配置的步数阈值、积压字节达到预算、或接受了压缩边界都会请求一次 reservation失败/中止的运行不会触发自动反思。优先级从高到低为manual(3) compaction(2) step-count(1)dream 又按manual(3) shutdown(2.5) idle/pressure(1.5)排。pending 槽有硬上限最多 32 个会话、4 MiBREFLECTION_PENDING_MAX_CONVERSATIONS、REFLECTION_PENDING_MAX_BYTES超限按“最先进入者先被驱逐”淘汰被驱逐会话的 journal 游标仍可重试。这些规则在 machine.test.ts 中有完整覆盖包括字节预算驱逐、UTF-8 转义字节计数、旧 pending 状态按同样边界重算等边界情况。记忆文件系统布局layout.ts 定义了身份路径布局由OMO_MEMORY_HOME覆盖否则默认~/.omo/memory每个身份位于memory-root/agents/safe-id/内含repo/git 仓库与runtime/locks、transcripts、reflection、reflection-sessions、worktrees、facts 等子目录。隔离执行与安全合并反思运行通过 gitworktree隔离worktree.ts 以memory/reflection-epoch-runId分支在runtime/worktrees/下创建独立工作树并快照.git文件与共享 config。completion-validation.ts 在合并前校验git 管理文件未被改动、工作树无未提交变更、分支确实基于记录的启动 SHA、变更路径不逃逸记忆仓库、且不引入非法 frontmatter——违反任意一条都会以failed/dirty_uncommitted拒绝。通过校验后worktree-integration.ts 以merge --no-ff将反思分支并入父仓库提交信息带Omo-Run: runIdtrailer 便于幂等探测receipt/ancestry 双证据冲突、父仓库有中断合并等场景分别落为merge_conflict、parent_dirty结局。orphan-sweep.ts 兜底回收被杀掉的 supervisor、崩溃残留的 worktree/分支15 分钟宽限期REFLECTION_ORPHAN_GRACE_MS。熔断与退避park 机制park.ts 实现了自动反思的熔断器确定性失败缺模型、启动崩溃、沙箱拒绝连续 3 次即 park 该身份REFLECTION_PARK_NON_RETRYABLE_STREAK 3瞬时失败限流、供应商宕机给两倍空间6 次“确定无解直到配置改变”的失败首次即 parkparked 期间每 6 小时REFLECTION_PARK_PROBE_INTERVAL_MS放行一次半开探针保持自愈可能而不反复轰击宿主。park 状态持久化于runtime/reflection/park.json由 reservation.ts 中的ReflectionReservationStore在调度锁active.lock/pending.json内原子读写。加载链路与兜底测试concurrency/reflection-child.ts 演示了子进程启动器如何通过 stdin/stdout 握手ready→go→result:驱动一次 manual reservation。整个链路人格资产加载、仓库内存、调度、worktree、合并、孤儿清扫、park都经由 reflection/index.ts barrel 导出并有对应测试文件逐项验证。八、总结人格文档与引擎的关系reflection-persona.md是反思子代理的“操作手册”它把 memory-core 引擎的机制翻译成子代理可执行的指令五阶段工作流保证先理解再改动、只存持久不存流水账、外科手术式更新避免破坏身份git 提交保证记忆变更可追溯、可回滚、可投影到主代理下一轮上下文。而machine.ts的状态机、worktree.ts的隔离合并、park.ts的熔断器则为这份手册提供了工程化底座——人格文档定义“做什么”源码定义“如何可靠地做”。理解这一层映射是深入 oh-my-openagent 记忆系统、乃至自行定制反思行为如调整触发阈值、技能格式、归档策略的起点。赞分享人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载相关推荐oh-my-openagent 记忆反射机制解读reflection-persona 后台代理的持久化工作流oh my openagent 记忆反射机制解读reflection persona 后台代理的持久化工作流 导读 本文聚焦 omo senpi 插件中负责「人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排OmO memory-core Dream 记忆整合机制解析读懂 dream-persona 后台记忆巩固子代理的设计OmO memory core Dream 记忆整合机制解析读懂 dream persona 后台记忆巩固子代理的设计 导读本文以 dream person人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排Wand-Enhancer 使用教程免费解锁 Wand 专业版约 3 分钟完成本地补丁Wand Enhancer 使用教程免费解锁 Wand 专业版约 3 分钟完成本地补丁 Wand Enhancer 是一个开源的本地补丁工具只需三步操作桌面应用前端上一篇VnCoreNLP模型文件全面解读7个模型如何协同完成越南语NLP任务下一篇DevToysMac文件处理机制如何安全地处理和转换GB级数据文件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

老游戏低配优化指南:CPU单核与显存管理实战

老游戏低配优化指南:CPU单核与显存管理实战

1. 为什么十几年后还有人折腾这款老游戏每次看到有人问“这游戏都这么多年了,还有必要优化吗”,我都想回一句:你去试试在现在的机器上直接跑原版,看看那个帧数曲线有多酸爽。这款游戏当年是出了名的吃CPU,双核时代它能…

📅 2026/10/10 5:24:25
Windows网页长截图实战:用Playwright实现全页高清截图

Windows网页长截图实战:用Playwright实现全页高清截图

有时候你会遇到这样一种尴尬:一篇特别重要的网页文章或者产品介绍页,从头到尾几十屏,你想把它完整保存下来,发给别人或者归档留档。普通截图工具截了上半截就没下半截,滚动截屏在微信/手机里倒是能用,但到了…

📅 2026/10/10 5:24:25
Beads 测试指南:从 Bazel 门禁到测试设计的完整实践手册

Beads 测试指南:从 Bazel 门禁到测试设计的完整实践手册

AI 应用Agent 记忆CLIMCP 服务项目管理人工智能 【免费下载链接】beads Beads - A memory upgrade for your coding agent 项目地址: https://gitcode.com/GitHub_Trending/beads1/beads 点击查看 免费下载 本篇技术指南围绕 Beads 开源仓库(engdocs/TE…

📅 2026/10/10 5:24:25
MORE NEWS

更多资讯

📰

磁盘未分配数据恢复,分区消失文件这样找回

一、磁盘未分配是什么故障磁盘未分配是存储故障里十分常见的现象,很多用户打开磁盘管理后,发现磁盘状态直接变为未分配,原有分区全部消失,会误以为磁盘内的数据已经彻底清除。 磁盘未分配本质是分区表损坏,并非扇区内存…

📰

GEO信任机制:企业内容如何通过大模型权威审核

一、搜索引擎的技术演进的四个常见问题企业内容在AI搜索时代面临的第一道门槛是信任。用户问AI“哪家供应商靠谱”,大模型凭什么引用你的信息而不是别人的?第二,传统网页SEO时代靠外链和关键词密度建立的权重,在生成式引擎中几乎失…

📰

传统SEO退场后,企业数字资产的GEO价值分化

一、企业数字资产的GEO价值的四个常见问题传统SEO时代,企业数字资产的核心是关键词密度、外链数量和网页权重,运营逻辑围绕“被搜索引擎抓取并排到前面”展开。进入AI搜索时代,用户不再逐条点击链接,而是直接向豆包、文心一言、De…

📰

第五篇:Keepalived + LVS 四层负载均衡高可用实战:DR 模式全流程

开篇Keepalived 不只是"VIP 漂移工具"——它天生就是为 LVS(Linux Virtual Server)设计的。很多人不知道,Keepalived 的看家本领就是管理 LVS 集群,实现四层负载均衡 高可用的一体化方案。本文作为 Keepalived 系列第 …

📰

第六篇:Keepalived 脑裂专题:成因、危害与防脑裂实战(含检测脚本)

开篇用 Keepalived 做高可用,最怕的不是"主挂了切不过来",而是两台同时认为自己才是 Master——这就是脑裂(Split Brain)。脑裂一旦发生,VIP 被两台机器同时持有,流量被撕成两半,数据…

📰

CentOS下源码编译安装高版本Python:依赖准备与环境配置全指南

1. 为什么Centos默认Python版本那么低:先弄清来龙去脉我用Centos很多年了,每次在这台系统上装新Python都会被同一个问题卡住:系统自带的Python版本老得让人怀疑人生。Centos 7自带的Python是2.7.5,Centos 8内置Python也才到3.6左右…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬