はじめに
こちらの投稿では、RAGシステム構築の手始めとして、ナレッジグラフを作成した。数種のLLMを試して、gpt-4oとgpt-4o-miniだけが正常に動作した。最近のこの投稿では、ollamaをインストールし起動したことをまとめた。
今回ollamaを使ってナレッジグラフを作成したので、その内容をここにまとめる。少しハマったところもあるので、参考になればと思う。
情報源
- Knowledge Graphを使った RAG をLangChainで実装 前編 - こちらの投稿でも参考にした記事のコードをベースにollamaに対応すべく変更を加えた。
- Llama 3.2とNeo4jでローカルGraphRAG環境を構築 - ベクトルインデックス作成の部分を参考にした。
- ValueError: Index with name vector already exists - 自分が出くわしたエラーに対処するために参考にした情報。
変更したコード
情報源1.の記事のコードから変更した部分のみを掲載する。ollamaの構築についてこの投稿を参照のこと。
ollama(gemma-2-2b-jpn)をLLMとして設定
# ollama(gemma-2-2b-jpn)をLLMとして設定
from langchain_ollama.llms import OllamaLLM
llm = OllamaLLM(base_url = "http://192.168.11.4:11434", model="schroneko/gemma-2-2b-jpn-it", temperature=0)
Neo4jVector()でvector indexを作成
from langchain_ollama import OllamaEmbeddings
# ollama embeddings
embeddings = OllamaEmbeddings(
model="mxbai-embed-large",
base_url = "http://192.168.11.4:11434",
)
from langchain.vectorstores import Neo4jVector
vector_index = Neo4jVector.from_existing_graph(
embeddings,
search_type="hybrid",
node_label="Document",
text_node_properties=["text"],
embedding_node_property="embedding"
)
embeddingモデルで使用する「maxbai-embed-large」は、ollamaコンテナに入って、以下のようにpullしておいた。
# ollama pull mxbai-embed-large
Neo4jVector()でエラー
上記コードの「vector_index = Neo4jVector.from_existing_graph()」で次のエラーが発生した。
ValueError: Index with name vector already exists.The provided embedding function and vector index dimensions do not match.
Embedding function dimension: 1024
Vector index dimension: 1536
こちらの記事で実行した時は、gpt-4o-miniを使った。OpenAIのembeddingsの次元が1536で、今回のembeddingの次元が1024であるので、上記のエラーとなった。
エラーへの対処
情報源3.を参考にして、次の通りエラーに対応した。
ブラウザから Neo4jに接続し、ブラウザから以下のコマンドを実行した。(「neo4j$ 」はプロンプト)
neo4j$ drop index vector
まとめ
次はwikipediaのデータを使ってナレッジグラフを作成して、ベクトル検索などの他の手法での実行結果と比較してみたい。