У цій статті
Головна думка
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 та застосунок виконують зареєстровану операцію, реалізація якої має перевіряти права й бізнес-правила.
Чи завжди бізнес-завданням потрібні кілька агентів?+
Ні. Почніть з одного обмеженого процесу й невеликого набору інструментів. Додавайте координацію, лише коли розділення обов’язків дає вимірювану користь.