环境
- OS: Windows 11
- NeuroSkill:
1.3.29.57168
- Device: virtual LSL source
SkillVirtualEEG
- EEG model:
Zyphra/ZUNA
- Inference device: CPU
- CLI port:
18444
现象
neuroskill interactive "work" --json 能查到 text labels,但 EEG 搜索始终为空:
{
"labels": [
{
"id": 17,
"text": "work",
"context": "cpu zuna test after embeddings started",
"created_at": 1777890154.0
}
],
"eeg_results": [
{
"label_ts": 1777890154,
"search": {
"query_count": 0,
"results": [],
"searched_days": []
}
}
]
}
UI 中 Interactive 图也没有 EEG neighbors。
已排查
ZUNA 模型文件存在:
C:\Users\ASUS\.cache\huggingface\hub\models--Zyphra--ZUNA\snapshots\...\config.json
C:\Users\ASUS\.cache\huggingface\hub\models--Zyphra--ZUNA\snapshots\...\model-00001-of-00001.safetensors
日志显示 ZUNA 成功加载:
loading EXG encoder backend="zuna" gpu=false
ZUNA weights resolved ...
ZUNA encoder loaded
encoder loaded successfully backend="zuna"
SQLite 中实际已经写入 EEG embeddings:
nonempty eeg embeddings: 11
示例 EEG rows:
id=18015 timestamp=20260504101931000 hnsw_id=0 length(eeg_embedding)=128
id=18383 timestamp=20260504101936000 hnsw_id=1 length(eeg_embedding)=128
id=18656 timestamp=20260504101941000 hnsw_id=2 length(eeg_embedding)=128
怀疑原因
interactive_search 根据 label 的 Unix timestamp 构造搜索窗口,例如:
label created_at = 1777890154
start_utc = 1777889554
end_utc = 1777890754
搜索代码再乘以 1000 后按 Unix milliseconds 查:
let start_ts = (start_utc as i64) * 1000;
let end_ts = (end_utc as i64) * 1000;
WHERE timestamp BETWEEN ?1 AND ?2
但 embeddings.timestamp 实际存储格式是:
YYYYMMDDHHMMSSmmm
20260504101931000
而不是 Unix ms:
两种时间格式不一致,导致 SQL range query 永远匹配不到 EEG rows,因此 query_count=0。
代码线索:
// _ns_skill/crates/skill-daemon/src/embed/accumulator.rs
timestamp: skill_exg::yyyymmddhhmmss_utc()
// _ns_skill/crates/skill-commands/src/lib.rs
let start_ts = (start_utc as i64) * 1000;
let end_ts = (end_utc as i64) * 1000;
WHERE timestamp BETWEEN ?1 AND ?2
期望行为
Interactive search 应该能找到 label 时间窗附近已有的 EEG embeddings,并返回 EEG neighbors / graph edges。
建议修复方向
搜索时需要统一 timestamp 格式。可选方案:
- 将写入
embeddings.timestamp 改为 Unix ms。
- 或在
read_embeddings_in_range 前把 Unix range 转换为 YYYYMMDDHHMMSSmmm range。
- 或在查询中兼容两种格式,因为代码中
ts_ms_to_unix() 已经说明历史上存在两种 timestamp 格式。
环境
1.3.29.57168SkillVirtualEEGZyphra/ZUNA18444现象
neuroskill interactive "work" --json能查到 text labels,但 EEG 搜索始终为空:{ "labels": [ { "id": 17, "text": "work", "context": "cpu zuna test after embeddings started", "created_at": 1777890154.0 } ], "eeg_results": [ { "label_ts": 1777890154, "search": { "query_count": 0, "results": [], "searched_days": [] } } ] }UI 中 Interactive 图也没有 EEG neighbors。
已排查
ZUNA 模型文件存在:
日志显示 ZUNA 成功加载:
SQLite 中实际已经写入 EEG embeddings:
示例 EEG rows:
怀疑原因
interactive_search根据 label 的 Unix timestamp 构造搜索窗口,例如:搜索代码再乘以 1000 后按 Unix milliseconds 查:
但
embeddings.timestamp实际存储格式是:而不是 Unix ms:
两种时间格式不一致,导致 SQL range query 永远匹配不到 EEG rows,因此
query_count=0。代码线索:
期望行为
Interactive search 应该能找到 label 时间窗附近已有的 EEG embeddings,并返回 EEG neighbors / graph edges。
建议修复方向
搜索时需要统一 timestamp 格式。可选方案:
embeddings.timestamp改为 Unix ms。read_embeddings_in_range前把 Unix range 转换为YYYYMMDDHHMMSSmmmrange。ts_ms_to_unix()已经说明历史上存在两种 timestamp 格式。