Учебник

Анализ 10 млн знаков через Llama 4 API: быстро и дёшево

У ваших менеджеров уходят часы на изучение договоров, прайсов и переписки. Llama 4 от Meta обрабатывает до 10 млн токенов за раз - это сотни страниц документов. Разбираем, как за 2 часа настроить API через Together AI или Fireworks и получать выжимки без найма разработчика.

Макс Космов··9 мин чтения

У ваших менеджеров уходят часы на изучение договоров, прайсов и переписки. Llama 4 от Meta обрабатывает до 10 млн токенов за раз - это сотни страниц документов. Разбираем, как за 2 часа настроить API через Together AI или Fireworks и получать выжимки без найма разработчика.

Семейство Llama 4: Scout, Maverick, Behemoth

Meta выпустила Llama 4 в начале 2026 с двумя неожиданными характеристиками: нативная мультимодальность (работа с картинками без отдельного модуля) и контекстное окно 10M токенов у Scout-варианта. Прямой API от Meta пока в waitlist - основной путь к моделям идёт через сторонних провайдеров.

Llama 4 Scout - меньшая модель, ориентированная на длинный контекст. Контекстное окно 10M токенов - рекорд среди моделей с открытыми весами на момент выпуска. Цена у Together AI: $0.08/M input, $0.30/M output. На практике 10M контекст редко нужен целиком, но даже 500K для анализа большой базы договоров - уже полезно.

Llama 4 Maverick - флагманская модель для большинства задач. Контекст 1M токенов, $0.15/M input, $0.60/M output у Together. Качество заметно выше Scout на сложных задачах, например, при анализе условий контрактов или генерации коммерческих предложений.

Llama 4 Behemoth - самая мощная версия, на момент написания доступна в ограниченном режиме. Позиционируется как прямой конкурент GPT-4.5 и Claude Opus.

Модели используют MoE (Mixture of Experts) архитектуру - это когда активируется не вся сеть, а только нужные части, что позволяет держать высокую скорость при большом общем объёме.

Нативная мультимодальность: текст + картинки без отдельного модуля

Предыдущие версии Llama требовали отдельный адаптер для работы с изображениями. Llama 4 принимает картинки напрямую в формате image_url - как в стандартном OpenAI-формате сообщений.

Это значит, что можно в одном запросе смешивать текст и несколько изображений без дополнительных зависимостей. Разберём на примере строительной фирмы: у вас есть фотография объекта и смета в PDF. Вы загружаете фото по ссылке и пишете: "Сравни смету с фактическими работами на фото". Модель ответит.

from openai import OpenAI

client = OpenAI(
 api_key="YOUR_TOGETHER_KEY",
 base_url="https://api.together.xyz/v1"
)

response = client.chat.completions.create(
 model="meta-llama/Llama-4-Maverick",
 messages=[
 {
 "role": "user",
 "content": [
 {
 "type": "image_url",
 "image_url": {"url": "https://example.com/chart.png"}
 },
 {
 "type": "text",
 "text": "Опиши основные тренды на этом графике"
 }
 ]
 }
 ],
 max_tokens=500
)

Ограничение: изображения передаются через URL, не base64 напрямую - файл должен быть доступен по HTTP. Для приватных файлов нужно предварительно загрузить на облачное хранилище (например, S3 или Яндекс.Облако).

Доступ через Together AI: регистрация и первый запрос

Together AI - основной провайдер для Llama 4 с точки зрения баланса скорости и цены. Всё делается без программиста - достаточно уметь скопировать код из примера.

  1. Регистрация на api.together.xyz - можно через GitHub или Google
  2. Панель -> API Keys -> Create key
  3. Стартовые $5 кредитов при первом пополнении

Полный пример запроса к Scout для работы с большим документом (например, вашим типовым договором подряда или прайсом):

import os
from openai import OpenAI

client = OpenAI(
 api_key=os.environ["TOGETHER_API_KEY"],
 base_url="https://api.together.xyz/v1"
)

# Загружаем большой документ (например, договор или прайс)
with open("large_document.txt", "r") as f:
 document = f.read()

response = client.chat.completions.create(
 model="meta-llama/Llama-4-Scout",
 messages=[
 {
 "role": "system",
 "content": "Ты юридический аналитик. Отвечай конкретно с примерами из текста."
 },
 {
 "role": "user",
 "content": f"Вот документ:\n\n{document}\n\
Какие основные риски для подрядчика в этом договоре?"
 }
 ],
 max_tokens=2000,
 temperature=0.3
)

print(response.choices[0].message.content)
print(f"Использовано: {response.usage.prompt_tokens:,} input / {response.usage.completion_tokens:,} output токенов")

Этот код ваш менеджер может запустить на своём компьютере - нужно только установить Python и библиотеку openai.

