From 22aefbc21657665be09ca58a6366428201c5a78e Mon Sep 17 00:00:00 2001 From: hhs <386998068@qq.com> Date: Sun, 14 Jun 2026 11:55:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=A9=E5=B1=95=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=8C=E6=96=B0=E5=A2=9E=20Session/Heartbe?= =?UTF-8?q?at/Shutdown/STT=20Timeout/HTTP=20Client/TTS=20Output=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/config/config.go | 81 +++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 26 deletions(-) diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index 04f581a..22868f9 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -11,12 +11,19 @@ import ( // Config 应用配置。 type Config struct { - App AppConfig `mapstructure:"app"` - Server ServerConfig `mapstructure:"server"` - Redis RedisConfig `mapstructure:"redis"` - AI AIConfig `mapstructure:"ai"` - Storage StorageConfig `mapstructure:"storage"` - Log LogConfig `mapstructure:"log"` + App AppConfig `mapstructure:"app"` + Server ServerConfig `mapstructure:"server"` + Session SessionConfig `mapstructure:"session"` + Redis RedisConfig `mapstructure:"redis"` + AI AIConfig `mapstructure:"ai"` + Storage StorageConfig `mapstructure:"storage"` + Log LogConfig `mapstructure:"log"` +} + +// SessionConfig 会话管理配置。 +type SessionConfig struct { + TTL int `mapstructure:"ttl"` // 会话过期时间(分钟) + MaxHistory int `mapstructure:"max_history"` // 对话历史上限(条) } type AppConfig struct { @@ -25,10 +32,14 @@ type AppConfig struct { } type ServerConfig struct { - Host string `mapstructure:"host"` - Port int `mapstructure:"port"` - ReadTimeout int `mapstructure:"read_timeout"` - WriteTimeout int `mapstructure:"write_timeout"` + Host string `mapstructure:"host"` + Port int `mapstructure:"port"` + ReadTimeout int `mapstructure:"read_timeout"` + WriteTimeout int `mapstructure:"write_timeout"` + HeartbeatInterval int `mapstructure:"heartbeat_interval"` // 心跳检查间隔(秒) + HeartbeatTimeout int `mapstructure:"heartbeat_timeout"` // 心跳超时(秒) + ShutdownTimeout int `mapstructure:"shutdown_timeout"` // 优雅关闭超时(秒) + AllowedOrigins []string `mapstructure:"allowed_origins"` // CORS 允许的来源,空表示允许所有 } // Addr 返回 host:port 地址。 @@ -49,28 +60,34 @@ type AIConfig struct { } type STTConfig struct { - Provider string `mapstructure:"provider"` - APIKey string `mapstructure:"api_key"` - Model string `mapstructure:"model"` - Endpoint string `mapstructure:"endpoint"` + Provider string `mapstructure:"provider"` + APIKey string `mapstructure:"api_key"` + Model string `mapstructure:"model"` + Endpoint string `mapstructure:"endpoint"` + Timeout int `mapstructure:"timeout"` // STT 超时(秒) + HTTPClientTimeout int `mapstructure:"http_client_timeout"` // HTTP 客户端超时(秒) } type LLMConfig struct { - Provider string `mapstructure:"provider"` - APIKey string `mapstructure:"api_key"` - Model string `mapstructure:"model"` - Endpoint string `mapstructure:"endpoint"` - Timeout int `mapstructure:"timeout"` + Provider string `mapstructure:"provider"` + APIKey string `mapstructure:"api_key"` + Model string `mapstructure:"model"` + Endpoint string `mapstructure:"endpoint"` + Timeout int `mapstructure:"timeout"` + HTTPClientTimeout int `mapstructure:"http_client_timeout"` // HTTP 客户端超时(秒) } type TTSConfig struct { - Provider string `mapstructure:"provider"` - APIKey string `mapstructure:"api_key"` - Model string `mapstructure:"model"` - Voice string `mapstructure:"voice"` - Speed float64 `mapstructure:"speed"` - Endpoint string `mapstructure:"endpoint"` - Timeout int `mapstructure:"timeout"` + Provider string `mapstructure:"provider"` + APIKey string `mapstructure:"api_key"` + Model string `mapstructure:"model"` + Voice string `mapstructure:"voice"` + Speed float64 `mapstructure:"speed"` + Endpoint string `mapstructure:"endpoint"` + Timeout int `mapstructure:"timeout"` + HTTPClientTimeout int `mapstructure:"http_client_timeout"` // HTTP 客户端超时(秒) + OutputFormat string `mapstructure:"output_format"` // 输出格式:mp3/wav + SampleRate int `mapstructure:"sample_rate"` // 输出采样率 } type StorageConfig struct { @@ -94,25 +111,37 @@ func Load() (*Config, error) { // 默认值 v.SetDefault("app.env", "dev") + v.SetDefault("app.version", "dev") v.SetDefault("server.host", "0.0.0.0") v.SetDefault("server.port", 8080) v.SetDefault("server.read_timeout", 30) v.SetDefault("server.write_timeout", 30) + v.SetDefault("server.heartbeat_interval", 30) + v.SetDefault("server.heartbeat_timeout", 60) + v.SetDefault("server.shutdown_timeout", 10) + v.SetDefault("session.ttl", 30) + v.SetDefault("session.max_history", 20) v.SetDefault("redis.addr", "localhost:6379") v.SetDefault("redis.db", 0) v.SetDefault("ai.stt.provider", "deepgram") v.SetDefault("ai.stt.model", "nova-2") v.SetDefault("ai.stt.endpoint", "wss://api.deepgram.com/v1/listen") + v.SetDefault("ai.stt.timeout", 5) + v.SetDefault("ai.stt.http_client_timeout", 30) v.SetDefault("ai.llm.provider", "openai") v.SetDefault("ai.llm.model", "gpt-4o") v.SetDefault("ai.llm.endpoint", "https://api.openai.com/v1") v.SetDefault("ai.llm.timeout", 10) + v.SetDefault("ai.llm.http_client_timeout", 60) v.SetDefault("ai.tts.provider", "openai") v.SetDefault("ai.tts.model", "tts-1") v.SetDefault("ai.tts.voice", "mimo_default") v.SetDefault("ai.tts.speed", 1.0) v.SetDefault("ai.tts.endpoint", "https://api.openai.com/v1") v.SetDefault("ai.tts.timeout", 5) + v.SetDefault("ai.tts.http_client_timeout", 30) + v.SetDefault("ai.tts.output_format", "mp3") + v.SetDefault("ai.tts.sample_rate", 24000) v.SetDefault("storage.driver", "memory") v.SetDefault("log.level", "info") v.SetDefault("log.format", "console")