fix(chat): 修复 ChromaDB 1.x 兼容性问题导致索引失败

- 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 <noreply@anthropic.com>
This commit is contained in:
huangjianwu
2026-03-23 14:43:57 +08:00
parent 3cd4c749c1
commit fdc888512a
2 changed files with 7 additions and 12 deletions

View File

@@ -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_idUUID 格式合法)"""
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

View File

@@ -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