🌟

ピコナノくん

に公開

実録:始まりの夜(この物語はフィクションであり、純度95%の妄想で作られています。あらかじめご了承の上、用量用法を守って正しくお楽しみください。)

「『らくらくホン』ってさ。ガラケーを使い慣れない爺ちゃん、婆ちゃんたち用にめっちゃ使いやすくした奴だったけど、同じニーズがAI全盛の時代にもあるんじゃない?
せや!いまこそAI時代のガラケーを発明するときや!」

「さっそくAI使ってアイデアをまとめていくで。ハッカソンのURLを投げて、AIに相談やで!」

https://zenn.dev/hackathons/google-cloud-japan-ai-hackathon-vol2?tab=rule

:(数分後)

「お、さすがAI、ええ方向性や。高齢者向けのサービスの勘所をよく抑えてはる。よし、ほなその方向性で深堀してこ。」

:(数分後)

「よっしゃコンセプト完成や!これでどや!」

  • サービス利用対象者: 独身高齢者
  • コアコンセプト: パーソナルAIアシスタント
  • 解決する問題: AIに不慣れな高齢者にとってとっつきやすい会話形式で、高齢者独身者の生活の介助を行える、24時間使用可能なパーソナルな介助者を実現する。

「うん、このサービスにあったシステム・アーキテクチャもAIに考えてもらおか。」
 :(数分後)
「よくわからんけど、これで形になったんちゃう?」

  • 採用技術:DialogFlow+Cloud Function+Line Bot
  • 会話インターフェース:最低チャット、できれば音声会話(AI注:現時点では実装難易度が高い)
  • 提供サービス:雑談会話、占い、ニュース、天気予報。ごみ捨てサイクル管理。できれば投薬サイクル管理、スケジュール管理(AI注:Firebaseが必要)

「うん、Cloud FunctionもDialogFlowもfirebaseも、よーわからへんけど、きっとAIがうまいことやってくれるやろ。だいぶ不安が残るけど、これでいこ。」

「音声で対話できるのがいちばんやけど、難しいらしいから、とりあえず一番普及しているLINEをフロンドエンドにすえるかな。われながらナイス現実的判断や。」

「ほな、次はイメージ画像が欲しいな。やっぱり親しみやすくて、AIの会話が破綻していても笑って許してもらえるように子供っぽいけどちょっと頼りになる、あたりをイメージしていきましょか。こんどは画像生成AIの出番やな。かちゃかちゃっと」

:(数分後)

「おー、一発でいい絵ができたやんか。これでいいわ。」

ピコナノイメージ

「ほんならこのイラストつこうて、今度は会話のパターンをユースケースとして生成AIに展開してもらおか。」

:(数分後)

「できた、できた。早かったな。ここまできたら、そろそろなんか、動くものが欲しいわな。インフラを作ってしまいたいけど、よ~わからんな。まあ、これも生成AIにお任せしよ。きっと、言う通りにしたらええのんやろ?作業タスクを洗い出してもらうで~、さあさあ、もっと働いてや、生成AIはん。」

  • ローカル環境にGoogleSDKセットアップ
  • DialogFlow ESのセットアップ
  • LINE Botのセットアップ
  • Cloud Function用のサンプルコードのビルド&デプロイ
  • GoogleIAMで権限周りの調整
  • DialogFlow ESへインテントのバリエーションを追加

「さっさっさ~。なんや、簡単やないか。拍子抜けしたわ。」

深夜のCloud Function大冒険

「さてさて、コードもそろったし、いよいよCloud Functionにデプロイや。生成AIは“これで動くで!”って言うてたし、信じていくで。」

「よし、Enterっと……」

:(1分後)

(ピコン)ERROR: Container Healthcheck failed.

「……ん?」

'The container failed to start and listen on port 8080...'

「……は?」

「なんやねん、ピコンちゃうわこれ、バコンやバコン。エラーまみれやんけ!」

試行錯誤モード突入(副題:【最強賢者のやり直し】ノーモア・バッドエンド)

「待てよ……もしかしてこの return app(request) があかんのちゃうか?」

「ほな、生成AIはん、代わりに呼び出し方見直してくれへん?」

:(10秒後)

「おっ、lineWebhook = app にするんやな。了解や!どれ、デプロイ再チャレンジ!」

:(数分後)
「やっぱりだめやん。どうなっとるん。あ、リンク先たどってみたら、これ、そもそも、いらんのとちゃう?デプロイ再々チャレンジや!」

「あかん、生成AIもイミフなことばかり返しよる。。。せや!こういう時には生成AIのバージョンチェンジや!」

「えーと、なになに、、、」

Flask アプリケーションのインスタンスを直接エントリポイントにするのではなく、HTTP リクエストを受け取る新しい関数を定義し、その関数内で Flask アプリケーションを呼び出します。

「これは新しい切り口や!やってみよ!」

Deployment successful

「(ピコン!!!)せ、成功やぁあああ!!やったぞー!!!」

「これで、LINEの友達追加っと。よしよし、これで話かけたったらええんやな。さすが、わし。もしかしたら、天才かもしれん。」

:(ひとしきり動作確認後)

