<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Google on KnightLiブログ</title>
        <link>https://knightli.com/ja/tags/google/</link>
        <description>Recent content in Google on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Fri, 29 May 2026 15:25:32 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/google/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Chrome Enterprise Premium が MCP に対応：AI agent がブラウザのセキュリティ管理に参加</title>
        <link>https://knightli.com/ja/2026/05/29/chrome-enterprise-premium-mcp-server-ai-agents/</link>
        <pubDate>Fri, 29 May 2026 15:25:32 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/29/chrome-enterprise-premium-mcp-server-ai-agents/</guid>
        <description>&lt;p&gt;Google Security は Chrome Enterprise Premium MCP Server を公開し、Chrome Enterprise Premium の一部のセキュリティ管理機能を MCP 互換の AI agent に開放しました。これはオープンソースの MCP Server であり、企業の IT チームとセキュリティチームが Gemini CLI などのツールを通じて、自然言語で Chrome ブラウザのセキュリティ管理タスクを照会、分析、処理できるようにすることを目的としています。&lt;/p&gt;
&lt;p&gt;これは「ブラウザにチャットボットを追加する」ものではありません。企業向けブラウザ管理のバックエンドを agent のツールチェーンにつなぐものです。大企業にとって、ブラウザはすでに従業員が SaaS、社内システム、機密データにアクセスする主要な入口です。AI agent がポリシー、ログ、セキュリティ状態を理解できるようになる意味は、見た目以上に大きいものです。&lt;/p&gt;
&lt;h2 id=&#34;何ができるのか&#34;&gt;何ができるのか
&lt;/h2&gt;&lt;p&gt;Google の説明によると、Chrome Enterprise Premium MCP Server はチームの次のような作業を支援できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chrome Enterprise Premium 環境内の設定とセキュリティ状態を照会する&lt;/li&gt;
&lt;li&gt;企業向けブラウザ管理の健全性を確認する&lt;/li&gt;
&lt;li&gt;セキュリティログとイベントの手がかりを分析する&lt;/li&gt;
&lt;li&gt;DLP 関連ルールの設定や確認を支援する&lt;/li&gt;
&lt;li&gt;自然言語で調査と対応の提案を生成する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの機能は、agent が管理者に代わって自由に判断できるという意味ではありません。より正確には、これまで管理コンソール、ドキュメント、ログシステムに分散していた情報をツールインターフェースとして AI アシスタントに公開し、調査とガバナンスの流れをより一貫したものにします。&lt;/p&gt;
&lt;h2 id=&#34;なぜブラウザセキュリティは-agent-に向いているのか&#34;&gt;なぜブラウザセキュリティは agent に向いているのか
&lt;/h2&gt;&lt;p&gt;ブラウザセキュリティ管理は本質的に複数のコンテキストを扱う問題です。1 回の異常なアクセスには、デバイス状態、ユーザー ID、ブラウザバージョン、拡張機能、DLP ポリシー、アクセス先サイト、ダウンロード動作、ログイベントが関係する可能性があります。&lt;/p&gt;
&lt;p&gt;人手で処理する場合、セキュリティ担当者は複数のページを行き来しながら、どのポリシーがどのユーザーに影響するかも覚えておく必要があります。AI agent が MCP を通じてこれらの状態を読み取れるなら、初期の要約と調査を担えます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まず環境の健全性を確認する。&lt;/li&gt;
&lt;li&gt;異常な設定や高リスク項目を見つける。&lt;/li&gt;
&lt;li&gt;ログに基づいてユーザー、デバイス、アクセス行動を関連付ける。&lt;/li&gt;
&lt;li&gt;次の調査ステップを提案する。&lt;/li&gt;
&lt;li&gt;管理者が実行可能なポリシー調整案を作るのを助ける。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この種のタスクは単なるテキスト生成ではありません。実際のシステム状態の集合を中心に、照会、判断、絞り込みを繰り返す作業です。MCP はこうした作業を担うのに適しています。&lt;/p&gt;
&lt;h2 id=&#34;gemini-cli-との関係&#34;&gt;Gemini CLI との関係
&lt;/h2&gt;&lt;p&gt;Google は記事の中で、この MCP Server を Gemini CLI から利用できると述べています。Gemini CLI は開発者や技術ユーザー向けのコマンドライン AI ツールであり、MCP Server はそこに Chrome Enterprise Premium の管理機能へアクセスするためのインターフェースを与えます。&lt;/p&gt;
&lt;p&gt;この組み合わせは象徴的です。CLI が対話の入口を提供し、MCP がツールプロトコルを提供し、バックエンドサービスが実データと操作能力を提供します。最終的にユーザーが目にするのは自然言語のコマンドですが、その背後では agent が企業のセキュリティシステムを呼び出しています。&lt;/p&gt;
&lt;p&gt;この形は今後さらに一般的になる可能性があります。AI ツールはもはや「スクリプトを書くのを手伝う」だけではなく、制御されたインターフェースを通じてクラウドプラットフォーム、セキュリティプラットフォーム、SaaS 管理、社内運用に参加できるようになります。&lt;/p&gt;
&lt;h2 id=&#34;企業導入で注意すべきこと&#34;&gt;企業導入で注意すべきこと
&lt;/h2&gt;&lt;p&gt;セキュリティ管理系の MCP Server には明確な価値がありますが、リスクにも真剣に向き合う必要があります。&lt;/p&gt;
&lt;p&gt;まず権限の境界です。agent が何を照会できるのか、何を変更できるのか、人による確認が必要かどうかを明確に制限しなければなりません。次に監査です。セキュリティプラットフォーム上の自動化された提案や操作は、後から追跡できるよう記録を残すべきです。最後に、プロンプトとデータ漏えいのリスクがあります。企業は、どのログ、ポリシー、ユーザー情報がモデルのコンテキストに入るのかを確認する必要があります。&lt;/p&gt;
&lt;p&gt;より堅実な進め方は、まず健全性チェック、ログ要約、ポリシー説明、調査提案のような読み取り専用の場面で使うことです。チームが慣れてから、承認を必要とする設定変更機能を段階的に開放していくのがよいでしょう。&lt;/p&gt;
&lt;h2 id=&#34;私の見方&#34;&gt;私の見方
&lt;/h2&gt;&lt;p&gt;Chrome Enterprise Premium MCP Server は、MCP が企業セキュリティの現場に入っていく重要なシグナルです。&lt;/p&gt;
&lt;p&gt;これまでの MCP の例の多くは、開発者ドキュメント、コードリポジトリ、ローカルツールに集中していました。Google がそれをブラウザのセキュリティ管理に置いたことは、MCP がより本格的な企業運用とセキュリティプロセスに入りつつあることを示しています。ここで重要なのは、AI を「もっと会話上手」にすることではありません。AI agent が制御されたツールインターフェースを通じて、実際のシステム管理に参加できるようにすることです。&lt;/p&gt;
&lt;p&gt;すでに Chrome Enterprise Premium を使っている企業なら、この MCP Server は注目に値します。短期的には、セキュリティ状態の照会、ログ調査、ポリシー理解に最も向いています。長期的には、企業セキュリティプラットフォームが AI agent と接続する標準的な方式の一つになるかもしれません。&lt;/p&gt;
&lt;p&gt;原文リンク：&lt;a class=&#34;link&#34; href=&#34;https://blog.google/security/bringing-ai-agents-to-chrome-enterprise-security-management/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bringing AI agents to Chrome Enterprise security management&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Google Pay と Wallet が Developer MCP Server を公開：決済連携を AI アシスタントにつなぐ</title>
        <link>https://knightli.com/ja/2026/05/29/google-pay-wallet-developer-mcp-server/</link>
        <pubDate>Fri, 29 May 2026 15:24:18 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/29/google-pay-wallet-developer-mcp-server/</guid>
        <description>&lt;p&gt;Google Developers が Google Pay と Wallet Developer MCP Server を公開した。これは Google Pay API と Google Wallet API を連携している開発者向けのもので、公式ドキュメント、アカウント状態、連携チェック、一部のビジネス指標を MCP 対応の AI 開発ツールにつなぐ。&lt;/p&gt;
&lt;p&gt;この種の更新はモデル発表ほど派手には見えないが、開発者にとってはかなり実用的だ。決済やウォレットの連携では、「コードを書けるかどうか」よりも、ドキュメントの細かさ、設定項目の多さ、審査要件、分散したエラーフィードバックが問題になりやすい。MCP Server の価値は、AI アシスタントがより実際の文脈に近い場所から開発者の問題調査を支援できる点にある。&lt;/p&gt;
&lt;h2 id=&#34;何を解決するのか&#34;&gt;何を解決するのか
&lt;/h2&gt;&lt;p&gt;開発者が Google Pay や Google Wallet を導入するときは、通常、複数の場所を行き来する必要がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;公式ドキュメントとサンプルコードを確認する&lt;/li&gt;
&lt;li&gt;アカウントと加盟店設定を確認する&lt;/li&gt;
&lt;li&gt;リクエストパラメータと返却エラーを確認する&lt;/li&gt;
&lt;li&gt;連携が要件を満たしているか検証する&lt;/li&gt;
&lt;li&gt;呼び出しの挙動と主要指標を観察する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらを単なる Web ドキュメントとして扱うだけなら、AI アシスタントにできることは概念の説明やサンプル生成にほぼ限られる。MCP Server に接続すると、アシスタントはツールを通じてより具体的な情報にアクセスでき、現在のプロジェクト状態に近い提案を出せるようになる。&lt;/p&gt;
&lt;h2 id=&#34;mcp-がここに適している理由&#34;&gt;MCP がここに適している理由
&lt;/h2&gt;&lt;p&gt;MCP の役割は、AI アプリケーションに標準化されたツールインターフェイスを提供することだ。Google Pay や Wallet のような開発者向け製品では、「ドキュメント + 状態 + 検証」を組み合わせたタスクを扱うのに非常に向いている。&lt;/p&gt;
&lt;p&gt;たとえば、開発者は MCP 対応の AI ツールに次のような質問への回答を手伝わせることができる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;現在の連携で不足している設定は何か&lt;/li&gt;
&lt;li&gt;ある Google Pay リクエストが失敗した理由は何か&lt;/li&gt;
&lt;li&gt;Wallet pass の定義で要件を満たしていない可能性があるフィールドはどれか&lt;/li&gt;
&lt;li&gt;コードサンプルを現在のビジネス要件に合わせてどう変更すべきか&lt;/li&gt;
&lt;li&gt;連携を本番公開する前に、まだ何を確認すべきか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;こうした質問を大規模モデルの記憶だけに頼って答えるのはリスクが高い。公式ツールと現在のアカウント情報を組み合わせられれば、回答はより実行しやすいものになる。&lt;/p&gt;
&lt;h2 id=&#34;ai-コーディングワークフローへの意味&#34;&gt;AI コーディングワークフローへの意味
&lt;/h2&gt;&lt;p&gt;今回の公開は、AI コーディングアシスタントが「コードを読む」段階から「プロダクトシステムを読む」段階へ進んでいるという流れも示している。&lt;/p&gt;
&lt;p&gt;これまで開発者が AI に決済機能の連携を手伝わせる場合、たいていはドキュメントの断片、エラーログ、コードを貼り付けるしかなかった。AI は説明できるが、現在の連携の実際の状態を必ずしも把握しているわけではない。MCP Server はこの能力を一歩進め、AI アシスタントがプロダクトの連携環境そのものを中心に作業できる可能性を広げる。&lt;/p&gt;
&lt;p&gt;これは特に次のような場面で価値がある。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新規プロジェクトで初めて Google Pay や Wallet を導入する。&lt;/li&gt;
&lt;li&gt;既存プロジェクトを新しい API や設定方式へ移行する。&lt;/li&gt;
&lt;li&gt;本番公開前に連携チェックを行う。&lt;/li&gt;
&lt;li&gt;エラーコード、審査上の問題、設定の不一致が起きたときに素早く原因を特定する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;チームにとっての利点は、数ページ分のドキュメント確認を省けることだけではない。「ドキュメントの理解は正しいが、現場の設定が一致していない」という摩擦を減らせることにある。&lt;/p&gt;
&lt;h2 id=&#34;開発者の判断を置き換えるものではない&#34;&gt;開発者の判断を置き換えるものではない
&lt;/h2&gt;&lt;p&gt;決済やウォレット関連の連携には、セキュリティ、コンプライアンス、ユーザー体験の要件がある。MCP Server は AI アシスタントが情報をより速く見つけ、状態を確認し、提案を生成する助けになるが、最終的には開発者がコード、セキュリティ方針、加盟店設定、本番公開フローを確認する必要がある。&lt;/p&gt;
&lt;p&gt;特に決済フローでは、AI が一見もっともらしい提案を出したからといって、そのまま本番投入してはいけない。より堅実な使い方は、MCP ツールを検査役やナビゲーターとして扱うことだ。問題特定までの時間は短縮できるが、審査、テスト、ビジネス上の責任を置き換えることはできない。&lt;/p&gt;
&lt;h2 id=&#34;私の見方&#34;&gt;私の見方
&lt;/h2&gt;&lt;p&gt;Google Pay と Wallet Developer MCP Server の意味は、「MCP の例がまた一つ増えた」ことではない。MCP が、現実的で複雑で、強い制約のある開発者シナリオに置かれたことにある。&lt;/p&gt;
&lt;p&gt;MCP がドキュメントにしか接続しないなら、その価値は限定的だ。アカウント状態、連携チェック、指標、プロダクトのバックエンドにつながるなら、AI アシスタントはより多くの実務的な開発作業を担える。Google の今回の発表は、まさにその方向を示している。&lt;/p&gt;
&lt;p&gt;今後、同様の機能はより多くのクラウドサービス、広告プラットフォーム、決済システム、企業向け SaaS に現れる可能性が高い。開発者が適応すべきなのは「AI がコードを書ける」という話だけではなく、「AI が標準ツールインターフェイスを通じて連携プロセス全体に参加できる」という変化だ。&lt;/p&gt;
&lt;p&gt;原文リンク：&lt;a class=&#34;link&#34; href=&#34;https://developers.googleblog.com/supercharge-your-integration-workflow-with-the-google-pay-wallet-developer-mcp-server/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Supercharge your integration workflow with the Google Pay &amp;amp; Wallet Developer MCP Server&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Gemini 3.5 FlashとGemini Omniを無料で使う方法：一般ユーザーと開発者向け入口まとめ</title>
        <link>https://knightli.com/ja/2026/05/20/gemini-3-5-flash-omni-free-access/</link>
        <pubDate>Wed, 20 May 2026 23:13:35 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/20/gemini-3-5-flash-omni-free-access/</guid>
        <description>&lt;p&gt;GoogleがGemini 3.5 FlashとGemini Omniを公開したあと、実用面で重要なのはbenchmarkではなく、一般ユーザーや開発者が実際にどう使うか、どの入口が無料で、どの入口が低いハードルの試用にすぎないかです。&lt;/p&gt;
