health.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package rag
  2. import (
  3. "context"
  4. "github.com/2930134478/AI-CS/backend/service/embedding"
  5. )
  6. // HealthChecker 健康检查器
  7. type HealthChecker struct {
  8. embeddingProvider embedding.EmbeddingProvider
  9. vectorStoreService *VectorStoreService
  10. }
  11. // NewHealthChecker 创建健康检查器实例(使用 provider 实现配置保存即生效)
  12. func NewHealthChecker(embeddingProvider embedding.EmbeddingProvider, vectorStoreService *VectorStoreService) *HealthChecker {
  13. return &HealthChecker{
  14. embeddingProvider: embeddingProvider,
  15. vectorStoreService: vectorStoreService,
  16. }
  17. }
  18. // Check 执行健康检查
  19. func (h *HealthChecker) Check(ctx context.Context) error {
  20. svc, err := h.embeddingProvider.Get(ctx)
  21. if err != nil {
  22. return err
  23. }
  24. // 检查嵌入服务(简单测试)
  25. testText := "health check"
  26. _, err = svc.EmbedText(ctx, testText)
  27. if err != nil {
  28. return err
  29. }
  30. // 检查向量存储服务(简单搜索测试);未启用 Milvus 时跳过
  31. if h.vectorStoreService != nil && h.vectorStoreService.IsAvailable() {
  32. testVector := make([]float32, svc.GetDimension())
  33. for i := range testVector {
  34. testVector[i] = 0.1
  35. }
  36. _, err = h.vectorStoreService.SearchVectors(ctx, testVector, 1, nil)
  37. if err != nil {
  38. return err
  39. }
  40. }
  41. return nil
  42. }