chromadb_service.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """
  2. ChromaDB 知识库检索服务
  3. """
  4. import httpx
  5. from typing import List, Dict, Any
  6. from utils.logger import logger
  7. class ChromaDBService:
  8. def __init__(self):
  9. # ChromaDB 配置可以从 config 中读取,这里暂时硬编码
  10. self.base_url = "http://localhost:8000" # ChromaDB 服务地址
  11. async def query_documents(self, query: str, n_results: int = 5) -> List[Dict[str, Any]]:
  12. """查询相关文档"""
  13. try:
  14. data = {
  15. "query": query,
  16. "n_results": n_results
  17. }
  18. async with httpx.AsyncClient(timeout=10.0) as client:
  19. response = await client.post(
  20. f"{self.base_url}/query",
  21. json=data
  22. )
  23. response.raise_for_status()
  24. return response.json().get('documents', [])
  25. except httpx.HTTPError as e:
  26. logger.warning(f"ChromaDB API 调用失败,返回模拟数据: {e}")
  27. # 返回模拟数据
  28. return [
  29. {
  30. "content": f"关于 {query} 的相关文档内容...",
  31. "metadata": {"source": "模拟数据"},
  32. "distance": 0.5
  33. }
  34. ]
  35. except Exception as e:
  36. logger.error(f"ChromaDB 服务异常: {e}")
  37. return []
  38. # 全局实例
  39. chromadb_service = ChromaDBService()