我用 iPhone 15 Pro + Gemma 4 跑通 3 个 Agent Skill,本地 LLM 第一次会调工具

cover

哈喽,我是飞飞。

昨天我刚发完 PocketPal + Qwen3.5-0.8B 在 iPhone 15 Pro 上跑 27 tok/sec 那篇,今天又被 Google 这个 Edge Gallery 拽了进去。

这次不一样。手机上第一次有了能调工具的本地 LLM app。

今天下午 1:53 我在 iPhone 15 Pro 上装好 Edge Gallery、下了 Gemma-4-E4B-it、跑了 3 个 Agent Skill:QR 码生成、Google 地图嵌入、Mood Tracker 心情记录。每一个都跑通了。

5 张截图我会按顺序贴进来。

Simon Willison 公开评价这件事:「first time I’ve seen a local model vendor release an official app for trying out their models on iPhone」。

我同意他的判断,但还想加一句:这是 mobile on-device AI 的分水岭。

今天下午 1:53 我跑的第一个 prompt,自我介绍那 7.5 秒让我重写本地 LLM 的判断

打开 Edge Gallery、选 Gemma-4-E4B-it 模型、点 Agent Skills 模式、输入「你好,请介绍下你自己」。

7.5 秒后模型回答:「I am an AI assistant designed to help you by answering questions and completing tasks using a set of specialized skills.」

这句回答有一个细节我盯着看了 30 秒:「a set of specialized skills」。

PocketPal 跑 Qwen3.5-0.8B 的时候,同样问”介绍你自己”,模型回答的是「我是通义千问,擅长 Python / JavaScript / Java、多模态分析」。这是一个聊天助手的自我介绍。

Gemma 4 的回答里「a set of specialized skills」是真有所指的。下面 chat 输入框旁边那个 Skills 按钮,点开就是已注册的 skill 清单。模型知道自己手里有工具可调

Edge Gallery 上 Gemma-4-E4B-it 自我介绍 + 第二个 prompt 触发 qr-code skill 加载

下面那个第二个 prompt 触发的 Loaded skill “qr-code” 加载动画就是这件事的实锤。

Gemma 4 的 “E” 不是 Edge,是 Effective parameters

Gemma 4 的 “E” 不是 Edge,是 Effective parameters。这句话我反复确认过 Google 官方博客和 DeepMind 模型卡,没看错。

Per-Layer Embeddings (PLE) 架构是怎么回事?说人话:每层 decoder 自带一份小 embedding 表,把「加更多层」换成「每层更聪明」。结果是 4B 参数的模型能塞下 vision + audio + 128K context + tool calling,跑赢比它大 20 倍的同代模型。

Gemma 4 家族 4 个尺寸:E2B / E4B 给手机和 edge 设备、26B A4B (MoE) / 31B (dense) 给 PC 和工作站。Apache 2.0 license,2026-04-02 官方发布。

E2B 内存占用小于 1.5 GB RAM,128K context,全模态(text + image + audio + video)。这个尺寸塞进 iPhone 是真的塞得下,不是宣传。

一个 Play Store 用户实测 E2B 在 Snapdragon 旗舰上跑出 142 tok/s。Raspberry Pi 5 也能跑(prefill 133 tok/s、decode 7.6 tok/s),上限够低。

跟前代 Gemma 3 比,Gemma 4 最大的差别是「entire family moves beyond simple chat to handle complex logic and agentic workflows」(Google 官方原话)。不再是聊天模型,是 agent 模型。 E2B 和 E4B 原生支持 tool calling,这是 PocketPal 上跑的 Qwen 3.5-0.8B 做不到的事。

iOS 走 App Store 装、Android 走 Play Store 或 GitHub APK 两条路

iOS 端:App Store 搜「Google AI Edge Gallery」(开发者 Google LLC,App Store ID 6749645337)。

免费下,要求 iOS 17 或更新版本。iPhone 15 Pro 及以上(8GB RAM)才能流畅跑 E4B。Apple Intelligence 也是这个硬件门槛,不是巧合。

我自己的 iPhone 15 Pro 装好之后第一次开 app 时 prompt 让我选模型下载。Gemma 4 E4B 大约 3.6 GB,Wi-Fi 下载 4 分钟。下完点 Load Model 就能聊。

Android 端:Play Store 搜同名 app,要求 Android 12+。

