随着 AI 嵌入(embedding)向量的广泛应用,时间序列数据库中存储向量数据已经成为常态。SonnetDB 提供了 centroid(embedding) 聚合函数,用于计算一组向量的逐维度平均值——即这些向量的几何中心(centroid)。这个函数对聚类分析、原型向量提取和向量质量监控等场景至关重要。
假设你有一个 3 维向量集合:[1,2,3]、[3,4,5]、[5,6,7],那么 centroid 就是 [(1+3+5)/3, (2+4+6)/3, (3+5+7)/3] = [3, 4, 5]。SonnetDB 的 centroid() 对所有输入向量做逐维度平均,输出一个同维度的向量。
-- 计算某类图像嵌入的平均向量
SELECT
category,
centroid(embedding) AS avg_embedding
FROM image_features
WHERE ts >= '2025-01-01' AND ts < '2025-02-01'
GROUP BY category;
-- 计算每个用户最近 30 天的对话嵌入中心
SELECT
user_id,
time_bucket('1 day', ts) AS day,
centroid(session_embedding) AS daily_center
FROM chat_sessions
WHERE ts >= NOW() - INTERVAL '30 days'
GROUP BY user_id, day
ORDER BY user_id, day;
SonnetDB 支持 distance()、cosine_similarity() 等向量运算函数,可以将 centroid 结果作为参照点:
-- 计算每条记录与当日平均向量的余弦相似度
WITH daily_center AS (
SELECT
time_bucket('1 day', ts) AS day,
centroid(embedding) AS center_vec
FROM product_vectors
WHERE ts >= '2025-04-01'
GROUP BY day
)
SELECT
pv.id,
pv.ts,
cosine_similarity(pv.embedding, dc.center_vec) AS similarity_to_center
FROM product_vectors pv
JOIN daily_center dc
ON time_bucket('1 day', pv.ts) = dc.day
WHERE pv.ts >= '2025-04-01'
ORDER BY similarity_to_center DESC;
-- 用 k-means 风格的 centroid 分析检测 embedding 漂移
SELECT
time_bucket('1 week', ts) AS week,
model_version,
centroid(embedding) AS cluster_center,
COUNT(*) AS vector_count,
ROUND(AVG(vector_magnitude(embedding))::numeric, 4) AS avg_magnitude
FROM llm_embeddings
WHERE ts >= '2025-01-01'
GROUP BY week, model_version
ORDER BY week, model_version;
SonnetDB 将 centroid() 作为内置向量聚合函数,使向量数据的时域聚合变得和传统数值聚合一样自然。