Suchergebnisse mit der Suchabstimmung verbessern

Mit einem optimierten Suchmodell können Sie bessere Ergebnisse erzielen als mit dem Basissuchmodell.

Die Abstimmung der Suche ist vor allem nützlich bei branchen- oder unternehmensspezifischen Abfragen, die von allgemeinen LLMs weniger gut abgedeckt werden. Sie kann verwendet werden, um das Suchmodell weiter zu trainieren.

Beschränkungen

Die Suchoptimierung kann nur auf unstrukturierte Datenspeicher angewendet werden.

Trainingsdaten

Um ein Suchmodell zu optimieren, müssen Sie zuerst Trainingsdaten zusammenstellen.

Die Trainingsdaten sollten Suchanfragen enthalten, die Ihre Endnutzer voraussichtlich stellen werden, sowie Text-Snippets mit 250 bis 500 Wörtern, die relevante Informationen zur Beantwortung der Suchanfragen enthalten. Eine Suchanfrage kann mit mehreren Snippets verknüpft werden, solange jedes Snippet Informationen enthält, die die Suchanfrage beantworten.

Die Trainingsdaten sollten auch Text-Snippets enthalten, die nicht mit Suchanfragen verknüpft sind, aber in Stil und Länge den Antworten ähneln. Diese Snippets ohne zugehörige Abfragen liefern zufällige Negativbeispiele, um das Modell zu optimieren. Google empfiehlt,mindestens 10.000 dieser Snippets anzugeben.

Im Folgenden finden Sie einige Begriffe zur Beschreibung der Trainingsdaten, die Sie bereitstellen müssen:

  • Trainingsanfragen: Anfragen, die Sie von Ihren Endnutzern erwarten. Konzentrieren Sie sich auf Suchanfragen mit spezifischer Fachterminologie.

    Geben Sie mindestens 100 ein.

  • Auszugsweise Segmente:Snippets (in der Regel mehrere Absätze) müssen wörtlich aus den Dokumenten im Datenspeicher übernommen werden. Alle Dokumente im Datenspeicher werden als „Corpus“ bezeichnet.

    Sie müssen zwei Arten von Segmenten angeben, die aus Text extrahiert werden:

    • Segmente mit relevanten Informationen, die zur Beantwortung der Trainingsabfragen erforderlich sind. Das sind Segmente, die mit Abfragen übereinstimmen.

    • Segmente, die mit keiner Trainingsabfrage verknüpft sind. Diese Segmente werden bei der Modelloptimierung als zufällige Negativbeispiele verwendet.

    Ein oder zwei Sätze sind nicht lang genug, um ein Segment für die Textextraktion zu sein. Das Segment muss für das Training genügend Kontext enthalten. Bei einer Suchanfrage wie „Wer hat Google gegründet?“ ist beispielsweise ein kurzer Auszug wie „Larry Page“ nicht ausreichend. Beispiele für ausreichend lange Segmente finden Sie in der folgenden Tabelle.

    Geben Sie mindestens ein extrahiertes Segment pro Suchanfrage und mindestens 10.000 zusätzliche extrahierte Segmente an.

  • Relevanzbewertungen:Relevanzbewertungen sind nicht negative Ganzzahlen, die angeben, wie relevant das extrahierte Segment für die Suchanfrage ist. Sie geben für jedes Paar aus Suchanfrage und extrahiertem Segment einen Wert für die Bewertung an. Ein Wert von 0 bedeutet, dass das Segment für die Suchanfrage überhaupt nicht relevant ist. Ein Wert über null gibt an, dass eine gewisse Relevanz besteht. Für eine einfache Bewertung empfiehlt Google, für alle relevanten Segmente „1“ und für nicht relevante Segmente „0“ zu verwenden. Wenn Sie die Relevanz stattdessen bewerten möchten, können Sie Relevanzbewertungen von 0 bis 10 zuweisen (z. B. 10 für die relevantesten Segmente und 0 für Segmente, die überhaupt nicht relevant sind).

    Geben Sie mindestens 100 relevante Bewertungen und optional zusätzliche nicht relevante Bewertungen an.

Beispiele für Abfrage- und Extraktionssegmentpaare

