GCP-A (34.143.170.20) 無 nomic-embed-text,改用 bge-m3:latest(專用 多語言 embedding 模型),產生 1024 維向量。 變更: - embedding_service.py: 加入 bge-m3:latest=1024 維到 MODEL_DIMENSIONS, 預設模型改為 bge-m3:latest,更新文件說明 - playbook_embedding_repository.py + interfaces.py: 更新維度說明 - migrations/embedding_bge_m3_1024.sql: pgvector schema 遷移 rag_chunks + playbook_embeddings vector(768) → vector(1024) - scripts/reembed_bge_m3.py: 遷移後重新嵌入現有資料的 script 遷移步驟: 1. 執行 embedding_bge_m3_1024.sql(清空現有 768 維向量,變更維度) 2. 執行 python scripts/reembed_bge_m3.py 重新嵌入 2026-05-04 ogt + Claude Sonnet 4.6 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
89 lines
3.2 KiB
PL/PgSQL
89 lines
3.2 KiB
PL/PgSQL
-- ADR-110 GCP-A Primary Embedding 升級:nomic-embed-text 768 → bge-m3 1024 維
|
||
-- 2026-05-04 ogt + Claude Sonnet 4.6
|
||
--
|
||
-- 背景:
|
||
-- GCP-A (34.143.170.20) 無 nomic-embed-text,改用 bge-m3:latest(專用 embedding 模型)
|
||
-- bge-m3 產生 1024 維向量,現有 schema vector(768) 不相容,INSERT 會直接失敗
|
||
--
|
||
-- 影響範圍:
|
||
-- 1. rag_chunks.embedding vector(768) → vector(1024)
|
||
-- 2. playbook_embeddings.embedding vector(768) → vector(1024)
|
||
--
|
||
-- 遷移策略:清空現有向量資料,切換維度後由 re-embed script 重新嵌入
|
||
-- 現有向量資料若要保留,需先 dump 用 nomic 格式備份(舊維度無法轉換)
|
||
--
|
||
-- 執行前置條件:
|
||
-- 1. pgvector >= 0.5.0 (已滿足)
|
||
-- 2. 確認現有向量資料是否需要備份(重要 playbook 建議先備份)
|
||
-- 3. embedding service 已切換到 bge-m3(models.json v1.4.0)
|
||
--
|
||
-- 回滾方式:執行 embedding_rollback_768.sql(需重新嵌入至 nomic-embed-text 格式)
|
||
|
||
BEGIN;
|
||
|
||
-- 1. rag_chunks:清空向量資料,變更欄位維度
|
||
-- ivfflat index 必須先 DROP 才能 ALTER COLUMN
|
||
DROP INDEX IF EXISTS idx_rag_chunks_embedding;
|
||
|
||
ALTER TABLE rag_chunks
|
||
ALTER COLUMN embedding TYPE vector(1024)
|
||
USING NULL; -- 清空現有 768 維向量(維度不可轉換)
|
||
|
||
-- 重建 ivfflat index(lists=100 適合 ~10k 筆以下資料)
|
||
CREATE INDEX IF NOT EXISTS idx_rag_chunks_embedding
|
||
ON rag_chunks
|
||
USING ivfflat (embedding vector_cosine_ops)
|
||
WITH (lists = 100);
|
||
|
||
COMMENT ON COLUMN rag_chunks.embedding IS
|
||
'bge-m3:latest 1024 維向量 — 遷移自 nomic-embed-text 768 維 (2026-05-04 ADR-110)';
|
||
|
||
|
||
-- 2. playbook_embeddings:清空向量資料,變更欄位維度
|
||
DROP INDEX IF EXISTS ix_playbook_embeddings_vec;
|
||
|
||
ALTER TABLE playbook_embeddings
|
||
ALTER COLUMN embedding TYPE vector(1024)
|
||
USING NULL; -- 清空現有 768 維向量
|
||
|
||
CREATE INDEX IF NOT EXISTS ix_playbook_embeddings_vec
|
||
ON playbook_embeddings
|
||
USING ivfflat (embedding vector_cosine_ops)
|
||
WITH (lists = 100);
|
||
|
||
COMMENT ON COLUMN playbook_embeddings.embedding IS
|
||
'bge-m3:latest 1024 維向量 — 遷移自 nomic-embed-text 768 維 (2026-05-04 ADR-110)';
|
||
|
||
COMMENT ON TABLE playbook_embeddings IS
|
||
'Playbook 向量索引 — ADR-110 GCP-A bge-m3 1024 維 (2026-05-04)';
|
||
|
||
|
||
-- 3. 驗證遷移結果
|
||
DO $$
|
||
DECLARE
|
||
v_rag_dim integer;
|
||
v_pb_dim integer;
|
||
BEGIN
|
||
SELECT atttypmod INTO v_rag_dim
|
||
FROM pg_attribute
|
||
JOIN pg_class ON attrelid = pg_class.oid
|
||
WHERE relname = 'rag_chunks' AND attname = 'embedding';
|
||
|
||
SELECT atttypmod INTO v_pb_dim
|
||
FROM pg_attribute
|
||
JOIN pg_class ON attrelid = pg_class.oid
|
||
WHERE relname = 'playbook_embeddings' AND attname = 'embedding';
|
||
|
||
-- atttypmod for vector(1024) = 1024 + 1 = 1025
|
||
IF v_rag_dim != 1025 THEN
|
||
RAISE EXCEPTION 'rag_chunks.embedding 維度驗證失敗:expected 1025, got %', v_rag_dim;
|
||
END IF;
|
||
IF v_pb_dim != 1025 THEN
|
||
RAISE EXCEPTION 'playbook_embeddings.embedding 維度驗證失敗:expected 1025, got %', v_pb_dim;
|
||
END IF;
|
||
|
||
RAISE NOTICE '✅ embedding 遷移驗證通過:rag_chunks 和 playbook_embeddings 均為 vector(1024)';
|
||
END $$;
|
||
|
||
COMMIT;
|