SnowflakeとDataikuで生成AIチャットボットを構築する

昨今、生成AIを活用して、さまざまな分野でユーザーとの対話を強化することが不可欠になっています。ユーザーからの問い合わせを理解するだけでなく、的確で文脈に沿った正確な回答を提供し、継続的に学習・改善する機能を備えたチャットボットを想像してみてください。SnowflakeとDataikuのツール、そして革新的な機能を統合することで、チャットボット技術における高度なレベルのチャットボットを実現することが可能になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/e1497321-8607-87e4-6349-37e64d8091e3.png)

Dataikuのパートナーセールスエンジニアである[Pat Masi-Phelps](https://www.linkedin.com/in/patrick-masi-phelps-05a32044/)氏とSnowflakeのパートナーセールスエンジニアである[Carsten Weidmann](https://www.linkedin.com/in/carsten-weidmann-93010b5/)氏が参加した[直近開催されたウェビナー](https://content.dataiku.com/build-a-genai-chatbot?lb_email=emi.motohashi@dataiku.com)では、大規模言語モデル（LLM）を活用した先進的なチャットボットがタスク自動化にどのような革命をもたらしているかが紹介されました。彼らは、関連するデータ検索を応答生成プロセスに直接統合することでLLMのパフォーマンスを向上させる最先端の技術である[RAG（Retrieval-Augmented Generation）](https://content.dataiku.com/build-a-genai-chatbot/dataiku-rag-llm?lb_email=emi.motohashi@dataiku.com)を紹介しました。このセッションでは、これらのモデルを評価するためのベストプラクティスも取り上げられ、AIをより効果的に活用しようとしている人々に貴重な洞察を提供しました。セッションの模様はこちらをご覧ください。
[-> 今すぐビデオを視聴する： SnowflakeとDataikuで生成AIチャットボットを構築する](https://blog.dataiku.com/cs/c/?cta_guid=d98eb448-71eb-4f81-bf00-262af60de1c6&signature=AAH58kEr7aYJCQEDpNrYY2wXBIhK83DevQ&utm_referrer=https%3A%2F%2Fwww.google.com%2F&portal_id=2123903&pageId=170123773856&placement_guid=c5020e0d-7a6e-4afa-b6ba-3cc88b8b086f&click=1c6c92a5-a1c8-4330-b474-42e5d57565b8&redirect_url=APefjpGqwTq6UW977pEGUb4X4JBngHxGnyESEMl6EH_y-DxnmFXQH6WR1itkTjHHFWNAWVpZ5UQOfXb4mXQtUv3YvyWWO88Z_VPp2sMsA7audhv4TekvHfEEdOq7S_8ZeMI9cEWJvrAjoLBZvs0YTOyd_RdIVyF6tnZi24iSVYvljlO9ELt-QBe_a31AWytXlU0gyJPa7sIS3zDfLyNaWLySPOJ9WQwgVARParekYbhov_abCh4d_jQQyMhrIiWZQCSj_047h7QBFo5CVN31EFp_plsQHx1Go5_mt_PwF679cA9b-OMY_ZQ&hsutk=a117c076b0ad0b404c6119d43e1b2832&canon=https%3A%2F%2Fblog.dataiku.com%2Fbuild-a-generative-ai-chatbot&ts=1718931144401)

## RAGによるベースラインモデルの限界の克服
従来のチャットボットは、正確で文脈に即した応答を生成するのに苦労することが多く、一般に "ハルシネーション "と呼ばれる問題がありました。このような問題は、ユーザーの信頼を著しく損なう可能性があります。RAGは、データ検索を応答生成プロセスにシームレスに組み込むことで、これらの課題に対処します。この統合により、応答が正確かつ文脈に即していることを保証するだけでなく、チャットボットの信頼性を大幅に向上させ、ユーザーとの対話と信頼を向上させます。

**「RAGを使えば、LLMが正しい答えを出す可能性が高くなる」**
*Pat Masi-Phelps, Partner Sales Engineer at Dataiku*

## RAGを使ったチャットボット開発プロセス
ウェビナーでは、SnowflakeとDataikuの機能を組み合わせてチャットボットを構築する手順について、精度を高めるためのRAGテクニックに焦点を当てて概説しました。

主な手順は以下の通りです：

### 1. ドキュメントの収集とチャンキング
最初のステップは、多様な文書から堅牢な知識ベースを構築することです。LLMのコンテキスト・ウィンドウの限界（一度に処理できる最大テキスト）を考慮し、私たちはこれらのドキュメントを、それぞれ1000文字程度の小さなチャンクに分割します。この戦略は、データ処理能力をより効率的に管理することで、チャットボットのパフォーマンスを最適化します。

### 2. 埋め込みとスマート検索
次に、埋め込み言語モデル（ELM）を使用して、これらの文書チャンクをベクトル表現に変換します。この変換により、チャットボットはテキストの深い意味を捉えることができる。ユーザーが質問を投げかけると、私たちのスマート検索システムはこれらのベクトルをふるいにかけ、私たちの知識ベースから最も関連性の高いものを見つけ、チャットボットがユーザーのクエリに最も正確に対応するデータを検索することを保証します。

### 3. プロンプトエンジニアリングとLLM処理
最後に、プロンプト・エンジニアリングと呼ばれるプロセスで、LLMへの指示をカスタマイズすることで、チャットボットの世代を洗練させることができます。
例えば「DataikuとSnowflakeのセールスエンジニアとして行動してください。ユーザーはこれらのプラットフォームとその機能について質問してきます。ユーザーの質問に対して、わかりやすく、親切で、簡潔な回答をしてください」のような形で記載をします。プロンプトエンジニアリングは、LLMが私たちの望むような回答をするのに役立ちます。

## モデルの評価と微調整
LLMの有効性を保証するために、私たちは4つの重要な基準に基づいてソリューションを徹底的に評価します：
・生成された回答は、質問された意味に直接対応していなければならない
・スマート検索によって選択された文書は質問に答えるのに役立つものでなければならない
・生成された回答は、RAGプロセスで選択されたドキュメントによって十分にサポートされている
・生成された回答は正しくなければならない
4つのメトリクスすべてを満たすことはできないかもしれないですが、さまざまなLLMを試し、RAGプロセスを反復的に改善することで、それらを最大化しようと試みることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/1c4eb7f1-ae75-03a0-c785-cea1e8910e59.png)


#### ドキュメント選択の再検討
選択したドキュメントの関連性と網羅性を継続的に再評価することは、チャットボットの回答を効果的にサポートするために非常に重要です。この継続的なプロセスでは、スマートな検索能力を向上させるために、追加的な文書や、より詳細な文書を取り入れることがあります。このような改良により、チャットボットはその回答において高い精度、正確性、信頼性を維持することができます。

If you're utilizing LLMs in your enterprise environment, make sure the LLMOps part will then pop up at one point…That human feedback loop is very, very important to make sure that you can actually augment the quality of the LLM during its lifecycles.

企業環境でLLMを活用する場合、LLMOpsのパートがある時点でポップアップするようにしてください...LLMのライフサイクル中にLLMの品質を実際に向上させることができるようにするには、人間によるフィードバック・ループが非常に非常に重要です。）
-Carsten Weidmann, Partner Sales Engineer at Snowflake

#### 業界指標とベストプラクティスの活用
構造化された評価アプローチを採用することは、特にエンタープライズ・アプリケーションでは不可欠です。LLMのアウトプットの品質を保証するために、参考解答付きのサンプル質問のリストを提供することを強くお勧めします。私たちのプロンプトを通してこれらのサンプルを適用することにより、2つの重要なメトリクス（忠実性と解答の関連性）に焦点を当てて、異なるLLMのパフォーマンスを効果的に測定することができます。

This whole LLM RAG pipeline is a system and it's not just the question and the generated answer. It's also the context. It's also the ground truth. And so there are all these metrics that are being created out there in the industry to help measure the relationship between each of these different things. So we really recommend that you guys use all of these metrics.
（このLLMのRAGパイプライン全体はシステムであり、質問と生成された回答だけではありません。文脈でもある。グランドトゥルースでもあります。そのため、業界では、これらのさまざまなものの関係を測定するのに役立つ測定基準が作成されています。ですから、これらの指標をすべて使うことを本当にお勧めします。）
-Pat Masi-Phelps, Partner Sales Engineer at Dataiku

Don't just stick with one [baseline model], but actually try at least a second one and probably a third one…to make sure you choose the best one.
（ベースラインモデルを1つだけに固執せず、少なくとも2つ目、3つ目を試してみてください。）
-Carsten Weidmann, Partner Sales Engineer at Snowflake

### Dataiku Answersを使ったデプロイメント
最終段階では、Dataiku Answersを使用してRAGで強化されたチャットボットをデプロイします。Dataiku Answersは、企業システム内にシームレスに統合できるように設計されており、高度なチャットボットのデプロイを簡素化します。主な設定手順は次のとおりです：

・ユーザー・インタラクションのログ：
すべてのユーザークエリとLLMの応答は、企業環境でのセキュリティと分析に重要なインタラクションの包括的な履歴を維持するためにログに記録されます。

・フィードバックの仕組み：
 ユーザーは、チャットボットの応答を肯定的または否定的に評価することができます。この継続的なフィードバックは、継続的な改善に不可欠であり、チャットボットのパフォーマンスを向上させるために体系的に記録されます。

・LLMとナレッジバンクの選択：
 ご希望のLLMをお選びください。ウェビナーでは、SnowflakeのArcticとLlama3がその優れたパフォーマンスで注目されました。さらに、チャットボットの運用要件に最も適したナレッジバンクを選択します。

## 結論
Dataikuを利用することで、RAGチャットボットのような高パフォーマンスのLLM搭載アプリケーションを迅速に作成することができます。Snowflake上でホストされるLLMと、DataikuとSnowflake LLM間の主要な統合により、企業はデータ、プロンプト、およびLLMの世代がSnowflake環境の範囲内に収まることを知って安心することができます。すべてのデータサイエンスソリューションと同様に、チームは精度、忠実性、関連性などの指標でRAG LLMチャットボットのパフォーマンスに注意を払う必要があります。

## 生成AIのチャットボット構築を学びましょう
DataikuとSnowflakeのエキスパートが、わずか数時間でGenAIチャットボットを構築する方法をステップバイステップでご紹介します。
⇨[ウェビナー](https://content.dataiku.com/build-a-genai-chatbot)を視聴する

原文：[Build a Generative AI Chatbot With Snowflake and Dataiku](https://blog.dataiku.com/build-a-generative-ai-chatbot)