Как устроено внутри: архитектура, модель, замеры и ценаЯк влаштовано всередині: архітектура, модель, заміри та цінаHow it works inside: architecture, model, measurements and cost
Почему агент с инструментами, а не один запрос к моделиЧому агент з інструментами, а не один запит до моделіWhy an agent with tools, not a single model call
Запись — это действие, а не текст. У модели есть два инструмента: propose_slots идёт в Google Calendar мастера и возвращает реально свободные окна, create_booking заводит заявку и отправляет её мастеру в Telegram. Модель решает, когда их вызвать, но сами слоты приходят из календаря — придумать время она не может. Цикл ограничен тремя кругами вызовов за один ответ.Запис — це дія, а не текст. У моделі є два інструменти: propose_slots іде в Google Calendar майстра й повертає справді вільні вікна, create_booking заводить заявку та надсилає її майстру в Telegram. Модель вирішує, коли їх викликати, але самі слоти приходять з календаря — вигадати час вона не може. Цикл обмежений трьома колами викликів за одну відповідь.Booking is an action, not a piece of text. The model has two tools: propose_slots goes to the stylist's Google Calendar and returns genuinely free windows, create_booking files the request and sends it to the stylist on Telegram. The model decides when to call them, but the slots themselves come from the calendar — it cannot invent a time. The loop is capped at three rounds of calls per answer.
СхемаСхемаThe pipeline
Вопрос → поиск по базе знаний (top-5 карточек) → системный промпт из двух блоков → Claude Haiku 4.5 с двумя инструментами → Google Calendar и Telegram. Вызовы модели — официальным SDK Anthropic, без обёрток вроде LangChain. Поиск — sqlite-vec поверх эмбеддингов multilingual-e5-base.Питання → пошук у базі знань (top-5 карток) → системний промпт із двох блоків → Claude Haiku 4.5 з двома інструментами → Google Calendar і Telegram. Виклики моделі — офіційним SDK Anthropic, без обгорток на кшталт LangChain. Пошук — sqlite-vec поверх ембедингів multilingual-e5-base.Question → knowledge-base search (top-5 cards) → a two-block system prompt → Claude Haiku 4.5 with two tools → Google Calendar and Telegram. Model calls go through the official Anthropic SDK, with no wrappers like LangChain. Search is sqlite-vec over multilingual-e5-base embeddings.
Что отдано коду, а не моделиЩо віддано коду, а не моделіWhat is handled by code, not the model
Эмбеддинги считает свой сервис на том же сервере — за поиск не платится ни цента, и одна копия модели обслуживает все проекты. Дневной бюджет и частоту запросов проверяет Python до обращения к модели: кончился лимит — гость получает честный текст, а не счёт. Язык гостя протянут до инструментов, поэтому названия услуг возвращаются на нужном языке; при этом уведомление мастеру в Telegram всегда на языке салона — его читает не гость.Ембединги рахує власний сервіс на тому ж сервері — за пошук не платиться ні цента, і одна копія моделі обслуговує всі проєкти. Денний бюджет і частоту запитів перевіряє Python до звернення до моделі: скінчився ліміт — гість отримує чесний текст, а не рахунок. Мова гостя протягнута до інструментів, тому назви послуг повертаються потрібною мовою; при цьому сповіщення майстру в Telegram завжди мовою салону — його читає не гість.Embeddings are computed by our own service on the same server — search costs nothing, and one copy of the model serves every project. The daily budget and request rate are checked by Python before the model is called: when a limit is hit the visitor gets an honest message, not a bill. The visitor's language is threaded through to the tools, so service names come back in the right language — while the Telegram notification to the stylist always stays in the salon's language, because it isn't the guest who reads it.
База знаний и языкиБаза знань і мовиKnowledge base and languages
40 карточек — услуги с ценами и оговорками, мастера, 29 вопросов-ответов, профиль салона. Каждая проиндексирована на трёх языках, всего 120 фрагментов; поиск фильтрует по языку вопроса, поэтому английский запрос ищет по английским карточкам, а не переводит на лету. Цены во всех языках остаются в гривнах — конвертация в доллары была бы выдумкой.40 карток — послуги з цінами та застереженнями, майстри, 29 питань-відповідей, профіль салону. Кожна проіндексована трьома мовами, разом 120 фрагментів; пошук фільтрує за мовою питання, тому англійський запит шукає англійськими картками, а не перекладає на льоту. Ціни всіма мовами залишаються в гривнях — конвертація в долари була б вигадкою.40 cards — services with prices and caveats, stylists, 29 questions and answers, the salon profile. Each is indexed in three languages, 120 fragments in total; search filters by the language of the question, so an English query searches English cards rather than translating on the fly. Prices stay in hryvnia in every language — converting them to dollars would be inventing numbers.
Что измереноЩо заміряноWhat has been measured
Поиск проверен отдельно от модели: на контрольных английских вопросах нужная карточка оказалась первой в 10 случаях из 10. Такой прогон бесплатен — эмбеддинги локальные, поэтому его можно гонять после каждой правки базы. Цена ответа взята из журнала токенов за восемь живых диалогов: $0,0209 на все восемь. Формулировки ответов бенчмарком не оценивались — про их качество здесь ничего не утверждается.Пошук перевірено окремо від моделі: на контрольних англійських питаннях потрібна картка виявилася першою в 10 випадках з 10. Такий прогін безкоштовний — ембединги локальні, тому його можна ганяти після кожної правки бази. Ціна відповіді взята з журналу токенів за вісім живих діалогів: $0,0209 на всі вісім. Формулювання відповідей бенчмарком не оцінювалися — про їхню якість тут нічого не стверджується.Retrieval is tested separately from the model: on a control set of English questions the right card came first in 10 cases out of 10. That run is free — the embeddings are local — so it can be repeated after every edit to the knowledge base. The cost per reply comes from the token log across eight live conversations: $0.0209 for all eight. The wording of the answers has not been benchmarked, so nothing is claimed about it here.
Стоимость и границыВартість і межіCost and limits
Стабильная часть промпта — профиль салона, тон, правила записи — помечена как кэшируемая: это около 80% входных токенов. Демо открыто без регистрации, поэтому потолок задан явно: 10 сообщений в минуту и 10 в сутки с одного адреса плюс общий дневной лимит в долларах, после которого Глория честно предлагает форму заявки. Салон и мастера вымышлены — это демонстрационный стенд; календари и Telegram при этом настоящие, заявка действительно доходит.Стабільна частина промпту — профіль салону, тон, правила запису — позначена як кешована: це близько 80% вхідних токенів. Демо відкрите без реєстрації, тому стеля задана явно: 10 повідомлень за хвилину і 10 на добу з однієї адреси плюс загальний денний ліміт у доларах, після якого Глорія чесно пропонує форму заявки. Салон і майстри вигадані — це демонстраційний стенд; календарі та Telegram при цьому справжні, заявка дійсно доходить.The stable part of the prompt — salon profile, tone, booking rules — is marked as cacheable: roughly 80% of the input tokens. The demo is open without registration, so the ceiling is set explicitly: 10 messages per minute and 10 per day from one address, plus an overall daily cap in dollars, after which Gloria honestly offers the request form. The salon and stylists are fictional — this is a demonstration stand; the calendars and Telegram, however, are real, and the request genuinely arrives.