簡単
この文書では、LlamaIndexフレームワークを使用して、ローカルRAG(検索-拡張世代)アプリケーションを構築する方法を詳しく説明します。LlamaIndexと統合することで、ローカルRAGアプリケーションを構築することができます。 ラグ 検索と生成の機能を組み合わせたシステムで、情報検索の効率と生成されたコンテンツの関連性を向上させる。ローカルの知識ベースのパスをカスタマイズし、LlamaIndexを介してインデックスを作成し、文脈対話に使用することができます。
注:この文書には、核となるコードの断片と詳細な説明が含まれています。完全なコードは ノート .
1.モデルのダウンロード
この例では llama3.1
モデルを使用する場合は、ご自身のコンピュータの構成に応じて適切なモデルを使用してください。
ollama pull 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.インデックスの構築
Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)
index = VectorStoreIndex.from_documents(
documents,
)
Settings.embed_model
グローバルembed_model
属性で指定します。サンプルコードでは、作成された埋め込みモデルをグローバルなembed_model
属性;Settings.llm
グローバルllm
属性で指定します。このコード例では、作成された言語モデルをグローバルなllm
属性;VectorStoreIndex.from_documents
過去に読み込まれた文書を使ってインデックスを構築し、素早く検索できるようにベクトルに変換します。
とおす Settings
グローバル属性は、対応するモデルが後のインデックス構築やクエリ処理でデフォルトで使用されるように設定される。
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=(
"You are a chatbot, able to have normal interactions."
),
)
response = chat_engine.chat("Datawhale是什么?")
print(response)
chat_mode
利用シーンに応じて適切なモードを選択でき、対応モードは以下の通り:
best
(デフォルト): クエリーエンジンツールでプロキシ(reactまたはopenai)を使用します;context
レトリーバーを使って文脈を把握する;condense_question
質問を要約してください;condense_plus_context
質問を要約し、文脈をつかむためにリトリーバーを使う;simple
LLMを直接使うシンプルなチャットエンジン;react
リアクトエージェントをクエリエンジンツールと共に使用する;openai
openaiエージェントをクエリーエンジンツールと共に使用する。
7.ベクトル・インデックスの保存とロード
storage_context.persist
ベクトルインデックスを格納する。load_index_from_storage
負荷ベクトルのインデックス。
# 存储向量索引
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)
- 複数テキストによる質疑応答