TGViewer
Channel Public Channel
R4marketing | канал Алексея Селезнёва | Язык R

R4marketing | канал Алексея Селезнёва | Язык R

@r4marketing

Автор канала Алексей Селезнёв, украинский аналитик, автор ряда курсов по языку R и пакетов расширяющих его возможности.

В канале публикуются статьи, доклады, новости, уроки и заметки по языку R.

Для связи: @AlexeySeleznev
Реклама: http://bit.ly/39MwJCY
Subscribers
4.13K
Photos
59
Videos
0
Links
1.2K
Recent Posts 20 shown
Post #1360 947
Вышел mcptools 1.0.0

Ребята из Posit исправили ошибки, и расширили функционал, судя по номеру версии пакет приобрёл окончательный стабильный интерфейс, и в ближайшем будущем глобально изменяться не будет.

mcp_server() — новое:

• Поддержка запуска как Posit Connect R API engine: достаточно _server.yml с engine: mcptools, файл с .R-инструментами (объекты ellmer::tool()) и деплой через rsconnect::deployAPI().
• Инструменты теперь могут возвращать inline-изображения (через ellmer::ContentImageInline), в том числе смешанный текст+картинки.
• Для протокола MCP 2025-06-18+ сервер возвращает structuredContent вместе с обычным JSON для результатов-объектов.
• В ответах tools/list теперь передаются аннотации ellmer (title, readOnlyHint, destructiveHint, idempotentHint, openWorldHint) — это MCP-хинты безопасности инструментов.

mcp_server() — фиксы:

• HTTP-сервер теперь учитывает заголовок MCP-Protocol-Version, отдаёт 400 на неподдерживаемые версии и больше не «путает» согласование протокола между разными клиентами.
• NULL в R теперь корректно сериализуется в JSON null (чинит JSON-RPC с нулевыми ID запросов).
• Исправлена ситуация, когда сервер продолжал работу после ошибки Invalid Request для stdio-клиентов.
• Вызовы через mcp_session() теперь не висят вечно, если R-сессия не отвечает 2 минуты — таймаут настраивается опцией mcptools.session_response_timeout_seconds или переменной окружения MCPTOOLS_SESSION_RESPONSE_TIMEOUT_SECONDS.

mcp_tools() (клиент) — новое:

• Прямое подключение к удалённым Streamable HTTP MCP-серверам (параметр url вместо command), поддержка статических headers для токен-авторизации и полноценный OAuth 2.1 (discovery, Dynamic Client Registration, PKCE, автообновление токена через httr2, кэширование токенов между сессиями).
• Результаты MCP-инструментов теперь конвертируются в нативный для ellmer текст/картинки — чаты ellmer могут получать изображения от MCP-инструментов.

mcp_tools() — фикс безопасности:

• Дочерние процессы MCP-серверов теперь запускаются с allowlist-окружением + заданными env-переменными, а не с полным окружением R-процесса — снижает риск случайной утечки credentials, заодно чинит запуск на Windows при заданном env.

Если вдруг пропустили подробно про mcptools я рассказывал в этом видео.

#новости_и_релизы_по_R
  • 🔥 12
  • ⚡ 3
  • ❤ 3
Post #1359 1.7K
Автоматизация разработки в RStudio с помощью Gemini CLI

В новом видео делюсь тем, как у меня сейчас автоматизирован процесс разработки. Речь пойдет про интеграцию RStudio и Gemini CLI. Gemini CLI это аналог Claude Code, но с хорошим бесплатным тарифом, который способен в значительной части покрыть ваши повседневные потребности по разработке и автоматизации, позволяя не переплачивать там, где это не нужно.

В видео продемонстрирую пример решения одной из своих реальных задач, по переводу пакета на новую версию API.

Разбираем, как запустить этот стек в RStudio и использовать для реальных задач.

Что в видео:
• Gemini CLI vs Claude Code: Почему я перешел на Gemini и как это экономит бюджет.
• Настройка: Установка и получение API ключа.
• Интеграция: Подключение CLI к RStudio.
• Практика: Рефакторинг и перевод пакета rgoogleads на новую версию Google Ads API.
• Паттерны: Как через GEMINI.md заставить модель писать код именно так, как вам нужно.
• Расширение возможностей: Работа с MCP серверами.

