こんにちは、ただしです。
オムライス探索家兼エンジニアです。
クラウドファンディングのリターンとして、皆さんにご提供するアプリ『オムクエ』を現在開発中です。
オムライス指数について
これは、オムクエで最も重要な要素で、ある場所周辺で昔ながらのオムライスを出す店が存在する確度を示します。
その計算方法や実装について、こちらの記事で解説しています。
時々Botが何も返答しない
特に、大きな駅など周辺にお店がたくさんある駅を指定した際に、リプライが無い場合があります。
原因は、使用しているNetlifyのタイムアウトだと分かっています。
お店の情報を取得するのにGoogle MAPのNearby Searchを使っているのですが、一回の呼び出しで20件まで取り出せます。一回呼び出しした後は、2秒ほどウエイトを入れないと、エラーになることが分かっています。
オムライス指数の計算には、喫茶店と町中華で検索を掛けており、その処理のためのウエイトは最大8秒になってしまいます。
さらに、OpenAIにも聞いているので、こういった外部のAPI呼び出しを完了するのに10秒以上掛かる場合があります。
netlifyは約10秒でタイムアウトとなって処理を終了してしまうので、Botへのリプライができなくなります。
オムライス指数に必要なパラメーターは今後増やす予定なので、この状況は無視できません。
呼び出し順序を変更する
最初に作成したロジックでは、以下のソースのように、まずGoogleのAPIを呼び出して、その処理が完了してから、OpenAIのAPIを呼び出していました。
// Google MAP APIの呼び出し
const result = await getOmuIndex(stationName);
// result を使った処理
...
// OpenAI APIの呼び出し
const result2 = await calculateOmuIndex(stationName);
// result2を使った処理
...
Google APIを呼び出しているgetOmuIndex()
の呼び出しが完了するまで待って、OpenAI APIを呼び出しているcalculateOmuIndex()
を呼び出しているので、これらの処理はシーケンシャルに実行されるので、実行時間は足し算となります。
これを、以下のように変更しました。
// Openai API の呼び出し
const openaiPromise = calculateOmuIndex(stationName);
// Google MAP API APIの呼び出し
const result = await getOmuIndex(stationName);
// result を使った処理
...
const result2 = await openaiPromise;
// result2を使った処理
...
こうすることで、OpenAI APIの呼び出しと並行して、Googleの呼び出しを行うことができるようになりました。
ちょっとした工夫でしたが、この修正を行った後は、Botがリプライを返さないということがなくなったので、効果が出たことが確認できました。
今後パラメータが増大したときには、10秒以上必要になってしまうことが考えられるので、根本的な解決にはなっていませんが、当面はこれで凌いで、UIの作成など動くβ版を作ることを優先しようと考えています。
これをご覧の皆さんで、解決するアイデアを思い付いた方は、ぜひコメントをお願いします。
以上