## Summary - 添加第二批核心功能模块的中文翻译(8 个文件):隐私与安全、第三方集成、吉祥物、模型路由、编码器、语音、定时任务、系统与工具 - 修复批次 A 遗留的 12 处未本地化内部链接(因第二批新增目标 `.zh-CN` 文件,之前保留的英文链接现在可指向中文版) - 修复第二批翻译中的 12 处质量问题:错别字、过直译、中英混杂、指向不存在的 `.zh-CN` 链接 - 修复隐私与安全文档中指向 `local-ai.zh-CN.md` 和 `triggers.zh-CN.md` 等尚未翻译文件的错误链接 - 统一 mascot、integrations 等跨模块链接指向,确保中文读者在 zh-CN 文档间流转 - 所有修改仅涉及 `.md` 文档,无代码变更 ## Problem - OpenHuman 中文用户阅读英文文档存在语言障碍 - 第一批汉化(overview + lightweight features)完成后,核心功能模块(integrations、model-routing、native-tools 等)仍无中文版 - 批次 A 的部分链接因目标文件当时未翻译而保留英文版,随着第二批新增 zh-CN 文件,这些链接已过时 ## Solution - 基于英文原文逐文件翻译,遵循术语统一表(vault→存储库、Agent→智能体、LLM/Token 保留英文等) - 翻译完成后运行审计脚本扫描,修复所有未本地化链接、MD040 代码块标识、术语一致性问题 - 对于目标 `.zh-CN.md` 不存在的链接(如 triggers、subconscious、local-ai、agent-coordination),保持指向英文原文,在 Related 中标记后续批次覆盖计划 ## Submission Checklist - [x] I have read the Codex PR Checklist - [x] I have confirmed Type Check passes (`pnpm typecheck`) (N/A: Markdown docs only) - [x] I have confirmed the app builds locally (`pnpm build`) (N/A: Markdown docs only) - [x] I have added tests for this change (N/A: i18n docs do not affect testable logic) - [x] I have updated documentation (N/A: this PR is documentation-only) - [x] I have confirmed no feature flags are required (N/A: no code changes) - [x] I have confirmed Prettier passes (`pnpm format:check`) (N/A: Markdown docs only) ## Impact - Runtime/platform impact: None - Performance/security/migration/compatibility: None ## Related - Follow-up PR(s)/TODOs: - Batch C: subconscious.zh-CN.md, triggers.zh-CN.md, local-ai.zh-CN.md, agent-coordination.zh-CN.md - Batch C: memory-tools.zh-CN.md, meeting-agents.zh-CN.md, developing/cef.zh-CN.md --- ## AI Authored PR Metadata ### Linear Issue - Key: N/A - URL: N/A ### Commit & Branch - Branch: `docs/i18n-batch-b-core-features` - Commit SHA: see PR commits ### Validation Run - [x] `pnpm --filter openhuman-app format:check` — N/A: no code changed - [x] `pnpm typecheck` — N/A: no code changed - [x] Focused tests: N/A - [x] Rust fmt/check: N/A - [x] Tauri fmt/check: N/A ### Validation Blocked - N/A ### Behavior Changes - Intended behavior change: None - User-visible effect: Chinese users can now read core feature docs in zh-CN ### Parity Contract - Legacy behavior preserved: N/A - Guard/fallback/dispatch parity checks: N/A ### Duplicate / Superseded PR Handling - N/A <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Localization** * Updated Simplified Chinese UI strings for vault operations and MCP server/settings. * **Documentation** * Added extensive Chinese documentation covering integrations, mascot/meeting agents, model routing, native tools (voice, web search/scraper, coder, cron, system/tools), memory tree, obsidian wiki, token compression, platform, privacy/security, and subconscious/agent coordination. * **Chores** * Updated ignore rules to exclude AI assistant progress tracking. * Added documentation maintenance and validation scripts. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2450?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: agent:skill-master <skill-master@openclaw> Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
9.5 KiB
description, icon
| description | icon |
|---|---|
| 已连接集成(Gmail 新邮件、Notion 编辑、Stripe charge)的实时事件 作为触发器到达,被分类器分类,并可自动触发智能体操作。 | bolt |
触发器
已连接的集成不仅仅是智能体可以按需读取的地方。它也是实时事件源。当有人给你发邮件、编辑 Notion 页面、在你的某个仓库打开 GitHub Issue、在 Stripe 上给你的卡收费、或在 Slack 上给你发 DM 时,OpenHuman 几乎实时接收该事件,并可以决定是否要对其采取行动。
本页关于这条流水线:触发器如何到达、如何分类、以及触发器如何无需你输入一个字就变成完整的智能体操作。
什么是触发器
触发器是你所连接集成发布的外部事件。常见形态:
| 集成 | 示例触发器 |
|---|---|
| Gmail | GMAIL_NEW_GMAIL_MESSAGE,收件箱中的新邮件 |
| Slack | SLACK_NEW_MESSAGE,你被提及的频道/DM 消息 |
| Notion | NOTION_PAGE_UPDATED,被跟踪的页面有变化 |
| GitHub | GITHUB_ISSUE_OPENED、GITHUB_PULL_REQUEST_OPENED,你的仓库上 |
| Stripe | STRIPE_CHARGE_SUCCEEDED,你账户上的一笔成功 charge |
| 日历 | GOOGLE_CALENDAR_EVENT_CREATED,你日历上的新事件 |
完整集合来自为第三方集成提供支持的 Composio 连接器层。当连接活跃时,相关的触发器订阅会自动接入。
Gmail OAuth 作用域
Gmail 触发器订阅需要所连接 Google 账户的邮件读取权限。新鲜的 OpenHuman Gmail 授权请求 https://www.googleapis.com/auth/gmail.readonly,这样 GMAIL_NEW_GMAIL_MESSAGE 可以启用,原生 Gmail 同步路径可以读取新邮件元数据。
如果旧 Gmail 连接在此作用域被请求之前创建,请从设置中重新连接 Gmail 然后再启用 Gmail 触发器。
触发器从哪里来,从头到尾
┌────────────────────┐
│ third-party API │ Gmail / Slack / Notion / GitHub / ...
└─────────┬──────────┘
│ webhook
▼
┌────────────────────┐
│ OpenHuman backend │ HMAC 验证 webhook,规范 payload
└─────────┬──────────┘
│ Socket.IO 事件("composio:trigger")
▼
┌────────────────────┐
│ Rust core │ 在进程内事件总线上发布 DomainEvent::ComposioTriggerReceived
│(你的笔记本)│
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ Trigger Triage │ 分类:drop / acknowledge / react / escalate
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 以下之一: │
│ - nothing │ ← drop
│ - memory note │ ← acknowledge
│ - Trigger Reactor │ ← react(1-2 个工具调用)
│ - Orchestrator │ ← escalate(完整多步规划)
└────────────────────┘
Webhook 永远不会被原始地到达你的机器。后端持有 OAuth token 并直接从第三方接收 webhook。它进行 HMAC 验证、规范 payload,并通过已认证的 socket 将其转发给你的 Rust core。你的笔记本在总线上看到一个干净的、经过验证的 ComposioTriggerReceived 事件,没有别的。
分类步骤
在任何操作运行之前,每个触发器都经过 trigger_triage 智能体。它的唯一工作是决定系统其余部分应该做什么。
它精确选择四种操作之一:
| 操作 | 发生什么 | 何时使用 |
|---|---|---|
drop |
什么也不做。触发器被静默记录并丢弃。 | 垃圾邮件、重复、不相关的噪音。默认用于你不在乎的东西。 |
acknowledge |
持久化一条短期记忆笔记,不运行智能体。 | 值得记住的被动通知("档案中创建了一个新页面")。 |
react |
使用一到两个工具调用运行 trigger_reactor 智能体。 |
一个小的、单步的副作用:存储一条记忆条目、发布快速确认、将线程标记为已读。 |
escalate |
全权交给带规划能力的 orchestrator 智能体。 | 需要推理、多步、或多技能的任何东西:起草回复、更新多个 Notion 页面、决定如何分类入站 issue。 |
分类智能体拥有与智能体其余部分相同的记忆和工作区上下文。它可以判断触发器是否与你现在正在做的事情相关、涉及哪些人、以及是否是你之前要求 OpenHuman 采取行动的那类事情。
触发器何时变成智能体操作
这就是区分"OpenHuman 有 Gmail 集成"和"OpenHuman 在值班你的收件箱"的部分:
-
react是廉价路径。Trigger Reactor 是一个有严格预算的窄专家,只有几个工具调用。它非常适合:写一条简短的记忆笔记说"看到 Stripe 新增一笔 $84 charge,客户 X,商户 Y"、静默将同一自动提醒标记为已处理因为你本周已经分类过两次、或存储用户以后可能想查找的事件的结构化记录。 -
escalate是重型路径。当分类智能体决定触发器需要真正的工作时,它将自包含的任务描述交给 Orchestrator。orchestrator 可以访问你完整的技能表面、工具、记忆和潜意识循环输出。从那里它可能:- 起草一封重要邮件的回复并排队等待你批准。
- 为入站 issue 拉取相关的 Notion / Linear / Drive 上下文并写一条结构化评论。
- 基于单个入站事件更新三个已连接系统("这个客户的计划在 Stripe 变了,更新 HubSpot,在 #revenue 发帖,并在他们的 Notion 文件中添加一条笔记")。
- 判断触发器意味着一个会议刚刚被预定并为该通话预加载会议智能体。
两种情况下操作都在你的机器上运行,针对你的本地记忆树,使用与智能体其余部分相同的模型路由和工具表面。
为什么要一个分类步骤
跳过分类器并将每个触发器直接管道到 orchestrator 很有诱惑力。这是一个坏主意,有两个原因:
- 大多数触发器是噪音。 一个已连接的 Gmail 账户每小时触发数十个触发器,其中绝大多数是用户不在乎的。在每个上运行 orchestrator 会消耗预算并产生持续的后台活动流。
- 不同的触发器值得不同的上限。 一个自动 Stripe 收据和个人 Slack DM 不应该花相同的 token 数来处理。分类让廉价路径保持廉价,并将 orchestrator 保留给值得它的东西。
分类在快速模型层运行(参见自动模型路由),所以分类本身在亚秒级完成。
配置和退出
- 默认开启。 一旦集成被连接,其触发器自动进入流水线。
- 退出。 分类路径由
OPENHUMAN_TRIGGER_TRIAGE_DISABLED环境变量控制。设为1/true/yes关闭智能体分类并退回到仅被动日志记录。集成本身保持连接;只有自动操作行为被抑制。 - 每触发器设置。 触发器设置(哪些集成和事件类型应该被评估)在设置下管理;底层 RPC 方法是
update_composio_trigger_settings/get_composio_trigger_settings。 - 审计日志。 每个触发器,无论决策如何,都被写入触发器历史,这样你可以看到什么到达了、分类器决定了什么、以及(如果有的话)运行了什么。决策和升级也作为进程内总线上的
TriggerEvaluated/TriggerEscalated事件发布,这意味着核心内部的任何东西都可以订阅它们。
隐私边界
触发器遵循与产品其余部分相同的边界(参见隐私与安全):
- 第三方 token 位于后端,永不在你的笔记本上。
- Webhook 在到达你的机器之前由后端进行 HMAC 验证。
- 触发器 payload 由你的本地 core 处理;分类和任何反应在你机器上运行,针对你的本地记忆树。
acknowledge/react/escalate路径写入的记忆笔记存储在你本地 SQLite 记忆树和 Markdown 存储库中,与任何其他来源相同。
开发者实现指针
- 分类智能体:
src/openhuman/agent/agents/trigger_triage/ - Reactor 智能体:
src/openhuman/agent/agents/trigger_reactor/ - Composio 总线订阅器:
src/openhuman/composio/bus.rs(ComposioTriggerSubscriber) - 触发器历史持久化:
src/openhuman/composio/trigger_history.rs - 领域事件:
DomainEvent::ComposioTriggerReceived、DomainEvent::TriggerEscalated在src/core/event_bus/events.rs中 - 触发器设置 RPC:
src/openhuman/config/中的update_composio_trigger_settings/get_composio_trigger_settings