尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
当 Agent 运行时跑上手机:白泽的移动端双路径设计
白泽是一个旁挂在业务旁、用 Go 写成的单进程 Agent 运行时把大模型、工具、老系统接口和人工卡点收口成可审计的运行。服务端跑稳后移动端没有简单做一个手机版网页而是提供两条路径一条用 Capacitor 壳遥控远端完整操作台零开发即可随身审批另一条把 Go 编排核心通过 gomobile 编译成 Android AAR 与 iOS XCFramework让对话在设备上跑界面由自有 App 自绘。本文结合实际代码讲清两条路径的分工、机上 SDK 的密钥与审批设计以及该如何选择。一、移动端其实有两类需求做移动端之前先把需求分清楚因为它们指向的是两个不同的问题。第一类是运营和内部团队随身处理。他们需要在手机上看对话、做人工审批、改设置、处理登录要的是把电脑上的操作台搬到手机上。这类场景里对话引擎、连接器、审批流都已经在服务端稳定运行手机只需要一个入口不需要重新实现一套。第二类是把 Agent 能力做进自己的产品。这类团队希望有品牌化的原生界面对话与工具循环在设备上直接跑对常驻旁挂服务的依赖更少同时对界面、密钥管理有自己的要求。这里手机不是一个遥控器而是承载能力的本体。这两类需求在界面归属、运行位置、接入成本上都不同。硬要做成一条路要么让想嵌入产品的团队只能打开一个通用页面要么让只想随身审批的团队被迫开发一套原生界面。因此白泽把它拆成两条路径各管一段。二、一张图看清两条路径路径 A 是遥控操作台手机壳不跑对话引擎同源加载远端的完整操作台路径 B 是机上 SDKGo 编排核心被编进 App界面由 App 自绘、对话在端上运行。下面分别展开。三、路径 A一个薄壳零开发拿到完整操作台路径 A 的形态很轻。可以直接在手机浏览器里打开可达的 /ui也可以用仓库里的 Capacitor 工程包一个 WebView套出一个 Android 或 iOS 应用。壳的工作方式是同源加载远端操作台配置好服务端地址后WebView 直接打开远端的 /ui对话、设置、人工审批、连接器、MCP、消息渠道、浏览器登录都和电脑端完全一致不会因为换到手机而少功能。壳本身额外处理的是移动端的琐事——安全区、键盘、用系统浏览器打开登录页。这里有一个值得说明的选择壳默认同源加载远端 /ui而不是在壳里再代理一层 HTTP。因为对话与审批依赖服务端推送事件SSE在壳里做一层 HTTP 代理会把流式响应缓冲起来破坏逐条推送的体验同源加载让流式回复和审批在壳里保持顺畅。从架构上看这个壳不运行任何对话引擎它的定位就是一个遥控器。接入成本接近于零不写移动代码就能让团队在手机上获得和电脑端一致的运营能力。部署时只需要注意对外公开地址要从手机可达手机里访问的是服务端地址而不是电脑上的本地回环地址。四、路径 B把 Go 编排核心编译进 App路径 B 面向的是另一种诉求要把 Agent 能力嵌进自己的产品并且希望界面是原生的、品牌化的。白泽的做法是把 Go 编排核心用 gomobile 编译成 Android 的 AAR 和 iOS 的 XCFramework再提供一套对绑定友好的公开 API绑定包名为 mobileagent。这里有一个工程细节gomobile 无法绑定 Go 的 internal 包所以白泽把对绑定友好的接口放在一个独立的顶层包里重新导出内部实现仍留在 internal 下绑定层只暴露 App 真正需要的那几个方法。机上跑的是一套精简的 OpenAI 兼容对话与工具循环。App 与 SDK 之间的分工很清晰App 负责布局、主题、历史列表、输入框、审批卡片负责密钥的安全存放和远端配置拉取策略负责线程管理网络调用不阻塞主线程mobileagent 负责会话、对话、工具循环以及审批的暂停与继续所有结果以 JSON 字符串返回不碰任何 UI。调用面也很收敛Configure 用来配置一次模型地址、密钥和模型名Send 跑一轮对话遇到需要审批的工具会停下Approve 与 Deny 分别处理批准与驳回。除此之外还有 ChatOnce 用于不走工具的单轮连通测试、Reset 清空内存历史、NewAgent 创建独立会话、MessageCount 查看消息条数、HasAPIKey 判断内存里是否已有密钥。五、机上 SDK 为什么是精简的机上 SDK 刻意没有把完整的服务端运行时搬进手机。它在端上只保留内存会话和一个精简的工具面当前有 get_time 和 http_get 两个工具get_time 直接执行返回时间http_get 则必须先经过人工审批。完整的连接器、MCP 桥接、消息渠道和面向运营的审批产品面留在服务端 Runtime 承担。这是一个分工而不是能力裁剪。服务端 Runtime 面向的是对接很多系统、由团队持续运营的场景需要完整的连接器、审计和运营面机上 SDK 面向的是贴身、轻量、嵌入自有产品的场景需要的是一个可控的对话循环和最小的工具集合。把两件事分开机上组件足够小、足够可控团队也能在上面自绘体验需要完整能力时App 一样可以回到服务端 Runtime。工具循环本身也设了边界单轮工具循环有轮数上限当前为 8 轮达到上限就结束并返回避免模型在端上无限循环。整个会话与密钥只存在于内存不持久化在 Go 绑定层里重置或退出后即清空。六、密钥交给系统保险箱而不是 Go 包机上方案里有一个明确的设计Go 绑定层只在内存里持有密钥绝不把它写进磁盘。需要持久化的部分交给 App 所在平台原生的保险箱。Android 侧的样板使用 EncryptedSharedPreferences主密钥采用 AES256-GCM 方案键和值分别按 AES256-SIV 与 AES256-GCM 加密后存放保存的内容包括模型地址、密钥、模型名和配置地址并提供单独清除密钥的方法。iOS 侧对应的是 Keychain按服务名与账号名存储并设置为仅本机、首次解锁后可访问。使用流程是App 启动或需要时从系统保险箱里取出密钥再通过 Configure 注入机上运行时的内存Go 绑定层全程不负责落盘。这样分工的原因在于跨平台的 Go 绑定层并不能保证密钥存储的安全等级而 EncryptedSharedPreferences 和 Keychain 才是平台认可的安全边界由硬件支持或系统统一管理。绑定层不越界去做自己做不好的存储把安全交给平台App 也能完全掌握密钥的生命周期。七、前台人工审批用 JSON 状态协议表达机上的人机协同通过一个简单的 JSON 状态协议来表达。Send、Approve、Deny 的返回都是 JSON 字符串由 App 自己解析并决定界面done本轮结束界面展示 text 字段给出的回复needs_approval遇到待批工具附带 call_id、name、args_json 和 summaryApp 据此渲染审批卡片用户点批准就调用 Approve 并传入 call_id点驳回就调用 Deny在用户做出选择之前不应再发起新的 Senderror执行失败界面展示 message。审批摘要做成可读的一句话例如 http_get 会生成 “GET” 加上截断后的地址让用户在手机上一眼看清要访问的目标。当前需要审批的 http_get 是一个只读工具但即使是只读白泽仍要求显式批准并在执行时加了一组护栏只允许 http 和 https 协议请求有超时控制当前 15 秒重定向次数有上限当前 3 次响应体有大小上限当前 256KB超出会截断并标记返回结果里还带最终地址 final_url便于核对重定向后的落点。驳回则完全不发起网络请求直接让对话继续。把放权给端上模型这件事收窄是机上设计的核心思路工具保持只读、动作需要显式批准、网络边界清楚端上的自主能力就被约束在一个安全范围内。八、远端配置、多会话与桌面调试为了让 App 不用硬编码模型地址和模型名绑定层提供了远端配置能力FetchRemoteConfig 从一个你自己的配置地址拉取 JSONApplyRemoteConfigJSON 把配置合并进内存会话配置里可以包含模型地址、模型名以及可选的密钥。配置的拉取策略由 App 决定SDK 只负责应用。多会话场景使用 NewAgent 拿到独立实例而不是共用包级默认会话每个实例各自维护自己的历史和待批状态。开发阶段可以先不绑手机白泽提供了桌面调试入口直接在电脑上跑绑定层还内置了一个假模型用于先把界面和审批卡片调通再换成真实模型。Android 模拟器访问宿主机时用模拟器约定的本机地址即可。九、怎么选两条路径的选择标准很直接要完整的设置页、连接器和运营审批流程希望手机只是一个随身入口选路径 A要品牌化的原生界面、对话在设备上运行、对常驻旁挂依赖更少选路径 B并以仓库里的空壳作为调用样板自绘 UI两者也可以并存运营和内部团队用路径 A面向终端用户的 App 用路径 B。结语移动端的两条路径本质上是把运营随身操作台和端上嵌入式 Agent这两个不同的问题分开来解前者追求零开发、功能与电脑端一致后者追求原生体验、端上可控和安全的密钥边界。机上 SDK 的几个关键决定——只在内存持有密钥、只读工具仍需审批、网络动作有明确护栏、会话与工具循环保持精简——都是围绕让能力在端上安全地贴身运行展开的。白泽是一个持续迭代的开源项目Go 编写MIT 协议移动端的 Capacitor 壳、Android 与 iOS 空壳、机上绑定以及对应的编译脚本都已在仓库中。仓库地址https://github.com/rebornace/baize 。如果你也在做 Agent 落地尤其是在思考怎么把能力安全地放到手机上欢迎在评论区交流你在移动端和密钥管理上的实践我会持续跟进并把后续进展写下来。
RELATED