&lt;p&gt;まず結論です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;チャット、文章作成、画像理解、日常的な質問：まずGemini app。&lt;/li&gt;
&lt;li&gt;Gemini 3.5 Flashのパラメータ、プロンプト、マルチモーダル入力を試す：Google AI Studio。&lt;/li&gt;
&lt;li&gt;プログラムからGemini 3.5 Flashを呼び出す：AI StudioでAPI keyを作成。&lt;/li&gt;
&lt;li&gt;ターミナルで無料試用する：Gemini CLIを確認。&lt;/li&gt;
&lt;li&gt;Gemini Omniの動画編集を体験する：Gemini appとGoogle Flowを優先。&lt;/li&gt;
&lt;li&gt;本番利用する：無料枠に依存せず、有料APIまたはVertex AIへ移行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意点として、無料枠、地域ごとの提供状況、サブスクリプション階層、モデル選択メニューは時間とともに変わります。この記事の執筆日は2026年5月20日です。正式に使う前に、Googleの最新ページを確認してください。&lt;/p&gt;
&lt;h2 id=&#34;gemini-35-flashを無料で使う方法1gemini-app&#34;&gt;Gemini 3.5 Flashを無料で使う方法1：Gemini app
&lt;/h2&gt;&lt;p&gt;最も簡単な入口はGemini appです。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://gemini.google.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://gemini.google.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使い方はシンプルです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Geminiを開く。&lt;/li&gt;
&lt;li&gt;Googleアカウントでログインする。&lt;/li&gt;
&lt;li&gt;モデル選択で &lt;code&gt;3.5 Flash&lt;/code&gt; を探す。&lt;/li&gt;
&lt;li&gt;そのまま対話を始める。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この入口は一般ユーザーに向いています。文章作成、要約、画像理解、ファイル内容の分析、日常的な質問、簡単な計画づくりに使えます。公開情報によると、Gemini 3.5 Flashは世界中のユーザー向けに提供されており、Geminiのモデル選択メニューから選べます。&lt;/p&gt;
&lt;p&gt;制限も明確です。無料ユーザーには通常、1日のメッセージ数、地域、機能の制限があります。上限を超えた場合は、枠が回復するのを待つか、サブスクリプションをアップグレードする必要があります。&lt;/p&gt;
&lt;h2 id=&#34;gemini-35-flashを無料で使う方法2google-ai-studio&#34;&gt;Gemini 3.5 Flashを無料で使う方法2：Google AI Studio
&lt;/h2&gt;&lt;p&gt;単にチャットしたいのではなく、プロンプトを調整したり、パラメータを見たり、構造化出力を試したりしたい場合は、Google AI Studioのほうが適しています。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://aistudio.google.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://aistudio.google.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基本的な流れは次の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Google AI Studioにログインする。&lt;/li&gt;
&lt;li&gt;新しいpromptを作成する。&lt;/li&gt;
&lt;li&gt;モデル選択で &lt;code&gt;gemini-3.5-flash&lt;/code&gt; を選ぶ。&lt;/li&gt;
&lt;li&gt;プロンプトを入力して実行する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AI Studioの利点は、制御できる範囲が広いことです。温度、システム指示、構造化出力、複数画像入力を調整でき、試したプロンプトをコードやAPI呼び出しとして書き出すこともできます。&lt;/p&gt;
&lt;p&gt;開発者にとって、AI Studioは無料の実験台です。ここでプロンプトと入力形式を整えてからAPI連携に進むと、無駄な枠消費を減らせます。&lt;/p&gt;
&lt;h2 id=&#34;gemini-35-flashを無料で使う方法3無料api-key&#34;&gt;Gemini 3.5 Flashを無料で使う方法3：無料API key
&lt;/h2&gt;&lt;p&gt;開発者が最も気にするのはAPIです。AI Studioでは、&lt;code&gt;gemini-3.5-flash&lt;/code&gt; を呼び出すためのGemini API keyを作成できます。&lt;/p&gt;
&lt;p&gt;基本的な流れは次の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Google AI Studioを開く。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Get API key&lt;/code&gt; を探す。&lt;/li&gt;
&lt;li&gt;プロジェクトを選ぶか作成する。&lt;/li&gt;
&lt;li&gt;API keyを作成する。&lt;/li&gt;
&lt;li&gt;keyをローカルの環境変数に保存する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pythonの例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;google&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;GEMINI_API_KEY&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generate_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gemini-3.5-flash&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Gemini 3.5 Flashがどのような用途に向いているか、3文で説明してください。&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Node.jsの例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;GoogleGenAI&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;@google/genai&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ai&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;GoogleGenAI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;apiKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GEMINI_API_KEY&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ai&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;generateContent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gemini-3.5-flash&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Gemini 3.5 Flashがどのような用途に向いているか、3文で説明してください。&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; の例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;x-goog-api-key: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GEMINI_API_KEY&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;contents&amp;#34;:[{&amp;#34;parts&amp;#34;:[{&amp;#34;text&amp;#34;:&amp;#34;Hello Gemini 3.5 Flash&amp;#34;}]}]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;公開情報では、AI Studioの無料枠はGemini Flashモデルに一定の1日あたりリクエスト枠を提供することが多いとされています。時期、地域、アカウント状態によって異なり、よくある説明には1日約1,500リクエスト、分あたりリクエスト制限、token制限などがあります。これらの数字を本番計画に固定してはいけません。正式公開前にはGoogle AIの最新の料金と制限ページを確認してください。&lt;/p&gt;
&lt;h2 id=&#34;gemini-35-flashを無料で使う方法4gemini-cli&#34;&gt;Gemini 3.5 Flashを無料で使う方法4：Gemini CLI
&lt;/h2&gt;&lt;p&gt;コマンドラインが好きなら、Gemini CLIを見てみる価値があります。臨時スクリプト、コードベースの要約、ファイル読み取り、ターミナルでの素早い質問に向いています。&lt;/p&gt;
&lt;p&gt;通常のインストール方法は次の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @google/gemini-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;その後、実行します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gemini
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CLIは個人開発者の日常利用に向いており、本番統合には向いていません。本番環境ではAPI key、サービスアカウント、権限制御、監査可能な呼び出し方式を使うべきです。&lt;/p&gt;
&lt;h2 id=&#34;gemini-omniを無料または低いハードルで使う方法gemini-appとgoogle-flow&#34;&gt;Gemini Omniを無料または低いハードルで使う方法：Gemini appとGoogle Flow
&lt;/h2&gt;&lt;p&gt;Gemini Omniは動画制作と編集に向けたマルチモーダルモデルです。中心的な機能は通常のテキストQ&amp;amp;Aではなく、自然言語で動画を複数回編集し、画像、テキスト、動画、音声などの入力を参照することです。&lt;/p&gt;
&lt;p&gt;Google DeepMindのページでは、次の入口が示されています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gemini app。&lt;/li&gt;
&lt;li&gt;Google Flow。&lt;/li&gt;
&lt;li&gt;YouTube Shorts。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ページでは、Google AIのサブスクリプションが必要であり、機能は契約階層や地域によって変わるとも説明されています。そのため、Gemini Omniの「無料利用」は慎重に理解する必要があります。一部の入口では無料ユーザーが一部機能を見たり試したりできる可能性がありますが、完全な動画編集機能にはサブスクリプション、地域提供、段階的ロールアウトが必要な場合があります。&lt;/p&gt;
&lt;p&gt;試してみたいだけなら、次の順番がおすすめです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まずGemini appを開き、Gemini Omniまたは関連する動画編集入口があるか確認する。&lt;/li&gt;
&lt;li&gt;次にGoogle Flowを開く：&lt;a class=&#34;link&#34; href=&#34;https://flow.google/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://flow.google/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ショート動画を作る場合は、YouTube ShortsにOmni関連の編集機能が出ているか確認する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;入口が見えない場合、通常は操作ミスではありません。アカウント、地域、サブスクリプション階層、ロールアウト対象がまだ条件を満たしていないだけのことがあります。&lt;/p&gt;
&lt;h2 id=&#34;gemini-omniに向いている使い方&#34;&gt;Gemini Omniに向いている使い方
&lt;/h2&gt;&lt;p&gt;Gemini Omniは通常のチャットより、クリエイター向けです。&lt;/p&gt;
&lt;p&gt;次のような使い方を試せます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;動画をアップロードまたは選択し、スタイルを変更する。&lt;/li&gt;
&lt;li&gt;動画内の特定の動きをより誇張する。&lt;/li&gt;
&lt;li&gt;参照画像を使って、シーン内の物体やキャラクターを置き換える。&lt;/li&gt;
&lt;li&gt;複数回に分けてカメラ、動き、環境、スタイルを修正する。&lt;/li&gt;
&lt;li&gt;スケッチ、参照画像、音声、動画を組み合わせて新しい出力を作る。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;プロンプトは編集者への指示のように書けます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;元の動画の人物と部屋の構造はそのままにして、鏡に触れた後の効果を液体の波紋に変えてください。動きは自然にし、光が急に変わらないようにしてください。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;複数回編集する場合、一度に多くの要求を詰め込まないほうが安定します。より安全な進め方は次の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まず主体の動きを変える。&lt;/li&gt;
&lt;li&gt;次にスタイルを変える。&lt;/li&gt;
&lt;li&gt;次にカメラ角度を変える。&lt;/li&gt;
&lt;li&gt;最後に音、文字、リズムを調整する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;こうすると一貫性を保ちやすく、どの段階で問題が出たかも特定しやすくなります。&lt;/p&gt;
&lt;h2 id=&#34;無料利用で踏みやすい落とし穴&#34;&gt;無料利用で踏みやすい落とし穴
&lt;/h2&gt;&lt;p&gt;第一に、無料枠は本番枠ではありません。無料API keyはテスト、個人工具、プロトタイプに向いていますが、安定したサービスを約束する用途には向きません。&lt;/p&gt;
&lt;p&gt;第二に、機密データを無料または第三者の入口に送らないことです。未公開コード、顧客情報、契約書、キー、財務表、内部文書は特に注意が必要です。&lt;/p&gt;
&lt;p&gt;第三に、データ利用設定を確認することです。無料枠には異なるデータ利用ポリシーがある場合があります。利用前にAI StudioやGoogleアカウントの関連設定を確認してください。&lt;/p&gt;
&lt;p&gt;第四に、動画機能は通常、テキスト機能より制限が強くなります。Gemini Omniのような動画編集機能は、サブスクリプション、地域、待ち行列、長さ、解像度、コンテンツ安全ポリシーの影響を受ける可能性があります。&lt;/p&gt;
&lt;p&gt;第五に、第三者の「無制限無料API」には注意が必要です。多くのゲートウェイは速度制限、リクエスト転送、ログ記録、不透明な支払い方法を伴います。機密タスクでは使わないほうが安全です。&lt;/p&gt;
&lt;h2 id=&#34;どの入口を選ぶべきか&#34;&gt;どの入口を選ぶべきか
&lt;/h2&gt;&lt;p&gt;一般ユーザーなら：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gemini 3.5 Flash：Gemini appを使う。&lt;/li&gt;
&lt;li&gt;Gemini Omni：まずGemini app、次にGoogle Flowを見る。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;クリエイターなら：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google FlowでOmniの動画ワークフローを試す。&lt;/li&gt;
&lt;li&gt;Gemini appで脚本、絵コンテ、プロンプト、素材説明を作る。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;開発者なら：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI Studioでプロンプトをデバッグする。&lt;/li&gt;
&lt;li&gt;API keyで &lt;code&gt;gemini-3.5-flash&lt;/code&gt; を組み込む。&lt;/li&gt;
&lt;li&gt;Gemini CLIで個人用ターミナルワークフローを作る。&lt;/li&gt;
&lt;li&gt;本番環境ではVertex AIまたは有料APIを検討する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;企業なら：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;無料枠に依存しない。&lt;/li&gt;
&lt;li&gt;権限、ログ、監査、データ所在地、コンプライアンス、キー管理を重視する。&lt;/li&gt;
&lt;li&gt;動画生成と編集では、ウォーターマーク、コンテンツ審査、著作権フローも追加する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Gemini 3.5 Flashの無料利用経路は比較的わかりやすいです。Gemini app、Google AI Studio、AI Studio API key、Gemini CLIはいずれも低いハードルの入口になります。チャット、文章作成、プログラミング、Agentプロトタイプ、マルチモーダルテストに向いています。&lt;/p&gt;
&lt;p&gt;Gemini Omniの重点は動画編集とマルチモーダル制作です。主な入口はGemini app、Google Flow、YouTube Shortsですが、完全な機能はサブスクリプションや地域制限の影響を受けやすいでしょう。クリエイターがまず体験や概念検証を行うには向いていますが、最初から安定した本番サービスとして計画するには向いていません。&lt;/p&gt;
&lt;p&gt;最も堅実な戦略は、テキストとコードのタスクをまずGemini 3.5 Flashの無料枠で試し、動画制作はGemini appまたはFlowのGemini Omniで効果を確認し、本当に公開する段階で監査、課金、権限制御ができる正式な構成へ移行することです。&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://deepmind.google/models/gemini/flash/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google DeepMind：Gemini 3.5 Flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://deepmind.google/models/gemini-omni/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google DeepMind：Gemini Omni&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://apidog.com/blog/how-to-use-gemini-3-5-for-free/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Apidog：How to Use Gemini 3.5 Flash for Free&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.freedidi.com/24249.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;freedidi 原文リンク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Gemini Omniとは？GoogleのAI動画マルチターン編集モデルを解説</title>
        <link>https://knightli.com/ja/2026/05/20/google-gemini-omni-video-editing/</link>
        <pubDate>Wed, 20 May 2026 23:11:58 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/20/google-gemini-omni-video-editing/</guid>
        <description>&lt;p&gt;Google DeepMindが &lt;code&gt;Gemini Omni&lt;/code&gt; のページを公開しました。位置づけは明確です。任意の入力からコンテンツを作るモデルで、現時点では動画を中心にしています。&lt;/p&gt;
&lt;p&gt;Nano Bananaが画像生成と編集に寄っているとすれば、Gemini Omniは動画向けのマルチモーダル編集モデルに近い存在です。ユーザーは自然言語で動画を段階的に編集でき、後続の変更は前回の変更結果を土台にしながら、シーン、人物、動き、画面の論理的一貫性を保とうとします。&lt;/p&gt;
&lt;p&gt;プロジェクトページ：&lt;a class=&#34;link&#34; href=&#34;https://deepmind.google/models/gemini-omni/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://deepmind.google/models/gemini-omni/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;解決しようとしている問題&#34;&gt;解決しようとしている問題
&lt;/h2&gt;&lt;p&gt;従来の動画編集には、タイムライン、レイヤー、マスク、キーフレーム、カラーグレーディング、音声トラック、そして多くの手作業が必要です。AI動画生成ツールはプロンプトからクリップを生成できますが、よくある問題が二つあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一度生成した結果を細かく修正しにくい。&lt;/li&gt;
&lt;li&gt;複数回編集すると、人物、シーン、スタイル、動きがぶれやすい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gemini Omniが狙っているのはこの二つ目の段階です。単に動画を生成するのではなく、編集者と会話するように、ユーザーが継続して修正を依頼できるようにします。&lt;/p&gt;
&lt;p&gt;ページでは、自然で段階的な会話を通じて任意の動画を編集できると説明されています。各編集は前回の結果に基づき、連続性のある統一されたシーンを維持することを目指します。&lt;/p&gt;
&lt;h2 id=&#34;主な機能&#34;&gt;主な機能
&lt;/h2&gt;&lt;p&gt;Gemini Omniの機能はいくつかに分けられます。&lt;/p&gt;
&lt;p&gt;一つ目は自然言語による動画編集です。ユーザーは動画の美的スタイル、動き、エフェクトの変更を直接依頼できます。たとえば、鏡を液体のように波立たせたり、人物を線画、フェルト人形、透明なホログラム風ワイヤーフレームに変えたり、環境全体を 3D voxel art に変換したりできます。&lt;/p&gt;
&lt;p&gt;二つ目は動作の再構成です。手で作った穴を拡大する、玩具に対応する動物の鳴き声を出させる、建物の照明を音楽に合わせて点灯させる、といった形で、動画内で起きること自体を変えられます。&lt;/p&gt;
&lt;p&gt;三つ目は参照画像に基づく実写動画の編集です。ユーザーは画像を参照として与え、建物、太陽、飛行物体、その他のオブジェクトを実写の動画シーンに配置するよう依頼できます。&lt;/p&gt;
&lt;p&gt;四つ目は複数回の編集で一貫性を保つことです。ページでは、バイオリン奏者を参照画像の環境に移動し、バイオリンを消し、さらにショットを肩越しの角度に変える連続編集の流れが紹介されています。一度きりのプロンプトよりも、実際の制作プロセスに近い使い方です。&lt;/p&gt;
&lt;p&gt;五つ目は複数入力の参照です。Gemini Omniは画像、テキスト、動画、音声などの入力を一つの出力に統合でき、スタイル転送、動作転送、キャラクター置換、スケッチから動画への変換などに対応します。&lt;/p&gt;
&lt;h2 id=&#34;なぜ世界知識を強調するのか&#34;&gt;なぜ世界知識を強調するのか
&lt;/h2&gt;&lt;p&gt;Googleはページの中で、Gemini Omniは単に「映像をリアルにする」だけではなく、Geminiの世界知識、物理的直感、歴史、科学、物語の論理を組み合わせると繰り返し強調しています。&lt;/p&gt;
&lt;p&gt;これは重要です。動画モデルが画質だけを追求すると、動きが不自然になったり、物体の関係が混乱したり、文字と映像が同期しなかったりしがちです。Gemini Omniの目標は、見た目だけでなく、ストーリー、物理、意味の面でも一貫した動画にすることです。&lt;/p&gt;
&lt;p&gt;ページの例には次のようなものがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ビー玉が連鎖反応のコースを転がる。&lt;/li&gt;
&lt;li&gt;claymationでタンパク質の折りたたみを説明する。&lt;/li&gt;
&lt;li&gt;stop motion風に海馬の働きを説明する。&lt;/li&gt;
&lt;li&gt;文字と画面内の物体を対応させて表示する。&lt;/li&gt;
&lt;li&gt;画面上の単語をリズムに合わせて一語ずつ表示する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの例から、Gemini Omniは単なるショート動画向けエフェクトツールではなく、知識表現、物語、映像と音声の生成をまとめようとしていることがわかります。&lt;/p&gt;
&lt;h2 id=&#34;veoflownano-bananaとの関係&#34;&gt;Veo、Flow、Nano Bananaとの関係
&lt;/h2&gt;&lt;p&gt;Googleの現在の製品ラインを見ると、Gemini Omniはマルチモーダルな制作と編集機能の入口に近い存在です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Veo&lt;/code&gt; は動画生成モデルそのものに近く、映画的な動画と音声生成を重視します。&lt;code&gt;Google Flow&lt;/code&gt; はクリエイター向けのAIクリエイティブスタジオで、ショット、素材、動画プロジェクトを整理する用途に向いています。&lt;code&gt;Nano Banana&lt;/code&gt; は画像作成と細部編集に寄っています。Gemini Omniは「任意の入力から一貫した出力へ」というマルチモーダル編集を重視し、とくに動画での自然言語による複数回制御を前面に出しています。&lt;/p&gt;
&lt;p&gt;簡単に整理すると、次のようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高品質な動画を生成したいなら、Veoに注目。&lt;/li&gt;
&lt;li&gt;制作ワークフローの中で動画プロジェクトを整理したいなら、Google Flowに注目。&lt;/li&gt;
&lt;li&gt;画像を編集したいなら、Nano Bananaに注目。&lt;/li&gt;
&lt;li&gt;会話形式で動画を修正し、画像、テキスト、動画、音声を参照したいなら、Gemini Omniに注目。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;利用入口&#34;&gt;利用入口
&lt;/h2&gt;&lt;p&gt;ページで挙げられている入口は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gemini app。&lt;/li&gt;
&lt;li&gt;Google Flow。&lt;/li&gt;
&lt;li&gt;YouTube Shorts。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただしページでは、Google AIのサブスクリプションが必要であり、機能は契約プランや地域によって異なるとも説明されています。つまり、すべてのユーザーがすべての地域で完全な機能をすぐに使えるわけではありません。&lt;/p&gt;
&lt;p&gt;クリエイターにとっては、より完整な制作ワークスペースに近い Google Flow が特に重要な入口になりそうです。一般ユーザーにとっては、Gemini app と YouTube Shorts のほうが試しやすい入口になるでしょう。&lt;/p&gt;
&lt;h2 id=&#34;安全性とコンテンツ表示&#34;&gt;安全性とコンテンツ表示
&lt;/h2&gt;&lt;p&gt;Gemini Omniのページでは安全プロセスにも触れています。Gemini Omni Flashの開発では、社内の安全性および責任あるAIチームと協力し、自動評価、人間による評価、人間のレッドチーミング、自動レッドチーミング、リリース前の倫理・安全レビューが行われたと説明されています。&lt;/p&gt;
&lt;p&gt;コンテンツの透明性については、Gemini app、Google Flow、YouTubeでOmniを使って作成または編集されたコンテンツには、不可視の &lt;code&gt;SynthID&lt;/code&gt; デジタルウォーターマークと &lt;code&gt;C2PA Content Credentials&lt;/code&gt; が含まれるとされています。ユーザーはGemini appでコンテンツを検証でき、今後はChromeや検索にも拡張される予定です。&lt;/p&gt;
&lt;p&gt;これは動画モデルでは特に重要です。動画生成と動画編集がリアルになるほど、出所表示、悪用防止、検証ツールの重要性は高まります。&lt;/p&gt;
&lt;h2 id=&#34;向いているユーザー&#34;&gt;向いているユーザー
&lt;/h2&gt;&lt;p&gt;Gemini Omniは次のようなユーザーに向いています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自然言語で素早く動画を修正したいコンテンツクリエイター。&lt;/li&gt;
&lt;li&gt;スケッチ、参照画像、音声、動画素材を組み合わせて完成映像を作りたいデザインチーム。&lt;/li&gt;
&lt;li&gt;ショート動画、広告コンセプト、教育向け解説動画、製品ビジュアル案を作る人。&lt;/li&gt;
&lt;li&gt;Google FlowでAI動画ワークフローを構築したいクリエイター。&lt;/li&gt;
&lt;li&gt;マルチモーダル動画編集の限界を観察したい開発者や研究者。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし、すべての場面に向いているわけではありません。本格的な商業映像、ブランドのキービジュアル、映像制作、製品発表動画では、人によるレビュー、著作権確認、事実確認、素材管理が依然として必要です。AIはコンセプト生成や初稿の反復を大きく速めますが、最終確認の代わりにはなりません。&lt;/p&gt;
&lt;h2 id=&#34;gemini-omniをどう見るか&#34;&gt;Gemini Omniをどう見るか
&lt;/h2&gt;&lt;p&gt;Gemini Omniの意味は、AI動画を「一度きりの生成」から「会話しながら修正できる編集」へ進める点にあります。これは単に画質を上げることよりも、実際の制作フローに近い変化です。&lt;/p&gt;
&lt;p&gt;複数回編集、一貫性、参照素材の制御、音声と映像の同期、コンテンツ表示が安定すれば、AI動画ツールの使い方は変わります。ユーザーは長いプロンプトを一度書いて結果に賭けるのではなく、監督、編集者、デザイナーのように、シーン、動き、スタイル、物語を段階的に修正していくようになります。&lt;/p&gt;
&lt;p&gt;現時点では、実際の提供範囲、価格、地域制限、生成時間、解像度、著作権ポリシー、商用利用ルールを見ていく必要があります。一般的なクリエイターにとって最も実用的な観察点は、Google Flow と Gemini app の中で多段階の動画編集を安定して行えるかどうかです。&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://deepmind.google/models/gemini-omni/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google DeepMind：Gemini Omni&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Gemini 3.5 発表：Flash が先行し、Google は Agent と長時間タスク実行に重点</title>
        <link>https://knightli.com/ja/2026/05/20/google-gemini-3-5-flash-agent-coding/</link>
        <pubDate>Wed, 20 May 2026 22:51:31 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/20/google-gemini-3-5-flash-agent-coding/</guid>
        <description>&lt;p&gt;Google は 2026 年 5 月 20 日、Gemini 3.5 シリーズを正式に発表した。最初に利用可能になるのは Gemini 3.5 Flash で、単なるチャットモデルではなく、Agent、コード生成、長時間にわたる複雑なタスク実行を意識したモデルとして位置付けられている。&lt;/p&gt;
&lt;p&gt;今回の発表から見える Google のメッセージは明確だ。Gemini 3.5 は質問に答えるだけでなく、計画し、実行し、結果を確認し、複数ステップのワークフローを継続的に進めることを目指している。&lt;/p&gt;
&lt;h2 id=&#34;gemini-35-flash-が先行&#34;&gt;Gemini 3.5 Flash が先行
&lt;/h2&gt;&lt;p&gt;Gemini 3.5 Flash は、すでに複数のユーザー層に向けて提供されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一般ユーザーは Gemini アプリと Google 検索の AI Mode で利用できる。&lt;/li&gt;
&lt;li&gt;開発者は Google Antigravity、Google AI Studio、Android Studio の Gemini API から利用できる。&lt;/li&gt;
&lt;li&gt;企業ユーザーは Gemini Enterprise Agent Platform と Gemini Enterprise から利用できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google は同時に、Gemini 3.5 Pro はまだ開発中で、すでに Google 内部で使われており、来月の提供を予定しているとも説明している。&lt;/p&gt;
&lt;p&gt;つまり 3.5 シリーズでも Flash と Pro の役割分担は続く。Flash は速度、コスト、大規模実行を重視し、Pro はより複雑で高い能力を必要とする用途を担う可能性が高い。&lt;/p&gt;
&lt;h2 id=&#34;焦点は-agent-とコードタスク&#34;&gt;焦点は Agent とコードタスク
&lt;/h2&gt;&lt;p&gt;Google は Gemini 3.5 Flash を、Agent とコーディング向けの最も強力なモデルの一つとして説明している。発表では、Terminal-Bench 2.1、GDPval-AA、MCP Atlas、CharXiv Reasoning などのコード・Agent 系ベンチマークで、Gemini 3.1 Pro の一部成績を上回ったとされている。&lt;/p&gt;
&lt;p&gt;ただし、一般ユーザーにとって重要なのは個々のスコアではない。より大事なのは、Google がモデル能力を「実行可能なワークフロー」に寄せていることだ。コードを書くことに加えて、古いプロジェクトの移行、複雑なアプリ開発、財務レポートの整理、データ分析、継続的なテストまで扱おうとしている。&lt;/p&gt;
&lt;p&gt;Antigravity の開発フレームワークでは、Gemini 3.5 Flash が複数の協調する subagents を使い、大きなタスクを処理できる。Google は AlphaZero の論文を解析して遊べるゲームを作る例、レガシーコードを Next.js に変換する例、都市景観や UI 案を並列生成する例を示している。&lt;/p&gt;
&lt;p&gt;方向性ははっきりしている。AI コーディングツールは「コード片を生成する」段階から、「複数の Agent を組織してプロジェクトを進める」段階へ移りつつある。&lt;/p&gt;
&lt;h2 id=&#34;マルチモーダル-ui-とグラフィック能力の強化&#34;&gt;マルチモーダル UI とグラフィック能力の強化
&lt;/h2&gt;&lt;p&gt;Gemini 3.5 Flash は Gemini 3 のマルチモーダル基盤を引き継いでいる。Google は、より豊かな Web UI、インタラクティブなアニメーション、視覚コンテンツを生成できると説明している。&lt;/p&gt;
&lt;p&gt;発表で示された用途には次のようなものがある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;研究論文向けのインタラクティブなアニメーションを作る。&lt;/li&gt;
&lt;li&gt;テキスト説明からインタラクティブなハードウェアモデルを生成する。&lt;/li&gt;
&lt;li&gt;学校の募金活動向けにブランドコンセプト一式を作る。&lt;/li&gt;
&lt;li&gt;短時間でチェックアウトフローの複数の UX 案を生成する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは開発者やプロダクトチームにとって意味が大きい。モデルは説明文を出すだけでなく、フロントエンドのプロトタイプ、インタラクション設計、可視化にも関わるようになる。&lt;/p&gt;
&lt;h2 id=&#34;企業用途時間のかかるワークフローを自動化する&#34;&gt;企業用途：時間のかかるワークフローを自動化する
&lt;/h2&gt;&lt;p&gt;Google は複数のパートナー事例も挙げている。Shopify は subagents で複雑なデータを分析し、販売者の成長予測に活用している。Macquarie Bank は 100 ページを超える複雑な文書を 3.5 Flash に読ませ、口座開設フローを高速化するテストをしている。Salesforce は Agentforce に統合し、Ramp は複雑な請求書 OCR の改善に使い、Xero は行政的なワークフローを AI Agent で処理し、Databricks はデータ異常の監視と修正提案に自動化ワークフローを使っている。&lt;/p&gt;
&lt;p&gt;これらの事例は同じ方向を示している。企業での大規模モデル利用は、単発の Q&amp;amp;A からワークフロー自動化へ移っている。モデルが安価で速く、長時間のタスクで安定して動くかどうかは、単発の回答が見栄えよく見えるかどうかより重要になりつつある。&lt;/p&gt;
&lt;h2 id=&#34;gemini-spark個人向け-ai-agent&#34;&gt;Gemini Spark：個人向け AI Agent
&lt;/h2&gt;&lt;p&gt;Google は Gemini Spark も発表した。Gemini 3.5 Flash によって動く個人向け AI Agent で、ユーザーの指示のもとで長時間動作し、能動的にタスクを実行することを目指している。&lt;/p&gt;
&lt;p&gt;Gemini Spark は信頼されたテスター向けに展開が始まっており、Google は来週、米国の Google AI Ultra 加入者向けに Beta を開放する予定だ。&lt;/p&gt;
&lt;p&gt;ここは注目に値する。Google 検索、Gemini アプリ、Android、Workspace、ブラウザ関連のエコシステムは、すでに個人のデジタル生活の多くに接点を持っている。個人向け Agent がこれらの入口と結び付くなら、単独のチャットボットより大きな影響を持つ可能性がある。&lt;/p&gt;
&lt;h2 id=&#34;安全対策も前段に移る&#34;&gt;安全対策も前段に移る
&lt;/h2&gt;&lt;p&gt;Google は Gemini 3.5 を Frontier Safety Framework に基づいて開発し、情報セキュリティや CBRN 関連リスクへの防護を強化したとしている。さらに、モデルが回答する前に推論過程の確認と理解を助ける interpretability tools にも触れている。&lt;/p&gt;
&lt;p&gt;これは、最前線のモデル発表が能力競争だけではなくなっていることを示している。Agent、自動実行、長時間タスクを強調するほど、安全制御、誤拒否率、有害出力の抑制、解釈可能性は重要になる。&lt;/p&gt;
&lt;h2 id=&#34;gemini-35-をどう見るか&#34;&gt;Gemini 3.5 をどう見るか
&lt;/h2&gt;&lt;p&gt;Gemini 3.5 Flash の意味は、単なる新モデル発表ではない。Google が次の AI プロダクトの形に賭けているように見える。つまり、ツールを呼び出し、タスクを分割し、協調して実行し、UI を生成し、個人と企業のワークフローに入っていくモデルだ。&lt;/p&gt;
&lt;p&gt;開発者にとっては、Google Antigravity、AI Studio、Gemini API、Android Studio での実際の体験が重要になる。企業にとっては、benchmark だけでなく、実際の業務フローで手作業を安定して減らせるかが焦点になる。&lt;/p&gt;
&lt;p&gt;Gemini 3.5 Pro はまだ正式公開されていない。Pro が出たあと、Flash と Pro の能力、価格、速度、コンテキスト処理の違いが、それぞれに適した本番用途を決めることになる。&lt;/p&gt;
&lt;p&gt;参考:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.google/intl/zh-tw/products/explore-get-answers/gemini-3-5/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google Blog: Gemini 3.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Google Gemini Spark リーク解説：24 時間オンラインの Gemini Agent が登場するかもしれない</title>
        <link>https://knightli.com/ja/2026/05/17/google-gemini-spark-ai-agent-leak/</link>
        <pubDate>Sun, 17 May 2026 11:58:08 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/17/google-gemini-spark-ai-agent-leak/</guid>
        <description>&lt;p&gt;Google はまだ &lt;code&gt;Gemini Spark&lt;/code&gt; を正式発表していません。&lt;/p&gt;
