Wird geladen

Generierung von Testdatensätzen

Lektion 1215 Min.

Der Aufbau eines benutzerdefinierten Workflows zur Prompt-Evaluierung beginnt mit der Erstellung eines soliden Prompts und der anschließenden Generierung von Testdaten, um zu sehen, wie gut er funktioniert. Lass uns gemeinsam den Aufbau eines Evaluierungssystems für einen Prompt durchgehen, der Nutzern beim Schreiben von AWS-spezifischem Code hilft.

Das Ziel festlegen

Unser Prompt muss Nutzer beim Schreiben von drei spezifischen Arten von Ausgaben für AWS-Anwendungsfälle unterstützen:

  • Python-Code
  • JSON-Konfigurationsdateien
  • Reguläre Ausdrücke

Die zentrale Anforderung ist, dass wir, wenn ein Nutzer Hilfe bei einer Aufgabe anfordert, eine saubere Ausgabe in einem dieser Formate zurückgeben, ohne zusätzliche Erklärungen, Kopf- oder Fußzeilen.

Hier ist unsere anfängliche Prompt-Vorlage:

python
prompt = f"""
Please provide a solution to the following task:
{task}
"""

Erstellen eines Evaluierungsdatensatzes

Ein Evaluierungsdatensatz enthält Eingaben, die wir in unseren Prompt einspeisen, um seine Leistung zu testen. In unserem Fall benötigen wir ein Array von JSON-Objekten, wobei jedes Objekt eine „task"-Eigenschaft hat, die beschreibt, was Claude erreichen soll.

Du kannst Datensätze auf zwei Arten erstellen:

  • Manuell zusammenstellen
  • Automatisch mit Claude generieren

Für die automatische Generierung ist die Verwendung eines schnelleren Modells wie Haiku sinnvoll, da wir Testdaten und keine Produktionsausgabe generieren.

Generierung von Testdaten mit Code

Lass uns eine Funktion erstellen, die Claude bittet, Testfälle für uns zu generieren. Die Funktion erstellt einen umfassenden Prompt, der spezifische Arten von AWS-bezogenen Aufgaben anfordert.

Hier ist die grundlegende Funktionsstruktur:

python
def generate_dataset():
    prompt = """
    Generate an evaluation dataset for a prompt evaluation. The dataset will be used to evaluate prompts 
    that generate Python, JSON, or Regex specifically for AWS-related tasks. Generate an array of objects, 
    each representing task that requires Python, JSON, or a Regex to complete.
    
    Example output:
    ```json
    [
        \{
            "task": "Description of task",
        \},
        ...additional
    ]
    ```
    
    * Focus on tasks that can be solved by writing a single Python function, a single JSON object, or a single regex
    * Focus on tasks that do not require writing much code
    
    Please generate 3 objects.
    """

Implementierung der Generierungslogik

Um eine saubere JSON-Ausgabe von Claude zu erhalten, verwenden wir die Pre-Filling-Technik mit Stop-Sequenzen:

python
messages = []
add_user_message(messages, prompt)
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])
return json.loads(text)

Dieser Ansatz stellt sicher, dass Claude seine Antwort mit korrekt formatiertem JSON beginnt und beim schließenden Markdown-Fence stoppt.

Testen und Speichern des Datensatzes

Nachdem du die Generierungsfunktion ausgeführt hast, solltest du realistische Testfälle wie diese zurückbekommen:

  • Erstelle eine Python-Funktion, um die AWS-Region aus einem ARN zu extrahieren
  • Schreibe eine JSON-Konfiguration für eine AWS-Lambda-Funktion
  • Entwickle einen regulären Ausdruck zur Validierung eines AWS-S3-Bucket-Namens

Speichere deinen generierten Datensatz in einer Datei zur einfachen Wiederverwendung:

python
dataset = generate_dataset()

with open('dataset.json', 'w') as f:
    json.dump(dataset, f, indent=2)

Dadurch wird eine Datei dataset.json in deinem Notebook-Verzeichnis erstellt, die alle deine Testfälle enthält und bereit ist, für die Prompt-Evaluierung in den nächsten Schritten deines Workflows verwendet zu werden.