Тайм коды:
00:00 О чём это видео
01:00 Почему gemini cli, а не claude code
02:27 Установка gemini cli
03:56 Создание и установка API ключа
05:25 Подключение gemini cli к RStudio
06:08 Базовый пример использования gemini cli
08:13 Продвинутый пример использования gemini cli, перевод пакета rgoogleads на новую версию Google Ads API
14:30 Использование команд gemini cli
16:13 Как задать паттерны поведения модели в gemini cli, файл GEMINI.md
18:08 Как подключить gemini cli к MCP серверу
20:30 Пример использования MCP сервера в gemini cli
22:31 Заключение

#видео_уроки_по_R
  • 🔥 22
  • 👍 5
  • ❤ 4
Post #1358 1.93K
Наверняка вы в курсе, что проект bookdown.org прекращает свою работу. На данный момент там опубликовано более 7000 книг по R, с 15 января 2026 года на сайт уже нельзя загружать новые книги, а 31 января 2027 года сайт будет недоступен.

Все свои курсы я изначально дублировал помимо bookdown на GitHub Pages, так что если у вас где то в закладках сохранены ссылки на bookdown, то лучше их заменить на эти:

• Язык R для пользователей Excel
• Введение в dplyr 1.0.0
• Циклы и функционалы в языке R
• Разработка telegram ботов на языке R
• Разработка пакетов на языке R
• Язык R для разработки AI инструментов

#новости_и_релизы_по_R
  • ❤ 37
  • 👍 9
  • 😢 5
  • 🔥 4
Post #1357 1.85K
Интерфейс для общения с данными на естественном языке: новый урок по пакету querychat

В новом уроке курса "Язык R для разработки AI инструментов" мы разбираем, как превратить ваше Shiny-приложение в аналитического ассистента, который понимает вопросы на человеческом языке и самостоятельно пишет SQL-запросы к вашим таблицам.

Пакет querychat решает одну из главных проблем интеграции LLM с базами данных — проблему точности и безопасности. Мы разберем архитектуру Text-to-SQL, где модель не галлюцинирует цифрами, а выполняет реальный код в вашем окружении.

В этом видео:
● Принцип работы Text-to-SQL: как LLM переводит вопросы в точный программный код
● Безопасность данных: почему querychat передает только метаданные схемы, не отправляя сами данные в облако
● Настройка TableSchema: учим модель понимать структуру ваших таблиц, типы столбцов и категории
● Интеграция в Shiny: использование готовых модулей для быстрого развертывания аналитического чата
● Прозрачность и контроль: визуализация сгенерированного SQL-кода для проверки пользователем
● Использование DuckDB в качестве высокопроизводительного движка для запросов

Тайм-коды урока:
00:00 Введение
01:36 Демонстрация интерфейса построенного на основе пакета querychat
04:27 Как работает querychat
06:06 Создание и запуск интерфейса с помощью querychat
09:50 Подключение внешних источников данных
10:53 Предоставление дополнительного контекста
18:22 Интеграция querychat в свои Shiny приложения
27:28 Инструменты в querychat
30:16 Заключение

Ссылки:
• Видео на Youtube
• Курс "Язык R для разработки AI инструментов"

#курсы_по_R
  • 🔥 19
  • ❤ 4
  • 👍 2
  • 🤯 1
Post #1356 1.68K
Мультиагентные системы в R: пакет mini007

Опубликовал шестой урок курса "Язык R для разработки AI инструментов". Новый урок посвящен проектированию автономных ИИ-команд. Разбираем, как распределять задачи между специализированными агентами и координировать их работу через LeadAgent.

Ключевые темы:
• Создание и настройка агентов: системные промпты, лимиты и бюджеты.
• Автоматизация: генерация и выполнение R-кода, самопроверка ответов (LLM-as-a-judge).
• Архитектура MAS: декомпозиция задач, общая память и итерационные циклы.
• Human-in-the-loop: интеграция человека в цикл принятия решений для контроля и правки промежуточных результатов.
• Агентные диалоги: организация взаимодействия между несколькими моделями для решения сложных кейсов.

Тайм-коды:
00:00 Введение
01:08 Создание объекта класса Agent
07:09 Управление бюджетом агента
09:20 Выполнение R-кода агентом
11:43 Проверка качества ответов
18:56 Теория мультиагентных систем
20:43 Настройка MAS в mini007
29:07 Контроль человеком (HITL)
33:44 Диалог двух агентов
39:08 Интеграция в Shiny

Ссылки:
• Видео на Youtube
• Курс "Язык R для разработки AI инструментов"