Die folgende Tabelle enthält einige Beispiele für Abfrage- und extrahierte Segmentpaare. Diese allgemeinen Beispiele stammen aus Wikipedia. Für eine sinnvolle Optimierung sollten Sie jedoch Dokumente aus proprietären Datensätzen bereitstellen, die unternehmensspezifische Informationen enthalten und im Web nicht so leicht zu finden sind.

Das letzte Paar in dieser Tabelle ist ein Beispiel für ein Paar mit einer Punktzahl von null, bei dem die Antwort für die Suchanfrage nicht relevant ist.

Anfrage zu Schulungen Extrahierendes Segment Punktzahl
Wer hat Google gegründet? Google wurde am 4. September 1998 von den amerikanischen Informatikern Larry Page und Sergey Brin gegründet, die zu dieser Zeit Doktoranden an der Stanford University in Kalifornien waren. Zusammen besitzen sie etwa 14% der börsennotierten Aktien und kontrollieren über Super-Stimmgelder 56% der Stimmrechte der Aktionäre. Das Unternehmen wurde 2004 über ein Börsengang (Initial Public Offering, IPO) an die Börse gebracht. 2015 wurde Google in eine hundertprozentige Tochtergesellschaft von Alphabet Inc. umgewandelt. Google ist die größte Tochtergesellschaft von Alphabet und eine Holdinggesellschaft für die Internet-Assets und Beteiligungen von Alphabet. Sundar Pichai wurde am 24. Oktober 2015 zum CEO von Google ernannt und löste Larry Page ab, der CEO von Alphabet wurde. Am 3. Dezember 2019 wurde Pichai auch zum CEO von Alphabet ernannt. [...] Auf der Liste der wertvollsten Marken belegt Google den zweiten Platz bei Forbes und den vierten Platz bei Interbrand. 1
Wohin wird das Blut gepumpt, nachdem es die rechte Herzkammer verlassen hat? Das mit Sauerstoff angereicherte Blut verlässt die Lungen über die Lungenvenen, die es zurück zum linken Teil des Herzens leiten und so den Lungenkreislauf vervollständigen. Dieses Blut gelangt dann in den linken Vorhof, der es durch die Mitralklappe in die linke Herzkammer pumpt. Aus der linken Herzkammer fließt das Blut durch die Aortenklappe in die Aorta. Das Blut wird dann über den systemischen Kreislauf im Körper verteilt, bevor es wieder in den Lungenkreislauf zurückfließt. Arterien Hauptartikel: Lungenarterie Aus der rechten Herzkammer wird Blut durch das halbmondförmige Lungenventil in die linke und rechte Hauptlungenarterie (eine für jede Lunge) gepumpt, die sich in kleinere Lungenarterien verzweigen, die sich über die Lungen verteilen. [...] Ein Herzshunt ist eine unnatürliche Verbindung zwischen Teilen des Herzens, die zu einem Blutfluss führt, der die Lungen umgeht. 1
Wo befindet sich die Bowling Hall of Fame? Die World Bowling Writers ( WBW ) International Bowling Hall of Fame wurde 1993 gegründet und befindet sich im International Bowling Museum and Hall of Fame auf dem International Bowling Campus in Arlington, Texas. Geschichte Das International Bowling Museum and Hall of Fame befand sich bis zum 8. November 2008 in St. Louis, Missouri, USA, in Gebäude 11 am Stadium Plaza und teilte sich das Gebäude mit dem Hall of Fame Museum der St. Louis Cardinals. Es wurde nach Arlington verlegt und Anfang 2010 wiedereröffnet. 2012 wurde die WBW mit der International Bowling Media Association zusammengeführt. Nach der Fusion wurden die Mitglieder der WBW Hall of Fame in die IBMA Luby Hall of Fame aufgenommen.][...] Die Person, die die meisten Stimmen erhält, wird gewählt. 1
Warum ist der Himmel blau? Ein „Hallo, Welt!“-Programm ist in der Regel ein einfaches Computerprogramm, das eine Nachricht wie „Hallo, Welt!“ auf dem Bildschirm (häufig der Konsole) ausgibt und dabei jegliche Nutzereingaben ignoriert. Ein kleines Code-Snippet in den meisten allgemeinen Programmiersprachen, das die grundlegende Syntax einer Sprache veranschaulicht. Ein „Hallo Welt!“-Programm ist oft das erste, das ein Schüler oder Student einer neuen Programmiersprache schreibt. Ein solches Programm kann aber auch als Prüfung verwendet werden, um sicherzustellen, dass die Computersoftware, die zum Kompilieren oder Ausführen von Quellcode vorgesehen ist, richtig installiert ist und der Nutzer weiß, wie sie verwendet wird. [...] Der C-Programmiersprache ging Kernighans eigenes Buch „A Tutorial Introduction to the Language B“ (1972) voraus, in dem die erste bekannte Version des Programms in einem Beispiel zu externen Variablen zu finden ist. 0

