处理embedding的请求时长。

This commit is contained in:
2025-11-13 16:23:02 +08:00
parent d24b40c9ec
commit 3ae8c677ff
4 changed files with 34 additions and 19 deletions
+22 -8
View File
@@ -6,6 +6,7 @@ import argparse
import json
import os
import sys
import time
from typing import List
import faiss
@@ -38,18 +39,30 @@ def build_index(
print(f"[BuildIndex] Total dishes={len(dish_names)} batch_size={batch_size}")
# 批量编码
# 批量编码(带重试机制)
all_embeddings = []
for i in range(0, len(dish_names), batch_size):
batch = dish_names[i:i+batch_size]
print(f"[BuildIndex] Encoding batch {i//batch_size + 1}/{(len(dish_names)-1)//batch_size + 1} (size={len(batch)})...")
batch_num = i//batch_size + 1
total_batches = (len(dish_names)-1)//batch_size + 1
print(f"[BuildIndex] Encoding batch {batch_num}/{total_batches} (size={len(batch)})...")
try:
batch_embs = embedder.encode(batch)
all_embeddings.append(batch_embs)
except Exception as e:
print(f"[BuildIndex] Error encoding batch {i//batch_size + 1}: {e}")
raise
# 重试机制:最多3次,指数退避
max_retries = 3
for retry in range(max_retries):
try:
batch_embs = embedder.encode(batch)
all_embeddings.append(batch_embs)
break # 成功则跳出重试循环
except Exception as e:
if retry < max_retries - 1:
wait_time = 5 * (retry + 1) # 5s, 10s, 15s
print(f"[BuildIndex] Batch {batch_num} failed (attempt {retry+1}/{max_retries}): {e}")
print(f"[BuildIndex] Retrying in {wait_time} seconds...")
time.sleep(wait_time)
else:
print(f"[BuildIndex] Batch {batch_num} failed after {max_retries} attempts: {e}")
raise
# 合并所有向量
embeddings = np.vstack(all_embeddings)
@@ -140,6 +153,7 @@ def main():
embedder = OllamaEmbedder(
base_url=args.embedder_url,
model=args.embedder_model,
timeout=180, # 3分钟超时
)
# 构建索引
+1 -1
View File
@@ -778,7 +778,7 @@ class MultiModalFoodApp:
# 初始化 Embedder
embedder_url = self.ollama_url_var.get().strip() or DEFAULT_OLLAMA_URL
embedder_model = self.openset_embedder_model_var.get().strip()
embedder = OllamaEmbedder(base_url=embedder_url, model=embedder_model)
embedder = OllamaEmbedder(base_url=embedder_url, model=embedder_model, timeout=180)
# 构建索引(使用合并后的菜品列表)
output_dir = self.openset_index_path_var.get()