1 line
8.4 KiB
JSON
1 line
8.4 KiB
JSON
{"repo": "ao-shuo/psy-ai-healer", "files": {"src/main/java/com/example/psyaihealer/llm/LlmProperties.java": {"8753b4f7cf7e33f5f335f1a0f0cd009afa0d037b": {"t": 1785745686.9504473, "n": 3690, "h": "4dd5860f3317469e", "c": "package com.example.psyaihealer.llm;\n\nimport jakarta.validation.constraints.Min;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.stereotype.Component;\n\n@Component\n@ConfigurationProperties(prefix = \"app.ai\")\npublic class LlmProperties {\n\n /**\n * 是否启用真实 LLM。\n * 关闭时,疗愈会话会降级为内置的 MultiAgentService 占位实现。\n */\n private boolean enabled = false;\n\n /**\n * OpenAI-compatible API 基址,例如:https://api.openai.com/v1\n * 某些厂商会是 https://xxx/v1 或 https://xxx/openai/v1\n */\n private String baseUrl = \"https://api.openai.com/v1\";\n\n /**\n * API Key(建议通过环境变量 APP_AI_API_KEY 注入,不要写入仓库)。\n */\n private String apiKey;\n\n /**\n * 鉴权 Header 名。\n * - OpenAI: Authorization\n * - 部分厂商: X-API-Key\n */\n private String apiKeyHeader = \"Authorization\";\n\n /**\n * 当 apiKeyHeader=Authorization 时使用的 scheme,默认 Bearer。\n */\n private String authorizationScheme = \"Bearer\";\n\n /**\n * 模型名,例如:gpt-4o-mini / deepseek-chat / qwen-turbo 等(取决于你的供应商)。\n */\n private String model = \"gpt-4o-mini\";\n\n /**\n * 生成温度。\n */\n private double temperature = 0.7;\n\n /**\n * 最大输出 token(不同厂商字段可能不同;此处按 OpenAI-compatible 的 max_tokens)。\n */\n @Min(1)\n private int maxTokens = 512;\n\n /**\n * 带入上下文的历史消息条数(仅 user/assistant)。\n */\n @Min(0)\n private int historyLimit = 20;\n\n public boolean isEnabled() {\n String env = firstNonBlank(System.getenv(\"APP_AI_ENABLED\"), System.getenv(\"DEEPSEEK_AI_ENABLED\"));\n if (env != null) {\n return Boolean.parseBoolean(env.trim());\n }\n return enabled;\n }\n\n public void setEnabled(boolean enabled) {\n this.enabled = enabled;\n }\n\n public String getBaseUrl() {\n String env = firstNonBlank(System.getenv(\"APP_AI_BASE_URL\"), System.getenv(\"DEEPSEEK_BASE_URL\"));\n return env != null ? env : baseUrl;\n }\n\n public void setBaseUrl(String baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n public String getApiKey() {\n String env = firstNonBlank(System.getenv(\"APP_AI_API_KEY\"), System.getenv(\"DEEPSEEK_API_KEY\"));\n return env != null ? env : apiKey;\n }\n\n public void setApiKey(String apiKey) {\n this.apiKey = apiKey;\n }\n\n public String getApiKeyHeader() {\n return apiKeyHeader;\n }\n\n public void setApiKeyHeader(String apiKeyHeader) {\n this.apiKeyHeader = apiKeyHeader;\n }\n\n public String getAuthorizationScheme() {\n return authorizationScheme;\n }\n\n public void setAuthorizationScheme(String authorizationScheme) {\n this.authorizationScheme = authorizationScheme;\n }\n\n public String getModel() {\n String env = firstNonBlank(System.getenv(\"APP_AI_MODEL\"), System.getenv(\"DEEPSEEK_MODEL\"));\n return env != null ? env : model;\n }\n\n private static String firstNonBlank(String... values) {\n if (values == null) return null;\n for (String v : values) {\n if (v != null && !v.isBlank()) {\n return v;\n }\n }\n return null;\n }\n\n public void setModel(String model) {\n this.model = model;\n }\n\n public double getTemperature() {\n return temperature;\n }\n\n public void setTemperature(double temperature) {\n this.temperature = temperature;\n }\n\n public int getMaxTokens() {\n return maxTokens;\n }\n\n public void setMaxTokens(int maxTokens) {\n this.maxTokens = maxTokens;\n }\n\n public int getHistoryLimit() {\n return historyLimit;\n }\n\n public void setHistoryLimit(int historyLimit) {\n this.historyLimit = historyLimit;\n }\n}\n"}, "42b3d42ffa24b1c42d9887777b281f38cd406312": {"t": 1785755716.6182005, "n": 3690, "h": "4dd5860f3317469e", "c": "package com.example.psyaihealer.llm;\n\nimport jakarta.validation.constraints.Min;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.stereotype.Component;\n\n@Component\n@ConfigurationProperties(prefix = \"app.ai\")\npublic class LlmProperties {\n\n /**\n * 是否启用真实 LLM。\n * 关闭时,疗愈会话会降级为内置的 MultiAgentService 占位实现。\n */\n private boolean enabled = false;\n\n /**\n * OpenAI-compatible API 基址,例如:https://api.openai.com/v1\n * 某些厂商会是 https://xxx/v1 或 https://xxx/openai/v1\n */\n private String baseUrl = \"https://api.openai.com/v1\";\n\n /**\n * API Key(建议通过环境变量 APP_AI_API_KEY 注入,不要写入仓库)。\n */\n private String apiKey;\n\n /**\n * 鉴权 Header 名。\n * - OpenAI: Authorization\n * - 部分厂商: X-API-Key\n */\n private String apiKeyHeader = \"Authorization\";\n\n /**\n * 当 apiKeyHeader=Authorization 时使用的 scheme,默认 Bearer。\n */\n private String authorizationScheme = \"Bearer\";\n\n /**\n * 模型名,例如:gpt-4o-mini / deepseek-chat / qwen-turbo 等(取决于你的供应商)。\n */\n private String model = \"gpt-4o-mini\";\n\n /**\n * 生成温度。\n */\n private double temperature = 0.7;\n\n /**\n * 最大输出 token(不同厂商字段可能不同;此处按 OpenAI-compatible 的 max_tokens)。\n */\n @Min(1)\n private int maxTokens = 512;\n\n /**\n * 带入上下文的历史消息条数(仅 user/assistant)。\n */\n @Min(0)\n private int historyLimit = 20;\n\n public boolean isEnabled() {\n String env = firstNonBlank(System.getenv(\"APP_AI_ENABLED\"), System.getenv(\"DEEPSEEK_AI_ENABLED\"));\n if (env != null) {\n return Boolean.parseBoolean(env.trim());\n }\n return enabled;\n }\n\n public void setEnabled(boolean enabled) {\n this.enabled = enabled;\n }\n\n public String getBaseUrl() {\n String env = firstNonBlank(System.getenv(\"APP_AI_BASE_URL\"), System.getenv(\"DEEPSEEK_BASE_URL\"));\n return env != null ? env : baseUrl;\n }\n\n public void setBaseUrl(String baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n public String getApiKey() {\n String env = firstNonBlank(System.getenv(\"APP_AI_API_KEY\"), System.getenv(\"DEEPSEEK_API_KEY\"));\n return env != null ? env : apiKey;\n }\n\n public void setApiKey(String apiKey) {\n this.apiKey = apiKey;\n }\n\n public String getApiKeyHeader() {\n return apiKeyHeader;\n }\n\n public void setApiKeyHeader(String apiKeyHeader) {\n this.apiKeyHeader = apiKeyHeader;\n }\n\n public String getAuthorizationScheme() {\n return authorizationScheme;\n }\n\n public void setAuthorizationScheme(String authorizationScheme) {\n this.authorizationScheme = authorizationScheme;\n }\n\n public String getModel() {\n String env = firstNonBlank(System.getenv(\"APP_AI_MODEL\"), System.getenv(\"DEEPSEEK_MODEL\"));\n return env != null ? env : model;\n }\n\n private static String firstNonBlank(String... values) {\n if (values == null) return null;\n for (String v : values) {\n if (v != null && !v.isBlank()) {\n return v;\n }\n }\n return null;\n }\n\n public void setModel(String model) {\n this.model = model;\n }\n\n public double getTemperature() {\n return temperature;\n }\n\n public void setTemperature(double temperature) {\n this.temperature = temperature;\n }\n\n public int getMaxTokens() {\n return maxTokens;\n }\n\n public void setMaxTokens(int maxTokens) {\n this.maxTokens = maxTokens;\n }\n\n public int getHistoryLimit() {\n return historyLimit;\n }\n\n public void setHistoryLimit(int historyLimit) {\n this.historyLimit = historyLimit;\n }\n}\n"}}}} |