Tests

Nach dem Training wird die optimierte Suche getestet, um festzustellen, ob sich die Ergebnisse durch die Optimierung verbessert haben. Sie können die Abfragen, die Sie testen möchten, explizit angeben. Wenn Sie keine Testabfragen angeben, verwendet Vertex AI Search 20% der Trainingsabfragen als Testabfragen.

Trainingsdateien

Die Trainingsdaten müssen in drei (optional vier) bestimmten Dateien hochgeladen werden:

  • Eine Corpusdatei mit den extrahierten Segmenten

  • Eine Abfragedatei, die nur die Abfragen enthält

  • Eine Datei mit Trainingslabels, die Abfragen mit Segmenten verknüpft und die Relevanzbewertungen enthält

  • Optional: Eine Testlabelsdatei, die den Labelsdateien für das Training ähnelt, aber zum Bewerten des optimierten Modells statt zum Trainieren verwendet wird

Die drei Trainingsdateien (Corpusdatei, Abfragedatei und Trainingslabelsdatei) sowie die optionale Testlabelsdatei müssen sich in Cloud Storage befinden. Die Pfade der Dateien werden durch Felder im trainCustomMethod-Aufruf definiert.

Korpusdatei

Die Corpusdatei enthält extrahierte Segmente: Segmente mit Informationen zur Beantwortung der Abfragen in der Abfragedatei und viele zusätzliche Segmente, die beim Optimieren des Modells als zufällige Negativbeispiele verwendet werden. Sie sollten mindestens 100 Segmente mit Abfrageantworten haben. Abfragen können von mehreren Segmenten beantwortet werden. Außerdem sollten Sie mindestens 10.000 zufällige Segmente haben.

Wenn die Dokumente in Ihrem Datenspeicher weniger als 500 Wörter enthalten, können Sie ganze Dokumente als Segmente verwenden. Andernfalls können Sie 250 bis 500 Wörter aus den Dokumenten in Ihrem Datenspeicher zufällig generieren und der Corpusdatei hinzufügen.

Die Corpusdatei ist eine JSONL-Datei (JSON Lines), in der jede Zeile die Felder _id und text mit Stringwerten enthält. Beispiel:

  {"_id": "doc1", "text": "Google was founded on September 4, 1998, by American computer scientists Larry Page and Sergey Brin while they were PhD students at Stanford University in California. Together they own about 14% of its publicly listed shares and control 56% of its stockholder voting power through super-voting stock. The company went public via an initial public offering (IPO) in 2004. In 2015, Google was reorganized as a wholly owned subsidiary of Alphabet Inc. Google is Alphabet's largest subsidiary and is a holding company for Alphabet's internet properties and interests. Sundar Pichai was appointed CEO of Google on October 24, 2015, replacing Larry Page, who became the CEO of Alphabet. On December 3, 2019, Pichai also became the CEO of Alphabet. [...] On the list of most valuable brands, Google is 105 ranked second by Forbes and fourth by Interbrand."}
  {"_id": "doc2", "text": "Oxygenated blood leaves the lungs through pulmonary veins, which return it to the left part of the heart, completing the pulmonary cycle. This blood then enters the left atrium, which pumps it through the mitral valve into the left ventricle. From the left ventricle, the blood passes through the aortic valve to the aorta. The blood is then distributed to the body through the systemic circulation before returning again to the pulmonary circulation. Arteries Main article: Pulmonary artery From the right ventricle, blood is pumped through the semilunar pulmonary valve into the left and right main pulmonary artery (one for each lung), which branch into smaller pulmonary arteries that spread throughout the lungs. [...] Cardiac shunt is an unnatural connection between parts of the heart that leads to blood flow that bypasses the lungs."}
  {"_id": "doc3", "text": "The World Bowling Writers ( WBW ) International Bowling Hall of Fame was established in 1993 and is located in the International Bowling Museum and Hall of Fame , on the International Bowling Campus in Arlington , Texas. History The International Bowling Museum and Hall of Fame was located at 11 Stadium Plaza, St. Louis, Missouri, USA, and shared the same building with the St. Louis Cardinals Hall of Fame Museum, until November 8, 2008. It moved to Arlington and reopened in early 2010. In 2012, the WBW was merged with the International Bowling Media Association. After the merger, the WBW Hall of Fame inductees became part of the IBMA Luby Hall of Fame.  officers of the World Bowling Writers, which formed the Hall's Board.][...] The man and woman who receive the most votes are elected."}
  {"_id": "doc4", "text": "A \"Hello, World!\" program is generally a simple computer program which outputs (or displays) to the screen (often the console) a message similar to "Hello, World!" while ignoring any user input. A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.  [...] The C-language version was preceded by Kernighan's own 1972 A Tutorial Introduction to the Language B, where the first known version of the program is found in an example used to illustrate external variables."}

