RagKnowledgeBaseConfigService.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package com.agent.management.rag.kb;
  2. import com.agent.management.model.entity.RagKnowledgeSourceBinding;
  3. import com.agent.management.repository.RagKnowledgeSourceBindingRepository;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import lombok.RequiredArgsConstructor;
  6. import org.springframework.stereotype.Service;
  7. import java.util.List;
  8. import java.util.Map;
  9. @Service
  10. @RequiredArgsConstructor
  11. public class RagKnowledgeBaseConfigService {
  12. private final RagKnowledgeSourceBindingRepository bindings;
  13. private final ObjectMapper mapper;
  14. public List<RagKnowledgeSourceBinding> listBindings(Long knowledgeBaseId) {
  15. return bindings.findByKnowledgeBaseIdOrderByPriorityAsc(knowledgeBaseId);
  16. }
  17. public RagKnowledgeSourceBinding updateConfig(Long knowledgeBaseId, Long bindingId, Map<String, Object> config) {
  18. RagKnowledgeSourceBinding binding = bindings.findById(bindingId)
  19. .filter(item -> knowledgeBaseId.equals(item.getKnowledgeBaseId()))
  20. .orElseThrow(() -> new IllegalArgumentException("knowledge base binding does not exist: " + bindingId));
  21. validateAuthorization(binding, config);
  22. try {
  23. binding.setConfigJson(mapper.writeValueAsString(config == null ? Map.of() : config));
  24. return bindings.save(binding);
  25. } catch (Exception e) {
  26. throw new IllegalArgumentException("invalid binding config: " + e.getMessage(), e);
  27. }
  28. }
  29. private static void validateAuthorization(RagKnowledgeSourceBinding binding, Map<String,Object> config) {
  30. if (config == null || !"AUTO_GENERATE".equals(String.valueOf(config.get("retrievalMode")))) return;
  31. String key = binding.getSourceType() == com.agent.management.rag.model.RagSourceType.GRAPH ? "allowedLabels"
  32. : binding.getSourceType() == com.agent.management.rag.model.RagSourceType.STRUCTURED_DATA ? "allowedTables" : null;
  33. if (key != null && (!(config.get(key) instanceof List<?> values) || values.isEmpty()))
  34. throw new IllegalArgumentException("automatic generation requires a non-empty explicit " + key);
  35. }
  36. }