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
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.- 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.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
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
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.0Verwenden 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-central1wird 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.
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." } }, }, )Senden Sie eine Anfrage an Gemini, um Inhalte mit der Funktion
get_current_weatherzu 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])] ) )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])
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:
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:
Verwenden Sie das folgende Codebeispiel, um die Beispielspeicherinstanz zu löschen.
example_store.delete()Löschen Sie alle lokal erstellten Dateien.