慣性聚合 関心のあるブログ、ニュース、テクノロジーを効率的に追跡
原文を読む 慣性聚合で開く

おすすめ購読元

Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
博客园 - 叶小钗
MyScale Blog
MyScale Blog
V
Visual Studio Blog
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
I
InfoQ
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python)
Androidオートメーションにトークンを無駄にしないでください
Elliot Gao · 2026-05-24 · via DEV Community

アンドロイドオートメーションにトークンを無駄にしないで

ほとんどのLLM(大規模言語モデル)駆動型アンドロイドオートメーションは、まずモデルに画面を表示して始まります

それは合理的に聞こえます。人間が電話を見て、タップするものを決め、タップします。モデルに同じ視点を与えます

問題は「同じ視点」がコストが高いということです

フルスクリーンショットはコストが高い。生のAndroid UI XMLダンプも静かにそれに近いコストがかかる。モデルはレイアウトの機械構造の数千のトークンを読み取った後、重要な少数のラベルに到達するまでに至る:

Email
Password
Continue

全画面モードを開始 全画面モードを終了

一つのステップでは、その無駄は簡単に無視できる。50ステップのモバイルエージェントの軌跡では、それが請求書となる。

ループ

アンドロイドエージェントは通常こんなことをします:

  1. 現在の画面を読み取ります。
  2. 何をするか決定します。
  3. タップ、タイプ、またはスワイプします。
  4. 次の画面を待ちます。
  5. 繰り返します。

最初のステップがトークン漏洩の始まりです。

uiautomator dumpを使用すると、モデルはこのようなXMLを取得します:

<node index="0" text="" resource-id=""
      class="android.widget.FrameLayout"
      package="com.google.android.apps.nexuslauncher"
      content-desc=""
      checkable="false" checked="false"
      clickable="false" enabled="true"
      focusable="false" focused="false"
      scrollable="false" long-clickable="false"
      password="false" selected="false"
      bounds="[0,0][1440,3120]">

フルスクリーンモードに入ります。 全画面モードを終了

それは一つのレイアウトノードです。エージェントが行動できることについてほとんど何も言っていません

それはUIAutomatorのバグではありません。XMLはアクセシビリティツリーの忠実なシリアライズです。忠実であることは有用であることとは同じではありません

数値

いくつかの普通のAndroid画面では、差はこのように見えます

画面 UIAutomator XML 携帯電話hs ui -i 削減
起動画面ホーム 3,153トークン 246トークン 12.8x
設定画面ホーム 5,762トークン 729トークン 7.9x
設定 ->アプリ 4,050トークン 320トークン 12.7倍

トークン数はtiktokenでGPT-4エンコーディングを使用して計算されました。詳細な説明はAn Android UI Dump for LLMsです。

簡単な説明:典型的なスクリーンはXMLで4,000-6,000トークンのコストがかかる場合、アクションテーブルで数百トークンで表現できることが多いです。

50歩分、それはスクリーン状態の約25万トークンを送信するのと、約2万5千~4万トークンを送信するのとで差がある.

エージェントはどちらの場合も同じ決定を下す.

モデルが実際に必要なもの

UI自動化のために、モデルはDOM形の木構造は必要ない.

それには、行動できるもののリストが必要である.

fill  EditText  "Email"     #email     540,540
fill  EditText  "Password"  #password  540,640  [password]
tap   Button    "Continue"  #continue  540,860

フルスクリーンモードに入る 全画面モードを終了

そのテーブルはモデルに役立つ事実を与えます:

  • どのようなアクションが利用可能ですか。
  • 人間がどのようなラベルを見ますか。
  • どのようなコントロールですか。
  • ツールがタップまたはタイプする場所はどこですか。

モデルは現在答えることができます:

tap "Continue"

全画面モードに入る 全画面モードを終了

レイアウトの祖先をパースしたり、ネガティブブーリアンや完全修飾クラス名、四つの数字の境界矩形を解析する必要はありません.

ルール

LLMツールの出力に対する最適化ルールは単純です.

モデルが次のアクションで使用できない事実をシリアライズしない.

Android XMLはこのルールを常に違反します.

  • clickable="false"エージェントが絶対にクリックしないノードで。
  • enabled="true" はほぼすべてのノードで繰り返されます。
  • FrameLayoutLinearLayout コンテナは空です。
  • android.widget.TextView のような完全なクラス名。
  • エージェントがタップポイントのみが必要な場合に境界矩形を設定します。
  • 言語モデルが読者である場合、パーサーではなく、JSONスタイルのキー繰り返し。

デフォルトを外し、名前を短くし、中心点を計算し、ラベルを保持します.

結果は小さなXMLファイルではありません。それは異なるインターフェースです.

hs ui
hs tap "Continue"
hs wait "Dashboard"

フルスクリーンモードを開始 フルスクリーンモードを終了

スクリーンショットはまだ役立ちます

これはスクリーンショットに対する議論ではありません。

レイアウトが重要な場合、ビジュアル状態が重要な場合、またはアプリがアクセシブルなラベルなしで重要な情報をレンダリングする場合、スクリーンショットは役立ちます

しかし、スクリーンショットはすべてのステップのデフォルトには適していません。それらは大きく、動きが遅く、しばしばモデルが既にAndroidが表示しているテキストのOCRのような作業を強制します

より良いループは次のとおりです

hs ui > /tmp/screen.txt
hs see --size 768 /tmp/screen.jpg   # only when visual context matters

フルスクリーンモードに入る フルスクリーンモードを出る

まずモデルにテキストUIを与える。テキストが不十分な場合にのみ画像を追加する。

これにより通常はトークンを節約でき、アクションの監査が容易になる。

なぜエージェントにとってはテストよりも重要なのか

従来のモバイルテストはトークン数にはあまり関心が持っていない。テストランナーはXMLを読むために費用を払っているわけではない。

LLMエージェントは異なる。各ループステップにはコンテキスト予算とコストがある。プロンプトの半分がUIツリーに満ちた死んだレイアウトノードであれば、モデルは無駄なことに注意を費やしている。

これは三つの箇所に現れる:

  • コスト:繰り返される画面状態が長い軌跡を支配する。
  • レイテンシ:大きなプロンプトは送信と処理に長い時間がかかる。
  • 信頼性:行動指向的な文脈が短いと、モデルが無関係な構造に引っかかる余地が減少します。

エージェントにとって最適なツールの出力は、システムの最も完全な表現ではありません。次に正しい行動を保持する最小の表現です。

実用的なパターン

Androidの場合、パターンはこのようになります:

hs use
hs ui
hs tap "Sign in"
hs fill "Email" "you@example.com"
hs fill "Password" "$PASSWORD"
hs tap "Continue"
hs wait "Dashboard"

フルスクリーンモードを開始 フルスクリーンモードを終了

LLMの場合、重要な引き継ぎはさらに小さいです:

Here is the current Android UI. Pick the next action by label.

fill  EditText  "Email"     #email     540,540
fill  EditText  "Password"  #password  540,640  [password]
tap   Button    "Continue"  #continue  540,860

フルスクリーンモードを開始 フルスクリーンモードを終了

モデルはこれらのノードが3つのネストされたFrameLayout内に存在することを知る必要はありません。それには「続行」がボタンであることを知る必要があります.

関連ガイド

https://handsets.dev/blog/stop-wasting-tokens-on-android-automation/