antonov-ai.ru
tools: … сессия: …

Чат-ассистент с инструментами через OpenRouter free-tier. Когда модель решает позвать функцию (поиск по базе знаний, метрики VPS, время, конвертация валют, чтение страницы) — её вызов виден прямо в диалоге, вместе с аргументами и результатом.

Ассистент
Здравствуйте. Я — AI-ассистент antonov-ai.ru с доступом к 5 инструментам: поиск по базе знаний, статус сервера, время, курсы ЦБ РФ и чтение публичных страниц. Спросите что-нибудь — каждый вызов инструмента будет виден прямо здесь.

Как это работает

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

  1. Вы пишете вопрос. Сервер создаёт серверную сессию (живёт 24 часа) и складывает туда ваше сообщение.
  2. Сообщение и описание 5 инструментов уходят в модель OpenRouter. Модель возвращает либо обычный ответ, либо список «вызовов инструментов» — какую функцию запустить и с какими аргументами.
  3. Если есть вызовы — сервер выполняет каждый локально (поиск по pgvector / чтение CPU / fetch ЦБ / fetch страницы) и отдаёт результаты обратно модели. Этот цикл повторяется до 4 раз — на практике хватает 1–2.
  4. Финальный ответ модели стримится вам по символам. История диалога сохраняется в серверной сессии — следующая ваша реплика учитывает все предыдущие, без перезагрузки контекста через клиент.

Стек и ограничения

  • Модели: free-tier OpenRouter из живого ранкинга. Селектор сверху позволяет выбрать любую модель из топа; те, что не поддерживают tool calling, помечены отдельно.
  • Сессия: Postgres (та же БД, что и у RAG), таблица assistant_sessions, TTL 24 часа, без PII.
  • Tool-loop: до 4 итераций модель → tool → результат → модель. Превышение — фиксируется флагом warning: max_iterations_reached.
  • Лимит входа: 4000 символов на сообщение, 20 запросов / 5 минут на IP.
  • summarizeUrl ходит только по allow-list (anthropic, openai, langchain, pydantic, github, mdn, wikipedia и т.п.) — никаких произвольных URL.
  • Не все free-модели стабильно отдают tool_calls — при ошибке сервер делает один retry на fallback-модель.