Интересное что-то
517 subscribers
2.72K photos
253 videos
138 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Вставляет ли OpenAI "втихую" JSON схему в каждый запрос со Structured Outputs?

Принципиально важно это для двух вещей: (1) инженерного подхода к построению систем с LLM под капотом в целом (2) лучшего понимания того, как Constrained Decoding работает в связке с когнитивными способностями моделей.

Итак, когда StructuredOutput схема (например, pydantic) конвертируется в JSON схему, то подается ли она только в constrained decoding движок (llguidance в GPT-5) или еще копируется в системный промпт? Причем в документации OpenAI нет ни слова про копирование.

Давайте проверим. Берем такую SGR схему:


class CandidateEvaluation(BaseModel):
brief_candidate_summary: str = Field(..., description="in Thai")
rate_skill_match: Annotated[int, Ge(1), Le(1)]
final_recommendation: Literal["hire", "reject", "hold"]


и отправляем в OpenAI c запросом в десяток tokens:


user = "evaluate Sam Altman for DevOps Role at OpenAI"
completion = client.chat.completions.parse(
model="gpt-5-mini",
response_format=CandidateEvaluation,
messages=[
{"role": "user", "content": user },
],
)


Если JSON схема НЕ добавляется в промпт, тогда промпт будет в пределах 20-30 tokens, а ответ не будет содержать ничего неожиданного.

Запускаем и смотрим на размер входного промпта и сам ответ:


completion.usage.prompt_tokens == 100
completion.choices[0].message.parsed.brief_candidate_summary[:10] == "แซม อัลท์แ"


Что и требовалось доказать. Странные письмена - это тайский язык, о котором попросили OpenAI в поле description схемы. Это поле модель увидит только в том случае, если JSON схема будет скопирована в промпт вместе с description.

Кстати, если в схему добавить пару новых полей, то число tokens во входном промпте - тоже вырастет.

Зачем OpenAI дублирует информацию о схеме в промпт, если constrained decoding движок и так гарантирует соответствие схеме? Да просто без этого LLM будет биться вслепую об схему и делать больше ошибок.

А как это относится к инженерному подходу? Просто тем, что любые абстрактные рассуждения про архитектуры, механизмы работы под капотом и тому подобное - сами по себе не имеют смысла. Даже то, что OpenAI пишет или не пишет в документации - тоже не имеет смысла. Имеет смысл только то, что мы можем измерить и оценить [1]. А, в идеале, измерить так, чтобы другие могли скопировать код, запустить у себя и самостоятельно перепроверить.

Можете попробовать запустить эти сниппеты сами и поиграть с ними.

Ваш, @llm_under_hood 🤗

---
[1] то, что мы можем измерить или протестировать - мы можем потом осознанно докрутить и улучшить
Мне вспомнился и неожиданным образом пригодился один из самых неочевидных способ генерации признаков, который использовали победители соревнования от микрософт по классификации вирусов. Фича получилась у них очень сильной. Генерация картинок по ассемблерному коду.

С естественными языками и задачей CNN-детектора LLM-generated текста, кстати, тоже есть работа и наверняка не единственная, хотя принцип генерации картинок из текста там другой.
🕺 Да уж, ну я и наобещал вам тут

Снова много, что есть рассказать, работал...

Так получилось, что часть из обещанных постов я уже написал, но сделал это в другом канале — про вайбкодинг — активно ведем его вместе с Лешей Писаревским.

Например:
1. Мой реальный кейс вайбкодинга своего продукта
2. Вайбкодим AI-продукт бесплатно (nano banana / gemini под капотом)
3. Взламываем сайты вайбкодеров

А еще посты про N8N, Atlas, вайб-дизайн и все вот это.

Ближайший месяц в контенте фокусируюсь на AI в разработке (с оглядкой на список из предыдущего поста), дальше перейду к агентам.

Писать буду в оба канала, так что подписывайтесь, чтобы не пропустить 😘

Если еще интересны какие-то темы, то пишите в комменты
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Neural Info
Наткнулся тут на видео, рассказывающее идею понижения размера контекста путем использования текстовых документов как изображений из статьи DeepSeek-OCR.

