Как пустить ИИ в 1С и ничего не сломать: на примере одного HTTP-метода

Всем привет! Раз вы откликнулись на эту статью, предполагаю, что вы тоже давно точите зуб на то, как работает ваша 1С. А когда появляется новая задача по ERP, вы с небольшой опаской наблюдаете за её реализацией. Вот и я такой же. Только с недавних пор мне пришлось погрузиться в 1С сильнее, чем среднестатистическому пользователю.
В одном предложении о себе. Меня зовут Дмитрий Чащин, у нас со старшим братом свой стартап по речевой аналитике. Но, как это обычно бывает, стартап сам себя не прокормит, поэтому мы работаем ещё и в семейном бизнесе, который производит системы пожаротушения. Имён называть не буду, потому что Хабр опять меня забанит :)
Делайте Ctrl+P или Cmd+P на эту статью и вставляйте в свою ИИшку, если лень читатьА теперь к делу. Появилась задача: генерировать в 1С серийные номера для продукции. Что обычно происходит в этот момент? Задача спускается на человека, который занимается 1С. Он готовит очень базовое описание для нашего подрядчика-интегратора, и дальше мы всё это мусолим на созвонах. Для начала хватило бы двух-трёх простых HTTP-методов: создание и сохранение серийных номеров, без сложной логики привязки к продукции при оформлении заказов и прочего. Глубоко в разработку мы уходить не хотели специально: на первом этапе нужно было отработать саму логику «запрос — ответ» для генерации и гравировки серийников. Интегратор 1С прислал на это смету, и сумма в ней оказалась в три раза больше, чем мы рассчитывали.

Я немного ошалел: откуда такие цены? И это в то время, когда все активно ускоряют разработку с помощью ИИ. Хотя, честно говоря, начать надо не с этого. Этот же подрядчик раньше сделал нам аж девять HTTP-запросов с глубочайшей интеграцией в существующие макросы нашей ERP, и обошлось это втрое дешевле. С этим интегратором мы работаем давно. Работу он делает нормально, ни хорошо ни плохо, а какое-то время был даже дешевле остальных.
В тот момент я дал себе установку. Ок, я чайник в 1С. Но я своими глазами вижу, как ИИ пишет код для методов, полей и макросов. Мне не хватало одного: чтобы он сам находил, куда «тыкнуть» в Конфигураторе, и сам всё настроил. Если у ИИ получится (вариант А), значит, задача не стоит таких денег. Если не получится от и до (вариант Б) — значит, стоит, а я молодой дурачок, который слишком плотно сел на иглу ИИ и потихоньку тупеет под влиянием кодовых агентов. Кстати, вторая половина вывода Б уже частично сбывается: мы явно ленимся и всё меньше читаем свой код. Но статья не о моей трагедии.
Чем кончилось? Открытая модель Qwen3-VL через удалённый рабочий стол сама создала в 1С:ERP шаблон URL, метод GET и обработчик, сохранила бэкап расширения и обновила конфигурацию базы. Самое важное: я принципиально поставил условие, что всё делается без доступа к файлам, только по картинке экрана и мышью.
Откуда вообще задача
Серийные номера у нас есть и сейчас. Но, как это обычно бывает, живут они в отдельной базе данных, почти ни с чем не связанной, а на изделие попадают гравировкой лазером или этикеткой. Задача пришла такая: внедрить на производстве единую систему серийных номеров.
На словах всё просто, на деле затрагивает массу процессов. Поэтому начать мы хотели с самой базовой логики: сгенерировать номер, проверить, нанесён он или нет, и присвоить изделию. Для первых тестов хватит двух-трёх HTTP-методов в 1С за безопасным шлюзом. 1С выбрали потому, что там уже живёт всё: связь с заводами, заказы розницы, планы производства, логика макросов и программ. В общем, понятно, как потом масштабировать, и без дублирующих внешних баз.
Дальше начинается веселье. Единый формат номера согласовать гораздо сложнее, чем кажется, потому что каждый хочет видеть в нём своё: группу товара, завод, дату, порядковый номер за день. Идея такая: по самому номеру сразу видно базовое (что за изделие, где и когда сделано), а по базе данных можно узнать подробности, что и когда в него собрали. Формат не утверждён до сих пор. А лазерное оборудование куплено давно, и хочется уже сейчас повесить на него какой-нибудь Raspberry Pi Zero и начать слать запросы в 1С на генерацию хоть чего-то. Пока внутри спорят о формате, генерацию и самый базовый бизнес-процесс хочется уже тестировать.

