AI Personal Learning
und praktische Anleitung
CyberKnife-Zeichenspiegel

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 den kontextuellen Dialog genutzt 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 llama3.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-embeddings-ollama
pip install -U llama-index-readers-file

 

3. das Laden von Daten

Lädt alle Dokumente im Datenordner des aktuellen Verzeichnisses in den Speicher.

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

 

4. die Konstruktion von Indizes

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 : Global embed_model Attribut. Der Beispielcode ordnet das erstellte eingebettete Modell dem globalen embed_model Attribute;
  • Settings.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.) Settings 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()
response = query_engine.query("Datawhale是什么?")
print(response)
  • 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!

# 检索上下文进行对话
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 Sie können den geeigneten Modus je nach Nutzungsszenario auswählen. Die folgenden Modi werden unterstützt:

  • best(Standard): Verwenden Sie einen Proxy (react oder openai) mit Query Engine Tools;
  • context: Verwenden Sie den Retriever, um den Kontext zu ermitteln;
  • condense_question: Fassen Sie die Frage zusammen;
  • condense_plus_context: Fassen Sie die Frage zusammen und verwenden Sie einen Retriever, um den Kontext zu ermitteln;
  • simpleEinfache Chat-Engine, die LLM direkt verwendet;
  • react: 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.
# 存储向量索引
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. Streamlit-Anwendungen

Dieses Beispiel implementiert auch eine Streamlit-Anwendung, die in der app.py


Die erforderlichen Abhängigkeiten sind unten aufgeführt:

llama_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

Darf nicht ohne Genehmigung vervielfältigt werden:Leiter des AI-Austauschkreises " Aufbau einer lokalen RAG-Anwendung mit Ollama+LlamaIndex
de_DEDeutsch