全部產品
Search
文件中心

Cloud Monitor:資料集(Dataset)

更新時間:Mar 28, 2026

Dataset 是 AgentLoop 為 AI 情境設計的新型資料存放區,在傳統日誌儲存的基礎上提供完整 CRUD、靈活 Schema、向量檢索與多維分析能力,讓 AI 運行時資料從"唯讀日誌"升級為"可管理資產"。Dataset 適用於 AI 應用的資料全生命週期管理,包括訓練資料管理、評測資料集構建、Bad Case 追蹤、模型版本迴歸等情境。

背景介紹

與 SLS Logstore 的關係

維度

Logstore

Dataset

資料模型

Append-Only,寫入後不可修改

完整 CRUD,支援增刪改查

Schema

靈活自訂索引配置

自訂 Schema,支援類型: text / long / double / json

檢索能力

全文檢索索引 + SQL 分析

全文檢索索引 + 語義搜尋 + SQL 分析 + 組合查詢

向量能力

支援 embedding 向量索引,支援語義相似性檢索

內建 embedding 向量索引,支援語義相似性檢索

資料修訂

不支援

支援按 ID 更新和刪除

適用情境

日誌採集、監控警示、審計合規

AI 資料管理、評測基準、訓練資料、Bad Case 追蹤

核心能力

能力

說明

自訂 Schema

自訂欄位與類型,支援 textlongdoublejson,JSON 支援嵌套子欄位索引

向量檢索

對 text 欄位配置 embedding 模型即開啟向量索引,支援語義相似性檢索

完整 CRUD

通過標準 SQL 執行 INSERT / UPDATE / DELETE,資料可修訂、可演化

多維檢索

全文檢索索引 + 語義搜尋 + SQL 分析,四種查詢模式自由組合

版本追溯

每條資料自動產生唯一 ID,支援追溯、匯出與迴歸測試

使用步驟

環境準備

安裝 SDK

pip install alibabacloud-cms20240330-inner==6.0.8

配置憑證

通過環境變數或 .env 檔案設定:

export ALIBABA_CLOUD_ACCESS_KEY_ID="your-access-key-id"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your-access-key-secret"
export ALIBABA_CLOUD_ENDPOINT="cms.cn-shanghai.aliyuncs.com"
export ALIBABA_CLOUD_CMS_WORKSPACE="your-workspace"

初始化用戶端

from alibabacloud_cms20240330.client import Client
from alibabacloud_tea_openapi.models import Config

config = Config(
    access_key_id="your-access-key-id",
    access_key_secret="your-access-key-secret",
    endpoint="cms.cn-shanghai.aliyuncs.com",
)
client = Client(config)
workspace = "your-workspace"

建立 Dataset

Schema 欄位類型

Dataset 支援使用者自訂 Schema,可選欄位類型:

類型

說明

可選能力

樣本欄位

text

文本類型,支援全文和語義檢索

chn: 開啟中文分詞;embedding: 開啟向量索引

question、output

long

長整型,支援數值範圍查詢

input_tokens、latency_ms

double

浮點型,支援數值範圍查詢

score

json

JSON 類型,支援嵌套欄位索引

json_keys: 定義子欄位索引

metadata

向量索引:對 text 類型欄位設定 embedding 即開啟向量索引,支援語義檢索。

內建 ID 主鍵:Dataset 自動為每條資料產生唯一的 id 主鍵。UPDATE 和 DELETE 必須通過該主鍵進行。

SDK 樣本

from alibabacloud_cms20240330.models import (
    CreateDatasetRequest,
    IndexJsonKey,
    IndexKey,
)

schema = {
    "input": IndexKey(
        type="text",
        chn=True,                          # 開啟中文分詞
        embedding="text-embedding-v4",     # 開啟向量索引
    ),
    "output": IndexKey(
        type="text",
        chn=True,
        embedding="text-embedding-v4",
    ),
    "model": IndexKey(type="text"),
    "score": IndexKey(type="double"),
    "metadata": IndexKey(
        type="json",
        json_keys={
            "input_tokens": IndexJsonKey(type="long"),
            "output_tokens": IndexJsonKey(type="long"),
        },
    ),
}

request = CreateDatasetRequest(
    dataset_name="my_dataset",
    description="AI 問答資料集",
    schema=schema,
)
client.create_dataset(workspace, request)

資料寫入

Dataset 支援通過 ExecuteQuery 介面執行 INSERT SQL 寫入。

插入資料(INSERT)

資料寫入通過 ExecuteQuery 介面執行標準 SQL。

單條插入

