
【夏休みの自由研究リレー】 散歩中に話題を提供してくれるアンビエントエージェントを作ってみた
はじめに
こんにちは、ほりぐちです。
当記事はクラスメソッドの有志による『夏休みの自由研究リレー』 第 26 回のエントリです。
このブログリレーの企画は、普段からクラウドや AI を追いかけているメンバーによって、「やってみた」だけではなく「作ってみた」や「調査/研究してみた」もアウトプットしてみようという企画です。
新たな知見になることは勿論、アイデアを自社やコミュニティの発展に寄与できればと考えておりますので、お付き合い頂けますと幸いです。
今回の記事は「散歩中に話題を提供してくれるアンビエントエージェントを作ってみた」です。
では、さっそくいってみましょう。
前振り
ようやく少し涼しくなってきましたが、みなさん、散歩はしますか?
季節ごとに見慣れた景色の違った光景を楽しめる、あえて電車で数駅離れそこから歩く、とにかく長距離を歩き続ける、など散歩は飽きがこない魅力的なアクティビティです。
私は行ったことのない場所を自分の足で歩くのが好きなので、旅先でもあえて交通機関を使わずに徒歩で観光したりします。
そんな散歩をしている中で時々「あの建物気になるけど、スマートフォンを出してまで調べるほどではないな」と感じる場面があります。
反対に、近くに名所や歴史的な建物があっても、その存在に気づかないまま通り過ぎてしまうこともあったと思います。
そんな時に、一定の基準に基づいて相手の方からその場所について教えてくれるような存在がいると散歩が楽しくなるのではないかと考えました。
そこで、日々散歩をする中で自分から調べなくても近くにある名所を教えてくれる同行者のようなエージェントを作ってみました。
アンビエントエージェントとは
最近 AI エージェントという単語をよく聞くようになってきています。
AI エージェントとは、簡単にいうと「目的を指示するとそれをタスクに分解し、外部ツールを利用しながら自律的に実行してくれるソフトウェア」のことです。

一方で、ユーザーが毎回タスクを与えるのではなく、継続的に環境を監視・知覚して何かしらのきっかけ(イベント)に応じて動き出すエージェントもあります。
ここでは、そのようなエージェントをアンビエントエージェントと呼びます。
(英単語 "ambient" には「周囲の」「環境に溶け込んだ」といった意味があります)
例えば以下のような例があります。
- メールを受信したら中身を読んで対応をサジェストしてくれる
- 継続的にインフラ環境などを監視し、一定の条件に応じて人間に通知してくれる

今回は、ユーザーの位置情報を元に周囲の名所を検索し、能動的にそれを教えてくれるようなアンビエントエージェントを作ってみました。
動作イメージ
動作イメージとしては次のようなものになります。

- アプリで「散歩を開始」ボタンを押すと位置情報を取得し始める
- 一定の距離を歩くたび、近くに紹介に値する名所があるかを探索
- 範囲内にあれば、それに関する情報を Wikipedia や Web 検索でとってきて説明を教えてくれる
- なければ、範囲を広げて再探索(最終的に半径 1000m まで拡大)
- 3 回範囲を広げて見つからなければ解説なしで終了
- 2 に戻る
これを繰り返します。
今回の構成
今回はこのような構成で散歩エージェントを構築しました。

| コンポーネント | 実態 | はたらき |
|---|---|---|
| iOS アプリ | SwiftUI 製の iOS アプリ | iPhone の位置情報を監視し、一定距離進むごとに Worker へ座標を送信する。返ってきた文章を画面に表示し、音声を再生する |
| Workerbackend | Cloudflare Workers 上のバックエンド(Hono + TypeScript) | 処理全体をオーケストレーションする。外部サービスを呼び分け、呼び出し順・タイムアウト・打ち切りを制御する。D1 / KV の読み書き、方角計算、返答文の組み立ても担う |
| D1 | Cloudflare の SQLite データベース | 検索・集計が必要なデータを扱う(30 日以内に喋った場所をすべて出す、など) |
| KV | Cloudflare の キーバリューストア | 同じ外部問い合わせを繰り返さないための設定や、生成した mp3 の保存に使う |
| Overpass | OpenStreetMap を対象にした検索 API | 現在地の周囲にある名所や観光スポットを探す(銅像、記念碑、史跡、公園など) |
| Wikipedia | Wikipedia API | geosearch で近隣の記事を探し、決定した場所の記事本文を取得する |
| Tavily | Web 検索 API | Wikipedia などの事典情報にないエピソードや補足を探す |
| OpenAI | 文章生成・音声合成 API | 2 つの用途で利用する。1. 解説生成 2. 解説の読み上げ |
アプリが位置情報を送信すると、Cloud Flare Workers がデータベースや OpenAI, Web 検索などの API を利用し、最終結果をアプリ側に戻します。
毎回同じ解説を出さないよう 30 日以内にしゃべった場所のリストを保持する、といったデータを持ちますが、基本的には位置情報に応じて名所検索、解説文章作成、読み上げ音声作成、アプリに戻す、ということを都度繰り返すシンプルな構成です。
実際に使ってみた
それでは完成したアプリを早速使ってみましょう。
多摩川の近くに行って実際にアプリを起動しながら歩いてみます。
しばらく歩くと、解説が聞こえてきました。
画面を見ると解説の原稿が表示されています。
やった!大成功!!
……かと思いきや、一つ大きな問題がありました。
こちらの実際のアウトプットをご覧ください。

