Spring выпустил Spring AI 1.0.0 M3, который принес множество значительных улучшений и новых возможностей в разработку AI-приложений.
В новом переводе от команды Spring АйО рассказывается про улучшения, связанные с observability, совершенствование системы advisor`ов и оптимизацию работы с функциями и embedding моделями.
Мы рады сообщить о релизе Spring AI 1.0.0 Milestone 3. Этот релиз множество значительных улучшений, также новые функции.
Observability
Этот релиз включил в себя множество улучшений в области observability приложений, особенно в части потоковой передачи ответов от моделей чата. Большое спасибо Thomas Vitale и Dariusz Jedrzejczyk за их помощь в этой области!
Observability теперь охватывает ChatClient, ChatModel, Embedding модели и векторные хранилища, позволяя детально отслеживать все точки взаимодействия с вашей AI-инфраструктурой.
В релизе M2 мы представили поддержку observability для моделей OpenAI, Ollama, Mistral и Anthropic. Но это еще не все, также мы расширили поддержку и для:
Azure OpenAI
Google Vertex AI
Transformers (ONNX)
MiniMax
Moonshot
Baidu QianFan
Zhipu AI
Благодарим Geng Rong за реализацию observability для китайских моделей.
Более подробную информацию о доступных метриках и трассировках вы можете найти в документации по observability. Ниже приведены несколько графиков, демонстрирующих эти возможности.
Grafana
Улучшения advisor`ов
Spring AI Advisors — это компоненты, которые помогают управлять потоком запросов и ответов в AI-приложениях, а также изменять их при необходимости. Они могут блокировать запрос, не передавая его следующему adviser'у в цепочке.
Одним из ключевых элементов является AroundAdvisor, позволяющий динамически изменять информацию, проходящую через приложение. Основные преимущества использования aviser'ов:
Инкапсуляция повторяющихся задач: создание повторно используемых блоков для работы с типовыми шаблонами GenAI.
Преобразование данных: изменение входящих и исходящих данных, чтобы адаптировать их под языковые модели (LLM) и клиентов.
Портативность: создание универсальных компонентов для работы с различными моделями и задачами.
Мы обновили API adviser'ов, улучшив их дизайн и совместимость с потоковыми запросами. Теперь можно задать явный порядок выполнения adviser'ов через интерфейс Ordered
.
Важно учитывать, что некоторые изменения могут привести к несовместимости API в зависимости от вашей области применения. Подробности можно найти в документации.
Для более детальной информации рекомендуем ознакомиться со статьёй Christian Tzolov "Supercharging Your AI Applications with Spring AI Advisors".
Улучшения вызова функций
Spring AI теперь поддерживает передачу контекстной информации в функции через класс ToolContext, который хранит данные в формате ключ-значение. Благодаря этому у нас появляется возможность предоставлять дополнительные данные для выполнения функций. Например, с помощью ToolContext можно передать sessionId, чтобы функция знала значение id сеанса.
String content = chatClient.prompt("What's the weather like in San Francisco, Tokyo, and Paris?")
.functions("weatherFunctionWithContext")
.toolContext(Map.of("sessionId", "123"))
.call()
.content();
Важно отметить, что текст пользователя можно передавать напрямую в метод prompt
, а не через метод user. ToolContext
можно использовать через java.util.BiFunction. Ниже можно увидеть определение бина:
@Bean
@Description("Get the weather in location")
public BiFunction<WeatherService.Request, ToolContext, WeatherService.Response> weatherFunctionWithContext() {
return (request, toolContext) -> {
String sessionId = (String) toolContext.getContext().get("sessionId");
// use session id as appropriate...
System.out.println(sessionId);
return new WeatherService().apply(request);
};
}
Тонкий контроль над вызовом функций
Если вы предпочитаете самостоятельно обрабатывать вызовы функций, вы можете установить опцию proxyToolCalls.
PortableFunctionCallingOptions functionOptions = FunctionCallingOptions.builder()
.withFunction("weatherFunction")
.withProxyToolCalls(true)
.build();
При передаче этих опций вызов модели через ChatModel или ChatClient вернет ChatResponse, содержащий первое сообщение, отправленное в начале разговора вызова функции AI-модели.
Оценка на основе фактов
Новое в мире проверки фактов: рейтинг LLM-AggreFact. Лидером в этом списке стала модель "bespoke-minicheck", созданная Bespoke Labs. Эта модель выигрывает за счёт меньшего размера и низкой стоимости, в отличие от "флагманов" вроде GPT4o. В основе разработки лежат исследования, изложенные в статье “MiniCheck: Efficient Fact-Checking of LLMs of Grounding Documents".
FactCheckingEvaluator от Spring AI уже интегрирует эти разработки и поддерживает модель bespoke-minicheck, которая может работать на платформе Ollama. Подробнее в документации. Особая благодарность Eddú Meléndez за его вклад в развитие этой области.
Пакетная (batch) обработка embedding моделей
Раньше для создания вложенного списка документов приходилось вызывать модель для каждого документа отдельно, что было не очень эффективно. Теперь в Spring AI поддерживается пакетная обработка, благодаря которой можно обрабатывать несколько документов за один вызов модели. Поскольку embedding модели имеют ограничения по количеству токенов, документы группируются таким образом, чтобы каждый пакет не превышал этот лимит.
Новый класс TokenCountingBatchingStrategy учитывает размер токенов и добавляет резервный буфер в 10%, так как точная оценка количества токенов не всегда возможна. Вы можете настроить собственные реализации интерфейса BatchingStrategy.
Кроме того, для embedding моделей на основе JDBC теперь проще устанавливать размер пакета при выполнении bulk insert операций.
Благодарим Soby Chacko за его вклад в эту область и другие области в качестве нового члена команды Spring AI.
Обновления специфичные для провайдеров
Azure AI
Теперь доступны возможности observability
Исправлены ошибки связанные с потоковой передачей ответов
Добавлена поддержка кастомных HTTP-заголовков
Добавлены ранее отсутствующие опции вызова
Vertex AI
Теперь доступны возможности observability
Добавлена поддержка Google Search
Реализована поддержка повторных попыток запроса
Общие улучшения
Команда активно работает над рефакторингом, исправлением багов и обновлением документации. Спасибо за вашу помощь! Если ваш PR ещё не рассмотрен, пожалуйста, наберитесь терпения.
Спасибо следующим контрибьюторам:
Mudabir Hussain (mudabirhussain), Laura Trotta (l-trotta), Jang990 (Jang990), ktm (ktm), Eray Ocak (threos), claudio-code (Claudio-code), Fu Cheng (alexcheng1982), Craig Walls (habuma), Hyune-c (Hyune-c), PARK-afk (PARK-afk), Anders Swanson (anders-swanson), Ricken Bazolo (ricken07), Ignasi (ilopezluna), Soby Chacko (sobychacko), John Blum (jxblum), dafriz (dafriz), Eddú Meléndez (eddumelendez), PabloSanchi (PabloSanchi), 박준서 (junsepar), cboy (yuhangbin), ashni (ashni-mongodb), Bruno Oliveira (bruno-oliveira), Christian Tzolov (tzolov), Thomas Vitale (ThomasVitale), Johnny Lim (izeye), Peter Dolukhanov, inpink (inpink), 努力的小雨 (StudiousXiaoYu)
Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.
Ждем всех, присоединяйтесь
bykostya
капец перевод, невозможно читать