#курсы_по_R
YouTube Разработка мульти агентных AI систем (R + ellmer + mini007) В этом уроке мы выходим на новый уровень проектирования ИИ-систем. Если раньше мы работали с одним ассистентом, то сегодня мы научимся создавать целые команды агентов, где каждый отвечает за свою узкую задачу. Мы разберем пакет mini007, который позволяет…
  • 🔥 18
  • ❤ 4
  • 👍 2
  • 👾 1
Post #1355 1.45K
plumber2 0.2.0

Совсем недавно я рассказывал про plumber2, и вот появился его свежий релиз.

Вышла версия 0.2.0, и это уже не просто косметическое обновление. Пакет постепенно доводят до состояния, когда его можно спокойно использовать в продакшене для реальных API-сервисов на R.


1. Поддержка OpenTelemetry
Главное нововведение — интеграция с OpenTelemetry.
Если коротко, теперь можно:

• собирать трассировки запросов;
• получать метрики;
• логировать события;
• подключать внешние системы мониторинга.

Это важно для всех, кто строит API не «для себя», а для команды или продукта. Можно видеть, какие эндпоинты тормозят, где возникают ошибки, как распределяется нагрузка. Для микросервисной архитектуры это особенно актуально.

OpenTelemetry можно использовать и как систему логирования, а не только для трейсинга.

2. Встроенная аутентификация
В 0.2.0 появилась удобная система guards для защиты маршрутов.

Поддерживаются разные способы авторизации: basic, bearer-токены, API-ключи, OAuth2, OpenID Connect. Всё подключается через пакет fireproof и настраивается довольно гибко.

Можно комбинировать схемы доступа, например разрешать вход по basic или по ключу вместе с Google-аутентификацией. Для корпоративных API это серьёзный шаг вперёд.

Теперь не нужно изобретать свою систему доступа поверх plumber2.

3. Datastore через аннотацию
Добавили аннотацию @datastore. Раньше хранилища состояния нужно было описывать только в коде. Теперь их можно объявлять рядом с обработчиками.

Это упрощает работу с сессиями, токенами и другими persistent-данными. Код становится чище, структура API понятнее.

4. Улучшения report-endpoints
Доработали механизм отчётных эндпоинтов.
Появилась функция api_report(), которая расширяет возможности тега @report. Можно гибче настраивать параметры, автоматически учитывать их в OpenAPI-документации и отдавать отчёты, например, на базе Quarto.

Это удобно для аналитических API, где нужно по запросу формировать отчёты или выгрузки.

Ссылки:
Более подробно про релиз можно узнать из статьи "plumber2 0.2.0".

#новости_и_релизы_по_R
  • 🔥 16
  • ❤ 2
Post #1354 1.33K
dplyr 1.2.0

Ребята из команды tidyverse выкатили релиз dplyr 1.2.0 — обновление, целиком посвящённое более читаемой и декларативной работе с заменой и исключением значений.

Ну а я в свою очередь снял небольшое видео посвящённое этому релизу, и добавил его в курс "Введение в dplyr 1.0.0".

В новом видео разбираю ключевые нововведения:

• filter_out() — читаемая альтернатива filter(!...)
• recode_values() — удобная и безопасная перекодировка значений
• replace_values() — массовая замена значений без изменения структуры данных
• replace_when() — условная замена значений как развитие case_when()

Все примеры — на практике, с пояснениями, где и зачем использовать новые функции.

Ссылки:
• Видео снято по статье "dplyr 1.2.0" из блога tidyverse.
• Рассмотренный в ходе уроке код можно найти тут.

#новости_и_релизы_по_R
  • 🔥 33
  • ❤ 7
  • 👍 3
Post #1353 1.92K
plumber2

Ребята из Posit переосмыслили plumber и выпустили plumber2. И это не «plumber v2», а полноценный перезапуск API-фреймворка для R.

Идея простая: чинить старую архитектуру дальше было бессмысленно — накопилось слишком много компромиссов.

В plumber:
• смешивались path / query / body параметры
• filters и preempt добавляли много магии и мало прозрачности
• аннотации и документация были ограничены
• архитектура плохо подходила для async и масштабирования

В plumber2 это всё пересобрали:
• чётко разделили параметры запроса
• path → аргументы функции, query → query, body → body
• полностью переработали аннотации (типы, default, enum, OpenAPI)
• убрали filters и preempt
• построили сервер на fiery, request/response — на reqres
• заложили поддержку async и WebSockets

# Было (plumber)
#* @get /user/<id>
function(id, name) { ... }

# Стало (plumber2)
#* @get /user/<id:int>
#* @async
function(id, query) {
# id — строго из пути
# query$name — из параметров запроса
# Выполняется асинхронно!
}


