Команда Spring АйО перевела статью, которая покажет, как интегрировать Spring AI с Foundry Local — десктопным приложением от Microsoft, совместимым с OpenAI API. Вы узнаете, как настроить локальную AI-модель, подключить её к Spring Boot и создать REST-эндпоинты для чат-бота и суммаризации текста. Всё это — с акцентом на производительность, безопасность и автономность.
Что такое Azure AI Foundry и Foundry Local?
Azure AI Foundry — это комплексная платформа Microsoft для корпоративной разработки и внедрения решений на основе искусственного интеллекта. Она позволяет организациям создавать, настраивать и масштабировать AI-решения, обеспечивая инструменты, сервисы и инфраструктуру для разработки, тонкой настройки и развертывания моделей AI в производственных средах с соблюдением требований корпоративной безопасности и соответствия стандартам.
Foundry Local — это десктопное приложение-компаньон Azure AI Foundry, которое предоставляет возможности высокопроизводительного выполнения AI-моделей непосредственно на Вашей локальной машине. Это инструмент с открытым исходным кодом, предлагающий API, совместимый с OpenAI, что позволяет разработчикам запускать, тестировать и интегрировать большие языковые модели (LLM) прямо на собственном компьютере, без передачи данных в облако. Такой подход идеально подходит для разработки, тестирования и сценариев, требующих конфиденциальности данных или работы в автономном режиме.
Зачем использовать Foundry Local с Spring AI?
Запуск AI-моделей локально становится всё более ценным для Java-разработчиков, стремящихся снизить задержки, избавиться от зависимости от сетевого соединения и сократить расходы на использование API крупных моделей. Foundry Local обеспечивает простую интеграцию благодаря предоставлению API, совместимого с OpenAI, что позволяет Spring AI взаимодействовать с локальными моделями так, как если бы они были размещены в облаке.
В этом руководстве мы пошагово рассмотрим процесс настройки Foundry Local, его интеграции с проектом Spring Boot с использованием Spring AI, а также создание простого REST API для взаимодействия с AI-моделью в задачах чат-общения и суммирования. Это позволит вам выполнять высокопроизводительные локальные вычисления с моделями, такими как Phi-3.5, Qwen или DeepSeek, используя привычные подходы и структуры Spring.
Быстрая настройка
Шаг 1: Установите Foundry Local
Пользователи macOS могут установить Foundry Local с помощью Homebrew:
$ brew tap microsoft/foundrylocal $ brew install foundrylocal $ foundry --help
Это установит необходимые инструменты командной строки (CLI) для локального запуска и управления языковыми моделями.
Шаг 2: Загрузите и запустите модель
Прежде чем начать работу с моделью, необходимо просмотреть список доступных моделей, скачать нужную и загрузить её в память:
# Discover available models $ foundry model list # Download the Phi-3.5 mini model $ foundry model download phi-3.5-mini # Load it into memory for serving $ foundry model load phi-3.5-mini # Check model and service status $ foundry service status
После загрузки модель будет доступна через локальный HTTP-эндпоинт с интерфейсом, совместимым с OpenAI.
Создание проекта Spring Boot
Вы можете воспользоваться Spring Initializr для быстрого создания проекта с необходимыми зависимостями.
Выполните следующую команду cURL, чтобы скачать стартовый Spring-проект с нужными зависимостями:
curl -G https://start.spring.io/starter.zip \ -d javaVersion=21 \ -d baseDir=demo \ -d language=java \ -d bootVersion=3.5.0 \ -d type=maven-project \ -d dependencies=web,spring-ai-openai \ -o demo.zip
Теперь распакуйте проект и откройте его в Visual Studio Code.
unzip demo.zip code demo/
Комментарий от команды Spring АйО
Поскольку пост написан Microsoft, конечно, они используют в качестве редактора VSCode. На самом деле никакой прямой связи с конкретным редактором кода тут нет. Поэтому, при желании, можете просто использовать ту IDE, которая Вам больше по душе.
Если вы добавляете Spring AI в уже существующий проект, используйте следующие зависимости Maven:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> <version>1.0.0</version> </dependency> </dependencies>
Эти зависимости подключают REST-интерфейс и обеспечивают интеграцию Spring AI с OpenAI.
Подключение Spring AI к Foundry Local
Шаг 1: Настройка параметров
Обновите файл application.properties, чтобы указать Spring AI на ваш локально запущенный экземпляр Foundry:
# Azure AI Foundry Local Configuration spring.ai.openai.api-key=not-used spring.ai.openai.base-url=http://localhost:8081 spring.ai.openai.chat.options.model=Phi-3.5-mini-instruct-generic-gpu # Server Configuration server.port=8080
Хотя в конфигурации требуется указать API-ключ, для локальных моделей он фактически использоваться не будет.
Шаг 2: Класс конфигурации
Этот конфигурационный класс настраивает клиент для взаимодействия с API, совместимым с OpenAI, и инициализирует чат-модель с локальными параметрами:
@Configuration public class FoundryLocalConfig { @Value("${spring.ai.openai.base-url}") private String baseUrl; @Value("${spring.ai.openai.api-key}") private String apiKey; @Value("${spring.ai.openai.chat.options.model}") private String modelName; @Bean public OpenAiApi openAiApi() { return OpenAiApi.builder().baseUrl(baseUrl).apiKey(apiKey).build(); } @Bean public OpenAiChatModel chatModel(OpenAiApi openAiApi) { OpenAiChatOptions options = OpenAiChatOptions.builder() .model(modelName) .temperature(0.7) .build(); return OpenAiChatModel.builder().openAiApi(openAiApi).defaultOptions(options).build(); } }
Это связующее звено, которое подключает абстракцию Spring AI к локальной модели, запущенной через Foundry.
Шаг 3: Реализация сервисного слоя
Создайте сервисный класс для взаимодействия с чат-моделью. В этом классе будет сосредоточена логика вызова модели:
@Service public class AIService { private final OpenAiChatModel chatModel; public AIService(OpenAiChatModel chatModel) { chatModel = chatModel;} public String chat(String message) { try { return chatModel.call(message); } catch (Exception e) { throw new RuntimeException("Error calling AI model: " + e.getMessage(), e); } } public String summarizeText(String text) { String prompt = "Please provide a concise summary of the following text:\n\n" + text; return chatModel.call(prompt); } }
Методы chat() и summarizeText() инкапсулируют всю логику работы с моделью, благодаря чему контроллер остаётся чистым и лаконичным.
Шаг 4: Создание REST-эндпоинтов
Теперь откройте доступ к этим методам через HTTP-эндпоинты:
@RestController @RequestMapping("/api/ai") public class AIController { private final AIService aiService; public AIController(AIService aiService) { aiService = aiService; } @PostMapping("/chat") public ResponseEntity<Map<String, String>> chat(@RequestBody Map<String, String> request) { String message = request.get("message"); if (message == null || message.trim().isEmpty()) { return ResponseEntity.badRequest().body(Map.of("error", "Message is required")); } String response = aiService.chat(message); return ResponseEntity.ok(Map.of("response", response)); } @PostMapping("/summarize") public ResponseEntity<Map<String, String>> summarize(@RequestBody Map<String, String> request) { String text = request.get("text"); if (text == null || text.trim().isEmpty()) { return ResponseEntity.badRequest().body(Map.of("error", "Text is required")); } String summary = aiService.summarizeText(text); return ResponseEntity.ok(Map.of("summary", summary)); } @GetMapping("/health") public ResponseEntity<Map<String, String>> health() { try { aiService.chat("Hello"); return ResponseEntity.ok(Map.of("status", "healthy")); } catch (Exception e) { return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) .body(Map.of("status", "unhealthy", "error", e.getMessage())); } } }
Комментарий от команды Spring АйО
Авторы — люди, который пишут на C#. Там подход наименования некоторых элементов с «underscore» – это распространённая coding convention. В Java так не делайте.
С помощью этих эндпоинтов ваше приложение превращается в простой шлюз для локальных AI-инференций.
Запуск приложения
Шаг 1: Запустите Foundry Local
Настройте Foundry для обслуживания модели на порту 8081:
foundry service set --port 8081 foundry service start foundry model load phi-3.5-mini
Убедитесь, что сервис запущен и работает корректно, прежде чем запускать Spring Boot приложение.
Шаг 2: Запуск Spring Boot
Используйте Maven для сборки и запуска приложения:
mvn clean compile mvn spring-boot:run
Шаг 3: Проверьте работу эндпоинтов
Выполните запрос для проверки состояния сервиса:
curl http://localhost:8080/api/ai/health
Отправьте сообщение в чат:
curl -X POST http://localhost:8080/api/ai/chat \ -H "Content-Type: application/json" \ -d '{"message": "What is Spring AI?"}'
Суммируйте содержание блока текста:
curl -X POST http://localhost:8080/api/ai/summarize \ -H "Content-Type: application/json" \ -d '{"text": "Your long text here..."}'
Заключение
В этой статье мы узнали, как создать полностью локальное приложение с поддержкой AI, используя Spring AI и Foundry Local.
Благодаря совместимости Foundry с API OpenAI, для интеграции со Spring AI не потребовались дополнительные настройки — мы просто изменили базовый URL на localhost. Этот подход с приоритетом локального исполнения даёт ряд преимуществ:
-
Конфиденциальность и контроль: данные не покидают ваше устройство
-
Производительность: более низкие задержки по сравнению с облачными API
-
Экономия: отсутствие затрат на использование API и ограничений по количеству токенов
-
Простота: привычные конфигурации и подходы Spring
Такой сценарий позволяет быстро и эффективно разрабатывать локальные AI-решения с минимальными затратами и максимальной гибкостью.

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.
ссылка на оригинал статьи https://habr.com/ru/articles/925074/
Добавить комментарий