LLMApi-:-Verwendung lokaler LLMs zur automatischen Simulierung von APIs in ASP..-NET Core MinimalAPI
Einleitung
Eine meiner konstanten Obsessionen ist Beispieldaten...... es ist ein oft ärgerlicher Aspekt der Entwicklung von Systemen, die Sie den Fang haben.... von Daten benötigen, um die Funtionalität beim Entwickeln des Systems zu testen. In Kombination mit meiner aktuellen Liebe zu ' assistiert ' , das Kodieren von zufälligen Ideen es führte ' , um die ceation eines kleinen LLM aktiviert Testdatengenerator zusammen mit einem Nuget-Paket mit einer Middleware, die simulierte API-Antworten mit einem API erzeugen können
Sie können die GitHub hier für das Projekt – alle öffentlichen Bereiche usw. –
Begriff
Wie bei einer Menge von "-AI Assisted-"-Kodierung Ideen begann es mit einer Idee über die Simulation der Ausgabe mit LLMs. .-Ich arbeitete an einem anderen Projekt.LucidForumsEin urkomisch dysfunktionales selbstbevölkertes LLM-basiertes Forum-Experiment und LLMs sind wirklich gut, wenn ein wenig langsames ) bei der Erzeugung von Probendaten so Was ist, wenn Ich könnte sie verwenden, um jede API zu simulieren.
Anforderungen
- Es sollte einfach sein, in einer ASPA.-NET Core App zu implementieren.
- Die Daten sollten ziemlich realistisch sein.
- Die Daten sollten zufällig sein.
- Es kann JSON akzeptieren, die dem LLM sagen, wie die Antwort sein sollte.
- Es kann lokale Open Source LLMs verwenden
- Es sollte frei sein, Nuget-Kontrolle zu verwenden
Dies ist, was ich kam mit .. .I' .ll fügen Sie mehr Details auf dem Denken hinzu, wie ich hinzufügen mehr Funktionalitäten ?. . Es ist wirklich ordentlich ' funktioniert und schneller als gefürchtet I' .
Zukünftige Ergänzungen werden wahrscheinlich Caching beinhalten, falls Sie schneller perf-.-
Hier ist das Readme für das Paket automatisch eingeklemmt
Meistlucid-.-mockllmapi
Was es tut Eine produktionsbereite ASP...NET Core Spoting-Plattform zur Generierung realistischer Mock API-Antworten mit LLMs...
Warum Sie es verwenden Fügen Sie intelligente Mock-Endpunkte zu jedem Projekt mit geraden Linien des Codes hinzu... keine Datenbanken... keine festkodierten Vorrichtungen... keine Wartung...
Companion-Paket - : Hauptsächlichlucid-.-Mockllmapi-.-Testing Testen von Dienstprogrammen mit fließender HttpClient-Integration
Wie man diese README liest
Diese README ist durch Design umfassend Wählen Sie Ihren Pfad
- Ich möchte dies in Minuten versuchen. Zu springen Schnellstart
- Ich möchte wissen, was dies tun kann Siehe auch: Merkmale im Überblick und Architektur
- Ich möchte verstehen, wie es funktioniert. Lesen Feature Dokumentation und Erweiterte Funktionen
Was ist die neue Version von -?
Letzten Monat Automatische JSON-Strukturkonsistenz über Endpunktaufrufe hinweg V. 2.5.0:- Sicherheitsverbesserungen: Unterstützung für das Abschneiden von Serialisierungsabhängigkeiten V. 2.3.0:- Full content type support Formularaufbauten ,-Datei-Uploads Umfassendes Testen von MS K3-Tests V. 2.2.0:- Pluggable Tools für die API-Integration - , , vor der Konfiguration von REST APIs - automatischer Kontextspeicherablauf V. 2.1.0:- Ratenbegrenzung: ,-Batching, ,-n---Komplettierungen mit mehreren Ausführungsstrategien
Click for detailed v2.5.0 feature breakdown
Details zur Version
SchwerpunktSicherheitsverbesserungen und Unterstützung für die AOT-/-Trimmung durch Entfernen von Serialisierungsabhängigkeiten.
Unterstützung für das Trimmen von / Alle Reflektionen entfernt, auf - basierende Serialisierungsabhängigkeiten entfernt
- Ausgeschieden
System.Text.JsonReflektionsnutzung - Manuelle JSON-Konstruktion in der gesamten Codebase
- Volle Kompatibilität mit AOT und Trimmung
- Keine Probleme mit der Auflösung des Laufzeittyps
- Kleinere binäre Größe und verbesserte Startleistung
Verbesserte Sicherheit Umfassende Sicherheitsverbesserungen
- Entfernt alle Reflection-basierte Serialisierung, die Typinformationen aussetzen könnte
- Eliminierte potenzielle Inferenz-Schwachstellen
- Sicherere JSON-Handhabung mit expliziten Typenbeschränkungen
- Reduzierte Angriffsfläche für Serialisierungs-basierte Exploits
- Besserer Schutz vor Deserialisierungsangriffen
Leistungsoptimierungen Verbesserte Runtime-Performance:
- Schnellere JSON-Konstruktion ohne Reflexion über Kopf
- Reduzierte Speicherzuweisungen
- Bessere Cache-Lokalität
- Verbesserte Startzeit für getrimmte Anwendungen
- Geringere Speicherabstände
Kompatibilität Volle Unterstützung für . NET Vorschau-Builds
- Manuelle JSON-Konstruktion durchweg, um Reflexionen zu vermeiden
- Alle Funktionen getestet und arbeiten auf -.-NET-Vorschau baut
- Keine kaputten Änderungen an bestehenden Funktionen
Verbesserung der Testergebnisse Verstärkte Testabdeckung
- Zusätzliche Tests für AOT-/-Trimmungsszenarien
- Sicherheitstests mit --fokussierter Einheit
- Leistungsvergleichstests
- Passrate mit allen neuen Tests
Siehe TEST-_-SUMMARY-.-md und UMSETZUNG, für vollständige Details
Click for detailed v2.3.0 feature breakdown
Details zur Version
SchwerpunktKomplette Inhaltstyp-Unterstützung für alle gängigen HTTP-Request-Formate, vollständig abwärtskompatibel mit v-2.2.0.
Form Körper Unterstützung Volle Unterstützung für application/x-www-form-urlencoded Inhaltstyp: .-Einzel- und Mehrfachwerte: ,-Automatische JSON-Konvertierung: ,-Manuelle Konstruktion für .-NET Kompatibilität: .-Kompatibilität: Perfekt zum Testen von HTML-Formularen und traditionellen Web-Apps:.-
Unterstützung für das Hochladen von Dateien Volle Unterstützung für multipart/form-data Einschließlich Dateiuploads.-Speicher--sicheres Streaming (8-KB-Puffer),-Metadatenextraktion M(-Dateiname,-Größe,-Inhaltstyp),-Mischformfelder und Dateien.-Inhalt wird abgeladen, um Speicher aufblähen. zu vermeiden
Beliebige Pfadlängen Unterstützung für tiefe Pfad-Nistungen über {**path} catch---all-Routing - .-Test mit tiefen Pfaden und komplexen Query Strings getestet - . - Keine praktische Begrenzung der Pfadtiefe bis zu ASP-MSC5-NET-Core-Standards
Umfassende Test-Suite 228-Tests neue )-Test mit allen Funktionen .-Formkörperparsing Tests ),-JSON-Handling Tests),-Integrationstests für vollständige HTTP-Workflows.-Test-Passrate ,-Nullregressionen .-Test
Kompatibilität Alle Funktionen getestet und arbeiten an .. NET Vorschau-Builds ?. ?
Siehe TEST-_-SUMMARY-.-md und UMSETZUNG, für vollständige Details
Click for detailed v2.2.0 feature breakdown
Details zur Version
SchwerpunktPluggable Tools für die API-Integration: ,, vor der Konfiguration von REST APIs: , und intelligentem Kontextspeicher: ., vollständig rückwärtskompatibel mit v-2.1.0.,
Pluggable Tools - Aktionssystem für & Rufen Sie externe REST-APIs oder Kettenmockendpunkte auf, um realistische Workflows und Entscheidungsbäume zu erstellen. Vollständige Dokumente
Konfigurierte REST-APIs Definieren Sie komplette API-Konfigurationen einmalig ,, , Anruf mit Namen , . , Form oder OpenAPI Spec Reference , , , gemeinsam genutztes Kontextmanagement , Werkzeugintegration , . , siehe appsettings.Full.json für vollständige Beispiele:
Dynamische Speicherverwaltung im Kontext Kontexte laufen jetzt ab nach den Minuten der Inaktivität von 15, konfigurierbar, 5-1440, mind.)., ohne Speicherlecks, automatischer Reinigung, ,, smart touch on access-.,
Intelligente gemeinsame Datenextraktion Automatisches Extrahieren von ALLE Felder aus den Antworten auf jedem Nesting-Niveau.Verschachtelte Objekte.
Verbesserte Dokumentation Neue umfassende Leitfäden für Werkzeuge Aktionen, Begrenzung der SteuersätzeL 347 vom 20.12.2013, S. 671. API Kontexte.
Inhaltsverzeichnis
Kernkonzepte
- Merkmale im Überblick Was dieses System tun kann
- Schnellstart Starten Sie in Minuten
- Architektur Wie alles zusammenpasst
- Nicht---Ziele Was ist das?
Protokolle Merkmale
- REST API Mocking
- GraphQL API Mocking
- SSE-Streaming
- SignalR Real---Zeit
- OpenAPI-Swagger
- gRPC-Dienstleistungen
Erweiterte Architektur
- Einstellungen
- Feature Dokumentation In---Tiefe-Führungen
- Erweiterte Funktionen
- Demo-Anwendungen
- Prüfung
Architektur im Überblick
Ein Motor – mehrere Protokolle – gemeinsame Infrastruktur Alle Funktionen teilen sich die gleiche Generation: ,-Kontext:,- und Steuerungssysteme: —-Geben Sie konsistentes Verhalten über REST-,-GraphQL.,-SSE],-Signal:
graph LR
Client[Client] -->|HTTP Request| API[LLMApi<br/>Minimal API]
API -->|Chat Completion| Ollama[Ollama API<br/>localhost:11434]
Ollama -->|Inference| Model[llm-model Model]
Model -->|Response| Ollama
Ollama -->|JSON/Stream| API
API -->|JSON/SSE| Client
API -.->|uses| Helper[AutoApiHelper]
style API fill:#4CAF50
style Helper fill:#2196F3
style Model fill:#FF9800
Schlüsselkomponenten
- Einzel-LLM-ClientAlle Protokolle verwenden die gleiche LLM-Integration mit Resilienzrichtlinien
- Gemeinsamer KontextspeicherAPI-Kontexte arbeiten über REST-, , GraphQL ,, , SignalR., und OpenAPI
- Gemeinsame MerkmaleDie Geschwindigkeitsbegrenzung von ,, das Caching, die Fehlersimulation von, und das Tokenmanagement gelten für alle
- Modulares DesignVerwenden Sie eine beliebige Kombination, nur das hinzufügen, was Sie brauchen
Siehe detaillierte Architekturdiagramme unten für Anforderungsfluss und Formregelung
Merkmale
Dieses Paket bietet sechs unabhängige Merkmale Verwenden Sie jede Kombination, die Sie benötigen Modulare Beispiele für Protokoll---spezifische Setups
REST API Mocking
- Super einfach:
AddLLMockApi()+MapLLMockApi("/api/mock")Sofortige Mock-API - FormregelungGeben Sie die genaue JSON-Struktur über den Header an.
- Alle HTTP-Methoden:-Unterstützt GETC,-POST-,-PUT-,-DELETE,-PATCH
- Wildcard RoutingJeder Pfad unter dem gewählten Endpunkt funktioniert
- Vollständiger Inhaltstyp Support ,( ,NEW in %
- JSON (
application/jsonStandard-JSON-Anforderungsstellen - Formkörper (
application/x-www-form-urlencodedEinreichung von HTML-Formularen - Dateiuploads (
multipart/form-dataDatei-Uploads mit Metadatenextraktion - Speicher , - , sicherDateiinhalt gestreamt und versenkt Nur Metadaten erhalten
- JSON (
- Willkürliche PfadlängenTiefenpfad-Nistung vollständig unterstützt
/api/mock/v1/api/products/electronics/computers/laptops/gaming/...)
GraphQL API-Mocking
- Native GraphQL Unterstützung:, POST bis
/api/mock/graphqlmit Standard GraphQL-Abfragen - Abfrage---getriebene FormenDie GraphQL-Abfrage selbst definiert die Antwortstruktur
- Variablen OperationenVolle Unterstützung für Variablen, , und Fragmente
- Richtige Fehlerbehandlung-: , gibt GraphQL ,- formatierte Fehler mit
dataunderrorsFelder
Server-Ausgesandte Ereignisse
- Progressives StreamingSSE-Unterstützung mit progressiver JSON-Generation
- Echtzeit-UpdatesDaten Token streamen-von -Token an Clients
- Alleinstehende WerkeKeine REST API-Einrichtung erforderlich
- Vollständiger SSE-Leitfaden | Kontinuierliches Streaming
SignalR Echtzeit-Streaming
- WebSocket StreamingKontinuierliche Echtzeit---Zeitmockdaten über SignalR
- Mehrere KontexteAusführen mehrerer unabhängiger Datenströme gleichzeitig
- LebenszyklusmanagementStarten von /Stop-Kontexten dynamisch mit Management API
- Alleinstehende WerkeKeine REST API-Einrichtung erforderlich
- SignalR-Demohandbuch
OpenAPI - Swagger Mock Generation
- Automatische Endpoint-GenerierungHinweis auf eine beliebige OpenAPI, / oder Datei
- Alle Operationen gedämpftJeder Pfad und jede Methode aus der Spezifikation wird zu einem Live-Endpunkt
- Schema---AntriebsdatenLLM erzeugt realistische Daten, die Ihren Schemas entsprechen
- Mehrere SpecsBeladen und Montieren mehrerer API-Spezifikationen gleichzeitig
- Alleinstehende WerkeKeine REST API-Einrichtung erforderlich
- Anleitung für OpenAPI-Funktionen
GRPC Service Mocking Macking MACKing M('NEW in v.1.7.0)"
- Protokolldatei hochladenHochladen von Dateien zum Generieren von gRPC-Diensten
- Unterstützung für DoppelprotokolleJSON über HTTP zum Testen von Binär-Protobuf für die Produktion
- Dynamische SerialisierungLaufzeit Protobuf-Kodierung ohne Codegenerierung
- LLM.-.Powered DataRealistische Antworten passend zu Ihren Proto-Meldungsdefinitionen
- Alleinstehende WerkeKeine REST API-Einrichtung erforderlich
- gRPC-Unterstützungshandbuch
Gemeinsame Merkmale
- KonfigurierbarKonfiguration der Appsettings von ., Json oder Inline
- Hochvariable DatenJede Anfrage erzeugt völlig unterschiedliche realistische Daten
- NuGet-PaketBequeme Ergänzung zu bestehenden Projekten
- AutoShape-Speicher für (-FormenDie JSON-Struktur des ersten Ansprechens wird automatisch gespeichert., , um konsistente Schemata über alle nachfolgenden Anfragen bis zum gleichen Endpunkt zu gewährleisten. Siehe Anleitung für AutoShape
- API KontextePflege der Konsistenz über verwandte Anfragen hinweg Vollständiger Leitfaden
- FehlersimulationUmfassende Fehlerprüfung mit den Statuscodes von /5xx und mehreren Konfigurationsmethoden
- Prüfung von VersorgungseinrichtungenPaket mit Begleitpersonen
mostlylucid.mockllmapi.Testingfür einfache HttpClient-Integration in Tests Siehe Abschnitt „Prüfung"
Nicht---Ziele
Was ist das?
- Ein Entwicklungs- und Prototyping-Tool für realistische Mock-Datengenerierung
- Perfekt für Frontend-Entwicklung, ,, API Design, ,, Demos und Tests
- Zero---Pflegealternative zu hardcodierten Vorrichtungen und Datenbank-Mocks
Was ist das?
- Keine Produktionsdatenquelle Generierte Daten sind realistisch, aber synthetisch
- Kein Ersatz für Vertragsprüfungen Verwenden Sie dies für die Entwicklung, um echte APIs separat zu validieren.
- Nicht für nicht validierten Produktionsverkehr Benutzereingabe geht direkt zu den LLM-Prompten Einspritzung möglich
- Keine Datenbank oder dauerhafter Speicher Kein Zustand zwischen den Anfragen beibehalten. Außer optionalen API-Kontexten.
- Kein Ersatz für echte Backend-Logik Business-Regeln – , validierung –, und Workflows bleiben vereinfacht
Wann es zu verwenden ist
- Frontends entwickeln, bevor Backends fertig sind
- Realistische Demos ohne Zugriff auf Produktionsdaten erstellen
- Prüfung von UI-Komponenten mit vielfältigen Datenszenarien
- Prototyping API entwirft und experimentiert mit Antwortformen
- Lernen von LLM-Integrationsmustern in .-NET
Wenn es NICHT zu verwenden ist
- In Produktionsumgebungen für echte Anwender
- Zum Testen der Authentisierungslogik /-Authorisationslogika (-Security Scheme ignoriert )-Test
- Wenn die Daten den strengen Geschäftsregeln oder der Validierung entsprechen müssen
- Für Lastprüfungen tatsächliche Leistung des Backends
- Wenn deterministische, reproduzierbare Daten über Testläufe erforderlich sind
Feature Dokumentation
Für detaillierte Guides mit Architekturdiagrammen - Anwendungsfälle - , und Implementierungsdetails
Anleitung für den Einsatz von Docker Komplette Docker-Einrichtung und -Ausführung
- Schnellstart mit Docker-Compose
- Beispiel für das Ende des Modells mit dem Modell llm.-
- Verfahren zur Konfiguration von Dateien für das Volume Mapping von ,
- GPU-Unterstützung: Multi---Backend-Einrichtung
- Produktionsüberlegungen und Fehlerbehebung
API-Referenz für Backend Vollständige Dokumentation des Managementendpunktes
- OpenAPI-Managementendpunkte
- API-Kontextverwaltung
- gRPC-Protomanagement
- SignalR-Naben
- Vollständiges Anfordern von Beispielen für die Antwort
Leitfaden für mehrere LLM-Backends Mehrfacher Provider-Support
- Verbinden Sie sich gleichzeitig mit Ollama- und LM-Studio
- Auswahl des Backends per Header anfordern
- Komplette Rückwärtskompatibilität mit Legacy-Konfigurationen
- AnbieterBesondere Beispiele und bewährte Verfahren
API Kontext-Leitfaden ,- , NEWSK1 ,
- Gemeinsamer Speicher über Anfragen hinweg für konsistente Multi---Schritt-Workflows
- E---Handelsströme , , , Aktienticker ,, , Spielzustand Beispiele
- Token-Management und intelligente Beschneidung
- Meerjungfrau Architektur-Diagramme
Geschwindigkeitsbegrenzungshandbuch für Batching NIEDERLANDE
- Unterstützung für die Generierung mehrerer Antwortvarianten
- Per.-.endpoint Statistik-Tracking mit gleitenden Durchschnitten
- Drei Batching-Strategien
- Detaillierte Timing-Header für die Leistungsprüfung
- Perfekt zum Testen von Backoff-Strategien und Timeout-Szenarien
Pluggable Tools Leitfaden für Aktionen NIEDERLANDE
- MCP---kompatible Architektur für erweiterbare Werkzeugintegration
- HTTP-Tools zum Aufruf externer APIs mit Authentifizierung
- Mock-Tools zur Erstellung von Entscheidungsbäumen und Workflows
- Vorlagesubstitution durch Umgebungsvariablenunterstützung
- Werkzeugketten mit Sicherheitsgrenzen und Ergebnis-Caching
- Phase (Ausdrücklich ),Ausdrucks-Phase 2Ausschnitts-(LLM-Ausrichtungs-),Auszugs-phase 3Auswertungs- und Ausbaufahrplan )
gRPC-Unterstützungshandbuch NIEDERLANDE
- Upload-Dateien für automatische gRPC Service Spoting
- Duale Unterstützung: :-JSON über HTTP und binär Protobuf
- LLM---powered realistische Reaktionserzeugung
- Vollständige Umsetzungsdetails und Teststrategien
Anleitung für OpenAPI-Funktionen
- Dynamisches Laden von Specs aus URLs , , , Dateien , oder Inline-JSON
- Automatische Endpoint-Generierung mit Pfadparametern
- Beispiele für die Reaktion mit der Petstore API anfordern
- SignalR-Integration für Echtzeit-Updates
Beispiele für modulare Architektur
- REST---only,-GraphQL---onally,-SignalR.--Setups
- Strategien zur Speicheroptimierung
- Protokolle mischen und anpassen
-
- Echtzeit-Datenstreaming-Einrichtung
- Kontext Lebenszyklus-Management
- Beispiele für die Client-Verbindung
-
- Vollständige Versionshistorie
- Breaking-Änderungen seit v-1.0!)
- Migrationsleitfäden
Zusammenfassung der Prüfung NIEDERLANDE
- Vollständige Dokumentation der Prüfabdeckung
- Tests mit detaillierter Aufschlüsselung
- Leistungskennzahlen und Validierung
- Alle erklärten Testkategorien
Zusammenfassung der Umsetzung NIEDERLANDE
- Aufbau und Datei upload implementation Details
- Manuelle JSON-Konstruktion für .-NET
- Speicher---sichere Datei-Handling-Architektur
- Vollständige Code-Änderungen und Begründung
Schnellstart
Installation
Hauptpaket„:"
dotnet add package mostlylucid.mockllmapi
Testen von Versorgungseinrichtungen (MSK)
dotnet add package mostlylucid.mockllmapi.Testing
Bietet fließende API für einfache HttpClient-Konfiguration in Tests. Siehe Abschnitt „Prüfung" für Details
Schnelles Starten mit Docker
Der schnellste Weg, um begonnen zu bekommen, keine Installation erforderlich
# Clone the repository
git clone https://github.com/scottgal/LLMApi.git
cd LLMApi
# Start everything with Docker Compose (includes Ollama + llm-model)
docker compose up -d
# Wait for model download (first run only, ~4.7GB)
docker compose logs -f ollama
# Test the API
curl "http://localhost:5116/api/mock/users?shape={\"id\":0,\"name\":\"\",\"email\":\"\"}"
Dass es ''s ist Die API läuft unter http://localhost:5116 mit Ollama-Backend
Siehe Komplette Anleitung für Docker für„:"
- Konfigurationsoptionen für das Volumen-Mapping von )
- Verwendung unterschiedlicher Modelle (-Gemma-3:4-B2-Mistral-MSC3-Nemo-)-
- Unterstützung der GPU
- Produktionsausbau
- Fehlerbehebung
Voraussetzungen für die lokale Entwicklung
Wenn Sie Docker-: nicht verwenden
- Installieren ,.-NET , 8.0-SDK oder später
- Installieren Ollama und ziehen Sie ein Modell.
ollama pull ministral-3:3b
Auswahl eines LLM-Modells
Dieses Paket war entwickelt und getestet mit ministral-3:3b Parameter der ),, die hervorragende Ergebnisse für alle Funktionen mit sehr schneller Leistung liefern, aber es funktioniert mit jedem Ollama-- kompatiblen Modell.
Empfohlene Modelle
| -Modell Größe | -Geschwindigkeit Qualität | -Kontext Am besten für | -Gewinde | ||
|---|---|---|---|---|---|
| Ministral--3:3-b (-default-)- | -m3- | -fast- | -fashion-m-sk6-m.sk7-mzk8-mc9-mg KILLER für JSON-!-Schnelles, präzises und riesiger Kontext | ||
| Gemma-3:4-b | -4-M | -MUSK3-MASK4-Gute Alternative für Maschinen mit niedrigerem --Ende | |||
| llama-3- | -M8- | -M-M -M- | -M sehr gut | -8-MH-MSC6-M/,-Fertigung | |
| Mistral---Nemo | 12 | Slower | Ausgezeichnete | -128-K- | Hochwertige massive Datensätze |
| Mistral-:7-b | -7-M | -M-M -M- | -M sehr gut | -8-M M- | -Alternative zu llm--Modell |
| phia-3- Schnelles schnelles Prototyping | |||||
| tinellama | ---1.1-- | --Very Fast -- | -- Basic -- | --MCSK6--Ultraressource -----constrained -- | -- |
EMPFEHLUNG DES :-Qwen-Coders für die Entwicklung
Qwen-Coder ist KILLER für JSON-Generation Hochpräzise, hochpräziser, großer Kontext
ollama pull ministral-3:3b
{
"MockLlmApi": {
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"MaxInputTokens": 8192
}
}
Warum es groß ist
- Außergewöhnlich schnell auf jeder Hardware
- Beste Genauigkeit der JSON-Generierung
- Kontextfenster der (, Griffe komplexe verschachtelte Strukturen
- Ausgebildet speziell für code/-strukturierte Daten
- Perfekt für CIP-/-CD Pipelines und Entwicklung
- Minimale Halluzinationen im Vergleich zu allgemeinen Modellen
PRODUKTION:- Mistral---Nemo - Beste Qualität - Massive Kontexte
Für die Produktion – --ähnliche Tests mit komplexen Schemas –:-
ollama pull mistral-nemo
{
"MockLlmApi": {
"ModelName": "mistral-nemo",
"Temperature": 1.2,
"MaxInputTokens": 8000
}
}
Warum es groß ist
- Höchste Qualität realistische Datengenerierung
- Kontextfenster von -128.K ( erfordert Konfiguration von Ollama)
- Am besten für komplexe verschachtelte Strukturen und große Datensätze
- Mehr kreative Variation der generierten Daten
- AnmerkungBenötigt mehr Ressourcen
Spezifische Konfiguration des Modells
Für Ministrale , -3:3 , b ,( , empfohlen , - , default , ): ,
{
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"MaxContextWindow": 262144 // 256K context window
}
für Gemma-3:4-b oder Lama-3:-
{
"ModelName": "llm-model", // or "mistral:7b"
"Temperature": 1.2,
"MaxContextWindow": 8192 // Set to model's context window size
}
Für die Mistral---Nemo-Produktion mit hoher Qualität
{
"ModelName": "mistral-nemo",
"Temperature": 1.2,
"MaxContextWindow": 32768, // Or 128000 if configured in Ollama
"TimeoutSeconds": 120 // Longer timeout for large contexts
}
Anmerkung: Mistral---nemo erfordert Ollama-Kontextkonfiguration für Kontexte der ,128'K'
Wo finden Sie MaxContextWindow?
# Check model info
ollama show {model-name}
# Look for "context_length" or "num_ctx" parameter
# Example output: "context_length": 8192
Für kleinere Modelle
{
"ModelName": "tinyllama",
"Temperature": 0.7 // Lower temperature for stability
}
Warum Temperatur-Materien?
- Größere Modelle kann mit hohen Temperaturen umgehen, unter Beibehaltung gültiger JSON
- Kleinere Modelle Sie benötigen niedrigere Temperaturen, um die Temperatur zu vermeiden.
- Ungültige JSON-Syntax Anführungszeichen
- Beschneidete Reaktionen mit Ellipsen
- Halluzinierte Feldnamen oder -strukturen
- Niedrigere Temperatur Vorhersehbarerer Ausgang weniger Vielfalt
- Höhere Temperatur Mehr kreative Ausgabe Mehr Vielfalt Aber riskanter für kleine Modelle
Installation
# RECOMMENDED for development (fastest, most accurate JSON)
ollama pull ministral-3:3b
# Alternative options
ollama pull gemma3:4b # Good for low-end machines
ollama pull llama3 # General purpose, good balance
ollama pull mistral-nemo # Highest quality (requires more RAM)
# Alternative options
ollama pull mistral:7b
ollama pull phi3
Wichtige Einschränkungen
- Kleinere Modelle (
tinyllama,phi3Arbeit, kann aber- Einfachere, abwechslungsreiche Daten generieren
- Struggle mit komplexen GraphQL-Abfragen
- Brauchen Sie mehr Wiederholung Versuche
- Arbeiten Sie am besten mit einfachen Abfragen und kleinen Antwortgrößen
- Alle Modelle kann kämpfen mit
- Sehr komplexe, tief verschachtelte GraphQL-Abfragen Konzentrationen in der Tiefe
- Viele Felder pro Objekt ](>10-Felder ®)
- Anforderungen an große Arrays Beschränken Sie sich auf Elemente für die Zuverlässigkeit
- Wenn Sie Fehler sehen über abgeschnittene JSON oder Kommentare
- Niedrigere Temperatur bis unter oder unter MSK
- Vereinfachen Sie Ihre GraphQL-Abfrage
- Erhöhung
MaxRetryAttemptsnicht mehr als 20 GHT
Grundlegende Verwendung
Programm .-cs-:-
using mostlylucid.mockllmapi;
var builder = WebApplication.CreateBuilder(args);
// Add LLMock API services (all protocols: REST, GraphQL, SSE)
builder.Services.AddLLMockApi(builder.Configuration);
var app = builder.Build();
// Map mock endpoints at /api/mock (includes REST, GraphQL, SSE)
app.MapLLMockApi("/api/mock");
app.Run();
Appsettings.-json-:-
{
"mostlylucid.mockllmapi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2
}
}
Das ,''s es jetzt alle Anfragen an /api/mock/** Intelligente Mock-Daten zurückgeben
AutoShape-Speicher für (-Formen
Konsistente JSON-Strukturen über Anfragen bis zum gleichen Endpunkt automatisch erhalten
Was es bewirkt
AutoShape erinnert sich an die JSON-Struktur von der ersten Antwort auf einen Endpunkt und wendet diese automatisch für alle nachfolgenden Anfragen auf denselben Endpunkt an.
- Konsequente Reaktionsschemata über mehrere Anrufe hinweg
- Kein Schemadrift während der Entwicklung
- Vorhersehbares API-Verhalten zum Testen
Schnelles Beispiel
# First request - generates free-form response
GET /api/mock/users/123
Response: {"id": 123, "name": "Alice", "email": "[email protected]", "role": "admin"}
# Second request - automatically uses same structure
GET /api/mock/users/456
Response: {"id": 456, "name": "Bob", "email": "[email protected]", "role": "user"}
# All subsequent requests use the same schema!
GET /api/mock/users/789
Response: {"id": 789, "name": "Carol", "email": "[email protected]", "role": "manager"}
Einrichtung
Standardmäßig aktiviert in der appsettings.json:
{
"MockLlmApi": {
"EnableAutoShape": true, // Default: true
"ShapeExpirationMinutes": 15 // Default: 15
}
}
Steuerung für Per---Anfragen
Deaktivieren Sie für spezifische Anforderungen
GET /api/mock/users/special?autoshape=false
Erneuern Sie eine schlechte Form
# If first response was incomplete, renew it:
GET /api/mock/users/1?renewshape=true
# New response replaces old shape template
Pfad-Normalisierung
Alle diese Anfragen haben die gleiche Form /api/mock/users/{id}):
GET /api/mock/users/123 # Numeric ID
GET /api/mock/users/abc-456 # Alphanumeric ID
GET /api/mock/users/550e8400-e29b... # UUID
Hauptmerkmale
- Standardmäßig aktiviert Funktioniert aus dem Kasten heraus
- Formerneuerung Befestigen Sie schlechte Formen mit
?renewshape=true - Expiration Formulare laufen nach Inaktivität aus.
- Intelligente Normalisierung Verschiedene IDs zu gleichen Endpunkten teilen Formen
- Explizites Überschreiben Die Bereitstellung von expliziter Form über Query-/-Header-MSC2-body überspringt die Autoform
- Funktioniert überall Endpunkte von , und GraphQL
Wann verwendet werden soll
Perfekt für
- Frontend-Entwicklung, die konsistente Mockdatenstrukturen benötigt
- Integrationstests, die vorhersehbare Schemata erfordern
- Demos, bei denen die Datenstruktur zwischen den Anfragen ändern sollte
- API-Prototyping mit sich entwickelnden, aber konsistenten Formen
Nicht erforderlich, wenn
- Mit expliziten Formen haben sie sowieso Vorrang
- Maximale Vielfalt in jeder Antwort wollen
- Testen von Schema-Entwicklungsszenarien
Fehlerbehebung
Formen, die nicht angewendet werden
- Kontrolle
EnableAutoShape: truein config - Prüfen Sie keine explizite Form zur Verfügung gestellt
- Ablaufzeit prüfen
Notwendigkeit, eine Form zu ändern
GET /api/mock/users/1?renewshape=true
Alle Formen programmatisch löschen
// Inject AutoShapeManager
autoShapeManager.ClearAllShapes();
Für eine vollständige Dokumentation siehe: CLUDE-.-md AutoShape Abschnitt.
Testabdeckung Tests, die alle autoshape Funktionalitäten abdecken
Einstellungen
Vollständige Konfigurationsreferenz Siehe Referenzhandbuch für die Konfiguration für alle Optionen Vollständiges Beispiel Siehe Appsettings.-Full-.-Json -® zeigt jedes Konfigurationsoption
Über die Appsettings....-json...Empfohlene Version...
{
"mostlylucid.mockllmapi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"TimeoutSeconds": 30,
"EnableVerboseLogging": false,
"CustomPromptTemplate": null,
// Token Management (NEW in v1.5.0)
"MaxInputTokens": 8192, // Ministral has 256K context
// Resilience Policies (enabled by default)
"EnableRetryPolicy": true,
"MaxRetryAttempts": 3,
"RetryBaseDelaySeconds": 1.0,
"EnableCircuitBreaker": true,
"CircuitBreakerFailureThreshold": 5,
"CircuitBreakerDurationSeconds": 30
}
}
Modell„-"Spezifische Token-GrenzwerteSiehe auch: LLMApi/appsettings.json für Konfigurationsbeispiele für verschiedene Modelle (-Llama - TinyLama-,- Mistral-,- usw. .).-Jedes Modell hat unterschiedliche Kontextfenstergrößen --Einstellung MaxInputTokens Entsprechende Angaben:
API KontexteFür detaillierte Informationen über die Verwendung von Kontexten, um Konsistenz über Anfragen zu erhalten . . API Kontext-Leitfaden.
Resilienzpolitik
Neu in v.1.2.0:- Integrierte Polly-Resilienzrichtlinien schützen Ihre Anwendung vor LLM-Serviceausfällen
Das Paket enthält zwei Resilienz-Muster, die standardmäßig aktiviert sind.
Exponentielle Rücklaufwiederholung
- Automatisch retries fehlgeschlagene LLM-Anfragen mit exponentiellen Verzögerungen
- Einschließlich Jitter, um donnernde Herdenprobleme zu verhindern
- Behandelt Verbindungsfehler-Timeouts und Nicht--Erfolgsstatuscodes
- Standardmäßige Versuche mit der zweiten Basisverzögerung
Leistungsschalter
- Öffnet nach aufeinanderfolgenden Ausfällen, um Kaskadenausfälle zu verhindern
- Bleibt für eine konfigurierte Dauer offen, bevor Testanfragen zugelassen werden
- Drei Staaten, die geschlossen sind, (, normales ),, offenes (, ablehnendes),, halb geöffnete -, geöffnetes (, Testing-)
- Standardmäßig Öffnet sich :- nach aufeinanderfolgenden Ausfällen, bleibt ,- für Sekunden geöffnet.
Konfiguration
{
"mostlylucid.mockllmapi": {
// Enable/disable retry policy
"EnableRetryPolicy": true,
"MaxRetryAttempts": 3,
"RetryBaseDelaySeconds": 1.0, // Actual delays: 1s, 2s, 4s (exponential)
// Enable/disable circuit breaker
"EnableCircuitBreaker": true,
"CircuitBreakerFailureThreshold": 5, // Open after 5 consecutive failures
"CircuitBreakerDurationSeconds": 30 // Stay open for 30 seconds
}
}
Protokollierung .: .
Die Resilienz-Richtlinien protokollieren alle Wiederholungsversuche und Änderungen des Leistungsschalterzustandes
[Warning] LLM request failed (attempt 2/4). Retrying in 2000ms. Error: Connection refused
[Error] Circuit breaker OPENED after 5 consecutive failures. All LLM requests will be rejected for 30 seconds
[Information] Circuit breaker CLOSED. LLM requests will be attempted normally
Wann man sich anpasst
- Langsam LLM-? Erhöhung
MaxRetryAttemptsoderRetryBaseDelaySeconds - Aggressive Erholung Reduzierung
CircuitBreakerDurationSeconds - Viele transiente Fehler Erhöhung
CircuitBreakerFailureThreshold - Deaktivieren Sie für lokale Tests. Beides einstellen
EnableRetryPolicyundEnableCircuitBreakerzufalse
Über Code
builder.Services.Addmostlylucid.mockllmapi(options =>
{
options.BaseUrl = "http://localhost:11434/v1/";
options.ModelName = "mixtral";
options.Temperature = 1.5;
options.TimeoutSeconds = 60;
});
Benutzerdefinierte Endpunktmuster
// Default: /api/mock/** and /api/mock/stream/**
app.Mapmostlylucid.mockllmapi("/api/mock");
// Custom pattern
app.Mapmostlylucid.mockllmapi("/demo");
// Creates: /demo/** and /demo/stream/**
// Without streaming
app.Mapmostlylucid.mockllmapi("/api/mock", includeStreaming: false);
Anwendungsbeispiele
Grundantrag
curl http://localhost:5000/api/mock/users?limit=5
Gibt realistische Benutzerdaten zurück, die durch das LLM-.® erzeugt wurden
Formkörper-Antworten in v.2.3.0)
HTML-Vorlageformular
curl -X POST http://localhost:5000/api/mock/users/register \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=john_doe&[email protected]&age=30"
Die Formulardaten werden automatisch in JSON konvertiert und zur realistischen Reaktionsgenerierung an die LLM übergeben.
Form mit mehreren Werten
curl -X POST http://localhost:5000/api/mock/posts \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "title=My Post&tags=tech&tags=programming&tags=llm"
Mehrere Werte für den gleichen Feldnamen werden automatisch in Arrays konvertiert.
Datei-Upload-Anfragen in v.2.3.0)
Einzelne Datei hochladen
curl -X POST http://localhost:5000/api/mock/photos/upload \
-F "title=My Photo" \
-F "description=Beautiful sunset" \
-F "[email protected]"
Mehrere Dateien mit Formdaten ,:
curl -X POST http://localhost:5000/api/mock/documents/bulk \
-F "title=Multiple uploads" \
-F "[email protected]" \
-F "[email protected]"
Wie Datei hochlädt Arbeit .:
- Dateiinhalt ist gestreamt durch einen Puffer und gedumpt Nicht im Speicher gespeichert
- Nur Metadaten werden beibehalten.:-Dateiname: ,-Inhaltstyp:,-Größe: , Bytes lesen
- LLM erhält Datei-Metadaten und erzeugt entsprechende Antwort
- Speicher---sicher für große Dateien mit (-getestet
Beispiel: Response
{
"message": "Files uploaded successfully",
"uploads": [
{
"fieldName": "image",
"fileName": "photo.jpg",
"contentType": "image/jpeg",
"size": 524288,
"processed": true
}
]
}
Tiefer Pfad verschachtelt sich in v.2.3.0)
Komplexe verschachtelte Pfade
curl "http://localhost:5000/api/mock/v1/api/products/electronics/computers/laptops/gaming/high-end/2024/details?brand=Dell&model=XPS15"
Das LLM integriert alle Pfadsegmente und Abfrageparameter in die realistische Reaktionsgenerierung..- Kein praktisches Limit für die Pfadtiefe.
Mit API-Kontext in v.1.5.0)
Verwenden Sie Kontexte, um die Konsistenz über mehrere verwandte Anfragen hinweg zu erhalten.
# Step 1: Create a user
curl "http://localhost:5000/api/mock/users?context=checkout-flow"
# Step 2: Create order for that user (LLM references user from context)
curl "http://localhost:5000/api/mock/orders?context=checkout-flow"
# Step 3: Add payment (LLM references both user and order)
curl "http://localhost:5000/api/mock/payments?context=checkout-flow"
Jede Anfrage im gleichen Kontext sieht die vorherigen Anfragen ,, , um konsistente IDs , , names und Datenbeziehungen zu gewährleisten.. , Perfekt für Multi- , - , Schritt-Workflows API Kontext-Leitfaden für komplette Beispiele
Mit Shape Control
curl -X POST http://localhost:5000/api/mock/orders \
-H "X-Response-Shape: {\"orderId\":\"string\",\"total\":0.0,\"items\":[{\"sku\":\"string\",\"qty\":0}]}" \
-H "Content-Type: application/json" \
-d '{"customerId":"cus_123"}'
LLM generiert Daten passend zu Ihrer exakten Formspezifikation.
Streaming von (-SSE-Servern
SSE-Streaming ist Teil der REST API, die nur beim Mapping von Endpunkten aktiviert wird.
// SSE streaming is automatically available at /api/mock/stream/**
app.MapLLMockApi("/api/mock", includeStreaming: true);
Verwendung
curl -N http://localhost:5000/api/mock/stream/products?category=electronics \
-H "Accept: text/event-stream"
Gibt Server zurück, wenn JSON ein Token erzeugt wird.
data: {"chunk":"{","done":false}
data: {"chunk":"\"id\"","done":false}
data: {"chunk":":","done":false}
data: {"chunk":"123","done":false}
...
data: {"content":"{\"id\":123,\"name\":\"Product\"}","done":true,"schema":"{...}"}
Beispiel für JavaScript
const eventSource = new EventSource('/api/mock/stream/users?limit=5');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.done) {
console.log('Complete:', data.content);
eventSource.close();
} else {
console.log('Chunk:', data.chunk);
}
};
Mit Formsteuerung
curl -N "http://localhost:5000/api/mock/stream/orders?shape=%7B%22id%22%3A0%2C%22items%22%3A%5B%5D%7D"
Der Streaming-Endpunkt unterstützt alle die gleichen Funktionen wie normale Endpunkte.
- Formregelung für die Parameter ,, Header , oder Body)
- Unterstützung von JSON Schema
- Benutzerdefinierte Eingabeaufforderung
- Alle HTTP-Methoden
GraphQL API Mocking
Neu in v.1.2.0:- Native GraphQL-Unterstützung mit Abfrage-Mock-Datengenerierung
LLMock API enthält integrierte GraphQL-Endpunkteunterstützung im Vergleich zu REST-Endpunkten, bei denen Sie Formen separat angeben. Graph QL-Abfragen definieren natürlich die genaue Struktur, die sie erwarten.
Schnellstart mit GraphQL
Der GraphQL-Endpunkt ist automatisch verfügbar, wenn Sie die LLMock API abbilden.
app.MapLLMockApi("/api/mock", includeGraphQL: true); // GraphQL enabled by default
Dies erzeugt einen GraphQL-Endpunkt bei /api/mock/graphql.
Grundlegende Verwendung
Einfache Abfrage
curl -X POST http://localhost:5000/api/mock/graphql \
-H "Content-Type: application/json" \
-d '{"query": "{ users { id name email role } }"}'
Ansprechrate
{
"data": {
"users": [
{ "id": 1, "name": "Alice Johnson", "email": "[email protected]", "role": "admin" },
{ "id": 2, "name": "Bob Smith", "email": "[email protected]", "role": "user" }
]
}
}
Mit Variablen
curl -X POST http://localhost:5000/api/mock/graphql \
-H "Content-Type: application/json" \
-d '{
"query": "query GetUser($userId: ID!) { user(id: $userId) { id name email } }",
"variables": { "userId": "12345" },
"operationName": "GetUser"
}'
Verschachtelte Abfragen
GraphQL-'s Leistung glänzt mit verschachtelten Daten
{
company {
name
employees {
id
firstName
lastName
department {
name
location
}
projects {
id
title
status
milestones {
title
dueDate
completed
}
}
}
}
}
Das LLM generiert realistische Daten, die Ihrer exakten Abfragestruktur entsprechen.
Beispiel für JavaScript-Clients
async function fetchGraphQL(query, variables = {}) {
const response = await fetch('/api/mock/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query, variables })
});
const result = await response.json();
if (result.errors) {
console.error('GraphQL errors:', result.errors);
}
return result.data;
}
// Usage
const data = await fetchGraphQL(`
query GetProducts($category: String) {
products(category: $category) {
id
name
price
inStock
reviews {
rating
comment
}
}
}
`, { category: 'electronics' });
Fehlerbehebung
GraphQL-Fehler werden im Standardformat zurückgegeben
{
"data": null,
"errors": [
{
"message": "Invalid GraphQL request format",
"extensions": {
"code": "INTERNAL_SERVER_ERROR"
}
}
]
}
Wie es funktioniert
- Parse-AntragExtrahieren Sie GraphQL-Abfrage und den Namen der Operation.
- Prompt erstellenSenden Sie die Abfragestruktur an das LLM mit Anweisungen, um passende Daten zu generieren
- Daten generierenLLM erstellt realistische Daten, die exakt zu den Abfragefeldern passen
- Wrap ResponseGibt Daten im GraphQL-Format zurück
{ "data": {...} }
Die wichtigsten Vorteile
- Keine Formspezifikation erforderlichDie GraphQL-Abfrage definiert die Struktur
- Typ SicherheitFragefelder explizit nach Namen anfordern
- Verschachtelte BeziehungenNatürliche Unterstützung für komplexe, verschachtelte Datenstrukturen
- StandardformatFunktioniert mit jeder GraphQL-Clientbibliothek
- Realistische DatenLLM erzeugt kontextabhängig passende Daten für jedes Feld
Prüfung von GraphQL
Nutzen Sie die enthaltenen LLMApi.http Datei, die bereit ist,- zu verwenden
- Einfache Benutzerabfrage
- Abfrage mit Variablen
- Verschachtelte Felder mit Arrays
- Produktkatalog für den Handel
- Komplexe Organisationsdaten
Siehe GraphQL-Beispiele auf LLMApi...http für komplette Arbeitsbeispiele
GraphQL-Konfiguration
Token Limits und Modellauswahl
GraphQL-Antworten können mit tief verschachtelten Abfragen groß werden. GraphQLMaxTokens Option „:"
{
"MockLlmApi": {
"GraphQLMaxTokens": 300 // Recommended: 200-300 for reliability
}
}
Token Limit Guidelines®:-
Empfohlene Max-Tokens Notizen |-------|----------------------|-------| | llm,-, Modell Optimale Balance von Geschwindigkeit und Komplexität | Mistral-:7-b Griffe verschachtelte Strukturen gut | phia-3- Bewahren Sie die Abfragen einfach auf | tinellama Verwenden Sie nur flache Abfragen
Warum Niedriger besser ist
- Die Aufforderung priorisiert Korrektheit über die Länge
- Untere Grenzen zwingen die LLM, einfacher zu generieren.
- Höhere Grenzwerte Risiko verkürzte Ansprechraten
- Wenn Sie sehen, dass LLM®" Fehler bei nicht gültigem JSON sind GraphQLMaxTokens reduzieren
Für komplexe verschachtelte Abfragen
- Verwenden Sie größere Modelle (-llm---Modell MS K2-mistral-:7-b-MS K4-
- Erhöhen Sie GraphQLMaxTokens auf MSA
- Halten Sie Array-Größen klein.
- Überwachen Sie Protokolle für Kurzbefehle
Beispielkonfiguration für komplexe Abfragen
{
"MockLlmApi": {
"ModelName": "llm-model", // Larger model
"GraphQLMaxTokens": 800, // Higher limit for nested data
"Temperature": 1.2
}
}
SignalR Echtzeit---Zeitdatenstreaming
LLMock API enthält optionale SignalR-Unterstützung für continuous - , , real -- ,time Mock Datengenerierung , . , Dies ist perfekt für ,: ,
- Dashboard Prototypen erfordern Live-Updates
- Prüfung von Echtzeit-UI-Komponenten
- Demos mit ständig wechselnden Daten
- Test der Integration von WebSocket-/-SignalR
Schnellstart mit SignalR
SignalR arbeitet unabhängig von der Verwendung der REST API-Endpunkte für SignalR-Streaming
Nur für die Einrichtung des minimalen Signals
using mostlylucid.mockllmapi;
var builder = WebApplication.CreateBuilder(args);
// Add SignalR services (no REST API needed!)
builder.Services.AddLLMockSignalR(builder.Configuration);
var app = builder.Build();
app.UseRouting();
// Map SignalR hub and management endpoints
app.MapLLMockSignalR("/hub/mock", "/api/mock");
app.Run();
Optional auch REST API hinzufügen
Wenn Sie auch die REST API-Endpunkte wollen, fügen Sie diese Zeilen hinzu.
// Add core LLMock API services (optional)
builder.Services.AddLLMockApi(builder.Configuration);
// Map REST API endpoints (optional)
app.MapLLMockApi("/api/mock", includeStreaming: true);
Konfigurieren Sie in Appsettings
{
"MockLlmApi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"SignalRPushIntervalMs": 5000,
"HubContexts": [
{
"Name": "weather",
"Description": "Weather data with temperature, condition, humidity, and wind speed"
},
{
"Name": "stocks",
"Description": "Stock market data with symbol, current price, change percentage, and trading volume"
}
]
}
}
Schließen Sie sich vom Client an
// Using @microsoft/signalr
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hub/mock")
.withAutomaticReconnect()
.build();
// Subscribe to a context
connection.on("DataUpdate", (message) => {
console.log(`${message.context}:`, message.data);
// message.data contains generated JSON matching the shape
// message.timestamp is unix timestamp in ms
});
await connection.start();
await connection.invoke("SubscribeToContext", "weather");
Konfiguration des Hubkontexts
Jeder Hub-Kontext simuliert eine komplette API-Anfrage und generiert kontinuierlich Daten
{
"Name": "orders", // Context name (SignalR group identifier)
"Description": "Order data..." // Plain English description (LLM generates JSON from this)
// Optional:
// "IsActive": true, // Start in active/stopped state (default: true)
// "Shape": "{...}", // Explicit JSON shape or JSON Schema
// "IsJsonSchema": false // Auto-detected if not specified
}
Empfohlene Verwendung von einfachen englischen Beschreibungen
Lassen Sie die LLM automatisch entsprechende JSON-Strukturen erzeugen.
{
"Name": "sensors",
"Description": "IoT sensor data with device ID, temperature, humidity, battery level, and last reading timestamp"
}
Das LLM erzeugt automatisch ein passendes JSON-Schema aus Ihrer Beschreibung. keine manuelle Form erforderlich.
Dynamic Context Creation API
Erstellen und Verwalten von SignalR-Kontexten zur Laufzeit mit Hilfe der Management-API
Kontext erstellen
POST /api/mock/contexts
Content-Type: application/json
{
"name": "crypto",
"description": "Cryptocurrency prices with symbol, USD price, 24h change percentage, and market cap"
}
Ansprechrate
{
"message": "Context 'crypto' registered successfully",
"context": {
"name": "crypto",
"description": "Cryptocurrency prices...",
"method": "GET",
"path": "/crypto",
"shape": "{...generated JSON schema...}",
"isJsonSchema": true
}
}
Alle Kontexte auflisten
GET /api/mock/contexts
Ansprechrate
{
"contexts": [
{
"name": "weather",
"description": "Realistic weather data with temperature, conditions, humidity, and wind speed for a single location",
"method": "GET",
"path": "/weather/current",
"shape": "{...}"
},
{
"name": "crypto",
"description": "Cryptocurrency prices...",
"shape": "{...}"
}
],
"count": 2
}
Hinweis: Der Listenendpunkt verschmilzt Kontexte, die in Appsettings konfiguriert sind, mit dynamisch erzeugten Kontexten zur Laufzeit.::: .® Beschreibungen aus Appsetsettings sind enthalten, auch wenn diese Kontexte noch nicht dynamisch registriert wurden.:.
Spezifischen Kontext erhalten
GET /api/mock/contexts/weather
Ansprechrate
{
"name": "weather",
"method": "GET",
"path": "/weather/current",
"shape": "{\"temperature\":0,\"condition\":\"string\"}",
"isJsonSchema": false
}
Kontext löschen
DELETE /api/mock/contexts/crypto
Ansprechrate
{
"message": "Context 'crypto' deleted successfully"
}
Ausgangskontext Datengenerierung fortsetzen)
POST /api/mock/contexts/crypto/start
Ansprechrate
{
"message": "Context 'crypto' started successfully"
}
Startet die Generierung von Daten für einen gestoppten Kontext, ohne dass verbundene Clients betroffen sind.
Kontext beenden _(-Pause Datengenerierung
POST /api/mock/contexts/crypto/stop
Ansprechrate
{
"message": "Context 'crypto' stopped successfully"
}
Stoppt die Generierung neuer Daten, hält aber den Kontext registriert..-Clients bleiben verbunden, erhalten jedoch keine Updates, bis sie wieder gestartet werden.
Vollständiges Client-Beispiel
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@microsoft/[email protected]/dist/browser/signalr.min.js"></script>
</head>
<body>
<h1>Live Weather Data</h1>
<div id="weather-data"></div>
<script>
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hub/mock")
.withAutomaticReconnect()
.build();
connection.on("DataUpdate", (message) => {
if (message.context === "weather") {
const weatherDiv = document.getElementById("weather-data");
weatherDiv.innerHTML = `
<h2>Current Weather</h2>
<p>Temperature: ${message.data.temperature}°F</p>
<p>Condition: ${message.data.condition}</p>
<p>Humidity: ${message.data.humidity}%</p>
<p>Updated: ${new Date(message.timestamp).toLocaleTimeString()}</p>
`;
}
});
connection.start()
.then(() => {
console.log("Connected to SignalR hub");
return connection.invoke("SubscribeToContext", "weather");
})
.then(() => {
console.log("Subscribed to weather context");
})
.catch(err => console.error(err));
</script>
</body>
</html>
Dynamische Kontexterstellung aus der Benutzeroberfläche
async function createDynamicContext() {
// Create the context
const response = await fetch("/api/mock/contexts", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
name: "stocks",
description: "Stock market data with ticker symbol, current price, daily change percentage, and trading volume"
})
});
const result = await response.json();
console.log("Context created:", result.context);
// Subscribe to receive data
await connection.invoke("SubscribeToContext", "stocks");
console.log("Now receiving live stock data!");
}
SignalR Hub-Methoden
Das MockLlmHub unterstützt die folgenden Methoden:
SubscribeToContext.(.string context. ).
- Subscribes the client to receive data updates for a specific context
- Kunde erhält
DataUpdateEreignisse mit generierten Daten - Neu in v.1.1.0:- Erhöht automatisch die Anzahl der Verbindung im Kontext
AbbestellenVomContext-Kontext-String
- Abonniert den Client aus einem Kontext
- Der Kunde erhält für diesen Kontext keine Updates mehr
- Neu in v.1.1.0:- Dekrementiert automatisch die Kontextanzahl von '
Veranstaltungen, die vom Kunden empfangen werden
Datenaktualisierung Enthält generierte Mock-Daten
{
context: "weather", // Context name
method: "GET", // Simulated HTTP method
path: "/weather/current", // Simulated path
timestamp: 1699564820000, // Unix timestamp (ms)
data: { // Generated JSON matching the shape
temperature: 72,
condition: "Sunny",
humidity: 45,
windSpeed: 8
}
}
Unterzeichnet Bestätigung des Abonnements
{
context: "weather",
message: "Subscribed to weather"
}
Abonniert Bestätigung der Abmeldung
{
context: "weather",
message: "Unsubscribed from weather"
}
Einstellungen
{
"MockLlmApi": {
"SignalRPushIntervalMs": 5000, // Interval between data pushes (ms)
"HubContexts": [...] // Array of pre-configured contexts
}
}
Unterstützung von JSON Schema
Hub-Kontexte unterstützen sowohl einfache JSON-Formen als auch vollständige JSON Schema.
Einfache Form
{
"Name": "users",
"Shape": "{\"id\":0,\"name\":\"string\",\"email\":\"string\"}"
}
JSON-Schema-:
{
"Name": "products",
"Shape": "{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"number\"},\"name\":{\"type\":\"string\"},\"price\":{\"type\":\"number\"}},\"required\":[\"id\",\"name\",\"price\"]}",
"IsJsonSchema": true
}
Das System auto---entdeckt JSON Schema durch die Suche nach $schema, typemit einem Quadratmetergewicht von mehr als 1 kg properties felds-.-
Architektur
graph TD
Client[SignalR Client] -->|Subscribe| Hub[MockLlmHub]
Hub -->|Join Group| Group[SignalR Group]
BG[Background Service] -->|Generate Data| LLM[Ollama LLM]
LLM -->|JSON Response| BG
BG -->|Push Data| Group
Group -->|DataUpdate Event| Client
API[Management API] -->|CRUD| Manager[DynamicHubContextManager]
Manager -->|Register/Unregister| BG
Komponenten :"
- MockLlmHubSignalR-Hubbearbeitung von Clientverbindungen und Abonnements
- MockDataBackgroundServiceGehosteter Service, der kontinuierlich Daten generiert
- DynamicHubContextManagerSicherheitsmanager für die Laufzeit-Kontextregistrierung
- HubContextConfigKonfigurationsmodell für jeden Datenkontext
Anwendungsfälle
Dashboard-Prototyping
// Subscribe to multiple data sources
await connection.invoke("SubscribeToContext", "sales");
await connection.invoke("SubscribeToContext", "traffic");
await connection.invoke("SubscribeToContext", "alerts");
// Now receiving live updates for all three!
IoT-Simulation
{
"Name": "sensors",
"Description": "IoT temperature sensors with device ID, current temperature, battery percentage, and signal strength",
"Path": "/iot/sensors"
}
Finanzdaten
{
"Name": "trading",
"Description": "Real-time stock trades with timestamp, symbol, price, volume, and buyer/seller IDs",
"Path": "/trading/live"
}
Spielendes Leaderboard
{
"Name": "leaderboard",
"Description": "Gaming leaderboard with player name, score, rank, level, and country",
"Path": "/game/leaderboard"
}
Kontext Lebenszyklusmanagement
Neu in v.1.1.0:- Volle Lebenszykluskontrolle über SignalR-Kontexten mit Echtzeit---Statusverfolgung
Jeder Kontext hat die folgenden Eigenschaften:
- Ist aktiv.: . Ob der Kontext Daten erzeugt . . ( .default .
- VerbindungszählenAnzahl der aktuell angeschlossenen Clients
Kontexte können in zwei Zuständen sein
- AktivHintergrunddienst erzeugt neue Daten jeder
SignalRPushIntervalMs,( , default , : , 5 , sekunden , ) - AngehaltenKontext bleibt registriert, , Clients bleiben verbunden, , aber es werden keine neuen Daten generiert
Hauptmerkmale
- Kontexte starten, ohne Clients zu trennen
- Echtzeit-Verbindungszählerverfolgung
- Status-Abzeichen zeigen aktiven Zustand
- Doppelte Kontextprävention
- Kontexte aus der Appsettings-Anwendung .-json erscheinen automatisch in der Benutzeroberfläche
Ansprech-Caching für SignalR.:. Neu in v.1.1.0:- Intelligentes Caching reduziert LLM-Last und verbessert die Konsistenz
- Batch-VorfüllungErzeugt Antworten auf einmal, die über
MaxCachePerKey) - Kontext WarteschlangenJeder Kontext pflegt seinen eigenen Cache von vor- und generierten Antworten
- Hintergrund NachfüllenDer Cache wird automatisch nachgefüllt, wenn er unter die Kapazität des Speichers fällt.
- Intelligente PlanungMinimiert LLM-Aufrufe unter Beibehaltung der Datenfrischheit
Dies reduziert die LLM-Last für hochfrequente Kontexte, besonders bei mehreren Clients,
Beispiel Workflow - :
# Create a context
POST /api/mock/contexts
{ "name": "metrics", "description": "Server metrics" }
# Stop data generation (clients remain connected)
POST /api/mock/contexts/metrics/stop
# Resume data generation
POST /api/mock/contexts/metrics/start
# Remove context entirely
DELETE /api/mock/contexts/metrics
OpenAPI - Swagger Mock Generation
Neue Funktion Automatische Generierung von Mockendpoints aus den OpenAPI-Spezifikationen/-Swagger-Specifications!-Point to any OpenAPI - 3.0/-Swaiger-Spekulationen (-URL oder Datei) und die Bibliothek erstellt Mock Endpoints für alle definierten Operationen..-
Schnellstart mit OpenAPI
dotnet add package mostlylucid.mockllmapi
Programm .-cs-:-
using mostlylucid.mockllmapi;
var builder = WebApplication.CreateBuilder(args);
// Add OpenAPI mock services
builder.Services.AddLLMockOpenApi(builder.Configuration);
var app = builder.Build();
app.UseRouting();
// Map OpenAPI-based mock endpoints
app.MapLLMockOpenApi();
app.Run();
Appsettings.-json-:-
{
"MockLlmApi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"OpenApiSpecs": [
{
"Name": "petstore",
"Source": "https://petstore3.swagger.io/api/v3/openapi.json",
"BasePath": "/petstore",
"EnableStreaming": false
},
{
"Name": "myapi",
"Source": "./specs/my-api.yaml",
"BasePath": "/api/v1"
}
]
}
}
Alle Endpunkte aus Ihrer OpenAPI-Spezifikation sind jetzt als intelligentes LLM-M--powered-Mods erhältlich.
Wie es funktioniert
- Spec LadenLadet OpenAPI-Spezifikationen aus URLs oder lokalen Dateien.
- SchemaumwandlungUmwandelt OpenAPI-Schemas in JSON-Formvorlagen
- Endpunkt-MappingAlle Operationen automatisch auf ASP-.-NET Core-Endpunkte abbilden
- Erzeugung von LLMVerwendet LLM, um realistische Mock-Daten zu erzeugen, die dem Schema entsprechen
- PfadparameterBehandelt Pfadparameter wie z.B.
/users/{id}automatisch
Einstellungen
Jede OpenAPI-Spezifikation unterstützt diese Konfigurationsoptionen
Beschreibung des Objekts
|----------|------|-------------|
| Name Eindeutiger Identifikator für diese Spezifikation
| Source URL oder Dateipfad zu OpenAPI Spec
| BasePath Die Zeichenfolge | überschreiben den Basispfad "MSC2" verwendet Spec-'s servers[0].url) |
| EnableStreaming ,| bool , | , Hinzufügen /stream Suffix für das SSE-Streaming
| IncludeTags Zeichenkette[Nur Endpunkte mit diesen Tags generieren
| ExcludeTags Zeichenkette[Endpunkte mit diesen Tags überspringen
| IncludePaths Zeichenkette[Nur diese Pfade zu generieren, unterstützt Wildcards wie z.B. /users/*) |
| ExcludePaths Zeichenkette[Überspringen Sie diese Pfade (Unterstützt Wildcards
Erweiterte Konfigurationsbeispiele
Filtern nach Tags
{
"Name": "petstore",
"Source": "https://petstore3.swagger.io/api/v3/openapi.json",
"IncludeTags": ["pet", "store"]
}
Filtern nach Pfaden
{
"Name": "api",
"Source": "./specs/api.yaml",
"IncludePaths": ["/users/*", "/products/*"],
"ExcludePaths": ["/admin/*"]
}
Streaming aktivieren
{
"Name": "api",
"Source": "./specs/api.yaml",
"BasePath": "/api",
"EnableStreaming": true
}
Testen von OpenAPI Mocks
Angesichts dieser OpenAPI-Spezifikationskonfiguration
{
"Name": "petstore",
"Source": "./specs/petstore.json",
"BasePath": "/petstore"
}
Und eine Spezifität definieren GET /pet/{petId} die eine Pet Objekt: ,, du kannst testen :,
# Get a pet by ID
curl http://localhost:5116/petstore/pet/123
# Response (generated by LLM based on Pet schema):
{
"id": 123,
"name": "Fluffy",
"category": {
"id": 1,
"name": "Cats"
},
"photoUrls": ["https://example.com/fluffy.jpg"],
"tags": [
{"id": 1, "name": "cute"},
{"id": 2, "name": "playful"}
],
"status": "available"
}
Modulare Nutzung
OpenAPI-Mocks arbeiten unabhängig von REST-/-GraphQL./-SignalR.:-
// Just OpenAPI mocks
builder.Services.AddLLMockOpenApi(builder.Configuration);
app.MapLLMockOpenApi();
// Or combine with other features
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockOpenApi(builder.Configuration);
app.MapLLMockRest("/api/mock");
app.MapLLMockOpenApi();
Unterstützte Spec Formate
- Öffnen Sie die API. ](-JSON oder YAML-)-
- Öffnen Sie die API. ](-JSON oder YAML-)-
- Swagger - 2.0- ](-JSON oder YAML-)-
Hauptmerkmale
- Automatische Endpoint-GenerierungAlle Pfade und Operationen von Spec werden zu Mockendpoints
- Schema---getriebenAus OpenAPI-Antwortschemas abgeleitete Antwortformen
- PfadparameterGriffe
/users/{id},/posts/{postId}/comments/{commentId},,, usw. , . - Mehrere SpecsBeladen und Montieren mehrerer API-Spezifikationen gleichzeitig
- Intelligente FilterungEinschließen von Operationen durch Tags oder Pfade
- Streaming-UnterstützungOptionales SSE-Streaming für jeden Endpunkt
- LLM.-.PoweredErzeugt realistische, abwechslungsreiche Daten für jedes Schema
Anwendungsfälle
- API.-.Erste EntwicklungStarten Sie die Codierung gegen Spec, bevor das Backend fertig ist
- Frontend PrototypingEntwickeln Sie Benutzeroberfläche, während API gebaut wird
- IntegrationsprüfungTesten Sie den Clientcode ohne echte API-Abhängigkeiten
- DemoumgebungenVorzeigeapps ohne API-Zugriff in der Produktion
- VertragsprüfungÜberprüfe, ob alle Schemavariationen korrekt behandelt werden
- BelastungsprüfungErzeugen realistischer Testdaten im Maßstab
Einschränkungen
- Derzeit unterstützt Reaktionsschemase nur die Validierung nicht erzwungen.
- Sicherheitsvorkehrungen werden ignoriert.
- Nur Anwendungs-Inhaltstyp für Antworten unterstützt
- Pfadparameterwerte werden nicht gegen Schemabeschränkungen validiert
OpenAPI-Verwaltung testen
Einschließlich management.http Datei enthält umfassende Beispiele für alle Managementendpunkte
Spec Management:
- Spezifik von URL laden (-Petstore-,-GitHub API, , usw. .)-
- Spezifität aus der lokalen Datei laden
- Spezifität von rohem JSON-/-YAML laden
- Alle geladenen Spezifikationen auflisten
- Spezielle Details mit Endpunkten erhalten
- Spezifik neu laden aus Quelle aktualisieren
- Spezifik löschen
Endpunktprüfung:
- Test GET-Endpunkte mit Pfadparametern
- POST-/-PUT-/-DELETE-Endpunkte testen
- Testendpunkte mit Abfrageparametern
- Mehrere Endpunkte in Folge testen
Fortgeschrittene Workflows:
- Mehrere Spezifikationen gleichzeitig laden
- Vergleich OpenAPI mocks vs regelmäßig spots
- Batch-Betrieb
- Beispiele für Fehlerbehandlungen
Beispiel aus der Geschäftsleitunghttp:
### Load Petstore API
POST http://localhost:5116/api/openapi/specs
Content-Type: application/json
{
"name": "petstore",
"source": "https://petstore3.swagger.io/api/v3/openapi.json",
"basePath": "/petstore"
}
### Test an endpoint
POST http://localhost:5116/api/openapi/test
Content-Type: application/json
{
"specName": "petstore",
"path": "/pet/123",
"method": "GET"
}
Siehe das vollständige Geschäftsführung: http:www.msk.org/ Datei für das Bereitstellen von - Zu verwenden von Beispielen für -
Demo-Anwendungen
Das Paket beinhaltet komplette Demo-Anwendungen mit interaktiven Schnittstellen mit Vollkontext-Management.
Windows-Desktop-ClientLLMockApiClient/WPF-Anwendung in der Entwicklung
ENTWICKLUNGSSTATUSDer Windows-Desktop-Client befindet sich derzeit in der aktiven Entwicklung.Während viele Funktionen funktional sind, können einige Funktionalitäten unvollständig sein oder Änderungen unterliegen.
Eine umfassende WPF-Desktopanwendung für die Interaktion mit der LLMock API.
Merkmale
- DashboardEchtzeit-Verbindungsstatus und Systemüberwachung
- SignalR Real---ZeitKontexte erstellen und Live-Datenströme abonnieren
- SSE-Streaming3 Streaming-Modi (Tokens,« Objekte,« Array-Elemente)«
- OpenAPI-ManagerBelastungsspezifikationen aus den Testendpunkten von URL-/.JSON-MSC2.
- gRPC-DienstleistungenTesten Sie die gRPC-Methoden
- Mit APIs abspielenInteraktiver HTTP-Testspielplatz
- Unterstützung für Multi---BackendsKonfigurieren und Umschalten zwischen mehreren Backends
- VerkehrsüberwachungLive-HTTP-Request-Antwortprotokollierung
- Dark-/-Licht-DesignUmschalten zwischen Themen mit glatten Übergängen
Dokumentation LLMockApiClient README
Perfekt für Desktop-Testing von Workflows – visuelle API-Exploration – Entwicklung und Debugging
Web---basierte Demos
SignalR-Demo/Zeitdaten-Streaming mit Management Benutzeroberfläche
Neu in v.1.1.0:- Verstärktes Layout für die Kolumnen mit vollständigem Lifecycle-Management
Merkmale
- Kontext-Panel erstellenDas System erzeugt ein passendes JSON-Schema
- Active Contexts Panel:
- Live-Liste aller Kontexte mit Statusabzeichen
- Kontexte von Appsettings automatisch beim Start anzeigen
- Echtzeit-Verbindungszahl für jeden Kontext
- Per---Kontext-Steuerungen :-Verbindung verbinden ,-Verbindung trennen ,-Start,-Stopp Löschen
- Automatisches Aktualisieren bei Änderungen
- Live-DatenfeldEchtzeit-Updates aus abonnierten Kontexten
- JSON Syntax HervorhebungSchöne dunkles Display mit farbigen, farblichen und kodierten Elementen
- Schlüssel (-rote Zeichenketten (-grüne Zeichenfolgen ),-Nummern (-orange),-Booleane (-cyan-),-null (-violette Zeichen
- Sauberes, lesbares Format mit korrekter Zeitstempelanzeige
- Keine externen Abhängigkeiten, leicht gebaut, im Highlighter
Beispiele für schnelles Starten von : One---Klick-Tasten für vorkonfigurierte Szenarien
- IoT SensorenTemperaturfühler mit Geräte-ID, ,, Messwerte, Batterieanteil
- AktienmarktReale Preise mit Ticker , , , Preis ,, , Veränderung in Prozent , , , Volumen
- Aufträge für den HandelBestellungen mit ID., customer; , items array; MSV3 status; MSC4 assem
- Server-MetrikenÜberwachen von Daten mit Hostname: ,, CPU: ,, Speicher: MSC3, Festplatte: ,, Verbindungen
- Gaming LeaderboardSpieler-Statistiken mit Namen,Auswertung,Auswertung ,Ausrichtung,Ausrichtung
Perfekt für Dashboards, ,, Live-Monitoring, IoT-Simulationen, ,, real-, Time Feeds, Prototyping
SSE-Streaming-Demo/Streaming- Progressive JSON-Generation
Neu in v.1.1.0:- Quick-Beispieltasten für Instant-Streaming starten - !
Merkmale
- HTTP-Methode konfigurieren path- und optionale JSON-Form
- Beobachten Sie, dass JSON in Echtzeit erzeugt wird.
- Live-Statistiken: :, Stückzahl: ,, Dauer: MSC2, Datengröße:
- Verbindungszustandsindikatoren
Beispiele für schnelles Starten von : One-Click-Tasten für Streaming-Szenarien
- BenutzerlisteArray von Benutzerobjekten mit ID-ID-,-Namen
- ProduktkatalogProduktbestand mit Artikel-Nr.: ,, Name: ,, Preis:,, Lagerbestand:
- Einzelheiten zur BestellungVerschachtelte Bestellungen mit Kundeninformationen und Artikel-Array
- WetterdatenAktuelle Bedingungen mit Temperatur , Luftfeuchtigkeit , , , Windgeschwindigkeit
Perfekt für Beobachten der LLM-Generation – ,-Debugging-Formen –,-Verständnis des Streaming-Verhaltens – Tests von SSE
OpenAPI-Manager-Demo/OpenApiDynamische Spec-Belastung
Neue Funktion Interaktives OpenAPI-Spezifikationsmanagement mit Echtzeit-Updates
Merkmale
- Technische Daten dynamisch ladenAus URL oder Roh einfügen JSON-/.YAML direkt im Browser
- Echtzeit-UpdatesSignalR.- mit Live-Benachrichtigungen für alle Aktionen
- Endpoint DiscoveryAutomatische Extraktion aller Operationen aus Spec
- Prüfung des In---BrowsersTesten Sie jeden Endpunkt mit einem Klick.,. Siehe LLM.MSC2.generierte Mock-Daten
- LebenszyklusmanagementDaten löschen ohne Server neu starten
- Schöne BenutzeroberflächeFarbige HTTP-Methoden – -, kodierte HTTP-Verfahren – MSV2, Syntax – MSC3, hervorgehobene JSON-Antworten
- VerbindungsstatusLive-Anzeige zeigt SignalR-Verbindungszustand
- Umfassende HilfeInline Dokumentation und Beispiel-URLs
Beispiele für schnelles Starten von :
- Petstore API von der URL laden
- Benutzerdefinierte OpenAPI JSON einfügen
- Alle Endpunkte von der Spezifikation anzeigen
- Testendpunkte direkt auf der Seite
- Siehe realistische Mock-Daten, die von LLM erzeugt werden
Perfekt für API-Prototypisierung - Entwicklung von Frontends ,, , Contract Testing , , , Spec Validierung , , Demos
Führen Sie die Demos aus
cd LLMApi
dotnet run
Navigieren Sie zu„:"
http://localhost:5116SignalR Echtzeit-Datenstreaming mit Management UIhttp://localhost:5116/StreamingSSE-Progressive Generationhttp://localhost:5116/OpenApiOpenAPI Spec Manager mit dynamischer Belastung
Alle Demos enthalten
- Umfassende Inline-Dokumentation
- Interaktive Beispiele für den schnellen Start von -
- Code-Schnipsel für die Integration
- Echtzeit-Statusindikatoren
- Kontrolle des gesamten Lebenszyklus des Kontexts
Erweiterte Funktionen
Antwort Schema Echo -(-Shape , )-Export
Sie können optional das Middleware-Echo zurück die JSON-Form haben, die verwendet wurde, um die Mock-Response zu erzeugen.
Konfiguration
- Option: Einschließen vonShapeInResponse - Standard-False-)
- Per.-.Request override; :.Add Query Parameter schließen Schema; =.true ein
- Header emittiert ,: , X , - , Response , - , Schema , nur wenn eine Form bereitgestellt wurde und Größe ,≤ , , 4000 chars, ) ,
- Streaming-Event des letzten SSE-Events enthält ein Schema-Feld, wenn aktiviert
Beispiele
- Globale Einstellungen aktivieren
{
"mostlylucid.mockllmapi": {
"IncludeShapeInResponse": true
}
}
- Pro Anfrage einschalten
curl "http://localhost:5000/api/mock/users?shape=%7B%22id%22%3A0%2C%22name%22%3A%22string%22%7D&includeSchema=true"
Response enthält Header.:.
X-Response-Schema: {"id":0,"name":"string"}
- Streaming-Event enthält Schema-Feld, wenn aktiviert
...
data: {"content":"{full json}","done":true,"schema":{"id":0,"name":"string"}}
Anmerkungen
- Wenn keine Form zur Verfügung gestellt wurde, wird der Header nicht hinzugefügt
- Very large forms -(> -4000Chars ,)- werden nicht zum Header hinzugefügt, um Transportprobleme zu vermeiden, aber die normale Reaktion geht weiter
Anwendungsfälle
- Client-Generierung TypeScript
- API-Dokumentation und Schemavalidierung
- Debugging Form Parsing
- Validierung der Laufzeit
Benutzerdefinierte Prompt-Vorlagen
Überschreiben Sie die Standard-Prompte mit Ihrem eigenen
{
"mostlylucid.mockllmapi": {
"CustomPromptTemplate": "Generate mock data for {method} {path}. Body: {body}. Use seed: {randomSeed}"
}
}
Verfügbare Platzhalter
{method}HTTP-Methode zur Messung der POST-, usw..){path}Vollständiger Request-Pfad mit Query String{body}Beantragen Sie die Stelle{randomSeed}Generierter zufälliger Samen{timestamp}Zeitstempel für Unix{shape}Formspezifikation, sofern vorhanden
Fehlersimulation
Testen Sie Ihre Client-Fehlerbehandlung mit umfassenden Fehlersimulationsfunktionen
Vier Möglichkeiten, Fehler zu konfigurieren Vorrangige Reihenfolge:
- Abfrageparameter Höchste Priorität):
WICHTIGParameterwerte für Abfragen MUSS URL, -, codiert werden %20, & wird %26, : wird %3A,,, usw. , .
# Properly encoded (spaces as %20)
curl "http://localhost:5000/api/mock/users?error=404&errorMessage=Not%20found&errorDetails=User%20does%20not%20exist"
# More complex example with special characters
# Decoded: "Invalid input: email & phone required"
curl "http://localhost:5000/api/mock/users?error=400&errorMessage=Invalid%20input%3A%20email%20%26%20phone%20required"
- HTTP-Header:
curl -H "X-Error-Code: 401" \
-H "X-Error-Message: Unauthorized" \
-H "X-Error-Details: Token expired" \
http://localhost:5000/api/mock/users
- Form JSON Verwendung
$errorEigentum
# Simple: just status code
curl "http://localhost:5000/api/mock/users?shape=%7B%22%24error%22%3A404%7D"
# Complex: with message and details
curl "http://localhost:5000/api/mock/users?shape=%7B%22%24error%22%3A%7B%22code%22%3A422%2C%22message%22%3A%22Validation%20failed%22%2C%22details%22%3A%22Email%20invalid%22%7D%7D"
- Antragsstelle Verwendung
errorEigentum
curl -X POST http://localhost:5000/api/mock/users \
-H "Content-Type: application/json" \
-d '{
"error": {
"code": 409,
"message": "Conflict",
"details": "User already exists"
}
}'
Formate für die Fehlerreaktion
Regelmäßiger /-Streaming Endpunkte
{
"error": {
"code": 404,
"message": "Not Found",
"details": "Optional additional context"
}
}
GraphQL-Endpunkt - :
{
"data": null,
"errors": [
{
"message": "Not Found",
"extensions": {
"code": 404,
"details": "Optional additional context"
}
}
]
}
SignalR-Fehlersimulation :
Konfigurieren von Fehlern in SignalR-Kontexten zum Testen der realen Fehlerbehandlung
{
"HubContexts": [
{
"Name": "errors",
"Description": "Error simulation stream",
"ErrorConfig": {
"Code": 500,
"Message": "Server error",
"Details": "Database connection lost"
}
}
]
}
Oder dynamisch über die Management-API.:
curl -X POST http://localhost:5000/api/management/contexts \
-H "Content-Type: application/json" \
-d '{
"name": "errors",
"description": "Test errors",
"error": 503,
"errorMessage": "Service unavailable",
"errorDetails": "Maintenance in progress"
}'
Unterstützte HTTP-Statuscodes
Das Paket enthält Standardmeldungen für gemeinsame HTTP-Statuscodes.
- Client-FehlerNicht zugelassene MSK-Methode nicht erlaubt ),-408-MSC17-),-MSSK19-MS K20-MS-MSP21-MS422-MSG23-MSD25-MSH25-M429MSB26-MSZK27-MS
- ServerfehlerNicht implementiert ),, nicht implementiert 502, schlechtes Gateway),, nicht verfügbar ),, nicht erhältlich 504, nicht vorhanden (, Torway Timeout)
Benutzerdefinierte Nachrichten und Details überschreiben die Standardwerte
Anwendungsfälle
- Test-Client retry Logik und exponentielle Backoff
- Anzeige der Fehlermeldung in UI bestätigen
- Test-Authentifizierungsflüsse
- Simulation von Zinsbegrenzungsszenarien
- Üben anmutige Abbaumuster
- Fehlerprotokollierung und -überwachung testen
Siehe LLMApi/LLMApi.http für umfassende Beispiele aller Fehlersimulationsmethoden
Mehrere Instanzen
Mehrere Mock-APIs mit verschiedenen Konfigurationen montieren
// Development data with high randomness
builder.Services.Addmostlylucid.mockllmapi("Dev", options =>
{
options.Temperature = 1.5;
options.ModelName = "llm-model";
});
// Stable test data
builder.Services.Addmostlylucid.mockllmapi("Test", options =>
{
options.Temperature = 0.3;
options.ModelName = "llm-model";
});
app.Mapmostlylucid.mockllmapi("/api/dev");
app.Mapmostlylucid.mockllmapi("/api/test");
Beschreibung der Form
Drei Möglichkeiten zur Steuerung der Reaktionsstruktur
- Kopfzeile Zu empfehlende Maßnahme:
X-Response-Shape: {"field":"type"} - Abfrage-Param:
?shape=%7B%22field%22%3A%22type%22%7D(-URL---kodierte JSON-)- - Körperfeld:
{"shape": {...}, "actualData": ...}
Mehrere Reaktionen über Form caching
Sie können die Middleware anweisen, mehrere Reaktionsvarianten für eine bestimmte Anforderung vor dem - zu generieren und zwischenzuspeichern./Ausformung durch Hinzufügen eines speziellen Feldes innerhalb des Formobjekts
- Der Cache-Schlüssel wird von der HTTP-Methode abgeleitet.+-Pfad..(.einschließlich Abfrage...). +. die sanitäre Form. (. mit entferntem ).
- Bis zu N-Antworten werden aus dem LLM vorgefunden und in MaxCachePerKey gespeichert.
- Nachfolgende nicht---Streaming-Anfragen für den gleichen Schlüssel werden aus einer erschöpfenden Warteschlange serviert, wenn ein frischer Stapel N erschöpft wird.
- Streaming-Endpunkte werden nicht zwischengespeichert
Beispiele
Kopfform - : X---Response--Shape:-Shake{"$-Cache":3,"-OrderId":"-String","-Status":"-Strings","-Sitems":[{"-Sku":"-String, ","-Sqty":0}]}-Sk
Körperform { "-Form, ":-Form und MS-Form "$-Cache-":-5,- ," ,InvoiceId ,": , " ,String , ", , "-Kunden-":-{-M"-ID":-MSC5-String",-"-Name":-"-Strings"-MSSK11- ]"-Titems-":- [ {-"-":-M"-String",-"-qty-MSC6-0,MSSK8-Preis Gesamt-": } }
Abfrage-Param (-URL---kodiert ?-Shape-=%7-S%22%24-Sachverhalt%22%3-Sichter2%2-Sätze%22%3-Säulen%5-Single%7-Sandwich%22%3-Signiere0%2-Segment%22-Name%22%3-Sickel%22-Sortiments%22%7-D%5-D-Sack
Einrichtung
- MaxCachePerKey Standard-,® Caps die von "$®cache angeforderte Anzahl pro Schlüssel
Anmerkungen
- Der Hinweis "$ wird aus der Form entfernt, bevor er an das LLM-." gesendet wird.
- Wenn "$-Cache, ", weggelassen wird oder 0,, verhält sich die Anfrage wie vor (, kein Caching, /, Warmup, MSC5
- Cached-Varianten werden im Memory für die Lebensdauer der App aufbewahrt.Der Neustart von ; löscht den Cache.
Prüfung
Testen von Utilities-Paketen
Hauptsächlichlucid-.-Mockllmapi-.-Testing Ein Begleiter NuGet Paket, das Testen mit der Mock API noch einfacher macht
dotnet add package mostlylucid.mockllmapi.Testing
Schnelles Beispiel
using mostlylucid.mockllmapi.Testing;
// Create a configured HttpClient for testing
var client = HttpClientExtensions.CreateMockLlmClient(
baseAddress: "http://localhost:5116",
pathPattern: "/users",
configure: endpoint => endpoint
.WithShape(new { id = 0, name = "", email = "" })
.WithCache(5)
.WithError(404) // Simulate errors easily
);
// Use in your tests
var response = await client.GetAsync("/users");
var users = await response.Content.ReadFromJsonAsync<User[]>();
Hauptmerkmale
- Fließfähige APIEinfache Konfiguration mit
WithShape(),WithError(),WithCache(),,, usw. , . - Integration von HttpClientFunktioniert nahtlos mit
HttpClientundIHttpClientFactory - Mehrere EndpunkteKonfigurieren Sie verschiedene Verhaltensweisen für unterschiedliche Pfade
- FehlersimulationTestfehlerbehandlung mit verschiedenen Statuscodes
- Streaming-UnterstützungTesten Sie SSE-Streamingendpunkte
- AbhängigkeitsinjektionUnterstützung für typisierte und benannte Clients
Konfigurationsbeispiele
// Multiple endpoints with different configurations
var client = HttpClientExtensions.CreateMockLlmClient(
"http://localhost:5116",
configure: handler => handler
.ForEndpoint("/users", config => config
.WithShape(new { id = 0, name = "", email = "" })
.WithCache(10))
.ForEndpoint("/posts", config => config
.WithShape(new { id = 0, title = "", content = "" })
.WithStreaming()
.WithSseMode("CompleteObjects"))
.ForEndpoint("/error", config => config
.WithError(500, "Internal server error"))
);
// Dependency Injection support
services.AddMockLlmHttpClient<IUserApiClient>(
baseApiPath: "/api/mock",
configure: handler => handler
.ForEndpoint("/users", config => config.WithShape(...))
);
Wie es funktioniert
Das MockLlmHttpHandler ist ein DelegatingHandler die HTTP-Anfragen abfangen und Ihre Konfiguration automatisch über Abfrageparameter und Header vor der Weiterleitung an die Mock API anwenden. Dies bedeutet, dass Sie real verwenden können HttpClient Instanzen in Ihren Tests bei der Steuerung des Mockverhaltens deklarativ
Siehe Testpaket README für komplette Dokumentation und Beispiele
HTTP-Dateiprüfung
Nutzen Sie die enthaltenen LLMApi.http Datei mit„:"
- Visual Studio HTTP-Client für Rider
- VS Code REST Client Erweiterung
- Jeder HTTP-Client
Einzelprüfungen
Das Projekt umfasst umfassende Unit-Tests.
# Run all tests
dotnet test
# Run with detailed output
dotnet test --verbosity detailed
Prüfungsabdeckung (228-Tests ,-Test 100%-Passrate ):-Test
- Körperlesung (-Lempty-,-JSON-Inhalte-,-Formkörper-Datei Uploads-)-
- Formkörperparsing Einzelwerte, Mehrfachwerte, Sonderzeichen
- Mehrteilige Formulardaten Datei-Metadaten metadaten MSA-Mischfelder und -Dateien MSA
- JSON flüchtet (-Zitate,-Rückschläge,-Neulinien,-Registerblätter,-Unicode,-Emoji-)
- Extraktion von Inhalten (-OpenAI-Format - Komplexe verschachtelte JSON-,-Fehlerbehandlung
- Manuelle JSON-Konstruktion (-Formdaten,-Arrays,-Verschachtelte Strukturen
- Formenextraktion ](-Query param ®,-Header ?,-Körperfeld Â,-Prioritäts-)-
- Prompte Generation Zufälligkeit, Formeinschluss, Streaming-Modi, )
- Gebäude anfordern (-Temperatur-,-Modell-,-Nachrichten
- Kantenfälle Nichtzutreffendes streichen.
- Integrationsprüfungen Vollständiger HTTP-Workflow, Formulareinreichungen, Dateiuploads, Tiefenpfade)
Neu in v.2.3.0:-
- FormKörperHandhabungPrüfungen Tests für Formkörperparsing und JSON-Konstruktion
- JsonHandlingTests-.cs Tests für JSON-Extraktion und Kantenfälle
- Integrationstests - .-cs Integrationstestrahmen für vollständige HTTP-Endpunktprüfung
Siehe PRÜFUNG _-ZUSAMMENFASSUNG für vollständige Testdokumentation und Abdeckungsmetriken
Architektur
Siehe Architektur im Überblick oben für das Systemdiagramm und die Komponentenbeschreibung auf hoher Ebene
Detaillierte Anfrage Fluss
sequenceDiagram
participant C as Client
participant A as LLMApi
participant H as AutoApiHelper
participant O as Ollama
participant M as llm-model
C->>A: GET/POST/PUT/DELETE /api/auto/**
A->>H: Extract context (method, path, body, shape)
H->>H: Generate random seed + timestamp
H->>H: Build prompt with randomness
H-->>A: Prompt + temperature=1.2
A->>O: POST /v1/chat/completions
O->>M: Run inference
M-->>O: Generated JSON
O-->>A: Response
A-->>C: JSON Response
Formregelungsfluss
flowchart TD
Start[Request Arrives] --> CheckQuery{Shape in<br/>Query Param?}
CheckQuery -->|Yes| UseQuery[Use Query Shape]
CheckQuery -->|No| CheckHeader{Shape in<br/>Header?}
CheckHeader -->|Yes| UseHeader[Use Header Shape]
CheckHeader -->|No| CheckBody{Shape in<br/>Body Field?}
CheckBody -->|Yes| UseBody[Use Body Shape]
CheckBody -->|No| NoShape[No Shape Constraint]
UseQuery --> BuildPrompt[Build Prompt]
UseHeader --> BuildPrompt
UseBody --> BuildPrompt
NoShape --> BuildPrompt
BuildPrompt --> AddRandom[Add Random Seed<br/>+ Timestamp]
AddRandom --> SendLLM[Send to LLM]
style UseQuery fill:#4CAF50
style UseHeader fill:#4CAF50
style UseBody fill:#4CAF50
style NoShape fill:#FFC107
Projekte
mostlylucid.mockllmapiSoftware-Paketbibliothek für NuGetLLMApiDemo-AnwendungLLMApi.Tests:- xUnit Test Suite Tests -- xunit-Tests 100%-Passrate
Warum verwenden Sie meistlucid ,. , mockllmapi , ? ,
- Schnelles PrototypingWeiterentwicklung des Frontends ohne Warten auf Backend
- Vollständige HTTP-UnterstützungDatei-Uploads für alle erfassten Inhaltstypen
- Konsequente WorkflowsAPI-Kontexte pflegen realistische Beziehungen über mehrstufige Prozesse hinweg
- Demonstrationen.: . Zeigen Sie realistische Datenströme ohne fest codierte Vorrichtungen
- PrüfungErzeugen von abwechslungsreichen Testdaten für Randfälle oder konsistente Daten mit Kontexten
- Speicher , - , sicherDatei-Uploads gestreamt und abgeladen - , getestet mit Dateien von 100 , MB , + ,
- API-DesignExperimentieren Sie mit Antwortformen vor der Implementierung
- LernenBeispiel für die LLM-Integration in minimalen APIs
- Null WartungKeine Datenbank keine Datendateien zu pflegen
- FlexibelVerwenden Sie eine beliebige Kombination von REST.,. GraphQL.,. SSE.MSC3. SignalR.MS K4 oder OpenAPI-Spezifikationen
- Produktion ,- , fertig:-Tests,-Testtests100%-Passrate,- umfassende Dokumentation
Aufbau des NuGet-Pakets
cd mostlylucid.mockllmapi
dotnet pack -c Release
Paket wird in sein bin/Release/mostlylucid.mockllmapi.{version}.nupkg
Beitrag
Dies ist ein Beispielprojekt, das LLM---powered Mock APIs demonstriert.
Lizenz
Dies ist freie und unbelastete Software, die in der Public Domain veröffentlicht wird. LIZENZ für Details oder Besuch unlizenziert ,. ,org.