Главный инсайт: навык — это всего лишь markdown-файл с промптом. Никакой магии. Открой SKILL.md от хуманайзера, скопируй текст промпта, и засунь его в свой Python-скрипт как system message при вызове Ollama. Всё, навык работает без курсора.
У меня в пайплайне новостей оно так и крутится. Voice Guardian — это просто Python-функция в publisher.py:
Каждый пост проходит два прохода через LLM: сначала хуманайзер вычищает «гладкость», потом редактор накладывает стиль. Те же два навыка, что у меня в Claude Code — но запускаются скриптом без курсора.
Для тысячи статей я бы сделал так:
Промпт из .md копируешь в константу в скрипте.
Цикл по статьям — каждую отдельно шлёшь в Ollama с этим промптом как system, текст статьи как user.
Fallback на случай если Qwen затупит: если ответ короткий или странный — отправляешь повторно или переключаешься на платный API (MiniMax, например, у меня бесплатный тариф 4500 запросов в 5 часов — на 1000 статей хватит с запасом).
Если оллама не вывозит навык — это обычно значит, что модель слабовата под задачу. У меня Qwen 3.5 9B справляется с переводом, но хуманайзер уже на пределе — поэтому основной режим у меня MiniMax (бесплатный), а Qwen как резерв.
Идеального «навыка для оллама» делать не надо. Skill = промпт + модель достаточного размера. Подбираешь промпт + модель — и пакетный скрипт работает не хуже курсора, только без устающих рук.
Для перевода достаточно локальной модели qwen 3.5 или gemma 4. - они небольшие и достаточно хорошо перегоняют текст. А вот редактуру я делаю в Minimax, и да она платная, это подписка Код план. Я на ней кучу проектов гоняю и агентов различных. Ну а вообще если памяти достаточно можно и редактуру делать на локальной модели. У вас Видеокарта есть и с ней все должно летать. Причем gemma 4 и Minimax это думающие модели и там нужно правильно работать с thinking, иначе обработка одной новости будет занимать много времени а при обработке пачки новостей все будет падать в таймаут.
Да, ты описал классический случай. Коротко — у тебя три вещи смешались:
Opencode — это интерактивная сессия с накапливающимся контекстом. Что бы ты ни просил внутри одного чата — все предыдущие запросы и ответы остаются в окне. Попросил 10 статей — модель тащит за собой черновики предыдущих
На 30-й статье это уже неподъёмная простыня, качество падает, модель начинает путаться.
Решение не в «очистке памяти», а в правильной архитектуре. Batch-генерация 100 статей — это не задача для интерактивного чата. Это работа скрипта, который дёргает API модели по одной статье за раз. Каждый вызов — изолированный: только system prompt + одна статья. Никакого накопления.
Никакого messages.append() между итерациями. Каждая статья — свой контекст, чистый как в первый раз.
У нас в news-pipeline именно так и сделано. 160 источников × 15 минут = сотни API-вызовов в день. Каждая новость проходит через 3 раздельных воркера (ai_filter, translator, llm_editor), и каждый из них делает отдельный stateless POST-запрос к MiniMax. Модель никогда не видит соседние новости — в окне контекста всегда только системный промпт + тело конкретной новости. Поэтому на 1000-й статье качество такое же, как на 1-й.
Что делать тебе на практике:
Вынести обработку из Opencode в отдельный Python-скрипт.
Opencode хорош для интерактивной работы (обсудить идею, разобрать одну статью). Но для конвейера из 100 — это инструмент не той задачи.
Ну и по сути я все это естественно делал не сам: а просто написал тому же Клоду что я хочу получить на выходе а как это сделать, клод сам знает. По факту у тебя уже все описано в opencode, теперь тебе нужно попросить его это все вынести в скрипт который автоматически прогоняет каждую новость через промпт и сохраняет допустим в БД.
ai_filter — воркер после сбора новостей и удаления дублей, перед переводом. Берёт свежие новости, прогоняет через LLM и ставит оценку от 0 до 100 плюс короткое объяснение. На выходе три корзины: идём дальше в публикацию, откладываем как слабые или помечаем «ошибка модели».
Пороги не в коде, а в таблице настроек — меняю без перезапуска. Сейчас порог публикации 75 в будни, на выходных выше: там поток мусорнее. Всё, что ниже 70 — молча в сторону. В промпте модели явно прописано: фандинг, иски, увольнения — это не AI-новости, ставь 20-40, даже если компания AI-шная. Фильтр режет около 81% того, что собрал коллектор.
Главная оптимизация — отсев по длине текста до вызова LLM:
body = strip_all_html(r.get(“full_text”) or r.get(“content”) or “”).strip() if len(body) < 300: # сразу в сторону, LLM не зовём continue
Это платные статьи и RSS-заглушки на 150 символов. Без этого платил бы токенами за то, чтобы модель прочитала пустоту. Экономит 30+ вызовов в день.
LLM получает пачку по 5 штук: id, заголовок и обрезанный до 500 символов текст. Ответ — JSON. Парсер с подстраховкой: сначала стандартный разбор, потом поиск по скобкам — локальные модели любят навалить лишнего вокруг ответа.
Что не идеально: — Один поставщик LLM = одна точка отказа. Ретрай один раз через 20 секунд. — Пороги 70/75/80 подобрал на глаз. Собираю просмотры и реакции, но обратная связь на пороги ещё не замкнута. — Ложные срабатывания живут. Интересная научная статья может получить 65 и уйти мимо.
Следующий шаг — завязать порог на реакции и просмотры, чтобы он сам подтягивался под то, что заходит аудитории. Пока руками.
Ну вот я так делал в начале - тогда у меня было порядка 40 источников и все были rss и все долго обрабатывалось и были постоянные ретраи, реально кучу автоматизаций сделал, а потом после очередного Бага решил попробовать по другому. Спокойно добавили новости с Видео роликами. Сейчас к стати прихожу к тому что нужно писать посты, делать более живой канал а не просто новостная лента.
Попробую ответить по порядку: Я описал чем пользуюсь - Это был Курсор за 20 долларов. И Клод код так же 20 долларов. Раньше я пользовался только Курсором. Но буквально 3 месяца назад еще раз вернулся к Клоду и вот он реально делает красоту.
По поводу opencode - я так же его начал использовать но к нему я подключил свою кодинг подписку от MiniMax, она очень неплохо таки работает и так же отлично кодит.
Бесплатные модели пробовал для кондинга, мне не очень понравились. А вот для обработки текста самое то - у меня тут используется свой Стэк: Мини Пк - CHUWI AuBox Ai365 на процессоре AMD Ryzen AI 9 365 и 32 гига оперативы. Локальная LLM Qwen 3.5 - она не плохо работает на нем - примерно 9 токенов в секунду. Но вот сейчас вышла к стати Gemma4 от Гугл и она рвет всех в своем классе по скорости. Я ее параллельно подключил к llama.cpp - она мне вечернюю свод прогоняет, думаю позже заменю на нее.
По поводу копирайтинга и хуманизации - не ищи готовый создай свой. Их я создал совместно с Перплексити и Клодом - отлично получилось и смог выйти на 92% яеловечности) а что я по сути сделал, скормил перплексити свои тексты и переписки и попросил выдернуть все паттерны а дальше попросил его подготовить промпт для Клода чтобы он сделал эти скилы один назвали alexey-editor а второй ru-humanizer. Отлично справляются и проходит многие проверки.
По поводу отбора статей(новостей). -- у меня система отбирает да примерно 100-200 в день, но дальше идет фильтрация которая проставляет рейтинг новости, дедупликация которая отсекает дубли, так же отсекаются битые новости, очень короткие менее 300 знаков уходят в мусор. Итого по подсчетам примерно 18% новостей из данного пула доходят до Менеджера а тот в свою очередь отправляет в данный момент всего 10 топовых новостей в сутки. Я еще пока играюсь с количеством. И вот локальная LLM Qwen 3.5 - достаточно шустро справляется с этими задачами. Причем скрйапер у меня тянет весь текст новости после всех отборов и фильтраций. А там порой портянки на несколько страниц.
По поводу настройки парсинга на каждый сайт проблем не было вообще - поставь jina я описал это в статье. Прекрасно парсит и все бесплатно - мне к стати нейронка сама предложила это сделать.
Я полностью согласен с тем что еще и нужно все нормально подготовить и оформить, я еще дорабатываю канал. И добавляю новые фичи и аналитику плюс автоматизацию вплоть до исправления в авторежиме любых косяков.
Я в статье хотел донести то что сейчас по сути создать автоматизацию может почти каждый и тут не нужно гигантских знаний. И вложения минимальные. Я на работе себе создаю различные автоматизации и crm системы которые мне помогают и все это без знания программирования. А так же вот на днях я собрал себе сайт https://kravtsovlab.space/ - статьи там публикуются прями из Obsidian - все сделал за 2 часа и все в автоматическом режиме. Пока там 2 статьи - буду расширять базу знаний. И в ближайшее время выпущу еще статью как я создал такой сайт.
Хороший вопрос, у меня та же история была.
Главный инсайт: навык — это всего лишь markdown-файл с промптом. Никакой магии. Открой SKILL.md от хуманайзера, скопируй текст промпта, и засунь его в свой Python-скрипт как system message при вызове Ollama. Всё, навык работает без курсора.
У меня в пайплайне новостей оно так и крутится. Voice Guardian — это просто Python-функция в publisher.py:
RU_HUMANIZER_PROMPT = “”“<содержимое SKILL.md>”“” ALEXEY_EDITOR_PROMPT = “”“<содержимое моего редакторского SKILL.md>”“”
async def humanize(draft): # шаг 1: убираем AI-паттерны step1 = await call_llm(system=RU_HUMANIZER_PROMPT, user=draft) # шаг 2: накладываем мой голос step2 = await call_llm(system=ALEXEY_EDITOR_PROMPT, user=step1) return step2
Каждый пост проходит два прохода через LLM: сначала хуманайзер вычищает «гладкость», потом редактор накладывает стиль. Те же два навыка, что у меня в Claude Code — но запускаются скриптом без курсора.
Для тысячи статей я бы сделал так:
Промпт из .md копируешь в константу в скрипте.
Цикл по статьям — каждую отдельно шлёшь в Ollama с этим промптом как system, текст статьи как user.
Fallback на случай если Qwen затупит: если ответ короткий или странный — отправляешь повторно или переключаешься на платный API (MiniMax, например, у меня бесплатный тариф 4500 запросов в 5 часов — на 1000 статей хватит с запасом).
Если оллама не вывозит навык — это обычно значит, что модель слабовата под задачу. У меня Qwen 3.5 9B справляется с переводом, но хуманайзер уже на пределе — поэтому основной режим у меня MiniMax (бесплатный), а Qwen как резерв.
Идеального «навыка для оллама» делать не надо. Skill = промпт + модель достаточного размера. Подбираешь промпт + модель — и пакетный скрипт работает не хуже курсора, только без устающих рук.
Для перевода достаточно локальной модели qwen 3.5 или gemma 4. - они небольшие и достаточно хорошо перегоняют текст. А вот редактуру я делаю в Minimax, и да она платная, это подписка Код план. Я на ней кучу проектов гоняю и агентов различных.
Ну а вообще если памяти достаточно можно и редактуру делать на локальной модели. У вас Видеокарта есть и с ней все должно летать.
Причем gemma 4 и Minimax это думающие модели и там нужно правильно работать с thinking, иначе обработка одной новости будет занимать много времени а при обработке пачки новостей все будет падать в таймаут.
Да, ты описал классический случай. Коротко — у тебя три вещи смешались:
Opencode — это интерактивная сессия с накапливающимся контекстом. Что бы ты ни просил внутри одного чата — все предыдущие запросы и ответы остаются в окне. Попросил 10 статей — модель тащит за собой черновики предыдущих
На 30-й статье это уже неподъёмная простыня, качество падает, модель начинает путаться.
Решение не в «очистке памяти», а в правильной архитектуре. Batch-генерация 100 статей — это не задача для интерактивного чата. Это работа скрипта, который дёргает API модели по одной статье за раз. Каждый вызов — изолированный: только system prompt + одна статья. Никакого накопления.
Псевдокод (для MiniMax, OpenAI и любой другой):
for article in articles_to_edit: messages = [ {“role”: “system”, “content”: SYSTEM_PROMPT}, {“role”: “user”, “content”: article.raw_text} ] response = llm.chat(messages=messages, max_tokens=2000) save(article.id, response)
Никакого messages.append() между итерациями. Каждая статья — свой контекст, чистый как в первый раз.
У нас в news-pipeline именно так и сделано. 160 источников × 15 минут = сотни API-вызовов в день. Каждая новость проходит через 3 раздельных воркера (ai_filter, translator, llm_editor), и каждый из них делает отдельный stateless POST-запрос к MiniMax. Модель никогда не видит соседние новости — в окне контекста всегда только системный промпт + тело конкретной новости. Поэтому на 1000-й статье качество такое же, как на 1-й.
Что делать тебе на практике:
Вынести обработку из Opencode в отдельный Python-скрипт.
Использовать API напрямую (у MiniMax — POST https://api.minimax.io/v1/chat/completions).
Для каждой статьи — новый массив messages с нуля.
Если нужно сохранять результаты — в JSON/БД/файл.
Opencode хорош для интерактивной работы (обсудить идею, разобрать одну статью). Но для конвейера из 100 — это инструмент не той задачи.
Ну и по сути я все это естественно делал не сам: а просто написал тому же Клоду что я хочу получить на выходе а как это сделать, клод сам знает.
По факту у тебя уже все описано в opencode, теперь тебе нужно попросить его это все вынести в скрипт который автоматически прогоняет каждую новость через промпт и сохраняет допустим в БД.
ai_filter — воркер после сбора новостей и удаления дублей, перед переводом. Берёт свежие новости, прогоняет через LLM и ставит оценку от 0 до 100 плюс короткое объяснение. На выходе три корзины: идём дальше в публикацию, откладываем как слабые или помечаем «ошибка модели».
Пороги не в коде, а в таблице настроек — меняю без перезапуска. Сейчас порог публикации 75 в будни, на выходных выше: там поток мусорнее. Всё, что ниже 70 — молча в сторону. В промпте модели явно прописано: фандинг, иски, увольнения — это не AI-новости, ставь 20-40, даже если компания AI-шная. Фильтр режет около 81% того, что собрал коллектор.
Главная оптимизация — отсев по длине текста до вызова LLM:
body = strip_all_html(r.get(“full_text”) or r.get(“content”) or “”).strip() if len(body) < 300: # сразу в сторону, LLM не зовём continue
Это платные статьи и RSS-заглушки на 150 символов. Без этого платил бы токенами за то, чтобы модель прочитала пустоту. Экономит 30+ вызовов в день.
LLM получает пачку по 5 штук: id, заголовок и обрезанный до 500 символов текст. Ответ — JSON. Парсер с подстраховкой: сначала стандартный разбор, потом поиск по скобкам — локальные модели любят навалить лишнего вокруг ответа.
Что не идеально: — Один поставщик LLM = одна точка отказа. Ретрай один раз через 20 секунд. — Пороги 70/75/80 подобрал на глаз. Собираю просмотры и реакции, но обратная связь на пороги ещё не замкнута. — Ложные срабатывания живут. Интересная научная статья может получить 65 и уйти мимо.
Следующий шаг — завязать порог на реакции и просмотры, чтобы он сам подтягивался под то, что заходит аудитории. Пока руками.
Ну вот я так делал в начале - тогда у меня было порядка 40 источников и все были rss и все долго обрабатывалось и были постоянные ретраи, реально кучу автоматизаций сделал, а потом после очередного Бага решил попробовать по другому. Спокойно добавили новости с Видео роликами.
Сейчас к стати прихожу к тому что нужно писать посты, делать более живой канал а не просто новостная лента.
Попробую ответить по порядку:
Я описал чем пользуюсь - Это был Курсор за 20 долларов. И Клод код так же 20 долларов. Раньше я пользовался только Курсором. Но буквально 3 месяца назад еще раз вернулся к Клоду и вот он реально делает красоту.
По поводу opencode - я так же его начал использовать но к нему я подключил свою кодинг подписку от MiniMax, она очень неплохо таки работает и так же отлично кодит.
Бесплатные модели пробовал для кондинга, мне не очень понравились.
А вот для обработки текста самое то - у меня тут используется свой Стэк: Мини Пк - CHUWI AuBox Ai365 на процессоре AMD Ryzen AI 9 365 и 32 гига оперативы. Локальная LLM Qwen 3.5 - она не плохо работает на нем - примерно 9 токенов в секунду.
Но вот сейчас вышла к стати Gemma4 от Гугл и она рвет всех в своем классе по скорости. Я ее параллельно подключил к llama.cpp - она мне вечернюю свод прогоняет, думаю позже заменю на нее.
По поводу копирайтинга и хуманизации - не ищи готовый создай свой. Их я создал совместно с Перплексити и Клодом - отлично получилось и смог выйти на 92% яеловечности) а что я по сути сделал, скормил перплексити свои тексты и переписки и попросил выдернуть все паттерны а дальше попросил его подготовить промпт для Клода чтобы он сделал эти скилы один назвали alexey-editor а второй ru-humanizer. Отлично справляются и проходит многие проверки.
По поводу отбора статей(новостей). -- у меня система отбирает да примерно 100-200 в день, но дальше идет фильтрация которая проставляет рейтинг новости, дедупликация которая отсекает дубли, так же отсекаются битые новости, очень короткие менее 300 знаков уходят в мусор. Итого по подсчетам примерно 18% новостей из данного пула доходят до Менеджера а тот в свою очередь отправляет в данный момент всего 10 топовых новостей в сутки. Я еще пока играюсь с количеством.
И вот локальная LLM Qwen 3.5 - достаточно шустро справляется с этими задачами.
Причем скрйапер у меня тянет весь текст новости после всех отборов и фильтраций. А там порой портянки на несколько страниц.
По поводу настройки парсинга на каждый сайт проблем не было вообще - поставь jina я описал это в статье. Прекрасно парсит и все бесплатно - мне к стати нейронка сама предложила это сделать.
Я полностью согласен с тем что еще и нужно все нормально подготовить и оформить, я еще дорабатываю канал. И добавляю новые фичи и аналитику плюс автоматизацию вплоть до исправления в авторежиме любых косяков.
Я в статье хотел донести то что сейчас по сути создать автоматизацию может почти каждый и тут не нужно гигантских знаний. И вложения минимальные.
Я на работе себе создаю различные автоматизации и crm системы которые мне помогают и все это без знания программирования.
А так же вот на днях я собрал себе сайт https://kravtsovlab.space/ - статьи там публикуются прями из Obsidian - все сделал за 2 часа и все в автоматическом режиме.
Пока там 2 статьи - буду расширять базу знаний. И в ближайшее время выпущу еще статью как я создал такой сайт.