Die maximale Größe der Datei beträgt 500.000 Zeilen.

Abfragedatei

Die Abfragedatei enthält die Beispielabfragen, die für die Modelloptimierung verwendet werden. Jede Suchanfrage sollte mindestens ein entsprechendes extrahiertes Segment in der Corpusdatei haben. Sie sollten mindestens 100 Suchanfragen mit genauen Übereinstimmungen angeben. Sie können auch irrelevante Suchanfragen angeben. Das sind Suchanfragen, die zu extrahierten Segmenten mit einer Relevanzbewertung von null gehören.

Die Abfragedatei hat das JSONL-Format und dieselben Felder wie die Corpusdatei.

Beispiel:

  {"_id": "query1", "text": "who founded Google?"}
  {"_id": "query2", "text": "where is blood pumped after it leaves the right ventricle?"}
  {"_id": "query3", "text": "where is the bowling hall of fame located?"}
  {"_id": "query4", "text": "why is the sky blue?"}

Die maximale Anzahl von Abfragen in der Datei beträgt 40.000.

Trainingslabels

In der Trainingslabelsdatei werden die Abfragen mit den extrahierten Segmenten verknüpft und jedes Abfrage- und Segmentpaar wird bewertet.

Wenn die Datei mit Testlabels nicht vorhanden ist, werden 20% der Abfragen in der Datei mit Trainingslabels für die Bewertung des optimierten Modells nach dem Training reserviert.

Die Datei enthält die ID einer Suchanfrage und die ID des übereinstimmenden (oder nicht übereinstimmenden) extrahierten Segments sowie eine Bewertung der Relevanz des Segments für die Suchanfrage. Pro Abfrage muss mindestens eine Zeile vorhanden sein. Wenn eine Abfrage durch zwei Segmente beantwortet wird, gibt es zwei Zeilen für diese Abfrage. Score ist eine positive Ganzzahl. Ein Wert größer als null gibt an, dass das Dokument mit der Suchanfrage in Verbindung steht. Je höher die Zahl, desto relevanter ist das Keyword. Wenn der Wert weggelassen wird, ist der Standardwert 1.

Die Trainingslabelsdatei ist eine TSV-Datei (Tabulatorgetrennte Werte) mit einer Kopfzeile. Die Datei muss die Spalten query-id, corpus-id und score enthalten. query-id ist ein String, der mit dem Schlüssel _id aus der Abfragedatei übereinstimmt, und corpus-id ist ein String, der mit _id in der Corpusdatei übereinstimmt.

Beispiel:

query-id    corpus-id   score
query1  doc1    1
query2  doc2    1
query3  doc3    1
query3  doc9    1
query4  doc4    0

Die Datei mit den Trainingslabels muss mindestens 100 eindeutige Abfrage-IDs enthalten. Die Anzahl der Abfrage-IDs in der Datei mit den Trainingslabels zusammen mit der Anzahl der Abfragen in der Datei mit den Testlabels darf 500.000 nicht überschreiten.

Test labels

