こんにちは、Nです。趣味でAI星占いサイトを作ってみたので記事にしてみます。
どんなサイト?
12星座の占いランキングと詳細結果を表示するサイトです。毎朝更新されます。占いはAIが深夜に実行していて、その結果が自動更新されるという仕組みです。
詳しくは以下のサイトを覗いてみてください。
なぜ作った?
私は、毎朝のニュースで占いの時間に差し掛かるとちょっとトイレを我慢するくらいの、ライトな占い好きです。気まぐれにchatgptで自分の占いを作ってもらったところ、意外と楽しい結果を出してくれました。そこで自分好みの占い結果を毎日受け取れたら楽しいかも、と思ってサイトとして公開してみました。
どうやって作った?
以下のサービスを使って自動で占いを生成・投稿する仕組みを作りました。サイトのドメインとCodex CLIのほかはすべて無料枠です。Codex CLIはもともと入っていたChatGPTのPlusプランのため、実質サイトのドメイン代のみで作成・運用できています。
- コーディング:Codex CLI
- 記事の生成:Gemini API
- 定期実行:github action
- デプロイ:Cloudflare Pages
以下参考になったサイトです。他わからない点はChatGPTに質問しながら進めました。
<github actionでsecret (gemini API key)を設定する方法>
https://zenn.dev/farstep/books/learn-github-actions/viewer/environment-variables-and-secrets
<Cloudflare Pagesのセットアップ・デプロイ設定>
https://zenn.dev/gemcook/articles/cloudflare-pages-astro-deploy
詰まったところ
Cloudflare PagesではなくCloudflare Workersにデプロイしようとした
Cloudflare Workersのほうが新しい機能なのですが、公式docも日本語の解説記事もすくなく結構ハマりました。現状、初心者はCloudflare Pagesを使ったほうが情報が多くてよさそうです。
Gemini APIが安定稼働しない
今回実装したフローではあらかじめ決めた時間にGemini APIに12星座分リクエストするフローになっています。当初毎日0時台に実行していたのですが、ワークフローでエラーが出てワークフローが落ちてしまう事態が頻発しました。私が詰まったケースは下記の通りで、実装起因でないエラーもたくさん出ているため、エラー・リトライ処理を丁寧に準備しておく必要があります。
- Gemini APIではプランごとの上限が設定されていて(リンク)、その上限にあたってエラーが発生
- 指定したモデルが混雑していてエラーが発生(
google.genai.errors.ServerError: 503 UNAVAILABLE. {'error': {'code': 503, 'message': 'The model is overloaded. Please try again later.', 'status': 'UNAVAILABLE'}}
)-> 0時台以外に変更することでエラーが軽減 - GeminiからNoneが返ってきて指定したスキーマに合わずエラーが発生(
AttributeError: 'NoneType' object has no attribute 'strip'
) - サーバーとの接続エラー(
httpx.RemoteProtocolError: Server disconnected without sending a response.
) - 指定したモデルが廃止されて使えなくなっていた
自分好みの結果を出せない
一番詰まったポイントは、自分好みの結果を出せないということでした。そもそも自分好みが何かもわかっていないので試行錯誤を繰り返しました。その結果、分かったことは以下のとおりです。
- ゼロから長文を書かせるとAIっぽい文章になってしまう。フォーマットを決めて短文を挿入する形式にしたほうが自然な文章になる。
- ゼロから書かせると毎日同じような結果ばかり出してしまう。過去の結果を入力して差分を強調させるとマンネリ感が軽減する。
- ラッキーアイテムをゼロから作らせるとみんな同じになってしまうので、結果がばらけるようにガードレールを設けると良い。(12星座中6星座で「ラッキーアイテム:手帳」になったこともありました)
まとめ
各種無料枠を駆使することで、自分好みのサイトを自動更新する仕組みを作ることができました。
生成AI特有の不安定さとデプロイ基盤のところで苦労しましたが、それ以外はだいたいchatgptがなんとかしてくれましたし、なによりこれらがほぼ無料で作成・運用できているというのは本当にすごいと思います。
しかし、自分好みに仕上げるにはやはり時間が必要です。私の占いサイトもここまで来るのに3カ月以上かかりました。
ただこんなにいろんな機能を無料で遊べるチャンスは長くは続かないと思うので、少しでも興味がある方は挑戦してみるのはいかがでしょうか。また最初から思った通りの結果は出ないので、気長にこの不安定さを楽しみましょう。