Важно: plumber2 не обратно совместим с plumber — это осознанное архитектурное решение.

Итог простой: plumber доказал, что API на R возможны, а plumber2 делает их архитектурно нормальными — ближе к FastAPI-подходу, но в R-экосистеме.

Со всей документацией можно ознакомиться по ссылке.

#новости_и_релизы_по_R
  • 🔥 17
  • 👍 7
Post #1352 1.64K
Кастомизация интерфейса AI чата (shinychat)

Опубликовал 5 урок курса "Язык R для разработки AI инструментов". В этом уроке мы разбираем, как превратить базовое окно чата в профессиональное приложение. Мы детально изучим возможности пакета shinychat для глубокой кастомизации интерфейса: от визуального оформления до продвинутой логики работы с инструментами и сессиями. Проще говоря, разберемся, как сделать так, чтобы ваш AI-ассистент выглядел и работал как законченный ИТ-продукт.

Из видео вы узнаете:
• Как кастомизировать иконки, приветственные сообщения и темы оформления
• Как добавить систему интерактивных подсказок (suggestions) для управления диалогом
• Как закрепить поле ввода внизу экрана и использовать sidebar для интерфейса чата
• Как сделать работу AI-инструментов прозрачной для пользователя (отображение вызовов и аргументов)
• Как динамически менять иконки и описания в зависимости от результата работы функций
• Как реализовать сохранение и восстановление истории переписки через URL-параметры
• Как правильно использовать shinychat в сложных модульных Shiny-приложениях

Тайм коды:
00:00 Введение
01:04 План урока
03:05 Базовый интерфейс + Кастомизация иконки ассистента + приветственное сообщение
06:03 Добавление в чат подсказок
07:23 Применение тем, и расположение поля ввода запроса внизу страницы
09:33 Расположение интерфейса чата в sidebar
10:49 Как поместить интерфейс чата в карточку
11:30 Отображение в чате вызываемых моделью инструментов
14:10 Кастомизация иконки и описания вызываемых инструментов
17:28 Кастомизация отображения полученного вызываемым инструментом результата
20:13 Опции управления отображения вызываемых моделью инструментов
21:34 Восстановление и сброс диалога
24:51 Как использовать shinychat в модульных shiny приложениях
27:56 Заключение

#курсы_по_R
YouTube Кастомизация интерфейса AI чата (R + shinychat) В 5-м уроке курса мы переходим от логики к интерфейсу. Мало создать «умного» ассистента — нужно сделать так, чтобы пользователю было удобно и приятно с ним работать. Мы разберем пакет shinychat вдоль и поперек: от смены иконок до сложной интеграции в модульные…
  • 👍 18
  • ❤ 3
  • 🔥 2
Post #1351 2.77K
Курс по разработке AI-инструментов на R

Не так давно я писал, что планирую собрать единый курс из своей серии уроков по внедрению ИИ в рабочие процессы. Сегодня проект официально запущен.

Это полноценный интерактивный учебник на Bookdown, где каждое видео дополнено подробным конспектом, готовым кодом, схемами и вопросами для самопроверки.

Что в программе на текущий момент:

1. Введение в разработку AI инструментов: Работа с API через ellmer, управление контекстом и создание первого интерфейса на shinychat.
2. LLM в Telegram боте: Проектируем архитектуру бота, способного поддерживать диалог и работать с множеством пользователей.
3. Язык R как MCP сервер и клиент: Выходим за рамки чата. Учим модель использовать ваши локальные данные и функции как инструменты.
4. RAG (Retrieval-Augmented Generation): Подключаем ИИ к собственной базе знаний на DuckDB. Делаем так, чтобы модель отвечала строго по вашим документам.

Эта база закрывает 90% задач, с которыми вы столкнетесь при разработке реальных AI-ассистентов для аналитики и бизнеса.

Важно: Программа не финальная. Я планирую расширять курс новыми модулями по мере выхода актуальных решений и развития нашего внутреннего стека. В ближайшие несколько недель будет добавлен 5 урок. Так что не забывайте подписываться, что бы не пропускать обновления.

#курсы_по_R
  • 🔥 44
  • ❤ 12
  • 🤝 2
Post #1350 2.1K
RAG: Подключаем AI чат к собственной базе знаний

В этом уроке мы разбираем RAG (Retrieval-Augmented Generation) — подход, который позволяет большим языковым моделям отвечать на вопросы, опираясь не только на свои внутренние знания и системный промпт, но и на вашу собственную базу данных и документы.