Wie die Datei mit Trainingslabels enthält auch diese optionale Datei die IDs der Abfrage und des extrahierten Segments sowie Relevanzbewertungen. Sie enthält weniger und andere Abfragen als die Datei mit den Trainingslabels. Falls vorhanden, werden die Abfrage- und Segmentpaare in der Datei verwendet, um die Optimierung zu bewerten. Wenn die Testlabelsdatei nicht vorhanden ist, werden Abfrage- und extrahierte Segmentpaare aus der Trainingslabelsdatei für die Bewertung verwendet.

Diese Datei hat dasselbe Format wie die Datei mit den Trainingslabels.

Beispiel:

query-id    corpus-id   score
query200    doc200  1
query201    doc201  1
query202    doc202  1

Die Datei mit den Testlabels ist optional. Wenn Sie sie angeben, muss sie mindestens drei eindeutige Abfrage-IDs enthalten.

Hinweise

Aktivieren Sie die Funktionen der Enterprise-Version für die App.

So passen Sie ein Suchmodell mit Ihren eigenen Trainingsdaten an:

Console

So optimieren Sie ein Modell mit der Google Cloud Console:

  1. Bereiten Sie Ihre Trainingsdaten und optional Ihre Testdatendateien vor. Verwenden Sie die unter Trainingsdateien beschriebenen Formate.

  2. Laden Sie die Dateien in Cloud Storage hoch.

  3. Rufen Sie in der Google Cloud Console die Seite Agent Builder auf.

    Zum Agent Builder

  4. Klicken Sie auf der Seite Apps auf den Namen der App, für die Sie ein trainiertes Modell erstellen möchten.

  5. Klicken Sie im Navigationsmenü auf Konfigurationen.

  6. Klicken Sie auf den Tab Feinabstimmung.

  7. Klicken Sie auf Das Basismodell abstimmen.

  8. Geben Sie die Corpus-, Abfrage-, Trainings- und optional die Testdateien an, die Sie in den vorherigen Schritten 1 und 2 vorbereitet haben.

  9. Klicken Sie auf Abstimmung starten.

  10. Aktualisieren Sie die Seite, um den Status in der Tabelle Aktuelle Abstimmungsaktivität auf dem Tab Optimierung zu sehen.

REST

So verwenden Sie die Methode trainCustomModel, um einen Datenspeicher zu optimieren:

  1. Bereiten Sie die Dateien mit Ihren Trainingsdaten (und optional auch mit Ihren Testdaten) vor. Verwenden Sie die unter Trainingsdateien beschriebenen Formate.

  2. Verschieben Sie die Dateien in einen Cloud Storage-Bucket.

  3. Laden Sie die Dateien aus dem Cloud Storage-Bucket in Vertex AI Search hoch, indem Sie den folgenden Curl-Befehl ausführen:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:trainCustomModel" \
    -d '{
    "gcsTrainingInput": {
     "corpusDataPath": "CORPUS_JSONL_GCS_PATH",
     "queryDataPath": "QUERY_JSONL_GCS_PATH",
     "trainDataPath": "TRAIN_TSV_GCS_PATH",
     "testDataPath": "TEST_TSV_GCS_PATH"
    },
    "modelType": "search-tuning"
    }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID ist die ID Ihres Google Cloud-Projekts.

    • DATA_STORE_ID: die ID des Datenspeichers, den Sie optimieren möchten.

    • CORPUS_JSONL_GCS_PATH: der Pfad zur JSONL-Datei des Korpus in Cloud Storage, z. B. gs://my-bucket/corpus.jsonl.

    • QUERY_JSONL_GCS_PATH: der Pfad zur JSONL-Abfragedatei in Cloud Storage, z. B. gs://my-bucket/query.jsonl.

    • TRAIN_TSV_GCS_PATH: der Pfad zur TSV-Datei mit den Trainingslabels in Cloud Storage, z. B. gs://my-bucket/train.tsv.

    • TEST_TSV_GCS_PATH: Optionales Feld, in dem Sie den Cloud Storage-Pfad für die TSV-Datei mit Testlabels angeben, z. B. gs://my-bucket/test.tsv. Wenn Sie keine Testlabelsdatei haben, entfernen Sie das Feld testDataPath oder lassen Sie es leer.

    Allgemeine Informationen zu dieser Methode finden Sie unter trainCustomModel.

    Die Optimierung beginnt automatisch, nachdem die Datendateien hochgeladen wurden.

    Klicken Sie hier für ein Beispiel für einen cURL-Befehl und eine Antwort.

    curl -X POST
    -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321:trainCustomModel"
    -d '{
    "dataStore":
    "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321",
    "gcsTrainingInput": {
    "corpusDataPath": "gs://my-bucket/corpus.jsonl",
    "queryDataPath": "gs://my-bucket/query.jsonl",
    "trainDataPath": "gs://my-bucket/train.tsv"
    },
    "modelType": "search-tuning"
    }
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/operations/train-custom-model-6071430366161939774",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelMetadata"
      },
      "response": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelResponse",
        "modelStatus": "in-progress"
      }
    }
  4. Notieren Sie sich den name-Wert, der von der trainCustomModel-Methode zurückgegeben wird, und folgen Sie der Anleitung unter Details zu einem lang laufenden Vorgang abrufen, um zu sehen, wann die Suche optimiert wurde.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


