Пишемо Spring AI проєкт на Java

У цьому матеріалі ми з вами напишемо простий додаток на Java який буде використовувати Spring AI. Spring AI – це фреймворк для розробки штучного інтелекту. Його мета – застосувати до області AІ принципи проектування екосистеми Spring, такі як портативність і модульний дизайн. Ознайомитися зі всіма можливостями Spring AI ви можете на офіційній сторінці. Лише зазначу що використовуючи цю бібліотеку ви можете працювати не тільки з ChatGPT від OpenAI але й безкоштовними Ollama та Mistral.

Використання штучного інтелекту (AI) у Spring-додатках стає все більш поширеним завдяки зростаючому попиту на інтелектуальні рішення. У цій статті ми розглянемо, як налаштувати базовий Spring AI проєкт для інтеграції AI-моделей за допомогою різних інструментів.

1. Вибір інструментів для AI інтеграції у Spring

На данний момент Spring AI підтримує безліч інтеграцій в тому числі для роботи із зображеннями та аудіо. Для того щоб переключитися від однієї інтеграцій до іншой вам достатньо змінити лише один рядок в properties чи yaml файлі.

spring.ai.openai.chat.options.model=gpt-4o-mini

#spring.ai.ollama.chat.options.model=gemma:2b     #ollama
#spring.ai.ollama.chat.options.temperature=0.7    #ollama
XML

2. Налаштування Spring Boot проєкту

Створення нового Spring Boot проєкту

  1. Встановіть Spring Boot через Spring Initializr:
    • Виберіть Java як мову.
    • Додайте залежності:
      • (опційно) Spring Web (для створення REST API).
      • Spring Boot Starter (для запуску проєкту).
      • (опційно) Lombok для спрощеного написання коду.
  2. Згенеруйте проєкт і відкрийте його в IDE (напр., IntelliJ IDEA).

Додавання залежностей для AI-бібліотек

У pom.xml додаємо залежності, які потрібні для роботи з AI. Наприклад, для інтеграції OpenAI:

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-openai</artifactId>
            <version>1.0.0-M3</version>
        </dependency>
        <dependency>
			    <groupId>org.springframework.ai</groupId>
			    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
		    </dependency>
		    
<!--		<dependency>-->
<!--			<groupId>org.springframework.ai</groupId>-->
<!--			<artifactId>spring-ai-starter-model-mistral-ai</artifactId>-->
<!--		</dependency>-->

<!--		<dependency>-->
<!--			<groupId>org.springframework.ai</groupId>-->
<!--			<artifactId>spring-ai-starter-model-ollama</artifactId>-->
<!--		</dependency>-->

		    <dependencyManagement>
      		<dependencies>
      			<dependency>
      				<groupId>org.springframework.ai</groupId>
      				<artifactId>spring-ai-bom</artifactId>
      				<version>${spring-ai.version}</version>
      				<type>pom</type>
      				<scope>import</scope>
      			</dependency>
      		</dependencies>
      	</dependencyManagement>
      	
      	<repositories>
      		<repository>
      			<id>spring-milestones</id>
      			<name>Spring Milestones</name>
      			<url>https://repo.spring.io/milestone</url>
      			<snapshots>
      				<enabled>false</enabled>
      			</snapshots>
      		</repository>
      	</repositories>
XML

3. Інтеграція з OpenAI API (GPT)

3.1. Реєстрація в OpenAI для доступу до сервісу

Перейдіть на платформу від OpenAI для того щоб отримати ключ. Це не займає багато часу і ви відразу можете користуватися API. В данний момент OpenAI дає вам безкоштовно на баланс 5$ яких вистачить на багато простих запитів. Ознайомитися з лімітами по кожній моделі можна тут.

3.2. Налаштування API-ключа в Spring Boot

У файлі application.properties вкажіть ваш API-ключ який ви отримали. Якщо ви використовуєте yaml то все робіть по аналогії.

openai.api.key=sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XML

3.3. Написання сервісу для роботи з OpenAI

package com.example.springai.service;

import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.completion.CompletionRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class AiService {

    private final OpenAiService openAiService;

    public AiService(@Value("${openai.api.key}") String apiKey) {
        this.openAiService = new OpenAiService(apiKey);
    }

    public String getAiResponse(String prompt) {
        CompletionRequest request = CompletionRequest.builder()
                .prompt(prompt)
                .model("text-davinci-003")
                .maxTokens(200)
                .build();

        return openAiService.createCompletion(request).getChoices().get(0).getText();
    }
}
Java

