Spring AI для enterprise Java: честный разбор RAG, MCP и tool calling

разбор Spring AI Spring AI — официальный Spring-проект, который подключает корпоративный Java к LLM через переносимые абстракции, RAG, MCP и tool calling. Sayed Ali Alkamel, senior-разработчик и менеджер платформ в Oman Housing Bank, разобрал, что фреймворк реально даёт командам на Spring Boot — и когда проще не писать сырые HTTP-вызовы к моделям.
ChatClient и Advisors: как RAG встраивается в Spring-сервис
Главная точка входа в Spring AI — ChatClient: fluent-builder, задуманный как «родственник» WebClient и RestClient. В типовом RAG-сценарии контроллер инжектит ChatClient.Builder и VectorStore, в конструкторе собирает клиент с QuestionAnswerAdvisor, а в эндпоинте /ask вызывает цепочку prompt().user(question).call().content().
@RestController
public class DocumentChatController {
private final ChatClient chatClient;
public DocumentChatController(ChatClient.Builder builder, VectorStore vectorStore) {
this.chatClient = builder
.defaultAdvisors(new QuestionAnswerAdvisor(vectorStore))
.build();
}
@GetMapping("/ask")
public String ask(@RequestParam String question) {
return chatClient.prompt().user(question).call().content();
}
}
QuestionAnswerAdvisor автоматически достаёт релевантные документы из vector store и подмешивает их в промпт. VectorStore — абстракция поверх бэкендов: PostgreSQL/PGVector, Chroma, Pinecone, Weaviate, Milvus, Redis, MongoDB Atlas и ещё около дюжины хранилищ — единый API на 12+ бэкендов. Смена Pinecone на PGVector не требует переписывать контроллер: меняется конфигурация, не бизнес-код.
Advisors API сравнивают с Spring AOP для cross-cutting AI-задач: retrieval перед промптом и chat memory между запросами регистрируются один раз и прозрачно применяются к каждому вызову ChatClient. Для внутренних copilot-сценариев над knowledge base это самый практичный путь без Python sidecar.
MCP и tool calling: агентный слой поверх Spring beans
В Spring AI 1.1 Model Context Protocol (MCP) получил first-class поддержку — в материале это названо стратегически важной частью для agentic systems. MCP описан как emerging standard interoperability между агентами и внешними tools; фреймворк берёт на себя protocol compliance, регистрацию tools и multi-protocol version negotiation.
Существующую бизнес-логику можно зарегистрировать как AI-callable function через Spring bean с @Description. Пример из статьи: Function<BalanceRequest, AccountBalance> в @Configuration BankingTools — фреймворк подхватывает bean и отдаёт модели через function calling, сохраняя type safety без переписывания underlying service.
Параллельно можно потреблять MCP-compliant tool servers и экспонировать собственные Spring beans как MCP servers. В цикл 1.1 в roadmap входят OAuth2-secured MCP connections. Jonathan Schneider в 2025-м проводит аналогию: function calling к RAG — как IoC к Java-разработке: меняет дизайн компонентов, а не только убирает boilerplate.
Рекомендация для первого спринта — не смешивать RAG, MCP, tool calling и observability сразу: начать с ChatClient и одного провайдера, добавлять VectorStore при реальном document retrieval use case.
Смена провайдеров и локальный Ollama без рефакторинга
Переносимость провайдеров — центральный тезис материала. OpenAI и Anthropic переключаются блоками в application.yml; контроллеры и сервисы не трогаются:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o
spring:
ai:
anthropic:
api-key: ${ANTHROPIC_API_KEY}
chat:
options:
model: claude-sonnet-4-20250514
Ollama — first-class provider с тем же паттерном конфигурации, что и у cloud: локальная разработка и прод в облаке без смены кода. Josh Long на DevOps UK 2025 формулирует шире: building AI apps — «в основном просто вызовы моделей с HTTP API»; навыки Spring Boot переносятся.
Spring AI позиционируется как «Spring Data, but for AI models»: POJO как building blocks, portability и modular design. Поддерживаются chat completion, embeddings, text-to-image, audio transcription, text-to-speech, moderation; agentic-слой — tool calling, RAG pipelines, MCP client/server, chat memory, structured outputs. В каталоге — 20+ model providers.
Честные ограничения: Spring-only, документация, волатильность API
«Honest Take» в заголовке — не маркетинг. Spring AI, по оценке автора, правильный инструмент, если вы уже в экосистеме Spring: абстракции сидят на Spring Boot auto-configuration. Для Quarkus, Micronaut или bare Vert.x first-class integration story не про них.
Документация Advisors API местами действительно скудная: при разборе chained advisors (RAG + conversation memory) пришлось читать integration tests больше, чем reference guide. На онбординг RAG-пайплайна стоит закладывать дополнительное время.
API surface движется: команды на Spring AI 1.0 столкнулись с изменениями adapter interfaces в 1.1; апгрейд 1.x → 2.0 потребует внимания из‑за Jakarta EE 11 baseline и сдвига на Spring Boot 4. Minor versions отслеживать активнее, чем у Spring Data или Spring Security.
По производительности в материале приводится анализ Java-экосистемы начала 2026 года: сетевая латентность LLM на два–три порядка больше оверхеда Java-фреймворка. Spring AI не добавляет заметной задержки к операции в сотни миллисекунд и выше — узкое место остаётся в модели и сети, не в DI-слое.
Spring AI 1.1 и LangChain4j: когда какой JVM-стек AI
Оба фреймворка вышли в GA в мае 2025 года и production-ready, но целевая аудитория разная. Сравнительная таблица из материала:
| Измерение | Spring AI 1.1 | LangChain4j 1.x |
|---|---|---|
| Целевая аудитория | Spring Boot teams | Any JVM stack |
| AI-провайдеры | 20+ | 30+ |
| Vector stores | 12+ | 30+ |
| MCP | First-class | Supported |
| RAG | Advisors API, ETL pipeline | Mature, granular pipeline control |
| Quarkus / Micronaut | Minimal | Native extensions |
| Observability | Spring Boot Actuator native | Requires separate setup |
| Tool calling | Spring beans as functions | Explicit @Tool annotation |
Правило выбора: Spring Boot + observability/Security → Spring AI как путь наименьшего сопротивления; non-Spring stack или нужен более широкий каталог провайдеров → LangChain4j. Переключение через полгода проекта дорого — это архитектурное решение на старте.
Прямые HTTP-вызовы LLM уступают Spring AI по переносимости: vendor lock-in, нет встроенного RAG/tool calling/chat memory, код не стыкуется с Spring observability и testing. Для Spring Boot microservices альтернатива Python sidecar закрывает gap между «using AI» и «building with AI» — в статье приводится BellSoft Java Survey 2024: 74% Java-разработчиков ежедневно используют AI tools, 34% — AI framework для AI-powered apps.
Версии 1.0–2.0: что закладывать в roadmap
| Веха | Когда | Суть |
|---|---|---|
| Spring AI 1.0 GA | май 2025 | Первый production-ready релиз (анонс Mark Pollack, Christian Tzolov, Josh Long) |
| Spring AI 1.1 | ноябрь 2025 | 850+ improvements: 354 enhancements, 241 bug fixes, 100 documentation improvements; full MCP, structured Advisors API |
| Spring AI 2.0 | milestone mid-2026 | Spring Boot 4.0, Spring Framework 7.0, Jakarta EE 11, Java 21 minimum |
| 2.0.0-M4 | март 2026 | Milestone |
| 2.0.0-RC1 | июнь 2026 | Release candidate; GA «близко», migration 1.x documented |
Экосистема расширяется: Spring AI Community GitHub organization анонсирован на Spring I/O Barcelona 2025. Для команд, которые оценивают copilot и internal tooling над knowledge base — как в кейсе автора на OHB — связка Advisors API и chat memory выглядит наиболее полезной без выноса inference в отдельный runtime.
Итоговый TL;DR из материала: для Spring Boot-команд «no good reason to write raw HTTP calls to an LLM anymore» — при условии, что вы принимаете привязку к Spring и следите за minor releases на пути к 2.0.
Источники
- Sayed Ali Alkamel — Spring AI: The Senior Dev's Honest Take on Java's AI Moment (Dev.to, доступ 2026-06-17)
- Spring AI — обзор проекта (доступ 2026-06-17)
- Core concepts (доступ 2026-06-17)
- Advisors API (доступ 2026-06-17)
- Spring AI 1.0 GA (доступ 2026-06-17)
- Spring AI 1.1 GA (доступ 2026-06-17)