Доступ через Fireworks и OpenRouter: сравнение задержка и цены

Fireworks позиционирует себя на боевую среду с гарантиями скорости. Задержка до первого токена (TTFT) у Fireworks обычно ниже чем у Together, что критично для интерактивных приложений - например, чат-бота для клиентов.

Слаг у Fireworks: accounts/fireworks/models/llama4-maverick-instruct-basic

OpenRouter даёт единую точку API со слагами meta-llama/llama-4-maverick и meta-llama/llama-4-scout. Преимущество - автоматический запасной вариант: если один провайдер недоступен, OpenRouter переключается на следующий без изменения кода.

# OpenRouter
client = OpenAI(
 api_key=os.environ["OPENROUTER_API_KEY"],
 base_url="https://openrouter.ai/api/v1"
)

response = client.chat.completions.create(
 model="meta-llama/llama-4-maverick",
 messages=[{"role": "user", "content": "Напиши коммерческое предложение для клиента"}],
 extra_headers={
 "HTTP-Referer": "https://your-app.com",
 "X-Title": "My App"
 }
)

По цене: OpenRouter обычно добавляет небольшую наценку (~5%) поверх провайдера, но экономит на инфраструктуре для fallback.

Стриминг ответов и подсчёт токенов

Для интерактивных интерфейсов стриминг критичен - без него пользователь ждёт всего ответа перед отображением. Например, если вы делаете чат-бота для консультаций по продукту.

import time

start = time.time()
tokens_generated = 0

stream = client.chat.completions.create(
 model="meta-llama/Llama-4-Maverick",
 messages=[{"role": "user", "content": "Объясни условия поставки в договоре"}],
 max_tokens=1000,
 stream=True
)

for chunk in stream:
 if chunk.choices[0].delta.content:
 print(chunk.choices[0].delta.content, end="", flush=True)
 tokens_generated += 1

elapsed = time.time() - start
print(f"\n\
Примерная скорость: {tokens_generated / elapsed:.0f} токенов/сек")

При стриминге поле usage доступно только в финальном чанке (если провайдер его отдаёт). Для точного подсчёта токенов используйте stream_options={"include_usage": True} - Together AI и OpenRouter поддерживают это.

Llama 4 vs Llama 3.3 70B: когда Scout оправдывает дороговизну контекста

Llama 3.3 70B через Groq стоит $0.59/$0.79 per 1M - дороже чем Llama 4 Scout ($0.08/$0.30). Но Llama 4 Scout при этом новее и качественнее на большинстве задач.

Llama 3.3 70B актуален в одном сценарии: когда нужна максимальная скорость. Groq на Llama 3.3 70B даёт ~394 токенов/сек - для голосового ассистента или live-демонстраций это важно. У Together с Llama 4 Maverick скорость 50-80 токенов/сек.

Llama 4 Scout с 10M контекстом оправдан для:

  • Анализа больших кодовых баз целиком (если у вас IT-продукт)
  • Суммаризации длинных документов (книги, юридические досье)
  • RAG с очень большой базой знаний без разбиения

Для обычного чатбота или помощника на 10-20 ходов - разница в контексте не нужна, лучше взять Maverick за качество.

Ограничения: Llama API от Meta пока в waitlist

Meta запустила собственный Llama API (llama.developer.meta.com), но на момент написания он в waitlist. Это прямой API от создателей модели, что могло бы означать самые актуальные версии и официальный SLA.

Пока waitlist не открылся широко, Together AI и Fireworks - основные пути. Они обычно добавляют новые версии Llama в течение нескольких дней после выпуска.

Ещё одно ограничение: изображения только через URL. Если нужно отправить приватный файл, потребуется промежуточный шаг. Загрузите файл в S3/GCS и передайте временную ссылку. Либо закодируйте в base64 и передайте через data URL (поддержка зависит от провайдера).

Практические паттерны: многотурный диалог с памятью

Для чатботов и помощников нужно сохранять историю диалога между запросами. Стандартный паттерн:

import os
from openai import OpenAI
from dataclasses import dataclass, field
from typing import List

client = OpenAI(
 api_key=os.environ["TOGETHER_API_KEY"],
 base_url="https://api.together.xyz/v1"
)

@dataclass
class Conversation:
 system_prompt: str
 history: List[dict] = field(default_factory=list)
 model: str = "meta-llama/Llama-4-Maverick"
 max_history_turns: int = 20 # ограничиваем историю
 
 def chat(self, user_message: str) -> str:
 self.history.append({"role": "user", "content": user_message})
 
 # Берём последние N сообщений чтобы не выйти за контекст
 recent_history = self.history[-self.max_history_turns * 2:]
 
 messages = [
 {"role": "system", "content": self.system_prompt}
 ] + recent_history
 
 response = client.chat.completions.create(
 model=self.model,
 messages=messages,
 max_tokens=1000,
 temperature=0.7
 )
 
 assistant_message = response.choices[0].message.content
 self.history.append({"role": "assistant", "content": assistant_message})
 
 # Логируем расход токенов
 usage = response.usage
 print(f"[{usage.prompt_tokens} in / {usage.completion_tokens} out]")
 
 return assistant_message

