リアルタイムの構造化データによるRAGアプリケーションのレスポンス品質の改善

[Improve your RAG application response quality with real\-time structured data \| Databricks Blog](https://www.databricks.com/blog/improve-your-rag-application-response-quality-real-time-structured-data)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

[Retrieval Augmented Generation \(RAG\)](https://www.databricks.com/glossary/retrieval-augmented-generation-rag)は、生成AIアプリケーションにおいてコンテキストとして適切なデータを提供する効率的なメカニズムです。多くのRAGアプリケーションは、ドキュメント、Wiki、サポートチケットのような非構造化データから適切なコンテキストを検索するためにベクトルインデックスを活用します。昨日、我々はまさにこの助けとなるDatabricks Vector Searchのパブリックプレビューを発表しました。しかし、適切かつパーソナライズされた構造化データを用いて、これらのテキストベースのコンテキストを拡張することで、生成AIのレスポンス品質を強化することができます。顧客が「私の最近の注文はどこですか？」と問い合わせる小売ウェブサイトの生成AIツールを創造してください。このAIは、レスポンスの生成にLLMを使う前に、この問い合わせは特定の注文に関するものであることを理解し、ラインアイテムに対する最新の出荷情報を収集する必要があります。これらのスケーラブルなアプリケーションの開発には膨大な作業や、生成AIの能力と構造化データ、非構造化データの両方を取り扱うためのテクノロジーとのインテグレーションが必要となります。

Databricksデータインテリジェンスプラットフォームから構造化データをサービングするために設計された、低レーテンシーのリアルタイムサービスである**Databricks Feature & Function Serving**のパブリックプレビューを発表できることを嬉しく思っています。計算済みのML特徴量に即座にアクセスでき、Unity Catalogから任意のPython関数をサービングすることでリアルタイムのデータ変換処理を実行することができます。そして、取得されたデータは、リアルタイムのルールエンジン、従来のML、生成AIアプリケーションで活用することができます。

構造化データのためのFeature & Function Serving([AWS](https://docs.databricks.com/ja/machine-learning/feature-store/feature-function-serving.html))([Azure](https://learn.microsoft.com/ja-jp/azure/databricks/machine-learning/feature-store/feature-function-serving))と非構造化データのためのDatabricks Vector Search([AWS](https://docs.databricks.com/ja/generative-ai/vector-search.html))([Azure](https://learn.microsoft.com/ja-jp/azure/databricks/generative-ai/vector-search))を苦r見合わせることで、生成AIアプリケーションにおけるプロダクション化を劇的にシンプルにすることができます。ユーザーは、Databricksで直接これらのアプリケーションを構築、デプロイすることができ、既存のデータパイプライン、ガバナンス、その他のエンタープライズ機能を活用することができます。

さまざまな業界のDatabricksのお客様は、以下の表に示すようにパワフルな生成AIアプリケーションを構築するためにオープンソースのフレームワークとこれらのテクノロジーを活用しています。

| 業界 | ユースケース |
|:--|:--|
|小売   | <ul><li>ユーザーの嗜好、検索履歴、位置などに基づく製品提案 / 検索ランキング<li>製品検索をベースとした画像やメタデータ<li>売り上げデータ、季節トレンド、市場/競合分析を用いた在庫管理や予測</ul>  |
|教育   | <ul><li>過去の間違い、歴史的なトレンド、グループに基づいてパーソナライズされた教育計画<li>自動化された評点、フィードバック、フォローアップ、進捗レポート<li>対象デバイスに対するコンテンツフィルタリング</ul>  |
|金融サービス   | <ul><li>アナリストや投資家が収支報告、市場インテリジェンスレポート、過去のトレンドの相関を見るための自然言語アプリ<li>不正およびリスク分析<li>パーソナライズされた資産管理、リタイアメント計画、what-if分析、ネクストベストアクション</ul>  |
| 旅行とホスピタリティ  | <ul><li>パーソナライズされた顧客インタラクションとテイラーメードの旅行提案のためのチャットボット<li>気候、ライブの交通パターン、過去のデータを用いた動的ルート計画<li>競合分析、需要ベースのプライシングを用いた動的価格最適化</ul>  |
| ヘルスケアとライフサイエンス  | <ul><li>患者/メンバーのエンゲージメント、健康状態の要約<li>パーソナライズされたケア、診療の意思決定、ケアの調整のためのサポートアプリ<li>R&Dレポートの要約、臨床試験分析、薬品の目的の再定義</ul>  |
| 保険  | <ul><li>資産や近隣に関するテキストや構造化データを用いた住宅ローン引受のリスク評価<li>ポリシー、リスク、what-if分析に関する質問のためのチャットボット<li>クレーム処理の自動化</ul>  |
| テクノロジーと製造  | <ul><li>予兆保全やガイドされた指示を用いた装置診断<li>履歴の統計情報に対するライブのデータストリームによる異常検知<li>日々の生産 / シフト分析や将来的な計画のための自動化された分析</ul>  |
| メディアエンターテイメント  | <ul><li>アプリ内のコンテンツ検索やレコメンデーション、パーソナライズされたメールやデジタルマーケティング<li>コンテンツのローカライズ<li>パーソナライズされたゲーム体験やゲームレビュー</ul>  |

# RAGアプリケーションへの構造化データのサービング

生成AIアプリケーションの品質改善に構造化データがどのように役立つのかをデモンストレーションするために、以下の旅行計画チャットbotのサンプルを使用します。この例では、マッチするホテルを検索するために、ユーザーの嗜好(オーシャンビュー、家族に優しいなど)がどのようにホテルに関する非構造化の情報と組み合わされるのかを示しています。通常、ホテルの価格は需要と季節性によって動的に変化します。生成AIに組み込まれた価格計算機は、レコメンデーションがユーザーの予算に収まるようにします。ボットを強化する生成AIアプリケーションは、LangChainのエージェントAPIを用いて、必要となるパーソナライズされたユーザー嗜好と予算、ホテルの情報を提供するためのビルディングブロックとして、Databricks Vector SearchとDatabricks Feature & Function Servingを活用します。
![](https://cms.databricks.com/sites/default/files/inline-images/image3_12.png)
*ユーザーの嗜好と予算を考慮する旅行計画ボット*

上述したこのRAGチェーンアプリケーションの[完全なノートブック](https://docs.databricks.com/en/_extras/notebooks/source/machine-learning/structured-data-for-rag.html)にアクセスすることができます。このアプリケーションはノートブック内でローカルに稼働することもできますし、チャットbotのユーザーインタフェースでアクセスできるエンドポイントとしてデプロイすることもできます。

# リアルタイムエンドポイントとしてあなたのデータと関数にアクセス

[Unity Catalogの特徴量エンジニアリング](https://www.databricks.com/jp/blog/simplification-of-AI-data-feature-store-evolved)によって、トレーニングとサービングのための特徴量をサービングするための主キーと任意のテーブルを活用できるようになっています。サービングでは、特徴量をオンデマンドで計算するPython関数がサポートされています。Databricksモデルサービングと同じテクノロジーを用いて構築されており、計算済みの特徴量やオンデマンドでの計算のために、特徴量と関数のエンドポイントを活用することができます。シンプルな構文によって、RESTエンドポイントとして特徴量を計算し、サービングする有効非循環グラフをエンコードできる、Unity Catalogにおける**feature spec function**を定義することができます。

```py
from databricks.feature_engineering import (
  FeatureFunction,
  FeatureLookup,
  FeatureEngineeringClient,
)

features = [
  # Lookup columns `latitude` and `longitude` from `restarants` table in UC using the input `restaurant_id` as key
  FeatureLookup(
    table_name="main.default.restaurants",
    lookup_key="restaurant_id",
    features=["latitude”, “longitude"]
  ),
  # Calculate a new feature called `distance` using resturant and user's current location
  FeatureFunction(
    udf_name="main.default.distance",
    output_name="distance",
    # bind the function parameter with input from other features or from request.
    input_bindings={"user_latitude": "user_latitude", "user_longitude": "user_longitude",
                    "restaurant_latitude": "latitude", "restaurant_longitude": "longitude"},
  ),
]

fe = FeatureEngineeringClient()

# Create a feature spec with the features listed above.
# The FeatureSpec can be accessed in UC as a Function.
fe.create_feature_spec(
  name="main.default.restaurant_features",
  features=features,
)
```

このfeature spec functionは、RESTエンドポイントとしてリアルタイムでサービングすることができます。特徴量、関数、カスタムのトレーニング済みモデル、基盤モデルを含むすべてのエンドポイントは左のナビゲーションタブにあるサービングからアクセスすることができます。以下のAPIを用いてエンドポイントをプロビジョニングします。

```py
from databricks.feature_engineering.entities.feature_serving_endpoint import (
  ServedEntity,
  EndpointCoreConfig,
)

fe.create_feature_serving_endpoint(
  name="restaurant-features",
    config=EndpointCoreConfig(
    served_entities=ServedEntity(
      feature_spec_name="main.default.restaurant_features",
      workload_size="Small",
      scale_to_zero_enabled=True
    )
  )
)
```

また、以下のようにUIのワークフローでエンドポイントを作成することもできます。
![](https://cms.databricks.com/sites/default/files/inline-images/image1_1.gif)

これで、エンドポイントをクエリーすることでリアルタイムで特徴量にアクセスすることができます。

```sh
curl \
  -u token:$DATABRICKS_TOKEN \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"dataframe_records": [{"user_latitude": 37.9711, "user_longitude": -122.3940, "restaurant_id": 5}]}' \
  https://<databricks-instance>/serving-endpoints/restaurant-features/invocations
```

リアルタイムAIアプリケーションに構造化データをサービングするには、オペレーショナルデータベースに計算済みのデータをデプロイする必要があります。ユーザーはすでに計算済みの特徴量のソースとして外部のオンラインストアを活用することができます。例えば、[DynamoDB](https://docs.databricks.com/ja/machine-learning/feature-store/online-feature-stores.html)や[Cosmos DB](https://learn.microsoft.com/ja-jp/azure/databricks/machine-learning/feature-store/online-feature-stores)はDatabricksモデルサービングで特徴量をサービングする際によく使われています。**Databricks Online Tables**([AWS](https://docs.databricks.com/ja/machine-learning/feature-store/online-tables.html))([Azure](https://learn.microsoft.com/ja-jp/azure/databricks/machine-learning/feature-store/online-tables))は、計算済み特徴量の低レーテンシーのデータ検索に最適化されたデータフォーマットへの同期をシンプルにする新機能です。オンラインテーブルとして主キーを持つ任意のテーブルを同期することができ、データの鮮度を確実にするためにシステムが自動パイプラインをセットアップします。
![](https://cms.databricks.com/sites/default/files/inline-images/image4_12.png)

Databricks Online Tablesを用いることで、生成AIアプリケーションに特徴量をサービングするために、主キーを持つすべてのUnity Catalogのテーブルを使用することができます。

# 次のステップ

あなたのRAGアプリケーションをカスタマイズするために、上で説明した[サンプルノートブック](https://docs.databricks.com/en/_extras/notebooks/source/machine-learning/structured-data-for-rag.html)をご活用ください。

オンデマンド視聴できる[Databricks Generative AI Webinar](https://www.databricks.com/resources/webinar/disrupt-your-industry-generative-ai)をご覧ください。

Feature & Function Serving([AWS](https://docs.databricks.com/ja/machine-learning/feature-store/feature-function-serving.html))([Azure](https://learn.microsoft.com/ja-jp/azure/databricks/machine-learning/feature-store/feature-function-serving))はパブリックプレビューです。APIドキュメントやその他のサンプルをご覧ください。

Databricks Online Tables([AWS](https://docs.databricks.com/ja/machine-learning/feature-store/online-tables.html))([Azure](https://learn.microsoft.com/ja-jp/azure/databricks/machine-learning/feature-store/online-tables))はゲーテッドのパブリックプレビューです。有効化するにはこちらの[フォーム](https://forms.gle/9jLZkpXnJF9ZcxtQA)にサインアップください。

今週前半の[発表](https://qiita.com/taka_yayoi/items/cc9df235215d4b79fb1d)(高品質なRAGアプリケーション)をご一読ください。

Databricksに共有したいユースケースがありますか？feature-serving@databricks.comにコンタクトください。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)