Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

CTO Office Generative AI Hackathonに参加しました!

こんにちは、CTO室AI推進部のこたろうです。

今回は、7/24(月) ~ 7/25(火)の二日間を通して開催されたCTO室主催のCTO Office Generative AI Hackathonに参加したのでその報告です!

このハッカソンでは、「Improve Productivity using Generative AI」をテーマに、ChatGPTを使ったアプリケーションについて個人・チームで開発・発表を行いました。

1日目はオープニングセッションやアイデアのショートプレゼンテーションを行いました。2日目はアプリの実装と最終発表、懇親会を行いました。始まる前は「2日間しかないのに形にできるのかな...?」と不安でしたが、運営の方々の手厚いサポートを受けつつ、無事最終発表にてアプリのデモンストレーションを行うことができました。

⁠自チームの開発アプリ

CTO室の新卒3人で参加しました。

  • たくだい : CTO室 基盤アプリケーション部
  • おしみん : CTO室 分析基盤部

この3人でチームを組むのは2回目1だったので、お互いがやりたいことや得意・不得意を考えた上で役割分担ができたのが、スムーズに進められた要因だと感じました。作業中もリスペクトがある関わりができたのが素晴らしかったです。

もっとパワフルな「問い合わせ窓口」チャンネルが欲しい!

社内Slackには「問い合わせ窓口β」という、 チャンネル紹介のためのチャンネル があります。例えば、「落とし物」とキーワードを投稿すると、それと一致するメッセージが送られているチャンネルを社内で開発されたSlackbotが返します。どのチャンネルを使えばいいか分からない...という課題を解決してくれる素敵なチャンネルです。

しかし、キーワード検索だけでは文脈を考慮できないので本当にぴったりなチャンネルを返すのは困難です。例えば、このSlackbotに「社員証」とキーワードを与えてもどういう文脈なのか分からないため、それが「落とし物」なのか、「退職時の社員証の返却」なのか判断できません。

キーワード検索だけでなく、人と会話するように自然言語で検索できたら、より柔軟な検索が実現できるはずです。ChatGPTは自然言語のプロンプトで要望を与えるとそれについて回答します。ならば、ChatGPTにSlackのチャンネル情報を与えた上で質問すれば、より精度の高いチャンネル紹介をしてくれるのではないかと考えました。

今回、自然言語で「こんなチャンネルはないか?」と検索し、ぴったりなチャンネルを返せるSlackbotを開発しました。

アプリの流れ

ユーザが自然言語で質問を与えると、我々が開発したSlackbotは各チャンネルの要約と質問を比較して最も類似したチャンネルを返します。

Slackbotの実行コードはGoogle Cloud Functionsにデプロイしました。GCPのサービスは今まであまり使ったことがなかったので不安でしたが、チュートリアルコードもあるため使いやすかったです。困ったとしても、GCPに詳しいCTO室分析基盤部の方にデプロイやデータストアの方法を教えてもらえたので問題なく操作ができました。

このSlackbotにおける質問と要約の比較を行うコードは、「質問と要約を比較して最も類似するチャンネルを送ってほしい」とプロンプトを与えただけで作成できました。自分がコードを書かずともプロンプトを与えるだけでやりたいことができるのは、さすがChatGPTだなと感動しました。

Google Cloud Functionsへのデプロイも完了し、開発したSlackbotのデモンストレーションができました。

難しかった点としては チャンネル情報の取得ChatGPTからより良い返答を得るための創意工夫 です。

チャンネル情報の取得にはSlackAppをチャンネルに招待する必要がありました。この招待について、自動化しようと考えましたが時間が足りず、諦めて手動で取り組むことにしました。とても全チャンネルに招待することはできなかったため、アプリの拡大のためにはこの作業の自動化は必須だと感じました。また、ChatGPTの精度改善のためにプロンプトの文言を工夫する必要がありました。少しでもプロンプトを変えると精度に影響が出るのが難点だと言えます。また、ChatGPTの内部処理がブラックボックスなため、なぜこのプロンプトで精度が高いのか・低いのか考察がしづらい点も難しいです。

結果は惜しくも入賞を逃してしまいました。メンバー間では、アプリが形になったことやデモンストレーションを見てくださった他のハッカソン参加メンバーの反応もよかったことから、優勝を狙えるのではないかと話していただけに、悔しかったです。

優勝したチームの開発アプリ

優勝したチームは「Wasuren.AI」という、自身の収入・支出データからユーザが希望するデータを抽出する方法をChatGPTが提案するアプリを発表していました。

例えば、「6月中の食費に掛けた支出は?」と質問すると、ChatGPTは該当データを抽出する方法をユーザに提案します。デモンストレーションでは、ChatGPTはデータベースにあるダミーデータから該当データを抽出する計算コードを提案していました。このチームでは特に「支出のパターン抽出や予測」に需要があると考え、データは抽出するだけでなく次の月の支出などの予測にも活かすアイデアもあったそうです。

シンプルなChatGPTの利用で、しかも「確かに欲しい!」と思わせるアイデアとプレゼンテーションでした。

ハッカソンに参加してみて

今回のハッカソンに参加して、素早くアプリを作る方法を学びました。チームとしてお互いにリスペクトを持ち効率のよい作業ができたからこそ、アプリを形にできたと考えています。また、自分の成果を人に伝える重要性や難しさも学ぶことができました。最終発表は資料も口頭説明もすべて英語で行ったため、より自分の成果を伝える難しさを感じました。

ChatGPTに関しては、想像よりも簡単にアプリに組み込めることを知りました。また、ChatGPTにユーザがプロンプトを与えるタイプのアプリはかなり柔軟な挙動をしそうです。この柔軟性はメリットでもあり、ルールを守らないユーザが悪意あるプロンプトを与えることで、開発者側が意図しない返答をする危険性というデメリットとも考えられます。実際にChatGPTないしは生成系AIを組み込んでいるアプリでどういった方法でセキュリティを担保しているのか気になります。

ハッカソン終了後には懇親会も開催し、様々な部署の方とコミュニケーションがとれました。

特に自分は新卒でまだ入社したばかりということもあり、コミュニケーションの場が必要だと考えていたので非常にありがたかったです。最後にチームメンバーとはこれからもこういったイベントがあれば一緒に参加しようと話すなど、より仲が深まったように感じました。個人的にもより大規模なハッカソン(日程がより長い、参加人数が多いなど)に参加してみたいと感じました。

優勝できず悔しかったので、第2回があればぜひ参加したいです!


  1. 1回目にチームを組んだのは新卒エンジニア研修のときなので約3ヶ月ぶりのチーム結成です!