From 1f78cc3589d9780d44efea29f48700f80c2b7dad Mon Sep 17 00:00:00 2001 From: spark Date: Wed, 12 Feb 2025 14:47:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend/backend):=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=94=A8=E6=88=B7=E6=8F=90=E9=97=AE?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=8A=9F=E8=83=BD=20-=20=E5=9C=A8=20Settings?= =?UTF-8?q?=20=E6=A8=A1=E5=9E=8B=E4=B8=AD=E6=B7=BB=E5=8A=A0=20questionTemp?= =?UTF-8?q?late=20=E5=AD=97=E6=AE=B5=20-=20=E5=9C=A8=20OpenAi=20=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E4=BD=93=E4=B8=AD=E6=B7=BB=E5=8A=A0=20QuestionTemplat?= =?UTF-8?q?e=20=E5=AD=97=E6=AE=B5=20-=20=E6=9B=B4=E6=96=B0=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E8=AE=BE=E7=BD=AE=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=94=A8=E6=88=B7=20prompt=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=80=89=E9=A1=B9=20-=20=E4=BF=AE=E6=94=B9=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=20API=E8=B0=83=E7=94=A8=EF=BC=8C=E6=94=AF=E6=8C=81=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=87=AA=E5=AE=9A=E4=B9=89=E7=94=A8=E6=88=B7=20prompt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/data/openai_api.go | 43 +++++++++++++++++----------- backend/data/settings_api.go | 3 ++ frontend/src/components/settings.vue | 26 +++++++++++++---- frontend/wailsjs/go/models.ts | 2 ++ 4 files changed, 51 insertions(+), 23 deletions(-) diff --git a/backend/data/openai_api.go b/backend/data/openai_api.go index 5d262d7..9c6b199 100644 --- a/backend/data/openai_api.go +++ b/backend/data/openai_api.go @@ -23,27 +23,29 @@ import ( // @Desc // ----------------------------------------------------------------------------------- type OpenAi struct { - ctx context.Context - BaseUrl string `json:"base_url"` - ApiKey string `json:"api_key"` - Model string `json:"model"` - MaxTokens int `json:"max_tokens"` - Temperature float64 `json:"temperature"` - Prompt string `json:"prompt"` - TimeOut int `json:"time_out"` + ctx context.Context + BaseUrl string `json:"base_url"` + ApiKey string `json:"api_key"` + Model string `json:"model"` + MaxTokens int `json:"max_tokens"` + Temperature float64 `json:"temperature"` + Prompt string `json:"prompt"` + TimeOut int `json:"time_out"` + QuestionTemplate string `json:"question_template"` } func NewDeepSeekOpenAi(ctx context.Context) *OpenAi { config := getConfig() return &OpenAi{ - ctx: ctx, - BaseUrl: config.OpenAiBaseUrl, - ApiKey: config.OpenAiApiKey, - Model: config.OpenAiModelName, - MaxTokens: config.OpenAiMaxTokens, - Temperature: config.OpenAiTemperature, - Prompt: config.Prompt, - TimeOut: config.OpenAiApiTimeOut, + ctx: ctx, + BaseUrl: config.OpenAiBaseUrl, + ApiKey: config.OpenAiApiKey, + Model: config.OpenAiModelName, + MaxTokens: config.OpenAiMaxTokens, + Temperature: config.OpenAiTemperature, + Prompt: config.Prompt, + TimeOut: config.OpenAiApiTimeOut, + QuestionTemplate: config.QuestionTemplate, } } @@ -102,7 +104,14 @@ func (o OpenAi) NewChatStream(stock, stockCode string) <-chan string { "content": o.Prompt, }, } + question := strutil.ReplaceWithMap(o.QuestionTemplate, map[string]string{ + "{{stockName}}": strutil.RemoveNonPrintable(stock), + "{{stockCode}}": strutil.RemoveNonPrintable(stockCode), + }) + logger.SugaredLogger.Infof("NewChatStream stock:%s stockCode:%s", stock, stockCode) logger.SugaredLogger.Infof("Prompt:%s", o.Prompt) + logger.SugaredLogger.Infof("User Prompt config:%v", o.QuestionTemplate) + logger.SugaredLogger.Infof("User question:%s", question) wg := &sync.WaitGroup{} wg.Add(5) @@ -207,7 +216,7 @@ func (o OpenAi) NewChatStream(stock, stockCode string) <-chan string { wg.Wait() msg = append(msg, map[string]interface{}{ "role": "user", - "content": stock + "分析和总结", + "content": question, }) client := resty.New() client.SetBaseURL(o.BaseUrl) diff --git a/backend/data/settings_api.go b/backend/data/settings_api.go index 1f288e4..5b946d9 100644 --- a/backend/data/settings_api.go +++ b/backend/data/settings_api.go @@ -25,6 +25,7 @@ type Settings struct { OpenAiApiTimeOut int `json:"openAiApiTimeOut"` Prompt string `json:"prompt"` CheckUpdate bool `json:"checkUpdate"` + QuestionTemplate string `json:"questionTemplate"` } func (receiver Settings) TableName() string { @@ -61,6 +62,7 @@ func (s SettingsApi) UpdateConfig() string { "prompt": s.Config.Prompt, "check_update": s.Config.CheckUpdate, "open_ai_api_time_out": s.Config.OpenAiApiTimeOut, + "question_template": s.Config.QuestionTemplate, }) } else { logger.SugaredLogger.Infof("未找到配置,创建默认配置:%+v", s.Config) @@ -80,6 +82,7 @@ func (s SettingsApi) UpdateConfig() string { Prompt: s.Config.Prompt, CheckUpdate: s.Config.CheckUpdate, OpenAiApiTimeOut: s.Config.OpenAiApiTimeOut, + QuestionTemplate: s.Config.QuestionTemplate, }) } return "保存成功!" diff --git a/frontend/src/components/settings.vue b/frontend/src/components/settings.vue index dd8ee27..d767090 100644 --- a/frontend/src/components/settings.vue +++ b/frontend/src/components/settings.vue @@ -28,8 +28,9 @@ const formValue = ref({ temperature: 0.1, maxTokens: 1024, prompt:"", - timeout: 5 - }, + timeout: 5, + questionTemplate: "{{stockName}}分析和总结" + } }) onMounted(()=>{ @@ -53,7 +54,8 @@ onMounted(()=>{ temperature:res.openAiTemperature, maxTokens:res.openAiMaxTokens, prompt:res.prompt, - timeout:res.openAiApiTimeOut + timeout:res.openAiApiTimeOut, + questionTemplate:res.questionTemplate?res.questionTemplate:'{{stockName}}分析和总结', } console.log(res) }) @@ -77,7 +79,8 @@ function saveConfig(){ openAiTemperature:formValue.value.openAI.temperature, tushareToken:formValue.value.tushareToken, prompt:formValue.value.openAI.prompt, - openAiApiTimeOut:formValue.value.openAI.timeout + openAiApiTimeOut:formValue.value.openAI.timeout, + questionTemplate:formValue.value.openAI.questionTemplate }) //console.log("Settings",config) @@ -143,7 +146,8 @@ function importConfig(){ temperature:config.openAiTemperature, maxTokens:config.openAiMaxTokens, prompt:config.prompt, - timeout:config.openAiApiTimeOut + timeout:config.openAiApiTimeOut, + questionTemplate:config.questionTemplate, } // formRef.value.resetFields() }; @@ -243,8 +247,18 @@ window.onerror = function (event, source, lineno, colno, error) { }" /> + + + -
diff --git a/frontend/wailsjs/go/models.ts b/frontend/wailsjs/go/models.ts index fdb7d03..0073ce9 100644 --- a/frontend/wailsjs/go/models.ts +++ b/frontend/wailsjs/go/models.ts @@ -76,6 +76,7 @@ export namespace data { openAiApiTimeOut: number; prompt: string; checkUpdate: boolean; + questionTemplate: string; static createFrom(source: any = {}) { return new Settings(source); @@ -102,6 +103,7 @@ export namespace data { this.openAiApiTimeOut = source["openAiApiTimeOut"]; this.prompt = source["prompt"]; this.checkUpdate = source["checkUpdate"]; + this.questionTemplate = source["questionTemplate"]; } convertValues(a: any, classs: any, asMap: boolean = false): any {