SuperAPI AI 工具集

atai-newton-omega-model

数据与分析

查看项目

更新于 10-22 00:17

技能介绍

用途

Omega 是一个时间序列编码器:输入一段传感器读数窗口,返回固定大小的嵌入向量,可用于后续机器学习。该技能调用云端 Omega 模型,使用与 Newton 融合模型相同的 /query 端点——每个窗口一次无状态 POST,返回嵌入,无需批处理作业或会话生命周期。

主要能力

  • 将多变量传感器窗口(振动、压力、流量、网络等)嵌入为向量。
  • 在客户端基于这些向量构建轻量级下游 ML:KNN 分类、异常评分、相似性搜索、PCA/UMAP 投影。
  • 无需搭建托管批处理管道即可进行原型分类。

模型与端点

  • 模型 ID:OmegaEncoder::omega_embeddings_1_4(注意前缀是 OmegaEncoder::,不是 Newton::)。
  • 每个通道输出 768 维嵌入。
  • 端点:POST {ATAI_API_ENDPOINT}/v0.5/query,请求头需 Authorization: Bearer <API_KEY> 和 Content-Type: application/json。
  • 必须同时提供 ATAI_API_KEY 和 ATAI_API_ENDPOINT,没有默认端点。生产环境端点为 https://api.u1.archetypeai.app/v0.5。

请求与响应

推荐每个通道单独请求并并行扇出。每个请求携带一个 data.numeric_array 事件,contents 为 [[/* 单通道:w 个浮点数 */]]。不使用 file_ids,不使用 prompt。

请求示例:

{
  "query": "",
  "model": "OmegaEncoder::omega_embeddings_1_4",
  "normalize_input": false,
  "events": [
    { "type": "data.numeric_array", "event_data": { "contents": [[/* 单通道:w 个浮点数 */]] } }
  ]
}

单通道请求返回的 768 维向量平铺在 response.response 中,需在客户端按通道顺序重组。多通道请求返回 [channels x 768] 形状。

窗口长度

编码器训练支持 16 至 1024 个时间步。小于 1024 的窗口会被填充并掩码,掩码告知模型哪些时间样本是真实的、哪些是填充,因此填充被忽略而非当作信号。不要默认使用 1024,应选择匹配信号动态特性的窗口长度。低于 16 会收到“模型可能表现不佳”的警告;高于 1024 输入会被截断到最后 1024 个点。

normalize_input

当为 true 时,编码器对每个窗口独立进行 z 标准化。这通常不适合比较窗口,因为它会消除跨窗口的幅度差异。对于分类/异常/相似性任务,应在训练池上拟合每个通道的缩放器,应用于每个窗口,并调用时设置 normalize_input=false。仅在一次性单窗口编码且只关心窗口内形状时使用 normalize_input=true。

每通道嵌入

Omega 独立嵌入每个通道。要获得多通道窗口的单一指纹,可将各通道向量拼接成联合多通道状态(例如 4 通道 → 3072 维特征),可选 L2 归一化。该单一向量用于 KNN/异常/投影。

下游模式:嵌入 → KNN 分类

  1. 准备与归一化:在 n-shot 训练池上拟合每通道缩放器(均值/标准差),应用于每个窗口,调用 /query 时 normalize_input=false。
  2. 构建 n-shot 库:每类嵌入若干带标签窗口(如健康/退化),将每个窗口的各通道向量折叠为一个联合特征,L2 归一化。
  3. 对新窗口同样处理,在 k 个最近库特征(欧几里得距离)上多数投票。

几十个带标签嵌入即可构成可用的分类器,无需训练、无需批处理作业。

延迟

  • 单窗口嵌入(4 通道 × 1024,每通道并行):约 2 秒。
  • n-shot 库(8 窗口):约 8 次嵌入,几秒。
  • 留出评估(1000 窗口,8 路并行):约 26 分钟(约 4000 次每通道调用)。

每次嵌入是独立的无状态调用,可通过 --workers 提高并行度,或降低 --max-windows 以权衡吞吐量与预算/时间。