Сразу отвечу на вопрос, который наверняка прилетит в комментариях: а почему не OData? Потому что это совсем другое измерение. OData в 1С по сути открывает наружу таблицы: справочники, документы, регистры. Читай, пиши, фильтруй. А нам нужен метод с логикой внутри 1С: собрать номер по формату, взять следующий порядковый номер за день так, чтобы два одновременных запроса не получили один и тот же, отметить, нанесён он или нет. Через OData всю эту логику пришлось бы унести на ту самую Raspberry Pi у лазера, и каждая железка считала бы счётчик сама. Дубли номеров гарантированы :) Плюс HTTP-метод — это свой договор с внешним миром, хоть и ограниченным стенами предприятия: формат номера внутри поменялся, а адрес и ответ остались прежними. Если бы нужно было просто читать данные из 1С, OData был бы быстрее, и агент тут вообще бы не понадобился.
Теперь представьте, что мы покупаем всё у интегратора. Платим втрое больше, потом формат меняется (а он точно поменяется, возможно, на 180 градусов), всё надо переделывать, и тут включается рубильник почасовой поддержки, где ценник ещё выше. В итоге деньги и время потрачены, а мы ещё и выясняем, почему ничего не работает. Никто же не признаёт свои ошибки :)
Штатный 1С-специалист у компании тоже есть, но он один и сидит на поддержке ERP. До наших экспериментов у него просто не доходят руки, а в очереди можно стоять очень долго. Поэтому обычно и шли к интегратору.
Отсюда и цель статьи. Я хочу, чтобы люди вроде меня, которые не 1С-ники, могли сами сделать первые простые вещи, а доделку и перенос в рабочую базу отдавали профессионалу.
Что подготовить до старта
Скажу очевидную для многих вещь, которая совсем не очевидна тем, кто захочет автоматизировать свою 1С: всё, что делается в Конфигураторе, тестируется на копии базы. Если что-то упадёт в рабочей, упадёт вся компания :)
Всё своё агент делает в отдельном расширении конфигурации api (назвать его можно как угодно), объекты называет с префиксом api_ и чужого не трогает. Перед каждой правкой расширение выгружается в файл .cfe с датой в имени. Если что-то пошло не так, загружаешь старый файл обратно, и всё как было.

Всё своё — в отдельном расширении api, остальные расширения базы не трогаем (их названия размыты)
1С обычно стоит на Windows-сервере, и заходят туда по удалённому рабочему столу, RDP. Значит, нужен ИИ-агент, который понимает, куда нажать и что прокрутить на удалённом столе, а не на моём. Разницу объясню ниже, она попила мне немало крови.
Модель нужна не обычная текстовая, а визуальная, с буквами VL в названии (vision-language): агент работает по картинке экрана, и текстовая модель просто не поймёт, что на ней. Брать её можно облачную или локальную. У большинства компаний есть данные, которые в облако отправлять нельзя. Те же финансы и переписку с контрагентами лучше, мягко говоря, в облако не посылать. Если в вашей задаче их мало, берите облако и сэкономите себе время и силы. А самый простой путь вообще — Claude Cowork: там даже думать не надо, в нашей же 1С он сделал такой метод за один заход. Но мне было интересно пройти путь на открытой модели.
И последнее: пароли вводит человек. Агенту их не дают никогда.
Почему RDP и рецепт «идеальной» работы
Что нужно, чтобы всё заработало?
Изолированный рабочий стол, к которому можно подключиться по RDP. Попросите сисадмина сделать изолированное пространство с правами администратора внутри него. Без этого вы не сможете опубликовать правки из Конфигуратора.
Реплика 1С:ERP. Снимите копию базы и разверните её в этом пространстве. Ни в коем случае не проделывайте всё это на рабочей базе.
Пользователь 1С с правами администратора. Для реплики можно завести отдельного администратора с новым паролем, никаких проблем. Иначе опубликовать изменения в Конфигураторе не получится.
Модель, облачная или локальная.
В какой-то момент я понял, что RDP тут ровно то, что нужно.
Чтобы опубликовать HTTP-сервис, нужен рабочий стол с правами администратора. Давать такие права агенту на своей машине страшно. А сессия RDP на сервере с копией базы даёт очень понятную стенку. Агент сидит у меня на компьютере, с сервера получает только картинку экрана, а обратно отправляет только клики и текст. На сервер ничего не ставится, к файлам базы доступа у него нет. По сути это стажёр, которого посадили за чужой компьютер.

