/
vorotov.a.vikt
/
MathEquGen
Обзор
Документация
Войти
/
vorotov.a.vikt
/
MathEquGen
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/main/java/com/example/chat/logic/config/AgentsConfig.java
138 строк
6 KB
VorotovAlexey
разные доработки
10 дек 2025, 09:58
10 дек 2025, 09:58
f42a8b8
Код
Авторство
О чём код?
package com.example.chat.logic.config; import com.example.chat.logic.aiservice.EquationChecker; import com.example.chat.logic.aiservice.EquationGenerator; import com.example.chat.logic.aiservice.EquationAgent; import com.example.chat.logic.component.SimpleChatMemoryProvider; import com.example.chat.logic.component.Transceiver; import com.example.chat.logic.tool.EquationsGeneratorAndCorrectorTool; import com.example.chat.logic.tool.EquationsSupplerTool; import com.example.chat.logic.tool.ExamplesKeeperTool; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.service.AiServices; import io.micrometer.observation.ObservationRegistry; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.observation.ChatModelObservationConvention; import org.springframework.ai.model.SimpleApiKey; import org.springframework.ai.model.openai.autoconfigure.OpenAIAutoConfigurationUtil; import org.springframework.ai.model.openai.autoconfigure.OpenAiChatProperties; import org.springframework.ai.model.openai.autoconfigure.OpenAiConnectionProperties; import org.springframework.ai.model.openai.autoconfigure.OpenAiEmbeddingProperties; import org.springframework.ai.model.tool.DefaultToolExecutionEligibilityPredicate; import org.springframework.ai.model.tool.ToolCallingManager; import org.springframework.ai.model.tool.ToolExecutionEligibilityPredicate; import org.springframework.ai.openai.OpenAiChatModel; import org.springframework.ai.openai.api.OpenAiApi; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.retry.support.RetryTemplate; import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.RestClient; import org.springframework.web.reactive.function.client.WebClient; import static io.micrometer.observation.ObservationRegistry.NOOP; import static org.springframework.ai.model.openai.autoconfigure.OpenAIAutoConfigurationUtil.resolveConnectionProperties; @Configuration @EnableConfigurationProperties({OpenAiConnectionProperties.class, OpenAiChatProperties.class}) public class AgentsConfig { @Autowired private SimpleChatMemoryProvider simpleChatMemoryProvider; @Bean public OpenAiApi openAiApi2(OpenAiConnectionProperties commonProperties, OpenAiChatProperties chatProperties, ObjectProvider<RestClient.Builder> restClientBuilderProvider, ObjectProvider<WebClient.Builder> webClientBuilderProvider, ResponseErrorHandler responseErrorHandler) { OpenAIAutoConfigurationUtil.ResolvedConnectionProperties resolved = resolveConnectionProperties( commonProperties, chatProperties, "chat"); return OpenAiApi.builder() .baseUrl(resolved.baseUrl()) .apiKey(new SimpleApiKey(resolved.apiKey())) .headers(resolved.headers()) .completionsPath(chatProperties.getCompletionsPath()) .embeddingsPath(OpenAiEmbeddingProperties.DEFAULT_EMBEDDINGS_PATH) .restClientBuilder(restClientBuilderProvider.getIfAvailable(RestClient::builder)) .webClientBuilder(webClientBuilderProvider.getIfAvailable(WebClient::builder)) .responseErrorHandler(responseErrorHandler) .build(); } @Bean OpenAiChatModel openAiChatModel2(OpenAiApi openAiApi, OpenAiChatProperties chatProperties, ToolCallingManager toolCallingManager, RetryTemplate retryTemplate, ObjectProvider<ObservationRegistry> observationRegistry, ObjectProvider<ChatModelObservationConvention> observationConvention, ObjectProvider<ToolExecutionEligibilityPredicate> openAiToolExecutionEligibilityPredicate) { var chatModel = OpenAiChatModel.builder() .openAiApi(openAiApi) .defaultOptions(chatProperties.getOptions()) .toolCallingManager(toolCallingManager) .toolExecutionEligibilityPredicate( openAiToolExecutionEligibilityPredicate.getIfUnique(DefaultToolExecutionEligibilityPredicate::new)) .retryTemplate(retryTemplate) .observationRegistry(observationRegistry.getIfUnique(() -> NOOP)) .build(); observationConvention.ifAvailable(chatModel::setObservationConvention); return chatModel; } private final ChatModel chatModel; public AgentsConfig(ChatModel chatModel) { this.chatModel = chatModel; } @Bean ChatClient chatClient(ChatClient.Builder chatClientBuilder) { return chatClientBuilder.build(); } @Bean EquationGenerator equationGenerator() { return AiServices .builder(EquationGenerator.class) .chatModel(chatModel) .chatMemoryProvider(simpleChatMemoryProvider) .build(); } @Bean EquationChecker equationChecker() { return AiServices .builder(EquationChecker.class) .chatModel(chatModel) .build(); } @Bean @Scope("prototype") EquationAgent equationRobot(EquationsGeneratorAndCorrectorTool equationsGeneratorAndCorrectorTool, EquationsSupplerTool equationsSupplerTool, ExamplesKeeperTool examplesKeeperTool ) { return AiServices.builder(EquationAgent.class) .tools(equationsGeneratorAndCorrectorTool, equationsSupplerTool, examplesKeeperTool) .chatModel(chatModel) .build(); } @Bean Transceiver transceiver() { return new Transceiver(); } }