お察しの通り、解説が全然面白くないですね。
想定通りの動きはしてくれたのですが、全然頭に入ってこないしずっと聞いてるのがかなりしんどいです。
反省と改善
なぜ面白くなかったかを考えたところ、解説してくれる内容があまりにも歴史概要すぎるところにあるのではないかと思い至りました。
せっかく喋り出しても、Wikipedia の序盤をただ読み上げただけみたいになっているので、それを今聞かされても……となってしまいます。
そこで、散歩中に聞いて面白いと思えるようにいくつかの改修をしました。
具体的には、「人から聞かされて『へぇ〜』ってなる解説」を目標に、以下のような変更をしました。
- 読み上げ音声を iPhone 標準から OpenAI のボイスモデルへ
- 機械音声すぎたので、より自然に聞こえるように
- 企業の本社ビルはヒットしないように
- 街中で会社名がヒットしすぎるため
- 銅像や記念碑の重みを増加
- 見つけやすいものが優先的にヒットするように
- 銅像などは来歴に面白いエピソードがありがちなのではないかという仮説のもと
- 使用モデルを o4-mini から GPT-5.6 Luna に
- 喋る内容に Web から検索したエピソードやトリビアを含ませるように
- 概要の羅列で終わるのを防ぐために
再実験
ということで、早速改修版で再実験をしてみましょう。
今回は都内各地でヒットした名所のうち、面白かったものをピックアップして紹介します。

地方出身の私としては、まず大丸が江戸時代にあったことに驚きました。
そして「喧嘩と火事は」というけどまさか江戸時代で 7 回も火事になってるとは思わず、しかも火災後に売り上げが増えたという面白いエピソードも知ることができました。

よりによってクロヒョウが!という驚きがまずありました。
そして特別警備隊まで出動して 12 時間かけて捜索したというところに当時の騒ぎの大きさを感じますね。

まずモヤイ像の石って伊豆諸島の新島産だったんだ、という発見や、いくらルパンの企画とはいえ 2 トンくらいあるモヤイを一晩で!?という驚きもありました。
いかがでしょう?
実際現地で友達からこの話をされたら 14 へぇくらいあげられる気がします。
ただ、今回紹介したのはかなりうまくいった場所で、解説を聞いてもあまり面白くないと思うケースは残念ながらまだ多いです。
アウトプットの内容についてはまだまだ改良の余地がありそうですね。
おわりに
それではまとめです。
結論としては「散歩中に位置情報から周囲の名所を検索して、解説をしてくれるエージェント」という当初のコンセプトは達成できたかと思います。
一方で、名所の情報を取得して正確な説明をすることと、散歩中に聞いていて面白い内容になっているかは別の問題でした。
結局のところ、名所を検索して説明を生成する部分はベースとしつつも、「どのタイミングで」「どんな内容を」「どんな長さで伝えるか」の方が、ユーザー体験を左右しそうだと感じました。
たとえば、私が試した限りだと「この建物は何年に建てられた」という説明よりも、「このあたりでは昔こういう出来事があった」「いま見えているこれにはこんな背景がある」といった、その場所に関するエピソードを含む話の方が面白かったです。
あとはエージェントの口調も体験に寄与する気がします。
同じ場所を紹介するときでも、例えば学芸員のように冷静に解説をしてもらうのか、陽気な観光ガイドのようにハイテンションで解説をしてもらうのかによって受ける印象は大きく変わりそうです。
今回の結果を受けて、解説内容とその見せ方、という二軸で改良していくことでより良いユーザー体験が得られるのではないかと考えています。
このブログではここまでの紹介とさせていただきますが、今後もより良い散歩ライフのために改良を続けていこうと思います。
以上、『夏休みの自由研究リレー』の第 26 回のエントリ『散歩中に話題を提供してくれるアンビエントエージェントを作ってみた』でした。








