見出し画像

スプレッドシートで簡単にRAGが実現できたら良くないですか? Party on Slackの新機能についてのご紹介

皆さんRAGという言葉を知っているでしょうか。

Retrieval-Augmented Generation(RAG)とは?

大規模言語モデル(Large Language Model:LLM)は、基本的にある時点までに存在する情報で訓練されており、訓練データに無い情報については知り得ません。例えば、私である吉田丈治とはだれ?と聞いても変な答えしか出せませんが、田中角栄であれば答えられます。

有名な情報なら答えられるがそうでない情報には答えられません

同様に、社内の特定の作業ルールといった外部には出ていないような情報についても当然答えられませんが、LLMの利用者は社内QandAに使いたい!という要望を持っていることが多かったりするのも実情です。そこで利用される技術がRAGというものになります。

RAGって具体的にどんなことをしているのか?

では、生成AI文脈で使われるRAGはどんなことをしているのでしょう。
上述の通り、吉田丈治について教えてと問われたときに、事前に定義されたデータベースを検索して吉田丈治についての情報を取得しておきます。
取得された情報をLLMに渡してから答えさせるという流れにすることで、きちんとしたデータを返すことができるようになるのです。

赤枠の中身がRAGで情報提供した結果です

そんなRAGですが、結構設定が面倒だったりするのが玉に瑕で、利用の敷居が高かったんですよね。

RAGが面倒だったのはなぜだっけ?

例えば、Pineconeを使ったRAGの場合ですが、データの更新が本当に面倒でした。みなさんが使うことが多いRDBという形式で情報が格納されている訳ではないので、更新のたびにいちいち情報を取得してIDを特定し、データを更新するという必要があったのです。
端的に言うとデータのメンテナンス性が低かったんです。
そこで提供を始めたのがスプレッドシートRAGというわけ

スプレッドシートRAGはこんなに簡単

連携用スプレッドシートの形式

とにかく簡単。セルの一つひとつに、情報を格納していくだけです
例えば、リバネスとは、リバネスナレッジとは、吉田丈治とは、といった意味のかたまりで情報を登録していきます
FAQであれば、質問と回答をまとめて一つのセルに入れておくと良いと思われます

データ更新手順は?

スプレッドシートを更新する→Party on Slackでデータ更新ボタンを押す→それだけ!簡単です

Data更新ボタンを押せば、アップデート完了です

セキュリティ大丈夫なの?

今回の機能はどのように提供されているかというと、Party on Slackのデータベースに情報が格納されて提供されています。
た・だ・し
格納される情報は、ベクトル化されたデータのみです

これだけでテキストの中身はわかりません

技術的な話

こちらは興味があればどうぞ
実データはParty on Slackに取り込まずに如何にしてRAGを実現するのかについてですが、今回用いたのはHeroku Postgresに搭載されたpg_vectorというものを使っています。

ここでも少し触れたのですが、Salesforceが提供するHerokuというPaaSで利用できるHeroku Postgresというサービスがあります。このデータベースは書かれている通りPostgreSQLなのですが、その中でベクトル検索ができるようにアップデートされたんですよね。
詳細はこちらをご参照ください

つまり、PostgreSQLのRDB上に埋め込みベクトルをおいておくことで、情報検索クエリによってデータを取得することができるようになったという訳なのです。
ではそのベクトル検索ができることで何が嬉しいのかについて書いていきます。
例えば、従来のデータベースであれば、吉田丈治を検索したいときは「吉田丈治」と検索する必要がありました。これによってキーワード検索が走り、先程のスプレッドシートのセルがヒットするということになります。
一方でLLMの利用を考えてみましょう。チャットツールからの入力になりますから、口語で入ることが多いはずです。
「吉田丈治ってどんな人?」
と書かれたときに、キーワード検索では引っ掛けることができません。強いていうなら、吉田丈治ってどんな人?→吉田丈治 を抜き出すような仕組みを作ってそこからキーワード検索をする必要があります

ベクトル検索では何が起きるのか

最初に、吉田丈治ってどんな人?が入力されたとき、これをベクトル化します。ベクトル化というのは、先程画像で見せた数字ばっかりの情報です。このベクトルを使って、pg_vectorを利用した検索をすると、A3セルに入っていた情報がヒットするという仕組みです。
A3セルのデータはすでにベクトル化されているので、これの近似検索をHeroku Postgresがやってくれるという仕組みです。素晴らしい!

まとめ

今日のParty on Slackのリリース機能はスプレッドシートRAGでした。
これを使うことによって、非常に簡単にナレッジベースを作ることができます。ぜひご利用ください。

資料はこちら:https://lne.st/gpt

詳細な設定方法はこちらをご参照ください
https://qiita.com/geeorgey/items/124346b9f4762f7f0e4b#google%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88rag%E6%A9%9F%E8%83%BD

現在の課題

スプレッドシート連携ですが、アプリをグローバルロックといって、管理者以外は設定変更ができない状態になっていると、Data更新ボタンを管理者のみしか押すことができません。こちらについては、近日中に、誰でも更新をかけられるような状態を目指す予定です

現在の課題2

チャンネルごとに利用するスプレッドシートを変更したいというニーズがおそらく生まれるとおもいます。これはある程度評価してから利用されるものと認識しており、将来的な対応にさせてください。

この記事が参加している募集

noteにはこれまでの経験を綴っていこうかと思います。サポートによって思い出すモチベーションが上がるかもしれない。いや、上がるはずです。