[{"data":1,"prerenderedAt":616},["ShallowReactive",2],{"tool-promptfoo-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":13,"about":21,"sources":25,"cover":50,"og":51,"expertise":52,"locales":53,"lang":55,"title":57,"description":58,"coverAlt":59,"url":24,"pricing":60,"kind":61,"metaTitle":62,"takeaways":63,"faq":69,"toc":82,"blocks":107,"others":379},"promptfoo","2026-07-07",10,"llmops",[9,10,11,12],"LLM evaluation","Red teaming","Prompt testing","CI\u002FCD",[4,14,15,16,17,18,19,20],"promptfoo vs langsmith","LLM evaluation framework","promptfoo red teaming","promptfooconfig.yaml example","LLM evals in CI","promptfoo pricing","open source LLM testing",[22],{"name":23,"url":24},"Promptfoo","https:\u002F\u002Fwww.promptfoo.dev",[26,29,32,35,38,41,44,47],{"title":27,"url":28},"Promptfoo documentation: intro","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fintro\u002F",{"title":30,"url":31},"Promptfoo pricing: plan comparison","https:\u002F\u002Fwww.promptfoo.dev\u002Fpricing",{"title":33,"url":34},"Promptfoo documentation: getting started","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fgetting-started\u002F",{"title":36,"url":37},"Promptfoo documentation: command line usage (exit codes)","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fusage\u002Fcommand-line\u002F",{"title":39,"url":40},"Promptfoo documentation: red team plugins","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fred-team\u002Fplugins\u002F",{"title":42,"url":43},"Promptfoo documentation: assertions and metrics","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fconfiguration\u002Fexpected-outputs\u002F",{"title":45,"url":46},"Promptfoo repository on GitHub (MIT licence)","https:\u002F\u002Fgithub.com\u002Fpromptfoo\u002Fpromptfoo",{"title":48,"url":49},"Promptfoo blog: Promptfoo is joining OpenAI (9 March 2026)","https:\u002F\u002Fwww.promptfoo.dev\u002Fblog\u002Fpromptfoo-joining-openai\u002F","\u002Fimages\u002Fblog\u002Fpromptfoo\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpromptfoo\u002Fog.jpg","ai-engineer",[54,55,56],"en","de","hu","Promptfoo: LLM-Evals und Red Teaming aus einer YAML-Datei","Promptfoo 2026: Evals und Red Team unter MIT-Lizenz, seit März 2026 im Besitz von OpenAI. Was es gut kann, wo der YAML-Ansatz bricht und was die Stufen kosten.","Diagramm: Eine promptfooconfig.yaml speist einen Runner, der jeden Provider aufruft, Assertions bewerten jede Ausgabe, und die Ergebnisse landen in einer Matrix für Viewer und CI-Gate.","MIT · Enterprise paid","Evaluation and red teaming","Promptfoo Test: Evals und Red Teaming · Balázs Csorba",[64,65,66,67,68],"Promptfoo ist eine MIT-lizenzierte CLI, die Qualitäts-Evals und Red Teaming aus einer YAML-Datei ausführt, und das Repository wurde mit der Ankündigung vom März 2026 Teil von OpenAI.","Die Community-Stufe ist kostenlos und enthält 10.000 Red-Team-Probes pro Monat; Dashboards, eigene Plugins, SSO und API sind Enterprise-Zeilen auf Anfrage.","Deklarative Testfälle sind der eigentliche Stärke, weil man eine Eval-Änderung als Diff lesen kann, ohne eine Python-Testsuite auszuführen.","Modellbewertete Assertions wie llm-rubric sind nicht deterministisch und kosten pro Zelle einen Judge-Aufruf, deshalb misst die Pass-Rate den Bewerter so sehr wie den Prompt.","Konfiguration und Testdaten portabel halten: MIT hält den Code forkbahr, aber ein Modellvergleichswerkzeug im Besitz eines Kandidaten ist ein Neutralitätsproblem, das die Lizenz nicht löst.",[70,73,76,79],{"q":71,"a":72},"Ist promptfoo kostenlos nutzbar?","Ja. Die Community-Version ist MIT-lizenziert, läuft lokal und enthält alle Evaluierungsfunktionen sowie bis zu 10.000 Red-Team-Probes pro Monat. Enterprise ergänzt individuelle Probe-Limits, Team-Freigaben, kontinuierliches Monitoring, SSO und API-Zugang; Enterprise und On-Premise sind auf Anfrage bepreist.",{"q":74,"a":75},"Was ist der Unterschied zwischen promptfoo evals und Red Teaming?","Evals führen Ihre Prompts gegen Testfälle aus und bewerten die Ausgaben mit Assertions wie Teilstring-Prüfungen, KostenSchwellen oder llm-rubric. Das Red Teaming generiert adversarielle Payloads gegen ein konfiguriertes Ziel: promptfoo redteam run führt die Probes aus und promptfoo redteam report macht aus den Funden einen Schwachstellenbericht.",{"q":77,"a":78},"Welche Modell-Provider unterstützt promptfoo?","Die Dokumentation nennt mehr als 60 Provider, darunter OpenAI, Anthropic, Google, Azure, Bedrock und lokale Modelle über Ollama. Alles andere lässt sich über einen eigenen HTTP-, Python- oder JavaScript-Provider ansprechen, sodass sich die Konfigurationsdatei nicht ändern muss, wenn das Modell hinter einem Endpunkt wechselt.",{"q":80,"a":81},"Was ist nach der Übernahme durch OpenAI mit promptfoo passiert?","Promptfoo kündigte am 9. März 2026 an, dass eine Übernahme durch OpenAI vereinbart worden sei, und stellte klar, dass das Produkt Open Source und MIT-lizenziert bleibt und das Team die Kunden weiter betreut. Das Repository beschreibt promptfoo jetzt als Teil von OpenAI, und die Dokumentation wird weiter gepflegt.",[83,86,89,92,95,98,101,104],{"id":84,"title":85},"what-it-is","Was es ist",{"id":87,"title":88},"how-it-works","Wie es funktioniert",{"id":90,"title":91},"getting-started","Erste Schritte",{"id":93,"title":94},"red-teaming","Red Teaming",{"id":96,"title":97},"ownership","Wem gehört es jetzt",{"id":99,"title":100},"where-it-shingles","Wo es klemmt",{"id":102,"title":103},"verdict","Fazit",{"id":105,"title":106},"sources","Quellen",[108,112,115,118,126,152,155,156,163,172,178,179,182,184,193,200,201,219,229,233,253,256,257,260,263,264,267,313,316,322,323,326,339,343,344],{"type":109,"content":110},"paragraph",[111],"Promptfoo ist eine Open-Source-CLI und Bibliothek, die LLM-Evaluierungen und adversariales Red Teaming aus einer einzigen YAML-Datei ausführt. Position vorweg: Es ist der praktischste Weg, eine Prompt-Änderung oder einen Modellwechsel in einen Textdiff zu verwandeln, den CI rot machen kann, und seit März 2026 ist es auch ein Eval-Tool, das OpenAI gehört.",{"type":109,"content":113},[114],"Es liegt zwischen einem Ordner mit Pytest-Skripten und einer gehosteten Evaluierungsplattform. Gegenüber LangSmith und Braintrust verzichtet man in der kostenlosen Stufe auf Dashboards, geteilte Historie und eine Team-Oberfläche, im Gegenzug läuft es auf dem eigenen Rechner, spricht direkt mit mehr als 60 Providern und braucht kein Konto. Gegenüber DeepEval tauscht man Python-Ausdrucksstärke gegen eine Konfigurationsdatei, die auch ohne Programmierkenntnisse im Review lesbar ist.",{"type":116,"level":117,"id":84,"text":85},"heading",2,{"type":109,"content":119},[120,121,125],"Zwei Produkte teilen sich ein Repository und ein Konfigurationsformat. Die Evaluierungsseite führt Prompts gegen Testfälle aus und bewertet die Ausgaben; die Red-Team-Seite greift ein konfiguriertes Ziel mit generierten Payloads an und dokumentiert die Funde als Schwachstellenbericht. Beides steuert ",{"tag":122,"children":123},"code",[124],"promptfooconfig.yaml",", beides läuft über dieselbe Kommandozeile und beides lässt sich in CI einbinden.",{"type":127,"ordered":128,"items":129},"list",false,[130,132,134,136,146,148,150],[131],"CLI und Bibliothek unter MIT-Lizenz: Version 0.124.0 auf npm, etwa 25,8k Sterne und 2,4k Forks auf GitHub",[133],"Deklarative Konfiguration: Prompts, Provider, Tests und Assertions in einer YAML-Datei",[135],"Mehr als 60 Provider, darunter OpenAI, Anthropic, Google, Azure, Bedrock, Ollama und eigene HTTP-, Python- oder JavaScript-Endpunkte",[137,138,141,142,145],"Zwei Befehle decken den Rest ab: ",{"tag":122,"children":139},[140],"promptfoo eval"," für Qualität, ",{"tag":122,"children":143},[144],"promptfoo redteam run"," für Sicherheit",[147],"Die Community-Stufe ist kostenlos und enthält 10.000 Red-Team-Probes pro Monat; Enterprise und On-Premise sind auf Anfrage bepreist",[149],"Der Anbieter nennt 350.000 Entwickler, 130.000 monatlich Aktive und mehr als 25 % der Fortune 500",[151],"Der Seitenfuß trägt SOC-2- und ISO-27001-Siegel, und die Dokumentation liefert eine GitHub Action für CI",{"type":109,"content":153},[154],"Was die kostenlose Stufe bewusst vorenthält, ist der gehostete Teil. Community hat kein Team-Dashboard, keine durchsuchbare Scan-Historie, kein kontinuierliches Monitoring und keine API; das sind Enterprise-Zeilen im Feature-Vergleich. Das Tool selbst bleibt ein lokaler Prozess, der Ihre Provider aufruft und Ergebnisse auf die Festplatte schreibt.",{"type":116,"level":117,"id":87,"text":88},{"type":109,"content":157},[158,159,162],"Eine Evaluierung ist eine Matrix. Die Konfiguration deklariert Prompts, Provider und Testfälle, der Runner bildet das Kreuzprodukt, schickt jede Zelle an jedes Modell und bewertet die Antwort gegen die an diese Zelle gebundenen Assertions. Assertions sind typisiert: Teilstring- und JSON-Schema-Prüfungen, Similarity-, Kosten- und Latenzschwellen sowie modellbewertete Prüfungen wie ",{"tag":122,"children":160},[161],"llm-rubric",", die einen zusätzlichen Modellaufruf kosten.",{"type":164,"attrs":165,"inner":169,"caption":170},"diagram",{"viewBox":166,"role":167,"aria-labelledby":168},"0 0 730 300","img","t-promptfoo d-promptfoo","\u003Ctitle id=\"t-promptfoo\">Wie eine promptfoo-Evaluierung abläuft\u003C\u002Ftitle>\u003Cdesc id=\"d-promptfoo\">Eine Pipeline aus vier Stufen: Die Konfigurationsdatei speist einen Runner, der jeden Provider parallel mit Caching aufruft, Assertions bewerten jede Ausgabe, und die Ergebnisse gehen an einen Web-Viewer und einen CI-Exit-Code. Darunter eine Matrix aus Prompts und Providern mit bestanden und nicht bestanden.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"26\" class=\"d-title\">Eine Konfiguration, ein Lauf\u003C\u002Ftext>\u003Ctext x=\"710\" y=\"26\" text-anchor=\"end\" class=\"d-label\">promptfoo eval\u003C\u002Ftext>\u003Crect x=\"20\" y=\"52\" width=\"150\" height=\"56\" rx=\"8\" class=\"d-accent\"\u002F>\u003Ctext x=\"34\" y=\"76\" class=\"d-text\">Konfiguration\u003C\u002Ftext>\u003Ctext x=\"34\" y=\"96\" class=\"d-small\">Prompts, Tests\u003C\u002Ftext>\u003Cpath d=\"M170 80 H196\" class=\"d-line\"\u002F>\u003Cpath d=\"M190 74 L198 80 L190 86\" class=\"d-line\"\u002F>\u003Crect x=\"200\" y=\"52\" width=\"150\" height=\"56\" rx=\"8\" class=\"d-box\"\u002F>\u003Ctext x=\"214\" y=\"76\" class=\"d-text\">Runner\u003C\u002Ftext>\u003Ctext x=\"214\" y=\"96\" class=\"d-small\">parallel, gecacht\u003C\u002Ftext>\u003Cpath d=\"M350 80 H376\" class=\"d-line\"\u002F>\u003Cpath d=\"M370 74 L378 80 L370 86\" class=\"d-line\"\u002F>\u003Crect x=\"380\" y=\"52\" width=\"150\" height=\"56\" rx=\"8\" class=\"d-mint\"\u002F>\u003Ctext x=\"394\" y=\"76\" class=\"d-text\">Assertions\u003C\u002Ftext>\u003Ctext x=\"394\" y=\"96\" class=\"d-small\">Ausgabe bewerten\u003C\u002Ftext>\u003Cpath d=\"M530 80 H556\" class=\"d-line\"\u002F>\u003Cpath d=\"M550 74 L558 80 L550 86\" class=\"d-line\"\u002F>\u003Crect x=\"560\" y=\"52\" width=\"150\" height=\"56\" rx=\"8\" class=\"d-sky\"\u002F>\u003Ctext x=\"574\" y=\"76\" class=\"d-text\">Viewer, CI\u003C\u002Ftext>\u003Ctext x=\"574\" y=\"96\" class=\"d-small\">Matrix, Exit-Code\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"152\" class=\"d-label\">ERGEBNIS-MATRIX\u003C\u002Ftext>\u003Crect x=\"20\" y=\"164\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"90\" y=\"164\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"160\" y=\"164\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-gold\"\u002F>\u003Crect x=\"230\" y=\"164\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"300\" y=\"164\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-box\"\u002F>\u003Crect x=\"20\" y=\"196\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"90\" y=\"196\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-gold\"\u002F>\u003Crect x=\"160\" y=\"196\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"230\" y=\"196\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"300\" y=\"196\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-box\"\u002F>\u003Crect x=\"20\" y=\"228\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"90\" y=\"228\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"160\" y=\"228\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-mint\"\u002F>\u003Crect x=\"230\" y=\"228\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-gold\"\u002F>\u003Crect x=\"300\" y=\"228\" width=\"62\" height=\"24\" rx=\"6\" class=\"d-box\"\u002F>\u003Ctext x=\"394\" y=\"176\" class=\"d-small\">jede Zelle ist ein Prompt x Test x Provider\u003C\u002Ftext>\u003Ctext x=\"394\" y=\"196\" class=\"d-small\">grün besteht, gold fällt durch, grau ist gecacht\u003C\u002Ftext>\u003Crect x=\"394\" y=\"212\" width=\"316\" height=\"44\" rx=\"8\" class=\"d-box\"\u002F>\u003Ctext x=\"408\" y=\"234\" class=\"d-text\">Exit-Code steuert den Pull Request\u003C\u002Ftext>\u003Ctext x=\"408\" y=\"250\" class=\"d-small\">100 bei fehlgeschlagenem Test, 1 bei jedem anderen Fehler\u003C\u002Ftext>",[171],"Die promptfoo-Evaluierungsmatrix: Jeder Prompt läuft gegen jeden Provider, Assertions bewerten jede Zelle, und der Exit-Code ist das, worauf CI reagiert.",{"type":109,"content":173},[174,175,177],"Der Runner arbeitet parallel und cached abgeschlossene Aufrufe, deshalb liest ein erneuter Lauf nach kleiner Änderung überwiegend den Cache. Die Ergebnisse öffnen sich in einem lokalen Web-Viewer als seitliche Matrix, und die CLI kann JSON, YAML, CSV oder HTML schreiben. Die Exit-Codes sind die Integrationsstelle: ",{"tag":122,"children":176},[140]," liefert 100, sobald mindestens ein Test fehlschlägt oder die Pass-Rate unter PROMPTFOO_PASS_RATE_THRESHOLD fällt, und 1 für jeden anderen Fehler.",{"type":116,"level":117,"id":90,"text":91},{"type":109,"content":180},[181],"Installation mit npm, brew oder pip, oder ohne Installation mit npx promptfoo@latest. Eine minimale Konfiguration, die zwei Modelle mit einem übersetzten Satz vergleicht:",{"type":122,"code":183},"# promptfooconfig.yaml: two models, one prompt, three checks\nprompts:\n  - 'Translate this sentence into {{language}}: {{input}}'\n\nproviders:\n  - openai:gpt-6-sol\n  - openai:gpt-6-luna\n\ntests:\n  - vars:\n      language: French\n      input: Hello world\n    assert:\n      - type: contains\n        value: 'Bonjour'\n      - type: llm-rubric\n        value: 'the translation is idiomatic and complete'\n      - type: cost\n        threshold: 0.01",{"type":109,"content":185},[186,188,189,192],{"tag":122,"children":187},[140]," führt jede Zelle dieser Matrix aus und gibt eine Pass-Rate aus; ",{"tag":122,"children":190},[191],"promptfoo view"," öffnet den seitlichen Vergleich im Browser. Das Flag -r tauscht Provider auf der Kommandozeile ohne Dateiänderung, so wie die Dokumentation einen Kandidaten gegen eine Basislinie prüft.",{"type":194,"variant":195,"title":196,"body":197},"callout","tip","Erst cachen, dann iterieren",[198],[199],"Der Runner hasht Konfiguration, Variablen und Provider-Parameter, deshalb wird eine unveränderte Zelle beim erneuten Lauf nicht erneut an die API geschickt. Modellbewertete Assertions sind die Ausnahme: Sie werden zur Laufzeit beurteilt und kosten pro Zelle einen Judge-Aufruf.",{"type":116,"level":117,"id":93,"text":94},{"type":109,"content":202},[203,206,207,210,211,214,215,218],{"tag":122,"children":204},[205],"promptfoo redteam init"," schreibt eine Red-Team-Konfiguration, ",{"tag":122,"children":208},[209],"redteam setup"," führt durch das Ziel, ",{"tag":122,"children":212},[213],"redteam run"," generiert und führt die Angriffe aus, und ",{"tag":122,"children":216},[217],"redteam report"," stellt die Funde dar. Die Dokumentation beschreibt jedes Plugin als ein trainiertes Modell, das Payloads für eine bestimmte Schwäche erzeugt, nicht als feste Wortliste.",{"type":127,"ordered":128,"items":220},[221,223,225,227],[222],"157 Plugins in sechs Kategorien: Marke, Compliance und Recht, Datensatz, Sicherheit und Zugriffskontrolle, Trust und Safety sowie eigene Tests",[224],"Sicherheits-Plugins ordnen den OWASP Top 10 for LLMs, der OWASP API Security Top 10 und MITRE ATLAS zu",[226],"Compliance-Plugins ordnen NIST AI RMF, ISO\u002FIEC 42001, DSGVO Artikel 5 und EU AI Act Artikel 5 zu",[228],"Plugins werden pro Ziel in der Konfiguration gewählt, sodass sich ein Scan auf die Kategorien eingrenzen lässt, die eine Anwendung tatsächlich offenlegt",{"type":116,"level":230,"id":231,"text":232},3,"framework-mappings","Framework-Zuordnungen",{"type":109,"content":234},[235,236,239,240,239,243,239,246,239,249,252],"Für Teams, die Abdeckung statt eines Fundhaufens vorzeigen müssen, sind die Framework-IDs der nützliche Teil: ",{"tag":122,"children":237},[238],"nist:ai:measure:1.1",", ",{"tag":122,"children":241},[242],"owasp:llm:01",{"tag":122,"children":244},[245],"iso:42001:privacy",{"tag":122,"children":247},[248],"gdpr:art5",{"tag":122,"children":250},[251],"eu:ai-act:art5",". Ein nach diesen IDs gruppierter Bericht ist ein Abdeckungsargument, dem ein Prüfer folgen kann. Das ist Compliance-Mechanik, kein Compliance-Versprechen: Das Tool zeigt, welche Probes gelaufen sind, nicht, dass das Produkt die Regelung erfüllt.",{"type":109,"content":254},[255],"Die Gratis-Obergrenze liegt bei 10.000 Probes pro Monat, und die Plugins, die zum Erzeugen und Bewerten von Payloads Inference brauchen, verbrauchen sie. Danach verweist die Preisübersicht für individuelle Limits auf Enterprise.",{"type":116,"level":117,"id":96,"text":97},{"type":109,"content":258},[259],"Am 9. März 2026 gab Promptfoo bekannt, dass eine Übernahme durch OpenAI vereinbart worden war. Der Beitrag versprach, dass das Produkt Open Source und MIT-lizenziert bleibt und das Team die Kunden weiter betreut, und nannte den Abschluss als von üblichen Bedingungen abhängig. Das Repository trägt jetzt die Zeile, dass Promptfoo Teil von OpenAI ist, und die Dokumentation wurde zuletzt am 7. Oktober 2026 aktualisiert.",{"type":109,"content":261},[262],"Die Lizenz hält den Code forkbahr; sie hält die Roadmap nicht neutral. Das technische Bedenken ist eng und konkret: Ein Tool, dessen Aufgabe es ist zu beantworten, welches Modell ausgeliefert wird, gehört jetzt einem der Kandidaten, und seine Red-Team-, Guardrail- und Model-Security-Produkte stehen neben der Agentenplattform von OpenAI. Die MIT-Lizenz verhindert keinen Fork, aber sie verpflichtet das Unternehmen auch nicht, den Modellvergleich voranzubringen.",{"type":116,"level":117,"id":99,"text":100},{"type":109,"content":265},[266],"Die erste Schwäche ist die Konfiguration selbst. Eine Datei mit einem Dutzend Prompts und vierzig Testfällen ist lesbar; eine mit vierhundert Fällen nicht, und alles, was eine Schleife, einen Join mit Produktionsdaten oder einen eigenen Parser braucht, führt in JavaScript-Assertion-Callbacks zurück, und damit ist die vermiedene Sprache zurück. Die zweite ist Bewertungsdrift: modellbewertete Assertions wandern zwischen Judge-Versionen, sodass eine grüne Suite amber wird, weil sich der Bewerter bewegt hat. Die dritte ist der Umfang, denn ein Security-Team, das einen Audit-Trail braucht, kauft Enterprise, egal wie gut die Evals sind.",{"type":268,"head":269,"rows":278},"table",[270,272,274,276],[271],"Tool",[273],"Oberfläche",[275],"Kostenlose Stufe",[277],"Kostenmodell",[279,287,296,304],[280,281,283,285],[4],[282],"YAML und CLI, läuft lokal",[284],"Volle Evals, 10k Red-Team-Probes pro Monat",[286],"MIT; Enterprise auf Anfrage",[288,290,292,294],[289],"LangSmith",[291],"Gehostete Plattform plus SDK",[293],"1 Seat und 5k Base-Traces pro Monat",[295],"Plus ab 39 USD pro Seat und Monat",[297,299,300,302],[298],"Braintrust",[291],[301],"Unbegrenzte Nutzer, 1 GB verarbeitete Daten",[303],"Pro mit 249 USD pro Monat",[305,307,309,311],[306],"DeepEval",[308],"Python, Pytest-Stil",[310],"Das gesamte Framework",[312],"Apache 2.0; dahinter eine gehostete Plattform",{"type":109,"content":314},[315],"Das Geschäftsmodell ist ein kostenloser Harness mit einer bezahlten Kontrollebene. Kontinuierliches Monitoring, ein zentrales Dashboard, eigene Plugins, organisationsweite Angriffsprofile, SSO, gespeicherte Ziele, durchsuchbare Historie und die API sind Enterprise-Zeilen, und On-Premise-Deployment fügt ein zweites Angebot hinzu. Ein Solo-Entwickler braucht das nie; ein Team, das belegen muss, was es im letzten Quartal getestet hat, schon.",{"type":194,"variant":317,"title":318,"body":319},"warn","Vertrauen in den Bewerter",[320],[321],"Modellbewertete Assertions liefern einen Score, keine Messung. Fixieren Sie das Judge-Modell, halten Sie eine kleine von Menschen gelabelte Stichprobe in der Suite und führen Sie sie bei jeder Änderung des Bewerters erneut aus; sonst misst die Pass-Rate den Bewerter so sehr wie den Prompt.",{"type":116,"level":117,"id":102,"text":103},{"type":109,"content":324},[325],"Promptfoo ist ein guter lokaler Harness mit einem ernsthaften Sicherheitsteil. Es ist schnell, prüfbar und ehrlich in dem, was es misst, und die Red-Team-Abdeckung ist inzwischen konkret genug, um darüber zu streiten. Die offene Frage ist nicht die Lizenz, die MIT bleibt, sondern wer entscheidet, welche Modelle das Tool überhaupt bemerkt.",{"type":127,"ordered":327,"items":328},true,[329,331,333,335,337],[330],"Nehmen Sie es, wenn Sie Prompt- und Modelländerungen in CI als Textdiffs gateen wollen, mit einem Exit-Code, der den Job fehlschlagen lässt.",[332],"Nehmen Sie es, wenn Sie vor dem Release adversariales Testen brauchen und es im selben Pull Request wie Ihre Qualitäts-Evals reviewed haben wollen.",[334],"Verzichten Sie darauf, wenn Sie einen gehosteten Dienst brauchen, denn Dashboards, geteilte Historie, Scan-Suche und API gibt es nur in Enterprise.",[336],"Verzichten Sie darauf, wenn Ihre Evaluierungslogik echten Code braucht, denn ein Python-Framework kostet weniger Aufwand als eine YAML-Datei, die sich in eine Schleife hineinzwängen muss.",[338],"Halten Sie Ihre Testdaten portabel: Die Konfiguration ist MIT und forkbahr, aber ein Modellvergleichswerkzeug, das einem der Kandidaten gehört, ist ein Neutralitätsproblem, das die Lizenz nicht löst.",{"type":340,"content":341},"quote",[342],"Eine Suite, die man im Pull Request lesen kann, schlägt ein Dashboard, durch das man klicken muss, und promptfoo ist auf dieser Prämisse gebaut. Der neue Eigentümer ist der Grund, Exit-Code und Testdaten portabel zu halten.",{"type":116,"level":117,"id":105,"text":106},{"type":127,"ordered":327,"items":345},[346,351,355,359,363,367,371,375],[347],{"tag":348,"href":28,"children":349},"a",[350],"Promptfoo-Dokumentation: Intro",[352],{"tag":348,"href":31,"children":353},[354],"Promptfoo-Preise: Stufenvergleich",[356],{"tag":348,"href":34,"children":357},[358],"Promptfoo-Dokumentation: Erste Schritte",[360],{"tag":348,"href":37,"children":361},[362],"Promptfoo-Dokumentation: Kommandozeile (Exit-Codes)",[364],{"tag":348,"href":40,"children":365},[366],"Promptfoo-Dokumentation: Red-Team-Plugins",[368],{"tag":348,"href":43,"children":369},[370],"Promptfoo-Dokumentation: Assertions und Metriken",[372],{"tag":348,"href":46,"children":373},[374],"Promptfoo-Repository auf GitHub (MIT-Lizenz)",[376],{"tag":348,"href":49,"children":377},[378],"Promptfoo-Blog: Promptfoo is joining OpenAI (9. März 2026)",[380,429,512,573],{"slug":381,"published":382,"minutes":383,"category":7,"tags":384,"keywords":390,"about":397,"sources":401,"cover":420,"og":421,"expertise":52,"locales":422,"lang":55,"title":423,"description":424,"coverAlt":425,"url":426,"pricing":427,"kind":428},"ollama","2026-09-29",11,[385,386,387,388,389],"Local inference","Open models","llama.cpp","GGUF","Model serving",[381,391,392,393,394,395,396],"ollama vs lm studio","ollama vs vllm","local llm runtime","gguf model server","ollama self hosting","ollama api",[398],{"name":399,"url":400},"Ollama (software)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOllama",[402,405,408,411,414,417],{"title":403,"url":404},"Ollama API documentation","https:\u002F\u002Fdocs.ollama.com\u002Fapi",{"title":406,"url":407},"Ollama on GitHub, with the MIT LICENSE file","https:\u002F\u002Fgithub.com\u002Follama\u002Follama",{"title":409,"url":410},"Ollama terms of service, last updated May 2026","https:\u002F\u002Follama.com\u002Fterms",{"title":412,"url":413},"Ollama pricing, cloud plans and per-token model rates","https:\u002F\u002Follama.com\u002Fpricing",{"title":415,"url":416},"Hardware support: Nvidia, AMD, Metal and Vulkan","https:\u002F\u002Fdocs.ollama.com\u002Fgpu",{"title":418,"url":419},"OpenAI compatibility, including what is not supported","https:\u002F\u002Fdocs.ollama.com\u002Fapi\u002Fopenai-compatibility","\u002Fimages\u002Fblog\u002Follama\u002Fcover.webp","\u002Fimages\u002Fblog\u002Follama\u002Fog.jpg",[54,55,56],"Ollama im Test: der freundliche Weg zu offenen Modellen","Ollama liefert offene Modelle über eine HTTP-API auf eigener Hardware aus. Was es gut macht, wo der Durchsatz zu kurz kommt, was die MIT-Lizenz nicht abdeckt.","Abstrakte Titelgrafik für den Ollama-Test","https:\u002F\u002Follama.com","MIT · free for personal use","Local inference runtime",{"slug":430,"published":431,"minutes":383,"category":7,"tags":432,"keywords":438,"about":446,"sources":453,"cover":505,"og":506,"expertise":52,"locales":507,"lang":55,"title":508,"description":509,"coverAlt":510,"url":449,"pricing":511,"kind":433},"portkey","2026-09-28",[433,434,435,436,437],"LLM gateway","Guardrails","Routing","Observability","Cost control",[439,440,441,442,443,444,445],"portkey ai gateway","portkey vs litellm","llm gateway comparison","llm gateway latency overhead","llm guardrails gateway","self-hosted llm gateway","portkey pricing",[447,450],{"name":448,"url":449},"Portkey","https:\u002F\u002Fportkey.ai",{"name":451,"url":452},"API gateway","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAPI_gateway",[454,457,460,463,466,469,472,475,478,481,484,487,490,493,496,499,502],{"title":455,"url":456},"Portkey docs: AI Gateway","https:\u002F\u002Fportkey.ai\u002Fdocs\u002Fproduct\u002Fai-gateway",{"title":458,"url":459},"Portkey docs: Getting started with the AI Gateway","https:\u002F\u002Fdocs.portkey.ai\u002Fdocs\u002Fguides\u002Fgetting-started\u002Fgetting-started-with-ai-gateway",{"title":461,"url":462},"Portkey docs: Gateway config object","https:\u002F\u002Fportkey.ai\u002Fdocs\u002Fapi-reference\u002Fconfig-object",{"title":464,"url":465},"Portkey docs: Guardrails","https:\u002F\u002Fportkey.ai\u002Fdocs\u002Fproduct\u002Fguardrails",{"title":467,"url":468},"Portkey docs: Guardrail endpoints and capabilities","https:\u002F\u002Fportkey.ai\u002Fdocs\u002Fproduct\u002Fguardrails\u002Fcapabilities",{"title":470,"url":471},"Portkey docs: Cache, simple and semantic","https:\u002F\u002Fportkey.ai\u002Fdocs\u002Fproduct\u002Fai-gateway\u002Fcache-simple-and-semantic",{"title":473,"url":474},"Portkey docs: Load balancing","https:\u002F\u002Fportkey.ai\u002Fdocs\u002Fproduct\u002Fai-gateway\u002Fload-balancing",{"title":476,"url":477},"Portkey docs: Enterprise hybrid deployment architecture","https:\u002F\u002Fportkey.ai\u002Fdocs\u002Fself-hosting\u002Fhybrid-deployments\u002Farchitecture",{"title":479,"url":480},"Portkey pricing","https:\u002F\u002Fportkey.ai\u002Fpricing",{"title":482,"url":483},"Portkey gateway on GitHub, MIT licensed","https:\u002F\u002Fgithub.com\u002FPortkey-AI\u002Fgateway",{"title":485,"url":486},"Portkey's own benchmark: gateway versus direct Bedrock","https:\u002F\u002Fgithub.com\u002FPortkey-AI\u002Fbenchmark-test",{"title":488,"url":489},"Portkey status page","https:\u002F\u002Fstatus.portkey.ai\u002F",{"title":491,"url":492},"Palo Alto Networks completes acquisition of Portkey, May 2026","https:\u002F\u002Fwww.paloaltonetworks.com\u002Fcompany\u002Fpress\u002F2026\u002Fpalo-alto-networks-completes-acquisition-of-portkey-to-secure-ai-agents",{"title":494,"url":495},"Palo Alto Networks: Prisma AIRS AI Gateway","https:\u002F\u002Fwww.paloaltonetworks.com\u002Fai-security\u002Fai-gateway",{"title":497,"url":498},"Cloudflare AI Gateway pricing","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fai-gateway\u002Freference\u002Fpricing\u002F",{"title":500,"url":501},"LiteLLM pricing","https:\u002F\u002Fwww.litellm.ai\u002Fpricing",{"title":503,"url":504},"OpenRouter pricing","https:\u002F\u002Fopenrouter.ai\u002Fpricing","\u002Fimages\u002Fblog\u002Fportkey\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fportkey\u002Fog.jpg",[54,55,56],"Portkey: ein LLM-Gateway für die Produktion, geprüft auf Routing, Guardrails und Kosten","Portkey bündelt Retries, Fallbacks, Cache, Guardrails und Kostenkontrolle hinter einer OpenAI-kompatiblen Schnittstelle. Was die Konfiguration gut löst und was das Gateway an Latenz kostet.","Ein Requestweg von der Anwendung durch das Portkey-Gateway zu drei Modellanbietern, darunter das Guardrail-Ergebnis und das Protokoll.","Free · from $49 per month",{"slug":513,"published":514,"minutes":6,"category":7,"tags":515,"keywords":521,"about":529,"sources":541,"cover":566,"og":567,"expertise":52,"locales":568,"lang":55,"title":569,"description":570,"coverAlt":571,"url":532,"pricing":572,"kind":516},"langfuse","2026-08-13",[516,517,518,519,520],"LLM observability","Tracing","OpenTelemetry","Self-hosting","Evaluation",[513,522,523,524,525,526,527,528],"langfuse vs langsmith","llm tracing tool","self-hosted llm observability","langfuse pricing","opentelemetry llm traces","llm cost tracking","prompt versioning",[530,533,535,538],{"name":531,"url":532},"Langfuse","https:\u002F\u002Flangfuse.com",{"name":518,"url":534},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOpenTelemetry",{"name":536,"url":537},"ClickHouse","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FClickHouse",{"name":539,"url":540},"Observability (software)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObservability_(software)",[542,545,548,551,554,557,560,563],{"title":543,"url":544},"Langfuse documentation: observability and application tracing","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fobservability\u002Foverview",{"title":546,"url":547},"Langfuse documentation: get started with tracing","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fobservability\u002Fget-started",{"title":549,"url":550},"Langfuse pricing: cloud plans, billable units and worked examples","https:\u002F\u002Flangfuse.com\u002Fpricing",{"title":552,"url":553},"Langfuse pricing: self-hosted plans and the feature comparison","https:\u002F\u002Flangfuse.com\u002Fpricing-self-host",{"title":555,"url":556},"Self-host Langfuse: deployment options, containers and storage services","https:\u002F\u002Flangfuse.com\u002Fself-hosting",{"title":558,"url":559},"Langfuse changelog: v4 is live (17 August 2026)","https:\u002F\u002Flangfuse.com\u002Fchangelog\u002F2026-08-17-langfuse-v4",{"title":561,"url":562},"Langfuse blog: Langfuse joins ClickHouse (16 January 2026)","https:\u002F\u002Flangfuse.com\u002Fblog\u002Fjoining-clickhouse",{"title":564,"url":565},"GitHub: langfuse\u002Flangfuse, the platform repository","https:\u002F\u002Fgithub.com\u002Flangfuse\u002Flangfuse","\u002Fimages\u002Fblog\u002Flangfuse\u002Fcover.webp","\u002Fimages\u002Fblog\u002Flangfuse\u002Fog.jpg",[54,55,56],"Langfuse-Test: Tracing, Prompts und Evals selbst gehostet","Langfuse legt LLM-Traces, Prompt-Versionen und Experimente auf eine MIT-lizenzierte Plattform. Was das Selbsthosten wirklich kostet, wie die Einheitspreise rechnen und wo es verliert.","Eine Pipeline vom gebündelten Application-Event über den Langfuse-Web-Container und den Object Storage in ClickHouse, mit Redis und PostgreSQL daneben.","MIT · paid from $59 per month",{"slug":574,"published":575,"minutes":6,"category":7,"tags":576,"keywords":581,"about":588,"sources":592,"cover":608,"og":609,"expertise":52,"locales":610,"lang":55,"title":611,"description":612,"coverAlt":613,"url":614,"pricing":615,"kind":433},"openrouter","2026-07-23",[433,577,578,579,580],"Model routing","Fallbacks","OpenAI-compatible","Pay per token",[574,582,441,583,584,585,586,587],"openrouter vs litellm","openrouter pricing","openai compatible api gateway","llm fallback routing","multi model api gateway","byok llm routing",[589],{"name":590,"url":591},"OpenRouter","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOpenRouter",[593,596,597,600,603,606],{"title":594,"url":595},"OpenRouter documentation: quickstart","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fquickstart",{"title":503,"url":504},{"title":598,"url":599},"OpenRouter documentation: model fallbacks","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fguides\u002Frouting\u002Fmodel-fallbacks",{"title":601,"url":602},"OpenRouter documentation: provider routing","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fguides\u002Frouting\u002Fprovider-selection",{"title":604,"url":605},"OpenRouter documentation index","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fllms.txt",{"title":607,"url":591},"Wikipedia: OpenRouter","\u002Fimages\u002Fblog\u002Fopenrouter\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenrouter\u002Fog.jpg",[54,55,56],"OpenRouter: ein API-Schlüssel vor jedem Modell im Katalog","OpenRouter packt 500+ Modelle von 80+ Anbietern hinter einen OpenAI-kompatiblen Endpunkt, mit Fallbacks und Weiterverrechnung zum Listenpreis. Kosten und Schwächen.","Anfragepfad durch OpenRouter: Client, Router, mögliche Anbieter, Fallback-Liste und das Modell, das tatsächlich antwortet.","https:\u002F\u002Fopenrouter.ai","Pay per token, no subscription",1791383550753]