Откуда что берётся: картинка приходит с сервера, клик уходит обратно, больше ничего
Напрягся ли я? Конечно. В какой-то момент подумал: а вдруг у него всё-таки есть доступ к файловой системе. На самом деле бояться тут нечего. Агент ходит под контролем, и если он захочет выйти за пределы 1С, это будет видно физически: вместо Конфигуратора на экране окажется другое приложение.
Так и случилось один раз. Модель Kimi K3, которую мы пробовали в роли «мозга», нажала Alt+Tabи ушла из окна RDP. Увидели сразу и остановили.
Важная оговорка, возможно, очевидная: полностью закрытый контур даст только локальная модель.
Наш путь к рабочему инструменту
Чтобы было понятно, откуда взялось время:
Дни | Что пробовали | Чем кончилось |
|---|---|---|
1–2 | Open Cowork + локальная | Видит, но не попадает: промах ~1600 px при уверенности 0,95 |
3–4 | Open Cowork + облачная | Попадать научилась, но блуждает. Бросили |
5–6 | Сам Claude Desktop на Qwen через шлюз | Экрана в этом режиме нет, модель выдумала «ТЕСТ ЗАВЕРШЁН» |
6-й, утро | Agent S3 | Промахов ноль, завершений тоже ноль (профессиональный прокрастинатор :) |
7-й | agent-rdp + своя обвязка на 177 строк | Метод создан, сохранён, база обновлена |
Если одной картинкой, то основа у всех попыток была общая, а менялось то, кто смотрит на экран и кликает:

Слева три попытки, где агент смотрит на мой рабочий стол и промахивается; справа agent-rdp, который сам подключается к серверу
Дальше про главные грабли. Если нужен только рецепт, листайте к разделу «Как собрать у себя».
Open Cowork, или майнкрафт в майнкрафте
Популярные у энтузиастов решения по факту оказываются полной шляпой, и тут я вам сэкономлю кучу времени.
Open Cowork — это открытая оболочка десктопного агента, куда можно подставить любую модель. Ставится чисто, без аккаунта и телеметрии. Первое, что видишь в настройках: «Sandbox disabled — commands run directly on system». Песочница требует WSL2, так что «поставил и безопасно» тут не работает.
Ставили релиз v3.3.1 для Windows с GitHub: OpenCoworkAI/open-cowork. Модель подключается в настройках, для локальной Ollama всё находится само:
Установщик: Open.Cowork-3.3.1-win-x64.exe (123 МБ), «Только для меня», без прав администратора
Провайдер: Ollama
Base URL: http://localhost:11434/v1 ← подставился сам по кнопке «Find Local Ollama»
Модель: qwen3:30b-a3b, потом qwen3-vl:30b (у первой нет зрения, об этом ниже)
API-ключ: не нужен
Open Cowork на GitHub: 2,2 тыс. звёзд, в описании обещана песочница
Почему промахивались все модели? Агент фотографирует весь ваш рабочий стол, а окно RDP на нём всего лишь картинка внутри картинки. Модель показывает точку, а пересчитывают её по вашему экрану, где всё совсем по-другому. Это как запустить майнкрафт в майнкрафте :)