&lt;p&gt;現在の情報は、主に Gemini Web 内部のテスト画面、コミュニティのスクリーンショット、TestingCatalog の報道、そして 36Kr / 新智元による関連リークの整理に基づいています。比較的一致している見方は、&lt;code&gt;Gemini Spark BETA&lt;/code&gt; が Google の準備している常時稼働 AI Agent かもしれないというものです。単なるチャットアシスタントではなく、バックグラウンドでメール、オンラインタスク、複数ステップのワークフローを処理する「日常の AI 代理人」という位置付けです。&lt;/p&gt;
&lt;p&gt;まず境界をはっきりさせると、これはリーク解説であり、Google の公式発表ではありません。機能、名称、公開時期はいずれも Google の正式発表を待つ必要があります。&lt;/p&gt;
&lt;h2 id=&#34;まず結論&#34;&gt;まず結論
&lt;/h2&gt;&lt;p&gt;現時点で露出している情報を見ると、Gemini Spark の要点は 3 つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Gemini 体系の中で 24 時間オンラインの Agent になる可能性があり、通常のチャットモデルではない。&lt;/li&gt;
&lt;li&gt;Google アプリ、チャット履歴、タスク、ログイン済みサイト、位置情報など、より広い個人コンテキストを利用する可能性がある。&lt;/li&gt;
&lt;li&gt;情報共有、リモートブラウザデータ、購入操作、第三者サービス呼び出しに関わるため、魅力と同じくらいリスクも大きい。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Google が本当に Spark を投入すれば、Gemini の位置付けは「質問に答える AI」から「継続的に用事を処理する AI」へ変わります。&lt;/p&gt;
&lt;h2 id=&#34;gemini-spark-とは何か&#34;&gt;Gemini Spark とは何か
&lt;/h2&gt;&lt;p&gt;TestingCatalog は 2026 年 5 月 14 日、Google が Gemini Web 内で &lt;code&gt;Gemini Spark BETA&lt;/code&gt; をテストしていると報じました。露出した welcome テキストでは、inbox、online tasks、さらに多くの複数ステップ作業を 24/7 で支援する everyday AI agent と説明されています。&lt;/p&gt;
&lt;p&gt;36Kr / 新智元の記事も、Spark が見つかった後、外部からは「常時稼働 Agent」方向に見えると述べています。終日待機し、受信箱を処理し、オンラインタスクを実行し、購入や情報共有に関わる可能性もあります。&lt;/p&gt;
&lt;p&gt;つまり Spark は単なる新モデル名ではありません。Gemini を会話ウィンドウから出し、ユーザーのメール、Web、予定、タスク、アプリ横断ワークフローへ入れる Gemini 製品レイヤーのアップグレードに近いものです。&lt;/p&gt;
&lt;h2 id=&#34;どのように動く可能性があるか&#34;&gt;どのように動く可能性があるか
&lt;/h2&gt;&lt;p&gt;TestingCatalog が公開した隠し onboarding テキストによると、Gemini Spark は複数の情報源からコンテキストを取得します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connected Apps。&lt;/li&gt;
&lt;li&gt;skills。&lt;/li&gt;
&lt;li&gt;chats。&lt;/li&gt;
&lt;li&gt;tasks。&lt;/li&gt;
&lt;li&gt;ユーザーがログインした Web サイト。&lt;/li&gt;
&lt;li&gt;Personal intelligence。&lt;/li&gt;
&lt;li&gt;location。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの情報は、Spark がユーザーのやりたいことを理解し、タスク実行時に必要なコンテキストを呼び出す助けになります。文面ではさらに、一部のアクションを完了するために、Gemini が名前、連絡先、ファイル、好み、ユーザーが機密と考える可能性のある情報を第三者に共有する場合があるとも示されています。&lt;/p&gt;
&lt;p&gt;これらの説明が最終的に正しければ、Spark の動作は一回限りの Q&amp;amp;A ではなく、「コンテキストを持つ代理システム」に近くなります。現在の 1 つの prompt だけを見るのではなく、長期的な好み、連携アプリ、ブラウザ状態、タスク履歴を組み合わせる可能性があります。&lt;/p&gt;
&lt;h2 id=&#34;なぜ重要なのか&#34;&gt;なぜ重要なのか
&lt;/h2&gt;&lt;p&gt;Gemini Spark の重要性は、チャット入口が 1 つ増えることではありません。Google が自然なエコシステム入口を持っている点にあります。&lt;/p&gt;
&lt;p&gt;OpenAI や Anthropic も強力な Agent を作れますが、Gmail、Calendar、Drive、Chrome、Android、Workspace という完全なチェーンを自然に持っているわけではありません。Google が Spark をこれらの製品に接続すれば、ユーザーは追加のワークフローをあまり構築しなくても、Agent を日常業務に入れられます。&lt;/p&gt;
&lt;p&gt;これにより 3 つの変化が起きます。&lt;/p&gt;
&lt;p&gt;第一に、Gemini は受動的な Q&amp;amp;A から能動的な実行へ移ります。ユーザーは「このメールを要約して」と聞くだけでなく、inbox の整理、タスク追跡、後続アクションを継続的に任せるかもしれません。&lt;/p&gt;
&lt;p&gt;第二に、Agent は個人コンテキストにより依存します。メール、予定、ファイル、ブラウザ状態、好みを理解するほど、有用な結果を返しやすくなります。&lt;/p&gt;
&lt;p&gt;第三に、権限境界がより敏感になります。できることが増えるほど、いつ実行できるのか、どこまでできるのか、確認が必要かを明確にする必要があります。&lt;/p&gt;
&lt;h2 id=&#34;リスクはどこにあるか&#34;&gt;リスクはどこにあるか
&lt;/h2&gt;&lt;p&gt;TestingCatalog が公開した文面には、注意すべき点がいくつかあります。&lt;/p&gt;
&lt;p&gt;第一に、Spark は experimental です。仮に公開されても、完全に成熟した監督不要のシステムとして扱うべきではありません。&lt;/p&gt;
&lt;p&gt;第二に、システム設計上は機微な操作の前に許可を求めるものの、文面では、確認なしに情報を共有したり購入を完了したりする可能性も示されています。&lt;/p&gt;
&lt;p&gt;第三に、会話の継続性を保つため、Gemini は login details や remote code execution data などの remote browser data を保存します。ユーザーは Settings からこれらのデータを削除でき、Connected Apps や Personal intelligence 関連機能も無効化できます。&lt;/p&gt;
&lt;p&gt;これらを合わせると、Spark の製品方向はかなり攻めています。提案を生成するだけではなく、本当にタスクを実行できる Agent を目指しています。ただし実行に近づくほど、厳格な権限、監査、確認、ロールバック機構が必要になります。&lt;/p&gt;
&lt;h2 id=&#34;remyai-ultra-との関係&#34;&gt;Remy、AI Ultra との関係
&lt;/h2&gt;&lt;p&gt;TestingCatalog は、Spark が以前 &lt;code&gt;Remy&lt;/code&gt; という内部コードネームで呼ばれていた agentic Gemini upgrade のリネーム版であり、Google AI Ultra 加入者向け Gemini Agent の方向とも関係している可能性があると述べています。&lt;/p&gt;
&lt;p&gt;この手がかりが正しければ、Spark は突然現れた新規プロジェクトではなく、Google が以前のより高階でクローズドな Agent 機能を再パッケージし、より広いユーザー層へ展開しようとしているものかもしれません。&lt;/p&gt;
&lt;p&gt;36Kr / 新智元も、これを “Remy” から “Spark” へのアップグレードとして描写しています。Gemini Agent は単なる機能ではなく、24/7 のデジタル生活マネージャーへ向かうという見方です。&lt;/p&gt;
&lt;p&gt;ただし、これはあくまでリーク情報に基づく判断です。Google が &lt;code&gt;Spark&lt;/code&gt; を正式名称として使うのか、AI Ultra 限定なのか、より軽量なサブスクリプション層を出すのかは、公式確認を待つ必要があります。&lt;/p&gt;
&lt;h2 id=&#34;mcpskillsツールエコシステム&#34;&gt;MCP、skills、ツールエコシステム
&lt;/h2&gt;&lt;p&gt;同じコミュニティスクリーンショット群では、&lt;code&gt;MCP Tool Testing&lt;/code&gt; のようなモデルセレクター項目も見つかっています。36Kr の記事は、これが新しい Gemini の MCP サードパーティツール統合ネイティブ対応や Thinking モード再構築を示唆している可能性があると見ています。&lt;/p&gt;
&lt;p&gt;この手がかりは Spark と一緒に見ると面白くなります。&lt;/p&gt;
&lt;p&gt;Spark が単なる「チャットできる助手」なら、skills や MCP の意味は限定的です。しかし Spark が長時間動作する Agent なら、ツール呼び出し、Web ページアクセス、タスク実行、コンテキストの読み書き、結果の納品が安定して必要になります。&lt;/p&gt;
&lt;p&gt;つまり Spark は単独機能ではなく、Google Agent ツールエコシステムの一部かもしれません。モデルが理解と計画を担い、skills / MCP / connected apps が実行と拡張を担う構図です。&lt;/p&gt;
&lt;h2 id=&#34;一般ユーザーにとっての意味&#34;&gt;一般ユーザーにとっての意味
&lt;/h2&gt;&lt;p&gt;Gemini Spark が本当に公開されれば、一般ユーザーにとって直接的な変化は次のようなものになる可能性があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;メールは要約されるだけでなく、分類、フォローアップ、タスク化される。&lt;/li&gt;
&lt;li&gt;Web タスクは提案されるだけでなく、リモートブラウザ内で継続的に実行される可能性がある。&lt;/li&gt;
&lt;li&gt;予定、位置、好み、過去の会話が Agent の長期コンテキストになる。&lt;/li&gt;
&lt;li&gt;購入、予約、フォーム入力などの操作が AI 実行範囲に入る可能性がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;便利に聞こえますが、ユーザーには新しい習慣が必要になります。AI が何を言ったかだけでなく、何をしようとしているのか、何をすでにしたのか、取り消せるのか、記録があるのかを見る必要があります。&lt;/p&gt;
&lt;p&gt;将来の AI Agent 体験は、モデルの賢さだけでなく、権限プロンプトが明確か、タスクログを確認できるか、誤操作から回復できるかにも左右されます。&lt;/p&gt;
&lt;h2 id=&#34;開発者とチームにとっての意味&#34;&gt;開発者とチームにとっての意味
&lt;/h2&gt;&lt;p&gt;開発者にとって Spark が重要なのは、Google が Agent を「デモ製品」から実際のワークフロープラットフォームへ移そうとしている可能性があるからです。&lt;/p&gt;
&lt;p&gt;Spark が Google アプリ、サードパーティツール、ブラウザ状態に安定して接続できるなら、開発者は次の点を気にします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API や拡張機構は公開されるのか。&lt;/li&gt;
&lt;li&gt;MCP や skills は第三者が接続できるのか。&lt;/li&gt;
&lt;li&gt;企業管理者は権限、データ保持、監査を制御できるのか。&lt;/li&gt;
&lt;li&gt;Agent 実行失敗時に追跡可能なログがあるのか。&lt;/li&gt;
&lt;li&gt;サンドボックス、承認フロー、機微な操作の確認をサポートするのか。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;チームにとって、Spark はまず Gmail、Calendar、Docs、Drive、Chrome のような高頻度シーンから入る可能性があります。最初から高リスク業務を完全自動化するのには向かないかもしれませんが、inbox triage、会議フォローアップ、資料整理、市場調査、軽量な運用タスクには適しています。&lt;/p&gt;
&lt;h2 id=&#34;今どう見るべきか&#34;&gt;今どう見るべきか
&lt;/h2&gt;&lt;p&gt;このニュースは「方向性の確度は高いが、細部の確定度は低い」と読むのがよさそうです。&lt;/p&gt;
&lt;p&gt;方向性の確度が高いのは、Google が Gemini Agent をより能動的、より長時間稼働、より深くエコシステムへ接続する方向に進めている点です。TestingCatalog が報じた Gemini Web のテスト文面、コミュニティのスクリーンショット、36Kr が整理した複数のリークは、同じ方向を示しています。&lt;/p&gt;
&lt;p&gt;細部の確定度が低いのは、正式名称、公開時期、権限ルール、サブスクリプション階層、利用可能地域、API 公開の有無、本当に Gemini Spark と呼ばれるかがまだ分からないためです。&lt;/p&gt;
&lt;p&gt;現時点で最も安全な見方は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spark をすでに公開済みの正式製品として扱わない。&lt;/li&gt;
&lt;li&gt;Google の次段階の AI Agent 路線を示す強いシグナルとして見る。&lt;/li&gt;
&lt;li&gt;権限、プライバシー、第三者へのデータ共有、リモートブラウザデータ保存について、Google がどう説明するかを待つ。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Gemini Spark&lt;/code&gt; が最終的に公開されれば、Gemini がチャットアシスタントから常時稼働 Agent へ進む重要な一歩になるかもしれません。単にモデルを入れ替える話ではなく、Gemini を Google エコシステムのメール、Web、タスク、位置情報、personal intelligence、第三者サービスの中に入れる話です。&lt;/p&gt;
&lt;p&gt;可能性は大きいです。より能動的で、実際のワークフローに近く、Google のエコシステムによって多くのユーザーへ配布しやすいからです。リスクも同じくらい大きいです。AI が情報を共有し、ブラウザ状態を保存し、購入を実行し、第三者サービスを呼び出せるなら、権限境界は非常に明確でなければなりません。&lt;/p&gt;
&lt;p&gt;だから Gemini Spark で最も注目すべきなのは「どれだけ賢いか」ではなく、Google が 24 時間オンラインの AI Agent をどのように制御可能で、監査可能で、信頼できるものにするかです。&lt;/p&gt;
&lt;p&gt;参考リンク：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.testingcatalog.com/google-prepares-gemini-spark-ai-agent-ahead-of-i-o-launch/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;TestingCatalog：Google prepares Gemini Spark AI Agent ahead of I/O launch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://36kr.com/p/3810432812162816&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;36Kr：Gemini 3.5 Pro 全網首曝，編程追平 GPT-5.5，谷歌終於狠起來了&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Gemini 3.5 Pro がリーク：コードネームは Cappuccino、Google はコーディングと Agent で巻き返しを狙う</title>
        <link>https://knightli.com/ja/2026/05/17/gemini-35-pro-cappuccino-spark-leak/</link>
        <pubDate>Sun, 17 May 2026 11:47:27 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/17/gemini-35-pro-cappuccino-spark-leak/</guid>
        <description>&lt;p&gt;Google はまだ &lt;code&gt;Gemini 3.5 Pro&lt;/code&gt; を正式発表していません。&lt;/p&gt;
