feat: add llm temperature setting

This commit is contained in:
jxxghp
2026-07-05 13:04:51 +08:00
parent e16870859d
commit 8f074fb381
6 changed files with 46 additions and 0 deletions
+6
View File
@@ -65,6 +65,7 @@ export interface WizardData {
baseUrlPreset: string baseUrlPreset: string
maxContextTokens: number maxContextTokens: number
userAgent: string userAgent: string
temperature: number
audioInputProvider: string audioInputProvider: string
audioInputApiKey: string audioInputApiKey: string
audioInputBaseUrl: string audioInputBaseUrl: string
@@ -253,6 +254,7 @@ const wizardData = ref<WizardData>({
baseUrlPreset: '', baseUrlPreset: '',
maxContextTokens: 64, maxContextTokens: 64,
userAgent: '', userAgent: '',
temperature: 0.3,
audioInputProvider: 'openai', audioInputProvider: 'openai',
audioInputApiKey: '', audioInputApiKey: '',
audioInputBaseUrl: '', audioInputBaseUrl: '',
@@ -1436,6 +1438,7 @@ export function useSetupWizard() {
// 保存智能助手设置 // 保存智能助手设置
async function saveAgentSettings() { async function saveAgentSettings() {
try { try {
const agentTemperature = Number(wizardData.value.agent.temperature ?? 0.3)
const agentSettings = { const agentSettings = {
AI_AGENT_ENABLE: wizardData.value.agent.enabled, AI_AGENT_ENABLE: wizardData.value.agent.enabled,
AI_AGENT_GLOBAL: wizardData.value.agent.enabled ? wizardData.value.agent.global : false, 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_BASE_URL_PRESET: wizardData.value.agent.baseUrlPreset || null,
LLM_MAX_CONTEXT_TOKENS: wizardData.value.agent.maxContextTokens, LLM_MAX_CONTEXT_TOKENS: wizardData.value.agent.maxContextTokens,
LLM_USER_AGENT: wizardData.value.agent.userAgent || null, 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_PROVIDER: wizardData.value.agent.audioInputProvider || 'openai',
AUDIO_INPUT_API_KEY: wizardData.value.agent.audioInputApiKey || null, AUDIO_INPUT_API_KEY: wizardData.value.agent.audioInputApiKey || null,
AUDIO_INPUT_BASE_URL: wizardData.value.agent.audioInputBaseUrl || 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.baseUrlPreset = result.data.LLM_BASE_URL_PRESET || ''
wizardData.value.agent.maxContextTokens = result.data.LLM_MAX_CONTEXT_TOKENS || 64 wizardData.value.agent.maxContextTokens = result.data.LLM_MAX_CONTEXT_TOKENS || 64
wizardData.value.agent.userAgent = result.data.LLM_USER_AGENT || '' 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.audioInputProvider = result.data.AUDIO_INPUT_PROVIDER || 'openai'
wizardData.value.agent.audioInputApiKey = result.data.AUDIO_INPUT_API_KEY || '' wizardData.value.agent.audioInputApiKey = result.data.AUDIO_INPUT_API_KEY || ''
wizardData.value.agent.audioInputBaseUrl = result.data.AUDIO_INPUT_BASE_URL || '' wizardData.value.agent.audioInputBaseUrl = result.data.AUDIO_INPUT_BASE_URL || ''
+3
View File
@@ -1671,6 +1671,9 @@ export default {
'When enabled, Agent connections to the current LLM provider use the system proxy from advanced settings.', 'When enabled, Agent connections to the current LLM provider use the system proxy from advanced settings.',
llmUserAgent: 'User-Agent', llmUserAgent: 'User-Agent',
llmUserAgentHint: 'User-Agent sent to OpenAI-compatible APIs. Leave empty to use the SDK default.', 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', llmProviderAuth: 'Provider Authorization',
llmProviderAuthHint: llmProviderAuthHint:
'Providers that support account authorization can complete sign-in here and reuse the saved auth state.', 'Providers that support account authorization can complete sign-in here and reuse the saved auth state.',
+2
View File
@@ -1660,6 +1660,8 @@ export default {
llmUseProxyHint: '启用后,Agent 连接当前 LLM 提供商时会应用高级设置中的系统代理', llmUseProxyHint: '启用后,Agent 连接当前 LLM 提供商时会应用高级设置中的系统代理',
llmUserAgent: 'User-Agent', llmUserAgent: 'User-Agent',
llmUserAgentHint: 'OpenAI 兼容接口请求使用的 User-Agent,留空则使用 SDK 默认值', llmUserAgentHint: 'OpenAI 兼容接口请求使用的 User-Agent,留空则使用 SDK 默认值',
llmTemperature: '温度参数',
llmTemperatureHint: '控制回复随机性,数值越低越稳定,越高越发散;后端默认 0.3,通常建议 0-2',
llmProviderAuth: '提供商授权', llmProviderAuth: '提供商授权',
llmProviderAuthHint: '支持账号登录授权的提供商,可以直接在这里完成登录并复用授权状态。', llmProviderAuthHint: '支持账号登录授权的提供商,可以直接在这里完成登录并复用授权状态。',
llmProviderConnectedAs: '当前已连接:{label}', llmProviderConnectedAs: '当前已连接:{label}',
+2
View File
@@ -1659,6 +1659,8 @@ export default {
llmUseProxyHint: '啟用後,Agent 連接目前 LLM 提供商時會套用進階設定中的系統代理', llmUseProxyHint: '啟用後,Agent 連接目前 LLM 提供商時會套用進階設定中的系統代理',
llmUserAgent: 'User-Agent', llmUserAgent: 'User-Agent',
llmUserAgentHint: 'OpenAI 兼容接口請求使用的 User-Agent,留空則使用 SDK 預設值', llmUserAgentHint: 'OpenAI 兼容接口請求使用的 User-Agent,留空則使用 SDK 預設值',
llmTemperature: '溫度參數',
llmTemperatureHint: '控制回覆隨機性,數值越低越穩定,越高越發散;後端預設 0.3,通常建議 0-2',
llmProviderAuth: '提供商授權', llmProviderAuth: '提供商授權',
llmProviderAuthHint: '支援帳號登入授權的提供商,可以直接在這裡完成登入並重用授權狀態。', llmProviderAuthHint: '支援帳號登入授權的提供商,可以直接在這裡完成登入並重用授權狀態。',
llmProviderConnectedAs: '目前已連接:{label}', llmProviderConnectedAs: '目前已連接:{label}',
@@ -64,6 +64,7 @@ const SystemSettings = ref<any>({
LLM_BASE_URL_PRESET: null, LLM_BASE_URL_PRESET: null,
LLM_MAX_CONTEXT_TOKENS: 128, LLM_MAX_CONTEXT_TOKENS: 128,
LLM_USER_AGENT: null, LLM_USER_AGENT: null,
LLM_TEMPERATURE: 0.3,
AUDIO_INPUT_PROVIDER: 'openai', AUDIO_INPUT_PROVIDER: 'openai',
AUDIO_INPUT_API_KEY: null, AUDIO_INPUT_API_KEY: null,
AUDIO_INPUT_BASE_URL: null, AUDIO_INPUT_BASE_URL: null,
@@ -221,6 +222,7 @@ type LlmSettingsSnapshot = {
LLM_USE_PROXY: boolean LLM_USE_PROXY: boolean
LLM_BASE_URL_PRESET: string LLM_BASE_URL_PRESET: string
LLM_USER_AGENT: string LLM_USER_AGENT: string
LLM_TEMPERATURE: number
} }
let llmTestRequestId = 0 let llmTestRequestId = 0
@@ -378,6 +380,7 @@ function buildLlmSnapshot(): LlmSettingsSnapshot {
LLM_USE_PROXY: Boolean(SystemSettings.value.Basic.LLM_USE_PROXY), LLM_USE_PROXY: Boolean(SystemSettings.value.Basic.LLM_USE_PROXY),
LLM_BASE_URL_PRESET: String(SystemSettings.value.Basic.LLM_BASE_URL_PRESET ?? ''), LLM_BASE_URL_PRESET: String(SystemSettings.value.Basic.LLM_BASE_URL_PRESET ?? ''),
LLM_USER_AGENT: String(SystemSettings.value.Basic.LLM_USER_AGENT ?? ''), 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, use_proxy: snapshot.LLM_USE_PROXY,
base_url_preset: snapshot.LLM_BASE_URL_PRESET.trim(), base_url_preset: snapshot.LLM_BASE_URL_PRESET.trim(),
user_agent: snapshot.LLM_USER_AGENT.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() { async function saveBasicSettings() {
savingBasic.value = true savingBasic.value = true
try { 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)) { if (await saveSystemSetting(SystemSettings.value.Basic)) {
// store使Web Agent // store使Web Agent
globalSettingsStore.setData({ ...globalSettingsStore.getData, ...SystemSettings.value.Basic }) globalSettingsStore.setData({ ...globalSettingsStore.getData, ...SystemSettings.value.Basic })
@@ -1353,6 +1359,19 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
prepend-inner-icon="mdi-counter" prepend-inner-icon="mdi-counter"
/> />
</VCol> </VCol>
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<VTextField
v-model.number="SystemSettings.Basic.LLM_TEMPERATURE"
:label="t('setting.system.llmTemperature')"
:hint="t('setting.system.llmTemperatureHint')"
persistent-hint
type="number"
min="0"
max="2"
step="0.1"
prepend-inner-icon="mdi-thermometer"
/>
</VCol>
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showBaseUrlField" cols="12" md="6"> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showBaseUrlField" cols="12" md="6">
<VTextField <VTextField
v-model="SystemSettings.Basic.LLM_USER_AGENT" v-model="SystemSettings.Basic.LLM_USER_AGENT"
+14
View File
@@ -474,6 +474,20 @@ onMounted(async () => {
/> />
</VCol> </VCol>
<VCol cols="12" md="6">
<VTextField
v-model.number="wizardData.agent.temperature"
:label="t('setting.system.llmTemperature')"
:hint="t('setting.system.llmTemperatureHint')"
persistent-hint
prepend-inner-icon="mdi-thermometer"
type="number"
min="0"
max="2"
step="0.1"
/>
</VCol>
<VCol cols="12" md="6"> <VCol cols="12" md="6">
<VSelect <VSelect
v-model="wizardData.agent.thinkingLevel" v-model="wizardData.agent.thinkingLevel"