常见陷阱

  • 通道优先,不是行优先。contents 是 [channels x timesteps](每个传感器一个列表),不是 [timesteps x channels]。转置会产生垃圾嵌入。
  • 丢弃时间戳列。时间戳会被解析为数字,朴素地“使用所有数值列”会将其作为假通道包含,若类别文件时间范围不相交,下游分类器可能作弊。
  • 时间连续性很重要。Omega 将窗口读取为有序序列;随机采样或跨间隙的行会产生无意义嵌入。应采样连续块。
  • 模型 ID 前缀是 OmegaEncoder::,不是 Newton::。
  • 每个模型只使用一种嵌入约定。每通道请求(推荐)和全通道单请求对相同数据产生略有不同的向量(每坐标约 2e-2)。构建 n-shot 库和嵌入推理窗口必须使用相同方式,否则 KNN 距离会微妙地错误且无任何报错。
  • “padding with zeros”警告是信息性的,不是错误。16–1024 范围内的窗口原生处理(填充+掩码)。需要处理的警告是“小于 16”(低于训练范围)和“大于 1024,截断到最后 1024 个点”(会静默丢失最后 1024 个样本之前的所有内容,应自行窗口化数据)。

本地设置

# 在虚拟环境中(系统 Python 常为 PEP 668 "externally managed"):
python3 -m venv .venv && source .venv/bin/activate
pip install -r skills/atai-newton-omega-model/references/requirements.txt

# 在仓库根目录(或运行目录上方的任意位置)放置 .env 文件。
# 两个变量都是必需的——没有默认端点:
cat > .env <<EOF
ATAI_API_KEY=sk_...
ATAI_API_ENDPOINT=https://api.u1.archetypeai.app/v0.5
EOF

cd skills/atai-newton-omega-model/references
python embed_query.py     # 嵌入基础
python classify_knn.py    # n-shot KNN 分类

脚本基于官方 Archetype AI Python 客户端(pip install archetypeai):每个脚本通过 make_client() 创建一个客户端并传入辅助函数,/query POST 通过客户端的重试传输。若安装了 python-dotenv 会自动加载 .env(find_dotenv() 从当前工作目录向上查找);否则需导出 ATAI_API_KEY 和 ATAI_API_ENDPOINT。classify_knn.py 需要 numpy。

文件布局

skills/atai-newton-omega-model/
├── SKILL.md                  ← 本文件
├── references/
│   ├── _common.py            ← 官方客户端设置、Omega 嵌入调用、CSV/窗口辅助函数
│   ├── embed_query.py        ← 嵌入基础(调用、窗口长度、normalize_input)
│   ├── classify_knn.py       ← 嵌入 → n-shot KNN 分类(留出评估)
│   ├── requirements.txt      ← 运行时依赖(pip install -r requirements.txt)
│   ├── .env.example          ← 复制为 .env 并填写
│   └── sample_data/
│       ├── bearing_healthy.csv          ← n-shot 库:健康(4 通道)
│       ├── bearing_degraded.csv         ← n-shot 库:退化
│       ├── bearing_inference.csv        ← 留出测试输入,仅传感器(约 1000 窗口,无标签列)
│       ├── bearing_labels.csv           ← 真实标签(timestamp,label),仅用于评分
│       └── README.md                    ← 数据集归属 + 留出布局
└── tests/
    └── test_references.py    ← 无网络单元测试(python -m unittest)

适用场景

  • 将多变量传感器窗口嵌入为向量。
  • 在客户端基于嵌入构建轻量级下游 ML。
  • 无需托管批处理管道即可原型分类。

限制

  • 不适用于文本、图像或视频输入——那是 Newton 融合模型(/query 配合 Newton::c2_6_8b_fp8_...)。
  • 不适用于需要全托管、服务端对数百万行进行分类的场景。
  • 窗口长度限制在 16–1024 时间步。
  • 必须提供 API 密钥和端点,无默认端点。
  • 每通道请求与全通道单请求的嵌入略有差异,需保持一致约定。