或者去 github.com/google-ai-edge/gallery/releases 直装 APK(最新版本 1.0.11,加入了 Gemma 4 + Agent Skills + Thinking Mode)。Play Store 稳但版本慢一档;GitHub 直装最快但要自己开「未知来源安装」权限。

Snapdragon 8 Gen 3 及以上的 Android 旗舰跑 E4B 比 iPhone 15 Pro 还快。Qualcomm Dragonwing IQ8 NPU(说人话就是手机里专门跑 AI 的加速芯片)实测 prefill 3700 tok/sec、decode 31 tok/sec,比 iPhone 15 Pro 走 GPU 那条路快一个数量级。

QR 码 skill 13.2 秒把 vance.xin 印成二维码

第一个 skill 我让它做了件低门槛的事:把 https://www.vance.xin 生成二维码。

prompt 一行:「请帮我将下面的网址生成二维码:https://www.vance.xin」。

Gemma 4 识别意图、加载 qr-code skill、调用 JS 函数、把生成的二维码作为消息回给我。整个过程 13.2 秒。

Edge Gallery 跑 qr-code skill 生成 vance.xin 二维码,耗时 13.2 秒

完整结果是:二维码 + 模型说的「I have successfully generated a QR code for the URL https://www.vance.xin」。chat 上方还能看到「Called JS skill “qr-code/index.html”」标识告诉你模型确实调了这个 skill。

13.2 秒不算快。但这件事里 GPU 跑了两段推理(识别意图调 skill + 生成解释文本)+ 一段 JS 执行 + 一次 webview 渲染。同样的活在 Snapdragon NPU 上 < 3 秒能跑完。

awesomeagents.ai 的实测原话:「LiteRT-LM runtime processes 4,000 tokens across two Agent Skills in under 3 seconds」on NPU。这是 Google 给这套系统设计的目标速度,iPhone 15 Pro 走 GPU 通道是这个目标的 4-5 倍慢。

但慢不影响这件事成立。

二维码本身用扫码 app 扫一遍,能跳转到 vance.xin。这件事说明 skill 跑出来的是真东西,能扫能用。

云端 GPT-4o 也能生成二维码,但这次是 4B 参数的本地模型在没网的手机上做完。

interactive-map skill 把 Google 地图嵌进 chat

第二个 skill 更狠。

我输入「请帮我搜索并打开上海市的地图」。Gemma 4 调用 interactive-map skill,直接把 Google 地图作为 widget 渲染在 chat 里

Edge Gallery 跑 interactive-map skill 在 chat 里嵌入上海市 Google 地图

嘉定区、宝山区、徐汇区、青浦区、松江区都清晰显示,地图带 +/- 缩放、4 个方向键、全屏切换按钮、「在 Google 地图中打开」链接。

这是我第一次看到本地 LLM 把外部 webview 嵌入对话。

以往要做这件事得走两段:聊天 app 让 LLM 输出地图链接、用户复制到浏览器打开。Agent Skills 把这两段连成一段,LLM 调 skill、skill 把 widget 渲染回 chat,整个流程不用切 app。

这个 skill 的实现:skill 目录里有 SKILL.md(告诉模型这个 skill 干什么)+ index.html(嵌入 Google Maps iframe)+ JS 暴露 ai_edge_gallery_get_result 函数返回结果。简单粗暴。

实际场景我能想到的:出差查机场附近酒店密度、跑步前看路况、给朋友指路。每一件事在 iPhone 上现在都要切到地图 app,Edge Gallery 把这步省了。

但慢仍然是问题。我在 iPhone 15 Pro 上跑这个 prompt 用了 11 秒(模型决策 + skill 加载 + Google Maps iframe 初始化)。如果走 Snapdragon 旗舰 NPU,这件事 < 3 秒能跑完。

mood-tracker skill 一次 prompt 记两天心情 + 渲染 dashboard

第三个 skill 是我刻意挑的「多步任务」测试。

我输入一句话:「Log yesterday’s mood as 2 because it was raining quite heavily, and log today’s mood as 9 because I had a great time playing pickleball again. Then show me my mood dashboard.」

这句 prompt 里实际是 3 个动作:记昨天心情 2 分、记今天心情 9 分、显示 dashboard。

Edge Gallery 跑 mood-tracker skill 一次 prompt 记两天心情 + 渲染 dashboard

Gemma 4 调用 mood-tracker skill 一次性把三件事都干了。

Mood Tracker dashboard 全屏视图:May 13 得 9 + May 12 得 2

