ツイッターのライブ告知をChat GPTで処理して整形してGoogleカレンダーに登録するサービスを作りました。
サーバレスにこだわったので、月々の維持費がほぼ0円&メンテナンスフリーです!
作ったものイメージ
アーキテクチャ概要
詳細
データの流れに着目して、アーキテクチャを紹介していきます。
Twitter→S3: lobstr.io利用
ツイッターから情報をスクレイピングするのに、lobstr.ioというサービスを利用しました。
以下の記事を参考に設定しました。
取得結果のCSVファイルをAWS S3に転送しています。lobstr.ioの機能でS3に配置できています。
苦労・工夫
- 当初、APIFYというサービスを利用していました。無料だと1ヶ月程度で自動処理が使えなくなったため※、lobstr.ioに切り替えました。月50ドル払う余裕があればAPIFYの方が良いでしょう。(※そういう仕様か、仕様変更があったかは不明)
- lobstr.ioでは処理の都合上、長文ツイートは末尾が切れ、重要な情報が後半にある場合情報を取得できないケースがある、、というデメリットはあります。。
S3→投稿履歴(DynamoDB)
lobstr.ioでは投稿履歴のCSVを取得・S3に配置できるので、その結果を構造化して蓄積しています。
Lambda(Python)で定期的に加工して蓄積しています。
苦労・工夫
-
NoSQL初心者だったため、最初は色々戸惑いました。特に、データベースの中身を探索する際に全件スキャンしがちなので、その課金がまだ怖いです。
ビッグデータでないなら、全件スキャンしても大した金額にならず、DBを常に起動しておくほうがトータルコストかかる、と自分に言い聞かせて使っています。
投稿履歴→ライブ情報(DynamoDB→DynamoDB)
ツイッターの告知文章(自由入力のテキスト)から、ライブの名称・時間・場所などを抽出して、構造化データに変換しています。
「自由入力の情報から必要情報を要約・抽出」というタスクは、LLMがEnablerとなってくれているなと感じます。
以下のようなプロンプトを入れています。
https://diuxamlfu3f0g.cloudfront.net/files/20241229_prompt.txt
苦労・工夫
モデル選定
当初、Anthropic Claude3 Haikuを利用していましたが、ハルシネーションが発生するケースがありました。
色々調べるとClaude系のAIはハルシネーションしやすいという記事があったりして、 「モデルごと特性があって、中身が一緒じゃない」 ということを学びました。
さらに、Claude3.5-Sonnetに切り替えたところ、一発で上手くいくケースが増えたので、 「モデルの賢さはすべてを解決する」 という要素があることを学びました。
なお、現在はOpenAIに切り替えて、GPT-4o-miniを使っています。
GPT-4o-miniでもハルシネーションは稀にあります。。
AWS固有の問題
当初、AWS上の生成AIサービスであるBedrockを使っていましたが、AWS側の都合で、2024年11月上旬になぜか利用できなくなってしまいました。
こちらと同じ事象でした・・・
AWS側の対応が遅く、別にAWSに拘る必要もないので、OpenAIのAPIを利用するようにして、回避しました。
DynamoDB→Googleカレンダー
構造化されたライブ情報をLambda(Python)を用いてGoogleカレンダーに登録しています。
以下の記事などを参考に、Google CloudのAPIで、無料かつ比較的簡単にできました。
苦労・工夫
- オンラインでのカレンダーサービスはいくつかありますが、ChatGPTに情報収集してもらって、一番安定していそう&使いやすそうなGoogle Calendarを選定しました。
- 時間未定なライブ情報(日付だけわかっているもの)は、全日の予定として登録しています。
- 重複登録を確認する仕組みがなく、告知を何回も行われると、その回数登録されてしまっています(あまりにも勘違いしやすい・見にくい場合は手動で消しています)
いくらかかる?
トータルで、月々のコストは約5円でした。(24年12月実績)
サーバを立てて動かすサービスであれば月500円は最低限でもかかるので、クラウド・サーバレスの恩恵を感じています。
(Sin直後1ヶ月の金額ではあるので、、安定運用してきたら、後日更新したいと思います)