Майнкрафт, собранный внутри майнкрафта из редстоуна. Источник: sammyuri, I made Minecraft in Minecraft with redstone!
Сверху добавилась ещё одна прелесть. Коннектор ждал координаты в формате Gemini, где сначала идёт y, потом x, а Qwen отдаёт наоборот. Ехать по европейской колее вместо русской мы не хотели, хотя и попробовали. Модель показывала ровно на нужный плюсик в дереве, а клик улетал в зеркальную точку. Со стороны казалось, что модель тупая, а виноват был стык, и видно это было только в логе.

Почему клик уходил мимо
Самое смешное случилось в первый же день. Модель без зрения записала себе в долговременную память «не умею работать с графическим интерфейсом и удалённым рабочим столом» и неделю этому свято следовала. Запись пережила даже чистку через интерфейс, удалять пришлось руками из файла.
А самое удивительное — насколько даже большая облачная модель, qwen3-vl-plus (класс 235B), начинает галлюцинировать, если задача 5–6 раз подряд не выполняется. Она писала «ветка раскрыта» при свёрнутом дереве и «после нажатия down…», хотя в логе не было ни одного нажатия. Меня это искренне удивило.
Мы написали к Open Cowork четыре патча, и попадать модель научилась: пять кликов, пять попаданий. Но каждая починка снимала один слой проблем и открывала следующий.

Девять слоёв: чинили одно, вылезало другое
Главный урок отсюда: подсказку в промпте модель в действие не превращает. Мы прямо писали ей формулу пересчёта координат, и она ни разу её не применила. Чинить надо инструмент, а не уговаривать модель.
На девятом слое я Open Cowork закрыл.
Сильнее модель — не значит лучше

Agent S на GitHub: 12,4 тыс. звёзд и слоган «пользуйся компьютером как человек»
Следующим был Agent S3 (simular-ai/agent-s). Там за «куда кликнуть» и «что делать» отвечают разные модели.
Сначала он у меня «установился» не тот. На Python 3.13 pip молча ставит gui-agents 0.1.3, а это ещё Agent S1: версии 0.2–0.3.2 требуют Python не новее 3.12. Поэтому отдельное окружение на 3.11 через uv, системный Python не трогаем:
pip install uv
uv venv --python 3.11 .venv311
.venv311\Scripts\activate
uv pip install gui-agents==0.3.2
:: свой запуск: задание из JSON, снимки до/после каждого шага, блок-лист опасных действий
py run_s3_task.py tasks\sh5_http_templates.jsonПланировщик и наводчик ходили в Qwen через тот же шлюз LiteLLM, о нём ниже. Попадала Qwen с ошибкой 4–9 пикселей, промахов ноль. Но и завершений тоже ноль: агент видел цель на пятом шаге и уходил гулять в соседнее дерево.

Agent S3, один прогон: к шагу 10 нужные шаблоны уже видны справа (зелёное), а агент раскрывает дерево слева (красное)
Заодно нашлась неприятная вещь про безопасность. Библиотека Agent S3 выполняет строки кода, которые пишет модель, а в коде ввода текста у неё зашита установка пакетов через sudo с паролем от их тестового стенда. Без своего списка запретов такое запускать нельзя, и мы его написали.
Логичная мысль: мозг слабоват, давай посильнее. qwen3.8-max думала 270 секунд над одним шагом, мы её остановили. Kimi K3 за 313 секунд сделала четыре шага и нажала Alt+Tab, ту самую историю я рассказал выше.

Agent S3 с разными моделями в роли мозга. До конца не дошла ни одна
С координатами всё было в порядке: проблема была в том, что модель не понимала «цель уже достигнута». Нужен был свой, очень узкий цикл: мелкие подцели и проверка после каждого шага.
Что сработало: agent-rdp и своя обвязка
agent-rdp (thisnick/agent-rdp) — это RDP-клиент, сделанный специально для ИИ. Он фотографирует экран самой сессии на сервере, двигает мышь и кладёт текст в буфер обмена через канал RDP. Майнкрафт в майнкрафте исчезает: где модель увидела кнопку, туда и приходит клик.

