Дата публикации
ai_products

Kimi K3: в Китае открыли исходники ИИ‑модели на 2,8 трлн параметров с контекстом 1 млн токенов

Что нового

Moonshot AI представила Kimi K3 — флагманскую ИИ‑модель с открытым исходным кодом и 2,8 трлн параметров. Это первая открытая модель такого масштаба (класс примерно 3 трлн параметров).

Ключевые факты:

  • 2,8 трлн параметров, архитектура Mixture of Experts с 896 экспертами, из которых при запросе активно только 16.
  • Контекст: до 1 000 000 токенов. Это позволяет загружать огромные кодовые базы, документацию, базы знаний и вести длинные диалоги.
  • Встроенная работа с изображениями и видео: модель понимает скриншоты, картинки и видеофайлы.
  • Нативный «thinking mode»: у Kimi K3 всегда включён режим рассуждений; его можно настраивать параметром reasoning_effort (сейчас доступен уровень max).
  • Открытый исходный код: Moonshot AI обещает выложить полные веса модели до 27 июля 2026 года.
  • Масштабируемость: по внутренним расчётам Moonshot AI, Kimi K3 примерно в 2,5 раза эффективнее Kimi K2 по «выходу возможностей» на единицу вычислений.
  • Автоматический кэш контекста: модель сама переиспользует уже обработанные длинные префиксы без явной работы с cache ID.
  • Плоская тарификация: единая поминутная/потокеновая оплата без наценки за длинный контекст, отдельные цены для cache hit и cache miss.

За последние 12 месяцев (07.2025–07.2026) модели Kimi в 9 месяцев подряд оставались самыми крупными среди открытых по количеству параметров. Kimi K3 продолжает эту линию.

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

Архитектура

Под капотом у Kimi K3 несколько ключевых элементов:

  • Kimi Delta Attention (KDA) — гибридный линейный механизм внимания. Он оптимизирует работу с длинными последовательностями, чтобы модель не «захлебывалась» на контексте в сотни тысяч и миллион токенов.
  • Attention Residuals (AttnRes) — дополнительные остаточные связи вокруг блоков внимания. Они помогают информации проходить через очень глубокую сеть без потери сигнала, что критично для модели триллионного масштаба.
  • Stable LatentMoE — реализация Mixture of Experts с высокой разреженностью. Из 896 экспертов модель активирует только 16 на каждый токен. Это снижает реальные затраты вычислений при огромном общем числе параметров.

За счёт этих решений Moonshot AI заявляет примерно 2,5‑кратный рост эффективности масштабирования по сравнению с Kimi K2: при тех же вычислительных ресурсах Kimi K3 выдаёт заметно больше полезных возможностей.

Длинный контекст и кэш

Kimi K3 поддерживает контекст до 1 000 000 токенов и автоматически кэширует длинные префиксы:

  • вам не нужно управлять cache ID или временем жизни кэша;
  • достаточно не менять длинный системный или пользовательский префикс между запросами;
  • при повторных запросах модель пытается использовать кэш и снижает стоимость и задержку для уже «прочитанной» части.

Режим рассуждений

У Kimi K3 всегда включён thinking mode:

  • параметр reasoning_effort сейчас принимает только значение "max";
  • модель генерирует два потока при стриминге: reasoning_content (ход рассуждений) и content (финальный ответ);
  • для сложных задач (математика, доказательства, длинные цепочки логики) это даёт более развёрнутые и устойчивые решения.

Визуальное понимание

Kimi K3 изначально умеет работать с изображениями и видео:

  • принимает локальные картинки в Base64 и видео через загрузку файла и схему ms://<file-id>;
  • может использовать скриншоты, макеты интерфейсов, кадры из игр, чертежи CAD как часть контекста для рассуждений и генерации кода.

При этом модель не поддерживает публичные URL‑адреса изображений — только Base64 и ms://.

Инструменты и агенты

