ollamaでknowledge graphを作成

はじめに

こちらの投稿では、RAGシステム構築の手始めとして、ナレッジグラフを作成した。数種のLLMを試して、gpt-4oとgpt-4o-miniだけが正常に動作した。最近のこの投稿では、ollamaをインストールし起動したことをまとめた。

今回ollamaを使ってナレッジグラフを作成したので、その内容をここにまとめる。少しハマったところもあるので、参考になればと思う。

情報源

  1. Knowledge Graphを使った RAG をLangChainで実装 前編 - こちらの投稿でも参考にした記事のコードをベースにollamaに対応すべく変更を加えた。
  2. Llama 3.2とNeo4jでローカルGraphRAG環境を構築 - ベクトルインデックス作成の部分を参考にした。
  3. 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のデータを使ってナレッジグラフを作成して、ベクトル検索などの他の手法での実行結果と比較してみたい。