本格的なエロチャットAIを作りたい その7(Google ColabとローカルPCの通信)
いよいよGoogle colabとローカルPCを通信させる段階にきた。
Google colabとローカルPCの通信
普通に考えれば、LLMに対してローカルPCがリクエストを投げ、Google colabがLLMを動かして会話をつなげ、ローカルPCに対してレスポンスを返すことになる。
そうなるとGoogle colab側がAPIサーバーになるべき。
ここで問題なのは、このAPIサーバーのURLが毎回変わってしまうことだ。
これ自体は大して問題ではない。
Google DriveにURLを書いたファイルを共有すれば可能だが、美しくない。
たかがURLを送るだけのことで、APIのルートとは別のルートを作らなければいけない。
そんなコードを書く気がしない。
とりあえずngrokを導入して動かしてみた。
すると、暫定URL → http://localhost にngrok tunnelができているように見える。
しかしこのhttp://localhostのリンクを叩いてもgoogle colabにアクセスできない。
Perplexity AIとかに相談しても不明。
PCを代えたがダメ。
しかし同じコードをローカルPCで動かすと正常に動作する。
もしかして…Google colab上のngrok tunnelは使えない?
よく考えてみれば、使えないのも当然かもしれない。
ngrokを動かしているのは、あくまでもGoogle colabであって、ローカルPCではない。
ローカルPCのブラウザでlocalhostと叩いたときにGoogle colabに繋がるためには、ローカルPCとGoogle colab間でngrok tunnelを構成しないといけないが、ローカルPCにはngrokはインストールされていない。
つまりこのリンクを叩いても動かないはずなのだ。
(もし間違っていたら指摘してください。修正しますので…)
これを回避するために、Google Colabをクライアント、ローカルPCをサーバーとして通信することにした。
ローカルPCのIPは固定されていると言っていいので、リクエストURLは常に一定とできるのがメリットだ。
通信の概要
Google colab側をクライアントとするので、以下のような通信となる。
1:Google colabから10秒おきに「REQUEST」という文字列を送る
2:ローカルPCでキー入力がなければ、「EMPTY」という文字列を送る
3:Google colabが「EMPTY」を受け取ると、入力なしと判断し、再度10秒後に「REQUEST」を送る
4:もしローカルPCでキー入力があれば、これをプロンプトと合体させてGoogle colabに送信する
5:Google colabは「EMPTY」ではない文字列が来たので、LLMへのプロンプトと判断し、LLMを実行する
6:実行した結果をローカルPCに送る
7:ローカルPCは「REQUST」ではない文字列がきたので、これをLLM出力として処理する
所感
クライアントとサーバーを逆に設定することで、ngrokも使わずにURLを固定化できたことは発想の転換だと思っている。
ポーリングによる無駄な通信やタイムラグはあるが、LLMでの待ち時間もかなりあるので、問題はない。
この記事が気に入ったらサポートをしてみませんか?