&lt;p&gt;現時点で見えている情報は、主に開発者コミュニティのスクリーンショット、匿名ベンチマーク、リーカーの投稿、メディアの報道に基づいています。36Kr / 新智元は 2026 年 5 月 15 日、次世代 Gemini のチェックポイントが社内で &lt;code&gt;Cappuccino&lt;/code&gt; と呼ばれている可能性があり、関連モデルがコミュニティや評価プラットフォームで先に露出していると整理しました。&lt;/p&gt;
&lt;p&gt;これらの情報は公式発表と同一視すべきではありません。ただし、方向性ははっきりしています。Google は、コーディングと推論能力、そして常時稼働する AI Agent という 2 つの弱点を同時に補おうとしています。&lt;/p&gt;
&lt;h2 id=&#34;まず結論&#34;&gt;まず結論
&lt;/h2&gt;&lt;p&gt;今回のリークは 3 層に分けて見ると分かりやすいです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Gemini 3.5 Pro&lt;/code&gt; はまだ正式発表されておらず、&lt;code&gt;Cappuccino&lt;/code&gt; は内部チェックポイントまたは候補版のコードネームに近いものです。&lt;/li&gt;
&lt;li&gt;露出した情報では、新しい Gemini はコード生成、SVG / インタラクティブ Web 生成、マルチモーダル出力で改善しているようです。&lt;/li&gt;
&lt;li&gt;Google が並行してテストしている &lt;code&gt;Gemini Spark&lt;/code&gt; は、モデルそのもの以上に重要かもしれません。24 時間稼働する個人向け AI Agent を示しているからです。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;つまり、これは単なる「モデルのベンチマークニュース」ではありません。Google I/O を前にしたプロダクトロードマップのシグナルに近く、モデルは GPT-5.5 に追いつき、Agent はユーザーのワークフロー入口を押さえにいく構図です。&lt;/p&gt;
&lt;h2 id=&#34;cappuccino-とは何か&#34;&gt;Cappuccino とは何か
&lt;/h2&gt;&lt;p&gt;36Kr の記事によると、Lentils の投稿では、&lt;code&gt;Cappuccino&lt;/code&gt; というコードネームの &lt;code&gt;Gemini 3.5 Pro&lt;/code&gt; チェックポイントが生成され始めているとされています。数時間前までコミュニティでは &lt;code&gt;Gemini 3.2&lt;/code&gt; が話題でしたが、最新リークでは一気に &lt;code&gt;3.5&lt;/code&gt; へ飛びました。&lt;/p&gt;
&lt;p&gt;この命名が最終的に正しければ、Google は次の Gemini を通常の小幅更新ではなく、より大きなバージョンジャンプとして見せたいのかもしれません。&lt;/p&gt;
&lt;p&gt;ただし現時点では、&lt;code&gt;Cappuccino&lt;/code&gt; はあくまでリーク上の内部コードネームとして扱うべきです。Google が正式モデルを公開済みという意味ではなく、最終的なリリース名が必ず &lt;code&gt;Gemini 3.5 Pro&lt;/code&gt; になるとも限りません。&lt;/p&gt;
&lt;h2 id=&#34;なぜコーディング能力が焦点なのか&#34;&gt;なぜコーディング能力が焦点なのか
&lt;/h2&gt;&lt;p&gt;今回のリークで最も注目されているのは、新しい Gemini のコーディング能力です。&lt;/p&gt;
&lt;p&gt;36Kr が引用したコミュニティのスクリーンショットやベンチマーク情報によると、新モデルは次のタスクで強化されているようです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SVG とビジュアルコンポーネントの生成。&lt;/li&gt;
&lt;li&gt;インタラクティブ Web アプリの生成。&lt;/li&gt;
&lt;li&gt;アニメーション、3D、調整可能なパラメータパネルなど複雑なフロントエンド出力。&lt;/li&gt;
&lt;li&gt;論理推論とコード生成の改善。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;記事ではさらに、Abacus.AI CEO の Bindu Reddy が、&lt;code&gt;3.2 Flash&lt;/code&gt; はコーディングと推論で &lt;code&gt;GPT-5.5&lt;/code&gt; に近い水準に達しつつ、コストは低いと述べたことも紹介しています。一方、別のメディア筋は、新しい Gemini の総合性能はおおむね &lt;code&gt;GPT-5.5&lt;/code&gt; クラスだが、質的な飛躍とまでは言えないと見ているようです。&lt;/p&gt;
&lt;p&gt;そのため、「GPT-5.5 に追いついた」という表現は慎重に読む必要があります。これは Google 公式のベンチマーク結果ではなく、複数のリークや匿名評価に基づく相対的な判断に近いものです。&lt;/p&gt;
&lt;h2 id=&#34;google-がコーディングを急ぐ理由&#34;&gt;Google がコーディングを急ぐ理由
&lt;/h2&gt;&lt;p&gt;AI コーディングは、開発者ツールから基盤モデル競争の中心へ移りました。&lt;/p&gt;
&lt;p&gt;OpenAI には Codex があり、Anthropic には Claude Code があります。これらはエンジニアだけでなく、プロダクトマネージャー、デザイナー、運用担当者を「自然言語から動くプロダクトを作る」ワークフローへ連れてきています。&lt;/p&gt;
&lt;p&gt;一方で Google には Gemini と Antigravity がありますが、開発者の意識の中で同じ強さのデフォルト入口にはなっていません。36Kr の記事でも、Antigravity は外部市場でまだ本格的に突破できておらず、価格、利用枠通知、体験の安定性についてコミュニティで議論が続いていると触れられています。&lt;/p&gt;
&lt;p&gt;だからこそ、新しい Gemini が自分を証明するなら、コーディングが最も直接的な戦場になります。問われるのは「コードを書けるか」だけではありません。完全な UI を安定して生成できるか、複雑な要件を理解できるか、ツールを呼び出せるか、エラーを修正できるか、実際の開発フローに溶け込めるかです。&lt;/p&gt;
&lt;h2 id=&#34;spark-は-35-pro-より重要かもしれない&#34;&gt;Spark は 3.5 Pro より重要かもしれない
&lt;/h2&gt;&lt;p&gt;同じリークの流れで、&lt;code&gt;Gemini Spark BETA&lt;/code&gt; も見つかりました。&lt;/p&gt;
&lt;p&gt;TestingCatalog などの情報によると、Spark の位置付けは「常時稼働 AI Agent」に近いものです。受信箱を処理し、オンラインタスクを実行し、複数ステップのワークフローを管理し、Google アプリ、スキルモジュール、チャット履歴、定期タスク、ログイン済みサイト、位置情報などのコンテキストに接続します。&lt;/p&gt;
&lt;p&gt;これは Spark が通常のチャット入口ではないことを意味します。長時間オンラインで動き続け、コンテキストを読み続け、ユーザーの代わりにタスクを実行するシステムになり得ます。&lt;/p&gt;
&lt;p&gt;魅力は明らかです。Google が Gmail、Calendar、Chrome、Android、Workspace、Gemini をつなげられれば、Spark は OpenAI や Anthropic が簡単には再現できない配布面の優位を持ちます。&lt;/p&gt;
&lt;p&gt;同時にリスクも明らかです。36Kr の記事では、Spark 関連の説明に「確認なしに情報を共有したり購入を完了したりする可能性がある」という趣旨の表現があったと紹介されています。センシティブな操作の前に許可を求める設計だとしても、この種の Agent はプライバシー、権限境界、誤操作のリスクを生みます。&lt;/p&gt;
&lt;h2 id=&#34;一般ユーザーにとっての意味&#34;&gt;一般ユーザーにとっての意味
&lt;/h2&gt;&lt;p&gt;普通の Gemini ユーザーにとって、今回本当に注目すべきなのはモデル名ではなく、次の 3 つの変化です。&lt;/p&gt;
&lt;p&gt;第一に、Google は「完成した結果を生成する」能力をさらに強化する可能性があります。これまで Gemini は、ビジュアル生成、SVG、フロントエンドページで手抜きに見える出力をするという不満がありました。新モデルが一度に複数の完成度の高い案を出せるなら、体験はかなり改善します。&lt;/p&gt;
&lt;p&gt;第二に、コーディング能力はより軽量なモデルへ下りていく可能性があります。リークでは Flash 版のコーディング、推論、インタラクティブ生成の改善が繰り返し語られており、将来は複雑なタスクに必ずしも Pro モデルが必要ではなくなるかもしれません。&lt;/p&gt;
&lt;p&gt;第三に、Agent はより能動的になります。Spark が公開されれば、Gemini は質問に答えるだけではなく、メール、Web、購入、予定、アプリ横断タスクを長期的に引き受け始める可能性があります。&lt;/p&gt;
&lt;p&gt;効率面では良い知らせですが、権限管理には新しい課題が生まれます。&lt;/p&gt;
&lt;h2 id=&#34;開発者にとっての意味&#34;&gt;開発者にとっての意味
&lt;/h2&gt;&lt;p&gt;開発者は 2 つの点を注視すべきです。&lt;/p&gt;
&lt;p&gt;1 つ目はツールエコシステムです。36Kr の記事では、コミュニティがモデル選択画面に &lt;code&gt;MCP Tool Testing&lt;/code&gt; のような未公開入口を見つけたとされています。Gemini が MCP やサードパーティツールテストをネイティブにサポートするなら、開発者自身のツールチェーンに接続しやすくなります。&lt;/p&gt;
&lt;p&gt;2 つ目はコストと安定性です。新しい Gemini が一部ベンチマークで GPT-5.5 に追いついたとしても、開発者が最終的に見るのは実際のコード品質、コンテキストの安定性、価格と利用枠が予測可能かどうかです。&lt;/p&gt;
&lt;p&gt;過去 1 年の AI コーディングツール競争が示したのは、モデル能力は入場券にすぎないということです。開発者を残すのは、日常プロジェクトで安定してコードを修正し、テストを走らせ、コンテキストを読み、境界条件を扱えるかどうかです。&lt;/p&gt;
&lt;h2 id=&#34;今このニュースをどう読むべきか&#34;&gt;今このニュースをどう読むべきか
&lt;/h2&gt;&lt;p&gt;このニュースは「強いシグナル、弱い確認」として読むのが適切です。&lt;/p&gt;
&lt;p&gt;強いシグナルは、複数のコミュニティ上の手がかりが、Google がより強い新 Gemini と、より能動的な Gemini Spark Agent を準備していることを示している点です。&lt;/p&gt;
&lt;p&gt;弱い確認は、&lt;code&gt;Gemini 3.5 Pro&lt;/code&gt; がまだ公式発表されておらず、&lt;code&gt;Cappuccino&lt;/code&gt; もリーク上のコードネームにとどまり、「GPT-5.5 に追いついた」という主張も Google 公式ベンチマーク、第三者評価、実ユーザーの検証を待つ必要がある点です。&lt;/p&gt;
&lt;p&gt;現時点で最も安全な見方は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;すでに公開された製品として扱わない。&lt;/li&gt;
&lt;li&gt;Google の次段階の Gemini 路線を示す早期予告として見る。&lt;/li&gt;
&lt;li&gt;I/O または今後の公式イベントで、モデル名、API 提供、価格、コンテキストウィンドウ、ツール呼び出し、Agent の権限境界が確認されるかに注目する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Gemini 3.5 Pro / Cappuccino&lt;/code&gt; の露出は、Google が次世代 Gemini をより強く押し出そうとしている可能性を示しています。補おうとしているのは単一の能力ではなく、AI ワークフロー全体です。モデルはコードを書き、UI を生成し、複雑な推論を処理する必要があり、Spark は Gemini を常時稼働 Agent へ押し出します。&lt;/p&gt;
&lt;p&gt;ただし公式発表前は、すべてのベンチマークやスクリーンショットは手がかりにすぎません。Gemini 3.5 Pro が巻き返せるかを決めるのは、コードネームの響きではなく、実際の開発、実際のオフィス業務、実際の複数ステップタスクで安定して勝てるかどうかです。&lt;/p&gt;
&lt;p&gt;参考リンク：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://m.36kr.com/p/3810432812162816&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;36Kr：Gemini 3.5 Pro 全網首曝，編程追平 GPT-5.5，谷歌終於狠起來了&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.testingcatalog.com/google-prepares-gemini-spark-ai-agent-ahead-of-i-o-launch/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;TestingCatalog：Google prepares Gemini Spark AI agent ahead of I/O launch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://x.com/alexeheath/status/2054747125616169229&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;X：Alex Heath による新 Gemini と GPT-5.5 に関するリーク&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://x.com/Lentils80/status/2054628116094501377&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;X：Lentils による Gemini 3.5 / Cappuccino のリーク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Gemini Intelligence on Android 解説：Google はスマートフォンをプロアクティブな AI システムへ変えようとしている</title>
        <link>https://knightli.com/ja/2026/05/17/google-gemini-intelligence-android/</link>
        <pubDate>Sun, 17 May 2026 09:13:32 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/17/google-gemini-intelligence-android/</guid>
        <description>&lt;p&gt;Google は 2026 年 5 月 12 日に「A smarter, more proactive Android with Gemini Intelligence」を公開し、Gemini Intelligence on Android を発表しました。これは単独のチャットアプリではありません。Gemini の機能を Android、Chrome、Gboard、Autofill、widgets、マルチデバイス体験に組み込み、スマートフォンを「ユーザーのタップを待つ道具」から「ユーザーのタスクを能動的に手伝うシステム」へ変えるものです。&lt;/p&gt;
