Перейти к основному содержимому

Каталог провайдеров

Руководство по API Moonshot Kimi

Используйте общую конечную точку чата для клиентов с актуальными опубликованными идентификаторами моделей Moonshot Kimi и сведениями о доступности сервиса.

Порядок работы
  1. Выберите продукт APIРазличайте запросы инференса и процессы обучения моделей.
  2. Изучите контрактИспользуйте соответствующую документацию API и справочник OpenAPI.
  3. Создайте ключ с нужными разрешениямиСоздайте клиентский API-ключ и безопасно сохраните его.
  4. Настройте и проверьте интеграциюОтправьте описанный в документации запрос и изучите ответ.
  5. Следите за использованием и обновляйте ключиПроверяйте использование и при необходимости отзывайте или заменяйте ключи.

Опубликованные модели Moonshot Kimi

Названия, точные идентификаторы маршрутизации, версии и статус инференса берутся из включённого реестра моделей, если он доступен. Пустой идентификатор означает, что каталог не опубликовал значение маршрутизации. Не выводите его из названия модели.

Разработчик
Moonshot AI
Доступ для новых клиентов
Доступен
Название моделиТочный идентификатор моделиВерсияСтатус инференса
Kimi K3.1 Pro kimi-k3.1-pro — Активна · Доступна для инференса
Kimi K3.1 Pro Highspeed kimi-k3.1-pro-highspeed — Активна · Доступна для инференса
Kimi K3 Идентификатор маршрутизации не опубликован — Без публичного идентификатора маршрутизации нельзя подтвердить возможность прямого вызова модели.
Kimi K2.7 Code Идентификатор маршрутизации не опубликован — Без публичного идентификатора маршрутизации нельзя подтвердить возможность прямого вызова модели.
Kimi K2.6 Идентификатор маршрутизации не опубликован — Без публичного идентификатора маршрутизации нельзя подтвердить возможность прямого вызова модели.
Kimi K2.5 Идентификатор маршрутизации не опубликован — Без публичного идентификатора маршрутизации нельзя подтвердить возможность прямого вызова модели.

Использование провайдера

  • Выбирайте модель по точному идентификатору и проверяйте её статус перед настройкой приложения. Отображаемая подпись предназначена для людей; в поле модели допустим только идентификатор.
  • На странице каждого провайдера приведены примеры для OpenAI-совместимого протокола и Claude Messages. Выберите протокол, используемый вашим клиентом; выбранная модель также должна поддерживать нужные возможности.
  • Если сервис доступен только действующим клиентам, используйте уже имеющийся доступ учётной записи и не воспринимайте опубликованный список моделей как предложение оформить новую подписку.

Примеры API моделей

Выберите опубликованный идентификатор модели, протокол API и язык, чтобы увидеть пример запроса. Храните API-ключи клиентов на доверенном сервере.

Требования протоколов

Для запросов, совместимых с OpenAI, используется POST /chat/completions по настроенному базовому URL API клиента (по умолчанию https://fusionpointai.com/api/v1). Для аутентификации передайте ключ клиента с доступом к инференсу в заголовке Authorization: Bearer. Полный URL по умолчанию: https://fusionpointai.com/api/v1/chat/completions.

Поддерживаемые возможности

Текущая конечная точка чата, совместимая с OpenAI, обрабатывает текстовые сообщения синхронно. Потоковая передача и вызов инструментов этой конечной точкой не поддерживаются.

Установка клиентских библиотек

Установите библиотеки для Python и Node.js как отдельные пакеты:

Python: pip install openai anthropic

Node.js: npm install openai @anthropic-ai/sdk

cURL
curl 'https://fusionpointai.com/api/v1/chat/completions' \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "kimi-k3.1-pro",
    "messages": [
        {
            "role": "user",
            "content": "Summarize this in one sentence."
        }
    ],
    "temperature": 0.7,
    "max_tokens": 300
}'

Сценарии запросов

Безопасная настройка API-ключей

