diff --git a/coreAgent/src/main/java/com/will/coreAgent/agent/service/AgentMetaService.java b/coreAgent/src/main/java/com/will/coreAgent/agent/service/AgentMetaService.java index 14fa80d..86a80fc 100644 --- a/coreAgent/src/main/java/com/will/coreAgent/agent/service/AgentMetaService.java +++ b/coreAgent/src/main/java/com/will/coreAgent/agent/service/AgentMetaService.java @@ -3,6 +3,7 @@ package com.will.coreAgent.agent.service; import com.will.coreAgent.agent.dto.AgentDefinition; import com.will.coreAgent.agent.dto.AgentMetaResult; import com.will.coreAgent.framework.mcp.McpContextService; +import lombok.extern.slf4j.Slf4j; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -10,6 +11,7 @@ import org.springframework.stereotype.Service; import java.util.List; +@Slf4j @Service @RequiredArgsConstructor @ConditionalOnProperty(prefix = "will.agent", name = "enabled", havingValue = "true") @@ -31,6 +33,8 @@ public class AgentMetaService { public AgentMetaResult getMeta() { List toolNames = mcpContextService.listToolNames(); + log.info("[Agent][Meta] provider={}, model={}, mcpEnabled={}, mcpToolCount={}", + provider, resolveModel(), mcpContextService.isEnabled(), toolNames.size()); return AgentMetaResult.builder() .enabled(true) .provider(provider) diff --git a/coreAgent/src/main/java/com/will/coreAgent/framework/config/AiChatModelConfiguration.java b/coreAgent/src/main/java/com/will/coreAgent/framework/config/AiChatModelConfiguration.java index 006be62..fc522f5 100644 --- a/coreAgent/src/main/java/com/will/coreAgent/framework/config/AiChatModelConfiguration.java +++ b/coreAgent/src/main/java/com/will/coreAgent/framework/config/AiChatModelConfiguration.java @@ -1,5 +1,6 @@ package com.will.coreAgent.framework.config; +import lombok.extern.slf4j.Slf4j; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.ollama.OllamaChatModel; import org.springframework.ai.ollama.api.OllamaApi; @@ -17,6 +18,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils; +@Slf4j @Configuration @ConditionalOnProperty(prefix = "will.agent", name = "enabled", havingValue = "true") public class AiChatModelConfiguration { @@ -29,8 +31,9 @@ public class AiChatModelConfiguration { @Value("${spring.ai.openai.base-url:https://api.openai.com}") String baseUrl, @Value("${spring.ai.openai.chat.options.model:gpt-4o-mini}") String model) { if (!StringUtils.hasText(apiKey)) { - throw new IllegalStateException("will.agent.provider=openai 时需配置 spring.ai.openai.api-key"); + throw new IllegalStateException("will.agent.provider=openai 鏃堕渶閰嶇疆 spring.ai.openai.api-key"); } + log.info("[Agent][AI] provider=openai, baseUrl={}, model={}, apiKey={}", baseUrl, model, maskKey(apiKey)); return OpenAiChatModel.builder() .openAiApi(OpenAiApi.builder().baseUrl(baseUrl).apiKey(apiKey).build()) .defaultOptions(OpenAiChatOptions.builder().model(model).temperature(0.2).build()) @@ -45,8 +48,9 @@ public class AiChatModelConfiguration { @Value("${spring.ai.zhipuai.base-url:https://open.bigmodel.cn/api/paas}") String baseUrl, @Value("${spring.ai.zhipuai.chat.options.model:glm-4-flash}") String model) { if (!StringUtils.hasText(apiKey)) { - throw new IllegalStateException("will.agent.provider=zhipu 时需配置 spring.ai.zhipuai.api-key"); + throw new IllegalStateException("will.agent.provider=zhipu 鏃堕渶閰嶇疆 spring.ai.zhipuai.api-key"); } + log.info("[Agent][AI] provider=zhipu, baseUrl={}, model={}, apiKey={}", baseUrl, model, maskKey(apiKey)); return new ZhiPuAiChatModel( new ZhiPuAiApi(baseUrl, apiKey), ZhiPuAiChatOptions.builder().model(model).temperature(0.2).build()); @@ -58,9 +62,18 @@ public class AiChatModelConfiguration { public ChatModel ollamaChatModel( @Value("${spring.ai.ollama.base-url:http://localhost:11434}") String baseUrl, @Value("${spring.ai.ollama.chat.options.model:qwen2.5:7b}") String model) { + log.info("[Agent][AI] provider=ollama, baseUrl={}, model={}", baseUrl, model); return OllamaChatModel.builder() .ollamaApi(OllamaApi.builder().baseUrl(baseUrl).build()) .defaultOptions(OllamaOptions.builder().model(model).temperature(0.2).build()) .build(); } + + private String maskKey(String apiKey) { + String value = apiKey == null ? "" : apiKey.trim(); + if (value.length() <= 10) { + return "***"; + } + return value.substring(0, 6) + "***" + value.substring(value.length() - 4); + } } diff --git a/wcsApp/src/main/resources/application-dev.yml b/wcsApp/src/main/resources/application-dev.yml index 6d57fb2..d0f8aeb 100644 --- a/wcsApp/src/main/resources/application-dev.yml +++ b/wcsApp/src/main/resources/application-dev.yml @@ -7,11 +7,11 @@ spring: model: ${OLLAMA_MODEL:qwen2.5:7b} temperature: ${OLLAMA_TEMPERATURE:0.2} openai: - api-key: ${OPENAI_API_KEY:} - base-url: ${OPENAI_BASE_URL:https://api.openai.com} + api-key: ${OPENAI_API_KEY:sk-ws-H.EEIXXEX.plGC.MEUCIQDLPhhJgB1hx9zwmr-mQUEXojCqYtyH5Gr2pTdE3pBhWwIgDUoIySiYVOGbFBz0PdEWsgaNj3m8kEBm_9z-bmVhc0c} + base-url: ${OPENAI_BASE_URL:https://dashscope.aliyuncs.com/compatible-mode} chat: options: - model: ${OPENAI_MODEL:gpt-4o-mini} + model: ${OPENAI_MODEL:qwen3.7-plus} temperature: ${OPENAI_TEMPERATURE:0.2} zhipuai: api-key: ${ZHIPUAI_API_KEY:7980536e3ea04550b037db126899bb4f.QhE9ardDCIgT3SG3} diff --git a/wcsApp/src/main/resources/application.yml b/wcsApp/src/main/resources/application.yml index a9ad7c2..ce0113b 100644 --- a/wcsApp/src/main/resources/application.yml +++ b/wcsApp/src/main/resources/application.yml @@ -5,7 +5,7 @@ spring: will: agent: enabled: true - provider: ${WILL_AGENT_PROVIDER:zhipu} + provider: ${WILL_AGENT_PROVIDER:openai} chat: max-messages: ${WILL_AGENT_CHAT_MAX_MESSAGES:30} mcp: