向量搜尋
最後更新
本頁說明 ToriiDB 向量操作的前置條件,以及 SetVector 如何在背景為 entry 附加 OpenAI embedding。
前置條件
store.New 找到 API key 時會建立 embedder(見 設定)。沒有 embedder 時一般儲存照常運作,向量寫入與搜尋回傳 ErrNoEmbedder。
| 設定 | 值 |
|---|---|
| 模型 | text-embedding-3-small |
| 維度 | TORIIDB_EMBED_DIM,預設 256 |
| Endpoint | https://api.openai.com/v1/embeddings |
| 回應檢查 | 向量長度必須等於維度 |
附加向量
SET article:1 Redis-style embedded storage VECTOR
err := torii.SetVector(ctx, "article:1", "embedded JSON database", store.SetDefault, nil)
err = d.SetVector(ctx, 0, "article:1", "embedded JSON database", nil)
SetVector 拒絕空白文字,先執行一般 Set(值立即可讀,舊向量被清除),再啟動由 store wait group 追蹤的背景工作:
- 在讀鎖下查詢 embedding 快取。
- 未命中時在不持鎖的情況下呼叫 OpenAI(35 秒 timeout),並把結果存入快取。
- 在寫鎖下,只有鍵仍存在且值仍等於被 embedding 的文字時才附加向量。
- 附加一筆帶編碼向量的
SET紀錄。
Embedding 失敗會被靜默丟棄;文字仍保存但沒有向量。Store.Close() 會等待尚未完成的工作。
一致性說明
- 寫入要等背景工作完成後才能被搜尋到。
- 工作完成前修改值,過時的 embedding 會被丟棄。
- 搜尋只比較長度與查詢向量相同的向量。
- 欄位層級的
SET不能帶VECTOR。