Все уроки · 44
Один вызов: как на самом деле работают все ИИ-продукты
ChatGPT, Claude, Gemini, агенты для кода, RAG, MCP — за всем этим стоит одно и то же действие: отправили текст, получили наиболее вероятное продолжение. Всё остальное — надстройка над этим вызовом.
Одно действие, которое повторяется снова и снова
Почему это важно? Потому что в этом весь механизм работы ИИ — и о нём вам обычно не рассказывают. Каждый ИИ-продукт, которым вы пользовались, — окно чата, агент для кода, кнопка «исследовать», сервис, который назначает встречи, — делает одну и ту же вещь, снова и снова:
Вы отправляете текст. Модель дописывает наиболее вероятное продолжение. Это один вызов. Потом кто-то — вы или программа — решает, какой текст отправить дальше, и тот же вызов повторяется.
Вот и всё. Для текстового обмена — а речь сейчас именно о нём — никакого второго, скрытого действия нет. Чат работает так. Агенты работают так. Инструменты работают так. RAG (ответы по вашим документам) — тоже. Меняются только две вещи: сколько текста уходит на вход и какой именно это текст. Само действие остаётся прежним.
Фраза, которую стоит запомнить
Один вызов: текст на вход — продолжение на выход. Всё остальное в ИИ построено поверх этого вызова, и строится оно за счёт того, что меняется отправляемый текст.
Как выглядит один вызов
Вы делаете один вызов: отправляете фрагмент текста — и больше ничего. Что модель на самом деле с ним делает?
pick an answer — you get the explanation right away
Вы отправляете:
-
один длинный фрагмент текста — всё, что модели разрешено видеть прямо сейчас (это называется контекст), — и
-
модель возвращает продолжение, которое считает наиболее вероятным.
Пока модель отвечает, она ничего не ищет: не открывает ваши файлы и не заходит в интернет. Она читает отправленный вами текст и дописывает то, что правдоподобнее всего следует дальше. Если ответу нужен какой-то факт, этот факт должен быть в отправленном тексте. Иначе модель придумает что-то, что звучит правдоподобно.
Окно чата — это цикл, а не память
Вот что удивляет людей больше всего: у модели нет памяти о вас. Модель видит только тот текст, который пришёл в этом вызове. Если в приложении есть функция памяти, сохранённые факты добавляет в этот текст само приложение, а не модель.
Когда вы отправляете второе сообщение в чате, приложение ничего не «напоминает» модели. Оно отправляет весь разговор заново — ваше первое сообщение, ответ модели, ваше второе сообщение — как один, более длинный фрагмент текста. Модель читает его заново, каждый раз с начала, и продолжает с того места, где текст заканчивается.
Из этого следуют две вещи. Длинный разговор становится медленнее и дороже: каждое новое сообщение заново отправляет всё, что было раньше. И модель может вдруг «забыть» что-то из начала длинного чата: если текст стал слишком длинным, самые старые его части отбрасывают или сжимают до краткого пересказа — а значит, с точки зрения модели этого больше не существует.
Вот это по шагам. Каждое из трёх ваших сообщений — отдельный вызов: нажимайте «отправить» и смотрите на панель рядом с чатом. В первый раз уходит 14 токенов, во второй — 38, в третий — 58. Ничего нигде не запоминается: вся эта куча текста просто уходит заново.
Откуда тогда берутся инструменты, агенты и RAG
Модель умеет ровно одно: продолжать текст, который ей дали. Что же тогда могут изменить инструменты, агенты и RAG?
pick an answer — you get the explanation right away
Это не разные механизмы. Это способы изменить текст перед следующим вызовом:
- Инструменты. Модель пишет текст вроде «узнать погоду в Киеве». Ваша программа выполняет настоящий запрос, забирает ответ, вставляет его обратно как текст и вызывает модель снова. Модель всё это время видела только текст.
- RAG (ответы по вашим документам). Перед вызовом программа находит в ваших файлах подходящие абзацы и копирует их в отправляемый текст. Модель просто читает их — так же, как читали бы вы.
- Агенты. Цикл: вызов, прочитать, что пришло, что-то сделать, вставить результат как текст, вызов снова — пока задача не выполнена или пока цикл что-нибудь не остановит.
- MCP. Стандартный способ подключать инструменты: он задаёт согласованный формат, чтобы текст модели «вызови это» и ответ вашей программы понимали друг друга.
В каждом из этих случаев происходит одно и то же: текст на вход — продолжение на выход. Изменилось только то, какой именно текст попал на вход.
Почему это помогает получать ответы лучше
Если модель видит только отправленный вами текст, то большинство плохих ответов — это проблема текста, а не «интеллекта»: инструкция размыта, нужный факт не включён либо контекст такой длинный, что важное из него вытеснило. Поправьте текст — и ответ, как правило, исправится сам.
Попробуйте: понаблюдайте за циклом
Попросите любого ассистента показать вам, как выглядит запрос в исходном виде. Настоящего запроса приложения вы не увидите — ассистент покажет лишь правдоподобную его реконструкцию, но и этого хватит: примерно за минуту мысль «всё — это текст» перестанет быть абстрактной:
Я хочу понять, как ты получаешь сообщения. Покажи мне обычным текстом, как выглядит
запрос к тебе: массив messages, роли (system / user / assistant) и где в нём
находится мой текущий разговор. И ответь на один вопрос: если я отправлю ещё одно
сообщение, что именно отправится заново?Что дальше
- Если хотите разобраться в механизме глубже — предсказание следующего токена, почему ответы меняются от раза к разу, почему модель уверенно говорит ерунду — читайте Как на самом деле работают LLM.
- Если хотите увидеть текст, который реально доходит до модели, — токены, окно контекста и параметры, меняющие продолжение, — читайте Разговор с моделью: токены, контекст и сэмплинг.
- Если нужно разобраться, какими путями текст вообще попадает в модель — промпты, инструменты, MCP, skills, RAG, — читайте Наводим порядок в терминах: промпт, инструменты, MCP, skills, RAG, агенты.
Вы отправляете второе сообщение в чате. Что на самом деле делает приложение?
Агент «использует инструмент». Что происходит на самом деле?
Что меняется между сообщением в чате, ответом RAG и шагом агента?
Длинная беседа вдруг «забывает» что-то из начала. В чём наиболее вероятная причина?