Если в предыдущих видео мы научились вызывать LLM из R, строить чат-интерфейсы и подключать инструменты, то здесь делаем следующий логичный шаг — подключаем модель к базе знаний.

В уроке мы последовательно пройдём весь RAG-пайплайн на примере пакета ragnar:

• разберём, что такое RAG и из каких этапов он состоит;
• подготовим документы и разобьём их на фрагменты;
• создадим эмбединги и запишем их в хранилище;
• посмотрим, как устроен векторный и текстовый (VSS и BM25) поиск по базе знаний;
• научимся проверять и отлаживать хранилище с помощью Ragnar Store Inspector;
• подключим языковую модель к базе знаний;
• соберём простой AI-чат с помощью пакета shinychat.

В итоге у вас будет чёткое понимание, как в R реализовать полноценный RAG-подход — от документов до работающего AI-ассистента, который отвечает на вопросы на основе ваших данных.

Тайм коды:
00:00 О чём это видео
01:54 Что такое RAG
06:02 Создание переменных среды для хранения API ключей
07:31 Подготовка документов
10:44 Разделение документа на фрагменты, эмбендинг и запись фрагментов в хранилище
22:24 Инструмент проверки хранилища Ragnar Store Inspector
24:05 VSS и BM25 поиск по хранилищу
31:13 Подключение LMM к базе знаний
35:08 Создаём интерфейс AI чата с помощью пакета shinychat
38:55 Резюмируем весь рассмотренный в видео материал
41:22 Заключение

Ссылки:
- Материалы к уроку

#видео_уроки_по_R
YouTube RAG: Как подключить AI чат к собственной базе знаний (язык R + ellmer + ragnar) В этом уроке мы разбираем RAG (Retrieval-Augmented Generation) — подход, который позволяет большим языковым моделям отвечать на вопросы, опираясь не только на свои внутренние знания, но и на вашу собственную базу данных и документы. Если в предыдущих видео…
  • ❤ 12
  • 🔥 11
  • 👍 2
Post #1349 1.95K
R4marketing | канал Алексея Селезнёва | Язык R Новый видеоурок: R и MCP серверы для работы с LLM В этом уроке мы разбираем, как подключать большие языковые модели к вашим инструментам через MCP, и как использовать R как полноценный сервер и клиент для LLM. Проще говоря разберёмся с тем, как из вашего…
Опубликовал текстовую версию урока по написанию своего MCP сервера на R

Кому привычнее воспринимать текст, опубликовал статью по материалам урока "Язык R как MCP сервер и MCP клиент". Так же в статье найдёте код MCP сервера для работы с Google Sheets API, и пример конфига для его подключения к ellmer и Claude Desktop.

Содержание:

1. Что такое MCP сервер
2. Язык R как MCP сервер (пишем сервер для работы с Google таблицами)
3. Язык R как MCP клиент
4. Заворачиваем AI ассистента в интерфейс чата
5. Подключаем MCP сервер к Claude Desktop
6. Заключение

————————————
Возможно в следующем году запишу ещё несколько видео по этой теме, и соберу небольшой курс по разработке AI инструментов на языке R.


#статьи_по_R
Alexey Seleznev blog Как написать свой MCP сервер на языке R Ранее я уже рассказывал про разработку AI чатов на языке R. Теперь сделаем шаг дальше. В этой статье мы разберем, как научить модель работать с вашими функциями и сервисами через MCP серв…
  • 🔥 24
  • 👍 9
  • ❤ 3
Post #1348 3.27K
Новый видеоурок: R и MCP серверы для работы с LLM

В этом уроке мы разбираем, как подключать большие языковые модели к вашим инструментам через MCP, и как использовать R как полноценный сервер и клиент для LLM. Проще говоря разберёмся с тем, как из вашего AI чата сделать полноценного AI ассистента, который умеет не только отвечать на вопросы, но и выполнять различные действия. В видео мы напишем MCP сервер для работы с Google Sheets API.

В видео вы увидите:
● Что такое MCP и чем он отличается от обычного function calling
● Как поднять MCP сервер прямо из R
● Как описывать инструменты для LLM и передавать их через MCP
● Как использовать R как MCP клиент и вызывать инструменты удалённо
● Как подключить собственный MCP сервер к Claude Desktop
● Как дать модели доступ к активным R-сессиям с помощью пакета btw
● Чем MCP удобнее прямого вызова функций и когда его стоит применять

Тайм коды:
00:00 О чём это видео
01:50 Что такое MCP сервер
03:10 R как MCP сервер
13:03 R как MCP клиент
20:24 Подключаем написанный ранее MCP сервер к Claude Desktop
23:10 Подключаемся через Claude Desktop к активным R сессиям (пакет btw)
27:09 Заключение

Ссылки:
- репозиторий со всеми материалами к уроку

#видео_уроки_по_R
YouTube Язык R как MCP сервер и MCP клиент (разработка AI ассистента) В этом уроке мы продолжаем разбирать продвинутую работу с большими языковыми моделями в экосистеме R. В предыдущих видео мы познакомились с пакетами ellmer и shinychat, а также встроили LLM в Telegram-бота. Теперь переходим к следующему уровню — инструментам…
  • 🔥 29
  • ❤ 8
  • 👍 2
Post #1347 1.97K
Обновление ellmer до версии 0.4.0

Вышла новая минорная версия пакета ellmer — 0.4.0. Если вы работаете с LLM прямо из R, это обновление стоит внимания.

Основные изменения и новые возможности:

1. Стабильность и жизненный цикл функций
● parallel_chat() и batch_chat() теперь стабильны — можно безопасно использовать в рабочих скриптах.
● Улучшена обработка ошибок: если один из запросов не удался, остальная часть процесса продолжает работу.
● Некоторые устаревшие функции удалены: Chat$extract_data(), Chat$extract_data_async(), chat_azure(), chat_bedrock(), chat_cortex(), chat_gemini(), chat_openai(seed) и другие.

2. Claude (Anthropic)
● Появился параметр кэширования cache (по умолчанию 5 минут), чтобы экономить токены.
● Работа с файлами: claude_file_upload(), claude_file_list(), claude_file_delete().
● Встроенные веб-инструменты: claude_tool_web_search(), claude_tool_web_fetch(). Модель может самостоятельно искать информацию и читать страницы.

3. OpenAI
● Используется современный API «responses».
● Аргумент service_tier позволяет выбирать между медленным/дешёвым и быстрым/дорогим вариантом.
● Для старых провайдеров есть chat_openai_compatible()

4. Инструменты и расширенные возможности
● tool() может возвращать изображения или PDF документы (см. content_image_file(), content_pdf())
● Новая функция schema_df() позволяет передавать модели структуру датафрейма (колонки, типы) без передачи всех данных.
● Новые аргументы в params(): reasoning_effort и reasoning_tokens — контроль «умственной нагрузки» модели.
● Безопасное хранение API ключей через credentials() вместо передачи напрямую.

5. Улучшения по управлению и отслеживанию
● batch_chat() и parallel_chat() теперь лучше управляют хешами запросов и обработкой ошибок.
● Улучшено отслеживание токенов и стоимости запросов.
● Методы печати (print) объектов Chat стали информативнее, полезно для логов и отчётов.

Более подробно о релизе можно узнать тут.

————————————
В общем много полезного Хедли с командой добавили, напомню, что у меня есть видео урок по работе с ellmer, если кто-то до сих пор не в курсе, что это за пакет.

#новости_и_релизы_по_R
  • 👍 9
  • ❤ 4
  • 🔥 4
Post #1346 2.12K
Всем привет. Сегодня каналу исполняется 7 лет.

В последнее время я стал писать здесь заметно реже — где-то пропала мотивация. Наверное, сказалось то, что уже около трёх лет канал практически не растёт, а в этом году число подписчиков даже немного уменьшилось.

Тем не менее я не собираюсь его бросать. Посты будут появляться, просто не так часто, как раньше. Возможно, появятся новые идеи, и получится вернуть регулярность и интерес к публикациям.

Спасибо всем, кто остаётся здесь всё это время. Есть несколько планов — как минимум хочу записать пару новых видео.

Остаёмся на связи.
  • ❤ 77
  • 🎉 36
  • 🔥 20
  • 👍 7
  • 🙏 3
Post #1345 2.83K
Друзья, кто работает с Facebook Marketing API или Google Ads API через мои пакеты rfacebookstat и rgoogleads соответственно, рекомендую обновить пакеты т.к. они переведены на наиболее актуальные версии API.

rfacebookstat -> Facebook Marketing API v23.0
rgoogleads - > Google Ads API v21

#новости_и_релизы_по_R
  • 👍 6
  • 🔥 5
  • 🙏 2
Post #1344 2.8K
rappleads - Запрос данных из Apple Ads Campaign Management API