from alibabacloud_cms20240330.models import ExecuteQueryRequest

sql = """
INSERT INTO my_dataset (input, output, model, score)
VALUES (
    '如何查看最近一小時的錯誤記錄檔?',
    '使用查詢語句: level:ERROR',
    'qwen-plus',
    0.95
)
"""
request = ExecuteQueryRequest(query=sql, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)
print(f"affected_rows: {response.body.meta.affected_rows}")

批量插入

sql = """
INSERT INTO my_dataset (input, output, model, score)
VALUES
    ('統計今天各介面調用次數', 'SELECT api, count(*) ...', 'gpt-4o', 0.88),
    ('尋找響應逾時的請求', 'latency > 5000 | SELECT ...', 'claude-3.5-sonnet', 0.92)
"""
request = ExecuteQueryRequest(query=sql, type="SQL")
client.execute_query(workspace, "my_dataset", request)

更新資料(UPDATE)

更新操作必須通過 id 主鍵進行,暫不支援批次更新:

sql = """
UPDATE my_dataset
SET score = 0.98, output = '最佳化後的回答...'
WHERE id = 'your-doc-id'
"""
request = ExecuteQueryRequest(query=sql, type="SQL")
client.execute_query(workspace, "my_dataset", request)

刪除資料(DELETE)

刪除操作同樣必須通過 id 主鍵進行:

sql = "DELETE FROM my_dataset WHERE id = 'your-doc-id'"
request = ExecuteQueryRequest(query=sql, type="SQL")
client.execute_query(workspace, "my_dataset", request)
提示:可先通過查詢擷取目標資料的 id,再執行更新或刪除。

資料查詢

資料查詢通過 ExecuteQuery 介面(type="SQL"),支援四種查詢模式,可自由組合:

查詢模式

文法

說明

全文檢索索引

field:keyword

關鍵詞匹配,支援 AND / OR / 數值比較

語義搜尋

similarity() / semantic_distance()

向量語義檢索(兩種形式)

SQL 分析

SELECT ... FROM dataset_name ...

標準 SQL 查詢與統計

組合查詢

<檢索條件> | <SQL 陳述式>

自由組合

全文檢索索引

全文檢索索引使用關鍵詞匹配文法,與 SLS 查詢文法一致:

文法

說明

樣本

field:keyword

單欄位匹配

input:錯誤

field1:v1 AND field2:v2

組合條件

model:qwen-plus AND input:日誌

field:v1 OR field:v2

或條件

model:qwen-plus OR model:gpt-4o

field > value

數值比較

score > 0.9

field:v1 AND field > n

混合條件

model:qwen-plus AND score > 0.8

使用關鍵詞匹配文法,可單獨使用或通過管道 | 與 SQL 組合:

from alibabacloud_cms20240330.models import ExecuteQueryRequest

