安心打診おばあ: 実際に試してみる
私たちが過ごしている日常には、多くの危険が潜んでいます。帰りの夜道や交通量の多い通り、さらには予期していなかった雨。それらは慣れた日常の落とし穴と言えるでしょう。しかし、めまぐるしく変化を続ける現代を生きる私たちはそれらの危険に気づく余裕さえ持ち合わせていないのです。
「安心打診おばあ」 は私たちの日常に潜む危険に気づきを与え、アドバイスを与え、さらには安心感を与えてくれます。今日の予定、明日の予定など事前に未来の予定を入力すれば、自分がしようとしている行動の中に潜む危険やアドバイスを、まさに 「おばあちゃんの知恵袋」 として教えてくれます。また、入力内容は保存されるので日常を記録する日記として活用することもできます。日記として過去の行動を入力し、その行動の危険やアドバイスをもらうことで自分の行動の反省にも活用することができるでしょう。
- 入力された情報から行動だけを抽出し、各行動に対するコメントをおばあちゃん口調でもらうことができます。
- 行動が危険かどうかでおばあちゃんの表情が3段階で変化します。
- 入力日の名古屋の天気を自動で教えてくれます。
日常のなかの「油断した」ことで起きる危険を、事前に知りアドバイスを受けることで未然に防ぐことができます。
現状は天気情報が名古屋に固定されているため、入力された情報から場所を抜き出し、それぞれの地点の天気情報を表示できるように開発できるとより便利なツールになると考えています。また、現状は天気APIだけですが、今後他のAPIも実装していくことでさらに「おばあちゃんの知恵袋」からの情報を増やしていくことができると考えています。
- 安心感 を与えられることを第一に考え、無機質なAI口調ではなく、 温かみのあるおばあちゃん口調 であることに注力しました。
- 特に危険な行動をしようとしているときには、 おばあちゃんが表情を変え、忠告に危機感を持てるようにこだわりました。
YouTube URL : 安心打診おばあ
- GeminiAPI
- gooラボAPI
- Flask
- React
- PostgreSQL
- webが開ける端末であれば動作する
HackDayから改善をしてよりよいプロダクトを目指してgooラボAPIを使用しました
GeminiAPIだけだとだめだった理由とgooラボAPIではないとだめだった理由について書きます
まず、HackDayまでのアドバイス生成の処理について
- ユーザーが入力した予定の中から行動を抽出する
- 行動の危険度を求める(顔の色に関係する)
- 行動に対するアドバイスを生成する
これらの処理について、改善しなければいけない点が2つありました。
- 行動を抽出する
文章から行動が見つからない場合、GeminiAPIがありえる行動をすべて返してしまうことが頻繁にみられました。
このことが起こった場合GeminiAPIは以下のように返します。
『「この文章からは行動は見つかりませんでしたが、以下のようなことが考えられます。
「"行く", "遊ぶ", "起きる", "食べる", ...」』
行動抽出は正規表現で行っているため、このように返されてしまうと、あたかもユーザーがこれらの行動を入力したかのように返してしまいます。 - 行動の危険度を求める
危険度を求める部分については、危険度を出すのが難しい場合には
『この行動から危険度を算出するのは難しいです。』であったり、
『例えば、〇〇の観点からみると危険ですが、△△の観点からみると危険ではありません』などと言ってきたり、 整数値で返してくれないことがあります。
これらの改善について、GeminiAPIでやろうとした場合、生成AIは処理時間が長いことからユーザーを待たせてしまう時間が長くなってしまうことや、行動抽出の際には行動があるかどうかを判断させればいいが、危険度を求める際にはそもそもどうやればいいかが分からないという問題点がありました。
そこで、ちょうどスポンサー提供物としてあったgooラボAPIを使っていい感じにできないか?ということを考えました。
- 行動抽出
行動がある = 動詞が含まれていると言い換えを行えば、ユーザーが入力した予定に動詞が含まれているかどうかを判定すれば簡単に行動が含まれているかどうかを判断することができます。
これはgooラボAPIの形態素解析を用いることで簡単に求めることが出来ます。
この処理は0.5秒程度で出来るので、処理時間の観点からGeminiAPIではなくgooラボAPIを使用するべきです。 - 危険度算出
「危険」という単語とのテキストペア類似度を求めれば簡単にできると最初は思っていました。
ただ、「信号無視」などの単語は高く出るが、「暴言を吐く」ような今後の立場が危険にさらされるため止めたほうがよい行動に対して高くでないという問題点がありました。
このアプリで止めたい危険度とは身の危険だけではなく、しない方がよい行動全般を指すため「危険」という単語だけではうまく表すことが出来ません。
そこで、「犯罪」「違反」「事件」という単語とのテキストペア類似度を求め重みを加えるというカスタム評価値を作成しました。
自分たちが防ぎたいよくない行動はこれらのうちのどれかと類似度が高いことが想定され、実際にこのカスタム評価値を使ったところ自分たちが防ぎたい行動に対してより高い危険度がでるようになりました。
この部分も同様に、0.5秒程度で処理が終わるため、処理時間が長くさらに危険度が算出できない場合があるGeminiAPIに置き換えるべきです。
これらの処理のおいては欲しい精度を満たす処理時間という観点から考えると、gooラボAPI以外の方が優れていることはないはずです
- 事前開発は行っていないので、すべて2日間で開発しています
- チームメンバーと当日に顔合わせ→アイデア出しから
- チームメンバーのうち1人は開発経験ゼロ
- 残業もゼロ("ホワイト"!)
- 力を入れた部分