Beispielgeschäft mit Gemini-Schnellstart

In dieser Anleitung wird gezeigt, wie Sie iterativ Beispiele für Schnellerstellungen erstellen und dynamisch aus dem Beispielspeicher abrufen können, um das Verhalten eines LLM zu korrigieren. In dieser Anleitung verwenden Sie das Modell gemini-2.0-flash. Sie führen folgende Schritte aus:

  • Erstellen Sie eine Beispielspeicherinstanz (ExampleStore).

  • Erstellen Sie Beispiele basierend auf der Antwort von Gemini und laden Sie diese Beispiele in die Beispielspeicherinstanz hoch.

  • Rufen Sie Ihre Beispiele dynamisch aus dem Beispielspeicher ab, um das LLM in Richtung des erwarteten Verhaltens zu lenken.

  • Bereinigen.

Hinweis

Wenn Sie dieser Anleitung folgen möchten, müssen Sie zuerst Ihr Projekt und Ihre Umgebung einrichten.

Projekt einrichten

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto bei Google Cloudhaben, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI Agent Builder API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI Agent Builder API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Wenn Sie ein Projekt ausgewählt haben, prüfen Sie, ob Sie die IAM-Rolle „Vertex AI-Nutzer“ (roles/aiplatform.user) für das Projekt haben.

Bei Vertex AI authentifizieren

Wenn Sie die Python-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

  1. Installieren Sie die Google Cloud CLI.

  2. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  3. Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:

    gcloud auth application-default login

    Wenn Sie Cloud Shell verwenden, ist dieser Schritt nicht erforderlich.

    Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.

Weitere Informationen finden Sie in der Dokumentation zur Authentifizierung unter ADC für eine lokale Entwicklungsumgebung einrichten Google Cloud .

Bibliotheken importieren

  1. Führen Sie den folgenden Befehl aus, um das Vertex AI SDK für Python für den Beispielspeicher zu installieren.

    pip install --upgrade google-cloud-aiplatform>=1.87.0
  2. Verwenden Sie das folgende Codebeispiel, um das SDK für den Beispielspeicher zu importieren und zu initialisieren.

    import vertexai
    from vertexai.preview import example_stores
    
    vertexai.init(
      project="PROJECT_ID",
      location="LOCATION"
    )
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.

    • LOCATION: Ihre Region. Nur us-central1 wird unterstützt.

Beispielspeicherinstanz erstellen

Verwenden Sie das folgende Codebeispiel, um eine Beispielspeicherinstanz zu erstellen, die das Einbettungsmodell text-embedding-005 verwendet.

example_store = example_stores.ExampleStore.create(
    example_store_config=example_stores.ExampleStoreConfig(
        vertex_embedding_model="text-embedding-005"
    )
)

Das Erstellen eines Beispielspeichers dauert einige Minuten.

Weitere Informationen zum Erstellen oder Wiederverwenden von Beispielspeicherinstanzen, siehe Beispielspeicherinstanz erstellen.

Beispiele in die Beispielspeicherinstanz hochladen

