From fdc888512a39f4269773e87b165a9dc6c16d05eb Mon Sep 17 00:00:00 2001 From: huangjianwu Date: Mon, 23 Mar 2026 14:43:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E4=BF=AE=E5=A4=8D=20ChromaDB=201.?= =?UTF-8?q?x=20=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE=E9=A2=98=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=B4=A2=E5=BC=95=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ChromaDB 1.x delete/get 不存在的 collection 抛 NotFoundError 而非 ValueError,统一改为 except Exception - 简化 _collection_name,UUID 格式本身就是合法的 collection name - requirements.txt 放宽 chromadb 版本约束 Co-Authored-By: Claude Opus 4.6 --- backend/app/services/vector_store.py | 17 ++++++----------- backend/requirements.txt | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/backend/app/services/vector_store.py b/backend/app/services/vector_store.py index 0b86ce8..e859a9b 100644 --- a/backend/app/services/vector_store.py +++ b/backend/app/services/vector_store.py @@ -66,13 +66,8 @@ class VectorStoreManager: ) def _collection_name(self, task_id: str) -> str: - """ChromaDB collection 名称需满足限制:3-63字符,字母数字开头结尾。""" - safe = re.sub(r'[^a-zA-Z0-9_-]', '_', task_id)[:60] - if not safe or not safe[0].isalnum(): - safe = "t" + safe - if not safe[-1].isalnum(): - safe = safe + "0" - return safe + """ChromaDB collection 名称:直接使用 task_id(UUID 格式合法)。""" + return task_id def index_task(self, task_id: str) -> None: """读取笔记结果并建立向量索引。""" @@ -101,7 +96,7 @@ class VectorStoreManager: # 删除旧 collection(幂等) try: self._client.delete_collection(col_name) - except ValueError: + except Exception: pass collection = self._client.create_collection( @@ -121,7 +116,7 @@ class VectorStoreManager: col_name = self._collection_name(task_id) try: collection = self._client.get_collection(col_name) - except ValueError: + except Exception: logger.warning(f"Collection 不存在: {col_name}") return [] @@ -142,7 +137,7 @@ class VectorStoreManager: try: self._client.delete_collection(col_name) logger.info(f"已删除向量索引: {task_id}") - except ValueError: + except Exception: pass def is_indexed(self, task_id: str) -> bool: @@ -151,5 +146,5 @@ class VectorStoreManager: try: col = self._client.get_collection(col_name) return col.count() > 0 - except ValueError: + except Exception: return False diff --git a/backend/requirements.txt b/backend/requirements.txt index e3780f8..b3afa64 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -16,7 +16,7 @@ celery==5.5.1 certifi==2025.1.31 cffi==1.17.1 charset-normalizer==3.4.1 -chromadb==0.6.3 +chromadb>=0.5.0 click==8.1.8 click-didyoumean==0.3.1 click-plugins==1.1.1