DataStaxによる生成AIへのアプローチ


## はじめに

現在、生成AIをめぐる状況は、目まぐるしく動いています。

ここでは、DataStax社による(**Apache Cassandra**データベースを中心とした)生成AIへのアプローチに関する情報を、日本語による最速のアップデートを意図して、整理します。本稿については、できるだけ最新の情報を迅速に提供することを目的として、初回の発表以降も、適宜アップデートを予定しています。

## TL;DR (一言で言えばどういうことなのか)

長すぎる(Too Long)記事など読みたくない(Don't Read)という方は、以下の3点、特に、3段論法の結論部分、が本項の趣旨となります。

 - LLMモデルはステートレス
   - Retrieval Augmented Generation (RAG) について、思い出して（学んで）みよう（下記、参考情報もご参照ください）
 - LLMを活用した生成AIをビジネスに活用するためには、企業独自、かつ最新（リアルタイム）データの活用には、オンラインデータストア/データベースの活用が必須
 - **大規模データのミッションクリティカル利用に秀でたApache Cassandraデータベースを生成AIアプリケーションに利用するための拡張が行われている**

以下は、上記の（二つの）前提に関する図示です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/fe8106a8-f72e-2506-b73e-4982b20bc9f5.png)

そして、以下が、（三つ目の）結論について、DataStaxが提示するものの概略です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/e8b7aef6-07f8-ba7d-54b2-bfbfa3cf15c5.png)


DataStaxによる、上記の結論に示された活動は、目まぐるしく発展する技術領域に対する、進行中の取り組みであると言えます。その意味で、ここでは技術の「成熟度」よりも、「Timeliness(いかにタイムリーか)」が重要となる状況だと言えます。

以下にその具体的な取り組みについての一端を示します。

## CassIO: LangChainをはじめとするフレームワークへのアプローチ

https://cassio.org/

CassIO の目的は、GenerativeAI やその他の機械学習ワークロードの一般的なニーズに合わせて Cassandra データベースにアクセスする詳細を抽象化し、Cassandra をシームレスに統合するためツール セットを提供することです。 

LangChain は、LLM(大規模言語モデル)の管理と対話を自動化するそうしたフレームワークの一つです。

https://docs.langchain.com/docs/

CassIO は LangChain とシームレスに統合した Cassandra 固有のツールを提供します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/468350ac-f7bc-3c4a-8c8b-0523e70c90b2.png)

CassIOとLangChainとを使ったアプリケーションの詳細に関するビデオが公開されています。
ご興味のある方は、本項最後に紹介している、Agent Xイベントのランディングページからオンデマンドでいつでもご覧いただくことが可能です。

## ベクトル検索

Cassandraにベクトル検索の機能を追加する提案がなされています。

https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-30%3A+Approximate+Nearest+Neighbor%28ANN%29+Vector+Search+via+Storage-Attached+Indexes

この拡張は、DataStaxがApache Cassandraに提案しリードしています。

そのための具体的な拡張として、新たなデータ型として`VECTOR`型の導入があります。
この型に対して、インデックスを定義することで、ベクトル検索が可能になります。
そして、CQLクエリの拡張として「ANN OF」というベクトル検索のためのオペレーターが導入されます。
このANNは、approximate nearest neighbor 、つまり、近似最近傍探索を意味します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/e440f13f-91f3-f130-4bcd-51039c53fa93.png)

```sql
CREATE TABLE products(
  id UUID PRIMARY KEY,
  name varchar,
  description varchar,
  item_vector VECTOR<float, 3>
);
```

```sql
CREATE CUSTOM INDEX item_ann_index ON product(item_vector) 
USING 'VectorMemtableIndex';
```

```sql
SELECT * FROM product WHERE item_vector ANN OF [3.4, 7.8, 9.1] LIMIT 3
```

DataStaxのCassandraマネージドサービス(DBaaS)であるAstra DBでは、今すぐ、このベクトル計算の機能を試してみることができます。

http://astra.datastax.com


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/40c8f150-cbdd-021f-2867-c2978ab877ce.png)

以下に、AstraDBのベクトル検索機能を利用するJupyterノートブックを公開しています。

https://github.com/YoshiyukiKono/semantic-text-search


## DATASTAXが公開している関連情報

以下、DataStaxから公開されている各種情報（ビデオ、スライド、ソースコード等）の情報を掲載します。

### Agent X

以下のランディングページから、以下の４つのセッションのレコーディングを見ることができます。

 - The Generative AI Stack
 - Building the Astra Assistant : Architecting an AI Agent
 - Vector Search: Under the Hood
 - Agents in Production: Best Practices and Issues in Deploying AI Agents 


https://www.datastax.com/gen-ai-agent-x#catalog


スライドPDF

https://drive.google.com/file/d/1TyhrZvSdwyI3MLSb4h_Hs4iB08lREnqK/view


### Real-time Data Pipelines: Astra - Ethereum Database to Model Training

https://www.youtube.com/watch?v=oGKz34xY9Yc


Github

https://github.com/kerinin/ethereum-webinar/tree/main

NFT Webinar

https://colab.research.google.com/drive/1-11dmqQ6NCuUP5h6vBLcqMRCoDAJCnYU?usp=sharing#scrollTo=ClYUcIp6EFjJ


### Beyond GPT: Hands on with vector embeddings

https://www.youtube.com/watch?v=TzfG22_bX0U


https://github.com/datastaxdevs/ai_ml_workshop_notebooks

### Real-Time E-Commerce Product Recommendations using Vector Search and Apache CassandraⓇ

https://www.youtube.com/watch?v=a8DyPwp9eYE

### ホワイトペーパー：Vector Search for Generative AI Apps

https://www.datastax.com/resources/whitepaper/vector-search-for-generative-ai-apps



# 参考情報

## Retrieval-Augumented Generation

RAGの基本。

https://arxiv.org/abs/2005.11401


https://qiita.com/t_serizawa/items/a2ced4441da714b3076f


下記記事からの引用

>高度な RAG 技術には、より厳しいレイテンシー要件が必要です。Chain-of-Thought、ReAct、およびFLARE では、LLM とベクトル データベースの両方に対する複数のクエリが必要です。各 LLM 呼び出しは、後続の LLM およびプロンプト構築呼び出しで使用できるようにメモリに保存する必要もあります。これにより、ベクトルストアに対する高速な読み取りと書き込みの必要性が高まります。

https://www.datastax.com/blog/vector-search-is-generally-available?utm_medium=social_organic&utm_source=SocialStax&utm_campaign=blog&utm_content=vector-search-ga

上記引用で触れられている「高度なRAG技術」

https://arxiv.org/abs/2201.11903

https://react-lm.github.io/

https://arxiv.org/abs/2305.06983


## ベクトルデータベース

### Pinecone

https://www.pinecone.io/

https://dev.classmethod.jp/articles/pinecone-overview/

### Weaviate

https://weaviate.io/

https://dev.classmethod.jp/articles/weaviate-overview/

### Chroma

https://www.trychroma.com/

## ベクトル検索機能

### MongoDB

https://www.mongodb.com/products/platform/atlas-vector-search

## LangChain

https://python.langchain.com

https://book.st-hakky.com/docs/langcain-intro/

https://qiita.com/nyarita/items/064db1fbcfe98c4fe7ff