Dataiku、Databricks、LangChainでLLMアプリケーションを構築する

<font color="OrangeRed">*Dataikuは9月14日(木)開催の[Databricks DATA+AI World Tour](https://dbricks.co/45c4mt1)に出展します。Dataikuブースでお待ちしています！*</font>

---
目まぐるしく変化するビジネスとテクノロジーの世界で、[大規模言語モデル（LLM：Large Language Models）](https://qiita.com/Dataiku/items/98bc30cec68b3db9c911)ほど興味をそそるイノベーションはありません。LLMは、役員室でも食卓でも、最もホットな話題となっています。人間の言葉を理解し生成する能力のおかげで、LLMは人間と機械のやりとりのルールを書き換え、新しい可能性の時代への道を切り開こうとしています。このテクノロジーがエキサイティングなものであることは間違いありませんが、LLMのパワーをイノベーションに活用しながらも、その一方で機密情報を保護するというバランスを取ることが、組織にとって重要な課題となっています。

組織は、ChatGPTのようなプロプライエタリーなSaaS型LLMが提供する広範なナレッジを重視していますが、これらのLLMをそのまま使っても、必ずしもビジネスのニーズに合致するとは限りません。組織が最も興味深いと思うようなビジネスユースケースでは、非公開文書の利用を検討する必要があるからです。

まず第一に、上記のようなLLMは、これらの非公開文書を使った学習はしてません。第二に、質問として入力するプロンプトおよび必要な関連情報は機密であり、SaaS LLMプロバイダーと共有することができません。さらに言うまでもなく、SaaS LLMのAPIトークンの料金は高額です。

これらの課題を解決するために、このブログでは以下をお届けします：
- ニッチ文書のコーパスからベクトルストアを作成し、このコーパスから適切なコンテキストを持つユーザープロンプトを賢く設計する方法を説明します。
- 小規模で低コストなオープンソースの基礎モデル、具体的にはDatabricksが30ドル以下でトレーニングした大規模言語モデル（LLM）であるDollyを使用して、ChatGPTのような人間的なやりとりを開発する例を提供します。
- データ準備、プロンプトエンジニアリング、Q&Aチャットボットインターフェースのための包括的なパイプラインをDataiku内で構築する方法を示します。
![unnamed (13).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/899a8226-aa5c-3a86-41d6-1c450968c6d1.jpeg)



## なぜDollyなのか？
Databricksによって作られた[Dolly](https://www.databricks.com/blog/2023/04/12/dolly-first-open-commercially-viable-instruction-tuned-llm)は、オープンソースの命令追従型大規模言語モデルです。これはEleutherAI pythiaモデルファミリーをベースにしています。Dollyや[MPT-7B](https://www.mosaicml.com/blog/mpt-7b)のような軽量でオープンソースのLLMは、組織がLLMを使用して高品質な結果を迅速かつ経済的に提供できることを示しています。これらのモデルのアクセシビリティーは、DataikuのEveryday AIというビジョンを補完し、LLMをごく少数の企業が購入できるものから、すべての企業が所有し、製品を改善するためにカスタマイズできる資産に変えることで、LLMの民主化を支援します。

このコンセプトについて、以下の[ユースケース例](https://pages.databricks.com/Build-your-Chatbot-with-Dolly-APJ-Workshop-31-May.html)を通して紹介します。また、DataikuとDatabricksの[補完的なテクノロジー](https://qiita.com/Dataiku/items/def9777734312623ecfc)が、どのように企業の幅広いデータサイエンスとAIのニーズに対応しながら、AIを活用した生成系アプリケーションの開発をサポートできるかを紹介します。

## LLMパイプラインの開発
#### ステップ1. データを準備する
効果的なLLMパイプラインの構築には、LLMの導入にとどまらない総合的なアプローチが必要です。カスタマイズには、クリーンでキュレーションされたデータが必要であるため、私たちのフローは、質問と回答のデータが洗練され、分析に適した状態であることを確認するために、生のテキストデータを前処理することから始めます。

私たちのケースでは、XMLファイルの形で[Gardening and Landscape Stack Exchange](https://gardening.stackexchange.com/)から生のデータをダウンロードします。ここでDataikuの力が発揮されます。XMLファイルをアップロードし、自動的に構造を検出する機能により、コードを使用せずに非構造化データファイルを解析することができます。ビジュアル操作によるいくつかの準備ステップとレシピで、私たちのデータは、非構造化データから構造化データに変換されます。

#### ステップ2. プロンプトエンジニアリングと推論Q&A
LLMはトレーニングの間に提示されたことしか知りません。そこで、適切で最新の回答を提供できるように、LLMと上記でダウンロードしたガーデニングQ&Aデータソースを結びつけます。ベクトルストアを構築し、埋め込まれたテキストにインデックスを付け、高速かつ検索可能なデータベースを構築します。DataikuフローのPythonコードレシピの中から[FAISS](https://python.langchain.com/en/latest/modules/indexes/vectorstores/examples/faiss.html)とLangChainを使用し、ベクタルストアに入力します。  Dataikuフローは、ビジュアルとコードベースの準備ステップをシームレスに組み合わせ、プロセス全体を透明化し、簡単に理解できるようにしています。

新しい質問がされると、私たちは過去に質問された類似の答えを見つけるために私たちのベクトルストアを照会します。これらの関連する回答は、LLMにコンテキストとして渡されます。この "[retrieve-then-read](https://blog.dataiku.com/query-your-documents-with-gpt-3)"パイプラインテクニックは、LLMをカスタマイズするための効率的で低コストのソリューションを提供します。

#### ステップ 3. プロンプトエンジニアリングと推論Q&A
このコンテキストをプロンプトテンプレートを通してLLMに渡します。プロンプトは、LLMがどのように質問に答えるべきかを指示するように構成することができます。プロンプトテンプレートの例を以下に示します。
![unnamed (14).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/734f2edb-8862-b225-834e-9aa65b0b5189.jpeg)


プロンプトテンプレートが定義されたら、[LangChain](https://python.langchain.com/en/latest/index.html)の組み込み関数を使ってテンプレートをLLMに渡し、生成されたレスポンスを返します。Dataikuでは、HuggingfaceのオープンソースLLMをFlowに簡単に組み込むことができます。単にコード環境リソースディレクトリにモデルをロードし、推論を実行するレシピとしてそのコード環境を選択するだけです。オープンソースのLLMがプロプライエタリーなSaaSのLLMを下回ることは定量的な[ベンチマーク](https://crfm.stanford.edu/helm/latest/?group=question_answering)からわかっていますが、以下の例では、"比較的小さな"モデルでもかなり良い回答が得られることを示しています。

| 質問例 | 生成回答の例 |
| ---- | ---- |
| 毎年夏になると、気をつけているつもりでも、庭仕事中に不運にもツタウルシに出会ってしまい、ひどい発疹ができてしまう。ツタウルシ、ウルシ、ウルシウルシの見分け方は？ | 毎年夏になると、気をつけているつもりでも、庭仕事中に不運にもツタウルシに出会ってしまい、ひどい発疹ができてしまう。ツタウルシ、ウルシ、ウルシウルシの見分け方は？| 庭仕事をする際には注意し、植物に触れた後は手や衣服をよく洗うことが重要です。ツタウルシ、ウルシカシ、ウルシウルシの見分け方のひとつは、生え方を観察することです。茎が腫れてでこぼこしていることが多く、通常は群生しており、つぶすと苦いにおいの油が出ます。樹木の近くで作業する場合は、地面から樹木を観察し、症状や虫刺されの有無を確認することが重要です。 |


#### ステップ 4. このLLMを企業のために民主化する
機能的なデータプロダクトをビジネスで利用するためにデプロイすることは、極めて重要です。LLMの価値とインパクトを高めることができます。幸いなことに、私たちはノーコードのDataikuアプリケーションを使用して、プロジェクトを再利用可能なアプリケーションとしてパッケージ化できます。このアプリケーションでは、アクションが事前定義されているので、新しいインプットデータを取り込むフローを構築して、アウトプットを出すことができます。以下のアプリケーションは、ノーコードのユーザーがシンプルに質問するか、いくつかの質問をアップロードし、推論のためにこれらの質問をサブミットするシナリオを実行し、Dollyから生成された回答を表示またはダウンロードする方法を示しています。

アプリケーションを開発することで、LLMの可能性を最大限に引き出し、パイプライン全体の成功を実現することができます。というのも、このLLMの例では、ビジネスユーザーがコードを書くことなく推論を実行できるようになっているのです。
![unnamed (15).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/52c32b5a-078e-1940-71ee-0953b6e65138.jpeg)


## まとめ
LLMは、私たちの働き方を再構築する可能性を秘めた画期的なイノベーションとして登場しましたが、組織は、データセキュリティーを確保しながらその力を活用するという課題に直面しています。DollyやMPT-7bのような小型で低コストの基盤モデルは、この課題に対する解決策を提供します。

オープンソースのLLMがより利用しやすくなるにつれて、このテクノロジーは、あらゆる組織が仕事のやり方を改善するために使用できるコモディティーとなるでしょう。LLMの民主化によって、この革新的な技術が広く採用され、さまざまな業界でその潜在能力が最大限に発揮されることが期待されます。



<br>
<br>
<br>

原文： [*Build an LLM Application with Dataiku, Databricks, and LangChain*](https://blog.dataiku.com/llm-application-dataiku-databricks-langchain)