はじめに
ChatGPTのAPIを使って何かしたいなというのとAzure Functionsを試してみたかったので、組み合わせて「ChatGPTで占いを作成して毎日自動更新するWebサイト」を作って公開しました。
作成したWebサイトはこちら https://fortunetellingai.z11.web.core.windows.net/
コードはこちら https://github.com/yymatsumoto/FofrtuneTellingAI
個々の技術の使い方(ChatGPT API, Azure Functions, Azure Blob Storage)はググれば出てくると思うので書きません。やりたかったことは「日次でWebサイトを自動更新して公開する」なので、そこの流れを書きます。具体的なコードはGitHubを見てください。
ChatGPTで占いを作成して使用しているのは日次で自動更新するコンテンツとしてちょうど良かっただけなので、占い結果については責任を負いません。
設計
- Azure Blob Storageを用いて静的なWebサイトを作成。このHTMLをAzure Functionsで日次更新する。
- Azure Functionsで、ChatGPT APIを呼び出して占い文言を作成→HTMLタグに変換→Azure Blob Storageを更新という流れを構築しています。
- C#を使用しています。
ChatGPT APIの利用
ChatGPT側でAPI keyを取得し、プロンプトを設定してAPIにPOSTすれば投げれば占い結果が返ってきます。
設定したプロンプトは以下の通り。
yyyy/MM/ddの占いを作成してください。星座ごとに、12個の結果を作成してください。1つの星座は15文字程度で作成してください。結果以外の文章は生成しないでください。
15文字
は全然守ってくれないですが文字数を変えると文字数も一応変わるのと、1星座当たりの文字数が長いと12星座分を出してくれないので15文字に指定しています。
結果以外の文章は生成しないで
も時々守ってくれないのですが、指定しておくと冒頭がすごく長くなることはなさそうなので指定しています。
例えば2023/5/21は頭に以下の文言がついています。
おはようございます。AIアシスタントの私が、今日の2023年5月21日の星占いをお届けします。それでは、さっそく各星座の運勢を見ていきましょう。
確実に消すにはいろいろうまいことやってあげる必要がありそうですが、これはこれで味なので厳密に弾く処理はせずに採用しています。
占いからHTMLタグを作成し、Azure Blob Storageを更新
取得した占いを用いてHTMLタグを作成し、Azure Blob StorageのHTMLを更新します。Microsoftが提供している.NET用Azure Storageクライアントライブラリを使用するとAzure側の諸々の設定を渡せば簡単に接続できるので便利でした。
ちなみにデザインもChatGPTに作成してもらったCSSを使用しています。
Azure Functionsで日次で占いを更新
毎日占いを更新するため、TimerトリガーのAzure Functionsを作成し、上記の処理を一定間隔で実行しています。占いの要件を考えると日次で更新されればよいので1日1回実行すればよいと思っていたのですが、時々ChatGPTが反抗して「AIは占いを作成できません」といったことを言ってくるので、一日一回のみ実行では駄目でした。一方で一日数回実行すると一日数回占いが変わってしまうので、占いとして微妙じゃないか?という感じでした。
その対応策として、一時間に一回実行にして、更新日文字列が本日の場合はスキップすることで一日一回(のみ)更新を実現しています(もっと良いやり方はたくさんあると思います)。
Azure Blob Storageで公開
上記で作成したHTMLをAzure Blob Storageの「静的なWebサイト」で公開しています。アクセス数単位の課金で1日当たり1円未満(碌にアクセスされなければ)のようなので、ポートフォリオみたいな感じで安く公開しておくには良いと思います。
最後に
技術お試しドリブンの個人開発をしようとすると、コンテンツどうしようということが多かったのですが、厳密性の問われない適当なものとChatGPTの相性は良いですね。いろいろ試してみようと思います。