# Использование
bot = Conversation(
 system_prompt="Ты помощник по работе с клиентами. Помогаешь отвечать на вопросы по продукту."
)

print(bot.chat("Какие сроки поставки?"))
print(bot.chat("А какие условия оплаты?"))

Для Scout с 10M контекстом max_history_turns можно поставить значительно выше - модель выдержит очень длинный диалог. Но следите за стоимостью: при большой истории input-токены растут быстро.

Мультимодальный чатбот: несколько изображений в одном запросе

Llama 4 поддерживает несколько изображений в одном сообщении. Разберём на примере проектного бюро: у вас есть два варианта планировки помещения, и вы хотите, чтобы модель их сравнила.

import base64
import httpx

def url_to_base64(url: str) -> str:
 """Скачивает изображение и конвертирует в base64"""
 response = httpx.get(url)
 return base64.b64encode(response.content).decode()

# Запрос с несколькими изображениями
response = client.chat.completions.create(
 model="meta-llama/Llama-4-Maverick",
 messages=[
 {
 "role": "user",
 "content": [
 {"type": "text", "text": "Сравни эти два дизайна интерфейса:"},
 {
 "type": "image_url",
 "image_url": {"url": "https://example.com/design-v1.png"}
 },
 {"type": "text", "text": "и"},
 {
 "type": "image_url",
 "image_url": {"url": "https://example.com/design-v2.png"}
 },
 {"type": "text", "text": "Какой лучше по UX и почему?"}
 ]
 }
 ],
 max_tokens=800
)

print(response.choices[0].message.content)

Максимальное число изображений в одном запросе зависит от провайдера - Together AI поддерживает до 5. Общий объём изображений не должен превышать лимит контекстного окна модели.

Управление температурой и top_p для разных задач

Llama 4 чувствительна к параметрам семплирования - правильная настройка улучшает результаты:

# Для кода и точных ответов: низкая температура
code_response = client.chat.completions.create(
 model="meta-llama/Llama-4-Maverick",
 messages=[{"role": "user", "content": "Напиши письмо клиенту о задержке поставки"}],
 temperature=0.1, # детерминированный вывод
 top_p=0.95,
 max_tokens=500
)

# Для творческих задач: выше температура
creative_response = client.chat.completions.create(
 model="meta-llama/Llama-4-Maverick",
 messages=[{"role": "user", "content": "Придумай 5 названий для новой услуги"}],
 temperature=0.9, # больше разнообразия
 top_p=0.9,
 max_tokens=300
)

# Для аналитики и summarization: средняя температура
analysis_response = client.chat.completions.create(
 model="meta-llama/Llama-4-Scout", # дешевле для длинных документов
 messages=[{"role": "user", "content": "Проанализируй ключевые риски в этом договоре: ..."}],
 temperature=0.3,
 max_tokens=1000
)

Для Scout при анализе длинных документов температура 0.2-0.4 даёт более точное и предсказуемое извлечение информации.

Системный промпт как инструмент специализации

Llama 4 хорошо следует системным промптам, что позволяет создавать специализированных ассистентов. Разберём на примере интернет-магазина:

# Customer support бот
CS_SYSTEM = """Ты агент поддержки интернет-магазина.
Правила:
1. Отвечаешь только на вопросы по товарам и заказам
2. При сложных технических вопросах - передаёшь менеджеру
3. Не обсуждаешь конкурентов
4. Всегда вежлив, но без лишней вежливости
5. Если не знаешь ответа - честно говоришь об этом"""

# Аналитик прайс-листов
PRICE_SYSTEM = """Ты аналитик по закупкам.
При анализе прайс-листов:
- Ищешь самые выгодные позиции
- Сравниваешь цены с прошлым периодом
- Отмечаешь аномалии (резкие скачки цен)
- Не рекомендуешь поставщиков с плохой репутацией"""

Maverick с 1M контекстом позволяет передавать в системный промпт большие базы знаний - документацию продукта, примеры решённых тикетов, описание архитектуры. Это эффективнее чем строить отдельный RAG для случаев когда база знаний помещается в контекст.

Контроль качества: оценка ответов Llama 4 программно

Для боевых систем нужен автоматический контроль качества ответов. Этот код ваш менеджер может адаптировать для проверки ответов модели:

import re
from typing import Optional

def validate_llama_response(
 response: str,
 min_length: int = 50,
 max_length: int = 10000,
 required_keywords: list = None,
 forbidden_phrases: list = None
) -> tuple[bool, Optional[str]]:
 """Валидация ответа модели. Возвращает (ok, reason_if_failed)"""
 
 if len(response) < min_length:
 return False, f"Ответ слишком короткий: {len(response)} символов"
 
 if len(response) > max_length:
 return False, f"Ответ слишком длинный: {len(response)} символов"
 
 if required_keywords:
 missing = [kw for kw in required_keywords if kw.lower() not in response.lower()]
 if missing:
 return False, f"Отсутствуют ключевые слова: {missing}"
 
 if forbidden_phrases:
 found = [ph for ph in forbidden_phrases if ph.lower() in response.lower()]
 if found:
 return False, f"Найдены запрещённые фразы: {found}"
 
 # Проверка на "I don't know" паттерны
 uncertainty_patterns = [
 r"i don't know",
 r"i cannot",
 r"i'm not sure",
 r"не могу помочь"
 ]
 for pattern in uncertainty_patterns:
 if re.search(pattern, response.lower()):
 return False, "Модель отказалась отвечать"
 
 return True, None

def reliable_completion(
 client, model: str, messages: list,
 max_retries: int = 3,
 **validation_kwargs
) -> str:
 """Запрос с повтором при неудачной валидации"""
 
 for attempt in range(max_retries):
 response = client.chat.completions.create(
 model=model,
 messages=messages,
 max_tokens=1000,
 temperature=0.7 + attempt * 0.1 # слегка увеличиваем температуру
 )
 
 answer = response.choices[0].message.content
 ok, reason = validate_llama_response(answer, **validation_kwargs)
 
 if ok:
 return answer
 
 print(f"Попытка {attempt + 1} не прошла валидацию: {reason}")
 
 if attempt < max_retries - 1:
 messages = messages + [{
 "role": "user",
 "content": f"Предыдущий ответ был неполным. Пожалуйста, дай более развёрнутый ответ."
 }]
 
 return answer # возвращаем последний ответ даже если не прошёл

# Использование
answer = reliable_completion(
 client,
 model="meta-llama/Llama-4-Maverick",
 messages=[{"role": "user", "content": "Объясни условия поставки"}],
 min_length=200,
 required_keywords=["срок", "доставка"]
)

Частые вопросы

Почему Llama 4 Scout дешевле Maverick, но с большим контекстом?

Scout - меньшая по числу активных параметров модель. MoE-архитектура позволяет поддерживать огромный контекст без пропорционального роста цены инференса. Maverick крупнее и лучше по качеству на сложных задачах - отсюда цена выше. Большой контекст Scout не требует большей вычислительной мощности на токен.

Можно ли отправить PDF в Llama 4 Maverick напрямую?

Напрямую - нет. API принимает текст и изображения (через URL). PDF нужно предварительно конвертировать в текст (pdfminer, pypdf2) или в серию изображений страниц. Некоторые провайдеры работают над нативной поддержкой документов, но пока это задача клиентского кода.

Как попасть в waitlist официального Llama API от Meta?

Через llama.developer.meta.com - форма регистрации интереса. Процесс небыстрый, Meta приоритизирует корпоративные аккаунты. Для большинства задач сторонние провайдеры работают не хуже.

Что лучше: Together AI или Fireworks для Llama 4 по скорости?

Fireworks обычно показывает меньший TTFT (time to first token) - критично для интерактивных приложений. Together предлагает более широкий каталог и fine-tuning. Для боевой среды с требованиями к скорости - Fireworks, для экспериментов и разнообразия - Together.

Llama 4 vs GPT-4o: в каких задачах опенсорс-модель выигрывает?

Llama 4 Maverick конкурентен с GPT-4o на многих задачах при цене в 5-10 раз ниже. GPT-4o сохраняет преимущество на сложных многошаговых рассуждениях, следовании очень детальным инструкциям и некоторых задачах кодинга. На суммаризации, извлечении данных, вопросах-ответах по документам и генерации кода - разница минимальна.

Что делать прямо сейчас

  1. Зарегистрируйтесь на Together AI (api.together.xyz) - получите $5 на старте.
  2. Скопируйте код из раздела "Первый запрос" и замените текст документа на свой прайс или договор.
  3. Запустите скрипт - получите анализ за 2 минуты вместо 2 часов ручной работы.
  4. Если нужно быстрее - используйте Fireworks, если нужна надёжность - OpenRouter.

AI Компас (t.me/kosmoslab_ai) - канал для предпринимателей в РФ и СНГ, которые применяют AI в своём бизнесе без программиста. Разбираем инструменты и схемы - без курсов и теории.