【小ネタ】ChatGPT からモックサーバー宛（Beeceptor宛）の HTTPリクエストを試す

## はじめに

ふと ChatGPT から外部サーバー宛の HTTPリクエストを送るということが、自分が意図したとおりに動作するかが気になり、それを以下のモックサーバーサービスを使って確認してみました。


●Beeceptor - Rest & SOAP API Mock Server
　https://beeceptor.com/


ゴールとしては、API を使うのではなく ChatGPT のサービスから、IoT的なことをやれるかどうかを確認する、というものです。


### 補足

（過去のモデルの一部も、Webアクセスは機能としてはできてるものはあったと思いますが）最近のモデルの o3 や o4-mini は、適宜 Webから情報を検索・取得して、なおかつ、Web検索で得た情報を用いたかなり高度な処理もできるようになってきているようです。
deep research を使った時ほどは時間はかけないものの、検索結果を利用してさらなる多段の処理をするという点で、ちょっとした deep research的な処理をやっている感じでしょうか。

その Webアクセスに関わる部分を活用した IoT的なことをやれると面白そうかと思って、まずは基礎的な部分を確認しました。


## さっそく試す

とりあえず確認してみることは、以下のとおりです。

- HTTPリクエストを受けることが可能なモックサーバーを準備し、そこに ChatGPT からのアクセスを試し、受信側でアクセスの有無を確認
- 上記の HTTPリクエストで、ChatGPT にパラメータ付の GETリクエストを依頼
- 上記の GETリクエストのパラメータに入れる値を ChatGPT が生成したものにする


### モックサーバーの準備

とりあえず [Beeceptor のトップページ](https://beeceptor.com/)の以下に適当な文字列を入力して、モックサーバーの URL を作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/28d0af66-f292-44b3-8e58-be8113ee0d23.png)


### ブラウザで動作確認

まずは、ブラウザで動作確認をします。先ほどのモックサーバーの URL「 `https://【自分が決めた文字列】.free.beeceptor.com` 」を、ブラウザのアドレスバーに入力してアクセスします。

そうすると以下のとおり、Beeceptor に対して GETリクエストが行われたことが確認できました。

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_50868_4cc26f2a-d80a-4a1f-aea3-98cca451b8ea.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ff826229-9eb5-4be7-9faa-7d4633b1d8a7.jpeg)



### ChatGPT からのアクセスを試す

#### お試し1

ChatGPT からアクセスしてみます。以下がプロンプトと ChatGPT の返答です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/326beec2-9a8d-47b8-b23e-30d00db13083.png)

Beeceptor にアクセスがあった結果が追加されましたが、念のため、再度 ChatGPT からのアクセスであることを分かりやすくするための修正を加えて試します。

#### お試し2： パラメータ指定

GETリクエストにパラメータ指定をします。プロンプトでは、以下のようにパラメータの一部を ChatGPT にランダムに決めてもらうようにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ddbe5fdd-1445-42bd-bedf-be80f9653d3a.png)

Beeceptor側の受信結果を見ると、上記の ChatGPT の返答に書かれている
モックサーバーの URL「 `https://【自分が決めた文字列】.free.beeceptor.com` 」 ＋ test=7 ＋ val=30
という GETリクエストの結果が表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/4d8b0de4-47e2-49fb-832f-9df034f29a53.png)

#### お試し3： パラメータ指定

最後に以下のプロンプトでのお試しをやってみました。

> 【プロンプト】
以下にアクセスしてレスポンスとを教えて。その際、GETリクエストのパラメータtextに、夏の季語を含む俳句をセットして。
>
> https://mytets0001.free.beeceptor.com

以下が、ChatGPT の画面と Beeceptor側の受信結果です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/8b08720b-5ab2-4d15-9f58-6f59a18de603.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/cf59a6de-62f7-46bf-acaf-d12431fae997.png)

Beeceptor側の受信結果で表示されている GETリクエストのパラメータを、念のため、デコードしてみます。適当に Web上でデコードを試せるサイトを使ってみたところ、ChatGPT側で作成された日本語の文章が、パラメータ「test」の内容として受信されていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/15cc6154-92d3-4dd9-9ff4-f3cbdabb228a.png)


## その後の取り組み

上記の続きとして取り組んだ内容として、「Node.js で作ったサーバーでパラメータ付の GETリクエストを受け取り、そのパラメータの内容によって別途用意した Webサイトに変化が生じる」というのを試しました。

あとは、過去に色々作っている HTTPリクエストに反応する IoT系の試作（デバイスの LED を光らせたり、デバイスで音を鳴らしたり、モーターを動かしたりなど）との組み合わせも試せればと思います。


## 余談

以下の、[水元公園バーベキュー広場での、バーベキュー＆ IoTLT（IoT に関する LT会イベント）](https://iotlt.connpass.com/event/349244/)にて、[発表](https://www.youtube.com/live/SaR23Fsz3Bw?si=fvfLWZo4Jk4JSHNb&t=7646
)するために用意したものでした。


https://x.com/n0bisuke/status/1916365479100486026

https://x.com/youtoy/status/1916365217724043747

https://x.com/youtoy/status/1916360449043664925


## 【追記】 デバイスを絡めたものを完成させました

上記の LT会には間に合わなかった、[ChatGPT からネット経由でデバイスを扱う IoT要素を含む構成のものを仕上げました](https://x.com/youtoy/status/1916512780837913003)。

<iframe width="560" height="315" src="https://www.youtube.com/embed/tEqwGSA6sy8?si=K_bLd1h5XHDsmeyo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>