Создайте API-ключ клиента с доступом к инференсу и передайте его серверному процессу через менеджер секретов или переменные окружения.

  1. Задайте FUSIONPOINTAI_API_KEY в окружении сервера. Не встраивайте ключ в код браузера и не добавляйте его в систему контроля версий.
  2. Используйте HTTPS и ограничьте ключ учётной записью и правами на инференс, которые необходимы приложению.
  3. Удаляйте из журналов, трассировок и обращений в поддержку заголовки Authorization и x-api-key. Отзовите ключ, если он мог стать известен посторонним.
Bash
export FUSIONPOINTAI_API_KEY="YOUR_CUSTOMER_API_KEY"

Точный идентификатор модели

Поле model задаёт маршрутизацию запроса, а не отображаемое название. Выбирайте идентификатор, опубликованный в актуальном каталоге моделей.

  1. Выберите активную или устаревшую модель, для которой указан статус доступности инференса.
  2. Скопируйте идентификатор без изменений, включая знаки препинания и суффикс версии. Не составляйте его по названию модели.
  3. Если идентификатор не опубликован, дождитесь его появления в каталоге, а не подставляйте предполагаемое значение.
Python
model_id = "kimi-k3.1-pro"
# Use this exact identifier with either protocol.

Системные инструкции и диалог из нескольких сообщений

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

  1. В запросах, совместимых с OpenAI, передавайте сообщения system, user и assistant по порядку, в строковом формате содержимого.
  2. Для Claude Messages указывайте системную инструкцию и упорядоченные реплики user/assistant в предусмотренных протоколом полях.
  3. Оставляйте в контексте только необходимые приложению сообщения и учитывайте ограничение контекста выбранной модели.
Python
response = client.messages.create(
    model="kimi-k3.1-pro",
    max_tokens=512,
    system="Answer in clear, concise German.",
    messages=[
        {"role": "user", "content": "What is an API?"},
        {"role": "assistant", "content": "An API lets software exchange requests and responses."},
        {"role": "user", "content": "Give a practical example."},
    ],
)
for block in response.content:
    if block.type == "text":
        print(block.text)

Ответы в формате JSON

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

  1. Используйте средства структурированного вывода, доступные для выбранного протокола и вышестоящей модели.
  2. Считайте сгенерированный JSON недоверенными данными: разберите его, проверьте обязательные поля и типы, предусмотрите обработку некорректного результата.
  3. Не предполагайте, что сочетание модели и протокола поддерживает режим JSON, если это не указано в документации модели.
Python
import json

# JSON is generated content, not trusted application input.
response = client.messages.create(
    model="kimi-k3.1-pro", max_tokens=256,
    messages=[{"role": "user", "content": 'Return only JSON with a string field named "summary". Explain an API in one sentence.'}],
)
text = "".join(block.text for block in response.content if block.type == "text")
try:
    result = json.loads(text)
    if not isinstance(result, dict) or not isinstance(result.get("summary"), str):
        raise ValueError("Unexpected response schema")
    print(result["summary"])
except (json.JSONDecodeError, ValueError) as error:
    print("Handle invalid model output:", error)

Потоковая передача SSE в реальном времени

Потоковый режим зависит от выбранного протокола и вышестоящей модели. Обычный ответ JSON не является потоком.

  1. Текущая совместимая с OpenAI конечная точка чата возвращает текст синхронно и не поддерживает потоковую передачу.
  2. Для Claude Messages включайте потоковый режим, если его поддерживает выбранная вышестоящая модель; прокси передаёт исходные события, отправляемые сервером (SSE).
  3. Обрабатывайте события по мере поступления, корректно завершайте обработку при окончании или ошибке и не считайте частичный вывод готовым ответом.
