Agenten-API-Hosted-Sandbox-Test: CSV-Runner, Artefaktprüfungen und Fehlerbehandlung
Testen des gehosteten Sandboxes der OpenAI Agents API: Ein Python-Runner sendet eine CSV-Datei, lädt die Ergebnisse herunter und überprüft die JSON-Zusammenfassung selbst. Auch Fehler und Kosten sind berücksichtigt.
Quellen: Testing the OpenAI Agents API with a Hosted Sandbox
Dieses Experiment geht von einer konkreten Frage aus: Kann eine Agents API-Sitzung eine Datei entgegennehmen, daran innerhalb eines Sandboxes arbeiten und ein überprüfbares Ergebnis zurückgeben? Ein kleiner Python-Runner beantwortet diese Frage. Die Eingabe ist eine CSV-Datei mit Transaktionen, die vier Verkäufe, eine Rückerstattung sowie eine ungültige Zeile enthält. Der Agent erstellt eine JSON-Zusammenfassung, und die Anwendung berechnet selbst das erwartete Ergebnis, damit beide miteinander verglichen werden können. Alle hier geäußerten Meinungen sind persönlicher Natur und stammen aus Tests mit einem persönlichen OpenAI-Konto im Pro-Plan sowie aus der zu diesem Zeitpunkt verfügbaren Dokumentation.
Am 10. September 2026 ging die Agents API von OpenAI in die öffentliche Beta-Version, wobei eine verwaltete Codex-Plattform bereitgestellt wurde, die den Kreislauf aus Modell und Werkzeugen antreibt. Die aufrufende Anwendung legt die Aufgabe fest und entscheidet, wo die Befehle ausgeführt werden. Im Folgenden wird erläutert, wie der Ausführer aufgebaut ist. Die fünf aufgezeichneten Tests stammen von einer früheren Version davon. Der überarbeitete Ausführer sorgt für Reproduzierbarkeit und speichert Beweise; bislang wurde er nur offline getestet.
01 Wie die Agents API zusammenwirkt
Vier Komponenten müssen getrennt bleiben. Der Agent trägt das Modell, die Anweisungen sowie die Werkzeuge. Die Umgebung stellt optional Rechenleistung bereit. Die Sitzung hält die Arbeiten über die Zeit hinweg zusammen. Ereignisse und Elemente berichten darüber, was gerade geschieht und was gespeichert wurde. Ein Zug ist eine einzelne Durchführung dieses Kreislaufs.
Die Hosted-Lösung in diesem Experiment sieht wie folgt aus: Der Python-Runner öffnet die Sitzung und holt die Ergebnisse ab, während OpenAI das Steuerungsframework sowie den Ausführungssandbox betreibt.
Die erste Gestaltungsfrage betrifft den Ort, an dem der Agenten-Loop platziert werden sollte. Mit der Agents-API bietet OpenAI das Steuerungsframework und sorgt dafür, dass die Sitzungen dauerhaft gespeichert bleiben. Das Agents-SDK führt den Loop in Ihrer eigenen Anwendung aus, sodass Sie selbst die Speicherlösung sowie die Integrationen wählen können. Die Responses-API ermöglicht direkten Zugriff auf Modelle und überlässt den umgebenden Workflow Ihnen.
Responses kann außerdem gehostete Shell-Befehle ausführen, weshalb eine reine CSV-Berechnung nicht auf die Agents-API angewiesen ist. Der Runner verwendet die API, um den gesamten Ablauf von der Sitzung bis zum Ergebnisdokument durchzuführen. Jeder Versuch erstellt eine neue Sitzung und führt eine Aufgabe aus. Dabei werden weder mehrstufige Persistenzfunktionen noch Subagenten getestet.
02 Warum ein gehosteter Sandbox
Die Aufgabe benötigt lediglich einen Ort, um die CSV-Datei sowie die von dem Agenten erzeugte Python-Datei abzulegen. Es wird weder ein privates Netzwerk noch ein benutzerdefiniertes Image benötigt, weshalb der Ausführer openai_hosted mit deaktivierter Sandbox-Vernetzung wählt. Die Alternativen ändern hauptsächlich, wer den Arbeitsbereich besitzt und wie die Dateien wieder herausgegeben werden.
Der Wert none bedeutet, dass es weder ein Umgebungs-Dateisystem noch eine eingebaute Bash-Exekution gibt, obwohl Anwendungsfunktionen und entfernte MCP-Server dennoch Code an anderer Stelle ausführen können. Bei self_hosted läuft OpenAI weiterhin den Harness, doch Sie steuern die Ausführungsumgebung.
Die Handhabung der Ausgaben fällt unter diese Auswahl. Dateien in einer selbst gehosteten Umgebung werden nicht über OpenAI’s Artifacts API veröffentlicht, selbst wenn der Agent sie unter /workspace/outputs schreibt. Ihre Anwendung muss sie selbst abrufen und speichern.
Wichtige gehostete Einstellungen
Der gehostete Leitfaden behandelt außerdem Umgebungsvariablen, Fähigkeiten, Plugins sowie Kapazitätsverzeichnisse. Hier reichen Seed-Dateien sowie deaktivierter Zugriff auf das Sandbox-Netzwerk aus. Remote MCP-Verbindungen starten vom OpenAI-Service aus, weshalb die Sandbox-Ausgangseinstellungen nicht als Richtlinie für jede Tool-Verbindung beschrieben werden sollten.
03 Im Inneren des CSV-Runners
Der Code befindet sich in openai-agents-api/sandbox_check.py, und das vollständige Beispiel liegt im Verzeichnis openai-agents-api des Repositoriums techforum-repo ai-agents-experimentation auf GitHub. Der Runner erzeugt Beträge als Ganzzahlig-Cents und speichert seinen Seed. Jeder CSV enthält absichtlich schwierige Fälle: Währungssymbole, Tausendertrenner, unerwünschten Leerzeichen, eine negative Rückerstattung sowie einen N/A-Eintrag.
Die Seed-42-Eingabe
amount,note
$981.96 ,sale
" $1,838.10 ",sale
$42.78 ,sale
-$100.12,refund
N/A,voided
$155.92 ,sale
Der lokale Generator leitet die unten angegebene Referenz direkt aus diesen ganzzahligen Werten ab. Es handelt sich um das erwartete Ergebnis für dieses Testumfeld und nicht um eine Antwort eines aktuellen Live-Agenten.
{
"total_cents": 291864,
"valid_rows": 5,
"invalid_rows": 1
}
Die Anweisungen wurden gesendet
Dem Agenten wird die CSV-Datei zusammen mit einer schriftlichen Aufgabe übergeben, wobei die erwartete Antwort niemals die Anwendung verlässt. Zusammenfassung der Aufgabe: Erstellen Sie /workspace/outputs/calculate.py und führen Sie es mit Python aus; laden Sie /workspace/data.csv; entfernen Sie Leerzeichen, Dollarzeichen sowie Tausendertrenner von jeder Summe; ignorieren Sie Werte, die nicht numerisch sind, behalten Sie jedoch negative Rückerstattungen bei; führen Sie die Berechnungen mit Decimal oder ganzzahligen Cent-Werten durch, niemals mit binären Fließkommazahlen; erzeugen Sie /workspace/outputs/summary.json mit genau drei ganzzahligen Feldern mit den Namen total_cents, valid_rows und invalid_rows; zählen Sie jede Datenspur nur einmal und lassen Sie den Header aus; und behalten Sie calculate.py als Ausgabeartefakt bei.
Die Funktion run_trial() eröffnet eine Sitzung über client.beta.agents.sessions.create(), gibt gpt-6-astra sowie die entsprechenden Anweisungen als Agent weiter und lädt /workspace/data.csv über inline Base64 hoch. Die Umgebung ist openai_hosted mit network.access auf disabled gesetzt. Es handelt sich dabei um denselben API-Pfad, den das ursprüngliche Experiment verwendet hat.
Was wird überprüft und gespeichert
- Die richtige Turnierung wird verfolgt. Nach dem Abrufen der Sitzung prüft der Ausführende die Wurzelturnierung. Eine fehlgeschlagene Sitzung, eine erforderliche Aktion, eine fehlgeschlagene Turnierung, eine Stornierung sowie ein aufgebrauchtes Abfragenbudget führen jeweils zu einem eigenen, eindeutigen Ergebnis.
- Sowohl die angeforderten Dateien als auch
summary.jsonundcalculate.pywerden anhand des Pfads sowie der Turnier-ID abgeglichen, wodurch fehlende oder veraltete Dateien niemals akzeptiert werden können.
Die Anleitung zu den Artefakten erklärt, wie Dateien mit den Turns verknüpft werden, und die Anleitung zur Überwachbarkeit behandelt die Prüfung der Befehlsaktivitäten. Die automatisierte Überprüfung stellt sicher, dass die Dateien vorhanden sind und die strukturierte Ausgabe korrekt ist. Der gespeicherte Script und die Elemente verdienen trotzdem noch eine Prüfung, bevor jemand behauptet, wie die Berechnung durchgeführt wurde. Heruntergeladener Code wird niemals auf dem Rechner der Anwendung ausgeführt.
04 Was die fünf aufgezeichneten Versuche zeigen
Die ursprüngliche Ausführung protokollierte ihre Ergebnisse am 15. September 2026, wobei bei jedem Versuch ein neu zufällisiertes CSV-Datei verwendet wurde. Die Werte stammen aus dieser Ausführung. Es handelt sich um clientseitige Beobachtungen, die nach der Antwort auf die Anfrage erfolgten, wobei die Zeitenwerte sowohl die Erstellung der Sitzung als auch den Download der Ergebnisdatei ausschließen.
Jeder der fünf von dem Agenten gemeldeten Gesamtwerte stimmte mit den Referenzwerten überein. Bei dieser Überprüfung wurde eine Fließkommendarstellung mit einer Toleranz von unter einem Cent verwendet. Die Zeitanzeige zeigt an, wann beim Abfragen erstmals eine Veränderung und eine stabile Sitzung auftraten, sodass weder die genaue Serverausführungszeit noch die End-to-End-Latenz gemessen werden. Fünf erfolgreiche Versuche beschreiben das Geschehen in einer kleinen Ausführung und sagen nichts über eine allgemeine Zuverlässigkeitsrate aus.
Was sich durch den aktualisierten Ausführer ändert
Der überarbeitete Ausführungscode wiederholt dasselbe kleine Experiment mit einer strengeren Definition des Erfolgs. Ganzzahlige Cent-Werte sowie Anzahl der Zeilen werden genau verglichen, jede eingegebene Testdatei wird gespeichert, und das generierte Skript sowie die Sitzungshistorie werden aufbewahrt. Die Zeitmessung beginnt bereits vor der Erstellung der Sitzung, wobei das Herunterladen und die Überprüfung separat gestoppt werden. Acht Offline-Tests überprüfen diese Aspekte, und die oben genannten Werte beziehen sich weiterhin auf die frühere Live-Ausführung.
05 Fehlerbehandlung
Der Abfrageschleifen verwendet explizite HTTP-Timeouts, deaktiviert automatische Wiederholungsversuche und prüft zwischen den Anfragen den verbleibenden Versuchsbudget. Dieses Budget ist kein fester Timer zur Beendigung des Prozesses. Ein Versuch protokolliert sein Ergebnis, bevor eine Aufräumarbeit durchgeführt wird, und auch eine richtige Antwort in Kombination mit fehlgeschlagener Aufräumarbeit führt weiterhin zu einem nicht-nullen Abbruchcode.
Eine Sitzung kann vier Status haben: idle, in_progress, requires_action und failed. Die CSV-Aufgabe konfiguriert keine Anwendungsfunktionswerkzeuge, sodass, falls jemals eine Aktion erforderlich ist, der Ausführer diesen Zustand speichert und ihn zur Überprüfung meldet, anstatt ewig zu warten.
Live-Streams wiederholen nicht die verpassten Ereignisse. Um den Anzeigebildschirm der Anwendung wiederherzustellen, muss man sich erneut verbinden und eingehende Ereignisse puffern, während gleichzeitig die gespeicherten Sitzungsdaten abgerufen werden; anschließend wird durch die Item-ID abgeglichen. Dadurch wird die Anzeige der gespeicherten Arbeit wiederhergestellt, doch es wird nicht garantiert, dass ein unterbrochenes Kommando erfolgreich ausgeführt wurde.
Ein passendes Vorfallbeispiel verdient eine Erwähnung. Frühere Untersuchungsnotizen beschrieben Sitzungen, die untätig blieben, ohne sichtbare Zugriffe, und OpenAIs Vorfallbericht vom 14. September 2026 schildert verzögerte oder blockierte Starte von Zugriffen ab 13:30 Uhr Pazifischer Zeit an diesem Tag, die später als gelöst markiert wurden. Die Symptome stimmen überein, doch ohne Beweise auf Ebene der Anfragen belegen sie nicht die Ursache jeder lokalen Störung. Vergleichen Sie den Servicestatus mit den gespeicherten Sitzungen sowie den Fehlern bei den Zugriffen. Der Ausführungsprozess protokolliert fehlgeschlagene Sitzungen, fehlgeschlagene Zugriffe, fehlende Dateien, ungültige Zusammenfassungen sowie falsche Ergebnisse als getrennte Ereignisse, und er betrachtet einen unbeobachteten Zugriff nicht länger als Beweis dafür, dass der alte Vorfall wieder aufgetreten ist.
Sobald die verfügbaren Ergebnisse gespeichert sind, bittet der Ausführende um Stornierung, falls die Arbeit unvollendet ist, und versucht, die Sitzung zu löschen – wobei bei Konflikten bei der Löschung höchstens drei Versuche möglich sind. Jeder Aufräumfehler wird in result.json aufgezeichnet. Fällt die Erstellung der Sitzung bereits vor der Rückgabe einer ID fehl, ist eine Löschung nach ID nicht möglich, und der Ausführende dokumentiert diese Unsicherheit.
Ein gehosteter Arbeitsbereich kann nach einer Stunde ohne Aktivität oder Keep-Alive-Nachrichten ablaufen, während verbundene Sandboxes zwischen den Durchgängen Keep-Alive-Nachrichten erhalten. Veröffentlichte Artefakte überdauern das Ablaufdatum der Umgebung, doch die erforderlichen Ausgaben sollten vor der Löschung der Sitzung gespeichert werden.
06 Wann eigene Rechenressourcen verwenden
Eine gestrichelte Linie im erweiterten Architekturdiagramm gilt nur für selbst gehostete Rechenressourcen, während das hier gezeigte CSV-Experiment weiterhin auf von OpenAI gehosteten Rechenressourcen läuft. Das Selbsthosting lohnt sich, wenn die Aufgabe eine bestimmte Bilddatei, Zugang zu einem privaten Netzwerk oder bereits vorhandene Maschinen in Ihrem Pool erfordert. In dieser Umgebung starten Sie codex exec-server und übergeben ihm die entfernte URL sowie die Umgebungs-ID, zusammen mit einem auf die Umgebung beschränkten, eingeschränkten Schlüssel; der allgemeine Anwendungs-Schlüssel sollte außerhalb dieser Umgebung bleiben.
Ab diesem Punkt ist die Anwendung dafür verantwortlich, Ressourcen bereitzustellen, zu speichern, erneut zu verbinden und alles wieder abzubauen. Das Löschen einer OpenAI-Sitzung stoppt nicht die Rechenleistung des Anbieters, und die Wiederverwendung einer Umgebungs-ID bringt die Dateien nicht auf eine Ersatzmaschine zurück.
Das Selbsthosting macht den gesamten Service auch nicht lokal. Die aktuelle Agents-API speichert den Sitzungszustand, unterstützt die Datenspeicherung in den USA und bietet keine Option zur vollständigen Datenspeicherungsfreiheit.
Die Kosten müssen bei der Entscheidungsfindung berücksichtigt werden. Modelltokens und gehostete Rechenleistung werden getrennt abgerechnet, wobei die Preise für Container von der Speicherkapazität sowie den Abrechnungsintervallen abhängen. Erfassen Sie daher die tatsächliche Nutzung und schätzen Sie die Rechnung für einen Test nicht allein anhand der vergangenen Sekunden.
07 Durchführung des Experiments
Der Betrieb kostet echtes Geld, da eine separat abgerechnete API-Nutzung in Form von Credits oder eine aktive API-Abrechnung erforderlich ist, wofür eine Pro-Mitgliedschaft nicht aufkommt. Der Runner ruft GPT-6 Astra (gpt-6-astra) auf, wodurch viele Tests oder lange Laufzeiten der Agenten schnell die Credits aufbrauchen können, und die Zeit im gehosteten Sandbox-Umfeld führt zu zusätzlichen Rechenkosten. Führen Sie zunächst einen Test durch, schauen Sie sich das Nutzungsdashboard an und lesen Sie die Preisseite von Astra, bevor Sie weitere Tests durchführen.
Innerhalb des Repositoriums sollten Sie eine virtuelle Umgebung einrichten und das festgelegte SDK installieren. Es wird eine Anwendungs-API-Schlüssel benötigt, der das Lesen und Schreiben von Sitzungen sowie das Ausführen von Modell-Inferrenzfunktionen erlaubt. Jeder Test verbraucht Live-API-Tokens sowie Rechenleistung im gehosteten Umfeld.
cd openai-agents-api
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
export OPENAI_API_KEY="your-key"
python sandbox_check.py --seed 42 # Start with one trial
# python sandbox_check.py 5 --seed 42 # Optional: five trials
Der erste Befehl führt einen einzigen Versuch mit dem Seed 42 aus, während der optionale Befehl für fünf Versuche die Seeds 42 bis 46 verwendet. Die Ergebnisse werden in einem neuen Verzeichnis runs/ abgelegt, wobei pro Versuch ein eigenes Verzeichnis entsteht. Der SDK-Pin lautet openai==3.13.0, und die README-Dokumentation beschreibt die Ausgabedateien sowie die Befehlsoptionen.
trial-001/
data.csv # Exact input
expected.json # Local reference
request.json # Submitted configuration
session.json # Latest retrieved session
turns.json # Turn status, timestamps, usage
items.json # Saved messages and tool calls
artifacts.json # Published file metadata
summary.json # Downloaded result
calculate.py # Downloaded agent script
result.json # Checks, timing, errors, cleanup
Fehlerhafte Ausführungen behalten die vor dem Fehler erlangten Dateien bei. Ein Ausgangskodewert von Null erfordert genaue Überprüfungen der Ausgabe sowie die Bestätigung der Löschung der Sitzung nach jeder Ausführung. Um den Runner lokal ohne jegliche API-Aufrufe zu testen:
python -m unittest discover -s . -p test_sandbox_check.py -v
Ohne die Netzwerkverbindung zu berühren, prüft das Testset die Referenzmathematik, fehlerhafte Modellausgaben, veraltete oder fehlende Artefakte, fehlgeschlagene Sitzungen und Züge, erforderliche Aktionen, Anfragenfehler, die Handhabung von Fristen sowie fehlerhafte Aufräumarbeiten. Der überarbeitete Ausführer wurde noch nicht im Vergleich zum Live-Service validiert.
Der nachhaltige Wert des Projekts liegt in einer wiederholbaren Methode, um zu überprüfen, wie die Agents-API von einer Datei zu einem Artefakt übergeht. Ein abgeschlossener Zug ist ein Signal, während eine heruntergeladene und unabhängig überprüfte Ausgabe der eigentliche Akzeptanztest darstellt. Die Dokumentation wurde am 15. September 2026 überprüft, die Probewerte stammen aus dem ursprünglichen Experiment ohne neue Live-Messungen, und die verlinkten Anleitungen beschreiben die aktuelle Beta-Version, die sich ändern kann.