В этой статье
Главная мысль
Spring AI позволяет Java-приложению подключить модель к инструментам и найденному контексту. Аутентификация, бизнес-правила и выполнение должны оставаться ответственностью приложения. Начните с узкой задачи только для чтения, прежде чем добавлять действия.
Держите агента рядом с бизнес-сервисами
Рассмотрим Java-приложение для заявок поддержки. Первый агент может прочитать доступную заявку, найти процедуру и подготовить ответ. Spring AI поддерживает вызов инструментов через Java-методы, включая аннотацию @Tool. Модель запрашивает операцию, а код приложения выполняет её. Это разделение сохраняет контроль за бизнес-сервисом.
Мы рекомендуем использовать существующий сервисный слой, не открывая неограниченные запросы к БД или административную оболочку. До выбора модели определите задачу, инструменты и условия остановки. Примеры ниже — иллюстративные фрагменты Java по изученной для статьи документации Spring AI 2.0, а не готовое приложение или проверенное клиентское внедрение.
Приложение сохраняет контроль
Пример агента поддержки по зонам ответственности.
ChatClient
Передайте вопрос и инструменты, доступные для запроса.
@Tool
Предоставьте ограниченную операцию, например чтение заявки.
TicketService
Определите аутентифицированного пользователя и проверьте доступ к записи.
Бизнес-данные
Верните приложению минимально необходимое разрешённое представление.
Предоставьте узкий инструмент с проверкой прав
Пример намеренно принимает идентификатор заявки, а не выбранную моделью личность пользователя или арендатора. TicketService — сервис конкретного приложения. Его метод readForCurrentUser должен получать личность из доверенной серверной аутентификации, проверять доступ к записи и возвращать минимальное публичное представление. Проверяйте идентификатор и ограничивайте объём ответа инструмента.
Оставьте операцию только для чтения. Запись требует отдельного контракта, бизнес-валидации, обработки повторов и согласования там, где оно необходимо. Упоминание подтверждения человеком в промпте не заменяет контроль приложения. Идентификатор клиента, переданный моделью, никогда не должен определять доступную ей организацию.
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);
}
}Подключите клиент, затем добавьте источники
При настроенном ChatClient и экземпляре TicketTools инструмент можно зарегистрировать для запроса. Сначала проверьте корректные, отсутствующие и запрещённые идентификаторы заявок. В конфигурации приложения ограничьте число итераций инструментов и общее время выполнения. Предусмотрите отмену и явное поведение при недоступности зависимого сервиса.
Для вопросов по документам Spring AI предлагает QuestionAnswerAdvisor и модульный RetrievalAugmentationAdvisor. Привяжите ограничения поиска к аутентифицированному контексту приложения. В нашем сценарии заявка задаёт продукт, поиск находит процедуру, а модель готовит ответ со ссылками. Если подходящей процедуры нет, запросите проверку вместо выдумывания правила.
String draft = chatClient.prompt()
.user("Read ticket INC-1042 and summarise the confirmed facts.")
.tools(ticketTools)
.call()
.content();Наблюдайте за решениями, не собирая всё подряд
Spring AI документирует наблюдаемость взаимодействий моделей и инструментов. Мы связываем запрос пользователя с результатами инструментов, временем и расходом токенов, не сохраняя лишнее содержимое заявок или секреты. Команда эксплуатации должна видеть разницу между сбоем модели, отказом в доступе и ошибкой внешнего API.
До выпуска проверьте неверные идентификаторы, противоречивые процедуры, повторные вызовы и вредоносный текст в заявке. Критерий приёмки — полезный черновик на основе разрешённых источников без незапланированных изменений состояния. MASLOV Solutions может определить объём Java-интеграции, RAG и оценки вокруг ваших сервисов. Начните с ограниченного процесса и добавляйте действия после проектирования контроля и восстановления.
Следующий шаг: предложить изменение без выполнения
Чтение заявки — полезная отправная точка. Для изменения статуса создайте предложение с идентификатором заявки, переходом, причиной и ожидаемой версией записи. Проверьте переход в существующем бизнес-сервисе. Если требуется согласование, сохраните предложение и верните его идентификатор для проверки вместо немедленного изменения заявки.
При выполнении снова проверьте пользователя, права и версию заявки. Закрытая другим сотрудником заявка не должна открыться из-за позднего согласования старого предложения. Используйте постоянный идентификатор операции для повторных отправок. Такой процесс сохраняет бизнес-инварианты в обычном коде; описания инструментов помогают запросить действие, но не обеспечивают эти правила.
От запроса инструмента к бизнес-команде
Предлагаемое расширение примера с чтением. Сервис контролирует авторизацию, версии и предотвращение повторов.
Запрос инструмента → проверка перехода → сохранение предложения
Согласование действительно и версия заявки не изменилась?
Да
- Повторная проверка прав → выполнение с ID операции
- Вернуть бизнес-результат в диалог
Нет
- Не изменять заявку
- Объяснить отказ или запросить новое предложение
Проверяйте границы агента без вызова модели в каждом тесте
Проверяйте авторизацию, валидацию и изменения состояния обычными сервисными тестами с детерминированными данными. Имитируйте запросы неизвестных заявок, межорганизационный доступ, неверные переходы и повторные ID операций. Оставьте небольшой набор интеграционных тестов поведения модели: выбор инструмента, уточнение данных и корректное объяснение отказа.
Наблюдайте время инструментов и категории ошибок отдельно от задержки модели. Маскируйте чувствительные аргументы в трассировках и сохраняйте корреляционные ID для отслеживания инцидента между диалогом и сервисом. Зафиксируйте совместимые версии зависимостей и проверьте полный пример в приложении: фрагменты выше иллюстрируют границу, а не готовый сервис с аутентификацией, хранением и обработкой всех ошибок.
Источники и дополнительное чтение
Документация проверена .
ВОПРОСЫ / РЕШЕНИЯ
Частые вопросы
Модель выполняет Java-код напрямую?+
Нет. Она запрашивает вызов инструмента. Spring AI и приложение выполняют зарегистрированную операцию, реализация которой должна проверять права и бизнес-правила.
Всегда ли бизнес-задачам нужны несколько агентов?+
Нет. Начните с одного ограниченного процесса и небольшого набора инструментов. Добавляйте координацию, только когда разделение обязанностей даёт измеримую пользу.