dashboard 全屏视图里有绿色 9 SCORE + 「I had a great time playing pickleball again」、Mood Journey 列出 May 13 得 9 / May 12 得 2「it was raining quit…」。

这件事的技术含量在哪里:本地 LLM 把三个动作翻译成 skill API 调用 + 三次 state mutation + 一次 UI 渲染,全程无网络。

比对 ChatGPT 网页版的 GPT-4o,同样的 prompt 它也能干,但要走 OpenAI 服务器一圈。Gemma 4 在我手机上完成。

跑完这个 prompt 我做了一件事:把 Wi-Fi 关了再重试。dashboard 还在、记录还在、能继续 log 心情。这套 mood-tracker skill 把数据存在 webview 的 localStorage 里,跟模型一样在手机本地。

这跟 Apple Health 或者 iOS 自带的 Mood 应用对照看,价值在哪里:Health 那一套用 iCloud 同步,Mood 跟 Apple ID 绑定。Edge Gallery 这个 mood-tracker skill 是开源的(GitHub 上看得到代码),数据完全在你 webview 沙箱里。

讲到这里说说 skill 怎么自己写。

每个 skill 是一个文件夹,里面有两份东西。

SKILL.md 是 metadata + 激活描述(activation description)。激活描述是写给模型看的,告诉它「什么 prompt 应该调这个 skill」。例子:「When the user wants to generate a QR code from a URL or text, call this skill」。

scripts/index.html 是 JS 实现(也可以是 React/Vue 打包后的 HTML)。skill 被调用时 Edge Gallery 把这个 HTML 加载到一个隐藏 webview,全局调用 ai_edge_gallery_get_result 这个 async 函数,函数返回的 HTML 渲染回 chat。

需要 API key 的 skill 怎么处理?走 native dialog 提示用户输入,不通过 LLM prompt 传。这条设计避免了 key 被模型 leak 的问题。

加载 custom skill 有两条路:URL 加载(适合公共 skill)、push 到设备 Download 目录(适合私有 skill)。

GitHub 已经有 StrinGhost/gemma-skills 这种第三方 skill 仓库在长。Edge Gallery 内置 8 个 official skill:interactive-map / wikipedia / qr-code / hash / mood-tracker / mnemonic-password-generator / text-spinner / kitchen-adventure。

每个 skill 用户都可以单独开关。点 chat 输入框旁边的 Skills 按钮,会弹出已注册 skill 清单,每个 skill 旁边是 toggle 开关。模型只会调当下打开的 skill,关掉的不会被选中。这个细节是给 reliability 兜底的。

我手机上跑 Gemma 4 Agent Skills 的时候,电脑上还开着我前天刚写的 Anthropic Agent View 文章草稿。

5/11 Anthropic 发 Agent View:把 CLI 上多 agent 管理收编成一个 dashboard。

5/13 我装 Edge Gallery(4 月发的、今天第一次认真上手):把本地 LLM 升级成 agent 调工具。

两件事方向完全一致:把 LLM 从 chat tool 升级成 agent operations layer

一个在 CLI、一个在手机。一个让你管多个 cloud agent、一个让你的本地 LLM 调工具。

放在同一周里看,2026 年的 5 月可能会被记成「LLM 全面 agent 化」的转折周。PocketPal 还在做聊天的事(快、好用、能力上限就是聊天);Edge Gallery + Gemma 4 跨过了那条线。

HealthKit skill 和 skill chain 这两个具体问题我还没回答

Skill 能不能调 Apple HealthKit 是一个。

我手机上有半年的步数、心率、睡眠数据。如果有个 skill 能在 Edge Gallery 里跑 Gemma 4 + 读 HealthKit + 渲染健康 dashboard,整套全在手机本地、数据不上云,这才是 on-device AI 的真用场。

skill chain 能不能链多个是另一个。我让 mood-tracker 记心情 + 让 wikipedia skill 查「为什么下雨人会抑郁」+ 让 hash skill 把结果加密,这 3 个 skill 能不能在一句 prompt 里串起来跑?

我下午试了一次失败,但不确定是 prompt 写法不对,还是 Gemma 4 E4B 的 chain 能力还有上限。

留个问题给你:你手机上现在装着哪个本地 LLM app?聊天用的是 PocketPal / MLC / Ollama 这种纯聊天 app,还是已经在试 Edge Gallery 这种带 skill 的?

或者反过来:**如果让你写一个 Agent Skill,你最想做什么?**(我自己最想做的是把 Things 3 的 todo 列出来 + 自动调度)

评论区告诉我你的答案。