Страница agent-rdp у автора: «дать ИИ-агентам видеть удалённый рабочий стол Windows и управлять им через RDP»
Важно понимать, что agent-rdp — это инструмент. Готовых функций в духе «сделай мне в 1С» там нет, всё пишешь сам. Скелет есть, мясо надо накинуть. Зато из всего, что я перепробовал, он оказался самым качественным и понятным. Забавно, что у него на момент написания всего 20 звёзд на GitHub против тысяч у Open Cowork и Agent S.

agent-rdp на GitHub: 20 звёзд, 8 форков. Самый полезный инструмент в этой истории
Ставится одной командой, подключение — тоже одной. Пароль вводит человек, в файлы он не пишется:
npm.cmd install -g agent-rdp
agent-rdp connect --host <сервер> --username <логин> --password-stdin ^
--enable-win-automation --stream-port 9224 --width 1920 --height 1080На localhost:9224 в браузере видно ровно то, что видит агент.

Так выглядит agent-rdp: в браузере на localhost:9224 открыта та же сессия с Конфигуратором, что видит агент
Мясо — это наша обвязка qwen_rdp.py на 177 строк. Скрипты для неё, чтобы грамотно вставлять текст и кликать, мне писал Claude. А все решения внутри принимает одна облачная qwen3-vl-plus: смотрит на экран, выбирает одно действие, показывает, куда кликнуть, и после клика по свежему снимку проверяет, получилось ли.

Как всё устроено: с сервера приходит только картинка экрана, туда уходят только клики и текст, решения принимает Qwen через LiteLLM
С agent-rdp обвязка общается обычными командами командной строки. По сути весь «контакт с 1С» — это три вызова:
rdp("screenshot", "--output", p) # снимок экрана самой RDP-сессии
rdp("mouse", "click", str(x), str(y)) # клик туда, куда показала модель
rdp("clipboard", "set", "api_test3p") # текст в буфер обмена через канал RDP
Как агент делает каждый шаг
Задание пишется обычным JSON-файлом: список мелких подцелей и для каждой признак, по которому видно, что она готова. Например, так выглядит последняя подцель, сохранить и обновить базу:
{
"goal": "Open the main menu 'Конфигурация' and click 'Обновить конфигурацию базы данных'. If 1C asks whether to save changes, answer 'Да'.",
"check": "The bottom tab reads 'Api' WITHOUT an asterisk, and no dialog is open.",
"ground_crop": [0, 30, 900, 700],
"max_steps": 8
}Начинали с разминки, которая ничего не меняет: раскрыть шаблон в дереве и открыть свойства метода.

Разминка, прогон r1: Qwen сама раскрыла шаблон в дереве и открыла свойства метода GET, 32 секунды на всё
Агент, который не знает ни одной горячей клавиши
Сюрприз среды: клавиатура от agent-rdp до Конфигуратора не доходит вообще. Ни F7, ни Insert, даже Backspace. До Проводника доходит, до 1С нет.

Backspace от agent-rdp отправлен, а в поле «Имя» по-прежнему ШаблонURL1
И это оказалось не проблемой. Агент работал как человек, который не знает ни одной горячей клавиши: только мышь, меню и правый клик. Вместо Insert — правый клик по ветке и «Добавить», вместо Ctrl+S — пункт в главном меню, вместо F7 — «Конфигурация → Обновить конфигурацию базы данных». Пункты меню подписаны словами, и модель их спокойно читает, а горячих клавиш на экране не нарисовано.
Остаётся вопрос: как без клавиатуры вписать имя в поле? Через буфер обмена. Модель говорит «впиши api_test3p в поле „Имя“», а дальше обвязка делает то, что сделал бы любой офисный работник мышкой.

Как вписать текст, когда клавиатура не работает

Прогон r3e: имя и шаблон вставлены через буфер и правый клик, 34 секунды на всё
Эту цепочку зашили в обвязку после провала, сама модель до неё не додумалась. Четыре прогона подряд Qwen не могла переименовать шаблон: клавиатура не доходила, а по крошечным галочке и крестику в 16 пикселей она промахивалась и жала «отменить». После того как приём зашили в код, следующий прогон вписал имя с первого раза. Модель решает, что и куда вписать, а как именно — знает обвязка. Как человек, которому один раз показали приём.
Всего до результата было 18 прогонов, около 25 минут машинного времени.

Все прогоны 25.09: зелёное Qwen сделала сама, оранжевое с подсказкой, красное не вышло
Красные полосы в нижней половине — попытки попасть в пункт меню «Расширения». Модель раз за разом попадала в соседний пункт «Текст». Вылечили просто: стали показывать модели не весь экран, а только вырезку с меню.
Результат
В тестовой базе появились шаблон api_test3p с адресом /test3p, метод GET и обработчик. Сам обработчик сгенерировала 1С по кнопке с лупой:

Метод GET создан, поле «Обработчик» пустое. Клик по лупе, и 1С сама пишет функцию api_test3pGET
Функция api_test3pGET(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункцииПеред сохранением агент выгрузил расширение в .cfe, это наша точка отката. Сохранять и обновлять базу разрешил я, после бэкапа, а дальше Qwen сама прошла через главное меню. Признак успеха: вкладка Api без звёздочки, а пункты «Сохранить» и «Обновить» стали неактивны.

Бэкап расширения в .cfe сохранён, это точка отката перед сохранением

После сохранения: «Сохранить» и «Обновить» неактивны, вкладка Api без звёздочки
Метод живой. Учётку для проверки вводил я сам, агенту пароли не даём:

Проверка метода: 200 и пустой ответ. Адрес, публикация и логин заменены
Пустой ответ с кодом 200 — ровно то, что делает заглушка: 1С приняла запрос, нашла шаблон и вызвала обработчик.
Руками Qwen поправляли четыре раза. В списке из шестидесяти расширений она прокрутила всё и не увидела строку api, её нашли через распознавание текста в agent-rdp. После неудачных переименований закрыли окно ошибки «Имя не должно быть пустым». Вписали имя файла бэкапа. И отменили выгрузку чужого расширения.
Последний случай стоит рассказать подробнее. Модель, которая проверяет результат, сказала «выбрано api», а открылся диалог сохранения совсем другого расширения. Поймали по имени файла, которое подставилось по умолчанию.

Будь это загрузка вместо выгрузки, мы бы перезаписали чужое расширение. Вывод простой: модель, проверяющая сама себя, ошибается в сторону «да, всё отлично». Поэтому важные шаги проверяем по признаку, который нельзя понять двояко (имя файла, звёздочка на вкладке, серый пункт меню), или глазами человека.
Так А или Б? Задача сделана через интерфейс, от создания до обновления базы, с четырьмя подсказками. Методов нужно два-три, они реализованы, хотя для статьи я показал метод-заглушку. Для меня это ближе к А: работу, которую мне насчитали втрое дороже, чайник с открытой моделью сделать может.
А что потом с этим кодом
В прод агента я пускать не собираюсь. А зачем? Самое главное, что мы уже можем дёргать HTTP-методы и примерно закладывать бизнес-логику, безболезненно меняя код внутри Конфигуратора.
Код с копии базы я отдаю нашему 1С-специалисту, который поддерживает ERP. Когда мы всё изучили, адаптировали и готовы вставлять в рабочую базу, он переносит это сам, после нагрузочных тестов и всего, что положено. Ему не надо тратить время на эксперименты, а нам не надо стоять в очереди.

Путь кода до рабочей 1С
Следующий шаг — нормальный чат с агентом. Первый живой вопрос, который я задал Qwen, был «что ты видишь на экране?». Вместо ответа словами она превратила вопрос в план действий, полезла что-то закрывать и четыре раза промахнулась по крестику размером 16 пикселей. Вывод понятный: нужны два отдельных режима, «Спросить» и «Сделать», и для мелких кнопок — наведение в два захода, с увеличением.

Первый набросок чата: «Спросить» и «Сделать» уже разведены по кнопкам, но на вопрос «что на экране?» модель пока просит уточнить
Как собрать у себя
Обвязку и примеры заданий я выложил в открытый репозиторий qwen-1c-rdp, там пошаговый README. Коротко путь такой.
Всё из «рецепта идеальной работы» выше уже должно быть: изолированный рабочий стол, реплика базы, администратор, расширение и его бэкап в .cfe. Дальше только установка. Поставьте agent-rdp командой npm.cmd install -g agent-rdp: обычный npm в PowerShell блокируется политикой скриптов, поэтому именно .cmd. Поднимите LiteLLM на 127.0.0.1:4000 и подключите к нему облачную qwen3-vl-plus через DashScope или локальную модель через Ollama. Конфиг шлюза у нас такой, ключи берутся из переменных окружения:
model_list:
- model_name: cloud-qwen3-vl-plus # так получен результат
litellm_params:
model: dashscope/qwen3-vl-plus
api_base: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
api_key: os.environ/DASHSCOPE_API_KEY
- model_name: local-qwen3-vl-30b # локально, нужно больше 16 ГБ видеопамяти
litellm_params:
model: ollama_chat/qwen3-vl:30b
api_base: http://127.0.0.1:11434
general_settings:
master_key: os.environ/GATEWAY_KEYЗапуск шлюза и прогона. chcp 65001 и PYTHONUTF8 обязательны, иначе русские строки роняют шлюз в консоли cp1251:
chcp 65001
set PYTHONUTF8=1
set DASHSCOPE_API_KEY=ваш_ключ
set GATEWAY_KEY=придумайте_ключ_шлюза
litellm --config gateway\config.yaml --host 127.0.0.1 --port 4000
:: в соседнем окне
py qwen_rdp.py tasks\examples\01_open_method.json
LiteLLM: шлюз, через который обвязка ходит к любой модели одним и тем же способом

Qwen3-VL в библиотеке Ollama: локальные версии от 2B до 235B
Дальше подключение. Пароль вводите сами, после ввода нажмите Ctrl+Z и Enter. Если agent-rdp открыл пустую сессию, закройте своё окно RDP крестиком (именно отключиться, без «Выйти»), и agent-rdp подцепит сессию с открытым Конфигуратором. Возьмите пример задания из репозитория, поменяйте подцели под себя и запускайте. Готовность смотрите на экране: статус в логе врёт в обе стороны. Что-то пошло не так — загружаете .cfe обратно.
Про локальную модель скажу прямо. qwen3-vl:30b занимает 19 ГБ и не влезла в мои 16 ГБ видеопамяти: 218 секунд на один вопрос по картинке. Через agent-rdp я её прогнать не успел, хотя думаю, что с мелкими подцелями она бы справилась.
Тише едешь
Если из статьи запомнить одну мысль, пусть будет эта:
Медленнее не значит хуже.
Есть в интернете ролик. Мужик в Германии делает ремонт в двухэтажной квартире. На лестнице у него стоит кресло-подъёмник, которое в Германии встречается повсюду: садишься, и оно возит тебя с этажа на этаж. В Европе много пожилых людей, у которых уже нет мобильности молодых, вот им и приходится так перемещаться между этажами. Так вот, он, рабочий, возит на нём мешки с бетонной смесью. Руками он бы таскал их заметно быстрее. Зато спину сохранил, а пока кресло ехало, готовил почву для следующих задач.
Вот и тут так же. Я уверен, что есть способы элегантнее и понятнее. Я лишь показываю, как сделать это в лоб, безопасно и всё-таки эффективно: мышью по экрану, на копии базы, с бэкапом и человеком, который принимает решения.
С интегратором мы продолжим работать: у нас банально нет столько рук, чтобы реализовать все наши хотелки. Но не бойтесь создавать что-то внутри 1С самостоятельно, если вам кажется, что это под силу ИИшке. Да и просто если стоит задача начать минимальное тестирование уже сейчас, а в разработку глубоко уходить нет желания.
Ссылки
Telegram-канал — https://t.me/notes_from_cto. Регулярные технические заметки про инфру, локальный ИИ и железо. Буду рад, если зайдёте и останетесь.
Если есть что сказать по теме — как вы сами пускаете ИИ в 1С, чем бы заменили RDP или где мы перемудрили, — пишите на cdv.inbox@gmail.com, Чащин Дмитрий. Буду рад обратной связи.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.