将触发器添加到 CodeProject.AI 服务器
对数据进行 AI 推理操作以获取关于数据形式或内容预测是一回事,但最终目标是能够根据这些预测采取行动。
通常,这是通过 API 完成的。例如,客户端应用程序将图像发送到对象检测或分类模块,并根据服务器的响应,该客户端将采取(或不采取)适当的行动。
但是,有时你只是想要一些简单的操作,比如调用脚本或 shell 命令。为此,你可以使用触发器。
触发器定义在 /Server/FrontEnd/triggers.json 文件中。一个例子是
JSON
{
"Queue" : "objectdetection_queue",
"PredictionsCollectionName" : "predictions",
"PropertyName" : "label",
"PropertyValue" : "car",
"PropertyComparison" : "equals",
"Confidence" : 0.5,
"ConfidenceComparison" : "greaterthan",
"PlatformTasks" : {
"Windows" : {
"Command": "cmd",
"Args": "/c echo Hi Windows. I see a car",
"Type": "Command"
},
"Linux" : {
"Command": "bash",
"Args": "echo Hi Linux. I see a car",
"Type": "Command"
},
"LinuxArm64" : {
"Command": "bash",
"Args": "echo Hi Linux. I see a car",
"Type": "Command"
},
"macOS" : {
"Command": "zsh",
"Args": "echo Hi Linux. I see a car",
"Type": "Command"
},
}
}
当发生推理时,AI 模块的响应会通过与请求放置在同一队列返回到服务器。可以单独监视每个队列,以避免不必要的处理。
当收到响应时,将检查该响应的有效负载,以查看是否满足任何触发条件。触发条件如下
条件 | 解释 |
---|---|
队列 | 要监视的队列 |
属性名称 (PropertyName) | 要检查的响应中的属性名称 |
属性值 (PropertyValue) | 要检查的响应中属性的值。 |
属性比较 (PropertyComparison) | 属性值比较方法。这是用于将 PropertyValue 与响应中 PropertyName 属性的值进行比较的操作。有关比较类型,请参见下文。 |
预测集合名称 (PredictionsCollectionName) | 如果指定,系统将查找具有此名称的集合,并对该集合中的每个对象应用 PropertyName / PropertyValue 检查,而不是在响应对象的根目录查找属性 PropertyName |
置信度 (Confidence) | 要与推理返回的置信度分数进行比较的置信度值 |
置信度比较 (ConfidenceComparison) | 置信度比较方法。这是用于将 Confidence 值与推理返回的置信度分数进行比较的操作 |
平台任务 (PlatformTasks) | 根据平台执行的一组任务。参见下文 |
比较方法可以是以下之一
- Equals
- 小于 (LessThan)
- 小于或等于 (LessThanOrEquals)
- 大于
- 大于或等于 (GreaterThanOrEquals)
- 不等于 (NotEquals)
假设我们想要监视名为 objectdetection_queue
的队列,并且我们有兴趣发现标签为 'car' 且置信度至少为 80% 的结果。这将转换为
JSON
但是,假设我们的对象检测模块返回一个它找到的对象的集合,位于 {
"Queue" : "objectdetection_queue",
"PropertyName" : "label",
"PropertyValue" : "car",
"PropertyComparison" : "equals",
"Confidence" : 0.8,
"ConfidenceComparison" : "greaterthanorequals",
...
}
predictions
集合中。该集合中的每个项目都有一个标签和置信度。我们只需提供一个 PredictionsCollectionName
值
JSON
{
"Queue" : "objectdetection_queue",
"PredictionsCollectionName" : "predictions",
"PropertyName" : "label",
"PropertyValue" : "car",
"PropertyComparison" : "equals",
"Confidence" : 0.8,
"ConfidenceComparison" : "greaterthanorequals",
...
}
如果给定队列的触发条件得到满足,则将执行给定平台的任务。任务列在 PlatformTasks
集合下,每个平台都有其自己的条目。
JSON
{
"Queue" : "objectdetection_queue",
"PredictionsCollectionName" : "predictions",
"PropertyName" : "label",
"PropertyValue" : "car",
"PropertyComparison" : "equals",
"Confidence" : 0.8,
"ConfidenceComparison" : "greaterthanorequals",
"PlatformTasks" : {
"Windows" : {
"Command": "cmd",
"Args": "/c echo Hi Windows. I see a car",
"Type": "Command"
},
"Linux" : {
"Command": "bash",
"Args": "echo Hi Linux. I see a car",
"Type": "Command"
}
}
}
支持的平台是
- Windows
- WindowsArm64
- Linux
- LinuxArm64
- MacOS
- MacOSArm64
任务属性 (Task Property) | 解释 |
---|---|
命令 | 要在给定平台上执行的命令 |
参数 (Args) | 要提供给该命令的参数 |
类型 | 命令类型。目前仅支持 "Command" |