AI Personal Learning
und praktische Anleitung
Sitzsack Marscode1

Aufbau einer lokalen RAG-Anwendung mit Ollama+LlamaIndex

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 : Global einbetten_model Attribut. Der Beispielcode ordnet das erstellte eingebettete Modell dem globalen einbetten_model Attribute;
  • Einstellungen.llm : Global llm Attribut. Der Beispielcode ordnet das erstellte Sprachmodell dem globalen llm Attribute;
  • VectorStoreIndex.from_documentsErstellt 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;
  • einfachEinfache 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_MODELSDie erste besteht darin, das Laden mehrerer Modelle zu unterstützen, weshalb mindestens 8 GB zusätzlicher Arbeitsspeicher erforderlich sind.

OLLAMA_NUM_PARALLELMehrere Anfragen für ein einziges Modell gleichzeitig bearbeiten.

OLLAMA_MAX_LOADED_MODELSMehrere Modelle gleichzeitig laden.

Beispiele

  1. Ein-Text-Frage und Antwort (Q&A)

Aufbau einer lokalen RAG-Anwendung mit Ollama+LlamaIndex-1

  1. Frage- und Antwortrunde mit mehreren Texten

Aufbau einer lokalen RAG-Anwendung mit Ollama+LlamaIndex-2

 

Referenzen:LlamaIndex Dokumentation

CDN1
Darf nicht ohne Genehmigung vervielfältigt werden:Chef-KI-Austauschkreis " Aufbau einer lokalen RAG-Anwendung mit Ollama+LlamaIndex

Chef-KI-Austauschkreis

Der Chief AI Sharing Circle konzentriert sich auf das KI-Lernen und bietet umfassende KI-Lerninhalte, KI-Tools und praktische Anleitungen. Unser Ziel ist es, den Nutzern dabei zu helfen, die KI-Technologie zu beherrschen und gemeinsam das unbegrenzte Potenzial der KI durch hochwertige Inhalte und den Austausch praktischer Erfahrungen zu erkunden. Egal, ob Sie ein KI-Anfänger oder ein erfahrener Experte sind, dies ist der ideale Ort für Sie, um Wissen zu erwerben, Ihre Fähigkeiten zu verbessern und Innovationen zu verwirklichen.

Kontaktieren Sie uns
de_DE_formalDeutsch (Sie)