В этой статье

Главная мысль

Spring AI позволяет Java-приложению подключить модель к инструментам и найденному контексту. Аутентификация, бизнес-правила и выполнение должны оставаться ответственностью приложения. Начните с узкой задачи только для чтения, прежде чем добавлять действия.

01

Держите агента рядом с бизнес-сервисами

Рассмотрим Java-приложение для заявок поддержки. Первый агент может прочитать доступную заявку, найти процедуру и подготовить ответ. Spring AI поддерживает вызов инструментов через Java-методы, включая аннотацию @Tool. Модель запрашивает операцию, а код приложения выполняет её. Это разделение сохраняет контроль за бизнес-сервисом.

Мы рекомендуем использовать существующий сервисный слой, не открывая неограниченные запросы к БД или административную оболочку. До выбора модели определите задачу, инструменты и условия остановки. Примеры ниже — иллюстративные фрагменты Java по изученной для статьи документации Spring AI 2.0, а не готовое приложение или проверенное клиентское внедрение.

ИсточникиSpring AI — Tool calling ↗
Наглядная схема / 01

Приложение сохраняет контроль

Пример агента поддержки по зонам ответственности.

  1. ChatClient

    Передайте вопрос и инструменты, доступные для запроса.

  2. @Tool

    Предоставьте ограниченную операцию, например чтение заявки.

  3. TicketService

    Определите аутентифицированного пользователя и проверьте доступ к записи.

  4. Бизнес-данные

    Верните приложению минимально необходимое разрешённое представление.

02

Предоставьте узкий инструмент с проверкой прав

Пример намеренно принимает идентификатор заявки, а не выбранную моделью личность пользователя или арендатора. TicketService — сервис конкретного приложения. Его метод readForCurrentUser должен получать личность из доверенной серверной аутентификации, проверять доступ к записи и возвращать минимальное публичное представление. Проверяйте идентификатор и ограничивайте объём ответа инструмента.

Оставьте операцию только для чтения. Запись требует отдельного контракта, бизнес-валидации, обработки повторов и согласования там, где оно необходимо. Упоминание подтверждения человеком в промпте не заменяет контроль приложения. Идентификатор клиента, переданный моделью, никогда не должен определять доступную ей организацию.

Java — Пример инструмента; TicketService и TicketView — типы приложения.
import org.springframework.ai.tool.annotation.Tool;

final class TicketTools {
    private final TicketService tickets;

    TicketTools(TicketService tickets) {
        this.tickets = tickets;
    }

    @Tool(description = "Read a support ticket visible to the current user")
    TicketView readTicket(String ticketId) {
        return tickets.readForCurrentUser(ticketId);
    }
}
03

Подключите клиент, затем добавьте источники

При настроенном ChatClient и экземпляре TicketTools инструмент можно зарегистрировать для запроса. Сначала проверьте корректные, отсутствующие и запрещённые идентификаторы заявок. В конфигурации приложения ограничьте число итераций инструментов и общее время выполнения. Предусмотрите отмену и явное поведение при недоступности зависимого сервиса.

Для вопросов по документам Spring AI предлагает QuestionAnswerAdvisor и модульный RetrievalAugmentationAdvisor. Привяжите ограничения поиска к аутентифицированному контексту приложения. В нашем сценарии заявка задаёт продукт, поиск находит процедуру, а модель готовит ответ со ссылками. Если подходящей процедуры нет, запросите проверку вместо выдумывания правила.

Java — Фрагмент запроса; клиент, экземпляр инструмента и аутентифицированный контекст выполнения должны быть настроены заранее.
String draft = chatClient.prompt()
    .user("Read ticket INC-1042 and summarise the confirmed facts.")
    .tools(ticketTools)
    .call()
    .content();
ИсточникиSpring AI — Tool calling ↗Spring AI — Retrieval Augmented Generation ↗
04

Наблюдайте за решениями, не собирая всё подряд

Spring AI документирует наблюдаемость взаимодействий моделей и инструментов. Мы связываем запрос пользователя с результатами инструментов, временем и расходом токенов, не сохраняя лишнее содержимое заявок или секреты. Команда эксплуатации должна видеть разницу между сбоем модели, отказом в доступе и ошибкой внешнего API.

До выпуска проверьте неверные идентификаторы, противоречивые процедуры, повторные вызовы и вредоносный текст в заявке. Критерий приёмки — полезный черновик на основе разрешённых источников без незапланированных изменений состояния. MASLOV Solutions может определить объём Java-интеграции, RAG и оценки вокруг ваших сервисов. Начните с ограниченного процесса и добавляйте действия после проектирования контроля и восстановления.

ИсточникиSpring AI — Observability ↗
05

Следующий шаг: предложить изменение без выполнения

Чтение заявки — полезная отправная точка. Для изменения статуса создайте предложение с идентификатором заявки, переходом, причиной и ожидаемой версией записи. Проверьте переход в существующем бизнес-сервисе. Если требуется согласование, сохраните предложение и верните его идентификатор для проверки вместо немедленного изменения заявки.

При выполнении снова проверьте пользователя, права и версию заявки. Закрытая другим сотрудником заявка не должна открыться из-за позднего согласования старого предложения. Используйте постоянный идентификатор операции для повторных отправок. Такой процесс сохраняет бизнес-инварианты в обычном коде; описания инструментов помогают запросить действие, но не обеспечивают эти правила.

Процесс / путь принятия решения

От запроса инструмента к бизнес-команде

Предлагаемое расширение примера с чтением. Сервис контролирует авторизацию, версии и предотвращение повторов.

Запрос инструмента → проверка перехода → сохранение предложения

Согласование действительно и версия заявки не изменилась?

  • Да

    1. Повторная проверка прав → выполнение с ID операции
    2. Вернуть бизнес-результат в диалог
  • Нет

    1. Не изменять заявку
    2. Объяснить отказ или запросить новое предложение
06

Проверяйте границы агента без вызова модели в каждом тесте

Проверяйте авторизацию, валидацию и изменения состояния обычными сервисными тестами с детерминированными данными. Имитируйте запросы неизвестных заявок, межорганизационный доступ, неверные переходы и повторные ID операций. Оставьте небольшой набор интеграционных тестов поведения модели: выбор инструмента, уточнение данных и корректное объяснение отказа.

Наблюдайте время инструментов и категории ошибок отдельно от задержки модели. Маскируйте чувствительные аргументы в трассировках и сохраняйте корреляционные ID для отслеживания инцидента между диалогом и сервисом. Зафиксируйте совместимые версии зависимостей и проверьте полный пример в приложении: фрагменты выше иллюстрируют границу, а не готовый сервис с аутентификацией, хранением и обработкой всех ошибок.

Источники и дополнительное чтение

Документация проверена .

ВОПРОСЫ / РЕШЕНИЯ

Частые вопросы

Модель выполняет Java-код напрямую?+

Нет. Она запрашивает вызов инструмента. Spring AI и приложение выполняют зарегистрированную операцию, реализация которой должна проверять права и бизнес-правила.

Всегда ли бизнес-задачам нужны несколько агентов?+

Нет. Начните с одного ограниченного процесса и небольшого набора инструментов. Добавляйте координацию, только когда разделение обязанностей даёт измеримую пользу.

Наши услуги: ИИ, агенты и RAG ↗