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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Vertex AI API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Vertex AI API.
- Wenn Sie ein Projekt ausgewählt haben, müssen Sie die IAM-Rolle Vertex AI-Nutzer (
roles/aiplatform.user
) für das Projekt haben. -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
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
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.
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." } }, }, )
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])] ) )
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])
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.
Verwenden Sie das folgende Codebeispiel, um die Instanz „Example Store“ zu löschen.
example_store.delete()
Löschen Sie alle lokal erstellten Dateien.
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.
Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter ADC für eine lokale Entwicklungsumgebung einrichten.
Bibliotheken importieren
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.
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:
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: