kurz
In diesem Dokument wird beschrieben, wie das LlamaIndex-Framework verwendet wird, um eine lokale RAG-Anwendung (Retrieval-Augmented Generation) zu erstellen. Durch die Integration mit LlamaIndex ist es möglich, eine lokale RAG System, das Abfrage- und Generierungsfunktionen kombiniert, um die Effizienz der Informationsabfrage und die Relevanz der generierten Inhalte zu verbessern. Lokale Wissensbasispfade können angepasst, über LlamaIndex indiziert und dann für kontextbezogene Dialoge verwendet werden.
Hinweis: Dieses Dokument enthält wichtige Codeschnipsel und ausführliche Erläuterungen. Der vollständige Code ist zu finden unter Notizbuch .
1. modellhafte Downloads
Dieses Beispiel verwendet die Lama3.1
Modell, können Sie das entsprechende Modell entsprechend Ihrer eigenen Computerkonfiguration verwenden.
ollama pull llama3.1
ollama pull nomic-embed-text
2. die Installation von Abhängigkeiten
pip install llama-index-llms-ollama
pip install llama-index-einbettungen-ollama
pip install -U llama-index-leser-datei
3. das Laden von Daten
Lädt alle Dokumente im Datenordner des aktuellen Verzeichnisses in den Speicher.
Dokumente = SimpleDirectoryReader("Daten").load_data()
4. die Konstruktion von Indizes
Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
Einstellungen.llm = Ollama(model="llama3.1", request_timeout=360.0)
index = VectorStoreIndex.from_documents(
Dokumente, )
)
Einstellungen.embed_model
: Globaleinbetten_model
Attribut. Der Beispielcode ordnet das erstellte eingebettete Modell dem globaleneinbetten_model
Attribute;Einstellungen.llm
: Globalllm
Attribut. Der Beispielcode ordnet das erstellte Sprachmodell dem globalenllm
Attribute;VectorStoreIndex.from_documents
Erstellt einen Index aus zuvor geladenen Dokumenten und konvertiert sie in Vektoren, um sie schnell wiederzufinden.
passieren (eine Rechnung oder Inspektion etc.) Einstellungen
Die globalen Attribute werden so gesetzt, dass das entsprechende Modell bei der späteren Indexerstellung und Abfrage standardmäßig verwendet wird.
5. daten abfragen
query_engine = index.as_query_engine()
Antwort = query_engine.query("Was ist Datawhale?")
print(Antwort)
index.as_query_engine()
Erstellen Sie eine Abfrage-Engine auf der Grundlage des zuvor erstellten Index. Diese Abfrage-Engine kann Abfragen entgegennehmen und die abgerufenen Antworten zurückgeben.
6 Abrufen von Kontext für den Dialog
Da die abgerufenen Kontexte eine große Anzahl verfügbarer LLM-Kontexte in Anspruch nehmen können, ist es notwendig, den Chatverlauf mit einer kleineren Token Beschränkungen!
# Abrufen des Kontextes für den Dialog
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=(
"Du bist ein Chatbot, der normale Interaktionen durchführen kann."
),
)
Antwort = chat_engine.chat("Was ist Datawhale?")
print(Antwort)
chat_mode
Sie können den geeigneten Modus je nach Nutzungsszenario auswählen. Die folgenden Modi werden unterstützt:
am besten
(Standard): Verwenden Sie einen Proxy (react oder openai) mit Query Engine Tools;Kontext
: Verwenden Sie den Retriever, um den Kontext zu ermitteln;verdichten_fragen
: Fassen Sie die Frage zusammen;kondensieren_plus_kontext
: Fassen Sie die Frage zusammen und verwenden Sie einen Retriever, um den Kontext zu ermitteln;einfach
Einfache Chat-Engine, die LLM direkt verwendet;reagieren
: Verwenden Sie den React Agent mit dem Query Engine Tool;openai
: Verwenden Sie den openai agent mit dem Query Engine Tool.
7. das Speichern und Laden von Vektorindizes
storage_context.persist
Vektorindizes speichern.load_index_from_storage
Lastvektor-Index.
# Vektorindex speichern
persist_dir = 'Daten/'
index.storage_context.persist(persist_dir=persist_dir)
# Vektor-Index laden
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. Streamlit-Anwendungen
Dieses Beispiel implementiert auch eine Streamlit-Anwendung, die in der app.py
Die erforderlichen Abhängigkeiten sind unten aufgeführt:
lama_index==0.10.62
streamlit==1.36.0
Hinweis
existieren app.py
Um das Modell in aufeinanderfolgenden Dialogen nicht neu zu laden, können Sie die Umgebungsvariable OLLAMA_NUM_PARALLEL
im Gesang antworten OLLAMA_MAX_LOADED_MODELS
Die erste besteht darin, das Laden mehrerer Modelle zu unterstützen, weshalb mindestens 8 GB zusätzlicher Arbeitsspeicher erforderlich sind.
OLLAMA_NUM_PARALLEL
Mehrere Anfragen für ein einziges Modell gleichzeitig bearbeiten.
OLLAMA_MAX_LOADED_MODELS
Mehrere Modelle gleichzeitig laden.
Beispiele
- Ein-Text-Frage und Antwort (Q&A)
- Frage- und Antwortrunde mit mehreren Texten
Referenzen:LlamaIndex Dokumentation