相关推荐

失控、操纵、侵私:人工智能业务的现实风险

失控、操纵、侵私:人工智能业务的现实风险

上一篇,我们讨论了人工智能自身的技术缺陷,包括模型幻觉、提示词注入、数据投毒,以及算法、数据和运行环境等环节可能存在的安全隐患。但AI安全问题并不会止步于技术本身。当人工智能进入真实业务场景后,可能产生哪些具体危害&…

📅 2026/10/27 2:01:19
PurrPurr AI项圈拆解:499元硬件+年订阅,宠物情绪价值的续费生意能跑通吗

PurrPurr AI项圈拆解:499元硬件+年订阅,宠物情绪价值的续费生意能跑通吗

【摘要】以PurrPurr AI宠物项圈为核心样本,覆盖27种行为识别标签、3档订阅定价、3阶段留存验证模型,拆解宠物智能硬件从功能监测转向情绪叙事的创业路径,量化分析硬件毛利与订阅续费的双轮结构,给出4条按时间轴排布的失效边界&…

📅 2026/10/27 2:01:19
小白程序员必看:从0理解真正的Agent与大模型背后的工程系统

小白程序员必看:从0理解真正的Agent与大模型背后的工程系统

本文深入剖析了真正的Agent与大模型背后的工程系统,揭示了两者之间的核心差异。文章详细拆解了Agent从接收用户目标到最终执行结果的20步全链路,并介绍了六个关键角色(用户、智能体、技能层、大模型、模型上下文协议、工具)的分工…