「やっぱり、具体的に動くと足りないところがいろいろ目につくなぁ。拡張しよ。ひとりアジャイルで、一人ペアプログラミングで、一人プロジェクトやな。」

やがて気づく

「あれ、これ、なんか口調がちょっとAIぽくないな……」

「……なんか妖精っぽいキャラに寄せたら、もっと親しみわくんちゃうか?」

「しゃべり方を“元気な男の子風で、語尾が『〜なの!』”にしたろ」

「せや、『ピコン!』と『~なの!』で、キャラ名は……ピコナノや!!、ピコとナノが単位なのもいい感じや!やっぱ、わいは天才やな。ぐふふ。」

AIの働きアリモードからの深夜ノリの妄想RPG発動!

「Dialogflowの意図(インテント)も増やそ。リマインダー機能つけよか?」

「これ、キャラづくりに合わせて会話部分も見直したものに作り替えてインテントのバリエーションを増やしたほうがいいな。わし知ってるで。こういうタスクは生成AIやで。ぽちっとな。」

:(30秒後)

「生成AIはん。さすがや。天才のわしが考えるよりもすごいわ。」

「しかし、これ、流し込みのほうがめんどいな。あれ?なんかいつの間にかわしのほうが下働きみたいになってるわ。まあええ。結果が大事やわ。」

「……いや待て。これはプロジェクトという名のRPGなんちゃうか?俺、今レベル12ぐらいやろ。サマ〇トリアの王子が先頭で、ワシだけ棺桶にはいって連れていかれてるみたいな絵面やな。」

ソースコードは失わない。(読み方のアクセントは、JOJO第四部:ダイアモンドは砕けない風に)

「今のうちにGithubリポジトリもつくっておこか~。サクッと生成AIに聞きながらつくってまうで~」

「もうできてもうたな。簡単すぎひん?カンスト勇者が魔王と戦っているみたいやな。レベル99まであげて物理で殴るを地でいってるというか、無人の荒野を歩むが如し、やわ。」

ついでに動画作成も

「ほいさ、そしたらつぎは動画の作成やんな。簡単、簡単、そう、Macならね!って大昔のTVCMやってたわ。生成AIじゃあ、さすがに説明が分かりにくいから、Youtube動画検索してっと。なるへそ、そうやれば、いいんやな。楽勝やな。」

:(3時間後)

・Youtubeの紹介動画: https://youtu.be/kl_d1X1nZz8

「まあ、とりあえず『他人に見せても恥ずかしくないけど、知人にみられたら恥ずかしい』ぐらいのレベルのものはできたかな。早速、公開、公開っとな。ぽちぽち。これでおいらもYoutuberや。やばいな、大人の階段を3段ととびぐらいの勢いで上っている感じやわ。」

動画もよいが、記事もいる。

「はっはっはっ、こんなことをあろうかと作業工程をこうして全部ブログ調にまとめていたのじゃ。孔明にも気が付かれない深謀エンリョってやつじゃて。」

導線はどうすんの?

「おっとっと、の、おっとっと。忘れるところだったわ、このアプリを使えるようにするのに、QRコードからの案内がいるやんか。貼り付け、と。これが、プロダクトをデプロイしたURLってやつの代わりやな。」

ピコナノのご利用はこちらから→
ピコナノ公式アカウント用QRコード

で、結局、これでなにができるの?

「まずは、今日の日付確認、天気予報、ゴミ出し日の確認、スケジュールチェック、話し合いてになってあげることに投薬管理、ができる、というのが当初の構想やったんやけど、本当の意味で実現できているのは、日付確認だけや」

「あとは裏方さんの準備(Firebase周りの設計)がいろいろ必要で、天気予報とゴミ出し日の確認とスケジュールは固定メッセージになってしもうとる。ニーズがあるようならこの辺は拡張できると思てるけどな。」

「あと、今回は時間がないのと、普及率からLINEを採用したけど、Flutterを内部で使っているPythonコードで作れるFlet使えば、クロスプラットホームのクライアント開発も楽勝やで。」

「DialogFlowのPrebuild AgentsにあるWeatherエージェントや、DateエージェントやSmallTalkエージェントなんかが動いてくれれば、そのまま使えたんだけど、どうも動きがよくわからなくて結局全部自分で実装(生成AIにて実装)&モックアップですましてるけどな~。」

「まあ、実際的な意味では、こんなアホでも1週間足らずの退社後の時間だけをつかって、ここまでそろえることができるっちゅうことを実証してみせたって言うのが最大の問題解決かもしれん。」

コンテストの応募基準は満たしているのか?

「大丈夫なはずやで。Google Cloud AI側の採用技術としては、DialogFlow(Conversational Agentsの中の一つという位置づけ)だし、Google Cloud アプリケーションとしては、Cloud Run functions(旧 Cloud Functions)を使っている。フロントエンドはLINEになっているが、他社技術NGとはかいていなかった。」

「あ、あかん。完全に忘れとったわ。システムアーキテクチャ図がいるってやんか。」

「あ!あかんわ。生成AIがうごかんで!どないなってるんや!やばばば。」

「こうなったら自分で書くか。Draw.io使えって誰かがワイの脳内に直接話しかけてきよるから、従っておこ。これがきっと素子さんがいうてた『ゴーストの囁き』ってやつや。」

Discussion