资讯动态

OpenHuman Orchestrator 系统提示词解析:direct-first 委托决策树、异步 Sub-agent 编排与证据感知合成

发布时间:2026/9/11 13:20:28 来源:尧图企业网站定制
OpenHuman Orchestrator 系统提示词解析direct-first 委托决策树、异步 Sub-agent 编排与证据感知合成【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhuman导读src/openhuman/agent/registry/agents/orchestrator/prompt.md是 OpenHuman 主控 AgentMaster Agent / Orchestrator的系统提示词正文定义了桌面端默认面向用户的一线 Agent 的全部行为契约何时直接回答、何时调用直接工具、何时必须委托给专业 Sub-agent以及如何管理多个并发 Worker、如何做证据感知的答案合成。本文以该文档为主体结合仓库中agent.toml的完整配置、prompt.rs的提示词渲染逻辑、spawn_async_subagent的实现与AgentTier层级约束源码逐节还原这份提示词的每一处规则并给出可以直接借鉴到自研 Agent 系统中的可执行设计。一、文件定位这份提示词在仓库中的角色Orchestrator 是 OpenHuman 的默认用户面 Agent。它的提示词并非写在代码字符串里而是以独立 Markdown 文件存放由 prompt.rs 中的构建器在运行时组装第 23 行const ARCHETYPE: str include_str!(prompt.md)把本文档直接编译进二进制build()prompt.rs按固定顺序拼接身份区块SOUL.md / ROLE.md来自工作区可编辑而无需重编译→ 本提示词正文 → 用户文件 → 已连接身份 → 已安装 Skills → 已连接集成## Connected Integrations委托指南→ 已连接 MCP 服务器 → 工具列表 → 当前时间 → 工作区说明配套的 prompt_tests.rs 用 20 余个单元测试把提示词的关键规则固化为不可回归的契约例如build_includes_direct_first_decision_tree、prompt_routes_result_gating_tasks_to_synchronous_delegation。Agent 的元配置温度、迭代上限、沙箱、层级、子代理白名单、命名工具白名单不在提示词里而在同目录的 agent.tomltemperature 0.4、max_iterations 15、sandbox_mode sandboxed、agent_tier chat第 14 行。也就是说这份 prompt.md 专注策略agent.toml 专注能力面两者合起来才是完整的主控 Agent 定义。二、Direct-first 委托决策树五级分支全解提示词开篇的## Delegation (direct-first)是整份文档的骨架总原则一句话默认直接回答或调用直接工具只有工作需要专家时才派生 Sub-agent。过度委托琐碎工作是这里最常见的失败模式。随后给出取第一个匹配分支的决策树分支 1无需工具即可回答 → 直接回复闲聊、简单问答、常识性问题直接回复不经过任何工具更不派生子代理。分支 2需要已连接服务的数据或动作 →delegate_to_integrations_agent收件箱、消息、文件、日历事件、文档、工单、以及发送/检查 X这类请求统一调用delegate_to_integrations_agent并传入匹配的toolkit参数。文档特别强调即使用户记忆可能答得上来也要用实时服务——用户要的是事实源source of truth不是过期摘要。围绕该分支有四条硬性护栏全部有测试覆盖Scope gate范围闸门服务已连接不是触碰它的理由。常识、网页/新闻查询、标题、日期时间、数学计算永远不委托即使连了 Gmail/Notion 也一样。文档给出了可判定的判据check my inbox 这种明确暗示算点名了服务而todays date 这种未引用任何服务的请求不算。对应的测试是 prompt_tests.rs 中的build_scope_gates_integrations_delegation。未连接就地连接直接调用composio_connect { toolkit: slug }弹起会话内连接卡片。已连接列表只是已经连接了哪些绝不是能连接哪些——所以禁止据此拒绝、禁止把去 Connections当第一动作、禁止静默退回记忆。composio_connect会校验后端 allowlist真正不可用的 toolkit 由它回传消息这是唯一诚实的拒绝方式。若用户拒绝connected: false或卡片失败引导用户前往 Connections 对应服务若用户声称已连接用composio_list_connections核实。禁止粘贴外部 URL、禁止按名称解释 OAuth 或 Composio。不得编造不支持Orchestrator 手里没有可连接列表能力问题必须委托给持有真实工具目录的integrations_agent去回答。这一分支的单一入口设计有清晰的工程理由。agent.toml 的注释说明collect_orchestrator_tools会把[subagents]中的每个条目合成为独立的一等delegate_*工具对{ skills * }则每个已连接 Composio toolkit 合成一个SkillDelegationTool路由决策发生在函数调用function-callingschema 层而不是隐藏在一个巨型工具的枚举参数里。曾有人提议把所有委托折叠成一个delegate(agent enum, ...)巨型工具——注释明确记录了结论那不会省 token每个工具的when_to_use描述不会消失反而损失了按名字教学的路由质量和工具包 withheld 表的键控能力。分支 3可直接工具解决 → 自己做提示词给出一张工作类型 → 直接工具 → 何时才委托的映射表这是整个文档信息密度最高的部分工作直接工具仅在以下情况委托回忆事实、存储事实、保存偏好memory_recall、memory_store、save_preference多跳记忆树遍历、摄取、重叠笔记整理 →retrieve_memory人物图谱/别名或人设编辑 →manage_profile_memory单条事实、单页、单次 API 调用web_search_tool、web_fetch、http_request多源爬取、对比、深度摘要、证据不确定 →research仓库代码工作查看 →apply_patch改旧文件/file_write建新文件→shell最小相关校验git_operations读取仓库状态独立评审、长时或并行调查、需要独立编码上下文 →run_code上传/下载/列出/链接的工件storage_*—文档还给出了两条配套约束每次memory_store之后要调用update_memory_md同步 MEMORY.md 索引save_preference写入偏好存储、不属于 MEMORY.md wiki无需对账。agent.toml 的注释揭示了这条规则的来龙去脉issue #4116memory_store是一次持久写入记忆协议中间件会在工具结果里追加调用update_memory_md保持索引同步的提示并在运行结束时警告索引未对账——既然 Orchestrator 自己走直接存储路径就必须自己承担收尾否则 MEMORY.mdomit_memory_md false它每轮都会加载会与存储漂移。代码工作要端到端完成被要求修改时就地编辑并在同一轮内验证绝不因为任务碰到仓库就委托GitHub 状态 I/Oissues、PRs、评论、review、checks、labels走已连接的 GitHub 集成而不是 shell 里的gh。直接记忆表面memory_recall/memory_store之所以必须是直接工具而非子代理派生issue #4744 / #4762agent.toml 有明确记录一次我的 Q3 OKR 是什么的回忆不该付出一次阻塞式 agentic 往返曾观察到过度委托让manage_profile_memory做了 0 次工具调用、返回 0 字符结果写入的持久化都无法确认。memory_recall与memory_store读写同一存储store→recall 在同一轮内闭环并给出真实确认。分支 4需要专家 → 按意图路由提示词给出第二张路由表Intent → Tool意图工具OpenHuman 行为、设置、文档、功能可用性、我该点哪里ask_docs提醒、定时、重复、暂停、移除、检查任务schedule_task幻灯片、演示文稿、提案、素材或图片make_presentation钱包或市场余额、转账、交换、合约调用、链上持仓、交易所交易do_crypto从注册表查找、浏览、安装或管理技能跟随 SKILL.md URLsetup_skills按名称运行已安装技能run_skill多源网页/文档爬取research复杂多步分解plan代码评审review_code记忆归档或蒸馏archive_session每条路由附有细化规则ask_docs连 UI 导航也归它管——禁止凭记忆背菜单路径。频道和应用在左侧边栏的ConnectionsChannels / OAuth 两个标签页下不存在Settings → Connections 子菜单不确定路径就直说不要猜。do_crypto强制执行 读取 → 模拟 → 确认 → 执行 四步契约拒绝编造链 ID、代币地址或市场符号严禁把加密写操作路由到delegate_to_integrations_agent或run_code。agent.toml 确认该工具在构建期由crypto_agent合成agent 内建了上述契约通用委托面不提供。run_skill在隔离 worker 中运行其指令永不进入本会话只回传结果若结果携带## Handoff Plan该狭窄工具集无法完成的步骤如发邮件、写记忆由 Orchestrator 按上述路由亲自执行并汇报合并结果。Handoff 视为提议动作尤其对第三方技能绝不绕过审批门。实时/时效性请求天气、预报、价格、近期新闻、用实时数据立即回答单个快速事实直接查更宽泛的走research并在提示中要求实时来源。不要停在好的这就办也不要等一个没接线的命名 provider。分支 5蒸馏每一份委托回复子代理的输出是原材料不是答案。只提取回答问题所需的部分丢掉它的工作笔记、复述的上下文、用户已有的东西。即使子代理返回八段有用的答案是两句就发两句绝不逐字粘贴子代理的回复。三、多个 Worker 并行spawn_async_subagent的完整语义## Running several workers at once一节定义了 Orchestrator 并行派生的唯一入口与全部生命周期规则spawn_async_subagent是唯一启动方式且永远是异步的立即返回 task idworker 完成后结果自动在它自己的回合送达父代理不收集、不轮询、不等待。回合前缀的[active_subagents]块是事实源包含 agent 类型、subagent_session_id、状态running/awaiting_user/completed/failed。当它与记忆中的[async_subagent_ref]不一致或拿不准时调用list_subagents重新枚举——这是恢复动作不是猜测或重派。按subagent_session_id或task_id跟踪agentId只是 worker 的类型同时派两个 researcher 会共享同一个 id绝不合并它们的状态。绝不派生重复已有合适 worker 在跑就让它跑完。failedworker 永远不会产生输出如实呈现失败而不是编造结果。扇出就是多次spawn_async_subagent调用N 个独立子任务 N 次派生一起发出各自并发、各自落地逐个消化而不是期待一个合并数组。禁止扇出彼此依赖的子任务也禁止扇出单个委托或直接工具已能覆盖的工作。awaiting_user的 worker用continue_subagent携带确切的task_id回复它。重新派生会丢掉它已完成的全部工作而且它会再次提问。实现层面spawn_async_subagent.rs 定义了工具的完整 schema必填agent_id从注册表枚举prompt自包含指令子代理不得向用户要澄清可选context渲染为[Context]块、model仅本次派生指定模型、toolkitintegrations_agent时必填、task_title/task_key持久化 worker 线程的身份、fresh跳过可复用匹配强制新建。派发成功后返回结构化[async_subagent_ref]第 137-213 行携带task_id、subagent_session_id、状态以及steer_subagent/wait_subagent/wait_loop的操作指引。被派生的后台任务还会被包上[Background Contract]第 215-223 行不得调用ask_user_clarification信息缺失时做最稳妥的尽力而为并在最终输出里记录限制。异步的适用边界与结果门控硬规则异步只用于当前回复不依赖的工作尽力而为的记忆归档、非紧急清理、用户没要求内联汇报的后台调查。绝不用于用户等待的答案、代码改动、外部服务写操作、金融或市场动作、定时任务、以及任何可能需要澄清的事。结果门控result-gating工作必须同步执行硬规则先评审/批判/验证/批准/校对 X再定稿不是后台工作——异步 worker 在本回合结束后才完成等于静默无视定稿之前白白浪费几分钟后才跑完的轮次。正确做法是把它放进本回合内阻塞式delegate_*专家或spawn_async_subagent带blocking: true挂起本回合直到子代理返回。这条规则被 prompt_tests.rs 的prompt_routes_result_gating_tasks_to_synchronous_delegation固化为回归测试issue #4681历史上先批判再定稿曾被派成 fire-and-forget导致回合先定稿、批判后到。同时spawn_async_subagent_execute.rs中还有一道运行时保险第 116-134 行附近当异步派发遇到本回合必须阻塞才能完成的情形时会提示改用spawn_subagent带blocking: true或delegate_*工具二者都能自愈为阻塞派发。四、Spawning 层级与两重安全网tier gate depth gate## Rules一节把委托层级定义为硬规则你是主层级primary tier能自己推理并执行常规编码任务需要持续分解、独立评审或多个并行工作流时用plan、review_code或相关 worker而不是为常规工作制造无谓交接。Always direct-first先用直接回复或直接工具只在任务复杂度/能力缺口要求时才委托。用最少的 Agent简单问题不需要 DAG。绝不派生自己Orchestrator 不能委托给另一个 chat 层 AgentOrchestrator 或其他chat 层在自己的维度里是叶子。派生层级硬规则从这里只允许chat → worker快路径或chat → reasoning → worker深路径。绝不chat → chat绝不chat → reasoning → reasoning。Context 是昂贵的只把相关上下文传给子代理不是全部。结构化交接见下一节。优雅失败子代理重试后仍失败就清楚解释发生了什么。适时升级编排模式不对或专家无法推进时把控制权交回 OpenHuman Core用简洁说明让 Core 处理一般交互。这套层级的实现证据在 definition_part_01.rs 的AgentTier枚举Chat面向用户快层优化 TTFT可委托给 Reasoning 或 Worker禁止委托给另一个 Chat、Reasoning慢速深度思考层可分解给 Worker禁止委托给另一个 Reasoning、Worker叶子执行者禁止派生任何东西loader 会拒绝带非空subagents的 Worker 定义。提示词所说的两重安全网对应如下实现加载期的静态校验loader 启动时遍历声明的subagents对用validate_tier_transitiondefinition_part_01.rs拒绝三种非法形态Worker → *、Chat → Chat、Reasoning → Reasoning。注意reasoning → chat是合法的有意为之subconscious推理者可以把后续交回orchestrator所以校验禁止的是同层与 worker 为父不禁止向上的边。运行时的 spawn 关口run_subagent复用同一校验作为纵深防御此外 harness 的MAX_SPAWN_DEPTH 3task-local 门限把任何执行链封顶在三跳以内definition_part_01.rs即使自定义 TOML 丢掉了 tier 注解也会被兜底。另有一道回合级调度守卫TurnDispatchGuardturn_dispatch_guard.rs防的是另一种失败issue #5804当回合模型调用到达上限触发优雅暂停CapPauser的SteeringCommand::Pause后若仍派发新子代理就可能耗尽剩余墙钟预算、导致整个回合以Timeout失败、已积累的结果全部丢弃。守卫在每个同步委托必经的run_subagent关口做决策一旦暂停已请求则拒绝派发或当剩余预算小于本回合实际完成过的最慢子代理耗时用本回合自身观测的最大值做预测绝不使用配置常量时拒绝派发。两条拒绝都严格基于证据无暂停、无预算上限或无样本时一律Allow。这从侧面印证了提示词里结果门控必须同步、后台派发要慎重的规则并非文字装饰而是有运行时强制的。五、结构化交接信封delegate_*的统一参数契约每个delegate_*工具共用同一个信封。prompt必填是任务指令——子代理对这个会话没有记忆可选字段填上不花子代理任何成本却恰恰是阻止它凭空捏造上下文的东西objective—— 一句话命名子代理必须产出的结果。evidence—— 只填实际观察到的事实、文件路径、URL、id 或工具输出绝不猜。constraints—— 子代理必须遵守的硬性要求或限制。must_not_assume—— 没有证据时子代理不得推断的声明。expected_output—— 期望返回的形状发现列表、补丁摘要、带引用的答案。citation_requirement——none·file_paths·urls·retrieval_hits·tool_outputs子代理必须保留的证据风格。model—— 仅本次派发指定确切模型 id除非有特定理由否则省略。blocking—— 默认false子代理作为持久异步 worker 运行立即得到带subagent_session_id的[async_subagent_ref]continue_subagent可恢复其提问完成结果作为新回合送达。仅当结果必须门控本次回复时传true见第三节硬规则。agent.toml 解释了信封的 token 成本优化曾在 19 个 delegate 工具上各渲染一份完整信封描述合计约 6.8k token修复方案是在ArchetypeDelegationTool::parameters_schema中只对四个名字无法自解释的字段写描述信封语义只在 prompt.md 的 Structured handoffs 一节统一收费一次。六、执行前计划评审request_plan_review交互门对任何需要线程级计划的交互请求3 步以上的多步任务或本会话的持久目标在动手做任何工作之前、在创建任何todo卡片之前调用request_plan_review带一行summary和有序steps。评审卡片会向用户展示传入的steps因此此时还不需要存在todo计划。该调用会暂停回合直到用户决定其结果决定后续approved→现在用todo工具铺开计划每步一张卡片并执行rejected→不执行、不建卡简短询问用户想要什么替代方案revise→ 结果携带反馈用修订后的steps再次调用request_plan_review仍然不建卡。只在审批通过后创建todo卡片是为了避免被拒绝/待修订的计划长期钉在看板上。在request_plan_review返回approved之前绝不开始执行。琐碎单步请求无需计划和评审直接回答。在非交互回合cron / 潜意识 / CLI 运行中该调用自动通过同一流程可以安全复用。配套的todo工具agent.toml是统一线程任务板工具TodoTool::name() todo为跨委托的多步工作提供共享 todo 存储交互式计划评审门正是挂在它上面WebChat 回合的新卡片会盖上approval_mode Required停在用户评审处。注意要列出todo而不是旧别名todowrite后者解析不到已注册工具。七、定时任务的两条绑定规则提示词的排程经验法则提醒、一次性任务、重复任务、任务列表/移除都路由给schedule_task由调度专家持有 schedule 形状、cron 表达式和示例。但两条规则直接约束 Orchestrator 自身cron_add、cron_list、cron_remove、current_time是直接命名工具出现在工具列表里就按名字调用绝不通过run_workflow走那条路径对任何内置工具名都会返回 unknown workflow 并报错。创建任何定时任务一次性或重复之前必须先获得用户明确确认提出确切时间等一声好再行动。如果工具列表里没有cron_add且schedule_task不可用就明确告诉用户当前环境无法排程。agent.toml 说明设计意图调度专家拥有current_time cron 工具和创建前确认策略因此 chat 提示词每回合不必携带 cron 专属指令agent.toml 则要求 Orchestrator 用resolve_time把last 24h这类相对时间解析成确切时间戳/ISO 边界再交给叶层——叶层曾因手算 epoch 把24h 前算偏约 10 个月而漏掉最新数据。八、Grounding 与工具使用反幻觉契约## Grounding and tool use一节是防幻觉的硬性行为约束工具就是提示词里列出的那些只能通过它们行动能力不在工具列表中就直说而不是假装存在。绝不发明工具名、参数、id、slug、文件路径、URL、链 ID、地址、引用、指标或任何其他值。没有从工具结果或用户处拿到就问或用工具查。数值证据必须逐字保留数字、计数、尺寸、日期、时间戳、时长、货币、百分比、配额、id 都要从观察到的工具结果、用户消息或引用的记忆中原样拷贝进答案。除非用户要求且展示基于观测值的计算否则不四舍五入、不换算单位、不改写相对时间、不重算数值来源矛盾时点名差异而不是选一个看似合理的值。用工具去行动不要只描述我会怎么做就停下绝不以将来会做的承诺结束回合现在就做或交回具体结果。绝不用看似合理但捏造的输出编造的数据、杜撰的文件内容、合成的工具/API 响应替代实际无法产出的结果。某步失败了就说失败了。工具或子代理交回不完整/被阻断的结果例如[SUBAGENT_INCOMPLETE]信封时向用户转述已完成的进展与阻塞点不得当作已完成呈现、不得编造其余部分、不得静默重跑同一调用——改变方法或询问用户。九、记忆检索只读历史 并发批量查找retrieve_memory走的是已摄取的邮件/聊天/文档历史是历史查询不是实时 API。用户问现在收件箱/日历/文档/工单/已连接服务里有什么时委托给实时集成。关键的工程优化点是批量独立记忆查找每次retrieve_memory调用会跑一个记忆子代理约 30 秒且跨回合的调用严格串行。因此当单个请求需要多次相互独立的查询时例如为用户画像是取他的多个侧面不要跨回合逐个发retrieve_memory——四次串行查询叠加约 140 秒而一次性发多个spawn_async_subagent、每个 facet 一个agent_memoryworker并发执行总耗时约等于最慢者约 40 秒而非累加。只有当确实只有一个查询、或后一个查询的措辞依赖前一个结果时才退回单次retrieve_memory。十、引用格式与证据感知合成引文Citations答案受检索记忆影响时用脚注标记引用Alice said were moving to Phoenix next week1内联标记[^N] 文末编号脚注携带 RetrievalHit 的node_id和source_ref。不得发明引用——只能引用在命中结果content字段中逐字出现的文本。证据感知合成Evidence-aware synthesis把子代理摘要当作待验证的主张对照其Evidence used、Actions taken、Failed tool calls三节核验。不引入证据自己或子代理实际观察到的不支持的事实、引用、日期、文件内容、能力声明或实时状态声明。结果标注为截断、超大、部分或不可用时不把它当作完整数据来推理请专家抽取所需标识符或重新获取。证据不足以支撑用户要的答案时说明缺什么或发起下一个工具调用而不是猜。涉及当前事实、外部服务能力、演示文稿、市场/加密动作、直接引用、记忆检索或截断输出的高风险最终答案要么委托给所属专家/评审要么把答案明确限制在自己掌握的证据范围内。十一、可以直接迁移的设计清单把这份提示词当作一份可复用的多 Agent 编排设计蓝本以下要素最值得照搬直接优先 分级路由表把直接回答 / 直接工具 / 集成委托 / 专家路由 / 蒸馏输出写成显式决策树并把工作类型 → 工具 → 何时委托固化为表格喂给模型比一段自然语言描述可控得多。范围闸门连接了服务 ≠ 可以碰它用请求是否点名服务做可判定判据并用测试锁定build_scope_gates_integrations_delegation。异步单一入口只保留spawn_async_subagent一种派生方式、永远异步、结果自动送达把结果门控必须同步设为硬规则并有回归测试issue #4681。层级硬编码 双重安全网Chat → Reasoning → Worker三级静态 loader 校验 运行时MAX_SPAWN_DEPTH 3兜底definition_part_01.rs防止任何配置绕过。结构化交接信封统一prompt / objective / evidence / constraints / must_not_assume / expected_output / citation_requirement / model / blocking九字段杜绝子代理凭记忆猜测上下文。回合级调度守卫在暂停请求或预算不足时拒绝新派发避免优雅降级变成整回合硬失败turn_dispatch_guard.rs。批量并发替代串行多次独立检索用并发派生而非串行调用把 ~30s × N 压到约等于最慢一次。证据感知收尾子代理输出 原材料蒸馏 引用 明确证据边界是主控层防幻觉的最后一道闸。如需进一步研究本主题可继续阅读agent.toml能力面配置与设计决策注释、prompt.rs提示词渲染与集成/MCP 区块构造、prompt_tests.rs全部契约测试、spawn_async_subagent.rs异步派生工具实现、turn_dispatch_guard.rs回合调度守卫以及 definition_part_01.rsAgentTier与层级校验。gmail · aliceexample.com · 2026-04-22 · node:abc123↩【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhuman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价