Re:ゼロから始めるML生活

どちらかといえばエミリア派です

いまさらLlamaIndexの使い方について勉強する

最近、というかこのGW中はRAGしかやってません。

www.nogawanogawa.com

www.nogawanogawa.com

www.nogawanogawa.com

www.nogawanogawa.com

そんなRAGをやっているんですが、実はLlamaIndexについてはちゃんと勉強してなかったことに気がついたので、今更ながら復習がてら勉強しようと思います。

LlamaIndex

LlamaIndexを調べると下記のような説明が書かれています。

LlamaIndex is the leading data framework for building LLM applications

www.llamaindex.ai

ドキュメントはこちらです。

docs.llamaindex.ai

LangChainとLlamaIndex

RAGをはじめとするLLMアプリケーションを開発する際に、多くの人はLangChainなどのフレームワークを使用すると思います。 中でもRAGの実装例をちょっと探すと、大体LangChainかLlamaIndexが使われていると思います。

LangChainは、LLMを使って開発するための汎用フレームワークです。 LlamaIndexはどちらかというとRAGなど特定のシステムを構築するためのフレームワークです。

その他Haystackといったフレームワークもあったりしますので、興味がある方は調べてみると良いかもしれません。

LlamaIndexはRAGなどを構築することを想定しているだけあって関連機能が充実しています。 新しいRAGの技法などの実装例や機能も提供されていたりするので、個人的に便利に感じています。

RAGを作る

LlamaIndexのドキュメントによればRAGには5つのステージがあるとのことです。

  • Loading
  • Indexing
  • Storing
  • Querying
  • Evaluation

llama indexのドキュメントより引用

作る

最初のアプリはこちらを参考に作ってみます。

docs.llamaindex.ai

これをGoogle Colabでぱっと実行してみるとこんな感じです。

ただし、メインのコードはこれだけです。

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)

# query
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

SimpleDirectoryReaderでデータをロードし、VectorStoreIndexでインデクシングをし、query_engine.queryでクエリを送信している感じです。

作るだけなら簡単ですね。 使ったノートブックはこちらです。

参考文献

この記事を書くにあたって下記の文献を参考にさせていただきました。

感想

以上、簡単ですがLlamaIndexを使ってみました。 実際に作ってみましたが、RAGをつくるだけならめちゃくちゃ簡単ですね。