Опубликовал небольшой пакет для запроса данных и отчётов из рекламных кабинетов Apple Ads.

Установка:
Установить rappleads можно из CRAN или GitHub:

pak::pak("rappleads")
pak::pak("selesnow/rappleads")


Авторизация:
Тут придётся немного подзаморочится:

1. Получите приглашением с разрешениями API.
2. Сгенерируйте пару закрытый-открытый ключ.
3. Извлеките открытый ключ из сохраненного закрытого ключа.
4. Загрузите открытый ключ.
5. Создайте секрет клиента.
6. Запросите токен доступа.

но в README я всё подробно описал.

Запрос списка доступных аккаунтов:
● apl_get_me_details() - Id пользователя и основной организации
● apl_get_user_acl() - Получает роли и организации, к которым есть доступ.

Запрос объектов рекламных кабинетов:
● apl_get_campaigns() - Список рекламных кампаний
● apl_get_ad_groups() - Список групп объявллений
● apl_get_ads() - Список объявлений
● apl_get_creatives() - Список креативов

Запрос отчётов:
● apl_get_campaign_report() - Отчёт с группировкой по рекламным кампаниям
● apl_get_ad_group_report() - Отчёт с группировкой по группам объявлений
● apl_get_keyword_report() - Отчёт с группировкой по ключевым словам
● apl_get_search_term_report() - Отчёт с группировкой по поисковым условиям

Пользуйтесь!

#новости_и_релизы_по_R
  • 👍 5
  • 🔥 5
Post #1343 2.29K
ellmer 0.3.0

Продолжаю следить за развитием ellmer. В новом релизе частично нарушена обратная совместимость — но только в части функционала, связанного с добавлением инструментов в чат. Ниже подробнее.

Что нового в версии 0.3.0

Унифицированный конструктор чатов
Раньше под каждого провайдера была своя функция-конструктор:

- chat_openai()
- chat_anthropic()
- chat_google_gemini()

Теперь используется единый конструктор chat(), в который можно сразу передать нужный провайдер или модель:

openai_chat <- chat("openai/gpt-4.1")
openai_chat$chat("Tell me a joke about an R programmer")

anthropic_chat <- chat("anthropic")
#> Using model = "claude-sonnet-4-20250514".
anthropic_chat$chat("Write an acrostic for tidyr")


Улучшенная спецификация инструментов
Хедли поработал над интерфейсом инициализации инструментов, добавляемых в модель.

Новый интефейс выглядит так:

get_weather <- tool(
function(location, unit = "celsius") {
# Function implementation here
paste0("Weather in ", location, " is 22 ", unit)
},
name = "get_weather",
description = "Get current weather for a location",
arguments = list(
location = type_string("The city and state, e.g. San Francisco, CA"),
unit = type_enum(c("C", "F"), "Temperature unit: celsius/fahrenheit")
)
)


Что изменилось:
1. Аргументы функций теперь передаются в виде списка в arguments;
2. У остальных аргументов убрали префикс в виде точки.

Что бы максимально легко перевести свой код определения инструментов модели с предыдущих версий используйте любую LLM, и следующий промпт:

Help the user convert an ellmer 0.2.0 and earlier tool definition into a
ellmer 0.3.0 tool definition. Here's what changed:

* All arguments, apart from the first, should be named, and the argument
names no longer use `.` prefixes. The argument order should be function,
name (as a string), description, then arguments, then anything

* Previously `arguments` was passed as `...`, so all type specifications
should now be moved into a named list and passed to the `arguments`
argument. It can be omitted if the function has no arguments.

# old
tool(
add,
"Add two numbers together"
x = type_number(),
y = type_number()
)

# new
tool(
add,
name = "add",
description = "Add two numbers together",
arguments = list(
x = type_number(),
y = type_number()
)
)

Don't respond; just let the user provide function calls to convert.



И добавьте в него все tool() описанные в предыдущих версиях ellmer.

#новости_и_релизы_по_R
  • ❤ 11
  • 👍 6
Post #1342 2.32K
rtiktokads: Пакет для работы с TikTok Marketing API

Написал небольшой пакет для работы с TikTok Marketing API, он покрывает далеко не все доступные возможности, но основная часть функционала по запросу данных из рекламных аккаунтов в TikTok доступна.

Установка:
pak::pak("selesnow/rtiktokads")

Авторизация:
● tik_set_username() - задать имя пользователя
● tik_auth() - авторизоваться в TikTok Bussines API