Python
# client is the Anthropic client configured above.
with client.messages.stream(
    model="kimi-k3.1-pro", max_tokens=512,
    messages=[{"role": "user", "content": "Explain API authentication."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    final_message = stream.get_final_message()
print("\nStop reason:", final_message.stop_reason)

Инструменты, блоки содержимого и ошибки

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

  1. Совместимый с OpenAI чат сейчас не поддерживает ни вызов инструментов, ни нетекстовые блоки содержимого.
  2. Claude сохраняет исходные блоки содержимого и данные вызова и результатов инструментов, если это поддерживает выбранная вышестоящая модель. Перед выполнением проверяйте имена инструментов и аргументы.
  3. Проверяйте HTTP-статус и тело ответа, различайте ошибки аутентификации, прав доступа, валидации и ограничения частоты запросов. Временные ошибки повторяйте с увеличивающимися интервалами.
Python
import json
from datetime import datetime, timezone
from anthropic import APIError

messages = [{"role": "user", "content": "What time is it in UTC?"}]
tools = [{
    "name": "current_utc_time", "description": "Read the current UTC time.",
    "input_schema": {"type": "object", "properties": {}, "additionalProperties": False},
}]
try:
    reply = client.messages.create(model="kimi-k3.1-pro", max_tokens=256, messages=messages, tools=tools)
    results = []
    for block in reply.content:
        if block.type == "tool_use":
            if block.name != "current_utc_time" or block.input != {}:
                raise ValueError("Unapproved tool request")
            results.append({"type": "tool_result", "tool_use_id": block.id,
                            "content": json.dumps({"utc": datetime.now(timezone.utc).isoformat()})})
    if results:
        messages.append({"role": "assistant", "content": reply.content})
        messages.append({"role": "user", "content": results})
        reply = client.messages.create(model="kimi-k3.1-pro", max_tokens=256, messages=messages, tools=tools)
    print("".join(block.text for block in reply.content if block.type == "text"))
except APIError as error:
    # Log status only; never log keys or private prompts.
    print("API request failed:", getattr(error, "status_code", None))

Часто задаваемые вопросы

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

Используйте только точный идентификатор, опубликованный для инференса. Отображаемое название не задаёт маршрутизацию; неопубликованный идентификатор нельзя угадывать.

В какой переменной окружения хранить ключ клиента?

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

Какой URL указать в клиенте OpenAI?

Используйте настроенный базовый URL API клиента; по умолчанию это https://fusionpointai.com/api/v1. Конечная точка chat completions добавляет /chat/completions.

Почему базовый URL Claude SDK отличается от URL для cURL?

Anthropic SDK сам добавляет /v1/messages, поэтому задайте ему базовый URL https://fusionpointai.com/api. В прямом HTTP-запросе указывается полный URL /api/v1/messages.

Поддерживает ли совместимый с OpenAI чат потоковую передачу и инструменты?

Нет. Текущая конечная точка поддерживает только синхронные текстовые сообщения; потоковая передача и вызов инструментов недоступны.

Все ли модели Claude поддерживают блоки, инструменты и потоковую передачу?

Нет. Эти возможности сохраняются, только если их поддерживает выбранная вышестоящая модель. Проверьте возможности модели и предусмотрите обработку неподдерживаемых запросов.

Claude Messages · POST /messages

Для запросов Claude Messages используется POST /api/v1/messages. Передайте ключ клиента в заголовке x-api-key и укажите anthropic-version: 2023-06-01. Базовый URL Anthropic SDK — https://fusionpointai.com/api, поскольку SDK сам добавляет /v1/messages. Также поддерживается аутентификация Bearer.

Прокси Claude Messages сохраняет исходные блоки содержимого и данные инструментов, а также передаёт в реальном времени события, отправляемые сервером (SSE), если выбранная вышестоящая модель их поддерживает.

ПолеТипОбязательноеОграничения
model string Да {"minLength":1,"maxLength":160}
max_tokens integer Да {"minimum":1,"maximum":100000}
messages array Да {"minItems":1,"maxItems":100,"items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","maxLength":80}},"additionalProperties":true}}]}}}}
system string | array Нет {"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string"}},"additionalProperties":true}}]}
stream boolean Нет {"default":false}
temperature number Нет {"minimum":0,"maximum":1}
top_p number Нет {"minimum":0,"maximum":1}
top_k integer Нет {"minimum":0,"maximum":100000}
stop_sequences array Нет {"items":{"type":"string"}}
tools array Нет {"items":{"type":"object","additionalProperties":true}}
tool_choice object Нет {"additionalProperties":true}
thinking object Нет {"additionalProperties":true}
metadata object Нет {"additionalProperties":true}
output_config object Нет {"additionalProperties":true}
service_tier string Нет []
Claude Messages · Пример
{
    "id": "msg_example",
    "type": "message",
    "role": "assistant",
    "model": "kimi-k3.1-pro",
    "content": [
        {
            "type": "text",
            "text": "A concise answer to the supplied question."
        }
    ],
    "stop_reason": "end_turn",
    "stop_sequence": null,
    "usage": {
        "input_tokens": 12,
        "output_tokens": 10
    }
}
{"type":"error","error":{"type":"authentication_error","message":"Invalid or missing API key."}}

