Beispielgeschäft mit Gemini-Schnellstart

In diesem Tutorial wird gezeigt, wie Sie iterativ Few-Shot-Beispiele erstellen und dynamisch aus Example Store abrufen können, um das Verhalten eines LLM zu korrigieren. In dieser Anleitung verwenden Sie das Modell gemini-2.0-flash. Sie gehen so vor:

  • Erstellen Sie eine Example Store-Instanz (ExampleStore).

  • Erstellen Sie Beispiele basierend auf der Antwort von Gemini und laden Sie sie in die Example Store-Instanz hoch.

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

  • bereinigen.

Hinweise

Um die in dieser Anleitung beschriebenen Schritte auszuführen, müssen Sie zuerst Ihr Projekt und Ihre Umgebung einrichten.

Projekt einrichten

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Enable the API

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Enable the API

  8. Wenn Sie ein Projekt ausgewählt haben, müssen Sie die IAM-Rolle Vertex AI-Nutzer (roles/aiplatform.user) für das Projekt haben.
  9. 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 dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    Bibliotheken importieren

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

      pip install --upgrade google-cloud-aiplatform>=1.87.0
    2. Verwenden Sie das folgende Codebeispiel, um das SDK für Example Store 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.

    Example Store-Instanz erstellen

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

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

    Das Erstellen eines Beispiel-Shops dauert einige Minuten.

    Weitere Informationen zum Erstellen oder Wiederverwenden von Beispielshop-Instanzen finden Sie unter Beispielshop-Instanz erstellen.

    Beispiele in die Example Store-Instanz hochladen

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

    1. Definieren Sie das Tool für die Funktion 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 sollen.

      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 mit der Funktion get_current_weather Inhalte zu generieren.

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

      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 Beispiel-Store 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 der Argumentation hat, können Sie mit dem folgenden Codebeispiel eine Antwort erstellen, um das Modellverhalten zu korrigieren.

        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 nach Bedarf, um 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 Funktionen, Ergebnisse oder Begründungen abdecken, die Sie erwarten. 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, die Ihrem Prompt ähneln. 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 Beispiele suchen und 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 Beispiel-Store-Instanz hochladen:

    2. Beispiele mit Gemini abrufen und verwenden

    Bereinigen

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

    Andernfalls können Sie die einzelnen Ressourcen löschen, die Sie in dieser Anleitung erstellt haben:

    1. Verwenden Sie das folgende Codebeispiel, um die Instanz „Example Store“ zu löschen.

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

    Nächste Schritte