Search
Write a publication
Pull to refresh
7
6
Петр Трипольский @tripolskypetr

Backend разработчик

Send message

ОЧЕНЬ! Вредный совет

Если говнодвижок, в том числа в облаке с оплатой за токены, не может спарсить JSON, он буквально сделает while(true) на ваши деньги!

{"level":30,"time":1751304487079,"pid":17864,"hostname":"DESKTOP-UDO3RQB","logLevel":"log","createdAt":"2025-06-30T17:28:07.079Z","createdBy":"http_predict.log","args":["/predict_1m error",{"request":{"requestId":"16ea422e-33e9-404f-9c42-e330edd2a515","serviceName":"trend-app","symbol":"XRPUSDT"},"error":{"stack":"AI_NoObjectGeneratedError: No object generated: could not parse the response.\n    at processResult (file:///C:/Users/User/Documents/GitHub/signals/node_modules/ai/dist/index.mjs:2965:17)\n    at fn (file:///C:/Users/User/Documents/GitHub/signals/node_modules/ai/dist/index.mjs:2996:19)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async file:///C:/Users/User/Documents/GitHub/signals/node_modules/ai/dist/index.mjs:470:22\n    at async predictCryptoTrend.U.maxExec (file:///C:/Users/User/Documents/GitHub/signals/build/index.mjs:1:24906)\n    at async execute (file:///C:/Users/User/Documents/GitHub/signals/node_modules/functools-kit/build/index.mjs:589:16)\n    at async InstanceAccessor.wrappedFn [as predictCryptoTrend] (file:///C:/Users/User/Documents/GitHub/signals/node_modules/functools-kit/build/index.mjs:621:13)\n    at async file:///C:/Users/User/Documents/GitHub/signals/build/index.mjs:1:327933\n    at async dispatch (file:///C:/Users/User/Documents/GitHub/signals/node_modules/hono/dist/compose.js:22:17)\n    at async dispatch (file:///C:/Users/User/Documents/GitHub/signals/node_modules/hono/dist/compose.js:22:17)","message":"No object generated: could not parse the response.","name":"AI_NoObjectGeneratedError","cause":{"name":"AI_JSONParseError", ... ,"response":{"id":"07575e7b-03d2-aa75-d762-2f81141fc60e","timestamp":"2025-06-30T17:25:05.000Z","modelId":"grok-3"},"usage":{"promptTokens":1711,"completionTokens":112,"totalTokens":1823},"finishReason":"stop"}}]}


Если кому-то нужно, ещё одна годная модель на 12b на русском языке. Топология сделана в коллабе Mistral и NVidia, датасет заточен под русский язык

https://huggingface.co/tripolskypetr/Vikhr-Nemo-12B-Instruct

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

Доверять параметру enum так же не стоит, он сериализуется на вход языковой моделе, но не проверяется движком, который запускает gguf, на своей стороне

import {
  addTool,
  commitToolOutput,
  commitToolOutputForce,
  execute,
  Schema,
} from "agent-swarm-kit";
import { str, Subject } from "functools-kit";
import { z } from "zod";
import { ToolName } from "src/enum/ToolName";
import commitAppAction from "src/utils/commitAppAction";
import { IPizzaOrder } from "src/model/interfaces";

// См https://deepwiki.com/tripolskypetr/functools-kit/3.2-subject-and-behaviorsubject
const pizzaSubject = new Subject<{ district: string; size: string; clientId: string }>()

// Список районов Москвы
const MOSCOW_DISTRICTS = [
  "АРБАТ",
  "БАСМАННЫЙ",
  "ЗАМОСКВОРЕЧЬЕ",
  "КРАСНОГОРСК",
  "ПРЕСНЕНСКИЙ",
  "ТАГАНСКИЙ",
  "ТВЕРСКОЙ",
  "ХАМОВНИКИ",
  "МЕЩАНСКИЙ",
  "ЯКИМАНКА",
];

// Доступные размеры пиццы в сантиметрах
const PIZZA_SIZES = [25, 30, 35, 40];

addTool({
  toolName: ToolName.OrderPizzaTool,
  type: "function",
  call: async ({ toolId, clientId, agentName, params }) => {
    const { district, size } = params;

    // Проверка наличия района
    if (!district) {
      await commitToolOutput(
        toolId,
        "Пожалуйста, укажите район Москвы для доставки пиццы",
        clientId,
        agentName
      );
      await execute(`Узнай недостающие данные и вызови инструмент ${ToolName.OrderPizzaTool} еще раз!`, clientId, agentName);
      return;
    }

    // Проверка наличия размера
    if (!size) {
      await commitToolOutput(
        toolId,
        "Пожалуйста, укажите размер пиццы в сантиметрах",
        clientId,
        agentName
      );
      await execute(`Узнай недостающие данные и вызови инструмент ${ToolName.OrderPizzaTool} еще раз!`, clientId, agentName);
      return;
    }

    // Проверка валидности района
    if (!MOSCOW_DISTRICTS.includes(String(district).toUpperCase())) {
      await commitToolOutput(
        toolId,
        str.newline("Доставка возможна только в следующие районы:", MOSCOW_DISTRICTS),
        clientId,
        agentName
      );
      await execute(`Попроси пользователя указать верный район для доставки. Как получишь новый район, вызови инструмент ${ToolName.OrderPizzaTool} еще раз`, clientId, agentName);
      return;
    }

    // Проверка валидности размера
    if (!PIZZA_SIZES.includes(Number(size))) {
      await commitToolOutput(
        toolId,
        str.newline("Доступны только следующие размеры пиццы (в см):", PIZZA_SIZES),
        clientId,
        agentName
      );
      await execute(`Попроси пользователя указать верный размер пиццы. Как получишь новый район, вызови инструмент ${ToolName.OrderPizzaTool} еще раз`, clientId, agentName);
      return;
    }

    // Сохранение данных заказа в памяти для последующих заказов
    await Schema.updateSessionMemory(clientId, {
      district: district,
      size: size,
    });

    // Логирование параметров заказа
    console.log(`Заказ пиццы: Район - ${district}, Размер - ${size} см`);

    // Отправка действия для обработки заказа
    await pizzaSubject.next({ clientId, district, size })

    // Уведомление об успешном оформлении заказа
    await commitToolOutput(
      toolId,
      str.newline(["Заказ пиццы успешно оформлен. Перейди к оплате."]),
      clientId,
      agentName
    );
    await execute(`Заказ сформирован успешно. Более не вызывай инструмент ${oolName.OrderPizzaTool}`, clientId, agentName);
  },
  function: {
    name: ToolName.OrderPizzaTool,
    description: "Инструмент для заказа пиццы с доставкой по Москве",
    parameters: {
      type: "object",
      properties: {
        district: {
          type: "string",
          description: "Район Москвы для доставки пиццы",
          enum: MOSCOW_DISTRICTS,
        },
        size: {
          type: "number",
          description: "Размер пиццы в сантиметрах",
          enum: PIZZA_SIZES,
        },
      },
      required: ["district", "size"],
    },
  },
});

Вам потребуется использовать этот код внутри context scope, чтобы задать отдельный subject на каждый запрос пользователя. Более подробно по ссылке

Нужно уметь.

А давайте сделаем ту самую допэмиссию!

Инвестирование в создание контента на YouTube в условиях цензуры, копирайтинга и насыщения научпопом требует анализа с точки зрения "data capitalism", где контент выступает валютой, а внимание пользователей — ресурсом. Применим экономические концепции для прогноза.

1. Контент как валюта

Контент на YouTube — это средство обмена, за которое создатели получают внимание аудитории, конвертируемое в доход (через рекламу, подписки, спонсорство). Однако, как и в экономике, избыточная "эмиссия" контента (перепроизводство) ведет к инфляции данных:

  • Рынок перенасыщен: миллионы видео конкурируют за ограниченное внимание пользователей. По данным на 2025 год, на YouTube ежедневно загружаются сотни тысяч часов контента, а средний пользователь тратит около 40 минут в день на платформу.

  • Снижение ценности единицы контента: из-за обилия видео (особенно в популярных нишах, таких как научпоп) уникальность и вовлеченность падают. Видео должны быть короче, ярче и чаще, чтобы удержать внимание, что повышает затраты на производство.

2. Инфляция данных

  • Причины:

    • Низкий порог входа: любой может создать канал, что увеличивает объем контента.

    • Алгоритмы YouTube: предпочтение отдается вирусному, короткому или трендовому контенту, что снижает ценность глубокого научпопа.

    • Цензура и копирайтинг: ограничения на монетизацию (например, за "спорный" контент) и страйки за использование материалов снижают доходность.

  • Последствия:

    • Девальвация контента: видео в перенасыщенных нишах (научпоп, лайфстайл) теряют просмотры, так как аудитория распыляется.

    • Стагфляция: рост затрат на производство (качественный монтаж, графика, реклама) при стагнации доходов. Например, средний CPM (доход за 1000 просмотров) в 2025 году варьируется от $0,5 до $3 в зависимости от ниши и региона, но конкуренция снижает шансы на высокий охват.

3. Ликвидность инвестиций в контент

  • Риски:

    • Высокая конкуренция: научпоп-направление уже насыщено каналами (например, Kurzgesagt, Veritasium), и новым игрокам сложно выделиться без значительных вложений.

    • Цензура: YouTube усиливает контроль за контентом (например, за дезинформацию или политические темы), что может ограничить монетизацию.

    • Копирайтинг: использование чужих материалов (даже с лицензией) усложняет создание оригинального контента и повышает риск страйков.

    • Краткосрочность трендов: форматы и темы быстро устаревают из-за алгоритмов и предпочтений аудитории.

  • Возможности:

    • Нишевые темы: узкоспециализированный контент (например, квантовые вычисления или биоинформатика) может привлечь лояльную аудиторию с меньшей конкуренцией.

    • Кроссплатформенность: использование YouTube как части экосистемы (например, с Patreon, Substack, Telegram) для диверсификации доходов.

    • Локализация: создание контента на языках с меньшей конкуренцией (например, на русском или других языках СНГ) может быть более ликвидным.

    • Инновационные форматы: эксперименты с интерактивным контентом, AR/VR или интеграцией ИИ могут выделить канал.

4. Прогноз

  • Краткосрочная перспектива (1–2 года): инвестиции в контент могут быть ликвидными только при низких затратах и четком таргетинге на узкую аудиторию. Без значительного стартового капитала (на оборудование, маркетинг, команду) вероятность успеха низка.

  • Среднесрочная перспектива (3–5 лет): усиление цензуры и алгоритмической конкуренции приведет к дальнейшей девальвации массового контента. Успешными будут каналы с уникальным стилем или доступом к эксклюзивным данным/экспертам.

  • Долгосрочная перспектива: возможен переход внимания аудитории к новым платформам (например, децентрализованным аналогам YouTube), что потребует адаптации стратегий.

5. Экономический подход к стратегии

  • Диверсификация: не полагаться только на YouTube. Использовать другие платформы (TikTok, X, Rumble) и монетизацию (курсы, мерч, краудфандинг).

  • Оптимизация затрат: минимизировать расходы на производство, используя ИИ-инструменты для монтажа, сценариев или графики.

  • Анализ рынка: изучить тренды через инструменты вроде VidIQ или Social Blade, чтобы найти недооцененные ниши.

  • Инфляционная защита: создавать "вечнозеленый" контент, который сохраняет актуальность годами (например, фундаментальные научные темы).

6. Теоретический взгляд: Data Capitalism

Если контент — валюта, то:

  • Центральный банк: алгоритмы YouTube, регулирующие "эмиссию" (видимость) контента.

  • Инфляция: перепроизводство однотипного контента снижает его ценность.

  • Капитал: каналы с большой аудиторией становятся "корпорациями", поглощающими мелких игроков.

  • Кризис перепроизводства: перенасыщение контентом может привести к "краху" ниш, где зрители перестанут потреблять из-за усталости.

Вывод

Инвестировать в создание контента на YouTube в 2025 году ликвидно только при условии:

  1. Четкой нишевой стратегии.

  2. Минимизации затрат через ИИ и аутсорсинг.

  3. Диверсификации платформ и источников дохода.

  4. Готовности к высоким рискам из-за цензуры, конкуренции и алгоритмических изменений.

Без уникального подхода и капитала рынок научпопа и других популярных ниш близок к стагфляции. Если хотите разработать "второй том Капитала: Data Edition", начните с анализа внимания как ресурса и алгоритмов как регулятора — это основа экономики данных.

Так же, рекомендую посмотреть https://docs.docker.com/desktop/features/model-runner/

Это Docker Model Runner. Представьте будущее, где вам не то, что не нужно программировать, а не дадут писать код для RAG, так как это не безопасно. Только обучать модели.

RAG подразумевает tool_call, помимо оплаты генерации embedding.

- Это дороже в эксплуатации так как сама запись в RAG базу платная (генерация embeddings)

- Это дороже в программировании, так как это нужно программировать и администрировать в класическом понимании (DevOps, DBA)

- Это медленней на порядок, так как tool_calling подразумевает запуск LLM модели второй раз после получения ответа

- Это медленней, так как Embedding поиск подразумевает большой трафик памяти (2 миллиона записей будут обрабатываться 30 секунд)

- Это плохо применимо к русскому языку, так как nomic-embed-text релизнулся 2023-11-01, разве что делать вендор лок под яндекс

Fine tuning подразумевает, что думает сам ИИ, а не база данных

- Малому и среднему бизнесу дешего взять студента текстовика, можно и бесплатно

- Обновление дообучение модели можно автоматизировать скриптом

- Базу данных не нужно мониторить на предмет поломки, так как её нет: нейронка ничего не пишет на жесткий диск вовсе, а вся работает в оперативе видеокарты как stateless.

Чтобы был work-life balance бизнес должен масштабироваться. Книги нужно читать, наёмные сотрудники не будут это делать.

P.S. Прочитайте техническую документацию, там не много https://github.com/tripolskypetr/agent-swarm-kit

Есть ещё кое что, специалист Langchain это абсурд, так задача ИИ убить профессию программиста...

Чем торгует этот чат бот?
Чем торгует этот чат бот?

Проблема в том, что это книга... ПО на фреймворках до 2019 года спокойно пишет Grok без нужны изменений кода программистом в 99% случаев. А после релиза ChatGPT опенсорс умер, как минимум с точки зрения примеров кода в документации, и для того же Langchain код генерируется отвратительно

Балансируется event loop с очередью к api, vllm балансируется по аналогии, просто ip не хост машины а в локалке пк с видеокартами

https://github.com/vllm-project/vllm

Мышка не сможет прийти и нагадить, если её не пригласил алгоритм...

Уже тогда адресат спама считал себя чем-то особенным…

Очень интересно, на досуге чекну хеш суммы

Это бейт на коммент, говорят, для алгоритмов хорошо

Эти модели плохо работают для русского языка. Подробнее в статье

https://habr.com/ru/articles/892468/

Итого, что получилось:

1. command-a требует 64 гига оперативной памяти, у меня такой нет

2. command-r на машине с 16 гигабайтами оперативы дает ошибку Error: llama runner process has terminated: signal: killed

3. на машине с 32 гигабайтами оперативы command-r запустился, но model template в репо оллама настроен не верно и не вызывает инструменты должным образом

4. удалось найти зафикшенный темплейт по ссылке https://ollama.com/oybekdevuz/command-r

Information

Rating
1,634-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Frontend Developer
From 3,000 $
JavaScript
TypeScript
React
Angular
NestJS
MobX
Adaptive layout
CSS-IN-JS
SOLID
Qt