from google.api_core.client_options import ClientOptions
from google.api_core.operation import Operation
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# corpus_data_path = "gs://my-bucket/corpus.jsonl"
# query_data_path = "gs://my-bucket/query.jsonl"
# train_data_path = "gs://my-bucket/train.tsv"
# test_data_path = "gs://my-bucket/test.tsv"


def train_custom_model_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    corpus_data_path: str,
    query_data_path: str,
    train_data_path: str,
    test_data_path: str,
) -> Operation:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.SearchTuningServiceClient(client_options=client_options)

    # The full resource name of the data store
    data_store = f"projects/{project_id}/locations/{location}/collections/default_collection/dataStores/{data_store_id}"

    # Make the request
    operation = client.train_custom_model(
        request=discoveryengine.TrainCustomModelRequest(
            gcs_training_input=discoveryengine.TrainCustomModelRequest.GcsTrainingInput(
                corpus_data_path=corpus_data_path,
                query_data_path=query_data_path,
                train_data_path=train_data_path,
                test_data_path=test_data_path,
            ),
            data_store=data_store,
            model_type="search-tuning",
        )
    )

    # Optional: Wait for training to complete
    # print(f"Waiting for operation to complete: {operation.operation.name}")
    # response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    # metadata = discoveryengine.TrainCustomModelMetadata(operation.metadata)

    # Handle the response
    # print(response)
    # print(metadata)
    print(operation)

    return operation

Optimierte Suche testen und für einzelne Suchanfragen verwenden

Nach Abschluss der Abstimmung können Sie das Modell testen, indem Sie die Ergebnisse der Abfragen mit dem abgestimmten Modell und die Ergebnisse derselben Abfragen mit dem Basismodell vergleichen.

Console

So können Sie in der Google Cloud Console eine Vorschau des Verhaltens eines optimierten Modells anzeigen:

  1. Rufen Sie den Tab Tuning auf:

    1. Rufen Sie in der Google Cloud Console die Seite Agent Builder auf.

      Zum Agent Builder

    2. Klicken Sie auf den Namen der App, für die Sie eine Vorschau anzeigen möchten.

    3. Klicken Sie auf Configurations (Konfigurationen).

    4. Klicken Sie auf den Tab Feinabstimmung.

  2. Klicken Sie auf Optimiertes Modell und verwenden Sie den Vorschaubereich auf der rechten Seite, um Abfragen zu stellen, bei denen das optimierte Modell verwendet wird.

  3. Klicken Sie auf Basismodell und verwenden Sie den Vorschaubereich rechts, um Abfragen mit dem ursprünglichen Modell zu stellen.

  4. Vergleichen Sie die Qualität der Ergebnisse.

REST

Um die Auswirkungen der Optimierung zu beurteilen, können Sie Abfragen mit dem Feld enableSearchAdaptor auf true und dann auf false ausführen und die Ergebnisse vergleichen. Wenn Sie das Feld enableSearchAdaptor auf true festlegen, wird für diese Suchanfrage die optimierte Version der Suche verwendet.

So stellen Sie Suchanfragen, die das optimierte Modell verwenden:

  1. Legen Sie im Aufruf der Abfragemethode das Feld enableSearchAdaptor im Feld customFineTuningSpec auf true fest.

    Beispiel:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "customFineTuningSpec": { "enableSearchAdaptor": true }
    }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: die ID der App, die Sie abfragen möchten.

Ausführliche Informationen zu Suchanfragen finden Sie unter Suchergebnisse abrufen und in der Methode servingConfigs.search.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"          # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"
# search_query = "YOUR_SEARCH_QUERY"


def search_sample(
    project_id: str,
    location: str,
    engine_id: str,
    search_query: str,
) -> discoveryengine.services.search_service.pagers.SearchPager:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.SearchServiceClient(client_options=client_options)

    # The full resource name of the search app serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_config"

    # Optional - only supported for unstructured data: Configuration options for search.
    # Refer to the `ContentSearchSpec` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
    content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
        # For information about snippets, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/snippets
        snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
            return_snippet=True
        ),
        # For information about search summaries, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
        summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
            summary_result_count=5,
            include_citations=True,
            ignore_adversarial_query=True,
            ignore_non_summary_seeking_query=True,
            model_prompt_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelPromptSpec(
                preamble="YOUR_CUSTOM_PROMPT"
            ),
            model_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelSpec(
                version="stable",
            ),
        ),
    )

    # Refer to the `SearchRequest` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
    request = discoveryengine.SearchRequest(
        serving_config=serving_config,
        query=search_query,
        page_size=10,
        content_search_spec=content_search_spec,
        query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
            condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
        ),
        spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
            mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
        ),
        # Optional: Use fine-tuned model for this request
        # custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
        #     enable_search_adaptor=True
        # ),
    )

    page_result = client.search(request)

    # Handle the response
    for response in page_result:
        print(response)

    return page_result

Optimierte Suche aktivieren

Wenn Sie die optimierte Suche getestet haben und sie für alle Suchanfragen verwenden möchten, können Sie sie als Standardsuchmodell festlegen.

Console

So machen Sie das optimierte Modell zum Standardmodell und wenden es auf die Hauptseite der Vorschau, das Widget und API-Aufrufe an:

  1. Rufen Sie den Tab Tuning auf:

    1. Rufen Sie in der Google Cloud Console die Seite Agent Builder auf.

      Zum Agent Builder

    2. Klicken Sie auf den Namen der App.

    3. Klicken Sie auf Configurations (Konfigurationen).

    4. Klicken Sie auf den Tab Feinabstimmung.

  2. Klicken Sie auf Abgestimmtes Modell.

  3. Klicken Sie auf Veröffentlichen.

REST

Wenn Sie das optimierte Modell als Standardmodell festlegen, müssen Sie das Feld customFineTuningSpec in der Suchanfrage nicht angeben, wie im vorherigen Verfahren.

So verwenden Sie die optimierte Version der Suche standardmäßig für alle Suchanfragen:

  1. Führen Sie den folgenden curl-Befehl aus, um die optimierte Suche als Standardmodell festzulegen:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": true
    }
    }'
    

    Allgemeine Informationen zu dieser Methode finden Sie unter servingConfigs.patch.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

Optimierte Suche deaktivieren

Wenn Sie die optimierte Version der Suche nicht mehr verwenden möchten, z. B. weil die Ergebnisse nicht besser oder schlechter sind als vor der Optimierung, können Sie sie deaktivieren.

Console

So stellen Sie das Basismodell wieder als Standardmodell ein:

  1. Rufen Sie den Tab Tuning auf:

    1. Rufen Sie in der Google Cloud Console die Seite Agent Builder auf.

      Zum Agent Builder

    2. Klicken Sie auf den Namen der App.

    3. Klicken Sie auf Configurations (Konfigurationen).

    4. Klicken Sie auf den Tab Feinabstimmung.

  2. Klicken Sie auf Basismodell.

  3. Klicken Sie auf Veröffentlichen.

REST

Wenn Sie das optimierte Modell nicht mehr verwenden möchten, führen Sie einen ähnlichen Curl-Aufruf wie den vorherigen aus, setzen Sie aber enableSearchAdaptor auf false:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": false
    }
    }'
    

    Allgemeine Informationen zu dieser Methode finden Sie unter servingConfigs.patch.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

Nächste Schritte

  • Um die Auswirkungen der Suchabstimmung auf die Suchqualität zu verstehen, sollten Sie die Suchqualität bewerten. Weitere Informationen finden Sie unter Suchqualität bewerten.