fix(knowledge): 修复知识库嵌入生成中的并发处理问题
原有的多线程 (`ThreadPoolExecutor`) 嵌入生成方式已被重构为完全异步的并发模型。 旧的实现为每个线程创建新的 `asyncio` 事件循环来运行协程,这种模式效率低下且不稳定,容易引发难以调试的并发问题。 新的实现统一在单个事件循环中处理所有异步任务,使用 `asyncio.Semaphore` 控制并发等级,并通过 `asyncio.gather` 高效地执行批量嵌入请求。此更改显著提高了代码的稳定性、性能和可维护性。 BREAKING CHANGE: `EmbeddingStore` 和 `EmbeddingManager` 中的多个核心方法(如 `store_new_data_set`, `check_embedding_model_consistency`, `batch_insert_strs` 等)已从同步方法更改为异步方法。所有对这些方法的调用现在都必须使用 `await`。
This commit is contained in:
@@ -302,7 +302,7 @@ async def import_data(openie_obj: OpenIE | None = None):
|
||||
else:
|
||||
logger.info(f"去重完成,发现 {len(new_raw_paragraphs)} 个新段落。")
|
||||
logger.info("开始生成 Embedding...")
|
||||
embed_manager.store_new_data_set(new_raw_paragraphs, new_triple_list_data)
|
||||
await embed_manager.store_new_data_set(new_raw_paragraphs, new_triple_list_data)
|
||||
embed_manager.rebuild_faiss_index()
|
||||
embed_manager.save_to_file()
|
||||
logger.info("Embedding 处理完成!")
|
||||
|
||||
Reference in New Issue
Block a user