diff --git a/api/core/types/config.go b/api/core/types/config.go index 8e8f1094..1a337a63 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -106,9 +106,10 @@ type ChatConfig struct { Baidu ModelAPIConfig `json:"baidu"` XunFei ModelAPIConfig `json:"xun_fei"` - EnableContext bool `json:"enable_context"` // 是否开启聊天上下文 - EnableHistory bool `json:"enable_history"` // 是否允许保存聊天记录 - ContextDeep int `json:"context_deep"` // 上下文深度 + EnableContext bool `json:"enable_context"` // 是否开启聊天上下文 + EnableHistory bool `json:"enable_history"` // 是否允许保存聊天记录 + ContextDeep int `json:"context_deep"` // 上下文深度 + DallApiURL string `json:"dall_api_url"` // dall-e3 绘图 API 地址 } type Platform string diff --git a/api/handler/chatimpl/openai_handler.go b/api/handler/chatimpl/openai_handler.go index d8eaf6be..dfe0c23d 100644 --- a/api/handler/chatimpl/openai_handler.go +++ b/api/handler/chatimpl/openai_handler.go @@ -136,7 +136,6 @@ func (h *ChatHandler) sendOpenAiMessage( params["user_id"] = userVo.Id params["role_id"] = role.Id params["chat_id"] = session.ChatId - params["icon"] = "/images/avatar/mid_journey.png" params["session_id"] = session.SessionId } data, err := f.Invoke(params) diff --git a/api/service/fun/func_img.go b/api/service/fun/func_img.go index 004251d6..88e0e15e 100644 --- a/api/service/fun/func_img.go +++ b/api/service/fun/func_img.go @@ -14,7 +14,6 @@ import ( type FuncImage struct { name string - apiURL string db *gorm.DB uploadManager *oss.UploaderManager proxyURL string @@ -26,7 +25,6 @@ func NewImageFunc(db *gorm.DB, manager *oss.UploaderManager, config *types.AppCo name: "DALL-E3 绘画", uploadManager: manager, proxyURL: config.ProxyURL, - apiURL: "https://api.openai.com/v1/images/generations", } } @@ -57,9 +55,26 @@ type ErrRes struct { func (f FuncImage) Invoke(params map[string]interface{}) (string, error) { logger.Infof("绘画参数:%+v", params) prompt := utils.InterfaceToString(params["prompt"]) - // 获取绘图 API KEY + // get image generation API KEY var apiKey model.ApiKey - f.db.Where("platform = ? AND type = ?", types.OpenAI, "img").Order("last_used_at ASC").First(&apiKey) + tx := f.db.Where("platform = ? AND type = ?", types.OpenAI, "img").Order("last_used_at ASC").First(&apiKey) + if tx.Error != nil { + return "", fmt.Errorf("error with get generation API KEY: %v", tx.Error) + } + + // get image generation api URL + var conf model.Config + var chatConfig types.ChatConfig + tx = f.db.Where("marker", "chat").First(&conf) + if tx.Error != nil { + return "", fmt.Errorf("error with get chat configs: %v", tx.Error) + } + + err := utils.JsonDecode(conf.Config, &chatConfig) + if err != nil { + return "", fmt.Errorf("error with decode chat config: %v", err) + } + var res imgRes var errRes ErrRes r, err := req.C().SetProxyURL(f.proxyURL).R().SetHeader("Content-Type", "application/json"). @@ -71,7 +86,7 @@ func (f FuncImage) Invoke(params map[string]interface{}) (string, error) { Size: "1024x1024", }). SetErrorResult(&errRes). - SetSuccessResult(&res).Post(f.apiURL) + SetSuccessResult(&res).Post(chatConfig.DallApiURL) if err != nil || r.IsErrorState() { return "", fmt.Errorf("error with http request: %v%v%s", err, r.Err, errRes.Error.Message) } diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index 20e73184..a9108710 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -249,6 +249,10 @@ + 绘图绘图 + + + 保存 @@ -274,6 +278,7 @@ const chat = ref({ context_deep: 0, enable_context: true, enable_history: true, + dall_api_url: "", }) const loading = ref(true) const systemFormRef = ref(null) @@ -309,6 +314,7 @@ onMounted(() => { chat.value.context_deep = res.data.context_deep chat.value.enable_context = res.data.enable_context chat.value.enable_history = res.data.enable_history + chat.value.dall_api_url = res.data.dall_api_url loading.value = false }).catch(e => { ElMessage.error("加载聊天配置失败: " + e.message)