# 全文檢索索引
request = ExecuteQueryRequest(query="input:錯誤", type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

# 全文檢索索引 + SQL
query = "input:錯誤 | SELECT input, score FROM my_dataset ORDER BY score DESC LIMIT 5"
request = ExecuteQueryRequest(query=query, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

語義搜尋

語義搜尋基於向量相似性進行檢索,前提是對應欄位已在 Schema 中配置 embedding 向量索引。

提供兩種使用形式,滿足不同的查詢和分析情境:

形式一:檢索文法 similarity()

用於管道 | 左側的檢索條件中,可與全文檢索索引文法通過 AND / OR混合使用:

# 語義搜尋
request = ExecuteQueryRequest(query="similarity(input, '日誌分析') < 0.3", type="SQL")

# 語義搜尋 + 全文檢索索引
request = ExecuteQueryRequest(
    query="similarity(input, '日誌分析') < 0.3 AND model:qwen-plus",
    type="SQL",
)

# 語義搜尋 + SQL
request = ExecuteQueryRequest(
    query="similarity(input, '日誌分析') < 0.3 | SELECT input, score FROM my_dataset ORDER BY score DESC",
    type="SQL",
)

形式二:SQL 函數 semantic_distance()

用於管道 | 右側的 SQL 陳述式中,可在 SELECTWHEREORDER BY 中靈活使用:

sql = """
SELECT input, semantic_distance(input, '日誌查詢統計') AS similarity
FROM my_dataset
WHERE semantic_distance(input, '日誌查詢統計') < 0.3
ORDER BY semantic_distance(input, '日誌查詢統計') ASC
"""
request = ExecuteQueryRequest(query=sql, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

兩種形式對比

維度

similarity()

semantic_distance()

位置

| 左側(檢索條件)

| 右側(SQL 陳述式)

用途

快速語義過濾

精確分析與排序

可否擷取距離值

是(可作為 SELECT 列)

可否與全文檢索索引組合

是(AND / OR)

是(在 SQL WHERE 中)

典型情境

快速召回語義相關資料

精排、相似性排序、距離分析

閾值建議:閾值範圍 0-1,值越小表示語義越相似。

閾值範圍

匹配程度

適用情境

0.1 - 0.2

嚴格匹配

精確去重、近似尋找

0.2 - 0.3

常規匹配

相關內容檢索

0.3 - 0.5

寬鬆匹配

探索性搜尋、主題聚類

SQL 分析

Dataset 支援標準 SQL 查詢與統計分析,包括 GROUP BY / HAVING / ORDER BY / LIMIT / CTE / 子查詢 / 視窗函數等。SQL 引擎基於 PrestoSQL 文法,在服務端轉換為 PostgreSQL 執行。

sql = """
SELECT model, count(*) AS total, avg(score) AS avg_score
FROM my_dataset
GROUP BY model
ORDER BY total DESC
"""
request = ExecuteQueryRequest(query=sql, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

分頁使用 LIMIT offset, count 文法:

page_size = 10
page = 2
skip = (page - 1) * page_size
# 第 2 頁(跳過 10 條,取 10 條)
sql = f"SELECT * FROM my_dataset ORDER BY score DESC LIMIT {skip}, {page_size}"
request = ExecuteQueryRequest(query=sql, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

支援的函數

支援的 SQL 子句

子句

支援

說明

SELECT

列選擇、運算式、別名、*、子查詢

FROM

單表查詢、子查詢(帶別名)

WHERE

比較運算、IN / NOT INBETWEENLIKEIS NULLEXISTSIS DISTINCT FROM

GROUP BY

基礎分組、GROUPING SETSROLLUPCUBE

HAVING

彙總條件過濾

ORDER BY

ASC / DESCNULLS FIRST / NULLS LAST

LIMIT

LIMIT countLIMIT offset, count

WITH (CTE)

公用表運算式

JOIN

不支援任何類型的 JOIN

UNION / INTERSECT / EXCEPT

不支援集合操作

彙總函式

函數

說明

樣本

count(*)

計數

SELECT count(*) FROM ds

count(column)

非空計數

SELECT count(score) FROM ds

count(DISTINCT column)

去重計數

SELECT count(DISTINCT model) FROM ds

sum(column)

求和

SELECT sum(score) FROM ds

avg(column)

平均值

SELECT avg(score) FROM ds

min(column) / max(column)

最小 / 最大值

SELECT min(score), max(score) FROM ds

count_if(condition)

條件計數

SELECT count_if(score > 0.9) FROM ds

approx_percentile(column, p)

近似百分位元

SELECT approx_percentile(score, 0.5) FROM ds

JSON 函數

函數

說明

樣本

json_extract_scalar(col, '$.path')

提取 JSON 標量值

json_extract_scalar(metadata, '$.input_tokens')

json_size(col, '$.path')

擷取 JSON 數組/對象大小

json_size(metadata, '$.tags')

注意json_extract_scalar 僅支援標量值提取。json_size 不支援萬用字元路徑(如 $.a[*])。不支援 json_extract 函數。

日期時間函數

函數

說明

樣本

now()

目前時間

WHERE __time__ > to_unixtime(now() - interval '1' day)

from_unixtime(epoch)

Unix 時間戳記轉時間

SELECT from_unixtime(__time__)

to_unixtime(timestamp)

時間轉 Unix 時間戳記

WHERE __time__ >= to_unixtime(...)

date(timestamp)

提取日期

SELECT date(from_unixtime(__time__))

date_add(unit, n, timestamp)

日期加減

date_add('day', 7, ts)

date_diff(unit, ts1, ts2)

日期差值

date_diff('day', ts1, ts2)

INTERVAL

時間間隔

now() - interval '7' day

類型轉換與運算式

函數 / 運算式

說明

樣本

CAST(expr AS type)

類型轉換

CAST(score AS varchar)

try_cast(expr AS type)

安全類型轉換(失敗返回 NULL)

try_cast(val AS bigint)

typeof(expr)

擷取類型名

typeof(score)

CASE WHEN ... THEN ... ELSE ... END

條件運算式

BETWEEN ... AND ...

範圍判斷

score BETWEEN 0.8 AND 1.0

ARRAY[...]

數組構造

ARRAY[1, 2, 3]

`

`

視窗函數

函數

說明

樣本

row_number() OVER (...)

行號

row_number() OVER (PARTITION BY model ORDER BY score DESC)

rank() OVER (...)

排名

rank() OVER (PARTITION BY model ORDER BY score DESC)

其他常用函數

函數

說明

round(value, n)

四捨五入

floor(value)

向下取整

length(str)

字串長度

lower(str)

轉小寫

coalesce(a, b, ...)

返回第一個非空值

組合查詢

四種查詢模式可通過管道 | 自由組合,檢索條件放 | 左側,SQL 放右側:

# 全文 + SQL + semantic_distance
query = """
model:qwen-plus
| SELECT input, output, score
  FROM my_dataset
  WHERE semantic_distance(input, '資料分析') < 0.4
  ORDER BY score DESC
  LIMIT 10
"""
request = ExecuteQueryRequest(query=query, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)
關於 SQL 支援的完整能力(函數、子句、限制等),請參閱 Dataset 產品功能文檔

Dataset 管理

操作

API

說明

建立

client.create_dataset(workspace, CreateDatasetRequest)

建立 Dataset 並定義 Schema

查看

client.get_dataset(workspace, dataset_name)

擷取 Dataset 詳情(含 Schema)

列舉

client.list_datasets(workspace, ListDatasetsRequest)

列舉所有 Dataset,支援分頁和名稱過濾

更新

client.update_dataset(workspace, dataset_name, UpdateDatasetRequest)

更新 Dataset 描述

刪除

client.delete_dataset(workspace, dataset_name)

刪除 Dataset(不可恢複)

列舉 Dataset

from alibabacloud_cms20240330.models import ListDatasetsRequest

request = ListDatasetsRequest(max_results=100)
response = client.list_datasets(workspace, request)
for ds in response.body.datasets:
    print(f"{ds.dataset_name}: {ds.description}")

# 按名稱過濾
request = ListDatasetsRequest(max_results=100, dataset_name="my_dataset")
response = client.list_datasets(workspace, request)

擷取 Dataset 詳情

response = client.get_dataset(workspace, "my_dataset")
print(response.body.to_map())  # 包含 Schema、建立時間等

更新 Dataset

from alibabacloud_cms20240330.models import UpdateDatasetRequest

request = UpdateDatasetRequest(description="更新後的描述")
client.update_dataset(workspace, "my_dataset", request)

刪除 Dataset

# 謹慎操作,資料不可恢複
client.delete_dataset(workspace, "my_dataset")

典型情境

情境一:Bad Case 管理

從線上資料中篩選低分樣本,人工標註後更新:

# 1. 篩選低分樣本
sql = "SELECT id, input, output, score FROM my_dataset WHERE score < 0.3 ORDER BY score ASC LIMIT 50"
request = ExecuteQueryRequest(query=sql, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

# 2. 人工審核後更新標註
sql = """
UPDATE my_dataset
SET human_label = 'hallucination', fix_suggestion = '需要增加事實核查'
WHERE id = 'bad-case-id'
"""
client.execute_query(workspace, "my_dataset", ExecuteQueryRequest(query=sql, type="SQL"))

情境二:版本迴歸測試

基於 Dataset 構建評測基準集,對比不同模型版本效果:

# 擷取基準測試集
sql = "SELECT id, input, expected_output FROM my_dataset WHERE is_baseline = 'true'"
request = ExecuteQueryRequest(query=sql, type="SQL")
baseline = client.execute_query(workspace, "my_dataset", request)

# 運行新版本模型,對比結果
for sample in baseline.body.data:
    new_output = run_new_model(sample["input"])
    score = evaluate(new_output, sample["expected_output"])
    # 記錄評測結果...

情境三:訓練資料匯出

篩選高品質樣本匯出用於模型 SFT 微調或 RL 後訓練:

import json

# 查詢高品質樣本
sql = """
SELECT input, output FROM my_dataset
WHERE human_label = 'correct' AND score >= 0.9
LIMIT 10000
"""
request = ExecuteQueryRequest(query=sql, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

# 匯出為 JSONL 格式
with open("sft_data.jsonl", "w") as f:
    for item in response.body.data:
        f.write(json.dumps({
            "input": item["input"],
            "output": item["output"],
        }, ensure_ascii=False) + "\n")

限制與約束

約束項

限制

說明

預設返回行數

1,000

未指定 LIMIT 時,預設返回 1000 條

單次查詢最大返回行數

100,000

LIMIT 不可超過此值

單次查詢最大返回資料量

100MB

單次查詢返回的資料量不超過此值

JOIN

不支援

暫不支援任何類型的 JOIN 操作

集合操作

不支援

暫不支援 UNION / INTERSECT / EXCEPT

跨 Dataset 查詢

不支援

暫不支援與其他 Dataset 的聯集查詢

UPDATE / DELETE 方式

僅支援按 id 主鍵

暫不支援按條件批次更新 / 刪除

部分函數

不支援

approx_distinctmax_bynormalizetransformsequence、URL 函數等

參數預留位置

不支援

不支援 ? 參數化查詢

最佳實務

Schema 設計

  • 有高頻語義搜尋需求的欄位,建議配置 embedding 開啟向量索引。

  • 使用 json 類型支援動態擴充的資料列,如中繼資料、自訂多維打標列等。

資料管理

  • 通過查詢擷取 id 後再執行更新 / 刪除。

  • 定期清理低品質資料,保持信噪比。

  • 結合 Pipeline 實現自動化資料清洗入庫。

查詢最佳化

  • 語義搜尋配合條件過濾縮小範圍。

  • 巨量資料量情境建議使用分頁方式分批擷取資料。

  • 複雜統計優先使用 SQL 分析。

常見問題

Dataset 與 LogStore 有什麼區別?

LogStore 是 Append-Only 的日誌儲存,適合寫入後不再修改的情境;Dataset 支援完整的 CRUD 操作,適合需要修訂、打標、版本管理的 AI 資料情境。

如何擷取資料的 ID?

插入資料時系統自動產生 id。可通過查詢擷取:

sql = "SELECT id, input FROM my_dataset LIMIT 10"
request = ExecuteQueryRequest(query=sql, type="SQL")
response = client.execute_query(workspace, "my_dataset", request)

更新和刪除為什麼必須用 ID?

為保證資料一致性和操作安全,UPDATE 和 DELETE 目前僅支援按主鍵 id 操作,不支援批量條件更新 / 刪除。

語義搜尋的閾值如何選擇?

similarity() / semantic_distance() 返迴向量距離,範圍 0-1,越小越相似。建議:

  • 0.1 - 0.2:嚴格匹配。

  • 0.2 - 0.3:常規匹配。

  • 0.3 - 0.5:寬鬆匹配。

資料如何自動入庫?

AgentLoop 提供 Pipeline 資料處理能力,支援從 LogStore 自動清洗、去重、評估後寫入 Dataset。詳見 Pipeline 使用指南。

API 參考

Dataset 管理

操作

方法

參數

建立

client.create_dataset(workspace, request)

CreateDatasetRequest(dataset_name, description, schema)

查看

client.get_dataset(workspace, dataset_name)

列舉

client.list_datasets(workspace, request)

ListDatasetsRequest(max_results, next_token, dataset_name)

更新

client.update_dataset(workspace, dataset_name, request)

UpdateDatasetRequest(description)

刪除

client.delete_dataset(workspace, dataset_name)

資料操作

所有資料操作統一通過 ExecuteQuery 介面:

from alibabacloud_cms20240330.models import ExecuteQueryRequest

request = ExecuteQueryRequest(query="...", type="SQL")
response = client.execute_query(workspace, dataset_name, request)

參數

類型

說明

query

string

支援四種查詢模式:全文檢索索引、語義搜尋、SQL 分析、組合查詢。語義搜尋提供 similarity()(檢索文法)和 semantic_distance()(SQL 函數)兩種形式

type

string

目前固定值 "SQL"

響應結構

{
  "data": [{"id": "...", "input": "...", "score": 0.95, ...}],
  "meta": {
    "count": 10,
    "affectedRows": 0,
    "elapsedMillisecond": 42,
    "progress": "Complete"
  },
  "requestId": "..."
}

欄位

說明

data

查詢結果數組(SELECT 操作)

meta.count

返回的資料條數

meta.affectedRows

影響的行數(INSERT / UPDATE / DELETE 操作)

meta.elapsedMillisecond

查詢耗時(毫秒)

SDK 範例程式碼

完整可啟動並執行範例程式碼見 dataset/samples/v2/ 目錄:

檔案

說明

代碼附件

quickstart.py

端到端自閉環示範(建立→寫入→查詢→更新→刪除)

quickstart.py

manage_dataset.py

Dataset 資源管理(建立 / 查看 / 列舉 / 更新 / 刪除)

manage_dataset.py

write_data.py

資料寫入(單條插入 / 批量插入 / 更新 / 刪除)

write_data.py

query_data.py

資料查詢(全文檢索索引 / 語義搜尋 / SQL 分析 / 組合查詢 / 分頁)

query_data.py