Übersicht über Retrieval Augmented Generation

Retrieval Augmented Generation (RAG) ist eine Technik, die die Funktionen von generativen KI-Modellen verbessert, insbesondere von Large Language Models (LLMs). Ein häufiges Problem bei LLMs besteht darin, dass sie halluzinieren, das heißt, das Modell generiert falsche oder irreführende Ergebnisse. RAG löst dieses Problem durch die Kombination der Leistungsfähigkeit von LLMs mit externen Wissensquellen wie z. B. eine Vielzahl textbasierter Dokumente und andere Arten von Datenquellen, um genauere und informativere Antworten zu generieren.

Durch die Kombination zusätzlicher Wissensquellen mit dem vorhandenen Wissen von LLMs wird ein besserer Kontext bereitgestellt. Der verbesserte Kontext zusammen mit der Abfrage verbessert die Qualität der LLM-Antwort.

Die folgenden Konzepte sind der Schlüssel zum Verständnis von RAG. Diese Konzepte sind in der Reihenfolge des RAG-Prozesses aufgeführt.

  1. Datenaufnahme: Nehmen Sie Daten aus verschiedenen Datenquellen auf. Zum Beispiel lokale Dateien, Cloud Storage und Google Drive.

  2. Datentransformation: Konvertierung der Daten in der Vorbereitung auf die Indexierung. Beispielsweise werden Daten in Blöcke unterteilt.

  3. Einbettung: Numerische Darstellungen von Wörtern oder Textabschnitten. Diese Zahlen erfassen die semantische Bedeutung und den Kontext des Texts. Ähnliche oder verwandte Wörter oder Text haben in der Regel ähnliche Einbettungen. Das bedeutet, dass sie im hochdimensionalen Vektorbereich näher beieinander liegen.

  4. Datenindexierung: Strukturiert die Wissensdatenbank so, dass sie für die Suche optimiert ist, d. h. ein Korpus. Das ist beispielsweise mit der Erstellung eines äußerst detaillierten Inhaltsverzeichnisses für ein großes Referenzbuch vergleichbar.

  5. Abrufen: Wenn ein Nutzer eine Frage stellt oder einen Prompt bereitstellt, durchsucht die Abrufkomponente in RAG in ihrer Wissensdatenbank nach relevanten Informationen.

  6. Generierung: Die abgerufenen Informationen werden zum Kontext, der der ursprünglichen Nutzeranfrage als Leitfaden für das generative KI-Modell hinzugefügt wurde, um faktisch fundierte und relevante Antworten zu generieren.

Auf dieser Seite wird die Verwendung von RAG erläutert. Außerdem finden Sie hier Python-Beispiele, die die Verwendung der RAG API zeigen.

Informationen zu den Dateigrößenbeschränkungen finden Sie unter Unterstützte Dokumenttypen. Informationen zu Kontingenten für RAG finden Sie unter RAG-Kontingente. Informationen zum Anpassen von Parametern finden Sie unter Parameter.

RAG mit dem Vertex AI SDK ausführen

So verwenden Sie RAG:

  1. Installieren Sie Vertex AI SDK für Python .

  2. Führen Sie diesen Befehl in der Google Cloud Console aus, um Ihr Projekt einzurichten.

    gcloud config set {project}

  3. Führen Sie diesen Befehl aus, um Ihre Anmeldung zu autorisieren.

    gcloud auth application-default login

  4. Kopieren Sie diesen Beispielcode und fügen Sie ihn in die Google Cloud Console ein, um RAG auszuführen.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

from vertexai.preview import rag
from vertexai.preview.generative_models import GenerativeModel, Tool
import vertexai

# Create a RAG Corpus, Import Files, and Generate a response

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# display_name = "test_corpus"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]  # Supports Google Cloud Storage and Google Drive Links

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

# Create RagCorpus
rag_corpus = rag.create_corpus(display_name=display_name)

# Import Files to the RagCorpus
response = rag.import_files(
    rag_corpus.name,
    paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
)

# Direct context retrieval
response = rag.retrieval_query(
    rag_corpora=[rag_corpus.name],
    text="What is RAG and why it is helpful?",
    similarity_top_k=10,
)
print(response)

# Enhance generation
# Create a RAG retrieval tool
rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_corpora=[rag_corpus.name],  # Currently only 1 corpus is allowed.
            similarity_top_k=3,  # Optional
            vector_distance_threshold=0.4,  # Optional
        ),
    )
)
# Create a gemini-pro model instance
rag_model = GenerativeModel("gemini-1.0-pro", tools=[rag_retrieval_tool])

# Generate response
response = rag_model.generate_content("What is RAG and why it is helpful?")
print(response.text)

Unterstützte Modelle

Die folgenden Gemini-Modelle und ihre Versionen, die RAG unterstützen, sind:

Modell Version
Gemini gemini-experimental
Gemini 1.0 Pro gemini-1.0-pro-001
gemini-1.0-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-vision-001
Gemini 1.0 Ultra gemini-1.0-ultra
Gemini 1.0 Ultra Vision gemini-1.0-ultra-vision
Gemini 1.5 Pro gemini-1.5-pro-preview-0409
Gemini Open Book QA gemini-1.0-pro-preview-open-book-qa

Unterstützte Dokumenttypen

Es werden reine Textdokumente unterstützt, einschließlich der folgenden Dateitypen mit ihren Größenbeschränkungen für Dateien:

File type Maximale Dateigröße
PDF-Datei 50 MB
Google-Dokumente 10 MB beim Export aus Google Workspace
Google-Präsentationen 10 MB beim Export aus Google Workspace
Google Drawings 10 MB beim Export aus Google Workspace
JSON-Datei 1 MB
Textdatei 10 MB
Markdown-Datei 10 MB

Die Verwendung von RAG mit anderen Dokumenttypen ist möglich, kann jedoch Antworten von geringerer Qualität generieren.

Unterstützte Datenquellen

Es werden drei Datenquellen unterstützt:

  • Ein Upload einer einzelnen Datei mit upload_file (bis zu 25 MB), das ein synchroner Aufruf ist.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"
# display_name = "file_display_name"
# description = "file description"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

rag_file = rag.upload_file(
    corpus_name=corpus_name,
    path=path,
    display_name=display_name,
    description=description,
)
print(rag_file)

  • Importieren Sie Datei(en) aus Cloud Storage.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]  # Supports Google Cloud Storage and Google Drive Links

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

response = rag.import_files(
    corpus_name=corpus_name,
    paths=paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
)
print(f"Imported {response.imported_rag_files_count} files.")

  • Importieren Sie ein Verzeichnis aus Google Drive.

    Dem Dienstkonto müssen die erforderlichen Berechtigungen zum Importieren von Dateien gewährt werden. Andernfalls werden keine Dateien importiert und keine Fehlermeldung angezeigt. Weitere Informationen zu Dateigrößenbeschränkungen finden Sie unter Unterstützte Dokumenttypen.

    So authentifizieren und erteilen Sie Berechtigungen:

    1. Rufen Sie die Seite "IAM" Ihres Google Cloud-Projekts auf.
    2. Wählen Sie Von Google bereitgestellte Rollenzuweisung einschließen aus.
    3. Suchen Sie nach dem Dienstkonto Vertex AI RAG Data Service Agent.
    4. Klicken Sie im Drive-Ordner auf Freigeben und geben Sie es für das Dienstkonto frei.
    5. Gewähren Sie dem Dienstkonto in Ihrem Google Drive-Ordner oder Ihrer Datei die Berechtigung Viewer. Die Google Drive-Ressourcen-ID finden Sie in der Web-URL.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]  # Supports Google Cloud Storage and Google Drive Links

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

response = rag.import_files(
    corpus_name=corpus_name,
    paths=paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
)
print(f"Imported {response.imported_rag_files_count} files.")

Unterstützte Datentransformationen

Nachdem ein Dokument aufgenommen wurde, führt RAG eine Reihe von Transformationen für eine optimale Qualität aus. Außerdem gibt es Parameter, die Entwickler für ihre Anwendungsfälle steuern können.

Zu diesen Parametern gehören:

Parameter Beschreibung
chunk_size Wenn Dokumente in einen Index aufgenommen werden, werden sie in Blöcke unterteilt. Der Parameter chunk_size (in Tokens) gibt die Größe des Blocks an. Die standardmäßige Blockgröße beträgt 1.024 Tokens.
chunk_overlap Standardmäßig werden Dokumente in Blöcke unterteilt, mit einem gewissen Grad an Überschneidungen, um die Relevanz und die Abrufqualität zu verbessern. Die standardmäßige Blocküberschneidung beträgt 200 Tokens.

Abrufparameter

Die folgende Tabelle enthält die Abrufparameter:

Parameter Beschreibung
similarity_top_k Steuert die maximale Anzahl von Kontexten, die abgerufen werden.
vector_distance_threshold Es werden nur Kontexte mit einer kleineren Entfernung als der Grenzwert berücksichtigt.

Parameter

So wählen Sie Parameter aus:

  • Wählen Sie eine Blockgröße aus. Eine kleinere Blockgröße bedeutet, dass die Einbettungen genauer sind. Ein größerer Block bedeutet, dass die Einbettungen allgemeiner sein können, aber bestimmte Details nicht erfasst werden. Wenn Sie beispielsweise 200 Wörter statt 1.000 Wörter in ein Einbettungsarray derselben Dimension umwandeln, gehen möglicherweise Details verloren. Dies ist auch ein gutes Beispiel für die Berücksichtigung der Längenbeschränkung für Modellkontexte. Ein großer Block passt möglicherweise nicht in ein Modell mit kleinen Fenstern.
  • Erzwingen Sie einen strengen Schwellenwert. Sie sollten similarity_top_k verringern, um festzulegen, wie viele Kontexte während der Generierung referenziert werden. Es kann mehr als ein Kontext zurückgegeben werden und ein Teil des Kontexts ist möglicherweise weniger relevant.

Korpusverwaltung

Ein Korpus ist wie ein Index, in dem verarbeitete Dokumente und relevante Metadaten für die Suche und den Abruf gespeichert werden. Wenn ein Korpus erstellt wird, kann dieser Vorgang aufgrund der Ressourcenzuweisung 30 Sekunden bis 1 Minute dauern.

Die folgenden Korpusvorgänge werden unterstützt:

  • Erstellen Sie einen Korpus.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# display_name = "test_corpus"
# description = "Corpus Description"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

corpus = rag.create_corpus(display_name=display_name, description=description)
print(corpus)

  • Löschen Sie einen Korpus.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

rag.delete_corpus(name=corpus_name)
print(f"Corpus {corpus_name} deleted.")

  • Rufen Sie Details eines Korpus ab.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

corpus = rag.get_corpus(name=corpus_name)
print(corpus)

  • Listen Sie alle Korpora unter einem bestimmten Projekt auf.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

corpora = rag.list_corpora()
print(corpora)

Gleichzeitige Vorgänge für Korpora werden nicht unterstützt. Weitere Informationen findest du in der API-Referenz.

Dateiverwaltung

Die folgenden Dateivorgänge werden unterstützt:

  • Laden Sie eine Datei aus dem lokalen Speicher in einen Korpus hoch.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"
# display_name = "file_display_name"
# description = "file description"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

rag_file = rag.upload_file(
    corpus_name=corpus_name,
    path=path,
    display_name=display_name,
    description=description,
)
print(rag_file)

  • Nehmen Sie Dateien aus einem anderen Speicher in einen Korpus auf.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"

# Supports Google Cloud Storage and Google Drive Links
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

response = await rag.import_files_async(
    corpus_name=corpus_name,
    paths=paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
)

result = await response.result()
print(f"Imported {result.imported_rag_files_count} files.")

  • Rufen Sie Details einer Datei ab.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# file_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}/ragFiles/{rag_file_id}"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

rag_file = rag.get_file(name=file_name)
print(rag_file)

  • Listen Sie Dateien in einem Korpus auf.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# corpus_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

files = rag.list_files(corpus_name=corpus_name)
for file in files:
    print(file)

  • Löschen Sie eine Datei aus einem Korpus.

Python

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# file_name = "projects/{project_id}/locations/us-central1/ragCorpora/{rag_corpus_id}/ragFiles/{rag_file_id}"

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

rag.delete_file(name=file_name)
print(f"File {file_name} deleted.")

Weitere Informationen finden Sie in der RAG API-Referenz.

Nächste Schritte