こちらの続きです。前回は動かしただけですが、今回はDatabricksのUnity Catalogに格納されているドキュメントデータを使ってRAGを動かしてみます。
ドキュメントを見ていたらデータベースからのローダーがあることを知りました。SQLAlchemyが背後で動いているとのこと。
そして、SQLAlchemy経由でDatabricksにアクセスできます。
これらを組み合わせてUnity Catalogのデータを使ってRAGを動かしてみます。
今回使うデータは、こちらで分析した自分のQiitaの記事です。
takaakiyayoi_catalog.qiita_2023.taka_qiita_2023
というテーブルのbody
の列にテキストが入っています。
テーブルにアクセスするクラスターの以下の情報をメモしておきます。
- サーバーのホスト名
- HTTPパス
ノートブックでロジックを実装していきます。
ライブラリのインストール。
%pip install -U llama-index
%pip install "databricks-sql-connector[sqlalchemy]"
dbutils.library.restartPython()
from llama_index import download_loader
from llama_index.utilities.sql_wrapper import SQLDatabase
DatabaseReader = download_loader('DatabaseReader')
access_token = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().getOrElse(None)
server_hostname = "<サーバーのホスト名>"
http_path = "<HTTPパス>"
catalog = "takaakiyayoi_catalog"
schema = "qiita_2023"
reader = DatabaseReader(
sql_database = SQLDatabase.from_uri(f"databricks://token:{access_token}@{server_hostname}?" +
f"http_path={http_path}&catalog={catalog}&schema={schema}")
)
テーブルからドキュメントを読み込みます。
query = f"""
SELECT
body
FROM takaakiyayoi_catalog.qiita_2023.taka_qiita_2023
"""
documents = reader.load_data(query=query)
インデックスを作成します。
import os
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")
from llama_index import VectorStoreIndex, SimpleDirectoryReader
index = VectorStoreIndex.from_documents(documents)
問い合わせます。
query_engine = index.as_query_engine()
response = query_engine.query("どのような記事が書かれていますか?")
print(response)
記事は、Apache Sparkに関する機能説明やチュートリアル、Koalasの紹介、データフレームの操作方法、機械学習のチュートリアルなど、さまざまなトピックに関するものがあります。また、Apache Sparkの新機能やアプリケーション開発、データ処理、可視化、ストリーミングなどについても取り上げられています。
おおー!
response = query_engine.query("Databricksにおける大規模言語モデルに関してはどのようなことが書かれていますか?")
print(response)
Databricksにおける大規模言語モデルに関しては、セマンティック検索という機能が紹介されています。セマンティック検索は、自然言語および言語の意味を加味した検索を行うものであり、Unity Catalogのテーブルのメタデータを対象としています。現時点では、テーブル内のデータは検索されません。また、Databricksでは日本語でも自然言語による検索がサポートされており、列数の多いテーブルなどの検索も可能です。
自分で記事を書いているので分かるのですが合ってます。面白い。もっといじってみます。