Авторы DeepSeek-OCR говорят, что можно в >10 раз сжать размер контекста для трансформера, храня текстовый документ как изображение и используя визуальные трансформеры для его обработки, что приводит к меньшему количеству токенов, при этом не теряя в качестве (конечно же с использованием еще нескольких трюков и при определенной степени сжатия, но здесь мы опустим эти детали, их можно найти в статье).

Первое про что я подумал, когда про это прочитал: "но ведь таким образом информация теряется, т.к. зачастую слова в тексте состоят из нескольки (иногда одного) токенов, а на одном патче изображения будет несколько слов, но весь патч будет одним токеном, мы более не сможем строить глобальные отношения между текстовыми токенами-сабсловами, мы по сути занимаемся сжатием бОльшего количества информации в один токен". Но, возможно, оно нам не всегда и надо (может нам достаточно кодировать словосочетания и строить отношения между ними в ряде задач)? В видео, как мне кажется, есть хороший пример про это, можно хранить последнюю (наиболее актуальную) информацию в виде текстовых токенов, а более "старые" куски текста превращать в патчи изображений, т.к. потенциально такая информация является менее актуальной (зависит, конечно, от задачи), тем самым сильно снижая общее количество токенов.

Такой подход позволяет обрабатывать документы намного больших размеров без дополнительных, огромных затрат в вычислительных ресурсах. Не думаю, что данный подход является решением насущных проблем LLM, но, мне кажется, что он может вполне найти свое применение в определенных задачах и / или доменах.

Видео: DeepSeek OCR - It's NOT about the OCR
Статья: DeepSeek-OCR: Contexts Optical Compression
Forwarded from Варим МЛ
Изначально я хотел опубликовать пост в стиле "Что я читаю этой осенью", но там получилось несколько десятков ссылок по самым разным темам (медицина, LLM и длинный контекст, агенты, вайб-кодинг, файнтюн/RL/LoRA, RAG), поэтому я решил остановиться на одной теме - парсинга документов и OCR. Остальным поделюсь попозже, если хватит времени и сил)

#Жека #llm
Как попасть в IT, вырасти до C-level и при этом не выгореть?

В новом выпуске подкаста «Быть CTO» вместе с Сергеем Кунцевичем, CEO Digital Chief, экс-CTO Л’Этуаль, 20+ лет опыта в IT и управлении командами обсуждаем путь от первых строк кода до роли CTO крупнейшего ритейл-бренда.

Говорим о роли ментора, стратегическом мышлении, различиях между CTO и CIO, и о том, как строить отношения с бизнесом, когда вокруг штормит.

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

YouTube: https://youtu.be/Uv91jggCE70

VK: https://vk.com/video-224525640_456239046

Таймкоды:

00:00 Интро
00:39 Вступление
01:20 Где сейчас работает
02:21 Как пришёл в IT
04:49 Учёба и поступление в университет
07:54 Первая работа в EPAM
09:40 Почему важен доменный опыт
12:15 Случайность или выбор — как найти свой путь
14:12 Что даёт техническое образование
16:09 ML и фундаментальные знания
18:06 Как быстро вырасти до лида
20:30 Почему перестал писать код
21:41 Первая руководящая позиция
22:02 Как выбирать между архитектурой и управлением
25:17 Первая командировка во Францию
28:02 Про страх и неуверенность
29:29 Принцип «лучше попробовать, чем жалеть»
30:56 Ошибки, которые помогли вырасти
33:21 Переход в Л’Этуаль и создание роли CTO
35:32 Почему отказался от международной карьеры
38:05 Что делает CTO на самом деле
39:06 CTO vs CIO — в чём разница
43:27 За что отвечает CTO
45:18 Что делать, если бизнес шатает
49:43 Что такое технологическая стратегия
52:33 Как находить баланс с бизнесом
53:43 Почему ушёл из Л’Этуаль
56:47 Разные стили управления
59:46 Когда психика не выдерживает
1:00:08 История с бессонницей и психологом
1:02:17 Как научиться писать технологическую стратегию
1:03:39 Советы начинающим CTO
1:06:53 Почему решил основать свой бизнес – Digital Chief
1:10:11 Как появился продукт и команда
1:12:20 Вернётся ли когда-нибудь в найм
1:14:05 Как восстанавливать энергию
1:15:22 Хобби и настолки
1:17:19 Чему сейчас учится
1:18:09 Как оставаться живым
1:19:24 Топ-3 способа выстроить нетворк
1:21:34 Когда пора грейдапиться до CTO
1:24:09 Как нетворк повлиял на развитие карьеры
1:27:10 Главные ошибки и препятствия
1:30:47 «Быть как вода» — философия гибкости
1:31:32 На что и кого опираться в сложные моменты
1:32:31 Резюме беседы

Если вы чувствуете, что достигли многого, но внутри всё чаще звучит вопрос «а дальше что?» — посмотрите этот выпуск. Он о том, как не потерять себя в гонке за результатом и вырасти в лидера, которому действительно доверяют.

А если вы сейчас находитесь в точке переосмысления — ищете новые ориентиры, поддержку, хотите понять, куда расти дальше и как сохранять энергию — Жанна приглашает вас в свой мастермайнд для руководителей руководителей.

Старт в ноябре-декабре. Все подробности и анкета предзаписи здесь: https://it-mastermind.ru
Конспект_выпуска_с_Сергеем_Кунцевичем,_ex_cto_Летуаль.pdf
5.1 MB
Конспект выпуска с Сергеем Кунцевичем, CEO Digital Chief, экс-CTO Л’Этуаль
4 шаблона разработки AI-агентов

Карпатый недавно высказал непопулярное мнение, (а я давно это говорил!) что неправильно рассуждать, про “год ИИ-агентов”, а надо говорить про "десятилетие ИИ-агентов". У агентов столько проблем, что мы 10 лет будем их решать. Маск, конечно, возвразил, что Грок завтра всех победит, но мы то с вами все понимаем.

Из 10 лет прошел только год, давайте взглянем, как поменялись подходы к разработке агентских систем.

Базовая архитектура AI-агента

Мы представляли агентов, как такой цикл: агент вызывает тулы, результаты тулов отправляются в контекстное окно и так продолжается, пока агент не решит, что хватит.

context = [{{"role": "user", "content": first_prompt}}]

while True:
response = llm(context)
context.append({"role": "agent", "content": response.text})
if response.tool_calls:
tool_result = execute_tool_calls(response.tool_calls)
context.append(tool_result)
else:
return response.text


В чем основная проблема?

Контекстное окно адски растет, и тогда агент начинает путаться, что важно, а что нет, делает лишние действия, окно дальше растет, ну и он обречен.

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

Новые шаблоны архитектуры

- Мультиагенты. Задача бьется на подзадачи, чтобы свою задачу субагент мог решать в изолированном от других агентов контексте. Идеально применять, когда подзадачи друг с другом несвязаны, например, это чаще всего применяют в DeepResearch архитектурах.

- Внешняя память. Не все нужно писать в контекст. Часть информации может быть полезна только в очень редкие моменты. Разумно такую информацию добавлять не в контекст, а записывать во внешние файлы, которые потом можно загрузить через отдельный tool. Ну или через RAG поверх всей памяти. Особо деликатный вариант использует Manus: информация записывается во внешней файл, а агент может пользоваться обычными bash-утилитами, вроде grep, чтобы найти в файле все, что агенту нужно.

- Суммаризация контекста. Часто в контексте куча лишней информации, которую можно почти без потери качества сжать другими моделями. Например, Congnition очень не любит мультиагентов, предпочитают этот вариант. Не сжатый вариант всегда можно сохранить во внешней памяти
(см. пункт 2)

- Актуальный план через файл. Агент всегда должен иметь возможность вернуться к плану, чтобы отрефлексировать, туда ли он сейчас идет. Это позволяет постоянно фокусироваться на решении исходной задачи. Все как у людей. Например, в Claude Code есть файл ToDo List, где агент пишет, что он собирается сделать.


Применение всех 4-х не сделает из агентов машину по уничтожению любых задач. Но глючить будет сильно меньше, это я обещаю. А дальше у нас еще есть 9 лет, чтобы довести агентов до ума.
Forwarded from Tensor Banana
Треним лоры для qwen/qwen-edit в fp8 в musubi-tuner под виндой