Führen Sie die folgenden Schritte aus, um Beispiele zu erstellen und in die Beispielspeicherinstanz hochzuladen. Sie können maximal fünf Beispiele pro Anfrage hochladen.

  1. Definieren Sie das Funktionstool get_current_weather. Die Beispiele, die Sie in den folgenden Schritten erstellen, geben dem Modell vor, wann diese Funktion aufgerufen werden soll und welche Argumente an sie übergeben werden müssen.

    Weitere Informationen dazu, wie Beispiele die Leistung von Funktionsaufrufen und Modellantworten verbessern können, finden Sie unter Beispiele verwenden, um die Leistung von Funktionsaufrufen zu verbessern. Weitere Informationen zum Erstellen einer Anwendung für Funktionsaufrufe finden Sie unter Einführung in Funktionsaufrufe.

    from google.genai import types as genai_types
    
    get_current_weather_func = genai_types.FunctionDeclaration(
      name="get_current_weather",
      description="Get the current weather in a given location",
      parameters={
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city name of the location for which to get the weather."
          }
        },
      },
    )
    
  2. Senden Sie eine Anfrage an Gemini, um Inhalte mit der Funktion get_current_weather zu generieren.

    Weitere Informationen finden Sie unter Client erstellen für das Gen AI SDK.

    from google import genai
    
    client = genai.Client(
        http_options=genai_types.HttpOptions(api_version="v1"),
        vertexai=True,
        project="PROJECT_ID",,
        location="LOCATION")
    
    user_content = genai_types.Content(
      role="user",
      parts=[Part(text="What is the weather like in Boston?")],
    )
    response = client.models.generate_content(
      model="gemini-2.0-flash",
      user_content,
      config=genai_types.GenerateContentConfig(
        tools=[
          genai_types.Tool(function_declarations=[get_current_weather_func])]
      )
    )
    
  3. Führen Sie einen der folgenden Schritte aus, um ein Beispiel zu erstellen und hochzuladen.

    • Wenn die Antwort des LLM das erwartete Verhalten zeigt, verwenden Sie das folgende Codebeispiel, um ein Beispiel basierend auf der Antwort zu erstellen und in den Beispielspeicher hochzuladen.

      function_response = genai_types.Content(
        parts=[
          genai_types.Part(
            function_response={
              "name": "get_current_weather",
              "response": {
                "location": "New York, NY", "temperature": 38,
                "description": "Partly Cloudy",
                "icon": "partly-cloudy", "humidity": 65,
                "wind": { "speed": 10, "direction": "NW" }
              }
            }
          )
        ]
      )
      final_model_response = genai_types.Content(
        role="model",
        parts=[genai_types.Part(text="The weather in NYC is 38 degrees and partly cloudy.")],
      )
      example = {
        "contents_example": {
          "contents": [user_content.to_json_dict()],
          "expected_contents": [
            {"content": response.candidates[0].content.to_json_dict()},
            {"content": function_response.to_json_dict()},
            {"content": final_model_response.to_json_dict()},
          ],
        },
        "search_key": user_content.parts[0].text,
      }
      example_store.upsert_examples(examples=[example])
      
    • Wenn die Antwort nicht alle erwarteten Funktionen oder Ergebnisse abdeckt oder das Modell Schwierigkeiten mit dem Reasoning hat, verwenden Sie alternativ das folgende Codebeispiel, um eine Antwort zu erstellen, mit der das Modellverhalten korrigiert wird.

      expected_function_call = genai_types.Content(
        parts=[
          genai_types.Part(
            function_call={
              "name": "get_current_weather",
              "args": {"location": "New York, NY"}
            }
          )
        ]
      )
      function_response = genai_types.Content(
        parts=[
          genai_types.Part(
            function_response={
              "name": "get_current_weather",
              "response": {
                "location": "New York, NY", "temperature": 38,
                "description": "Partly Cloudy",
                "icon": "partly-cloudy", "humidity": 65,
                "wind": { "speed": 10, "direction": "NW" }
              }
            }
          )
        ]
      )
      final_model_response = genai_types.Content(
        role="model",
        parts=[genai_types.Part(text="The weather in NYC is 38 degrees and partly cloudy.")],
      )
      example = {
        "contents_example": {
          "contents": [user_content.to_json_dict()],
          "expected_contents": [
            {"content": expected_function_call.to_json_dict()},
            {"content": function_response.to_json_dict()},
            {"content": final_model_response.to_json_dict()},
          ],
        },
        "search_key": user_content.parts[0].text,
      }
      example_store.upsert_examples(examples=[example])
      
  4. Wiederholen Sie die Schritte 2 und 3, um nach Bedarf mehrere Beispiele zu erstellen und hochzuladen. Sie können zusätzliche Beispiele hochladen, wenn das Modell unerwartetes Verhalten zeigt oder die hochgeladenen Beispiele nicht alle erwarteten Funktionen, Ergebnisse oder Reasoning-Schritte abdecken. Weitere Informationen dazu, wann Sie zusätzliche Beispiele hochladen müssen, finden Sie unter Beispiele hochladen.

Beispiele mit Gemini abrufen und verwenden

Suchen Sie nach Beispielen basierend auf ihrer Ähnlichkeit mit Ihrem Prompt. Sie können diese Beispiele dann in Ihren Prompt einfügen, um das LLM in Richtung des erwarteten Verhaltens zu lenken.

Hilfsfunktionen zum Formatieren von Beispielen definieren

Verwenden Sie das folgende Codebeispiel, um eine ExampleStorePrompt-Klasse und Hilfsfunktionen zu definieren, mit denen Sie nach Beispielen suchen und diese abrufen können.

import abc
import jinja2
import json

from google.protobuf import json_format
# --BOILERPLATE CODE FOR FORMATTING--

