[Flutter] 楽しく日記作成!AI との会話を用いた日記アプリの開発
はじめに
この度、Flutter で "フクローグ" というアプリを作成したので、記事にまとめました!😄
コンセプトは、 「AI との会話を通して日記を作成できるアプリ」 です。
今回、FlutterFlow というノーコードの開発ツールを初めて利用したのですが、割と便利で使いこなせれば簡単にアプリ開発ができるようになるだろうな〜と感じました。(ただ、ランモードではうまく動作するのに、テストモードでは動作しないといったことがあったり、不便な点もありましたが...)
↓アプリを実際に動作させている様子です!
今回作成したアプリは、こちらのハッカソン(↓)に参加した際に作成したものです!
結果は残念ながら予選落ちでした...😢
背景
課題:日記がなかなか続かない
日記をつけようと思い立ったことがないだろうか。
日記にはさまざまな効果がある。感情を書き出すことによるストレス軽減、自分の考え方や行動パターンに対する自己理解の向上、記憶力や想像力の向上、目標や行動を書き出すことによるモチベーションの維持と習慣形成のサポート。このような効果を期待して日記を始めた人が必ずといっていいほど直面するであろう問題がある。
...続かない!!
そう、日記は続かないのだ。
毎晩「その日に起きたことを振り返り、書く内容をまとめて実際に "書く"」ことが、だんだんストレスになってしまうのである。
会話を通したアプローチ
先ほど述べたように日記を書く目的として、ストレス軽減、自己理解の向上、記憶力や想像力の向上、習慣形成のサポート などがある。我々はこれらの効果が、"会話"からも期待できる ことに注目した。会話をすることでストレス発散になったり、人と話す中で自己理解が深まったりといった具合である。
そこで、日記が続かないという課題に対して会話を通したアプローチをすることで、①楽しい会話によって日記を続けられる、②日記を書く目的に対しても直接的に効果がある という一石二鳥が達成できるのでは??と考えた。
解決策(アプリ)
以上より、「AI との会話を通して日記が作成できるアプリ」 を作ろうと考えた。
競合として "Super Diary" というアプリが存在するが、このアプリには①音声会話ができない(チャットのみ)、②会話自体に楽しさがないという欠点がある。その2点を差別化のポイントとして、①音声会話でより簡単に、②楽しく 日記が続けられることを目指した。
また、「日記は自分の手で書きたい」という人もいるだろう。そのような人はこのアプリのターゲットから外すことにし、あくまで「日記を続けて毎日を振り返りたい&書くのはめんどくさい」という人をメインターゲットとした。
ポジショニングマップ。
アプリ概要
開発プラットフォームとシステムアーキテクチャ図
FlutterFlow を使用して開発を行なった。システムアーキテクチャ図は以下のようである。音声とテキストの変換に、Speech-to-Text API、Cloud Text-to-Speech API を利用した。会話の発話内容の生成、日記の作成などに ChatGPT を用い、作成した日記などのデータは Firebase に保存した。
簡単な機能要件
ユーザーはまず AI との会話 (チャットまたは音声)を行う。次に、日記作成ボタンをタップすると 会話履歴をもとに日記が作成 される。作成した日記は編集して保存できる。保存した日記は一覧画面、個別画面から確認できる。
画面構成
画面構成は、以下のようになっている。まずアプリを開くと日記一覧画面が表示される。会話画面では、チャット画面と音声画面を切り替えることができる。日記を作成すると編集画面に遷移し、AI が生成した日記の内容に手を加えて保存できる。その他には、日記の個別画面や設定画面(テーマやフォントのカスタマイズができる)が存在する。
機能
会話機能
会話はチャットか音声かを切り替えて行うことができる。チャット画面は馴染みのあるチャットサービスのような UI になっていて、友人と気軽にやり取りする感覚で会話を楽しめる。音声画面では、マイクボタンを押して音声を入力すると、AI から音声による返答が返ってくる。この際、自分の発話内容、AI 側の発話内容がともに画面上に表示される。
日記機能
日記は一覧画面、個別画面が存在する。日記には、日付、タイトル、本文、タグ、画像 の情報が含まれる。編集画面では、AI が本文の内容をもとに自動生成したタグに加えて、好きなタグを追加できる。
会話における記憶機能
会話の楽しさを高めるために、記憶機能 を実装した。人間の記憶過程である、記銘(入力を意味情報に変換)、保持(情報の維持)、想起(思い出す)、忘却(情報の整理)の4つの過程に基づいて実装を行なった。
流れを簡単に説明する。まず、ユーザーとの会話履歴をもとに ChatGPT を用いて "覚えるべき情報" を抽出する。覚えるべき情報の項目は、"出来事"、"予定"、"人間関係"、"関心"、"好き/嫌い"、"習慣"、"目標/夢" で定義した。これらの情報を関連するタグ(同じく ChatGPT により生成)とともにデータベースに保存する。ここまでが記憶する過程である。
想起過程では、ユーザーの発言からタグを作成して、そのタグを用いてデータベースから記憶の検索を行う。取得した記憶情報をプロンプトに含めて以降の返答を行うことによって記憶をもとにした会話を実現した。一定期間呼び出されることのなかった記憶を削除することによってデータベースを整理するとともに、重要な記憶のみが残るようになっている。
最後に
AI との会話は、客観的な視点をくれるという点で他者との対話でありながら、同時に、人に話せない話をできるという点で自己との対話でもあります。人に話しづらい悩みを抱え、「誰かと話したい」という気持ちと「本音を見せられない」という葛藤を持つ人にとって、AI は理想的な話し相手となるのではないでしょうか。
本アプリは、日記を「続けられない」という課題 に対し、楽しい会話体験を提供 することで解決を図りました。そのための一つのアプローチとして 「記憶機能」 を実装しましたが、AIから自然に話題を提供するシステムや、AIに性格や好みを持たせてより楽しい会話ができるようにする仕組みも考えていました。
ところが、後になって調べてみると、それらの機能はすでに Cotomo という音声会話 AI アプリで実装されていたことが発覚。
あれこれ考える前にリサーチすることの重要性を感じました...😅
Discussion