&lt;p&gt;簡単に言えば、Google は Android を operating system から intelligence system へ進めようとしています。スマートフォンはアプリを開き、通知を表示し、設定を動かすだけではなく、画面、アプリ、音声、個人コンテキストを理解し、ユーザーの確認のもとでより複雑な操作を実行できるようになります。&lt;/p&gt;
&lt;h2 id=&#34;まず結論&#34;&gt;まず結論
&lt;/h2&gt;&lt;p&gt;Gemini Intelligence on Android は主に 5 つの方向を持っています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;マルチステップ自動化：Gemini がアプリ間で配車、買い物、調査などの流れを完了する。&lt;/li&gt;
&lt;li&gt;Chrome のスマートブラウジング：Android 上でページを要約し、情報を比較し、一部の反復的な Web タスクを処理する。&lt;/li&gt;
&lt;li&gt;Autofill の強化：Gemini と個人コンテキストを使い、より複雑なフォームを入力する。&lt;/li&gt;
&lt;li&gt;Rambler：自然な話し言葉を、より明確で整ったテキストに変える。&lt;/li&gt;
&lt;li&gt;自然言語ウィジェット：ユーザーが欲しいものを一文で説明すると、Android がカスタム widgets を生成する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの機能は 2026 年夏から段階的に展開され、まず一部の Samsung Galaxy と Google Pixel に提供され、その後、時計、自動車、メガネ、ノート PC を含むより多くの Android デバイスに広がります。&lt;/p&gt;
&lt;h2 id=&#34;マルチステップ自動化提案から実行へ&#34;&gt;マルチステップ自動化：提案から実行へ
&lt;/h2&gt;&lt;p&gt;今回 Google が最も重視しているのは、Gemini がアプリをまたいで複数ステップのタスクを完了することです。&lt;/p&gt;
&lt;p&gt;原文では、Gemini にスピンクラスを予約させる、Gmail から授業シラバスを見つけて必要な本を買い物カートに入れる、旅行ポスターを見て Expedia で似た旅行を探させる、といった例が挙げられています。&lt;/p&gt;
&lt;p&gt;この能力のポイントは、単に一文を理解することではありません。同時に次のことを理解する必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ユーザーの現在の画面や画像に何があるか。&lt;/li&gt;
&lt;li&gt;ユーザーが許可した範囲のアプリ情報。&lt;/li&gt;
&lt;li&gt;次にどのアプリを開くべきか。&lt;/li&gt;
&lt;li&gt;どの手順を自動実行できるか。&lt;/li&gt;
&lt;li&gt;どの手順でユーザー確認が必要か。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google は、Gemini がユーザーの指示に従って動き、タスク完了時に停止し、最終確認はユーザーが保持すると強調しています。これは完全自律のエージェントではなく、人間の確認を含むモバイル端末上の agent です。&lt;/p&gt;
&lt;h2 id=&#34;画面と画像コンテキストが重要になる&#34;&gt;画面と画像コンテキストが重要になる
&lt;/h2&gt;&lt;p&gt;今回の更新で注目すべき変化は、screen context と image context です。&lt;/p&gt;
&lt;p&gt;従来のスマートフォンアシスタントは、音声コマンドやアプリ内の固定インターフェースに大きく依存していました。Gemini Intelligence は「今の画面を見る」ことをより重視します。たとえば、メモに買い物リストがある場合、電源ボタンを長押しして Gemini を呼び出し、そのリストから配送カートを作らせることができます。&lt;/p&gt;
&lt;p&gt;つまり Android AI は単なるチャットボットではなく、ユーザーの目の前の操作環境を理解しようとしています。今後のモバイル AI 競争は、モデルの回答品質だけでなく、次の点にも左右される可能性があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;現在の画面を理解できるか。&lt;/li&gt;
&lt;li&gt;アプリをまたいで実行できるか。&lt;/li&gt;
&lt;li&gt;バックグラウンドでタスク進行を追跡できるか。&lt;/li&gt;
&lt;li&gt;重要な場面で確実にユーザー確認を求められるか。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これはモバイル AI と Web チャット AI の大きな違いです。&lt;/p&gt;
&lt;h2 id=&#34;chrome-のスマートブラウジング検索から-web-タスク代理へ&#34;&gt;Chrome のスマートブラウジング：検索から Web タスク代理へ
&lt;/h2&gt;&lt;p&gt;Google によると、2026 年 6 月下旬から Android デバイスによりスマートな Gemini in Chrome が提供されます。&lt;/p&gt;
&lt;p&gt;これは、Web コンテンツの調査、要約、比較を支援し、Chrome auto browse によって予約や駐車場予約など一部の反復的な Web タスクを処理できます。&lt;/p&gt;
&lt;p&gt;つまり Gemini in Chrome は単なるページ要約機能ではなく、ブラウザエージェントへ向かっています。ブラウザはもともと多くの Web タスクの入口です。Gemini がページを理解し、情報を入力し、選択肢を比較し、一部手順を実行できれば、Chrome は閲覧ツールからタスク実行インターフェースへ変わります。&lt;/p&gt;
&lt;p&gt;ただし、この種の機能には現実的な課題もあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web サイト構造は複雑で、自動操作は失敗しやすい。&lt;/li&gt;
&lt;li&gt;フォーム、支払い、ログイン、CAPTCHA などは慎重に扱う必要がある。&lt;/li&gt;
&lt;li&gt;ユーザーは Gemini が何をしたのか知る必要がある。&lt;/li&gt;
&lt;li&gt;最終送信、支払い、予約は人間の確認を残すべきです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本当の難しさはモデル能力だけではなく、ブラウザ自動化、安全境界、ユーザー信頼にあります。&lt;/p&gt;
&lt;h2 id=&#34;autofillパスワード入力から複雑なフォーム入力へ&#34;&gt;Autofill：パスワード入力から複雑なフォーム入力へ
&lt;/h2&gt;&lt;p&gt;Autofill with Google はもともと、パスワード、住所、支払い情報などの基本的な便利機能でした。Google はこれを、よりスマートなフォームアシスタントへ進化させようとしています。&lt;/p&gt;
&lt;p&gt;原文では、Gemini の Personal Intelligence により、Android が接続アプリ内の関連情報を使い、Chrome 内のフォームを含むより複雑なフォーム項目を自動入力できると説明しています。&lt;/p&gt;
&lt;p&gt;これは実用的です。モバイルで複雑なフォームを入力するのは面倒です。画面は小さく、項目は多く、メール、カレンダー、チャット、文書から情報をコピーする必要があります。Gemini がユーザー許可のもとで整理して入力できれば、多くの時間を節約できます。&lt;/p&gt;
&lt;p&gt;Google は、Gemini と Autofill with Google の接続は厳密に opt-in だとも強調しています。ユーザー自身が接続するかを選び、設定からいつでもオン・オフできます。&lt;/p&gt;
&lt;p&gt;Autofill は個人情報、住所、アカウント、支払い、仕事情報、敏感なフォームに関わるため、この点は重要です。便利になるほど、明確な許可と制御可能な退出が必要になります。&lt;/p&gt;
&lt;h2 id=&#34;rambler話し言葉を送信できるテキストへ&#34;&gt;Rambler：話し言葉を送信できるテキストへ
&lt;/h2&gt;&lt;p&gt;Rambler は今回の更新で特に興味深い機能です。&lt;/p&gt;
&lt;p&gt;Gboard はすでに音声入力に対応していますが、人が話すときには繰り返し、間、フィラー、自分での言い直しがよくあります。Rambler は自然な話し言葉を、より明確で送信しやすいテキストに整えることを目指しています。&lt;/p&gt;
&lt;p&gt;向いている場面は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;メッセージを素早く口述したいが、一語ずつ修正したくない。&lt;/li&gt;
&lt;li&gt;話し言葉に間、繰り返し、フィラーが混ざる。&lt;/li&gt;
&lt;li&gt;思いつきを、よりプロらしい SMS、メール、チャット文に整理したい。&lt;/li&gt;
&lt;li&gt;複数言語を切り替えながら話し、文脈を理解してほしい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google は、Rambler が有効になっていることを明確に表示し、音声はリアルタイム文字起こしにのみ使われ保存されないと説明しています。これはプライバシーと透明性への対応です。&lt;/p&gt;
&lt;p&gt;製品として見ると、Rambler は「音声入力」を「音声ライティング」にアップグレードするものです。言ったことを記録するだけでなく、口語を送信できる文章へ整えます。&lt;/p&gt;
&lt;h2 id=&#34;自然言語でウィジェットを作る&#34;&gt;自然言語でウィジェットを作る
&lt;/h2&gt;&lt;p&gt;Gemini Intelligence には Create My Widget も含まれます。ユーザーは「毎週 3 つの高タンパク作り置きレシピをすすめて」のように自然言語で欲しいウィジェットを説明し、Android がホーム画面用のカスタム widget を生成します。&lt;/p&gt;
&lt;p&gt;これは Android が generative UI を試していることを意味します。ユーザーは固定テンプレートから選ぶだけでなく、見たい情報と表示方法を説明できます。&lt;/p&gt;
&lt;p&gt;この方向が成熟すれば、スマートフォンのホーム画面はより個人化されます。天気、予定、健康、通勤、食事、学習、仕事のリマインダーが、ユーザーの需要に応じて生成される動的モジュールになります。&lt;/p&gt;
&lt;p&gt;ただし、生成 UI には安定性が必要です。ウィジェットは一度限りのチャット回答ではなく、長くホーム画面に表示されます。信頼でき、読みやすく、設定可能で、画面を乱さない必要があります。&lt;/p&gt;
&lt;h2 id=&#34;material-3-expressive-とインテリジェント-ui&#34;&gt;Material 3 Expressive とインテリジェント UI
&lt;/h2&gt;&lt;p&gt;Google は、Gemini Intelligence が Material 3 Expressive に基づくデザイン更新ももたらすと述べています。&lt;/p&gt;
&lt;p&gt;これは単なる見た目の改善ではありません。AI が能動的にタスクを処理し始めると、UI は次を明確に示す必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI が何をしているか。&lt;/li&gt;
&lt;li&gt;どの手順が完了したか。&lt;/li&gt;
&lt;li&gt;どこでユーザー確認が必要か。&lt;/li&gt;
&lt;li&gt;ユーザーがどうキャンセルまたは変更できるか。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;明確な UI のないプロアクティブ AI は、ユーザーに制御不能感を与えやすいです。そのためデザイン言語そのものが AI 製品体験の一部になります。&lt;/p&gt;
&lt;h2 id=&#34;提供時期と展開&#34;&gt;提供時期と展開
&lt;/h2&gt;&lt;p&gt;Google によると、Gemini Intelligence の機能は最新の Samsung Galaxy と Google Pixel から始まり、2026 年夏に段階的に展開されます。その後、時計、自動車、メガネ、ノート PC を含むより多くの Android デバイスへ広がります。&lt;/p&gt;
&lt;p&gt;これは一度に全世界で提供されるものではありません。利用可否は、端末、地域、言語、アプリ対応、アカウント設定に依存する可能性があります。&lt;/p&gt;
&lt;p&gt;試したい場合、現実的な期待は次の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;まず Pixel と Samsung のフラッグシップ機を見る。&lt;/li&gt;
&lt;li&gt;2026 年夏以降のシステム更新に注目する。&lt;/li&gt;
&lt;li&gt;Gemini、Chrome、Gboard、Autofill、Android 設定内の新しいトグルを見る。&lt;/li&gt;
&lt;li&gt;地域や言語によって、すべての機能が同時に使えるとは限らない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;android-にとっての意味&#34;&gt;Android にとっての意味
&lt;/h2&gt;&lt;p&gt;Gemini Intelligence on Android の意味は、いくつかの AI 小機能を追加したことではありません。Android の製品ポジションの変化です。&lt;/p&gt;
&lt;p&gt;これまでのスマートフォン OS は、主にアプリ、通知、権限、ファイル、ハードウェアを管理していました。Google は今、システムにユーザー意図を理解させ、アプリ間でタスクを完了させようとしています。この方向が成功すれば、Android の競争軸は「システム機能とアプリエコシステム」から「ユーザーの作業をどれだけ能動的に助けられるか」へ広がります。&lt;/p&gt;
&lt;p&gt;これはモバイル AI 競争を新しい段階に進めます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apple はオンデバイス、プライバシー、システム統合を強調する。&lt;/li&gt;
&lt;li&gt;Google は Gemini、検索、Chrome、Android、マルチデバイスエコシステムを強調する。&lt;/li&gt;
&lt;li&gt;サードパーティ AI アプリはシステムレベルの入口と競争しにくくなる。&lt;/li&gt;
&lt;li&gt;アプリ開発者は、自分のアプリが AI agent からどう呼ばれるかを考える必要がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今後数年、スマートフォン上の AI は単なるチャット入口ではなく、システムレベルの実行層になる可能性があります。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Google が発表した Gemini Intelligence on Android の中心は、「スマートフォンに Gemini チャット枠を追加する」ことではありません。AI を Android の操作フローに組み込むことです。マルチステップ自動化、Chrome のスマートブラウジング、Autofill、Rambler、自然言語ウィジェットはすべて、スマートフォンを受動的な道具から能動的なアシスタントへ変えるためのものです。&lt;/p&gt;
&lt;p&gt;それが本当にユーザー習慣を変えるかは、自動化の信頼性、明確なプライバシー設定、スムーズなアプリ横断操作、そしてユーザーが最終的な制御を持ち続けられるかにかかっています。少なくとも今回の発表を見る限り、Google は Android の次の段階を、従来型のモバイル OS ではなくプロアクティブな AI システムとして定義しています。&lt;/p&gt;
&lt;p&gt;参考リンク：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.google/products-and-platforms/platforms/android/gemini-intelligence/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google Blog：A smarter, more proactive Android with Gemini Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Gemini Embedding 2：テキスト、画像、動画、音声を同じベクトル空間に入れる</title>
        <link>https://knightli.com/ja/2026/05/04/gemini-embedding-2-multimodal-rag/</link>
        <pubDate>Mon, 04 May 2026 06:01:10 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/04/gemini-embedding-2-multimodal-rag/</guid>
        <description>&lt;p&gt;Google Developers Blog が Gemini Embedding 2 の開発方法を紹介した。このモデルは Gemini API と Gemini Enterprise Agent Platform を通じて GA になっている。重要なのは、単なる新しい embedding モデルではなく、テキスト、画像、動画、音声、ドキュメントを同じ意味空間にマッピングできる点だ。&lt;/p&gt;
&lt;p&gt;これにより、検索システムが扱える範囲は広がる。従来の多くの RAG パイプラインでは、画像、動画、音声を先にテキストやメタデータへ変換し、それぞれ別にインデックスする必要があった。Gemini Embedding 2 はマルチモーダル入力を直接処理できるため、エージェント、検索、分類システムが実際の業務資料を扱いやすくなる。&lt;/p&gt;
&lt;p&gt;原文リンク：&lt;a class=&#34;link&#34; href=&#34;https://developers.googleblog.com/building-with-gemini-embedding-2/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Building with Gemini Embedding 2: Agentic multimodal RAG and beyond&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;モデルの機能&#34;&gt;モデルの機能
&lt;/h2&gt;&lt;p&gt;Gemini Embedding 2 は 100 以上の言語をサポートする。1 回のリクエストで処理できる内容は次の通り。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最大 8,192 text tokens&lt;/li&gt;
&lt;li&gt;最大 6 枚の画像&lt;/li&gt;
&lt;li&gt;最大 120 秒の動画&lt;/li&gt;
&lt;li&gt;最大 180 秒の音声&lt;/li&gt;
&lt;li&gt;最大 6 ページの PDF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;中心にある考え方は「統一された意味空間」だ。開発者は異なるモダリティの内容を同じベクトル表現に入れ、同じ検索、クラスタリング、再ランキングのロジックで処理できる。&lt;/p&gt;
&lt;p&gt;たとえば、テキスト説明と画像を同じ embedding リクエストに入れられる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;google&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;google.genai&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;types&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dog.png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;image_bytes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;embed_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;gemini-embedding-2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;An image of a dog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;types&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;image/png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;embeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;入力ごとに個別の embedding が必要で、集約された 1 つのベクトルでは困る場合は Batch API を使える。原文では、この種のバッチ対応について Agent Platform 側はまだ対応中だとも説明している。&lt;/p&gt;
&lt;h2 id=&#34;rag-にとっての意味&#34;&gt;RAG にとっての意味
&lt;/h2&gt;&lt;p&gt;マルチモーダル embedding はエージェント型 RAG に向いている。AI agent は、コードリポジトリ、PDF、スクリーンショット、図表、音声会議録、商品画像を同時に確認する必要があるかもしれない。すべての資料を同じ意味空間に入れられれば、形式ごとに別々の検索入口を作る必要がなくなる。&lt;/p&gt;
&lt;p&gt;Google は、タスクの目的に応じて task prefix を使うことを勧めている。これにより、embedding が検索目的に合いやすくなる。たとえば、質問応答、ファクトチェック、コード検索、検索結果には異なる prefix を使える。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Generate embedding for your task&amp;#39;s query:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;prepare_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;task: question answering | query: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#34;task: fact checking | query: {content}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#34;task: code retrieval | query: {content}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#34;task: search result | query: {content}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Generate embedding for document of an asymmetric retrieval task:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;prepare_document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;none&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; | text: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;この prefix は非対称検索に適している。ユーザーのクエリは短く、ドキュメントは長いことが多い。&lt;code&gt;query&lt;/code&gt; と &lt;code&gt;document&lt;/code&gt; をタスクに合わせて別々に整形すると、短い検索語と長い文書のマッチングを改善できる。&lt;/p&gt;
&lt;p&gt;原文では 2 つの導入例が紹介されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Harvey は法律検索ベンチマークで、以前の embedding と比べて Recall@20 precision が 3% 向上した。&lt;/li&gt;
&lt;li&gt;Supermemory は Recall@1 の検索精度が 40% 向上し、記憶、インデックス、検索、Q&amp;amp;A パイプラインに利用している。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの数字はすべての場面で同じ改善を保証するものではない。ただし、マルチモーダル embedding がデモだけでなく、実際の検索プロダクトで効果を出していることはわかる。&lt;/p&gt;
&lt;h2 id=&#34;ビジュアル検索&#34;&gt;ビジュアル検索
&lt;/h2&gt;&lt;p&gt;Gemini Embedding 2 は、画像検索、画像とテキストを組み合わせた検索、商品識別にも使いやすい。原文では、URBN の衣料レンタル会社 Nuuly が、倉庫で撮影したタグ未付与の衣類写真をカタログと照合するために使っている例が紹介されている。この導入により、Match@20 は 60% から約 87% に向上し、全体の識別成功率は 74% から 90% 超に上がった。&lt;/p&gt;
&lt;p&gt;この種の場面で重要なのは生成ではなく、「この画像はどの在庫、文書、商品レコードに最も近いか」を理解することだ。業務に大量の画像、動画クリップ、スキャン資料があるなら、マルチモーダル embedding はテキストだけのインデックスより自然に使える。&lt;/p&gt;
&lt;h2 id=&#34;検索結果の再ランキング&#34;&gt;検索結果の再ランキング
&lt;/h2&gt;&lt;p&gt;Embedding は rerank にも使える。一般的には、まず基本検索で候補を取得し、その候補とユーザーのクエリとの類似度を計算して、より関連性の高い内容を上位に並べる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. Define a function to calculate the dot product (cosine similarity)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;dot_product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ndarray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ndarray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. Retrieve your embeddings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# (Assuming &amp;#39;summaries&amp;#39; is your list of search results)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;search_res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_embeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;summaries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;embedded_query&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_embeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 3. Calculate similarity scores&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sim_value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dot_product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;search_res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;embedded_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 4. Select the most relevant result&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;best_match_index&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argmax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sim_value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;原文では別の考え方も紹介されている。まずモデルに内部知識から仮の基準回答を生成させ、その回答を embedding し、候補コンテンツとの類似度を比較して、意味的に最も近い結果を選ぶ方法だ。これは質問応答型 RAG で特に役立つ。&lt;/p&gt;
&lt;h2 id=&#34;クラスタリング分類異常検知&#34;&gt;クラスタリング、分類、異常検知
&lt;/h2&gt;&lt;p&gt;検索以外にも、embedding はクラスタリング、分類、異常検知に使える。前述の質問応答検索とは異なり、これらは対称的なタスクなので、&lt;code&gt;query&lt;/code&gt; と &lt;code&gt;document&lt;/code&gt; に同じ task prefix を使える。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Generate embedding for query &amp;amp; document of your task.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;prepare_query_and_document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#39;task: clustering | query: {content}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#39;task: sentence similarity | query: {content}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#39;task: classification | query: {content}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;この種のタスクは、評判分析、コンテンツ審査、類似アセットの分類、異常サンプルの発見に使える。また、agent が大量のコンテキスト資料を先に整理してから、後続の推論に入る用途にも向いている。&lt;/p&gt;
&lt;h2 id=&#34;保存とコスト&#34;&gt;保存とコスト
&lt;/h2&gt;&lt;p&gt;Gemini Embedding 2 はデフォルトで 3,072 次元のベクトルを出力する。Matryoshka Representation Learning を使っているため、&lt;code&gt;output_dimensionality&lt;/code&gt; でより小さい次元に切り詰められる。Google は効率を優先する場合、1,536 または 768 次元を推奨している。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;embed_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gemini-embedding-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;What is the meaning of life?&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;output_dimensionality&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;768&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ベクトルは Agent Platform Vector Search、Pinecone、Weaviate、Qdrant、ChromaDB などに保存できる。コスト面では、原文は Batch API がより高いスループットを提供し、デフォルト embedding 価格の 50% で利用できると説明している。&lt;/p&gt;
&lt;h2 id=&#34;開発者はどう使うか&#34;&gt;開発者はどう使うか
&lt;/h2&gt;&lt;p&gt;すでにテキスト RAG がある場合は、まず次の 2 種類の改善から始めるとよい。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PDF、スクリーンショット、画像説明、テキスト文書を同じインデックスに入れ、検索の再現率が安定するか確認する。&lt;/li&gt;
&lt;li&gt;質問応答、ファクトチェック、コード検索、商品検索など、タスクごとに task prefix を付ける。すべての内容を同じ embedding 形式で処理しない。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;新しいプロダクトを作るなら、次の方向を優先して検討できる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;企業ナレッジベース：文書、図表、プレゼン資料のスクリーンショット、会議資料をまとめて検索する。&lt;/li&gt;
&lt;li&gt;ビジュアル検索：画像、テキスト、混合入力で商品、アセット、デザイン案、アーカイブを探す。&lt;/li&gt;
&lt;li&gt;Agent ツールチェーン：coding agent、research agent、customer support agent が複数形式の業務資料を検索できるようにする。&lt;/li&gt;
&lt;li&gt;コンテンツガバナンス：テキスト、画像、動画クリップを統一的に分類、クラスタリング、異常検知する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gemini Embedding 2 の価値は、マルチモーダル資料を同じ検索可能な資産に変えることにある。開発者にとっては、「先にテキストへ変換してから検索する」中間層を減らし、RAG システムを実世界のデータ形態に近づけられる。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Gemini が Google built-in 搭載車に登場：車載音声アシスタントが本物の AI アシスタントに近づく</title>
        <link>https://knightli.com/ja/2026/05/01/gemini-cars-with-google-built-in/</link>
        <pubDate>Fri, 01 May 2026 06:09:57 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/01/gemini-cars-with-google-built-in/</guid>
        <description>&lt;p&gt;Google は 2026 年 4 月 30 日、&lt;code&gt;Gemini&lt;/code&gt; が &lt;code&gt;Google built-in&lt;/code&gt; 搭載車に順次展開され、Google Assistant のアップグレード版として提供されると発表した。&lt;/p&gt;
&lt;p&gt;重要なのは、単に「車内に AI アシスタントが増える」ことではない。車載音声インタラクションが、固定コマンドからより自然な連続会話へ移りつつある点だ。ユーザーは厳密な指示形式を覚える必要がなく、普通のアシスタントと話すように、Gemini にナビ、メッセージ処理、車両情報の確認、さらには一部の車内設定の操作を頼めるようになる。&lt;/p&gt;
&lt;h2 id=&#34;まずは米国の英語ユーザーから&#34;&gt;まずは米国の英語ユーザーから
&lt;/h2&gt;&lt;p&gt;Google の説明によると、このアップデートは新車と既存車の両方に提供される。条件は、その車が &lt;code&gt;Google built-in&lt;/code&gt; に対応しており、ユーザーが車載システムで Google アカウントにログインしていることだ。&lt;/p&gt;
&lt;p&gt;rollout はまず米国の英語ユーザーから始まり、その後さらに多くの言語と国へ拡大される。対象ユーザーには、車内で Gemini へのアップグレード案内が表示される。アップグレード後は、以下の方法で Gemini を呼び出せる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Hey Google&lt;/code&gt; と話しかける&lt;/li&gt;
&lt;li&gt;ホーム画面のマイクをタップする&lt;/li&gt;
&lt;li&gt;ステアリングホイールの音声ボタンを使う&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは、Google が Gemini をまったく新しい入口として作り直したわけではないことを示している。従来の車載音声入口を維持しつつ、その基盤となるアシスタントをより強力な Gemini に置き換えている。&lt;/p&gt;
&lt;h2 id=&#34;車載音声は固定コマンドだけに頼らなくなる&#34;&gt;車載音声は固定コマンドだけに頼らなくなる
&lt;/h2&gt;&lt;p&gt;従来の車載音声アシスタントでよくある問題は、できることは少なくないのに、ユーザーがかなり「正確な」言い方を求められることだ。表現が少し複雑になると、アシスタントが理解できなかったり、最も基本的な動作しか実行できなかったりする。&lt;/p&gt;
&lt;p&gt;Gemini が車載システムに入ることで、Google は自然な会話能力を強調している。たとえばユーザーは直接こう言える。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I need to grab lunch, find some highly rated sit-down restaurants along the way. I&amp;rsquo;m not in a rush, oh, and I’d like to eat outside.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gemini は Google Maps の情報を参照して、ルート沿いの適切なレストランを探せる。ユーザーはその後、駐車場の状況やベジタリアン対応の有無などを続けて質問でき、検索を最初からやり直す必要がない。&lt;/p&gt;
&lt;p&gt;このようなやり取りは運転中の文脈に合っている。運転中は、スマートフォンのように何度も絞り込み、タップし、条件を修正するのが難しい。音声アシスタントがより完全な意図を理解できれば、注意散漫を明確に減らせる。&lt;/p&gt;
&lt;h2 id=&#34;地図メッセージ音楽がより扱いやすくなる&#34;&gt;地図、メッセージ、音楽がより扱いやすくなる
&lt;/h2&gt;&lt;p&gt;Google が挙げている例は、ほとんどが運転中によくあるニーズに基づいている。&lt;/p&gt;
&lt;p&gt;第一のカテゴリは、ルートと場所の検索だ。&lt;/p&gt;
&lt;p&gt;Gemini は Google Maps の情報を使って、道中のレストラン、観光スポット、充電ステーションを探せる。また、現在のルートに関連する質問にも答えられる。たとえばスタジアムの近くを通るとき、近くでイベントがあるのか、それが交通に影響するのかを聞ける。&lt;/p&gt;
&lt;p&gt;第二のカテゴリは、メッセージ処理だ。&lt;/p&gt;
&lt;p&gt;ユーザーは Gemini に新しいテキストメッセージを要約させ、その文脈に基づいて返信できる。たとえば友人に「向かっている途中」と伝え、到着予定時刻を添えるよう頼める。内容を変えたくなった場合も、最初からやり直さずに追加で指示できる。&lt;/p&gt;
&lt;p&gt;第三のカテゴリは、音楽と雰囲気づくりだ。&lt;/p&gt;
&lt;p&gt;ユーザーはラジオ局名や具体的なプレイリストを知っている必要はない。聴きたい内容をそのまま説明すればよい。たとえばジャズのラジオ局を再生したり、YouTube Music で山道ドライブに合う明るい 70 年代の folk-rock を流し、スローバラードは飛ばすよう頼んだりできる。&lt;/p&gt;
&lt;p&gt;これらの機能自体は完全に新しいものではない。Gemini の価値は、複数の条件を一つの自然言語リクエストとして処理し、ユーザーを固定コマンドに戻さない点にある。&lt;/p&gt;
&lt;h2 id=&#34;gemini-live-によって車内でも移動しながら会話できる&#34;&gt;Gemini Live によって車内でも移動しながら会話できる
&lt;/h2&gt;&lt;p&gt;Google は、&lt;code&gt;Gemini Live&lt;/code&gt; も車載体験に入ると述べている。現在は beta だ。ユーザーは Gemini Live ボタンをタップするか、&lt;code&gt;Hey Google, let&#39;s talk&lt;/code&gt; と言うことで、より自由な会話を始められる。&lt;/p&gt;
&lt;p&gt;この場面は、「運転中の伴走型の学習やブレインストーミング」に近い。たとえば Lake Tahoe に向かう途中で、Gemini に地域の歴史や豆知識を話してもらえる。興味を引く内容があれば、途中で割り込んでさらに質問できる。到着後のハイキングコースや活動計画を手伝ってもらうこともできる。&lt;/p&gt;
&lt;p&gt;従来の車載アシスタントとの差は明確だ。従来のアシスタントはツールボタンに近いが、Gemini Live は連続的に会話できる音声インターフェイスに近い。&lt;/p&gt;
&lt;h2 id=&#34;オーナーズマニュアルとリアルタイム車両状態が重要な違い&#34;&gt;オーナーズマニュアルとリアルタイム車両状態が重要な違い
&lt;/h2&gt;&lt;p&gt;さらに注目すべきなのは、Gemini が一般的な質問に答えるだけではないことだ。Google は、自動車メーカーと協力し、Gemini を車両システムにより深く統合していると説明している。&lt;/p&gt;
&lt;p&gt;これにより、車そのものに近い能力がいくつか生まれる。&lt;/p&gt;
&lt;p&gt;第一に、ユーザーは車両機能について質問できる。&lt;/p&gt;
&lt;p&gt;たとえば「自動洗車の前に車をどう準備すればよいか？」や「ガレージの天井が低く、トランクが当たってしまう。トランクが全開にならないように設定するには？」と聞ける。Gemini はメーカー提供のオーナーズマニュアルをもとに、具体的な車種に合わせた回答を返す。利用できる情報の範囲や細かさは、ブランドや車種によって異なる。&lt;/p&gt;
&lt;p&gt;第二に、EV ユーザーはリアルタイムのバッテリー残量や航続距離について質問できる。&lt;/p&gt;
&lt;p&gt;たとえば現在のバッテリー残量、目的地到着時の予測残量、近くの充電ステーションの検索などだ。さらに Google Maps と組み合わせて、充電中に立ち寄れる近くのカフェなども探せる。&lt;/p&gt;
&lt;p&gt;第三に、一部の車内設定を自然言語で調整できる。&lt;/p&gt;
&lt;p&gt;Google の例では、ユーザーが「車内が曇っていて寒い」と言うと、Gemini がその意図を理解し、暖房を上げてデフロスターをオンにできる。&lt;/p&gt;
&lt;p&gt;こうした能力は、単にチャットボットを車載画面に移すよりも実用的だ。車は明確な状態、ハードウェア能力、安全上の境界を持つ環境である。AI アシスタントが車両の文脈を理解できれば、通常のQ&amp;amp;Aよりも価値は高くなる。&lt;/p&gt;
&lt;h2 id=&#34;車載-ai-では境界線がさらに重要になる&#34;&gt;車載 AI では境界線がさらに重要になる
&lt;/h2&gt;&lt;p&gt;車内での AI への要求は、スマートフォンやウェブページとは異なる。&lt;/p&gt;
&lt;p&gt;運転中、ユーザーは頻繁に画面を見ることも、AI を修正することに多くの注意を割くこともできない。アシスタントは十分に簡潔で信頼でき、重要な場面で新しい負担を生まない必要がある。&lt;/p&gt;
&lt;p&gt;そのため、Gemini が車に入ることは、あらゆる複雑なタスクが車内に適しているという意味ではない。より合理的な方向性は次のようなものだ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ナビゲーションや情報検索の操作コストを下げる&lt;/li&gt;
&lt;li&gt;多階層メニューを自然言語で置き換える&lt;/li&gt;
&lt;li&gt;ユーザーが車両機能を素早く理解できるようにする&lt;/li&gt;
&lt;li&gt;注意をそらさずにメッセージやメディアを扱う&lt;/li&gt;
&lt;li&gt;EV ユーザーによりスムーズな充電とルート情報を提供する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方で、高リスクな操作には明確な境界が必要だ。運転安全に関わる設定、確認が必要なメッセージ送信、車両制御に関わる操作には、十分に明確な確認フローがあるべきだ。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;Gemini が &lt;code&gt;Google built-in&lt;/code&gt; 搭載車に入ることは、AI アシスタントがスマートフォンやウェブページから日常環境へさらに広がっていく一歩だ。&lt;/p&gt;
&lt;p&gt;その意味は、車内でようやく「会話」できるようになることではない。車載音声アシスタントがより複雑な意図を理解し、地図、メッセージ、音楽、オーナーズマニュアル、一部の車両状態情報を組み合わせてタスクを完了できるようになることにある。&lt;/p&gt;
&lt;p&gt;rollout が順調に進めば、車載音声インタラクションは「コマンドを覚える」ものから「ニーズを説明する」ものへ徐々に変わっていくかもしれない。これは運転シーンにとって重要だ。本当に優れた車載 AI は、ドライバーに多くの注意を割かせるべきではないからだ。&lt;/p&gt;
&lt;p&gt;参考リンク：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.google/products-and-platforms/platforms/android/cars-with-google-built-in-gemini-tips-2026/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Your car with Google built-in is about to get smarter, thanks to Gemini - Google Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Google Nano Bananaを呼び出して画像を切り出す方法</title>
        <link>https://knightli.com/ja/2026/04/09/google-nano-banana-cutout-guide/</link>
        <pubDate>Thu, 09 Apr 2026 20:10:48 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/04/09/google-nano-banana-cutout-guide/</guid>
        <description>&lt;p&gt;この記事では、実用的な Python スクリプトを使用して、Google の &lt;code&gt;Nano Banana&lt;/code&gt; 画像編集機能を呼び出して商品画像を切り出す方法を示します。&lt;/p&gt;
&lt;p&gt;この現在の実装の目標は明確です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カタログから製品画像を読み取る&lt;/li&gt;
&lt;li&gt;Google 画像モデルを呼び出して背景の削除を実行します。&lt;/li&gt;
&lt;li&gt;返された画像に対してローカルの透明な背景のクリーニングを再度実行します&lt;/li&gt;
&lt;li&gt;最終出力は透明な下部 &lt;code&gt;PNG&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;白い背景の製品画像、ヘッドフォンの画像、および配線図面のバッチがすでにあり、電子商取引で使用できる透明な背景画像をすばやく生成したい場合、この方法は非常に簡単です。&lt;/p&gt;
&lt;h2 id=&#34;このコードは何をするのか&#34;&gt;このコードは何をするのか
&lt;/h2&gt;&lt;p&gt;このスクリプトは主に 4 つの部分に分かれています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;「背景を削除し、被写体を保持し、影を追加しない」ことをモデルに知らせるプロンプト ワードを定義します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;google-genai&lt;/code&gt; の画像生成インターフェイスを呼び出します。&lt;/li&gt;
&lt;li&gt;モデル応答から画像結果を抽出する&lt;/li&gt;
&lt;li&gt;次に、ローカル ロジックを使用してエッジの明るい背景を透明に変換し、残留エッジを減らします。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;つまり、単にモデルに画像を投げただけでは終わりではなく、「モデル編集＋ローカル後処理」を繋ぎ合わせて完成するのです。&lt;/p&gt;
&lt;h2 id=&#34;走る前の準備&#34;&gt;走る前の準備
&lt;/h2&gt;&lt;p&gt;最初に依存関係をインストールします。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;venv&lt;span class=&#34;se&#34;&gt;\S&lt;/span&gt;cripts&lt;span class=&#34;se&#34;&gt;\p&lt;/span&gt;ython.exe -m pip install google-genai pillow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;gemini_api_keyの取得方法&#34;&gt;GEMINI_API_KEYの取得方法
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;GEMINI_API_KEY&lt;/code&gt; は、Gemini API を呼び出すときに使用されるキーです。 Google の公式クイックスタートによると、キーをまだ持っていない場合は、Google AI Studio で直接作成できます。&lt;/p&gt;
&lt;p&gt;入手手順は以下の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Google AIスタジオを開きます。&lt;/li&gt;
&lt;li&gt;Google アカウントにサインインします。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Get API key&lt;/code&gt; または &lt;code&gt;API keys&lt;/code&gt; ページを見つけます。&lt;/li&gt;
&lt;li&gt;新しい API キーを作成します。&lt;/li&gt;
&lt;li&gt;生成されたキーをコピーします。&lt;/li&gt;
&lt;li&gt;スクリプトが読み取ることができるように、これをローカル環境変数に構成します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ページ上に使用可能なプロジェクトがない場合は、通常、最初にプロジェクトの初期化を完了してから、[API キー] ページに戻ってキーを作成する必要があります。&lt;/p&gt;
&lt;p&gt;キーを取得したら、環境変数を構成します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$env&lt;/span&gt;:GEMINI_API_KEY&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;your_api_key&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;cmd&lt;/code&gt; を使用している場合は、次のように記述できます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_api_key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;GEMINI_API_KEY&lt;/code&gt; と &lt;code&gt;GOOGLE_API_KEY&lt;/code&gt; を同時に設定した場合、実際の動作では通常 &lt;code&gt;GOOGLE_API_KEY&lt;/code&gt; が最初に読み込まれるため、混乱を避けるために 1 つだけを保持することをお勧めします。&lt;/p&gt;
&lt;h2 id=&#34;ディレクトリ構造の例&#34;&gt;ディレクトリ構造の例
&lt;/h2&gt;&lt;p&gt;スクリプトは 2 つのパラメータを受け取ります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;input_dir&lt;/code&gt;: 画像ディレクトリに入る&lt;/li&gt;
&lt;li&gt;&lt;code&gt;output_dir&lt;/code&gt;: 出力画像ディレクトリ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;images/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  product1.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  product2.png
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;output/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;走り方&#34;&gt;走り方
&lt;/h2&gt;&lt;p&gt;スクリプトファイル名が&lt;code&gt;cutout.py&lt;/code&gt;で、実行方法が次のとおりであるとします。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;venv&lt;span class=&#34;se&#34;&gt;\S&lt;/span&gt;cripts&lt;span class=&#34;se&#34;&gt;\p&lt;/span&gt;ython.exe .&lt;span class=&#34;se&#34;&gt;\c&lt;/span&gt;utout.py .&lt;span class=&#34;se&#34;&gt;\i&lt;/span&gt;mages .&lt;span class=&#34;se&#34;&gt;\o&lt;/span&gt;utput
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;モデルを変更したい場合は、パラメーターを明示的に渡すこともできます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;venv&lt;span class=&#34;se&#34;&gt;\S&lt;/span&gt;cripts&lt;span class=&#34;se&#34;&gt;\p&lt;/span&gt;ython.exe .&lt;span class=&#34;se&#34;&gt;\c&lt;/span&gt;utout.py .&lt;span class=&#34;se&#34;&gt;\i&lt;/span&gt;mages .&lt;span class=&#34;se&#34;&gt;\o&lt;/span&gt;utput --model gemini-2.5-flash-image
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;スクリプトは、入力ディレクトリ内のファイルを次の形式でループします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.jpg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.jpeg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.webp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;処理が完了すると、同じ名前の透過的な &lt;code&gt;PNG&lt;/code&gt; ファイルが出力ディレクトリに生成されます。&lt;/p&gt;
&lt;h2 id=&#34;コア呼び出しプロセス&#34;&gt;コア呼び出しプロセス
&lt;/h2&gt;&lt;p&gt;実際に Google Nano Banana を呼び出すキーコードは次のとおりです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generate_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PROMPT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ここでは 2 つのコンテンツが渡されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テキスト プロンプトの単語 &lt;code&gt;PROMPT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ワンピース &lt;code&gt;PIL.Image&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;プロンプトの内容は、製品画像全体の背景を削除し、本体のみを残し、いくつかの点を強調するようモデルに依頼することです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完全な製品を保管する&lt;/li&gt;
&lt;li&gt;細いワイヤーとケーブルの詳細を保持&lt;/li&gt;
&lt;li&gt;内部の空洞と環状領域をきれいにします&lt;/li&gt;
&lt;li&gt;新しいオブジェクトを追加しないでください&lt;/li&gt;
&lt;li&gt;影を追加しないでください&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この種のプロンプトワードは、カットアウトの品質、特にヘッドフォンケーブル、透明なエッジ、中空領域などの細部に大きな影響を与えます。&lt;/p&gt;
&lt;h2 id=&#34;なぜローカルで後処理を行う必要があるのでしょうか&#34;&gt;なぜローカルで後処理を行う必要があるのでしょうか?
&lt;/h2&gt;&lt;p&gt;モデルが結果を返した後、スクリプトは直接保存されませんが、&lt;code&gt;make_transparent_from_borders(image)&lt;/code&gt; が再度実行されます。&lt;/p&gt;
&lt;p&gt;このステップの考え方は次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;画像の周囲のエッジから始まる明るい背景ピクセルを見つけます&lt;/li&gt;
&lt;li&gt;幅優先検索を使用して、接続されているすべての明るい色の領域をマークします。&lt;/li&gt;
&lt;li&gt;最後に、これらの領域を透明に変更します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これを行う利点は、残っている白いエッジ、明るい灰色の背景、および不十分にきれいなエッジ領域をさらに除去できることです。&lt;/p&gt;
&lt;p&gt;「背景かどうか」の判断条件は以下の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;is_light_background_pixel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;spread&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;170&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;spread&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;簡単な理解は次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全体的に色が明るいので&lt;/li&gt;
&lt;li&gt;3 つの RGB チャネルの差が大きすぎることはありません&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;商品画像の背景が白地やライトグレー地、単色に近いものを加工する場合に適しています。&lt;/p&gt;
&lt;h2 id=&#34;完全なソースコード&#34;&gt;完全なソースコード
&lt;/h2&gt;&lt;p&gt;現在の完全なソース コードは、直接の再利用や二次的な変更を容易にするために以下に保持されています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;  1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;  9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 62
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 63
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 64
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 65
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 66
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 67
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 68
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 69
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 70
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 71
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 72
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 73
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 74
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 75
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 76
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 77
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 78
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 79
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 80
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 81
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 82
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 83
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 84
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 85
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 86
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 87
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 88
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 89
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 90
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 91
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 92
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 93
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 94
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 95
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 96
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 97
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 98
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 99
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;100
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;101
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;102
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;103
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;104
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;105
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;106
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;107
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;108
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;109
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;110
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;111
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;112
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;113
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;114
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;115
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;116
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;117
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;118
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;119
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;120
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;121
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;122
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;123
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;124
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;125
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;126
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;127
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;128
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;129
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;130
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;131
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;132
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;133
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;134
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;135
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;136
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;137
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;138
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;139
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;140
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;141
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;142
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;143
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;144
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;145
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;146
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;147
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;148
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;149
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;150
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;__future__&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;annotations&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;collections&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;deque&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;PIL&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;google&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ImportError&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# pragma: no cover&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;SystemExit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;Missing dependency: google-genai. Install it with &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;sa&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#39;.\.venv\Scripts\python.exe -m pip install google-genai&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;exc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PROMPT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;Remove the entire background from this product photo and return only the product &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;on a fully transparent background as a PNG. Keep the full product intact, preserve &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;thin cable details, clean the inner loops and holes, and do not add any new objects &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;or shadows.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;is_light_background_pixel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;spread&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;170&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;spread&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;to_pil_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;isinstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;image_obj&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pil_image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;_pil_image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;isinstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pil_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pil_image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;as_pil&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pil_image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;isinstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_pil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as_pil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;TypeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Unsupported image object type: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;!r}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;make_transparent_from_borders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;rgba&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RGBA&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pixels&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;visited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;tuple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;deque&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;tuple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;deque&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;push_if_bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pixels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_light_background_pixel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;visited&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;push_if_bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;push_if_bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;push_if_bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;push_if_bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;popleft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ny&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ny&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;push_if_bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ny&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pixels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgba&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;save_first_image_part&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;parts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;parts&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parts&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;candidates&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;parts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;candidates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;RuntimeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Model returned no content parts.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;part&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;inline_data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;inline_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inline_data&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;isinstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;inline_data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;inline_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inline_data&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;hasattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;as_image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to_pil_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exist_ok&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;make_transparent_from_borders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inline_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inline_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mime_type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exist_ok&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;wb&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;processed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;make_transparent_from_borders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;processed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with_suffix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.png&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;suffix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.png&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unlink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;missing_ok&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;RuntimeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Model returned text only and no edited image.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;process_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RGBA&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generate_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PROMPT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;save_first_image_part&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Use Nano Banana / Gemini image editing to cut out product images.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;input_dir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;output_dir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;--model&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gemini-2.5-flash-image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;GEMINI_API_KEY&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;SystemExit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Missing GEMINI_API_KEY environment variable.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;exts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.jpg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.jpeg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.png&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.webp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;src&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sorted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;suffix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stem&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.png&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;process_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;最適化を続けるのに適した場所&#34;&gt;最適化を続けるのに適した場所
&lt;/h2&gt;&lt;p&gt;このスクリプトを大量生産に引き続き使用する予定がある場合は、後でこれらの機能を追加し続けることができます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;単一の画像エラーが報告された後にバッチ全体が中断されるのを避けるために、失敗の再試行が追加されました。&lt;/li&gt;
&lt;li&gt;ログを記録して、処理に失敗した画像を特定しやすくします&lt;/li&gt;
&lt;li&gt;さまざまなバックグラウンドしきい値に合わせて構成可能&lt;/li&gt;
&lt;li&gt;サブディレクトリの再帰的スキャンをサポート&lt;/li&gt;
&lt;li&gt;元の画像と結果画像の比較プレビューを追加しました&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;「Google Nano Banana を呼び出して画像を切り出す方法」をすぐに理解したい場合は、実際には 3 つの主要な手順があります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;google-genai&lt;/code&gt; および &lt;code&gt;Pillow&lt;/code&gt; をインストールする&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GEMINI_API_KEY&lt;/code&gt; を設定します&lt;/li&gt;
&lt;li&gt;&lt;code&gt;client.models.generate_content()&lt;/code&gt; を使用してプロンプトの言葉と画像を渡します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;このコードの価値は、モデルを呼び出すだけでなく、製品画像の切り抜きタスクで直接使用するのに適した透明な背景の後処理も追加することです。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Google Gemma 4 モデル比較: 2B/4B/26B/31B 選び方は?</title>
        <link>https://knightli.com/ja/2026/04/05/google-gemma-4-model-comparison/</link>
        <pubDate>Sun, 05 Apr 2026 08:30:00 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/04/05/google-gemma-4-model-comparison/</guid>
        <description>&lt;p&gt;Gemma 4 は、&lt;code&gt;多模态&lt;/code&gt; と &lt;code&gt;本地离线运行&lt;/code&gt; に焦点を当てており、軽量エンドから高性能エンドまでの完全なモデル グラデーションを提供します。ほとんどのローカル展開ユーザーにとって重要なのは、「最大のものを選択する」ことではなく、「ハードウェアとタスクに最適なバージョンを選択する」ことです。&lt;/p&gt;
&lt;h2 id=&#34;gemma-4-モデルの比較&#34;&gt;Gemma 4 モデルの比較
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;次の表は、選択を簡単に参照できるようにしたものです。具体的なパフォーマンスとリソースの使用状況については、実際の展開環境のテストを参照してください。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;模型&lt;/th&gt;
          &lt;th&gt;参数规模&lt;/th&gt;
          &lt;th&gt;定位&lt;/th&gt;
          &lt;th&gt;主要优势&lt;/th&gt;
          &lt;th&gt;主要限制&lt;/th&gt;
          &lt;th&gt;推荐场景&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Gemma 4 2B&lt;/td&gt;
          &lt;td&gt;20 亿&lt;/td&gt;
          &lt;td&gt;超轻量&lt;/td&gt;
          &lt;td&gt;延迟低、资源占用小、部署门槛最低&lt;/td&gt;
          &lt;td&gt;复杂推理与长链路任务能力有限&lt;/td&gt;
          &lt;td&gt;移动端、IoT、轻量问答、简单自动化&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gemma 4 4B&lt;/td&gt;
          &lt;td&gt;40 亿&lt;/td&gt;
          &lt;td&gt;轻量增强&lt;/td&gt;
          &lt;td&gt;比 2B 更稳的理解与生成能力，仍易本地部署&lt;/td&gt;
          &lt;td&gt;高强度编码/复杂 Agent 任务上限有限&lt;/td&gt;
          &lt;td&gt;本地助手、基础文档处理、多语言日常任务&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gemma 4 26B&lt;/td&gt;
          &lt;td&gt;260 亿&lt;/td&gt;
          &lt;td&gt;高性能（专家混合）&lt;/td&gt;
          &lt;td&gt;推理和工具调用能力明显提升，适合生产工作流&lt;/td&gt;
          &lt;td&gt;显存需求显著上升，硬件门槛更高&lt;/td&gt;
          &lt;td&gt;编程助手、复杂工作流、企业内部 Agent&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gemma 4 31B&lt;/td&gt;
          &lt;td&gt;310 亿&lt;/td&gt;
          &lt;td&gt;高性能（稠密）&lt;/td&gt;
          &lt;td&gt;综合能力最强，复杂任务稳定性更好&lt;/td&gt;
          &lt;td&gt;资源消耗最高，部署与调优成本最大&lt;/td&gt;
          &lt;td&gt;高要求推理、复杂代码任务、重度自动化&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;選択方法-ハードウェアとタスクから逆算して考える&#34;&gt;選択方法: ハードウェアとタスクから逆算して考える
&lt;/h2&gt;&lt;p&gt;「走れるかどうか、スムーズに走れるかどうか」を主に見る場合は以下から選べます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;8GB&lt;/code&gt; ビデオ メモリ: 優先順位 &lt;code&gt;2B/4B&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;12GB&lt;/code&gt; ビデオ メモリ: &lt;code&gt;4B&lt;/code&gt; 以降のモデルの量子化バージョンを優先します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;24GB&lt;/code&gt; ビデオ メモリ: &lt;code&gt;26B&lt;/code&gt; に焦点を当て、タスクに従って &lt;code&gt;31B&lt;/code&gt; の量子化バージョンを評価できます。&lt;/li&gt;
&lt;li&gt;より高いグラフィックス メモリまたは複数のカード: &lt;code&gt;31B&lt;/code&gt; の高精度構成を試すことができます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安定性と推論速度の確保を優先し、徐々にモデル規模を大きくしていくことをお勧めします。&lt;/p&gt;
&lt;h2 id=&#34;4-つの典型的な使用シナリオ&#34;&gt;4 つの典型的な使用シナリオ
&lt;/h2&gt;&lt;h3 id=&#34;1-現地の一般アシスタント&#34;&gt;1) 現地の一般アシスタント
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;優先モデル: &lt;code&gt;4B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;理由：コストと効果のバランスが良く、長期の永続運用に適しています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-コードと自動化&#34;&gt;2) コードと自動化
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;優先モデル: &lt;code&gt;26B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;理由: 複数ステップのタスク、ツール呼び出し、およびスクリプト生成においてより安定しています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-難易度の高い推理と複雑なエージェント&#34;&gt;3) 難易度の高い推理と複雑なエージェント
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;優先モデル: &lt;code&gt;31B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;理由: 複雑なコンテキスト下での安定性が向上し、フォールト トレランスが向上します。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-エッジデバイスと軽量オフライン&#34;&gt;4) エッジデバイスと軽量オフライン
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;優先モデル: &lt;code&gt;2B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;理由: リソースに制約のあるデバイスに実装するのが最も簡単です。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;導入に関する推奨事項-ollama-オリエンテーション&#34;&gt;導入に関する推奨事項 (Ollama オリエンテーション)
&lt;/h2&gt;&lt;p&gt;最も現実的な方法は、「小さなステップで素早く実行する」ことです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まず、&lt;code&gt;4B&lt;/code&gt; を使用して、実行可能なベースライン (速度、メモリ、エフェクト) を確立します。&lt;/li&gt;
&lt;li&gt;実際のタスクの固定テスト セットを作成します (例: 20 の FAQ + 10 の自動タスク)。&lt;/li&gt;
&lt;li&gt;次に、&lt;code&gt;26B/31B&lt;/code&gt; にアップグレードして、精度、遅延、メモリ コストを比較します。&lt;/li&gt;
&lt;li&gt;「メリットが明らかな」場合にのみ、大型モデルをアップグレードしてください。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これにより、最初から大きなパラメータを追求し、遅延、低スループット、複雑なメンテナンスなどの問題が発生することを回避できます。&lt;/p&gt;
&lt;h2 id=&#34;結論は&#34;&gt;結論は
&lt;/h2&gt;&lt;p&gt;Gemma 4 の真の価値は、単に「より大きなパラメーター」ではなく、軽量から高性能までの実装可能なグラデーションの完全なセットです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;低コストで迅速にオンラインに接続したい場合は、&lt;code&gt;2B/4B&lt;/code&gt; から始めてください。&lt;/li&gt;
&lt;li&gt;ローカル AI を本番プロセスに真に統合したい場合は、&lt;code&gt;26B&lt;/code&gt; を優先してください。&lt;/li&gt;
&lt;li&gt;複雑な推論と高度な自動化に取り組みたい場合は、&lt;code&gt;31B&lt;/code&gt; をもう一度試してください。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gemma 4 に最適な選択は、通常、パラメータが最大のバージョンではなく、ハードウェアの条件とミッションの目標に最もよく一致するバージョンです。&lt;/p&gt;
&lt;!-- ollama-related-links:start --&gt;
</description>
        </item>
        
    </channel>
</rss>
