AIパーソナル・ラーニング
と実践的なガイダンス
ビーンバッグ・マースコード1

Ollama+LlamaIndexによるローカルRAGアプリケーションの構築

簡単

この文書では、LlamaIndexフレームワークを使用して、ローカルRAG(検索-拡張世代)アプリケーションを構築する方法を詳しく説明します。LlamaIndexと統合することで、ローカルRAGアプリケーションを構築することができます。 ラグ 検索と生成の機能を組み合わせたシステムで、情報検索の効率と生成されたコンテンツの関連性を向上させる。ローカルの知識ベースのパスをカスタマイズし、LlamaIndexを介してインデックスを作成し、文脈対話に使用することができます。

注:この文書には、核となるコードの断片と詳細な説明が含まれています。完全なコードは ノート .

 

1.モデルのダウンロード

この例では ラマ3.1 モデルを使用する場合は、ご自身のコンピュータの構成に応じて適切なモデルを使用してください。

オラマ プルllama3.1
ollama pull nomic-embed-text

 

2.依存関係のインストール

pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install -U llama-index-readers-file

 

3.データの読み込み

カレントディレクトリのデータフォルダにあるすべての文書をメモリにロードする。

documents = SimpleDirectoryReader("data").load_data()

 

4.インデックスの構築

設定.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
設定.llm = Ollama(model="llama3.1", request_timeout=360.0)
index = VectorStoreIndex.from_documents(
documents, )
)
  • 設定.embed_model グローバル 埋め込みモデル 属性で指定します。サンプルコードでは、作成された埋め込みモデルをグローバルな 埋め込みモデル 属性;
  • 設定.llm グローバル llm 属性で指定します。このコード例では、作成された言語モデルをグローバルな llm 属性;
  • VectorStoreIndex.from_documents過去に読み込まれた文書を使ってインデックスを構築し、素早く検索できるようにベクトルに変換します。

とおす 設定 グローバル属性は、対応するモデルが後のインデックス構築やクエリ処理でデフォルトで使用されるように設定される。

 

5.クエリーデータ

query_engine = index.as_query_engine()
response = query_engine.query("Datawhale とは何ですか?")
print(response)
  • index.as_query_engine()先に構築したインデックスに基づいてクエリー・エンジンを作成する。このクエリー・エンジンはクエリーを受け取り、取得したレスポンスを返すことができる。

 

6.対話のためのコンテキストの取得

検索されたコンテキストは、利用可能なLLMコンテキストの多くを占める可能性があるため、チャット履歴をより小さな トークン 制限!

# ダイアログのコンテキストを取得する
from llama_index.core.memory import ChatMemoryBuffer
memory = ChatMemoryBuffer.from_defaults(token_limit=1500)
chat_engine = index.as_chat_engine(
chat_mode="context"、
memory=memory、
system_prompt=(
"あなたはチャットボットです。通常のやりとりができます。"
),
)
response = chat_engine.chat("Datawhaleとは何ですか?")
print(response)

チャットモード 利用シーンに応じて適切なモードを選択でき、対応モードは以下の通り:

  • ベスト(デフォルト): クエリーエンジンツールでプロキシ(reactまたはopenai)を使用します;
  • コンテキストレトリーバーを使って文脈を把握する;
  • コンデンスクエスチョン質問を要約してください;
  • コンデンスプラスコンテキスト質問を要約し、文脈をつかむためにリトリーバーを使う;
  • シンプルLLMを直接使うシンプルなチャットエンジン;
  • 反応リアクトエージェントをクエリエンジンツールと共に使用する;
  • オベナイopenaiエージェントをクエリーエンジンツールと共に使用する。

 

7.ベクトル・インデックスの保存とロード

  • ストレージ_コンテキスト.パーシスト ベクトルインデックスを格納する。
  • ストレージからのロードインデックス 負荷ベクトルのインデックス。
# ストアベクトルインデックス
persist_dir = 'data/'
index.storage_context.persist(persist_dir=persist_dir)
# ベクトルインデックスをロードする
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir=persist_dir)
index= load_index_from_storage(storage_context)

 

8. ストリームライト・アプリケーション

この例は、ストリームライト・アプリケーションも実装している。 app.py


必要な依存関係を以下に示す:

llama_index==0.10.62
streamlit==1.36.0

ある app.py 連続したダイアログでモデルをリロードしないようにするには、環境変数 ollama_num_parallel 歌で応える ollama_max_loaded_models1つ目は、複数のモデルのローディングをサポートするため、少なくとも8Gの追加RAMが必要です。

ollama_num_parallel1つのモデルに対する複数のリクエストを同時に処理します。

ollama_max_loaded_models複数のモデルを同時にロードします。

  1. 単文質疑応答(Q&A)

Ollama+LlamaIndex-1によるローカルRAGアプリケーションの構築

  1. 複数テキストによる質疑応答

Ollama+LlamaIndex-2によるローカルRAGアプリケーションの構築

 

参考文献LlamaIndex ドキュメンテーション

シーディーエヌワン
無断転載を禁じます:チーフAIシェアリングサークル " Ollama+LlamaIndexによるローカルRAGアプリケーションの構築

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語