embedding_config_controller.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package controller
  2. import (
  3. "net/http"
  4. "github.com/2930134478/AI-CS/backend/service"
  5. "github.com/gin-gonic/gin"
  6. )
  7. // EmbeddingConfigController 知识库向量配置控制器
  8. type EmbeddingConfigController struct {
  9. service *service.EmbeddingConfigService
  10. users *service.UserService
  11. }
  12. // NewEmbeddingConfigController 创建控制器实例
  13. func NewEmbeddingConfigController(s *service.EmbeddingConfigService, users *service.UserService) *EmbeddingConfigController {
  14. return &EmbeddingConfigController{service: s, users: users}
  15. }
  16. // Get 获取当前配置(API Key 脱敏)
  17. // GET /agent/embedding-config?user_id=1
  18. func (e *EmbeddingConfigController) Get(c *gin.Context) {
  19. if !requirePermission(c, e.users, string(service.PermSettings)) {
  20. return
  21. }
  22. _, err := parseUintQuery(c, "user_id")
  23. if err != nil {
  24. c.JSON(http.StatusBadRequest, gin.H{"error": "user_id 不合法"})
  25. return
  26. }
  27. result, err := e.service.GetForAPI()
  28. if err != nil {
  29. c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  30. return
  31. }
  32. c.JSON(http.StatusOK, result)
  33. }
  34. // Update 更新配置(仅管理员)
  35. // PUT /agent/embedding-config
  36. // Body: { "user_id": 1, "embedding_type": "openai", "api_url": "...", "api_key": "...", "model": "...", "customer_can_use_kb": true }
  37. func (e *EmbeddingConfigController) Update(c *gin.Context) {
  38. if !requirePermission(c, e.users, string(service.PermSettings)) {
  39. return
  40. }
  41. var req struct {
  42. UserID uint `json:"user_id" binding:"required"`
  43. EmbeddingType *string `json:"embedding_type"`
  44. APIURL *string `json:"api_url"`
  45. APIKey *string `json:"api_key"`
  46. Model *string `json:"model"`
  47. CustomerCanUseKB *bool `json:"customer_can_use_kb"`
  48. VisitorWebSearchEnabled *bool `json:"visitor_web_search_enabled"`
  49. WebSearchSource *string `json:"web_search_source"`
  50. }
  51. if err := c.ShouldBindJSON(&req); err != nil {
  52. c.JSON(http.StatusBadRequest, gin.H{"error": "请求参数错误"})
  53. return
  54. }
  55. result, err := e.service.Update(req.UserID, service.UpdateEmbeddingConfigInput{
  56. EmbeddingType: req.EmbeddingType,
  57. APIURL: req.APIURL,
  58. APIKey: req.APIKey,
  59. Model: req.Model,
  60. CustomerCanUseKB: req.CustomerCanUseKB,
  61. VisitorWebSearchEnabled: req.VisitorWebSearchEnabled,
  62. WebSearchSource: req.WebSearchSource,
  63. })
  64. if err != nil {
  65. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  66. return
  67. }
  68. c.JSON(http.StatusOK, result)
  69. }