本セッションの登壇者
セッション動画
私の方からは「LangChainとVectorStoreで作るかんたん自社チャット」というお話をさせていただきます。いただいている時間が15分ほどなので、コードを見せてバンバン作るまではちょっと厳しいので、皆さんが作れるような情報を提供するという感じでやらせていただければと思います。
最初に自己紹介を軽くさせてください。私、アステリア株式会社にてエバンジェリストをやっております森と申します。Techfeedでもブロックチェーンでコミュニティエキスパートをさせていただいていて、AIだけではなくいろんな先端技術をやっています。ブロックチェーンでは本を書いていたり、AI関連で取材を受けたり、イベントで登壇したりみたいなこともしています。
当社、アステリアは時々勘違いされますけど日本の会社です。「ノーコード」や「つなぐ」をキーワードにした、下に出ている4つの製品などを企業向けに提供している会社です。
そのアステリアがなぜAIに関わっているかという理由の一つが、AIとロボティクス関連技術を研究開発しているアステリアARTという子会社を持っているからです。代表は早稲田でAIを教えている園田先生です。
担当者1人でもできそうなAIチャットボットを作ろう
では、AIの話に移っていこうと思います。最近よく聞く話をまとめてみました。まず最近「AIの活用をうちの会社でもやりたいんだけど」みたいな方が大変増えています。
ChatGPTも話題になっていますし、「自社のデータを踏まえた回答をしてくれるbotを作りたい」とか、「AIを活用したい」という方が結構増えてらっしゃいます。2つ目として、「自社のデータを踏まえたチャットを作りたいんだけど、OpenAIにデータを丸ごと送るような話だとセキュリティ的に厳しかったり、自社のポリシー的にも厳しいんだよね」という話もよく聞きます。また、「リソースがあまりない、担当者1人でできるようなことはないのか」とか、「予算も人員もないので何とかならないかな」という話もあります。それも踏まえて、担当者1人でもできそうなレベル感で試せるようなことをやってみたいと思います。
今回作りたいもののイメージですけれども、左側が社内、右側がChatGPTを含めた社外です。質問者の方が社内に関する質問を投げかけてきました。この例ですと、「新しく購入したPCでプリンターの接続方法を教えて欲しいです」という、よくある状況ですね。そのたびに社内の担当者が丁寧に答えているのかもしれないし、「またこういう質問が来たか」と思っている方もいらっしゃるかと思います。こんな質問が来ると、社内のデータベースに検索に行きます。社内のデータベースにはベクトル化した情報が入っていて、関連する情報が簡単に検索できる状況を作っておきます。ここから関連している情報をこの例だと3つぐらい出してきました。これを踏まえてプロンプトを作ります。質問と社内のデータベースから取った関連情報を踏まえて回答してくださいよというプロンプトを作ってChatGPTに入れると、それっぽい回答が返ってきます。
似たもの探しが得意なVectorStore
これに必要な技術として、3つほど挙げさせていただいています。1つ目がVectorStoreです。普通のデータベースにベクトル情報にしたものを保存していくのでも構わないんですけども、類似した情報を探すのに結構数式が面倒くさかったりするんですね。その辺をいろいろ便利にやってくれるデータベースをVectorStoreと呼んでいます。似ているものを探すことが得意だったり、ECストアのおすすめ商品などでも使われていたりもします。
Embeddingとは、情報をベクトルにする技術です。日本語での検索が必要であれば、日本語が学習されたAIのモデルが必要となります。ChatGPTの開発元のOpenAIのものが有名ですが、それ以外にもさまざまなものが存在しており、ネット上に社内の情報を出さずにローカルで実行できるものもあります。
3つ目としてDocument LoaderとText Splitterというのを挙げています。社内の情報、Wordファイルやそれ以外のいろいろな情報を読み込んで、テキストにするのがDocument Loaderです。Text Splitterは名前のとおりで、ものすごい長い文章をそのままプロンプトに貼り付けるわけにはいかないので、テキストを適当な長さに切るのが役目です。
VectorStoreって初めてお聞きになった方もいらっしゃるかと思いますけど、結構いろいろなサービスが世の中に存在しています。ざっとアイコンを並べていますけども、こちらはLangChainというフレームワークのPython版とJavaScript版の両方で使えそうなものを挙げています。左側にあるものがオンプレミス環境で作れるもので、右側に行くに従ってクラウドで作れるものを並べています。
複数モデルを扱うLangChain、用意された機能でAI呼び出しを簡単に
今ちょっと話題にも出ましたけども、LangChainというものが存在します。このセミナーを聞いてらっしゃる方は知っている方も結構いらっしゃるのかなと思いますけども、OpenAIをはじめとして複数の大規模言語モデルを扱うフレームワークです。Python版とJavaScript版がありまして、一般的なモデルを使った回答を得るとか、プロンプトをテンプレート化して利用するといった基本機能は各モデル共通で使うことができます。外部ツールとの連携やデータの活用なんかも割と簡単に、しかもどんなエンジンを選んでも共通で使えるよというのがLangChainのメリットです。
LangChainでできることの例として、いろんなモデルを使うことができます。左上に書いてあるのがOpenAIを使う例なんですけども、それ以外にもHugging Faceという公開モデルを利用してあげればその先の処理は一緒ということができます。
また、Python版だけになりますが、ローカルにダウンロードしたモデルを使うということもできるんですね。定義だけしちゃえば、その後のやり方は同じです。ローカルにダウンロードできるレベルのものだと、処理能力とか結果が今ひとつかもしれませんけども、それも含めて同じように扱えるというメリットがあります。
話に挙げました、Hugging Faceというものについて簡単に説明します。AIの公開モデルを共有してくれているプラットフォームです。いろんなエンジンが載っていますので、使いたいものを選んで使います。中には日本語が取り扱える大規模言語モデルだったり、Embeddingモデルもいくつかありますので、そちらを使ってやってみることが可能です。LangChainからはPython版だけ利用できそうです。
LangChainでできることの例の2つ目として、やりたいこととして先ほどは自分でプロンプトを書くようなイメージでしたが、プロンプトを書かなくてもよくあるものは「Chain」という機構で用意されています。たとえば関連ドキュメントを踏まえたQAをする際のChainがもう定義されているので、それを呼び出してドキュメントと質問を投げかけるだけで回答ができたりします。これでやると、作る人によってクオリティが変わることがないので、試してみる際にはいいのかなと思います。もちろん、自分でプロンプトを定義してカスタマイズすることも可能です。
また、ドキュメント要約用のChainも用意されているので、これも呼び出すだけで文章の要約が簡単にできます。まず用意されたもので簡単に実行してみて、チューニング的なことをしたければ自分でやるという感じになるかと思います。
クラウドとオンプレの両方で使えるSingleStore
今回試したものなんですけども、AIモデルの方は回答の生成はOpenAIのChatGPTを使わないとそれっぽいクオリティで返ってこないというのもありまして、こちらを使いました。ただ、Embeddingに関しては、社内のデータを全部Embeddingしてベクトル化するのにOpenAIのAPIを使うと結局は全部のデータを社外に出していることになってしまうので、そこだけは手元で動かせるEmbeddingのモデルを試してみました。VectorStoreに関してもベクトル化されたデータでそのままの生データではないので、社外のサービスを使っても漏洩に当たらないかなという見解もあるでしょうし、最終的にデータベースとして構築できるのであれば社内で持ちたいということもあると思います。先ほどアイコンがたくさん並んでいたVectorStoreの中で、クラウドとオンプレ両方使えるサービスがありましたので、そちらを使ってみたいと思います。それが、SingleStoreです。
「SingleStoreって何ぞ?」と思う方もいらっしゃるかと思います。僕もこれを調べ始める前は知らなかったので、結構マイナーなのかなと思っております。MySQLから派生したデータベースで、普通にSQLが通ります。MySQLを使ったことがある方はご存知かと思いますが、ポートは3306なので、ほぼ同じ感じで使えると思います。オンプレ版の最小構成で使う場合は無料で、クラウドだと600ドル分のトライアル付きで試せるようになっていますので、こちらを使ってとりあえず試すことができそうです。
結構検索してみたんですけど日本語の情報があまりなくて、LangChainで使ってる人は少なくとも最初の方にはヒットしなかったので、これから情報を探すという方は、もしかしたら英語で探した方が楽かもしれません。とりあえずこれをクラウド版でやってみたという感じです。
特徴をつかんで試してみよう
コードのレベルで話す時間はないので、やってみた感想などをざっと出してみました。LangChainに用意された機能でOpenAIの呼び出しも簡単にできます。ほとんど公式ページのサンプルのままで行けるなという感じですね。あと、VectorStoreの構造は理解する必要がなかったです。SingleStoreのセットアップの際にどんな形式のテーブルを作ればいいのか悩んだんですけど、LangChainはそこも全部自動でやってくれました。さらに、外部の連携などいろんな機能がありますので、今後試すこともできるかと思います。
Hugging Faceに関しては、ローカルモデルを自分のところにダウンロードして外に出さずにEmbeddingできるというのはいいところなんですけども、やっぱり自分のところに落とせるモデルはちょっとレベル感が低いかなというのがありました。たくさんあるので、他のものをいろいろ試していいやつが見つけられればいいなと思っています。
SingleStoreに関してはクラウド版はAWSかGCPかAzureから選ぶという形になってました。日本のRegionはなかったのでUSAとかを使うしかないかなという感じです。データベース構築まで画面操作で簡単にできました。オンプレ版を使う場合もMySQLのツールがそのまま使えそうなので、これは結構よさそうです。
私のセッションは以上です。皆さんも検索などしてみていただければと思います。