この記事は HERE Advent Calendar 2023 の 15 日目の記事です。XREAL Air で xR + 音声認識 + enebular + ChatGPT + HERE Discover API で現在地の周辺情報探索アプリを作ったメモです。
このように動きます
うまくいったー! #HERETechnologies API が探索してきてくれた最も近い 3 件の結果(場所名・現在地からの距離)を返した。さらにそれをリストで ChatGPT に伝えて良い感じに爽やかなナビゲータのキャラづけて説明させてます。親切感があってよさげにできたー。 #XREAL pic.twitter.com/hUSJoiUDQV
— Tanaka Seigo (@1ft_seabass) December 13, 2023
XREAL Air に「近くのカフェ教えて」というと HERE Discover API が探索してきてくれた最も近い 3 件の結果(場所名・現在地からの距離)を返して、さらにそれをリストで ChatGPT に伝えて良い感じに爽やかなナビゲータのキャラづけて説明させています。
ChatGPT がいい具合にキーワード抽出するの「まわりの交番おしえて」なら「交番」とか「ファーストフード店教えて」なら「ファーストフード店」とかカフェでなくても、うまく機能してくれます。
XREAL + 音声認識で文字起こし+位置情報を送る仕組み
XREAL Air からマイク録音して音データを Whisper API で文字起こしして ChatGPT API とやり取りするメモ
基本的には XREAL Air からマイク録音して音データを Whisper API で文字起こしして ChatGPT API とやり取りする 仕組みを使っています。
これを Nebula という XREAL さんが公式で出しているツールを通じて AR モードでアプリケーションを表示しています。
加えて Unityで位置情報(緯度/経度/高度)を取得する こちらのナレッジをベースに XREAL Air のメイン処理ををしているスマートフォンで Android Unity が動いて、このように位置情報を取得しています。
使っている HERE Discover API
一旦、限定プランで対応しています。
そしてアプリを登録します。
アプリ ID と API キーをメモしておきます。
今回は Geocoding and Search API v7 のなかの Discover を使います。
enebular + ChatGPT + HERE Discover API の部分
さて実際のフローはこちらです。
はじめに XREAL Air から送られてくる情報を処理します。
このようなデータです。message が実際の質問で、あとは lat が緯度、long が経度です。
こちらで質問からキーワード抽出プロンプトで ChatGPT にお願いして gpt-3.5-turbo Function calling を行って HERE Discover API に q のパラメータにキーワードを送るための対応をしてます。
プロンプトの内容です。
Function calling で返答するときの JSON スキーマ的な指示です。前述のプロンプトから name の keyword_ok のような指示からつながってます。
そして、うまくキーワードが keyword 値で抽出されました。
つづいて、ここでは先ほどのキーワードをもとに HERE Discover API に聞いています。
この change ノードで API への内容を指定してます。
at に位置情報を入れつつ、q に「カフェ」といった抽出したキーワードが入るわけです。
そして HERE Discover API から帰ってきた結果をもとに、ChatGPT にまとめをお願いするプロンプトを作成します。
このようなテンプレートで、
実際にはこういった形で動作します。早さ重視で gpt-3.5-turbo で行っています(5~10秒)。gpt-4 だともっと気の利いた返答を返しますが、結構レスポンスが遅いです(15~20秒)。
あとは XREAL Air に完成した文言が返ってきて XREAL Air に表示されます。このサンプルの場合、ちょうど紀尾井町あたりで実施してみたものですが、このように動作してます。
#XREAL Air が現実世界と結果テキストを関わってる雰囲気です。これは Adobe Express で合成したものです。 #HERETechnologies pic.twitter.com/EeQflSzRFf
— Tanaka Seigo (@1ft_seabass) December 13, 2023
これは実際に飯田橋で動いたもののイメージです。
レスポンス的には
- キーワード抽出プロンプトで ChatGPT にお願い部分
- 1 秒くらい
- HERE Discover API に問い合わせ
- 一瞬で 1 秒も満たない
- ChatGPT にまとめをお願いするプロンプト
- 結構考えさせるのか 5 ~ 10 秒
ということで質問してから 10 秒前後かかってしまいますが「現在地で無茶振りしていい具合に返答してくれるアシスタントさん」という観点では私はアリだと思っています。ちょっと考えちゃうのもかわいい。
ChatGPT の言葉を解釈し操る力に乗りつつ、結構少ない実装で xR で便利探索アプリのプロトタイプができたのはうれしかったです!