Zum Inhalt

Batch-Operationen

Batch-Operationen ermöglichen es Ihnen, mehrere Elemente in einem einzigen API-Aufruf zu verarbeiten, anstatt separate Aufrufe für jedes Element durchzuführen. In Elluminate bedeutet dies, dass Sie mehrere Responses parallel generieren oder mehrere Ratings durchführen können, was die Effizienz deutlich verbessert und den Overhead reduziert.

Anstatt beispielsweise 10 separate API-Aufrufe zu tätigen, um Responses für 10 verschiedene Sets von Template-Variablen zu generieren, können Sie alle 10 Sets in einer einzigen Batch-Anfrage senden. Der Server verarbeitet diese Anfragen parallel und liefert alle Ergebnisse gemeinsam zurück.

Batch-Operationen sind besonders nützlich, wenn Sie:

  • Responses in Masse verarbeiten: Effizient Responses für mehrere Prompts generieren
  • Batch-Ratings: Parallel mehrere Responses anhand von Kriterien raten
from dotenv import load_dotenv
from elluminate import Client
from elluminate.schemas import RatingMode

load_dotenv(override=True)

client = Client()

prompt_template, _ = client.prompt_templates.get_or_create(
    "Explain why {{language}}'s {{quirk}} is considered surprising or counterintuitive, "
    + "and demonstrate it with a short code example that might trip up even experienced developers.",
    name="Programming Quirks",
)

client.criteria.get_or_generate_many(prompt_template)

# Create a collection for our variables
collection, _ = client.collections.get_or_create(
    name="Programming Quirks Variables", description="Template variables for programming quirks examples"
)

values = [
    {"language": "Python", "quirk": "mutable default arguments"},
    {"language": "JavaScript", "quirk": "type coercion"},
]

template_variables = []
for value in values:
    variables = client.template_variables.add_to_collection(
        template_variables=value,
        collection=collection,
    )
    template_variables.append(variables)

# Create an experiment for tracking responses and ratings
experiment, _ = client.experiments.get_or_create(
    "Programming Quirks Analysis",
    prompt_template=prompt_template,
    collection=collection,
    description="Evaluating explanations of programming language quirks",
)  # (1)!

responses = client.responses.generate_many(
    prompt_template=prompt_template, template_variables=template_variables, experiment=experiment
)  # (2)!

# Generate ratings for the `responses`
batch_ratings = client.ratings.rate_many(responses, rating_mode=RatingMode.FAST)  # (3)!

for i, response in enumerate(responses):
    ratings = batch_ratings[i]
    print(f"\n\nResponse: {response.messages[-1].content}")
    for rating in ratings:
        print(f"Criteria: {rating.criterion.criterion_str}")
        print(f"Rating: {rating.rating}\n")
  1. Erstellen Sie ein Experiment zur Verfolgung der Batch-Responses und Ratings. Dieses Experiment wird verwendet, um alle generierten Responses mit diesem Evaluationslauf zu verknüpfen.

  2. Generiert effizient mehrere Responses aus einem einzelnen Prompt-Template mit verschiedenen Template-Variablen. Der Experiment-Parameter verknüpft alle generierten Responses mit dem Experiment.

  3. Bewertet effizient mehrere Responses anhand ihrer jeweiligen Kriterien. Die Ratings werden automatisch mit dem Experiment verknüpft, da die Responses während der Generierung mit ihm verknüpft wurden. Der Rating-Modus bestimmt die Art der zu verwendenden Bewertungsstrategie.

Performance-Überlegungen

Batch-Operationen bieten mehrere Leistungsvorteile:

  • Reduzierter Netzwerk-Overhead
  • Parallele Verarbeitung auf dem Server
  • Geringere Gesamtlatenz für mehrere Operationen
  • Effizientere Ressourcennutzung

Beachten Sie jedoch:

  • Speicherverbrauch bei großen Batches
  • Timeout-Grenzen bei lang laufenden Operationen
  • API-Ratenlimits und Kontingente
  • Komplexität der Fehlerbehandlung