XREAL Air で xR + 音声認識 + enebular + ChatGPT + HERE Discover API で現在地の周辺情報探索アプリを作ったメモ

この記事は HERE Advent Calendar 2023 の 15 日目の記事です。XREAL Air で xR + 音声認識 + enebular + ChatGPT + HERE Discover API で現在地の周辺情報探索アプリを作ったメモです。

このように動きます

XREAL Air に「近くのカフェ教えて」というと HERE Discover API が探索してきてくれた最も近い 3 件の結果(場所名・現在地からの距離)を返して、さらにそれをリストで ChatGPT に伝えて良い感じに爽やかなナビゲータのキャラづけて説明させています。

ChatGPT がいい具合にキーワード抽出するの「まわりの交番おしえて」なら「交番」とか「ファーストフード店教えて」なら「ファーストフード店」とかカフェでなくても、うまく機能してくれます。

XREAL + 音声認識で文字起こし+位置情報を送る仕組み

XREAL Air からマイク録音して音データを Whisper API で文字起こしして ChatGPT API とやり取りするメモ

基本的には XREAL Air からマイク録音して音データを Whisper API で文字起こしして ChatGPT API とやり取りする 仕組みを使っています。

image

これを Nebula という XREAL さんが公式で出しているツールを通じて AR モードでアプリケーションを表示しています。

image

加えて Unityで位置情報(緯度/経度/高度)を取得する こちらのナレッジをベースに XREAL Air のメイン処理ををしているスマートフォンで Android Unity が動いて、このように位置情報を取得しています。

使っている HERE Discover API

image

一旦、限定プランで対応しています。

image

そしてアプリを登録します。

image

アプリ ID と API キーをメモしておきます。

image

今回は Geocoding and Search API v7 のなかの Discover を使います。

enebular + ChatGPT + HERE Discover API の部分

image

さて実際のフローはこちらです。

image

はじめに XREAL Air から送られてくる情報を処理します。

image

このようなデータです。message が実際の質問で、あとは lat が緯度、long が経度です。

image

こちらで質問からキーワード抽出プロンプトで ChatGPT にお願いして gpt-3.5-turbo Function calling を行って HERE Discover API に q のパラメータにキーワードを送るための対応をしてます。

image

プロンプトの内容です。

image

Function calling で返答するときの JSON スキーマ的な指示です。前述のプロンプトから name の keyword_ok のような指示からつながってます。

image

そして、うまくキーワードが keyword 値で抽出されました。

image

つづいて、ここでは先ほどのキーワードをもとに HERE Discover API に聞いています。

image

この change ノードで API への内容を指定してます。

image

at に位置情報を入れつつ、q に「カフェ」といった抽出したキーワードが入るわけです。

image

そして HERE Discover API から帰ってきた結果をもとに、ChatGPT にまとめをお願いするプロンプトを作成します。

image

このようなテンプレートで、

image

実際にはこういった形で動作します。早さ重視で gpt-3.5-turbo で行っています(5~10秒)。gpt-4 だともっと気の利いた返答を返しますが、結構レスポンスが遅いです(15~20秒)。

image

あとは XREAL Air に完成した文言が返ってきて XREAL Air に表示されます。このサンプルの場合、ちょうど紀尾井町あたりで実施してみたものですが、このように動作してます。

これは実際に飯田橋で動いたもののイメージです。

レスポンス的には

  • キーワード抽出プロンプトで ChatGPT にお願い部分
    • 1 秒くらい
  • HERE Discover API に問い合わせ
    • 一瞬で 1 秒も満たない
  • ChatGPT にまとめをお願いするプロンプト
    • 結構考えさせるのか 5 ~ 10 秒

ということで質問してから 10 秒前後かかってしまいますが「現在地で無茶振りしていい具合に返答してくれるアシスタントさん」という観点では私はアリだと思っています。ちょっと考えちゃうのもかわいい。

ChatGPT の言葉を解釈し操る力に乗りつつ、結構少ない実装で xR で便利探索アプリのプロトタイプができたのはうれしかったです!