Few-Shot-Prompt-Optimierer

Mit dem Few-Shot-Prompt-Optimierer können Sie Systemanweisungen optimieren, indem Sie Beispiele analysieren, in denen die Antwort eines Modells nicht den Erwartungen entsprach. Sie geben konkrete Beispiele für Prompts, Modellantworten und Feedback zu diesen Antworten an und der Optimierer verbessert die Systemanweisungen. Sie haben zwei Möglichkeiten, Feedback zu geben: Rubrics und Rubric-basierte Bewertung oder Zielantworten.

Für die Few-Shot-Optimierung müssen Sie Beispiele in einem Pandas DataFrame bereitstellen. Sie ist über das Vertex AI SDK verfügbar.

Mit rubrikbasierter Bewertung optimieren

Diese Methode ist für Szenarien vorgesehen, in denen Sie für jedes Beispiel Rubriken (auch als Bewertungskriterien bezeichnet) und einen Datensatz dazu haben, ob das Modell diese Kriterien erfüllt hat. Ihr DataFrame muss die folgenden vier Spalten enthalten:

  • prompt: Die ursprüngliche Nutzeranfrage.
  • model_response: Die tatsächliche Ausgabe, die vom Modell generiert wurde.
  • rubrics: Eine Liste mit spezifischen Kriterien für dieses Beispiel als Stringdarstellung einer Liste von Strings.
  • rubrics_evaluations: Eine Liste mit booleschen Werten, die als Stringdarstellung einer Liste mit booleschen Werten angibt, ob die einzelnen Rubriken erfüllt wurden.

Die Rubriken können für alle Zeilen einheitlich sein oder auf jedes Beispiel zugeschnitten werden.

import pandas as pd
import vertexai
from vertexai import types

PROJECT_NAME = "YOUR_PROJECT_NAME"
LOCATION = "YOUR_LOCATION" # e.g. "us-central1"
client = vertexai.Client(project=PROJECT_NAME, location=LOCATION)

system_instructions = "You are an AI assistant skilled in analyzing articles. Your task is to extract key arguments, evaluate evidence quality, identify potential biases, and summarize core findings into a concise, actionable, and objective report. Make sure the response is less than 50 words"
df = pd.DataFrame(
    [
        {
            "prompt": "prompt1",
            "model_response": "response1",
            "rubrics": "['Response is in English', 'Under 50 words']",
            "rubrics_evaluations": "[True, True]",
        },
        {
            "prompt": "prompt2",
            "model_response": "response2",
            "rubrics": "['Response is in English', 'Under 50 words']",
            "rubrics_evaluations": "[True, False]",
        },
    ]
)

config = vertexai.types.OptimizeConfig(
    optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_FEW_SHOT_RUBRICS,
    examples_dataframe=df,
)

response = client.prompts.optimize(prompt=system_instructions, config=config)

print(response.parsed_response.suggested_prompt)

Mit Zielreaktionen optimieren

Wenn Sie keine spezifischen Rubriken, aber für jeden Prompt eine ideale oder „Goldstandard“-Antwort haben, können Sie die zielbasierte Optimierung verwenden. Der Optimierer vergleicht die Modellausgabe mit der idealen Ausgabe und passt die Anweisungen an, um die Lücke zu schließen.

Ihr DataFrame muss die folgenden drei Spalten enthalten:

  • prompt: Die ursprüngliche Nutzeranweisung.
  • model_response: Die aktuelle Modellausgabe, die verbessert werden muss.
  • target_response: Die ideale Antwort, die das Modell generieren soll.
import pandas as pd
import vertexai
from vertexai import types

PROJECT_NAME = "PROJECT"
LOCATION = "YOUR_LOCATION" # e.g. "us-central1"
client = vertexai.Client(project=YOUR_PROJECT_NAME, location=LOCATION)

system_instructions = "You are an AI assistant skilled in analyzing articles. Your task is to extract key arguments, evaluate evidence quality, identify potential biases, and summarize core findings into a concise, actionable, and objective report. Make sure the response is less than 50 words"
df = pd.DataFrame(
    {
        "prompt": ["prompt1", "prompt2"],
        "model_response": ["response1", "response2"],
        "target_response": ["target1", "target2"],
    }
)
config = vertexai.types.OptimizeConfig(
    optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_FEW_SHOT_TARGET_RESPONSE,
    examples_dataframe=df,
)
response = client.prompts.optimize(
    prompt=system_instructions,
    config=config,
)

print(response.parsed_response.suggested_prompt)