Senden Sie neue, genehmigte Koeffizienten an einen laufenden Prädiktor über MQTT. Der Prädiktor verwendet sie für nachfolgende Messungen. Das Erhalten des Updates selbst liefert keine Vorhersage.
Dieses Beispiel beginnt mit einem genehmigten Modell aus deiner Anwendung, genannt Supervisor. Der benutzerdefinierte Prädiktor speichert seine Koeffizienten im Speicher.
Wie die Rückkopplungsschleife funktioniert
Zwei DataflowGraph-Ressourcen leiten genehmigte Modelle weiter und generieren Vorhersagen.
Eine Messung verwendet v8, nachdem diese Prädiktorinstanz sie aktiviert hat.
- Extern genehmigen. Der Supervisor veröffentlicht einen genehmigten Umschlag („Envelope“) in
factory/approved-envelopes.
- Mit integrierten Transformationen erneut veröffentlichen.
republish-approved-model filtert die Genehmigung, extrahiert approvedModel und ändert das Zielthema in factory/model-updates.
- Aktivieren, dann vorhersagen.
predict-from-approved-updates liefert Updates und factory/readings an den vom Kunden erstellten Prädiktor. Ein Update ändert sein Modell ohne eine Vorhersage. Ein späterer Lesevorgang erzeugt eine Vorhersage in factory/predictions-from-updates. Update-Bestätigungen werden unterdrückt.
Die Zuordnung legt $metadata.topic auf "model-updates" fest. Das Ziel löst factory/${outputTopic} in factory/model-updates auf. Ein festes dataDestination: factory/model-updates funktioniert ebenfalls.
Für einen optionalen nächsten Zyklus gleicht eine externe Anwendung Vorhersagen mit gemessenen Gewichtungen ab, passt einen Kandidaten an und überprüft ihn und sendet ihn in factory/model-proposals an den Supervisor.
Für die Bereitstellung im Statusspeicher speichern Sie genehmigte Koeffizienten und lesen Sie sie für die Vorhersage.
Voraussetzungen
Erfüllen Sie die gemeinsamen Beispielvoraussetzungen, einschließlich des factory-mqtt Profils und des default Endpunkts. Verwenden Sie YAML zum Debuggen und Azure CLI oder Bicep für das Produktionsmanagement.
Verwenden Sie den bestehenden default Registry-Endpunkt für integrierte Transformationen und factory-artifacts für das benutzerdefinierte Artefakt. Schließen Sie die Einrichtung des gemeinsamen Einzelinstanz-Profils ab, bevor Sie diese Diagramme bereitstellen, damit Messwerte und Updates dieselbe Prädiktorinstanz erreichen. Die Bereitstellungs-Tabs erstellen oder ändern keine Profile oder Registry-Endpunkte.
Legen Sie für CLI-Bereitstellungen AIO_INSTANCE_NAME und RESOURCE_GROUP auf Ihre vorhandene Instanz und Ressourcengruppe fest. Für Bicep-Deployments solltest du auch CUSTOM_LOCATION_NAME auf den bestehenden benutzerdefinierten Standort der Instanz festlegen.
Diese Themen verbinden den Supervisor, den Graphen für die erneute Veröffentlichung und den Vorhersagegraphen:
| Thema |
Herausgeber → Consumer |
Purpose |
factory/readings |
Sensoren → Vorhersagediagramm |
Trigger-Vorhersagen |
factory/approved-envelopes |
Supervisor → Graph zur Neuveröffentlichung |
Genehmigtes Modell plus Überprüfungsinformationen |
factory/model-updates |
Graph für die erneute Veröffentlichung → Vorhersagegraph |
Extrahierte, genehmigte Modell-Payload |
factory/predictions-from-updates |
Vorhersagegraph → nachgelagerter Korrelator |
Vorhersagen, keine Modellaktualisierungen |
Der Supervisor veröffentlicht diesen synthetischen Umschlag nach der Genehmigung gemäß der Richtlinie Ihrer Anwendung. Die Brokerautorisierung muss die Veröffentlichung in factory/approved-envelopes und factory/model-updates auf vertrauenswürdige Writer beschränken. Die Genehmigung hängt von dieser Vertrauensstellung sowie vom Feld approved: true ab.
Im Beispiel werden Nachrichten nach kind und nicht nach Thema ausgewählt. Nur vertrauenswürdige Herausgeber dürfen in einem der Prädiktoreingabethemen veröffentlichen, einschließlich factory/readings. Bei nicht vertrauenswürdigen Sensor-Publishern sollten Sie das Thema und die Nachrichtenart vor dem Prädiktor validieren.
Stellen Sie beide Graphen mithilfe der Bereitstellungs-Tabs im folgenden Abschnitt bereit.
Abonnieren Sie factory/predictions-from-updates, und veröffentlichen Sie dann diesen Umschlag in factory/approved-envelopes. Überprüfen Sie die Prädiktordiagnose auf Aktivierung, bevor Sie den Beispiellesevorgang veröffentlichen. Verwenden Sie die Authentifizierungs- und TLS-Einstellungen Ihres Brokers.
{
"approval": {"approved": true, "reviewId": "review-42"},
"approvedModel": {
"kind": "model",
"assetId": "line-1",
"updateId": "update-42",
"expectedModelVersion": 7,
"modelVersion": 8,
"speedCoefficient": 2,
"temperatureCoefficient": 0.5,
"intercept": 173
}
}
Graph für die erneute Veröffentlichung:
Öffnen Sie in der Betriebsumgebung Ihre Instanz, und wählen Sie Datenflussgraph>Datenflussgraph erstellen aus.
Benennen Sie das Diagramm republish-approved-model und wählen Sie das default Profil aus.
Quelle source mit Endpunkt factory-mqtt und Thema factory/approved-envelopeshinzufügen.
Filter-Transform approved-only hinzufügen, mit azureiotoperations/graph-dataflow-filter:1.1.0 vom Registry-Endpunkt default. Legen Sie Eingabe approval.approved ?? false und Ausdruck $1 != true fest. Diese Regel verwirft nicht genehmigte Umschläge.
Fügen Sie die Map-Transformation extract-and-route hinzu, unter Verwendung von azureiotoperations/graph-dataflow-map:1.0.0 aus dem Registry-Endpunkt default. Konfigurieren Sie diese Regeln der Reihe nach:
| Input |
Ausgabe |
Ausdruck |
approvedModel.kind |
kind |
Leer lassen |
approvedModel.assetId |
assetId |
Leer lassen |
approvedModel.updateId |
updateId |
Leer lassen |
approvedModel.expectedModelVersion |
expectedModelVersion |
Leer lassen |
approvedModel.modelVersion |
modelVersion |
Leer lassen |
approvedModel.speedCoefficient |
speedCoefficient |
Leer lassen |
approvedModel.temperatureCoefficient |
temperatureCoefficient |
Leer lassen |
approvedModel.intercept |
intercept |
Leer lassen |
approvedModel.assetId |
$metadata.topic |
"model-updates" |
Fügen Sie Ziel destination mit Endpunkt factory-mqtt und Topic factory/${outputTopic} hinzu.
Verbinden Sie source → approved-only → extract-and-route → destination und wählen Speichern.
Speichere die vollständigen Grapheigenschaften als graph.json. Transformationsregeln sind mit Escape-Zeichen versehene JSON-Strings in configuration.value.
{
"mode": "Enabled",
"nodes": [
{
"name": "source",
"nodeType": "Source",
"sourceSettings": {
"endpointRef": "factory-mqtt",
"dataSources": ["factory/approved-envelopes"]
}
},
{
"name": "approved-only",
"nodeType": "Graph",
"graphSettings": {
"registryEndpointRef": "default",
"artifact": "azureiotoperations/graph-dataflow-filter:1.1.0",
"configuration": [
{
"key": "rules",
"value": "{\"filter\":[{\"inputs\":[\"approval.approved ?? false\"],\"expression\":\"$1 != true\"}]}"
}
]
}
},
{
"name": "extract-and-route",
"nodeType": "Graph",
"graphSettings": {
"registryEndpointRef": "default",
"artifact": "azureiotoperations/graph-dataflow-map:1.0.0",
"configuration": [
{
"key": "rules",
"value": "{\"map\":[{\"inputs\":[\"approvedModel.kind\"],\"output\":\"kind\"},{\"inputs\":[\"approvedModel.assetId\"],\"output\":\"assetId\"},{\"inputs\":[\"approvedModel.updateId\"],\"output\":\"updateId\"},{\"inputs\":[\"approvedModel.expectedModelVersion\"],\"output\":\"expectedModelVersion\"},{\"inputs\":[\"approvedModel.modelVersion\"],\"output\":\"modelVersion\"},{\"inputs\":[\"approvedModel.speedCoefficient\"],\"output\":\"speedCoefficient\"},{\"inputs\":[\"approvedModel.temperatureCoefficient\"],\"output\":\"temperatureCoefficient\"},{\"inputs\":[\"approvedModel.intercept\"],\"output\":\"intercept\"},{\"inputs\":[\"approvedModel.assetId\"],\"output\":\"$metadata.topic\",\"expression\":\"\\\"model-updates\\\"\"}]}"
}
]
}
},
{
"name": "destination",
"nodeType": "Destination",
"destinationSettings": {
"endpointRef": "factory-mqtt",
"dataDestination": "factory/${outputTopic}"
}
}
],
"nodeConnections": [
{"from": {"name": "source"}, "to": {"name": "approved-only"}},
{"from": {"name": "approved-only"}, "to": {"name": "extract-and-route"}},
{"from": {"name": "extract-and-route"}, "to": {"name": "destination"}}
]
}
az iot ops dataflowgraph apply \
--name republish-approved-model \
--instance $AIO_INSTANCE_NAME \
--resource-group $RESOURCE_GROUP \
--config-file graph.json
Speichern Sie als main.bicep. Alle übergeordneten Ressourcen existieren bereits in der Ressourcengruppe. Der Backslash in factory/\${outputTopic} bewahrt die MQTT-Themenvorlage, anstatt sie als Bicep-Interpolation zu bewerten.
param aioInstanceName string
param customLocationName string
resource aioInstance 'Microsoft.IoTOperations/instances@2026-07-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2026-07-01' existing = {
parent: aioInstance
name: 'default'
}
resource dataflowGraph 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflowGraphs@2026-07-01' = {
parent: defaultDataflowProfile
name: 'republish-approved-model'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
mode: 'Enabled'
nodes: [
{
name: 'source'
nodeType: 'Source'
sourceSettings: {
endpointRef: 'factory-mqtt'
dataSources: ['factory/approved-envelopes']
}
}
{
name: 'approved-only'
nodeType: 'Graph'
graphSettings: {
registryEndpointRef: 'default'
artifact: 'azureiotoperations/graph-dataflow-filter:1.1.0'
configuration: [
{
key: 'rules'
value: '{"filter":[{"inputs":["approval.approved ?? false"],"expression":"$1 != true"}]}'
}
]
}
}
{
name: 'extract-and-route'
nodeType: 'Graph'
graphSettings: {
registryEndpointRef: 'default'
artifact: 'azureiotoperations/graph-dataflow-map:1.0.0'
configuration: [
{
key: 'rules'
value: '{"map":[{"inputs":["approvedModel.kind"],"output":"kind"},{"inputs":["approvedModel.assetId"],"output":"assetId"},{"inputs":["approvedModel.updateId"],"output":"updateId"},{"inputs":["approvedModel.expectedModelVersion"],"output":"expectedModelVersion"},{"inputs":["approvedModel.modelVersion"],"output":"modelVersion"},{"inputs":["approvedModel.speedCoefficient"],"output":"speedCoefficient"},{"inputs":["approvedModel.temperatureCoefficient"],"output":"temperatureCoefficient"},{"inputs":["approvedModel.intercept"],"output":"intercept"},{"inputs":["approvedModel.assetId"],"output":"$metadata.topic","expression":"\\"model-updates\\""}]}'
}
]
}
}
{
name: 'destination'
nodeType: 'Destination'
destinationSettings: {
endpointRef: 'factory-mqtt'
dataDestination: 'factory/\${outputTopic}'
}
}
]
nodeConnections: [
{ from: { name: 'source' }, to: { name: 'approved-only' } }
{ from: { name: 'approved-only' }, to: { name: 'extract-and-route' } }
{ from: { name: 'extract-and-route' }, to: { name: 'destination' } }
]
}
}
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file main.bicep \
--parameters aioInstanceName="$AIO_INSTANCE_NAME" customLocationName="$CUSTOM_LOCATION_NAME"
Important
Die Verwendung von Kubernetes-Bereitstellungsmanifesten wird in Produktionsumgebungen nicht unterstützt und sollte nur zum Debuggen und Testen verwendet werden.
Speichern Sie als republish-approved-model.yaml.
apiVersion: connectivity.iotoperations.azure.com/v1
kind: DataflowGraph
metadata:
name: republish-approved-model
namespace: azure-iot-operations
spec:
profileRef: default
mode: Enabled
nodes:
- name: source
nodeType: Source
sourceSettings:
endpointRef: factory-mqtt
dataSources: [factory/approved-envelopes]
- name: approved-only
nodeType: Graph
graphSettings:
registryEndpointRef: default
artifact: azureiotoperations/graph-dataflow-filter:1.1.0
configuration:
- key: rules
value: |
{"filter":[{"inputs":["approval.approved ?? false"],"expression":"$1 != true"}]}
- name: extract-and-route
nodeType: Graph
graphSettings:
registryEndpointRef: default
artifact: azureiotoperations/graph-dataflow-map:1.0.0
configuration:
- key: rules
value: |
{
"map": [
{"inputs":["approvedModel.kind"],"output":"kind"},
{"inputs":["approvedModel.assetId"],"output":"assetId"},
{"inputs":["approvedModel.updateId"],"output":"updateId"},
{"inputs":["approvedModel.expectedModelVersion"],"output":"expectedModelVersion"},
{"inputs":["approvedModel.modelVersion"],"output":"modelVersion"},
{"inputs":["approvedModel.speedCoefficient"],"output":"speedCoefficient"},
{"inputs":["approvedModel.temperatureCoefficient"],"output":"temperatureCoefficient"},
{"inputs":["approvedModel.intercept"],"output":"intercept"},
{"inputs":["approvedModel.assetId"],"output":"$metadata.topic","expression":"\"model-updates\""}
]
}
- name: destination
nodeType: Destination
destinationSettings:
endpointRef: factory-mqtt
dataDestination: "factory/${outputTopic}"
nodeConnections:
- from: { name: source }
to: { name: approved-only }
- from: { name: approved-only }
to: { name: extract-and-route }
- from: { name: extract-and-route }
to: { name: destination }
kubectl apply -f republish-approved-model.yaml
Der Graph veröffentlicht das unten extrahierte Modell in factory/model-updates.
Ein Umschlag mit falscher oder fehlender Genehmigung erzeugt keine Ausgabe.
{"kind":"model","assetId":"line-1","updateId":"update-42","expectedModelVersion":7,"modelVersion":8,"speedCoefficient":2,"temperatureCoefficient":0.5,"intercept":173}
Für dynamisches Themenrouting sollten die Ziele innerhalb eines vom Betreiber genehmigten Sets bleiben.
Vorhersagegraph: Verwenden Sie das benutzerdefinierte graph-versioned-predictor Beispiel aus dem factory-artifacts Registry-Endpunkt für ghcr.io, wie in den Beispielvoraussetzungen beschrieben.
Das Beispiel startet die Ressource line-1 mit dem Modell v7 und den Koeffizienten 2, 0.5 und 175, bereit, die genehmigte v8-Nachricht zu akzeptieren.
Dieses Beispiel verwendet ein benutzerdefiniertes Artefakt aus ghcr.io. Das Operations-Erlebnis unterstützt benutzerdefinierte Artefakte aus dem Azure Container Registry (ACR), nicht aus GHCR. Verwenden Sie den Tab Azure CLI oder Bicep, um dieses Beispiel unverändert bereitzustellen, inklusive des Filters nach dem benutzerdefinierten Prädiktor.
Für den unterstützten UI-Workflow für benutzerdefinierte Artefakte siehe WASM-Transformationen verwenden. Die Betriebsumgebung generiert Verbindungen aus dem ausgewählten Artefakt. Das Bearbeiten dieser Verbindungen wird nicht unterstützt. Die Neuveröffentlichung des Prädiktors allein in ACR erzeugt nicht die vollständige Prädiktor-und-Filter-Pipeline dieses Beispiels.
Speichern Sie die vollständigen Grapheneigenschaften als graph.json, und ersetzen Sie die Datei, die für den Graphen für die erneute Veröffentlichung verwendet wird, nachdem Sie sie angewendet haben.
{
"mode": "Enabled",
"nodes": [
{
"name": "source",
"nodeType": "Source",
"sourceSettings": {
"endpointRef": "factory-mqtt",
"dataSources": ["factory/readings", "factory/model-updates"]
}
},
{
"name": "predictor",
"nodeType": "Graph",
"graphSettings": {
"registryEndpointRef": "factory-artifacts",
"artifact": "azure-samples/explore-iot-operations/dataflow-patterns/graph-versioned-predictor:1.0.0-rc.4"
}
},
{
"name": "remove-acknowledgments",
"nodeType": "Graph",
"graphSettings": {
"registryEndpointRef": "default",
"artifact": "azureiotoperations/graph-dataflow-filter:1.1.0",
"configuration": [
{
"key": "rules",
"value": "{\"filter\":[{\"inputs\":[\"kind ?? \\\"unknown\\\"\"],\"expression\":\"$1 != \\\"prediction\\\"\"}]}"
}
]
}
},
{
"name": "destination",
"nodeType": "Destination",
"destinationSettings": {
"endpointRef": "factory-mqtt",
"dataDestination": "factory/predictions-from-updates"
}
}
],
"nodeConnections": [
{"from": {"name": "source"}, "to": {"name": "predictor"}},
{"from": {"name": "predictor"}, "to": {"name": "remove-acknowledgments"}},
{"from": {"name": "remove-acknowledgments"}, "to": {"name": "destination"}}
]
}
az iot ops dataflowgraph apply \
--name predict-from-approved-updates \
--instance $AIO_INSTANCE_NAME \
--resource-group $RESOURCE_GROUP \
--config-file graph.json
Speichern Sie als main.bicep, und ersetzen Sie die Datei, die für den Graphen für die erneute Veröffentlichung verwendet wird, nachdem Sie sie bereitgestellt haben. Das Bereitstellen dieses Graphen entfernt den Republizierungsgraphen nicht.
param aioInstanceName string
param customLocationName string
resource aioInstance 'Microsoft.IoTOperations/instances@2026-07-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2026-07-01' existing = {
parent: aioInstance
name: 'default'
}
resource dataflowGraph 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflowGraphs@2026-07-01' = {
parent: defaultDataflowProfile
name: 'predict-from-approved-updates'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
mode: 'Enabled'
nodes: [
{
name: 'source'
nodeType: 'Source'
sourceSettings: {
endpointRef: 'factory-mqtt'
dataSources: ['factory/readings', 'factory/model-updates']
}
}
{
name: 'predictor'
nodeType: 'Graph'
graphSettings: {
registryEndpointRef: 'factory-artifacts'
artifact: 'azure-samples/explore-iot-operations/dataflow-patterns/graph-versioned-predictor:1.0.0-rc.4'
}
}
{
name: 'remove-acknowledgments'
nodeType: 'Graph'
graphSettings: {
registryEndpointRef: 'default'
artifact: 'azureiotoperations/graph-dataflow-filter:1.1.0'
configuration: [
{
key: 'rules'
value: '{"filter":[{"inputs":["kind ?? \\"unknown\\""],"expression":"$1 != \\"prediction\\""}]}'
}
]
}
}
{
name: 'destination'
nodeType: 'Destination'
destinationSettings: {
endpointRef: 'factory-mqtt'
dataDestination: 'factory/predictions-from-updates'
}
}
]
nodeConnections: [
{ from: { name: 'source' }, to: { name: 'predictor' } }
{ from: { name: 'predictor' }, to: { name: 'remove-acknowledgments' } }
{ from: { name: 'remove-acknowledgments' }, to: { name: 'destination' } }
]
}
}
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file main.bicep \
--parameters aioInstanceName="$AIO_INSTANCE_NAME" customLocationName="$CUSTOM_LOCATION_NAME"
Important
Die Verwendung von Kubernetes-Bereitstellungsmanifesten wird in Produktionsumgebungen nicht unterstützt und sollte nur zum Debuggen und Testen verwendet werden.
Speichern Sie als predict-from-approved-updates.yaml.
apiVersion: connectivity.iotoperations.azure.com/v1
kind: DataflowGraph
metadata:
name: predict-from-approved-updates
namespace: azure-iot-operations
spec:
profileRef: default
mode: Enabled
nodes:
- name: source
nodeType: Source
sourceSettings:
endpointRef: factory-mqtt
dataSources: [factory/readings, factory/model-updates]
- name: predictor
nodeType: Graph
graphSettings:
registryEndpointRef: factory-artifacts
artifact: azure-samples/explore-iot-operations/dataflow-patterns/graph-versioned-predictor:1.0.0-rc.4
- name: remove-acknowledgments
nodeType: Graph
graphSettings:
registryEndpointRef: default
artifact: azureiotoperations/graph-dataflow-filter:1.1.0
configuration:
- key: rules
value: |
{"filter":[{"inputs":["kind ?? \"unknown\""],"expression":"$1 != \"prediction\""}]}
- name: destination
nodeType: Destination
destinationSettings:
endpointRef: factory-mqtt
dataDestination: factory/predictions-from-updates
nodeConnections:
- from: { name: source }
to: { name: predictor }
- from: { name: predictor }
to: { name: remove-acknowledgments }
- from: { name: remove-acknowledgments }
to: { name: destination }
kubectl apply -f predict-from-approved-updates.yaml
Lesevorgang zur Veröffentlichung in factory/readings nach der v8-Aktivierung:
{"kind":"reading","assetId":"line-1","pieceId":"part-44","speed":10,"temperature":20}
Ausgabe auf factory/predictions-from-updates:
{"kind":"prediction","assetId":"line-1","pieceId":"part-44","modelVersion":8,"speed":10,"temperature":20,"speedCoefficient":2,"temperatureCoefficient":0.5,"intercept":173,"predictedWeight":203}
Der Beispielprädiktor besitzt einen begrenzten Status pro Ressource und Überprüfungen der erwarteten Version im Arbeitsspeicher. Sein Graph unterdrückt intern Modell-Aktualisierungsbestätigungen; der zusätzliche reine Vorhersagefilter oben schützt auch das Ziel.
Für ein Asset mit fehlendem Anfangsmodell protokolliert es eine Diagnose und überspringt die Vorhersage.
Führe eine Verarbeitungsinstanz für diese Demo aus, damit Messwerte und Updates denselben Zustand teilen. Standardmäßig kann jedes Asset 512 Updates akzeptieren; wenn die Kapazität erreicht ist, koordinieren Sie einen Neustart mit dem aktuell genehmigten Modell, anstatt den Update-Verlauf zu verwerfen.
Der externe Supervisor ist für dauerhafte Genehmigungen, Update-IDs und die Wiederherstellung zuständig.
Bevor Sie nach einem Neustart Messwerte zulassen, setzen Sie die settings-Konfiguration des Graphen auf ein vollständiges JSON-Objekt, das "role":"versioned-predictor" und das zuletzt genehmigte initialModels enthält. Alternativ können Sie Lesevorgänge anhalten, während Sie genehmigte Updates in der Versionsreihenfolge aus einem bekannten anfänglichen Modell wiedergeben. Durch die Wiederverwendung des Demostandardwerts würde v7 wiederhergestellt.
Verhindern, dass Updates zu neuen Auslösern werden
Behandle ein genehmigtes Modellupdate als Zustandsänderung:
| Eingabe für den benutzerdefinierten Prädiktor |
Zustandsänderung |
Vorhersageausgabe |
| Lesen mit einem gültigen aktiven Modell |
Kein |
Eine Vorhersage mit ihrer Modellversion |
| Genehmigtes Update der nächsten Version mit übereinstimmender erwarteter Version |
Ersetzen Sie die Koeffizienten für dieses Asset |
Kein |
| Duplikat- oder älteres Modell-Update |
Keine; den Grund aufzeichnen |
Kein |
Updates müssen genau eine Version weitergehen: Dieses Beispiel akzeptiert Version 8 nur, während Version 7 aktiv ist. Fehlende Versionen oder widersprüchliche Wiederverwendung einer Update-ID lassen den Status unverändert. Überprüfen Sie die Prädiktor-Diagnostik und das ausgegebene modelVersion; eine erfolgreiche MQTT-Lieferung allein bestätigt die Aktivierung nicht.
Die Anwendung muss die Aktualisierungshäufigkeit begrenzen, veraltete Beobachtungen ablehnen und Vorschläge deduplizieren. Verwenden Sie übereinstimmende Beobachtungen als Trainingsbeispiele. Behalten Sie Bestätigungen und Schreibvorgänge im Statusspeicher auf separaten Pfaden bei.
Halten Sie Graphenverbindungen azyklisch und Quell- und Zielthemen auf demselben nicht zusammenhängenden MQTT-Endpunkt. Siehe Namensregeln und -grenzen.
Verwandte Inhalte