diff --git a/services/ollama_service.py b/services/ollama_service.py index fd64b0d..4830344 100644 --- a/services/ollama_service.py +++ b/services/ollama_service.py @@ -505,6 +505,37 @@ class OllamaService: return self.generate(prompt, system_prompt=system_prompt, temperature=0.5, timeout=120) + def generate_embedding(self, text: str, model: str = "bge-m3:latest", + host: str = None) -> List[float]: + """ + [ADR-007, Step 3] 呼叫 Ollama API 將文字轉換為向量 Embedding + + 2026-04-19 更新(ADR-003 對齊): + embedding 預設走 Hermes 主機 `EMBEDDING_HOST`(env: EMBEDDING_HOST + → fallback http://192.168.0.111:11434,內網免認證), + 避免 self.host 若指向公開 ollama.wooo.work 時回 401。 + 可透過 host 參數 override。 + """ + target_host = host or os.getenv("EMBEDDING_HOST", "http://192.168.0.111:11434") + try: + payload = {"model": model, "prompt": text} + response = requests.post( + f"{target_host}/api/embeddings", + json=payload, + timeout=60, + ) + if response.status_code == 200: + data = response.json() + return data.get("embedding", []) + else: + logger.error( + f"Ollama Embed Error HTTP {response.status_code} @ {target_host}: {response.text[:200]}" + ) + return [] + except Exception as e: + logger.error(f"Ollama Embed Exception @ {target_host}: {e}") + return [] + # 建立全域服務實例 ollama_service = OllamaService()