Первый запрос

Отправляйте HTTPS-запросы на указанный ниже базовый URL. Для текстового чата, совместимого с OpenAI, используйте POST /chat/completions, а для Claude Messages — POST /messages. Выберите протокол в рабочей области моделей и используйте соответствующие ему точный URL и формат JSON.

Базовый URL API: https://fusionpointai.com/api/v1

Создайте клиентский API-ключ или управляйте им в настройках API-ключей своей учётной записи. Передавайте ключ как bearer-токен и храните его на доверенном сервере. Не вставляйте его в код браузера, систему контроля версий или общедоступные журналы.

Ключу необходима область действия ai:inference и доступ к соответствующей клиентской подписке. Публичный API-ключ не является паролем от учётной записи, и им нельзя делиться.

В этих примерах используются зарегистрированная JSON-конечная точка chat-completion и совместимые с OpenAI клиенты для Python и Node.js. Сохраните ключ в переменной окружения FUSIONPOINTAI_API_KEY. В поле модели указывайте только точный идентификатор из списка выше.

Shell
# Install the client for your application language.
# Python:
python -m pip install openai
# Node.js:
npm install openai

# Bash: enter the key without storing it in shell history.
read -rs -p 'FusionPointAI API key: ' FUSIONPOINTAI_API_KEY
export FUSIONPOINTAI_API_KEY
printf '\n'
# After finishing:
# unset FUSIONPOINTAI_API_KEY
cURL — Пример
curl 'https://fusionpointai.com/api/v1/chat/completions' \
  -H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "kimi-k3.1-pro",
    "messages": [
        {
            "role": "user",
            "content": "Summarize this in one sentence."
        }
    ],
    "temperature": 0.7,
    "max_tokens": 300
}'
Python — Пример
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["FUSIONPOINTAI_API_KEY"],
    base_url="https://fusionpointai.com/api/v1",
)

response = client.chat.completions.create(
    model="kimi-k3.1-pro",
    messages=[{"role": "user", "content": "Summarize this in one sentence."}],
    temperature=0.7,
    max_tokens=300,
)
print(response.choices[0].message.content)
Node.js — Пример
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.FUSIONPOINTAI_API_KEY,
  baseURL: "https://fusionpointai.com/api/v1",
});

const response = await client.chat.completions.create({
  model: "kimi-k3.1-pro",
  messages: [{ role: "user", content: "Summarize this in one sentence." }],
  temperature: 0.7,
  max_tokens: 300,
});
console.log(response.choices[0].message.content);

OpenAI · Формат запросов и ответов

Конечная точка принимает данные в формате JSON. Сообщения передаются по порядку; у каждого сообщения должна быть поддерживаемая роль и строковое содержимое. Необязательные параметры генерации должны укладываться в ограничения проверки ниже. Успешный ответ — это JSON-объект chat.completion с массивом choices и, если провайдер возвращает такие данные, сведениями об использовании токенов.

ПолеТипОбязательноеОграничения
modelstringДаСтрока длиной не более 160 символов; используйте опубликованный идентификатор.
messagesarrayДаМассив из 1–100 сообщений.
messages[].rolestringДаДопустимые роли: system, user или assistant.
messages[].contentstringДаСодержимое каждого сообщения — строка длиной не более 100 000 символов.
temperaturenumberНетНеобязательное число от 0 до 2.
max_tokensintegerНетНеобязательное целое число от 1 до 100 000; у выбранной модели может быть более низкий предел генерации.

Структура ответа

Успешный ответ содержит поля id, object (chat.completion), created, model и choices. Каждый элемент choices содержит индекс, сообщение assistant и finish_reason. В поле usage могут быть указаны количества токенов. Даже если запрос прошёл проверку шлюза, на него могут распространяться ограничения конкретного провайдера.