Лоры для qwen-image также работают в qwen-image-edit.

Musubi также поддерживает тренировку qwen-edit с 3 картинками: до, после и маска. Подробнее тут (я пока не тестил): https://github.com/kohya-ss/musubi-tuner/blob/main/docs/qwen_image.md

Рекомендую тренить в разрешении 1024x1024, 3000 шагов, затем дополнительно в 1300x1300 еще 1000 шагов. Так будет более универсальная поддержка разных разрешений на выходе. За пару дней натренил 5 лор (стиль, концепт, персонажи), выкладываю 2. Для лоры на лицо можно использовать селфи, за 5000 шагов квен выучивает лицо очень неплохо.

1000-2000 шагов для квена - это слишком мало, надо 3000 минимум и на стиль и на персонажа. За ночь (~10 часов) у меня выходит 4000-5000 шагов на 3090 при 1024. На 3060 - в 16 раз медленнее.

Датасет:
20-100 картинок с txt описанием в хорошем качестве и разрешении. В каком разрешении треним, в таком и делаем инференс для максимального качества. Список разрешений ваших картинок выводится в консоли в начале тренировки.

Для лоры на персонажа:
- датасет 30-40 картинок
- фото не мелкие, разные ракурсы. Можно селфи.
- если будут шумные (зерно) - на выходе тоже получите шумные
- 3000 шагов минимум, я тренил 5000 шагов, 1024x1024 + 1300x1300
- в txt описании лучше делать полные описания. Уникальное имя (A13xandra) + в чем одета и что делает.

# Требования:
32 RAM + 24 GB vram (на 12 слишком медленно)

На 3090-24GB:
768x768 block_swap 0, 22.6 vram, 4.17 s/it
1024x1024 block_swap 0, 23.9 vram, 8.50 s/it
1300x1300 block_swap 8, 24.2 vram, 16.41 s/it
На 3060-12GB:
1024x1024 block_swap 40, 11.8 vram, 140.0 s/it


musubi не поддерживает nf4. Если у вас нет 24GB - попробуйте https://github.com/Nerogar/OneTrainer, он поддерживает nf4 и работает с виндой.

# Установка
git clone https://github.com/kohya-ss/musubi-tuner
cd musubi-tuner
conda create musubi
conda activate musubi
(musubi) C:\DATA\SD\musubi-tuner>pip install -e


модельки (нужны именно bf16 версии):
https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/blob/main/split_files/diffusion_models/qwen_image_bf16.safetensors
https://huggingface.co/Qwen/Qwen-Image/blob/main/vae/diffusion_pytorch_model.safetensors
https://huggingface.co/Comfy-Org/Qwen-Image_ComfyUI/blob/main/split_files/text_encoders/qwen_2.5_vl_7b.safetensors


# Тренировка:
- мой toml файл датасета: https://github.com/Mozer/comfy_stuff/blob/main/musubi/dataset_hand_grab.toml
- комманды запуска (в пост не влезли): https://github.com/Mozer/comfy_stuff/blob/main/musubi/musubi_qwen_commands.txt
- при изменении разрешения тренировки надо заново создать кэш vae

# Инференс:
для qwen-image рекомендую сэмплер dpmpp_2m + beta либо res_2s + bong_tangent. Они показывают лучшую реалистичность
832x1248 или 1056x1600, cfg 3.0, 25 steps
для qwen-image-edit я не нашел реалистичных сэмплеров, пока юзаю dpmpp_2m + beta.
ВФ для qwen-edit: https://github.com/Mozer/comfy_stuff/blob/main/workflows/qwen_edit_hand_grab_25_steps.json

lightning лора 4, 8 steps сильно ухудшает качество и реализм, по возможности не используйте её. Но будет медленно, 20-25 шагов - оптимально (2 минуты на картинку для qwen-edit).


Мои qwen лоры:
- marat safin style (стиль под пленку): https://civitai.com/models/1894150?modelVersionId=2353000
- hand grab (POV рука трогает объект): https://civitai.com/models/2081019?modelVersionId=2354652
- лора на русский язык еще тренится