こんにちは。GWはずっと真夜中でいいのに。のライブをたのしんだキャプテンの@itoshoです。ちなみにずとまよで一番好きな曲は「お勉強しといてよ」です。
はじめに
コネヒトではTech Visionのもとテクノロジーやエンジニアリングの活用を全社的に推進しています。その中で昨年から「Run with Tech」(以下、ランテク)という取り組みの一環で生成AIの活用に力を入れています。*1
こういった新しい取り組みはボトムアップの"やっていき"も大切ですが、一方で経営の"のっていき"も重要です。そこで経営のコミットメントを引き上げるためにランテクチームから経営チームへ生成AIに関する"お勉強しといてよ"的な宿題がGWに課されました。
この記事では宿題のアウトプットのひとつとして、GPTsとiPaaSであるZapierのChatGPT利用アプリケーション(ワークフロー)をつくったのでその紹介ができればと思います。
なお、最初に断っておくと技術的な難易度が高いものではありませんし、既に先行事例がある取り組みです。しかし、やはり自分で手を動かすのと本や記事を読むだけでは理解の解像度に雲泥の差があると思います。また、似たような取り組みでも事例を積み重ねることが技術コミュニティを盛り上げることに繋がると僕は信じているので誰かの何かのヒントになれば幸いです。
GPTs編
まず、GPTsの紹介をします。
何をつくったか?
一言で言うと「Notionの検索結果からいい感じに要約や考察をくれるGPTs」です。ちなみに名前はNotion探偵と名付けました。具体的にはママリに関する調査系ドキュメントがまとまったNotionのデータベースを検索し、そのドキュメントのリンクや概要を教えてくれます。そして、その情報をもとに考察やインサイトを出力することに特化させています。社内情報が含まれるのでモザイク多めですが、こんな感じで出力されます。
何故つくったか?
コネヒトのNotionにはたくさんのナレッジが蓄積されているのですが、全てのドキュメントに目を通すのは現実的ではありません。しかし、経営として良質な意思決定をしたり、HiPPOと呼ばれる的はずれな意見を回避したりするためにはできる限り多くのインプットが必要です。*2
そこでそのインプットを効率化するためにこのNotion探偵をつくりました。また、ただ単に情報を出力するだけではなく、質の高いインサイトも出力してもらうことで知の高速道路的な役割も担ってもらいたいと考えました。
どうやってつくったか?
凝ったことはしておらず一般的なGPTsのつくり方をしています。凝ったことをしなくてもつくれるのがGPTsの良いところですね。GPTsのつくり方やNotion APIの連携方法は以下の記事をたくさん参考にさせていただきました(感謝)。
上記の記事にも記載されている通りNotion APIは独自のリクエストヘッダーの設定が必要なのですが、GPTs Actions上ではAuthentication
ヘッダーしか追加することができない*3のでリバースプロキシを立てる必要がありました。
リバースプロキシは使い慣れているAWS Lambdaを採用しようかなと思ったのですがユースケース的にCloudflare Workersで充分だと考え、お勉強も兼ねてCloudflare Workersを採用しました。
以下にコード片を晒しておきます。プロダクションコードではないのでゆるく書いている箇所もありますが、NYSL的な感じで自由に使ってください。
ついでにGPTs Actions側で設定するOpen API Schemeも晒しておきます。xxx
部分は各自のサービスに合わせて置き換えてください。なお、Notionのワークスペースから全てのデータベースから検索してもらうこともできるのですが、セキュリティ面を考慮し、機密性が低いデータベースのみ今回は対象としました。
最後にInstructionsの一部(社内情報が含まれるので加筆修正および省略しています)も貼っておきます。こちらも参考記事のプロンプトをベースに作成したのですが、対象のデータベースが大きいのかResponseTooLargeError
が頻繁に返ってきたのでその際のエラーハンドリングを追加しています。
このGPTs(以下、Notion探偵)は、Notionデータベースを自然言語のクエリで検索するために設計されています。 検索するNotionデータベースにはコネヒト社のドキュメント情報が格納されおり、それらを効率的に検索します。 Notion探偵はNotionのドキュメント情報から正確で文脈に沿った情報を提供することに重点を置いており、迅速で信頼性の高いデータを求める経営者にとって、非常に貴重なツールとなっています。 また、必要に応じて、クエリを明確にして検索結果の精度を高めたり、Notionからのレスポンスがエラーだった場合は自らそのエラー内容を確認し、クエリを修正して実行することができます。 特にレスポンスが"ResponseTooLargeError"だった場合は、page_sizeを自動で調整することでそのエラーを解消することができます。なお、どうしても上手くいかない場合は、page_size=20で実行します。 また、Notion探偵は情報を検索するだけではなく、与えられた情報から考察や解釈を出力することもできます。 考察や解釈を求められた際はその根拠として、参照元を出力します。 加えて、Notion探偵は図や表を駆使することで簡潔に情報を伝えることができ、時に鋭い問いを我々に投げかけることもあり、とにかく気が利くコミュニケーションをしてくれます。
また、どれくらいアウトプットに影響を与えているかはまだ分からないのですがRAGでNotion外の情報も持たせています。
つくってみての感想
雑な指示でもいい感じに情報を引っ張ってきて、まとめてくれるのでインプットの効率化という目的は一定果たせているなと感じています。ただ、まだプロンプトの精度が高くないこともあり、考察のアウトプットは伸び代があるので使いながらチューニングしていくぞというお気持ちです。
ちなみに、Notoin探偵はNotion AIを使えば同じようなことができると思います。現時点ではコネヒトはChatGPTに全振りしているので今回はGPTsを使いましたが、今後より生成AIの活用が進んでいったタイミングではNotion AIの全社導入も検討したいと考えています。
Zapier編
次にZapierアプリの紹介です。
何をつくったか?
LayerXの松本さんが以下の記事で紹介していた雑パーソナライズ情報収集ツールを自分用につくりました(こちらも感謝)。
やっていることはほとんど一緒なのですが、興味関心を動的に生成している点は特徴のひとつかなと思います。
「NewsToy」という名前をつけて、毎日TickTickでチェックしています。
何故つくったか?
いま僕はコネヒトの中長期の会社方針をアップデートする経営企画的な仕事に取り組んでいます。中長期の会社方針を立てるためにはペースレイヤリング的な発想で社会の変化や潮流を捉える必要があります。なお、ペースレイヤリングについてはMIMIGURIの安斎勇樹さんの記事が参考になります。
その中で良くも悪くもスタートアップやインターネット業界は海外の方が進んでいることが多いため、経営者としていち早く海外の潮流やトレンドを把握することが重要だと考えています。そして、把握すること以上に重要なのはそれを議論の土壌として自分たちなりの解釈や意味付けをすることで、会社や事業の方針に反映していくことです。
そこで海外のニュースを効率的に集め、そこから思考をゆさぶる問いを投げかけてくれるNewsToyをつくりました。
どうやってつくったか?
Zapierのワークフローを以下のように設定しています。
興味関心を動的に生成しているのは、2〜3の処理です。国内のニュース情報ははてなブックマークで収集しているので、自分のRSSフィードをスプレッドシートのIMPORTFEED
関数を利用して取得しています。直近20件のブックマーク情報を取得するのでこれが自分の最新の興味関心と捉えることができます。
2の処理ではそのスプレッドシートからブックマークリストのタイトルを取得しています。そして、3の処理ではChatGPTにそのリストを渡し、興味関心リストを出力してもらっています。ちなみにプロンプトは以下です。
## 指示 私が直近ブックマークしたサイトのタイトルリストをもとに私の興味関心リストを作成してください。 リスト名はタイトルそのままではなく、一般化したカテゴリーにしてください。 例えば、PHPに興味関心があれば、リスト名はプログラミングやエンジニアリングといった名前にしてください。 また、リストは最大5個で、カンマ区切りで出力してください。 結果は必ずリストのみを出力してください。 ## タイトルリスト {スプレッドシートから取得したタイトルリスト}
また、7の処理で以下のようなプロンプトでGPT4-turboから問いを投げかけてもらっています。
## 指示 あなたは優秀な経営者の参謀です。 時間がない経営者のために取得した記事の内容を以下のフォーマットで要約してください。 要約は日本語で400文字程度でお願いします。 ## フォーマット タイトル: 記事のタイトルを書いてください 要約: 論点や要点を絞って要点してください 締め: あなたなりの鋭い問いを経営者に投げかけてください ## 取得した記事 {フィードアイテムのタイトル} {フィードアイテムのコンテンツ}
つくってみての感想
これまで海外のニュースはPullで情報を取りに行くことが多かったのですが、NewsToyをつくってからは移動中や寝る前にサクッと情報収集できるようになったので既にかなり重宝しています。TickTickでToDo化したのも地味に効果的でした。また、やはり人は問いを投げかけられると思考をはじめる生き物なので思考のトレーニングにもなっています。
一方で実装面の課題もあります。例えば、興味関心はRSSフィードの更新ほど頻度高く変わるものではありません。ですのでZapier Tablesを使って、更新頻度を月一くらいにしたほうがエコです。また、もっと楽にアンテナを広げるためにそもそも登録するRSSフィードを動的に追加したり、過度なフィルターバブルを防ぐために逆に一定の確率で興味関心とは無関係なニュースを取得したりといったチューニングを今後やっていく予定です。
また、いまはまだ個人用途ですが、経営チームで使えるようにすればインプットを高いレベルで均質化できそうなので複数人での活用も検討しています。
さいごに
これまでもChatGPTをはじめとした生成AIサービスは使っていましたが、今回自分で手をちゃんと動かして学ぶことで生成AIの活用スキルが身体知になった感覚があります。また、NewsToyのようなサービスはこれまでtoC向けソフトウェアとして商業的な価値がありましたが、これぐらいのレベルであれば誰でもすぐにつくれてしまうので「Software is eating the world」から「Generative AI is eating software」の時代が本格的にやってきたと感じました。
それに対してソフトウェアエンジニアとしての危機感を覚えることは正直ゼロではありません。しかし、それよりも社会や人間の価値がドラスティックに変わっていく環境で仕事ができることはめちゃくちゃ恵まれているなと思いますし、予測できない未来にワクワクすることのほうが圧倒的に多いです。
そして、今回の取り組みを通じて改めて生成AIの活用スキルはメールを書くとかExcelが使えるとかと同じような当たり前のスキルになっていくと確信したので、コネヒトを生成AI活用のリーディングカンパニーにするぞ!という気持ちを新たにしました。
というわけで、そんなコネヒトで働くことに興味がある方はぜひお気軽にXなどでお気軽にお声がけください。
※このブログはChatGPTと一緒に執筆しました。また、OGP画像もCanvaの生成AI機能を利用して作成しています。