EXAMPLES_PREAMBLE = """<EXAMPLES>
The following are examples of user queries and model responses using the available python libraries.

Begin few-shot
"""

EXAMPLES_POSTAMBLE = """
End few-shot

Now, try to follow these examples and complete the following conversation:
</EXAMPLES>
"""

EXAMPLE_PREAMBLE = "EXAMPLE"

TEMPLATE = """
"""

class ExampleStorePrompt:

    def __init__(
          self, template = TEMPLATE, example_preamble = EXAMPLE_PREAMBLE,
          examples_preamble = EXAMPLES_PREAMBLE,
          examples_postamble = EXAMPLES_POSTAMBLE):

        self.template = jinja2.Template(template)
        self.example_preamble = example_preamble
        self.examples_preamble = examples_preamble
        self.examples_postamble = examples_postamble

    @abc.abstractmethod
    def process_function_response(self, function_response):
        return json.dumps(function_response)

    @abc.abstractmethod
    def process_function_call(self, function_call):
        args_list = []
        for key, value in function_call.get("args", []).items():
            if isinstance(value, str):
                # Wrap strings in quotes.
                value = f'"{value}"'
            if isinstance(value, list):
                value = ', '.join(
                    f'"{item}"' if isinstance(item, str)
                    else str(item) for item in value)
                value = f"[{value}]"
            if isinstance(value, dict):
                value = json.dumps(value)
            args_list.append(f'{key}={value}')
        args = ", ".join(args_list)
        return f"```\n{function_call.get('name')}({args})\n```"

    @abc.abstractmethod
    def process_part(self, part):
        if "function_call" in part:
            return self.process_function_call(part["function_call"])
        if "text" in part:
            return part.get("text")
        if "function_response" in part:
            return self.process_function_response(part["function_response"])

    @abc.abstractmethod
    def process_content(self, content):
        response = []
        for part in content.get("parts", []):
            response.append(self.process_part(part))
        return [content.get("role"), response]

    @abc.abstractmethod
    def example_formatter(self, example: dict):
        response = []
        for content in example.get("contents", []):
            response.append(self.process_content(content))
        for content in example.get("expected_contents", []):
            content = content.get("content", {})
            response.append(self.process_content(content))
        return response

    def get_prompt(self, examples: list):
        if not examples:
          return ""
        contents_example = example.get("example", {}).get(
          "stored_contents_example", {}).get("contents_example", {})
        examples = [self.example_formatter(example) for example in examples]
        return self.template.render(
            examples=examples,
            example_preamble=self.example_preamble,
            examples_preamble=self.examples_preamble,
            examples_postamble=self.examples_postamble
        )

Nach relevanten Beispielen suchen

Verwenden Sie das folgende Codebeispiel, um nach Beispielen zu suchen, die für die laufende Unterhaltung mit dem LLM relevant sind. Anschließend können Sie die Hilfsfunktionen verwenden, um diese Beispiele in Ihre Prompts einzufügen.

query = "what's the fastest way to get to disney from lax"

# Search for relevant examples.
examples = example_store.search_examples(
  {"stored_contents_example_key": query}, top_k=3)

prompt = ExampleStorePrompt().get_prompt(examples.get("results", []))

model_response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents="How do I get to LAX?",
    config=genai_types.GenerateContentConfig(
      system_instruction=prompt,
      tools=[
        genai_types.Tool(function_declarations=[track_flight_status_function])]
  )
)

Antwortqualität iterativ verbessern

Wenn Sie die Antwortmuster von Gemini mithilfe von Beispielen für Schnellerstellungen verbessern möchten, wiederholen Sie die Schritte in den folgenden Abschnitten:

  1. Beispiele erstellen und in die Beispielspeicherinstanz hochladen.

  2. Beispiele mit Gemini abrufen und verwenden

Bereinigen

Wenn Sie alle in diesem Projekt verwendeten Ressourcen bereinigen möchten, können Sie das Projekt Google Cloud löschen, das Sie für die Kurzanleitung verwendet haben.

Andernfalls können Sie die einzelnen Ressourcen löschen, die Sie in dieser Anleitung erstellt haben. Gehen Sie dazu so vor:

  1. Verwenden Sie das folgende Codebeispiel, um die Beispielspeicherinstanz zu löschen.

    example_store.delete()
    
  2. Löschen Sie alle lokal erstellten Dateien.

Nächste Schritte

  • Informationen zum Erstellen einer Beispielspeicherinstanz .