Чат-бот аптеки упорно палил бюджетКоллега из е-комм аутсорса делал AI-поисковик для португальской аптеки:
- "Какое лекарство от мигрени?"
- "Чем лечить кашель ребенка?"
- "Где купить антидепрессанты?"
Внутри был конвейер из регулярных выражений, которые собирают контекст из базы знаний и отправляют в gemini на каждый запрос
Пробовали обычный кеш - не работает, запросы всегда разные, память утекает будь здоров.
Было понимание что строят не то, и что нужно унифицированное решение.
А решение простое - по моему совету подружили pgvector в postgresql (которую и так почти у каждого клиента разворачивают):
1. Намолотили эмбединги через fastembed (из логов + часть нагенерили с LLM)
2. Входящий запрос → эмбеддинг → поиск похожих (cosine similarity)
3. Схожесть > 0.92 → возврат из кэша ¯\_(ツ)_/¯
4. В противном случае → LLM вызов + сохранение в кэш
Классика :)
Результаты приятные:
- ~7 из 10 вопросов попадают
- Траты на токены снизились больше чем в половину
- Задержка 800ms → 80-100ms
- Клиенты счастливы, ура!
Решение на эмбеддингах лучше чем регулярки. Но, к сожалению, не работает (или работают плохо) если ответы сильно зависят от контекста диалога, данные часто и сильно меняются, или работаем с высокой уникальностью входных данных.
Для FAQ, поиска по продуктам, документации - классно!
Ребята почему то боялись пробовать, хотя читали про RAG и семантический поиск.
Если у вас хотя бы отдаленно похожая проблема/задача – не бойтесь и приходите ко мне за консультаций
@m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM
#ai_on_backend
Проблема: векторные базы ищут по косинусной близости или гибридно – и то и другое связей между данными не понимает.
Запрос "найди все контракты с японскими поставщиками" возвращает случайные японские документы(Манга Берсерк?) , а не логические связи между поставщиками и контрактами.
Это достаточно легко может превратиться в черную коробку — система находит что-то похожее, но не то что нужно. Бизнес платит за галлюцинации, а разработчикам сложно отладить систему.😨
Почему так происходит? Ну "близость в векторном пространстве" это вообще не про смысловую связность, а про статистическую корреляцию в данных на которых обучалась эмбеддинг модель (паттерны совместной встречаемости токенов). Если проще, то документы могут быть семантически близки, но контекстуально далеки.
Возможное решение – Knowledge Graph RAG
Вместо тупого поиска по косинусной близости строим граф связей между сущностями в документах. Каждый узел в графе — это конкретная сущность (компания, контракт, персона), а ребра — установленная связь.
Как это работает на практике:
1. LLM анализирует документы и создает структурированный граф, формирует "долгосрочную память" (Да, вдохновлено белковыми мозгами)
2. Вместо косинусной близости делаем траверс по графу с учетом связей
3. В результате система "понимает" не только что искать, но и как связаны найденные данные
Главный профит тут это прозрачность и наблюдаемость. Становится возможным отслеживать весь путь решения и рассуждать о том как модель выбирала конкретные документы.
Большая прозрачность в проде означает:
- Более понятный дебаг – можно проследить путь обхода графа, в отличие от малопрозрачных векторных пространств (почему оно вообще сметчилось?!)
- Повышаем нашу способность наблюдать, понимать и объяснять логику решения
- Некоторое снижение рисков галлюцинаций – ведь данные такая система должна вытаскивать более релевантные
Но честно, сам процесс построения графа может вносить ошибки – LLM может неправильно извлечь сущности или связи между ними. Это просто смещает проблему с retrieval на extraction.
Microsoft уже показала в своем прошлогоднем GraphRAG исследовании, что такой подход улучшает точность в сложных кейсах с multi-hop reasoning.
Тут как всегда есть компромисы – построение графов знаний может требовать более емкой предварительной обработки данных и более сложной архитектуры чем обычный векторный поиск.
Как я уже писал вчера – для простых кейсов (FAQ, документация) обычный векторный поиск часто хорош и достаточен. GraphRAG имеет смысл для структурированных запросов с множественными связями между сущностями. А еще, если свернуть не туда то, переусложить граф, то наблюдаемость... будет не такой уж и хорошей :) Разбираться в запутанных графах то еще удовольствие.
Еще посмотреть по теме:
- mem0
- Cortex
- fast-graphrag
- Cognee
---
Если пред вами стоит задача построить внедрить на бекенд AI систему с памятью – приходите!
Я с удовольствием помогу вам в разработке @m0n0x41d💗
Проблема: векторные базы ищут по косинусной близости или гибридно – и то и другое связей между данными не понимает.
Запрос "найди все контракты с японскими поставщиками" возвращает случайные японские документы
Это достаточно легко может превратиться в черную коробку — система находит что-то похожее, но не то что нужно. Бизнес платит за галлюцинации, а разработчикам сложно отладить систему.
Почему так происходит? Ну "близость в векторном пространстве" это вообще не про смысловую связность, а про статистическую корреляцию в данных на которых обучалась эмбеддинг модель (паттерны совместной встречаемости токенов). Если проще, то документы могут быть семантически близки, но контекстуально далеки.
Возможное решение – Knowledge Graph RAG
Вместо тупого поиска по косинусной близости строим граф связей между сущностями в документах. Каждый узел в графе — это конкретная сущность (компания, контракт, персона), а ребра — установленная связь.
Как это работает на практике:
1. LLM анализирует документы и создает структурированный граф, формирует "долгосрочную память" (Да, вдохновлено белковыми мозгами)
2. Вместо косинусной близости делаем траверс по графу с учетом связей
3. В результате система "понимает" не только что искать, но и как связаны найденные данные
Главный профит тут это прозрачность и наблюдаемость. Становится возможным отслеживать весь путь решения и рассуждать о том как модель выбирала конкретные документы.
Большая прозрачность в проде означает:
- Более понятный дебаг – можно проследить путь обхода графа, в отличие от малопрозрачных векторных пространств (почему оно вообще сметчилось?!)
- Повышаем нашу способность наблюдать, понимать и объяснять логику решения
- Некоторое снижение рисков галлюцинаций – ведь данные такая система должна вытаскивать более релевантные
Но честно, сам процесс построения графа может вносить ошибки – LLM может неправильно извлечь сущности или связи между ними. Это просто смещает проблему с retrieval на extraction.
Microsoft уже показала в своем прошлогоднем GraphRAG исследовании, что такой подход улучшает точность в сложных кейсах с multi-hop reasoning.
Тут как всегда есть компромисы – построение графов знаний может требовать более емкой предварительной обработки данных и более сложной архитектуры чем обычный векторный поиск.
Как я уже писал вчера – для простых кейсов (FAQ, документация) обычный векторный поиск часто хорош и достаточен. GraphRAG имеет смысл для структурированных запросов с множественными связями между сущностями. А еще, если свернуть не туда то, переусложить граф, то наблюдаемость... будет не такой уж и хорошей :) Разбираться в запутанных графах то еще удовольствие.
Еще посмотреть по теме:
- mem0
- Cortex
- fast-graphrag
- Cognee
---
Если пред вами стоит задача построить внедрить на бекенд AI систему с памятью – приходите!
Я с удовольствием помогу вам в разработке @m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM
Внедряя AI на бэкенд, или в бизнес/разработческие процессы довольно часто хочется использовать любимые и знакомые инструменты, и при этом... тоже часно - сэкономить немного на токенах :)
Поэтому я набросал небольшой прокси на расте для инструментов используюих API Антропик, который позволяет утилизировать OpenAI-like API – OpenRouter, или SelfHosted модели, или почти что угодно еще ¯\_(ツ)_/¯
https://github.com/m0n0x41d/anthropic-proxy-rs
В уже не только экспериментальных штуках некоторые открытые модели показывают себя вполне хорошо.
Настройка и запуск этого прокси простая какая пять копеек (.env файл в удобном для вас месте) и врубается простым демоном:
а с Claude Code дружить еще проще чем с Z.AI – всего одна переменная (модели и апстрим в конфигах прокси, очевидно):
Соберу нормальные бинари в релизы если хоть кому-то пригодится.
@m0n0x41d
Поэтому я набросал небольшой прокси на расте для инструментов используюих API Антропик, который позволяет утилизировать OpenAI-like API – OpenRouter, или SelfHosted модели, или почти что угодно еще ¯\_(ツ)_/¯
https://github.com/m0n0x41d/anthropic-proxy-rs
В уже не только экспериментальных штуках некоторые открытые модели показывают себя вполне хорошо.
Настройка и запуск этого прокси простая какая пять копеек (.env файл в удобном для вас месте) и врубается простым демоном:
anthropic-proxy --daemon а с Claude Code дружить еще проще чем с Z.AI – всего одна переменная (модели и апстрим в конфигах прокси, очевидно):
ANTHROPIC_BASE_URL=http://0.0.0.0:3000 claudeСоберу нормальные бинари в релизы если хоть кому-то пригодится.
@m0n0x41d
GitHub
GitHub - m0n0x41d/anthropic-proxy-rs: A proxy server that intercepts Anthropic API requests and converts them to OpenAI-compatible…
A proxy server that intercepts Anthropic API requests and converts them to OpenAI-compatible format, enabling integration with dozens of inference providers such as OpenRouter, Together.ai, Novita ...
Ваша новая AI-система на моднейшем no-code конструкторе (который вы выбрали калассического внедрения на бэкенд) обходится в несколько штук баксов, но не может получить данные из ERP 2010 года?
Бизнес очень хочет AI-ассистента, который знает историю заказов за последние 10 лет. Проблема: ERP нормально работает только на SOAP, база данных - Oracle 11g, а документация - уволившийся в 2019 году архитектор.
Команда бодро пытается построить "мосты" между старым и новым.
И каждый узелок в этих мостах - новая точка отказа. Каждый спринт (или может быть день?) - новый баг в интеграции🐛
(Если вы никогда не были в такой потогонке - вам чудестным образом продолжает везти.)
Через 3 месяца система кое как работает. Данные теряются, ответы неполные, бизнес недоволен. Колумбийские интеграторы-аутсорсеры выставляют счет за 200 часов потраченных на "адаптации legacy систем". И не придерешься...
Это уже не просто "технический долг", а практически полное отсутствие enterprise/legacy integration strategy.
Знакомый ужастик? Приходите на консультацию, разберем вашу архитектуру и найдем точки интеграции, меня ораклом не напугаешь
@m0n0x41d
Бизнес очень хочет AI-ассистента, который знает историю заказов за последние 10 лет. Проблема: ERP нормально работает только на SOAP, база данных - Oracle 11g, а документация - уволившийся в 2019 году архитектор.
Команда бодро пытается построить "мосты" между старым и новым.
И каждый узелок в этих мостах - новая точка отказа. Каждый спринт (или может быть день?) - новый баг в интеграции
(Если вы никогда не были в такой потогонке - вам чудестным образом продолжает везти.)
Через 3 месяца система кое как работает. Данные теряются, ответы неполные, бизнес недоволен. Колумбийские интеграторы-аутсорсеры выставляют счет за 200 часов потраченных на "адаптации legacy систем". И не придерешься...
Это уже не просто "технический долг", а практически полное отсутствие enterprise/legacy integration strategy.
Знакомый ужастик? Приходите на консультацию, разберем вашу архитектуру и найдем точки интеграции, меня ораклом не напугаешь
@m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM
#ai_on_backend
Хочется Schema Guided Reasoning но на компилируемом языке c сильными гарантиями системы типов?
Cкомпилироваться – я дам
сильные типы я не дам😏
(ну или отчасти)
Вот тут можно посмотреть порт SGR Demo Рината на go -> click me
***
Это просто демка, но самая полезная функция тут (в прикладном смысле конечно) с великолепной сигнатурой...
А вы думали? Это вам не на Колвиновском Пидантике в парке гулять 🙂
Не смотря на небольшую корявость – все равно хорошо. Приятно иметь компактные бинарники на бэкендне, да еще и с AI внутри. Go шустрый и в целом на нем можно успшено строить качественные AI платформы!
Хочется Schema Guided Reasoning но на компилируемом языке c сильными гарантиями системы типов?
Cкомпилироваться – я дам
сильные типы я не дам
Вот тут можно посмотреть порт SGR Demo Рината на go -> click me
***
Это просто демка, но самая полезная функция тут (в прикладном смысле конечно) с великолепной сигнатурой...
GenerateSchema[T any]() any А вы думали? Это вам не на Колвиновском Пидантике в парке гулять 🙂
Не смотря на небольшую корявость – все равно хорошо. Приятно иметь компактные бинарники на бэкендне, да еще и с AI внутри. Go шустрый и в целом на нем можно успшено строить качественные AI платформы!
Please open Telegram to view this post
VIEW IN TELEGRAM
Gist
schema-guided-reasoning.go
schema-guided-reasoning.go. GitHub Gist: instantly share code, notes, and snippets.
🌭3
#ai_on_backend
pgvector в туториалах (и часто в моих постах тоже) выглядит идеально: добавил расширение, создал индекс, поиск работает – считай вот и внедрили AI на бэкенд🥂
В большом проде всё иначе. Я смело использую pgvector когда знаю – тут есть, был и будет постгресс, датасет до ~100-200K векторов, и тут не будет резких пивотов и приростов трафика.
Потому что за этими границами резко начинается веселье.
Проблема №1: Бесконечный ад тюнинга индексов
IVFFlat деградирует со временем - у него падает точность поиска, и периодически надо пересобирать. HNSW на огромных датасетах может жрать 10+ гигов оперативки на билд. Для 1M векторов размерности 384 это дело займет минуты, а вот для 10M+ векторов, например, размерности 1536 – часы. При этом ваша база должна продолжать обслуживать запросы.
Решать это можно по всякому, например писать в отдельную таблицу, строить индекс "офлайн", делать свопы. Ну или держать два инекса одновременно ¯\_(ツ)_/¯
pgvector 0.7.0+ улучшил параллельную пересборку для HNSW, но проблема масштаба все равно остается. Настраивать
Проблема №2: Планировщик запросов не понимает векторы
Хорошо оптимизированный запрос: ~50ms. Плохо оптимизированный: ~5 секунд. Пу-пу-пу. Разница в 100 раз на одних и тех же данных, потому что планировщик постгресса вообще не понимает кост модели для векторных операций.
Фильтруете после поиска – получаете неполные результаты. Фильтруете до поиска – перебираете миллионы векторов. Золотой середины нет, приходится тюнить каждый запрос руками со всеми вытекающими из остальных пунктов.
Проблема №3: Добавление данных в реальном времени
IVFFlat: быстрые вставки, но без пересборки новые вектора попадают в неоптимальные кластеры – точность поиска деградирует. HNSW: каждая вставка обновляет граф, вызывает блокировки, всплеск записей в базе и снова выжирает память. Ни один из индексов не любит высокую нагрузку на запись, векторные не исключение.
Что в итоге:
Либо раздувается буфер базы в разы (настраивать
Нужен комбинированный поиск (векторный + полнотекстовый)? Придётся реализовывать самим – взвешивать оценки от разных алгоритмов, нормализовать их, комбинировать результаты (RRF – Reciprocal Rank Fusion один из подходов, но это всё равно код, который надо писать и поддерживать).
Про альтернативы
Специализированные векторные БД (Qdrant, Weaviate, Milvus, Chroma и тд) решают часть проблем, но естественным образом добавляют свой оверхед на поддержку – ещё одна БД в стеке, синхронизация данных, мониторинг и пр. Поэтому я считаю что для небольших проектов с постгрессом в стеке pgvector всё таки разумный выбор.
Я уже писал про Knowledge Graph RAG как альтернативу чёрному ящику векторного поиска. Напомню – близость в векторном пространстве ≠ смысловая связь. А ещё векторный поиск очень сложно дебажить в production. А еще... вы точно уверены что индекс все таки не вырастет x200 раз в течении пары-тройки лет?
Мораль:
pgvector работает. Но его операционная поддержка и особенности (впрочем как и любой другой зависимости в стеке) часто недооценивается на этапе выбора инструментов. Если у вас <100-200K векторов, постоянная инфраструктура и нет хайлоада на запись – смело берите. Дальше считайте TCO с учётом инженерного времени.
Со всем этим планированием и оценкой я помогаю на консультациях, пишите в личку @m0n0x41d
pgvector в туториалах (и часто в моих постах тоже) выглядит идеально: добавил расширение, создал индекс, поиск работает – считай вот и внедрили AI на бэкенд
В большом проде всё иначе. Я смело использую pgvector когда знаю – тут есть, был и будет постгресс, датасет до ~100-200K векторов, и тут не будет резких пивотов и приростов трафика.
Потому что за этими границами резко начинается веселье.
Проблема №1: Бесконечный ад тюнинга индексов
IVFFlat деградирует со временем - у него падает точность поиска, и периодически надо пересобирать. HNSW на огромных датасетах может жрать 10+ гигов оперативки на билд. Для 1M векторов размерности 384 это дело займет минуты, а вот для 10M+ векторов, например, размерности 1536 – часы. При этом ваша база должна продолжать обслуживать запросы.
Решать это можно по всякому, например писать в отдельную таблицу, строить индекс "офлайн", делать свопы. Ну или держать два инекса одновременно ¯\_(ツ)_/¯
pgvector 0.7.0+ улучшил параллельную пересборку для HNSW, но проблема масштаба все равно остается. Настраивать
ef_construction (грубо говоря, это параметр который регулирует "качество" грава HNSW индекса) приходится методом тыка – чем выше значение тем, очевидно - дольше билд.Проблема №2: Планировщик запросов не понимает векторы
Хорошо оптимизированный запрос: ~50ms. Плохо оптимизированный: ~5 секунд. Пу-пу-пу. Разница в 100 раз на одних и тех же данных, потому что планировщик постгресса вообще не понимает кост модели для векторных операций.
Фильтруете после поиска – получаете неполные результаты. Фильтруете до поиска – перебираете миллионы векторов. Золотой середины нет, приходится тюнить каждый запрос руками со всеми вытекающими из остальных пунктов.
Проблема №3: Добавление данных в реальном времени
IVFFlat: быстрые вставки, но без пересборки новые вектора попадают в неоптимальные кластеры – точность поиска деградирует. HNSW: каждая вставка обновляет граф, вызывает блокировки, всплеск записей в базе и снова выжирает память. Ни один из индексов не любит высокую нагрузку на запись, векторные не исключение.
Что в итоге:
Либо раздувается буфер базы в разы (настраивать
maintenance_work_mem и VACUUM помогает, но не сильно), либо принимаете "eventual consistency" (документы не ищутся N минут после добавления), либо строите сложную инфраструктуру с репликами и staging-таблицами/базами (удачи с поиском хорошего dba.)Нужен комбинированный поиск (векторный + полнотекстовый)? Придётся реализовывать самим – взвешивать оценки от разных алгоритмов, нормализовать их, комбинировать результаты (RRF – Reciprocal Rank Fusion один из подходов, но это всё равно код, который надо писать и поддерживать).
Про альтернативы
Специализированные векторные БД (Qdrant, Weaviate, Milvus, Chroma и тд) решают часть проблем, но естественным образом добавляют свой оверхед на поддержку – ещё одна БД в стеке, синхронизация данных, мониторинг и пр. Поэтому я считаю что для небольших проектов с постгрессом в стеке pgvector всё таки разумный выбор.
Я уже писал про Knowledge Graph RAG как альтернативу чёрному ящику векторного поиска. Напомню – близость в векторном пространстве ≠ смысловая связь. А ещё векторный поиск очень сложно дебажить в production. А еще... вы точно уверены что индекс все таки не вырастет x200 раз в течении пары-тройки лет?
Мораль:
pgvector работает. Но его операционная поддержка и особенности (впрочем как и любой другой зависимости в стеке) часто недооценивается на этапе выбора инструментов. Если у вас <100-200K векторов, постоянная инфраструктура и нет хайлоада на запись – смело берите. Дальше считайте TCO с учётом инженерного времени.
Со всем этим планированием и оценкой я помогаю на консультациях, пишите в личку @m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM
Целый квартал внедряешь AI на бэкенд. Продумываешь оркестрацию, пишешь промпты, прикручиваешь и откручиваешь тулы. Тестируешь, фиксишь пограничные случаи. Выкатываешь в прод. Работает.
Через два месяца выходит новая модель. Большая часть архитектуры превращается в легаси.
В этом году примеров была масса, вспомните хотя бы последний горячий релиз GPT-5 и как круто начал на ней работать курсор.
Новые LLM могут менять поведение AI системы непредсказуемо. Иногда хуже. Иногда наоборот становится много лучше — выходит реально умная модель и твоя сложная оркестрация оказывается вообще не нужна.
Смена моделей не похожа на framework churn во фронтенде. Это фундаментально хуже. Нет ченджлогов, гайдов или автоматической миграции. Система может быть просто завязана на чёрный ящик.
---
Разработчики не переписывают софт под новую версию PostgreSQL.
DevOps не пересобирают всю инфру под новый Kubernetes.
Но AI-системы часто строят как монолит вокруг модели.
Чем это отличается от платформы которая в процессе разработки смертельным узлом завязалась на Stripe, и другие платежные системы не внедряет годами, не смотря на просьбы клиентов?(не внедряет не сколько потому что все равно, а потому что игра не стоит свеч – переписывать слишком много, ну или просто не знают как переписать, чтобы ничего не сломать)
Проблема не в том, что модели меняются.
Проблема в том, что модель делают частью big-ball-of-mud архитектуры.
Правильный подход: модель = внешняя зависимость. Как БД. Как API.
Не "система на GPT". Система с LLM-модулем.
Как такое строить:
1. Model-agnostic контракты — система не знает что внутри Claude или GPT. Только контракты входа-выхода.
2. Тестируйте внешнее поведение — модель меняется, промпты меняются. Eval тесты остаются.
3. Изолируйте model-specific логику — оркестрация, память, планирование живут отдельно от генерации токенов и от ключевой бизнес логики.
4. Версионируй это, версионируй то — промпты, конфиги, eval датасеты. Откатиться должно быть возможным намного быстрее чем тушить пожар.
Это не защита от переписывания. Это защита от того, чтобы переписывание не превращалось в спринты боли.
Разрабатываете AI систему и хотите обсудить архитектуру которая переживёт GPT-6?
Приходите на консультацию @m0n0x41d💗
Через два месяца выходит новая модель. Большая часть архитектуры превращается в легаси.
В этом году примеров была масса, вспомните хотя бы последний горячий релиз GPT-5 и как круто начал на ней работать курсор.
Новые LLM могут менять поведение AI системы непредсказуемо. Иногда хуже. Иногда наоборот становится много лучше — выходит реально умная модель и твоя сложная оркестрация оказывается вообще не нужна.
Смена моделей не похожа на framework churn во фронтенде. Это фундаментально хуже. Нет ченджлогов, гайдов или автоматической миграции. Система может быть просто завязана на чёрный ящик.
---
Разработчики не переписывают софт под новую версию PostgreSQL.
DevOps не пересобирают всю инфру под новый Kubernetes.
Но AI-системы часто строят как монолит вокруг модели.
Чем это отличается от платформы которая в процессе разработки смертельным узлом завязалась на Stripe, и другие платежные системы не внедряет годами, не смотря на просьбы клиентов?
Проблема не в том, что модели меняются.
Проблема в том, что модель делают частью big-ball-of-mud архитектуры.
Правильный подход: модель = внешняя зависимость. Как БД. Как API.
Не "система на GPT". Система с LLM-модулем.
Как такое строить:
1. Model-agnostic контракты — система не знает что внутри Claude или GPT. Только контракты входа-выхода.
2. Тестируйте внешнее поведение — модель меняется, промпты меняются. Eval тесты остаются.
3. Изолируйте model-specific логику — оркестрация, память, планирование живут отдельно от генерации токенов и от ключевой бизнес логики.
4. Версионируй это, версионируй то — промпты, конфиги, eval датасеты. Откатиться должно быть возможным намного быстрее чем тушить пожар.
Это не защита от переписывания. Это защита от того, чтобы переписывание не превращалось в спринты боли.
Разрабатываете AI систему и хотите обсудить архитектуру которая переживёт GPT-6?
Приходите на консультацию @m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM
Многие начинающие AI-инженеры, программисты, предпринимающие первые попытки внедрения AI в формате «разговорный интерфейс», допускают болезненную ошибку – всегда делают поддержку контекста диалога.
Контекст распухает, биллинг за токены вызывает дрожь в пятках.
(цитирую: "Алерт от порогов в OpenAI пришёл на 2 недели раньше чем мы рассчитывали.")
А решение часто на виду, просто оно контринтутивно – не делать поддержку контекста диалога вообще.
Особенно для MVP.
При рассмотрении решаемой проблемы и ценности для конечного пользователя часто выясняется, что проект хорошо реализуется более простыми методами.
Когда вы и ваша команда думаете над новой фичей/продуктом – не уходите на уровень реализации прежде, чем хотя бы немного формально опишете сценарии использования.
Если вы испытываете сложности со своим AI-проектом – Приходите на консультацию!
Разберёмся где сэкономить и сделать надёжнее
@m0n0x41d❤️
Контекст распухает, биллинг за токены вызывает дрожь в пятках.
(цитирую: "Алерт от порогов в OpenAI пришёл на 2 недели раньше чем мы рассчитывали.")
А решение часто на виду, просто оно контринтутивно – не делать поддержку контекста диалога вообще.
Особенно для MVP.
При рассмотрении решаемой проблемы и ценности для конечного пользователя часто выясняется, что проект хорошо реализуется более простыми методами.
Когда вы и ваша команда думаете над новой фичей/продуктом – не уходите на уровень реализации прежде, чем хотя бы немного формально опишете сценарии использования.
Если вы испытываете сложности со своим AI-проектом – Приходите на консультацию!
Разберёмся где сэкономить и сделать надёжнее
@m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM
Вы сами не до конца понимаете что делает ваш AI модуль на бекенде?
Ничего, похоже это "нормально" в настоящих реалиях.
Я не открою новых секретов, арка уже классическая – чтобы четко понимать что делает ваша AI система нужна понятная, читаемая, и хотя-бы немного формальная спецификация/дока.
Ключевые слова тут – "хотя-бы немного", потому что я прекрасно понимаю ритмы команд, особенно стартапов. Это ведь норма и база – быстро создавать MVP и итерироваться.
Проблема в том что часто не происходит своевременная смена лыж, и разработка продолжается в режиме бесконечного интуитивного "творчества."
Минимальный формальный подход тут возможен такой – смотреть на то что именно система должна делать – не в ваших фантазиях, и не в фантазиях ваших клиентов, а что именно решается в реальности, вот в той где бьешься мезинцем об угол стола.
Так что гораздо выгоднее(при том в любой перспективе) немного притормозить и рассмотреть фичи именно в функциональном разрезе.
Например оказывается, что несколько логических "веток" пайплайна извлекающего намерения пользователя вовсе не разные ветки, потому что по итогу заканчиваются в очень похожей, или вообще в одной и той-же бизнес логике.
Если вовремя это не исправить, это потенциальная дорога в наслоение неоптимизированных концепций в систему и промпт(ы), а значит – дорога в галлюцинации, дорогую и медленную разработку в будущем.
Смотрите на решаемые задачи из самой задачи, из прибитого логическим гвоздями функционала, из реальности, а не из соображений о некоторой "возможной реальности."
Твист в том что это удивительно редкий навык - вовремя остановиться и переключиться на стратегическую работу.
Проведите вот такое упражнение:
Возьмите свою AI систему и для каждой ее "фичи" выпишите одно предложение - что она делает для конечного пользователя. Если предложения похожи - возможно у вас дубликаты.
Приходите на консультацию, разберемся с любыми "реальностями"!
@m0n0x41d💗
Ничего, похоже это "нормально" в настоящих реалиях.
Я не открою новых секретов, арка уже классическая – чтобы четко понимать что делает ваша AI система нужна понятная, читаемая, и хотя-бы немного формальная спецификация/дока.
Ключевые слова тут – "хотя-бы немного", потому что я прекрасно понимаю ритмы команд, особенно стартапов. Это ведь норма и база – быстро создавать MVP и итерироваться.
Проблема в том что часто не происходит своевременная смена лыж, и разработка продолжается в режиме бесконечного интуитивного "творчества."
Минимальный формальный подход тут возможен такой – смотреть на то что именно система должна делать – не в ваших фантазиях, и не в фантазиях ваших клиентов, а что именно решается в реальности, вот в той где бьешься мезинцем об угол стола.
Так что гораздо выгоднее
Например оказывается, что несколько логических "веток" пайплайна извлекающего намерения пользователя вовсе не разные ветки, потому что по итогу заканчиваются в очень похожей, или вообще в одной и той-же бизнес логике.
Если вовремя это не исправить, это потенциальная дорога в наслоение неоптимизированных концепций в систему и промпт(ы), а значит – дорога в галлюцинации, дорогую и медленную разработку в будущем.
Смотрите на решаемые задачи из самой задачи, из прибитого логическим гвоздями функционала, из реальности, а не из соображений о некоторой "возможной реальности."
Твист в том что это удивительно редкий навык - вовремя остановиться и переключиться на стратегическую работу.
Проведите вот такое упражнение:
Возьмите свою AI систему и для каждой ее "фичи" выпишите одно предложение - что она делает для конечного пользователя. Если предложения похожи - возможно у вас дубликаты.
Приходите на консультацию, разберемся с любыми "реальностями"!
@m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM
#ai_on_backend
MCP сервер – это не обязательно «плагин»
Типичное отношение к MCP серверам слишком часто интуитивно - это отношение как к плагину с рядом инструментов.
Вот есть наш AI клиент, и вот мы подключаем сервер, привнося в клиент новые функциональные возможности.
В дефолтной интуиции разработчики MCP сервера часто тоже – «навешаю ка я в него сразу весь CRUD: create_news, update_news, delete_news, get_categories, assign_category, check_duplicate...
И вот клиент захлебывается в инструментах, контекст раздувается, со всеми небезызвестными вытекающими.
***
Вот когнитивный трюк: относитесь к MCP серверу в первую очередь как к серверу.
Как к отдельной самостоятельной сущности, что отвечает за кусок бизнес-логики и инкапсулирует её, а не просто «предоставляет наружу»!
Смотрите на разработку MCP через призму DDD/bounded contexts, и естественным образом начнете принимать правильные решения в проектировании интерфейса.
Реальный пример: Делаю новостной агрегатор - дашборда для событий и алертов. Есть сущность "новость" с категориями, комментариями.
Уже достаточно, чтобы следуя «интуитивным» подходам разработать обычный такой жирненький CRUD.
По ряду причин AI на бэкенд дашборды было решено не внедрять, а подключать извне через MCP протокол.
Это значит что агент(ы) должны подписываться на свои источники и наполнять дашборду.
Немного подумав я понял что в этом MCP нужен только один инструмент —
И всё.
Никаких get_categories, никаких апдейтов топиков, никаких манипуляций — пока они реально не потребуются.
Агенту даже знать не нужно, была ли новость уже обработана — сервер сам отвечает за дедупликацию и всё остальное, это кодируется элементарно.
Таким образом я сильно разгрузил предыдущий вариант системы, теперь есть несколько внешних агентов-сборщиков, у которых вместо 6-8 инструментов и лишних токенов в контексте - два-три инструмента!
(инструмент от дашборды для публикации, и остальные только для работы со своим источником навостей – поисковик, кравлер, gmail, отдельные rss и так далее)
MCP сервер – это не обязательно «плагин»
Типичное отношение к MCP серверам слишком часто интуитивно - это отношение как к плагину с рядом инструментов.
Вот есть наш AI клиент, и вот мы подключаем сервер, привнося в клиент новые функциональные возможности.
В дефолтной интуиции разработчики MCP сервера часто тоже – «навешаю ка я в него сразу весь CRUD: create_news, update_news, delete_news, get_categories, assign_category, check_duplicate...
И вот клиент захлебывается в инструментах, контекст раздувается, со всеми небезызвестными вытекающими.
***
Вот когнитивный трюк: относитесь к MCP серверу в первую очередь как к серверу.
Как к отдельной самостоятельной сущности, что отвечает за кусок бизнес-логики и инкапсулирует её, а не просто «предоставляет наружу»!
Смотрите на разработку MCP через призму DDD/bounded contexts, и естественным образом начнете принимать правильные решения в проектировании интерфейса.
Реальный пример: Делаю новостной агрегатор - дашборда для событий и алертов. Есть сущность "новость" с категориями, комментариями.
Уже достаточно, чтобы следуя «интуитивным» подходам разработать обычный такой жирненький CRUD.
По ряду причин AI на бэкенд дашборды было решено не внедрять, а подключать извне через MCP протокол.
Это значит что агент(ы) должны подписываться на свои источники и наполнять дашборду.
Немного подумав я понял что в этом MCP нужен только один инструмент —
publish_news. И всё.
Никаких get_categories, никаких апдейтов топиков, никаких манипуляций — пока они реально не потребуются.
Агенту даже знать не нужно, была ли новость уже обработана — сервер сам отвечает за дедупликацию и всё остальное, это кодируется элементарно.
Таким образом я сильно разгрузил предыдущий вариант системы, теперь есть несколько внешних агентов-сборщиков, у которых вместо 6-8 инструментов и лишних токенов в контексте - два-три инструмента!
СТО в вашем стартапе на сегодняшнем мите сказал: "Нам в команде хватит 3 сеньоров вместо 10 разработчиков".
Возможно он не шутит.
Скорее всего вы уже забыли про исследование METR, где обнаружилось что AI в прикладной работе разработчиков часто замедляет, а не ускоряет.
А вот свежее от Anthropic – на базе 100K разговоров с Claude 132-ух инженеров внутри компании.
Результат - 80% экономии времени. Дарио Амодей говорит: "70-80-90% кода в Anthropic пишет Claude"👀
Один из их инженеров: "Такое чувство, что я прихожу на работу каждый день, чтобы самого себя этой же работы лишить".
Как так?
METR: AI замедляет на 19%
Anthropic: AI ускоряет на 80%
Разница в 99 процентных пунктов. Кто врёт?
Никто.
Это не про инструмент. Это про то, как мы работаем.
Вот как это движение в правильную сторону выглядит на практике:
Anthropic сегодня анонсировали прокаченный Claude + Slack. Тегаешь @Claude в треде - и он теперь решает сам: либо просто ответить в контексте, либо автоматически создать сессию Claude Code и делегировать задачу туда.
От алерта до PR с минимальным участием человека.
Раньше баги или отправлялись в вечный беклог, или лениво копились в "in progress" и нагружали и без того уставших разработчиков дополнительным переключением внимания.
Просто METR измеряли "дали разработчику Cursor и смотрим что будет". А Anthropic измеряли AI, встроенный в процессы разработки, скорее всего еще и с довольно строгой инженерной культурой и методами работы с этим AI.
Вот разница.
Первое, это когда вы купили дорогой инструмент и ждёте магии. А второе, это когда вы перестроили процессы и методы работы под сильные стороны AI, именно то за что я всю дорогу топлю в этом блоге.
А теперь представьте недалекое будущее:
Команда из 10 разработчиков: -> 7 фиксят техдолг, баги, клепают мелкие круд задачи → 3 синьора/техлида проектируют новое
VS
Команда ТОЛЬКО из тех самых 3 сеньоров++ с Claude: -> Claude фиксит техдолг, баги, круд (тегаешь @claude в Slack с Sentry алертами) -> 3 инженера проектируют новые фичи и решения
Производительность выше. Затраты ниже. И да, очень гурбо, но ~7 человек больше не нужны.
Эти ресурсы можно перераспределить или на маркетинг, или компенсировать за повышенное число закрываемых задач мега-сеньорам 🙂
Да, сейчас в интеграции Claude Code в слак есть баг - контекст треда не передаётся в сессию. Но это просто баг. Его исправят за неделю, максимум две.(Скорее всего намного быстрее – ибо это ломает смысл интеграции более чем полностью)
Так что будущее вот вот наступит, да?
И это будущее не в том, чтобы дать каждому разработчику AI-ассистента и ждать не пойми чего. Ускорение генерации плохого кода мы уже проходили.
Будущее в том, чтобы встроить AI в процессы: от алерта до PR с минимальным участием человека.
Кстати, в METR исследовании не до конца понятна компетенция разработчиков в системном мышлении и работе с LLM ассистентами. Возможно, проблема не в AI, а в том, как люди с ним работают.
Даёте команде AI-инструменты и ждёте magic? Получите -19%.
Встраиваете AI в процессы? Получите +80%.
Разница не в инструментах. Разница в том, как вы их используете.
Не знаете, как это делать правильно?
Приходите на консультацию: @m0n0x41d❤️
Возможно он не шутит.
Скорее всего вы уже забыли про исследование METR, где обнаружилось что AI в прикладной работе разработчиков часто замедляет, а не ускоряет.
А вот свежее от Anthropic – на базе 100K разговоров с Claude 132-ух инженеров внутри компании.
Результат - 80% экономии времени. Дарио Амодей говорит: "70-80-90% кода в Anthropic пишет Claude"
Один из их инженеров: "Такое чувство, что я прихожу на работу каждый день, чтобы самого себя этой же работы лишить".
Как так?
METR: AI замедляет на 19%
Anthropic: AI ускоряет на 80%
Разница в 99 процентных пунктов. Кто врёт?
Никто.
Это не про инструмент. Это про то, как мы работаем.
Вот как это движение в правильную сторону выглядит на практике:
Anthropic сегодня анонсировали прокаченный Claude + Slack. Тегаешь @Claude в треде - и он теперь решает сам: либо просто ответить в контексте, либо автоматически создать сессию Claude Code и делегировать задачу туда.
От алерта до PR с минимальным участием человека.
Раньше баги или отправлялись в вечный беклог, или лениво копились в "in progress" и нагружали и без того уставших разработчиков дополнительным переключением внимания.
Просто METR измеряли "дали разработчику Cursor и смотрим что будет". А Anthropic измеряли AI, встроенный в процессы разработки, скорее всего еще и с довольно строгой инженерной культурой и методами работы с этим AI.
Вот разница.
Первое, это когда вы купили дорогой инструмент и ждёте магии. А второе, это когда вы перестроили процессы и методы работы под сильные стороны AI, именно то за что я всю дорогу топлю в этом блоге.
А теперь представьте недалекое будущее:
Команда из 10 разработчиков: -> 7 фиксят техдолг, баги, клепают мелкие круд задачи → 3 синьора/техлида проектируют новое
VS
Команда ТОЛЬКО из тех самых 3 сеньоров++ с Claude: -> Claude фиксит техдолг, баги, круд (тегаешь @claude в Slack с Sentry алертами) -> 3 инженера проектируют новые фичи и решения
Производительность выше. Затраты ниже. И да, очень гурбо, но ~7 человек больше не нужны.
Эти ресурсы можно перераспределить или на маркетинг, или компенсировать за повышенное число закрываемых задач мега-сеньорам 🙂
Будем честны, AI помогает решать больше задач параллельно, но мозги все равно знатно от этого устают – никто не выкидвает инженера из цикла, ему все равно ревьювить PR от LLM и прочее.
Да, сейчас в интеграции Claude Code в слак есть баг - контекст треда не передаётся в сессию. Но это просто баг. Его исправят за неделю, максимум две.
Так что будущее вот вот наступит, да?
И это будущее не в том, чтобы дать каждому разработчику AI-ассистента и ждать не пойми чего. Ускорение генерации плохого кода мы уже проходили.
Будущее в том, чтобы встроить AI в процессы: от алерта до PR с минимальным участием человека.
Кстати, в METR исследовании не до конца понятна компетенция разработчиков в системном мышлении и работе с LLM ассистентами. Возможно, проблема не в AI, а в том, как люди с ним работают.
Даёте команде AI-инструменты и ждёте magic? Получите -19%.
Встраиваете AI в процессы? Получите +80%.
Разница не в инструментах. Разница в том, как вы их используете.
Не знаете, как это делать правильно?
Приходите на консультацию: @m0n0x41d
Please open Telegram to view this post
VIEW IN TELEGRAM