5
3

More than 1 year has passed since last update.

AIをフル活用した「名言Bot」

Last updated at Posted at 2023-07-16

はじめに

昔から読書が好きで、偉人達の言葉によく感銘を受けていたのですが、なかなか普段本を読む時間が取れないという友人も多く、日常生活の中にもっと偉人達の言葉を取り込めないかなと考えていました。

UIとしてはやはりLINEが最も使い勝手が良いと思い、昨今のAIの進化も踏まえ、LINEから誰でも気軽に使える、AIを活用した名言Botを作りました。

定期的な名言の通知機能に加え、ChatGPTによる名言の選定、リップシンクによる名言の発話もあります。

■名言のスケジュール通知
任意の通知時刻を選択可能
画像2.png

■ChatGPTによる名言の応答
任意の問いかけに対し、ChatGPTが応答する名言を選定、選定理由とともに応答

画像3.png

■リップシンクによる名言の発話
名言のテキストと偉人の画像をインプットに、TextToSpeechとリップシンクで名言の発話動画を生成

アルバート・アインシュタイン

レオナルド・ダ・ヴィンチ

アリストテレス

※実際は音声あり

アーキテクチャ

全体アーキテクチャの概要は以下です。
画像6.png
名言のテキストデータをまずDynamoDBに登録し、Lambdaから取得できるようにしておきます。

リップシンク動画を作るために、名言のテキストと偉人の画像を用意し、まずTextToSpeechで名言を音声に変換し、生成した音声と画像からリップシンク動画を作成します(この動画をS3へ格納)。

名言のスケジュール通知のためにEventBridgeで定期的にLambdaを起動し、各ユーザーの名言通知の指定時刻に合致する場合は、名言をDynamoDBからランダムに一つ取り出します。

そして、対象の名言にリップシンク動画がある場合は、S3から動画を取得し、ユーザーに名言のテキストとリップシンク動画を通知します。

上記の図には記載していませんが、ランダム通知の際に、同じ名言が繰り返されてしまわないよう、ユーザー毎に通知済みの名言を保持しておき、名言の重複通知を回避しています。

ChatGPTについては、ユーザーの任意のチャットを受け、DynamoDBから取得した名言の一覧と合わせてChatGPTに送り、適切な名言を1つ、その選択理由とともに返すようプロンプトで指示を出し、応答結果をユーザーに返しています。

ちなみに、実際に試してみるとわかりますが、ChatGPTに「名言を一つ教えて」と聞いてみると、ハルシネーション(嘘の応答)の問題が発生し、多くの場合、それっぽいものの実際には存在しない名言が返ってきます。

今回は、DynamoDBに登録済みの名言の一覧の中から、適切な物を選ばせるという形を取ることによって、上記のハルシネーションの問題を回避しています。

利用方法

サービス登録等は特に不要で、以下のLineの友達追加から誰でも利用できます。

Lineへの友達追加用リンク

名言は、時代や国を問わず現在300近くあり、リップシンクは160近くあります。リップシンクを繋げた動画はYouTubeでも公開しているので、こちらも良かったら参考に見てみて下さい。

リップシンク動画(YouTube)へのリンク

上記で紹介した機能に加え、お気に入りの名言の登録や名言のランダム通知機能もあるので、まだまだプロト段階ですが、忙しい日常生活の中に、偉人達の名言を取り入れる一つの機会として、利用してみて頂ければと思います。

<登録済みの名言の抜粋>

"あなたがこの世で見たいと願う変化に、あなた自身がなりなさい。"
マハトマ・ガンディー

"私は決して障害に屈しはしない。いかなる障害も、私の中に強い決意を生み出すまでだ。"
レオナルド・ダ・ヴィンチ

"何かをもらうために与えるのではありません。与える事自体がこの世で一番の喜びなのです。"
エーリッヒ・フロム

"躍動する暮らしに飛び込め、そしてやりたい事をやれ。世の中は興味ある事で満ち溢れている。"
ゲーテ

"われわれの一番大きい資源は、子供の心である。"
ウォルト・ディズニー

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3