Kimi K3 интегрируется с инструментами через стандартный формат функций:

  • поддерживает tools и tool_calls в стиле Chat Completions API;
  • умеет динамически загружать инструменты из системного сообщения без текста (role: system, поле tools);
  • официальные инструменты подключаются через систему Formula (/tools и /fibers).

Модель рассчитана на агентные сценарии: она может последовательно вызывать несколько инструментов, обрабатывать их ответы и строить финальный ответ пользователю.

Что это значит для вас

Когда Kimi K3 полезна

  1. Разработка ПО и работа с большими кодовыми базами

    • анализ и рефакторинг крупных монорепозиториев, которые не помещаются в обычный контекст;
    • долгие инженерные задачи с минимальным участием человека — от постановки задачи до серии патчей и тестов;
    • координация терминальных инструментов и вспомогательных сервисов через tool calls.
  2. Комбинация кода и визуала

    • фронтенд‑разработка по скриншотам: модель видит интерфейс и предлагает правки в коде;
    • геймдев: разбор скриншотов, UI, игровых сцен с последующей корректировкой логики или ассетов;
    • CAD и инженерные проекты: анализ визуальных схем и текстовой документации в одном контексте.
  3. Знаниеёмкая работа

    • глубокий анализ внутренних баз знаний, технической документации, отчётов объёмом в сотни тысяч токенов;
    • построение сложных цепочек рассуждений по материалам из разных источников в одном длинном диалоге;
    • автоматизация рутинных аналитических задач, где агент последовательно использует инструменты и документы.
  4. Агентные сценарии и внутренние ассистенты

    • корпоративные ассистенты, которые работают с внутренними базами, API и инструментами;
    • прототипирование сложных цепочек действий: от запроса пользователя до вызова нескольких внешних сервисов через Formula.

Когда Kimi K3 может не подойти

  • Если вам не нужен миллион токенов и триллионный масштаб, а задачи ограничиваются короткими запросами и простыми диалогами, Kimi K3 может оказаться избыточной по ресурсам.
  • Параметры генерации (temperature, top_p, n, штрафы за повторения) жёстко зафиксированы. Если вы привыкли тонко настраивать стиль и вариативность через эти параметры, здесь такой возможности нет.
  • Визуальный ввод не принимает публичные URL. Если ваш пайплайн заточен под прямую подачу ссылок на картинки, придётся добавлять конвертацию в Base64 или загрузку файлов.
  • В ближайшее время Moonshot AI не рекомендует использовать веб‑поиск в продакшене: он сейчас обновляется.

Сервис разворачивается через API Moonshot AI. Для доступа из России может потребоваться VPN и обход региональных ограничений — это зависит от политики провайдера и локальных условий.

Место на рынке

Kimi K3 — одна из самых крупных открытых моделей по числу параметров: 2,8 трлн в архитектуре MoE. По масштабу она относится к классу примерно 3 трлн параметров.

Moonshot AI делает ставку не только на размер, но и на открытость весов (до 27 июля 2026 года) и длинный контекст в 1 млн токенов. Это важно для команд, которым нужны:

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

Прямых численных сравнений с GPT‑5, Claude 4 или другими флагманами в исходном материале нет. Moonshot AI делает акцент на другом:

  • масштаб открытой модели (2,8 трлн параметров);
  • эффективность масштабирования относительно собственного поколения Kimi K2 (рост примерно в 2,5 раза);
  • длительное лидерство по размеру среди открытых моделей в течение 9 из 12 последних месяцев.

Для исследовательских команд и компаний, которые делают ставку на open‑source‑стек, Kimi K3 закрывает нишу «максимально крупная открытая модель с длинным контекстом и визуальным вводом».

Установка

Для работы с Kimi K3 нужен Python 3.9+ и официальный SDK OpenAI, настроенный на эндпоинт Moonshot AI.

Установка SDK:

python3 -m pip install --upgrade 'openai>=1.0'

Инициализация клиента:

import os
from openai import OpenAI

client = OpenAI(
    api_key = os.environ["MOONSHOT_API_KEY"],
    base_url = "https://api.moonshot.ai/v1",
)

Как запустить

Базовый запрос

Python:

completion = client.chat.completions.create(
    model = "kimi-k3",
    messages = [{"role": "user", "content": "Introduce Kimi K3 in one sentence."}],
)
print(completion.choices[0].message.content)

cURL:

curl https://api.moonshot.ai/v1/chat/completions \
  --header "Authorization: Bearer $MOONSHOT_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "kimi-k3",
    "messages": [{"role": "user", "content": "Introduce Kimi K3 in one sentence."}]
  }'

Настройка усилия рассуждений

Kimi K3 всегда работает в режиме рассуждений. Сейчас доступен уровень "max" через поле reasoning_effort.

completion = client.chat.completions.create(
    model = "kimi-k3",
    reasoning_effort = "max",
    messages = [{
        "role": "user",
        "content": "Prove that the square root of 2 is irrational."
    }],
)
print(completion.choices[0].message.content)

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

Стриминг с разделением рассуждений и ответа

Модель в потоковом режиме отдаёт отдельные дельты для reasoning_content и финального content.

stream = client.chat.completions.create(
    model = "kimi-k3",
    messages = [{"role": "user", "content": "Explain why the sky is blue."}],
    stream = True,
)

for chunk in stream:
    delta = chunk.choices[0].delta
    reasoning = getattr(delta, "reasoning_content", None)
    if reasoning:
        print(reasoning, end="", flush=True)
    if delta.content:
        print(delta.content, end="", flush=True)

Визуальный ввод: изображение

Для vision‑сообщений поле content должно быть массивом объектов, а не сериализованной строкой.

Локальное изображение:

import base64
from pathlib import Path

image_data: str = base64.b64encode(Path("image.png").read_bytes()).decode()

completion = client.chat.completions.create(
    model = "kimi-k3",
    messages = [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/png;base64,{image_data}",
                    },
                },
                {
                    "type": "text",
                    "text": "Describe this image.",
                },
            ],
        }
    ],
)

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

Визуальный ввод: видео

from pathlib import Path

video = client.files.create(
    file = Path("video.mp4"),
    purpose = "video",
)

try:
    completion = client.chat.completions.create(
        model = "kimi-k3",
        messages = [
            {
                "role": "user",
                "content": [
                    {
                        "type": "video_url",
                        "video_url": {
                            "url": f"ms://{video.id}",
                        },
                    },
                    {
                        "type": "text",
                        "text": "Summarize this video.",
                    },
                ],
            }
        ],
    )
    print(completion.choices[0].message.content)
finally:
    client.files.delete(video.id)

Структурированный вывод (JSON Schema)

Для жёсткого контроля структуры ответа используйте response_format с json_schema и strict: true. Разбирайте только message.content, а не reasoning_content.

import json

completion = client.chat.completions.create(
    model = "kimi-k3",
    messages = [
        {
            "role": "user",
            "content": "Lin is 28 years old. Extract the name and age.",
        }
    ],
    response_format = {
        "type": "json_schema",
        "json_schema": {
            "name": "person",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "age": {"type": "integer"},
                },
                "required": ["name", "age"],
                "additionalProperties": False,
            },
        },
    },
)

person: dict[str, object] = json.loads(
    completion.choices[0].message.content or "{}"
)
print(person)

Partial Mode: продолжение заданного префикса

Можно попросить модель продолжить заранее заданный текст, добавив сообщение ассистента с partial: true.

prefix: str = "Conclusion: "

completion = client.chat.completions.create(
    model = "kimi-k3",
    messages = [
        {
            "role": "user",
            "content": "In one sentence, explain why API compatibility matters.",
        },
        {
            "role": "assistant",
            "content": prefix,
            "partial": True,
        },
    ],
)

print(prefix + (completion.choices[0].message.content or ""))

Инструменты: простой погодный агент

Пример минимального цикла агента, который вызывает инструмент get_weather.

import json
from typing import Any

tools: list[dict[str, Any]] = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the weather for a city",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                },
                "required": ["city"],
            },
        },
    }
]

messages: list[Any] = [
    {
        "role": "user",
        "content": "What is the weather in San Francisco today?",
    }
]

first = client.chat.completions.create(
    model = "kimi-k3",
    messages = messages,
    tools = tools,
    tool_choice = "required",
)

assistant_message = first.choices[0].message
messages.append(assistant_message)

for tool_call in assistant_message.tool_calls or []:
    arguments: dict[str, str] = json.loads(tool_call.function.arguments)
    result: str = json.dumps(
        {
            "city": arguments["city"],
            "weather": "sunny",
            "temperature_c": 24,
        }
    )
    messages.append(
        {
            "role": "tool",
            "tool_call_id": tool_call.id,
            "content": result,
        }
    )

final = client.chat.completions.create(
    model = "kimi-k3",
    messages = messages,
    tools = tools,
)

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

Динамическая загрузка инструментов

Можно объявить инструмент прямо в системном сообщении без текста. Этот инструмент будет доступен с этого момента истории диалога.

from typing import Any

dynamic_messages: list[dict[str, Any]] = [
    {
        "role": "user",
        "content": "Calculate 23 times 47.",
    },
    {
        "role": "system",
        "tools": [
            {
                "type": "function",
                "function": {
                    "name": "calculate",
                    "description": "Evaluate an arithmetic expression",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "expression": {
                                "type": "string",
                                "description": "The arithmetic expression to evaluate",
                            }
                        },
                        "required": ["expression"],
                    },
                },
            }
        ],
    },
]

completion = client.chat.completions.create(
    model = "kimi-k3",
    messages = dynamic_messages,
)

print(completion.choices[0].message.tool_calls)

Важно сохранять это системное сообщение в истории при следующих запросах: сервер сам его не запоминает.

1M контекст и автокэш на примере

Пример использования большой базы знаний с автоматическим кэшированием:

from pathlib import Path

knowledge: str = Path("knowledge-base.md").read_text(encoding="utf-8")

for question in [
    "Summarize the key conclusions.",
    "List three implementation risks.",
]:
    completion = client.chat.completions.create(
        model = "kimi-k3",
        messages = [
            {"role": "system", "content": knowledge},
            {"role": "user", "content": question},
        ],
    )
    print(completion.choices[0].message.content)

Здесь длинный системный префикс (knowledge) остаётся неизменным, и модель может использовать кэш между запросами.

Ограничения и биллинг

Ключевые технические ограничения:

  • reasoning_effort сейчас поддерживает только значение "max".
  • max_completion_tokens по умолчанию — 131072. Можно поднять до 1 048 576 токенов.
  • Параметры генерации зафиксированы и не настраиваются: temperature=1.0, top_p=0.95, n=1, presence_penalty=0, frequency_penalty=0.
  • Для многоходовых диалогов и инструментов нужно всегда возвращать полное сообщение ассистента без изменений.
  • Визуальный ввод не поддерживает публичные URL‑картинок. Используйте Base64 или ms://<file-id>, а content делайте массивом объектов.
  • Веб‑поиск сейчас обновляют, его не рекомендуют использовать в продакшене.

Биллинг:

  • единая поминутная/потокеновая модель оплаты без деления по длине контекста;
  • отдельные ставки для входящих токенов с кэшем и без него, а также для выходящих токенов;
  • подробные цены описаны в документации Moonshot AI в разделе Model Pricing / Kimi K3 pricing.

Для команд, которые строят свои продукты вокруг открытых моделей и длинного контекста, Kimi K3 даёт редкую комбинацию: триллионный масштаб, 1M контекста, визуальный ввод и обещанные открытые веса к середине 2026 года.


Читайте также

🔗 Источник: https://www.kimi.com/blog/kimi-k3