Запрос данных:
● tik_get_business_centers() - запросить список бизнес центров
● tik_get_advertiser_accounts() - запросить список рекламных аккаунтов
● tik_get_advertiser_info() - запросить информацию по рекламным аккаунтам
● tik_get_advertiser_balance() - запросить информацию о балансе рекламных аккаунтов
● tik_get_campaigns() - Запрос рекламных кампаний
● tik_get_ad_groups() - Запрос групп объявлений
● tik_get_ads() - Запрос объявлений

Отчёты:
● tik_get_report() - запрос отчётов из TikTok Marketing API


Пользуйтесь.

#новости_и_релизы_по_R
  • 👍 13
  • 🤯 3
  • ❤ 2
  • 😭 1
Post #1340 2.78K
Анализ GitHub репозиториев с помощью AI

Попался на глаза ещё один интересный проект Хедли - GitAI. Это свежий инструмент в экосистеме R, предназначенный для извлечения знаний из Git-репозиториев с помощью больших языковых моделей (LLM).

GitAI — это R-пакет, который позволяет:
● Сканировать один или несколько Git-репозиториев (GitHub или GitLab).
● Извлекать содержимое определённых файлов, например, README.md.
● Обрабатывать это содержимое с помощью LLM, чтобы получить краткие описания или ответы на конкретные вопросы.
● Сохранять результаты в векторную базу данных для последующего семантического поиска или использования в Retrieval Augmented Generation (RAG) сценариях.

Пример использования
Вот пошаговый пример того, как использовать GitAI для анализа нескольких репозиториев:

Для работы кода необходимо указать через переменные среды API токены для работы с GitHub и Gemini (или другой LLM моделью).

Sys.setenv('GOOGLE_API_KEY' = 'ваш токен для GEMINI API')
Sys.setenv("GITHUB_PAT" = 'ваш персональный GITHUB токен')


library(GitAI)

# Устанавливаем таймаут и отключаем подробный вывод
options(ellmer_timeout_s = 120)
verbose_off()

# Инициализируем проект
my_project <- initialize_project("fascinating_project") |>
set_github_repos(
repos = c(
"r-world-devs/GitStats",
"r-world-devs/GitAI",
"openpharma/DataFakeR"
)
) |>
add_files(files = "README.md") |>
set_llm('gemini') |>
set_prompt("Напиши краткое изложение проекта в одном предложении на основе предоставленных данных.")

# Обрабатываем репозитории
results <- process_repos(my_project)

# Выводим результаты
purrr::walk(results, function(result) {
cat(stringr::str_wrap(result$text, width = 80), "\n\n")
})


Результат
Проект `GitStats` предоставляет унифицированный способ получения данных
из GitHub и GitLab, таких как организации, репозитории, коммиты, задачи,
пользователи, журналы выпусков, структура файлов, содержимое текстовых файлов и
использование R-пакетов, а также предоставляет базовую статистику по коммитам и
задачам.

Проект GitAI предоставляет фреймворк на R для извлечения и анализа знаний
из Git-репозиториев с использованием ИИ и больших языковых моделей, чтобы
автоматизировать обзор и улучшить повторное использование кода и информации.

DataFakeR - это R-пакет, предназначенный для генерации фейковых данных,
сохраняющих определенные характеристики оригинальных данных, с возможностью
настройки схемы данных через YAML-файлы и определения пользовательских методов
симуляции.


Основные функции:
● initialize_project(name): Инициализирует новый проект GitAI.
● set_github_repos(repos): Устанавливает список GitHub-репозиториев для анализа.
● add_files(files): Указывает, какие файлы из репозиториев нужно анализировать.
● set_llm(...): Настраивает использование LLM для обработки содержимого.
● set_prompt(prompt): Устанавливает запрос, который будет передан модели.
● process_repos(project): Запускает процесс анализа репозиториев.
● set_database(...): Настраивает векторную базу данных для хранения результатов.
● find_records(...): Позволяет выполнять поиск по сохранённым результатам.

#заметки_по_R
  • 🔥 13
  • ❤ 1
  • 👍 1
Older posts →

About this channel

How can I read @r4marketing without a Telegram account?
TGViewer shows the public web preview Telegram publishes for R4marketing | канал Алексея Селезнёва | Язык R: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does R4marketing | канал Алексея Селезнёва | Язык R have?
R4marketing | канал Алексея Селезнёва | Язык R (@r4marketing) has 4.13K subscribers on Telegram, refreshed roughly every 30 minutes.
Does R4marketing | канал Алексея Селезнёва | Язык R know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →