Amazon Web Services ブログ
Amazon Bedrock と Amazon Location Service による地理空間生成系 AI
この記事は、Geospatial
generative AI with Amazon Bedrock and Amazon Location Service を翻訳したのものです。
通常、地理空間ワークフローは、データを読み込んで変換し、地図、テキスト、グラフなどに可視化します。生成系 AI、自律型エージェントを利用すると、これらのタスクを自動化できます。このブログでは、Amazon Bedrock の基盤モデルからパワーエージェントまで、地理空間タスクを完了する方法について説明します。
これらのエージェントは、Amazon Location Service
を通じて利用できるジオコーディングなどのロケーションベースのサービスを使用して、さまざまなタスクを実行し、質問に答えることができます。エージェントを使用して Amazon Bedrock と Amazon Location Service
の機能を橋渡しするサンプルコードを示し、構築時の設計における考慮事項について説明します。
Amazon Bedrockは、テキスト、画像、Embedding のための基礎モデルにアクセスするための使いやすい API を提供するフルマネージドサービスです。Amazon
Locationは、Esri、HERE、Grab、OpenStreetMap などの信頼できるサードパーティから提供されたデータを使用して、地図、場所、ルーティング用の API を提供しています。
インフラストラクチャを完全に制御する必要がある場合は、Amazon
SageMaker JumpStart を使用することで、基盤モデルをデプロイでき、何百ものモデルにアクセスできます。
ソリューション概要
大規模言語モデル (LLM) の領域では、エージェントは LLM の助けを借りて自律的に推論してタスクを完了できるエンティティです。LLM
はテキスト生成だけにとどまらず、会話を行ったり、ドメイン固有のタスクを完了できます。この動作を導くために推論パターンを採用しています。 研究論文「Large Language Models are Zero-Shot Reasoners」によると、LLM
は知識の限界があるにもかかわらず、高レベルの推論に優れていることが分かります。
私たちは地理空間タスクを処理できるエージェントを作成するために、Amazon Bedrock の基盤モデルである Claude
2 を選択しました。全体的なコンセプトは単純明快で「地理空間データサイエンティストのように考えること」です。 このタスクには、データを読み取って変換し、関心を引くマップに視覚化する Python
コードを書く必要があります。そのために Plan-and-Solve Prompting と呼ばれるプロンプトパターンを利用しました。
Plan-and-Solve
戦略を使用すると、最初のタスクとして複数のステップで推論し大まかな計画を立てることができます。これは、エージェントが使用する大まかな計画で、読み込み、変換、視覚化のワークフローに適しています。これらのサブタスクはそれぞれ Claude 2
に送られ、それぞれ解決されます。
ニューヨークにおける Inside Airbnb
のリストプライスヒートマップを作成するサンプルタスクを考えてみます。タスクを完了するためのパスを計画するには、エージェントはデータセットを理解する必要があります。エージェントは、データセットの列とデータ型を知る必要があります。データセットからサマリーを生成して、エージェントがユーザーから指示されたタスク
(ヒートマップの生成) を計画できるようにします。
前提条件
デモをデプロイするには、いくつかの前提条件があります。アクセスキーのある AWS
アカウント、または、Amazon Bedrock と Amazon Location Service へのアクセス権限のある AWS Identity and
Access Management (IAM) ロール
が必要になります。Amazon Location Service コンソールを使用して、マップ、プレースインデックス、および、Amazon Location Service
API キーを作成する必要があります。 また、Docker がインストールされているローカル環境か仮想環境が必要です。今回のデモンストレーションでは、Docker がインストールされた Amazon Linux の Amazon Elastic Compute Cloud(Amazon EC2) インスタンスを使用します。
データを読み込み要約する
データセットに関するコンテキストをエージェントに渡すために、データを読み取り、タスクに関連する要約を提供できる Python コードを Claude 2 に生成させます。以下は、プロンプトの一部です。 全プロンプトはプロジェクトの
prompts.py
ファイルにあります。
これらのプロンプトから Claude 2 は以下の Python コードを生成します。
agent://
プレフィックスは、このファイルがセッションストレージフォルダー内に保存されていることを CLI に指示します。CLI が実行されると、ローカルデータを保存するための
geospatial-agent-session-storage フォルダーが作成されます。エージェントは、アップロードされた Airbnb のデータとその列名を認識します。次に、Claude
へ依頼するため、これらのインプットを使用してヒートマップを生成するためのヒントをプロンプトに渡します。
Claude 2 は以下のヒントを返します。
ソリューションを計画する
Claude 2 に大まかな計画を生成してもらいます。Python の NetworkXというグラフライブラリを使うと、問題解決の手順を計画できます。
前回のプロンプトと同様に、Claude 2 のガイドとなるいくつかの条件を渡します。
これらのプロンプトから Claude 2 は以下の Python コードを生成します。
この NetworkX グラフでは、Claude 2 がプロセスを主に 3 つのセグメントに分解します。
- データの読み込み — Airbnb のリストプライスを特定の URL から Pandas データフレームにインポートする
- データの変換 — 緯度と経度の座標に基づいたジオメトリ列の作成
- データの視覚化 — Airbnb のリストプライスを表示するヒートマップの生成
このアプローチにより、地理空間タスクを明確かつ簡単に実装できます。 GraphViz を使用すると、以下のワークフローを視覚化できます。
計画を実行する
Claude 2 から生成された計画を実行します。各ステップで Claude 2 に対応するコードを記述します。Claude 2 に焦点を絞るために、各タスクに大まかな条件を設けています。Claude 2
がそれぞれのフェーズで生成したコードについて詳細を説明します。
データの読み込む
Airbnb のリストプライスのデータを Pandas DataFrame にロードするには、プロンプトを作成しいくつかのパラメーターを渡します。 Operation_task の「Load Airbnb data」は、上のグラフの
load_data ノードを指しています。
これらのプロンプトから Claude 2 は以下の Python コードを生成します。
データの変換
次に、Claude 2 は、latitude
と longitude
を使用して DataFrame に geometry
列を追加するコードを生成します。このプロンプトでは、以下の条件を設けています。
これらのプロンプトから Claude 2 は以下の Python コードを生成します。
データの視覚化
最後に、Claude 2 は空間レンダリング用の Python ライブラリである pydeckを使用してヒートマップを生成します。このプロンプトでは、以下の条件を設けています。
これらのプロンプトから Claude 2 は以下の Python コードを生成します。
Claude 2 の応答には、各関数が指定された条件をどのように満たすかを説明する役立つメモも含まれています。たとえば、ヒートマップの視覚化では Claude 2 は次の点に注目しました。
"This function generates a heatmap of Airbnb listing prices using pydeck and saves the resulting HTML locally. It fulfills the requirements specified in the prompt."
生成されたコードを組み立てる
Claude 2 がそれぞれの構成要素を生成したのでまとめます。エージェントは、これらすべてのスニペットを自動的に 1 つの Python ファイルにまとめます。このスクリプトは、各関数を順番に呼び出し、プロセス全体を効率化します。
最終的には、以下のようなコードになります。
スクリプトが実行されると、Claude 2 がヒートマップを生成するコードを含む HTML ファイルを作成します。以下の画像は、Amazon Location Service ベースマップのニューヨークに Airbnb
のリストプライスヒートマップを表示しています。
Amazon Bedrock で Amazon Location Service を使う
Plan-and-Solve エージェントは地理空間タスクを処理できますが、住所のジオコーディングなどのタスクには少し異なるアプローチをとる必要があります。そのためには、LLM を使って推論と実行を組み合わせる ReACT 戦略が使えます。
ReACT パターンでは、エージェントが顧客のインプットと自由に利用できるツールに基づいて推論し実行します。Claude 2
搭載エージェントにジオコーディング機能を持たせるためのツールを開発しました。このツールは、Amazon Location Service の Places API で SearchPlaceIndexForText
メソッドを使用して住所を地理座標に変換します。
この短いやり取りで、エージェントは住所のジオコーディングを解読し、ジオコーディングツールを起動して、緯度と経度を返します。
ヒートマップのプロット、住所のジオコーディングを行う場合でも、Claude 2 を React や Plan and Solve などのエージェントと組み合わせることで地理空間のワークフローを簡素化できます。
デモをデプロイする
デプロイするには、以下の手順をご覧ください。
- 以下のリポジトリをローカルマシンまたは EC2 インスタンスに複製します。
aws configure --profile <profilename>
を実行してデフォルトのリージョンの設定が必要になる場合があります。このアプリケーションはus-east-1
を使用してテストしました。
リポジトリのクローンを作成されたら環境変数を設定します。
- ディレクトリを複製されたプロジェクトフォルダーに変更します。
- お好みのテキストエディタを使って
.env
ファイルを編集します。
- API キー、マップ名、プレースインデックス名を追加します。
- 以下のコマンドを実行してコンテナを構築します。
- 以下のコマンドを実行して Docker コンテナを実行し接続します。
- Airbnb のデータセットを取得します。
- 以下のコマンドを実行してセッションを作成します。 セッションを使用して独自のチャット環境を分離します。
これで、アプリケーションを起動する準備ができます。
- 以下のコマンドを実行してチャットアプリケーションを起動します。
チャットプロンプトが表示されます。
- 以下の質問をしてみてください。
エージェントは Airbnb_listings_price.csv
を取得、CSV ファイルを /data
フォルダーにダウンロード、解析して地理空間データフレームに変換します。次に、データを変換するコードと視覚化用のコードを生成します。 最後に、/data
フォルダーに書き込まれる HTML
ファイルを作成します。HTML ファイルをブラウザーで開くとヒートマップを確認できます。
別の例では、Amazon Location Service の Places API を使用して住所をジオコーディングしています。エージェントに 112 E 11th St, Austin, TX 78701
の住所をジオコーディングするように依頼すると、以下のような回答が得られます。
まとめ
この記事では、Amazon Bedrock と Amazon Location Service の概要と、これらを組み合わせて地理空間データを分析および視覚化する方法について説明しました。 また、Plan-and-Solve と
ReACT、エージェントによる使用方法についても説明しました。
私たちのサンプルは入門に過ぎません。サンプルコードをダウンロードして、地理空間タスク用の独自のエージェントとツールを追加してみてください。
著者
Jeff Demuth は 2016 年に Amazon Web Services (AWS) に入社したソリューションアーキテクトです。 彼は地理空間コミュニティに焦点を当てており、地理情報システム(GIS)とテクノロジーに情熱を注いでいます。 仕事以外では、旅行、 Internet of Things (IoT)
アプリケーションの構築、最新のガジェットに触れ楽しんでいます。
Swagata Prateek は、Amazon Web Services (AWS) の Amazon Location Service で働いているシニアソフトウェアエンジニアで生成系 AI と地理空間について重点的に取り組んでいます。