簡単
この文書では、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_models
1つ目は、複数のモデルのローディングをサポートするため、少なくとも8Gの追加RAMが必要です。
ollama_num_parallel
1つのモデルに対する複数のリクエストを同時に処理します。
ollama_max_loaded_models
複数のモデルを同時にロードします。
例
- 単文質疑応答(Q&A)
- 複数テキストによる質疑応答