Пример · JSON
{
    "id": "chatcmpl_example",
    "object": "chat.completion",
    "created": 1700000000,
    "model": "kimi-k3.1-pro",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "A concise summary of the supplied text."
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 12,
        "completion_tokens": 10,
        "total_tokens": 22
    }
}

Доступ, ограничения и безопасная эксплуатация

В рамках действующих клиентских подписок количество запросов и токенов не учитывается по квоте; для sandbox-ключей действует опубликованный месячный лимит. Условия подписки не отменяют технических ограничений модели и вышестоящей системы.

  • Окно контекста модели, максимальный объём ответа, поддерживаемые возможности запроса и временные ограничения трафика на стороне провайдера различаются. Перед отправкой производственного трафика ознакомьтесь со сведениями о провайдере и модели.
  • На конечной точке действует ограничение приложения: 60 запросов в минуту для соответствующей учётной записи ограничения частоты. HTTP 429 также может указывать на временное ограничение трафика вышестоящей системы. Повторяйте запросы с увеличивающимися интервалами, а не в плотном цикле.
  • Используйте HTTPS, храните ключи на сервере, предоставляйте только необходимую область действия для инференса и незамедлительно отзывайте ключ при подозрении на утечку.
  • Chat Completions поддерживает синхронный обмен текстом. Claude Messages отдельно поддерживает исходные блоки содержимого, инструменты и SSE, если это разрешено выбранной моделью. Другие конечные точки провайдеров в эти контракты не входят.

Доступ к провайдеру и требования к учётной записи

Для аутентификации используйте клиентский API-ключ с областью действия ai:inference, связанный с учётной записью, которой доступен этот сервис. В каталоге указано, разрешено ли сейчас подключение новых клиентов. Он не предоставляет доступ, не оформляет подписку и не отменяет разрешения учётной записи или ключа.

Ошибки и устранение неполадок

Ошибки проверки и непригодные ответы провайдера возвращаются конечной точкой в виде JSON-объекта ошибки с полями message, type и code. При ошибке проверки также могут содержаться сведения о поле. Не указывайте API-ключи и конфиденциальный текст запросов в обращениях в поддержку.

Ошибки проверки запроса и сбои провайдера, возвращаемые операцией чата, содержатся в объекте error. Промежуточное ПО аутентификации, проверки области действия и ограничения частоты может вместо этого вернуть поле message в корне ответа. Учитывайте и статус, и тело ответа.

HTTP-статусЗначение и дальнейшие действия
400Недопустимое тело запроса. Проверьте обязательные поля, число сообщений и их содержимое, значения ролей, temperature и max_tokens.
401Bearer-ключ отсутствует или недействителен. Убедитесь, что ключ активен и передан в заголовке Authorization.
403Возможно, ключу не предоставлена необходимая область действия для инференса или доступ к учётной записи. Проверьте разрешения ключа и доступ к подписке.
429Сработало ограничение частоты запросов или временное ограничение трафика вышестоящей системы. Снизьте частоту и повторяйте запросы с экспоненциально растущими интервалами.
500Провайдер не вернул пригодный ответ или произошёл сбой сервиса. Повторяйте запросы с осторожностью; при обращении в поддержку укажите время и идентификатор запроса без конфиденциальных данных.

Часто задаваемые вопросы

Можно ли указать в поле модели отображаемое название?

Только если эта точная строка отдельно опубликована как идентификатор маршрутизации. Используйте столбец с идентификатором. Если он пуст, значение маршрутизации здесь не опубликовано.

Можно ли использовать Claude SDK?

Да. Выберите Claude в рабочей области моделей и используйте Anthropic SDK с указанным базовым URL. SDK отправляет нативные запросы Messages, а не Chat Completions. Возможности зависят от конкретной модели.

Почему указанная в каталоге модель может не работать?

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

Что указать в обращении в поддержку?

Укажите провайдера, точный идентификатор модели, время запроса, HTTP-статус и идентификатор запроса без конфиденциальных данных. Удалите API-ключи и конфиденциальный текст запросов.