4. Створення REST-контролера

Зробимо простий API, який буде надсилати запит до OpenAI та отримувати відповідь.

package com.example.springai.controller;

import com.example.springai.service.AiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class AiController {

    private final AiService aiService;

    @Autowired
    public AiController(AiService aiService) {
        this.aiService = aiService;
    }

    @PostMapping("/answer")
    public String generateResponse(@RequestBody String prompt) {
        return aiService.getAiResponse(prompt);
    }
}
Java

5. Розгортання проєкту

Запустіть Spring Boot проєкт і перевірте роботу API. Ви можете відправляти POST-запити до /api/answer за допомогою Postman чи будь-якого іншого HTTP-клієнта.

6. Робота з контекстом

Наш код працює але для того щоб наш сервіс розумів текст між запитаннями ми повинні на своїй стороні зберігати контекст.

	public OpenAiService(ChatClient.Builder builder) {
		this.aiService = builder.defaultAdvisors(
				new MessageChatMemoryAdvisor(
						new InMemoryChatMemory())).build();
	}
Java

Висновок

Інтеграція AI в Spring-додаток є популярним і тим підходом для створення сучасного програмного забезпечення що диктує майбутне. У статті ми розглянули основні інструменти для роботи з Spring AI однак можна використовувати й інші бібліотеки залежно від ваших потреб. В наступних матеріалах ми більш розгорнуто розглянемо приклади та різні бібліотеки для роботи з AI.

Якщо ви хочете більш детально ознайомитися з документацією по Spring AI можете перейти до цієї сторінки.

  • javaadmin

    Супер крутий Dev

    Related Posts

    Робота з базами даних у Spring: порівнюємо JDBC, Hibernate та Spring Data JPA

    Робота з базами даних — одна з найважливіших складових практично будь-якого backend-застосунку. Spring пропонує кілька рівнів абстракції для доступу до даних: низькорівневий Spring JDBC, потужний ORM-фреймворк Hibernate та зручну надбудову Spring Data JPA. Розглянемо, чим вони відрізняються, коли варто обирати кожен з них. 1. Spring JDBC Spring JDBC — це тонка обгортка над стандартним java.sql, яка усуває бойлерплейт-код: ручне відкриття/закриття з’єднань, обробку виключень, керування транзакціями. Основний інструмент — клас JdbcTemplate: Переваги: Недоліки: Spring JDBC…

    Dependency Injection у Spring: пояснюємо на пальцях

    Коли програміст-початківець вперше відкриває документацію до Spring Framework, на нього одразу висипається купа грізних термінів: Dependency Injection (DI), Inversion of Control (IoC), ApplicationContext, Bean. Здається, що це вища математика. Ми вже розглядали DI в минулих матеріалах але цю дуже не просту тему краще розібрати по болтиках для повного розуміння. Насправді за цими розумними словами ховається надзвичайно проста та красива ідея. Це історія про те, як перестати збирати складні речі вручну й довірити…

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

    Цікаве

    Garbage Collection: Як працює сміттевоз в Java

    • Автор javaadmin
    • 13 Серпня, 2026
    • 123 views
    Garbage Collection: Як працює сміттевоз в Java

    Робота з базами даних у Spring: порівнюємо JDBC, Hibernate та Spring Data JPA

    • Автор javaadmin
    • 6 Серпня, 2026
    • 133 views
    Робота з базами даних у Spring: порівнюємо JDBC, Hibernate та Spring Data JPA

    Dependency Injection у Spring: пояснюємо на пальцях

    • Автор javaadmin
    • 31 Липня, 2026
    • 159 views
    Dependency Injection у Spring: пояснюємо на пальцях

    Java Collections Framework: List, Set чи Map?

    • Автор javaadmin
    • 31 Липня, 2026
    • 151 views
    Java Collections Framework: List, Set чи Map?

    Оптимізуємо це: GraalVM Native Image, Leyden та CRaC

    • Автор javaadmin
    • 17 Липня, 2026
    • 166 views
    Оптимізуємо це: GraalVM Native Image, Leyden та CRaC

    JBang: Як вивчати Java легко

    • Автор javaadmin
    • 12 Травня, 2026
    • 247 views
    JBang: Як вивчати Java легко