diff --git a/docs_v1.0/M4_workspace/2026-05-08_bug_smart_search_ollama_migration.md b/docs_v1.0/M4_workspace/2026-05-08_bug_smart_search_ollama_migration.md new file mode 100644 index 0000000..1418a33 --- /dev/null +++ b/docs_v1.0/M4_workspace/2026-05-08_bug_smart_search_ollama_migration.md @@ -0,0 +1,63 @@ +# Bug: Smart Search 未遷移至 EmbeddingGemma + +## 發現時間 + +2026-05-08 ~01:00(release 前驗證) + +## 症狀 + +`POST /api/v1/search/smart` 回傳 0 筆結果。 + +Smart search 流程: +1. `get_ollama_embedding()` → 呼叫 Ollama(port 11434)→ ❌ Ollama 已停用 +2. `search_parent_chunks_semantic()` → pgvector → 因 embedding 失敗而不執行 + +## 根因 + +`src/api/search.rs:160-186` 的 `get_ollama_embedding()` 未隨 embedding 模型遷移更新。 + +## 受影響程式碼 + +`src/api/search.rs` lines 160-186: + +```rust +async fn get_ollama_embedding(text: &str) -> Result, ...> { + let payload = serde_json::json!({ + "model": "mxbai-embed-large", // ← 舊模型,en only + "prompt": text + }); + let res = client + .post("http://localhost:11434/api/embeddings") // ← Ollama 已停用 + .send().await? + ... +} +``` + +## 建議修正 + +改用 `comic_embed.rs` 的 `Embedder`(已支援 OpenAI API + 768D EmbeddingGemma): + +```rust +// 改用 Embedder(與其他模組一致) +use crate::core::embedding::comic_embed::Embedder; + +let embedder = Embedder::new("embeddinggemma-300m".to_string()); +let embedding = embedder.embed_query(text).await?; +``` + +或者直接使用 `state.embedder`(server.rs 已初始化): + +```rust +// line 55 改為 +let embedding = state.embedder.embed_query(&req.query).await + .map_err(|e| ...)?; +``` + +## 相關檔案 + +| 檔案 | 說明 | +|------|------| +| `src/api/search.rs:160-186` | 需修改的 `get_ollama_embedding()` | +| `src/api/search.rs:47-63` | `smart_search()` 中呼叫 embedding 的位置 | +| `src/core/embedding/comic_embed.rs` | 現行 Embedder(支援雙 API 格式) | +| `scripts/embeddinggemma_server.py` | EmbeddingGemma HTTP server(port 11436) |