From 8f074fb38111e22cfe574d5815028937ccd8b7e1 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 5 Jul 2026 13:04:51 +0800 Subject: [PATCH] feat: add llm temperature setting --- src/composables/useSetupWizard.ts | 6 ++++++ src/locales/en-US.ts | 3 +++ src/locales/zh-CN.ts | 2 ++ src/locales/zh-TW.ts | 2 ++ src/views/setting/AccountSettingSystem.vue | 19 +++++++++++++++++++ src/views/setup/AgentSettingsStep.vue | 14 ++++++++++++++ 6 files changed, 46 insertions(+) diff --git a/src/composables/useSetupWizard.ts b/src/composables/useSetupWizard.ts index 8be39b39..2d6bdfea 100644 --- a/src/composables/useSetupWizard.ts +++ b/src/composables/useSetupWizard.ts @@ -65,6 +65,7 @@ export interface WizardData { baseUrlPreset: string maxContextTokens: number userAgent: string + temperature: number audioInputProvider: string audioInputApiKey: string audioInputBaseUrl: string @@ -253,6 +254,7 @@ const wizardData = ref({ baseUrlPreset: '', maxContextTokens: 64, userAgent: '', + temperature: 0.3, audioInputProvider: 'openai', audioInputApiKey: '', audioInputBaseUrl: '', @@ -1436,6 +1438,7 @@ export function useSetupWizard() { // 保存智能助手设置 async function saveAgentSettings() { try { + const agentTemperature = Number(wizardData.value.agent.temperature ?? 0.3) const agentSettings = { AI_AGENT_ENABLE: wizardData.value.agent.enabled, AI_AGENT_GLOBAL: wizardData.value.agent.enabled ? wizardData.value.agent.global : false, @@ -1452,6 +1455,7 @@ export function useSetupWizard() { LLM_BASE_URL_PRESET: wizardData.value.agent.baseUrlPreset || null, LLM_MAX_CONTEXT_TOKENS: wizardData.value.agent.maxContextTokens, LLM_USER_AGENT: wizardData.value.agent.userAgent || null, + LLM_TEMPERATURE: Number.isFinite(agentTemperature) ? agentTemperature : 0.3, AUDIO_INPUT_PROVIDER: wizardData.value.agent.audioInputProvider || 'openai', AUDIO_INPUT_API_KEY: wizardData.value.agent.audioInputApiKey || null, AUDIO_INPUT_BASE_URL: wizardData.value.agent.audioInputBaseUrl || null, @@ -1567,6 +1571,8 @@ export function useSetupWizard() { wizardData.value.agent.baseUrlPreset = result.data.LLM_BASE_URL_PRESET || '' wizardData.value.agent.maxContextTokens = result.data.LLM_MAX_CONTEXT_TOKENS || 64 wizardData.value.agent.userAgent = result.data.LLM_USER_AGENT || '' + const agentTemperature = Number(result.data.LLM_TEMPERATURE ?? 0.3) + wizardData.value.agent.temperature = Number.isFinite(agentTemperature) ? agentTemperature : 0.3 wizardData.value.agent.audioInputProvider = result.data.AUDIO_INPUT_PROVIDER || 'openai' wizardData.value.agent.audioInputApiKey = result.data.AUDIO_INPUT_API_KEY || '' wizardData.value.agent.audioInputBaseUrl = result.data.AUDIO_INPUT_BASE_URL || '' diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index d5e04e02..d06147ce 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -1671,6 +1671,9 @@ export default { 'When enabled, Agent connections to the current LLM provider use the system proxy from advanced settings.', llmUserAgent: 'User-Agent', llmUserAgentHint: 'User-Agent sent to OpenAI-compatible APIs. Leave empty to use the SDK default.', + llmTemperature: 'Temperature', + llmTemperatureHint: + 'Controls response randomness. Lower values are steadier and higher values are more varied. Backend default is 0.3; 0-2 is usually recommended.', llmProviderAuth: 'Provider Authorization', llmProviderAuthHint: 'Providers that support account authorization can complete sign-in here and reuse the saved auth state.', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 8f57c57a..91bef854 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1660,6 +1660,8 @@ export default { llmUseProxyHint: '启用后,Agent 连接当前 LLM 提供商时会应用高级设置中的系统代理', llmUserAgent: 'User-Agent', llmUserAgentHint: 'OpenAI 兼容接口请求使用的 User-Agent,留空则使用 SDK 默认值', + llmTemperature: '温度参数', + llmTemperatureHint: '控制回复随机性,数值越低越稳定,越高越发散;后端默认 0.3,通常建议 0-2', llmProviderAuth: '提供商授权', llmProviderAuthHint: '支持账号登录授权的提供商,可以直接在这里完成登录并复用授权状态。', llmProviderConnectedAs: '当前已连接:{label}', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index 10bea3c0..e273089e 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -1659,6 +1659,8 @@ export default { llmUseProxyHint: '啟用後,Agent 連接目前 LLM 提供商時會套用進階設定中的系統代理', llmUserAgent: 'User-Agent', llmUserAgentHint: 'OpenAI 兼容接口請求使用的 User-Agent,留空則使用 SDK 預設值', + llmTemperature: '溫度參數', + llmTemperatureHint: '控制回覆隨機性,數值越低越穩定,越高越發散;後端預設 0.3,通常建議 0-2', llmProviderAuth: '提供商授權', llmProviderAuthHint: '支援帳號登入授權的提供商,可以直接在這裡完成登入並重用授權狀態。', llmProviderConnectedAs: '目前已連接:{label}', diff --git a/src/views/setting/AccountSettingSystem.vue b/src/views/setting/AccountSettingSystem.vue index a511f67d..14d879dd 100644 --- a/src/views/setting/AccountSettingSystem.vue +++ b/src/views/setting/AccountSettingSystem.vue @@ -64,6 +64,7 @@ const SystemSettings = ref({ LLM_BASE_URL_PRESET: null, LLM_MAX_CONTEXT_TOKENS: 128, LLM_USER_AGENT: null, + LLM_TEMPERATURE: 0.3, AUDIO_INPUT_PROVIDER: 'openai', AUDIO_INPUT_API_KEY: null, AUDIO_INPUT_BASE_URL: null, @@ -221,6 +222,7 @@ type LlmSettingsSnapshot = { LLM_USE_PROXY: boolean LLM_BASE_URL_PRESET: string LLM_USER_AGENT: string + LLM_TEMPERATURE: number } let llmTestRequestId = 0 @@ -378,6 +380,7 @@ function buildLlmSnapshot(): LlmSettingsSnapshot { LLM_USE_PROXY: Boolean(SystemSettings.value.Basic.LLM_USE_PROXY), LLM_BASE_URL_PRESET: String(SystemSettings.value.Basic.LLM_BASE_URL_PRESET ?? ''), LLM_USER_AGENT: String(SystemSettings.value.Basic.LLM_USER_AGENT ?? ''), + LLM_TEMPERATURE: Number(SystemSettings.value.Basic.LLM_TEMPERATURE ?? 0.3), } } @@ -396,6 +399,7 @@ function buildLlmTestPayload(snapshot: LlmSettingsSnapshot) { use_proxy: snapshot.LLM_USE_PROXY, base_url_preset: snapshot.LLM_BASE_URL_PRESET.trim(), user_agent: snapshot.LLM_USER_AGENT.trim(), + temperature: Number.isFinite(snapshot.LLM_TEMPERATURE) ? snapshot.LLM_TEMPERATURE : 0.3, } } @@ -700,6 +704,8 @@ async function saveSystemSetting(value: { [key: string]: any }) { async function saveBasicSettings() { savingBasic.value = true try { + const llmTemperature = Number(SystemSettings.value.Basic.LLM_TEMPERATURE ?? 0.3) + SystemSettings.value.Basic.LLM_TEMPERATURE = Number.isFinite(llmTemperature) ? llmTemperature : 0.3 if (await saveSystemSetting(SystemSettings.value.Basic)) { // 更新全局设置store,使Web Agent图标实时生效 globalSettingsStore.setData({ ...globalSettingsStore.getData, ...SystemSettings.value.Basic }) @@ -1353,6 +1359,19 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => { prepend-inner-icon="mdi-counter" /> + + + { /> + + + +