📅 2026/10/27 1:56:19
MORE NEWS

更多资讯

📰

Kubernetes Pod Not Found报错排查:命名空间、上下文与标签选择器实战

1. 这个报错到底在说什么:从一次真实的排查现场说起Error: Pods pod-name Not Found这个提示,几乎每个跟 Kubernetes 打过交道的人都见过。它不像 CrashLoopBackOff 那样有一堆日志可以翻,也不像 ImagePullBackOff 那样指向明确,它…

📰

PostgreSQL主从流复制与pgpool-II高可用部署实战

简介:PostgreSQL 主从流复制与 pgpool-II 高可用部署文档,面向数据库运维工程师与 DBA,解决主备数据实时同步、读写分离与主库故障自动切换的问题。内容从方案综述入手,讲清主库 WAL 日志经 walsender 推送至备库 walreceiver 落盘…

📰

Java数据结构与算法分析:递归、复杂度与链表指针精解

简介:面向使用《数据结构与算法分析(Java语言描述)》第三版的学生与自学者,这份习题答案文档可用于课后对照、期末复习及算法基础查漏补缺,适合正在巩固Java数据结构、递归思想和复杂度分析的读者。压缩包内仅含1个doc…

📰

高效调试方法论:从基础工具到AI辅助的BUG终结术

1. 项目概述:为什么我们需要"BUG终结者"?在软件开发领域,BUG就像影子一样伴随着每个程序员。我见过太多团队在调试上浪费的时间甚至超过实际开发时间。最近一个统计显示,开发者平均花费25%的工作时间在调试上&#xff0…

📰

Linux标准IO库:原理、优化与实战应用

1. 为什么标准IO在Linux编程中如此重要?在Linux系统编程中,输入输出(IO)操作是最基础也是最频繁的操作之一。标准IO库(stdio)作为C语言标准库的一部分,提供了一套高效、可移植的文件和终端操作接…

📰

跨平台扫码功能实现方案与技术解析

1. 项目概述扫码功能在现代移动应用中几乎成为标配,但不同平台的技术实现差异巨大。最近我在一个跨平台项目中,需要同时在常规H5页面、微信H5、微信小程序和原生App中实现扫码功能,踩了不少坑也积累了一些经验。本文将分享四种场景下的完整实…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