СКАЧАТЬ PDF
Версия

Руководство пользователя Cotype

Перечень терминов

Таблица 1. Термины, используемые в руководстве Cotype.

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

Перечень сокращений

Таблица 2. Сокращения в руководстве Cotype.

Сокращение Описание
AI (Artificial Intelligence) Интеллект, демонстрируемый машинами, в частности компьютерными системами.
API (Application Programming Interface) Набор правил и инструментов для взаимодействия программного обеспечения. API предоставляет возможность различным приложениям обмениваться данными и функциональностью.
JSON (JavaScript Object Notation) Лёгкий формат обмена данными. Формат легко читается человеком и парсируется компьютером.
LLM (Large Language Model) Языковая модель, состоящая из нейронной сети со множеством параметров.
vLLM (Virtual Large Language Model) Сервис для инференса LLM модели и ее хранения

Введение

Настоящий документ представляет собой руководство пользователя (далее руководство) системы Cotype. Руководство описывает:

  • общее определение системы;
  • функции системы;
  • эксплуатацию системы через API-запросы;
  • взаимодействие с системой через веб-интерфейс.

Краткое описание возможностей

Cotype — это большая языковая модель для генерации и редактирования текстов, суммирования и анализа информации. Cotype включает в себя также веб-приложение для ее запуска и использования.

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

В следующей таблице приведены основные функции Cotype.

Таблица 3. Функции системы.

Функция Описание
Суммаризация текста Позволяет пользователям получать краткое и информативное содержание предоставленных текстовых материалов. Эта функция особенно полезна для быстрой обработки больших объемов информации. Она позволяет пользователям оперативно получать основные идеи и выводы без необходимости читать полный текст.
Извлечение информации из текстовых данных Пользователи могут получать конкретные данные из предоставленных текстов и выводить их в требуемом виде. Функция включает в себя идентификацию и извлечение важных фактов, числовых значений, дат, имен собственных и других значимых элементов текста. Это существенно облегчает процесс анализа и использования информации для различных бизнес-потребностей.
Творческая генерация Обеспечивает создание оригинального текстового контента, такого как статьи, диалоги или рассказы, на основе заданных параметров и требований пользователя. Это позволяет компаниям быстро генерировать уникальный контент для маркетинговых материалов, блогов, презентаций и других целей, снижая зависимость от ручного труда и ускоряя процесс создания качественного текста.
Классификация текстовых данных Cotype осуществляет систематизацию и организацию объектов, явлений или понятий по определенным критериям. Это позволяет пользователям структурировать информацию, облегчая ее поиск и анализ. Классификация может быть основана на различных параметрах, таких как темы, категории, приоритеты или другие специфические требования, что обеспечивает гибкость и точность в управлении текстовыми данными.
Ролевой отыгрыш Позволяет системе отвечать от лица заданного персонажа или представителя определенной профессии, ведя диалог в стиле, соответствующем требуемой специальности. Это обеспечивает более естественное и релевантное взаимодействие с пользователями, что особенно важно для задач, связанных с клиентской поддержкой, обучением и другими областями, требующими специфической коммуникации.
Ведение диалога с пользователем на естественном языке в режиме чата Обеспечивает интерактивное и динамичное общение, позволяя пользователям получать ответы на вопросы, выполнять команды и получать поддержку в реальном времени. Высокий уровень понимания и генерации естественного языка обеспечивает комфортное и интуитивно понятное взаимодействие, что способствует улучшению пользовательского опыта и повышению удовлетворенности клиентов.
Генерация идей на заданную тематику Дает возможность получать новые и креативные идеи, основанные на заданных темах или проблемах. Это особенно полезно для задач, связанных с инновациями, разработкой продуктов, маркетинговыми кампаниями и другими областями, где необходим свежий и оригинальный подход для решения поставленных задач.

Уровень подготовки пользователей

Пользователи Системы должны:

  • уметь взаимодействовать с системой через REST-API, осуществляя http-запросы через специализированные инструменты. Например, с помощью Postman и curl.
  • знать json-формат данных, используемый в API системы.

Перечень эксплуатационной документации, с которой необходимо ознакомиться пользователю

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

Назначение и условия применения

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

Пользователь может взаимодействовать с LLM Cotype:

  • через REST-API, отправляя http-запросы и получая ответы от LLM.
  • через чат-интерфейс - веб-приложение, предназначенное для взаимодействия с LLM через веб-интерфейс.

Для чат-интерфейса используется open source решение "NextChat".

Справочник по API

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

POST/v1/chat/completions

Основным методом для взаимодействия с моделью является метод POST/v1/chat/completions. Он предназначен для отправки списка сообщений в формате чата. На основе полученных входных данных, модель сгенерирует ответ на запрос пользователя. Метод может использоваться как для ведения диалогов, состоящих из нескольких последовательных сообщений, так и для выполнения задач, требующих однократного обращения без продолжительного разговора.

Тип запроса: POST
Запрос: https://IP_Address/v1/chat/completions
Где "IP_Address" необходимо заменить на IP-адрес вашей машины, если модель развёрнута внутри вашего контура. Если вы обращаетесь к демо-стенду внутри контура MWS AI, то адрес стенда будет передан вам отдельно.
Например: https://1.1.1.1:8000/v1/chat/completions

Таблица 4. Параметры запроса POST/v1/chat/completions

Имя Тип данных Значение Описание
messages (обязательный) string Текстовый ответ Одно сообщение или список из нескольких сообщений в формате чата, на основе которых, модель должна сгенерировать ответ.
model (обязательный) string ID ID модели, к которой вы обращаетесь. Вы можете узнать список доступных вам моделей через запрос GET/v1/models. Подробнее в разделе GET/v1/models.
temperature float Диапазон температуры — от 0 до 2. Рекомендованное значение: 0.5 Более низкие значения температуры приводят к более последовательным результатам (например, 0.2), в то время как более высокие значения генерируют более разнообразные и творческие результаты (например, 1.0).
top_p integer Диапазон — от 0 до 1. Чем ниже значение атрибута, тем более популярные и часто встречающиеся токены модель будет использовать для формирования ответа.
Рекомендуем изменять или этот атрибут, или temperature, но не оба сразу.
max_tokens integer Натуральное число, больше 0. Максимальное количество токенов, которые могут быть сгенерированы в ответ на запрос пользователя. Это позволяет регулировать длину ответа.
n integer Натуральное число больше 0. По умолчанию: 1. Количество ответов, которые модель сгенерирует.
stream boolean True/False. По умолчанию: false. Если установить значение true, ответ модели будет возвращаться не целиком сразу, а итеративно, по мере его формирования моделью.
stream_options object or null Параметры для потокового ответа. Устанавливайте только при установке stream: true.
   include_usage boolean Если установлен в true, то будет добавлен новый информационный фрагмент перед последним фрагментом [DONE]. Поле usage в этом фрагменте показывает статистику использования токенов для всего запроса, а поле choices всегда будет пустым массивом.
frequency_penalty integer Натуральное число от -2 до 2. Штраф за частоту — число между -2.0 и 2.0. Положительные значения штрафуют новые токены, на основе их текущей частоты в тексте, снижая вероятность того, что модель повторит одну и ту же строку.
presence_penalty integer Натуральное число от -2 до 2. Положительные значения накладывают штраф на новые токены в зависимости от того, появляются ли они в тексте до сих пор, увеличивая вероятность того, что модель будет говорить о новых темах.
logit_bias map По умолчанию: null Позволяет изменять вероятность появления указанных токенов в генерации. Принимает объект JSON, который сопоставляет токены (указанные по их идентификатору токена в токенизаторе) со связанным значением отклонения от -100 до 100. logit_bias позволяет запретить модели использовать некоторые ID токенов. Чем ближе значение параметра к -100, тем больше вероятность, что токен будет заблокирован моделью. Чем ближе значение параметра к + 100, тем больше вероятность что токен будет использован моделью.
logprobs boolean or null По умолчанию: false Задает возвращать ли логарифмические вероятности выходных токенов или нет. Если true, возвращает логарифмические вероятности каждого выходного токена, возвращенного в содержимом сообщения.
top_logprobs integer or null Целое число от 0 до 20, регулирующее количество наиболее вероятных токенов с их логарифмическими вероятностями, которые будут возвращены для каждого генерируемого токена. Если используется этот параметр, то logprobs должен быть установлен в значение true.
stop string/array/null Список строк, после которых останавливается генерация. Эти строки не будут включены в ответ.
parallel_tool_calls boolean По умолчанию: true Определяет следует ли включать параллельный вызов функций/тулов.
tool_choice string Определяет как модель выбирает tools. Значения - auto, none, required, или задайте функцию.
tools array Список функций (тулов) с описаниями и аргументами, среди которых модель может выбрать необходимые тулы и извлечь значения аргументов из промпта для использования приложением.
  function object Вызываемая функция.
     description string Описание функции, включая инструкцию, когда и как ее вызвать.
     name string Название функции.
     parameters object Параметры функции в json.
     strict boolean or null Задает следует ли включать строгое соблюдение схемы при генерации вызова функции. Если установлено значение true, модель будет точно соответствовать схеме, определенной в поле parameters. Если значение strict равно true, поддерживается только подмножество схем JSON.
  type string tool тип, например функция.
user string Уникальный идентификатор, представляющий вашего конечного пользователя, который может помочь отслеживать и обнаруживать злоупотребления.

Использование запроса POST/v1/chat/completions

  1. Укажите Bearer Token.
    При активной однотокеновой авторизации токен одинаковый у всех пользователей. При пользовательской авторизации выдаются индивидуальные токены.
  2. Заполните тело запроса.
    Обязательные параметры: model и messages. В model необходимо указать ID вашей модели. Получить ID модели можно с помощью запроса GET /v1/models, подробное описание смотрите в разделе GET /v1/models.
    В messages необходимо указать "role" и "content". У атрибута "role" может быть одно из двух значений:

    • "system" - обозначение для системного промпта, который задает роль модели, например, что модель должна отвечать как учитель или как политик. Необязательный атрибут;
    • "user" - обозначение пользовательского промпта, который содержит ваш вопрос или ваши инструкции для модели. Обязательный атрибут.
      В параметр "content" запишите ваш системный или пользовательский промпт.
    {
     "model": "//ID вашей модели",
     "messages": [
     {
       "role": "system",
       "content": "Отвечай как экскурсовод"
     },
     {
        "role": "user",
        "content": "Расскажи мне о Москве в 1 предложении."
     }]
    }

    Пример заполнения представлен ниже.

    {
     "model": "cotype_pro_2",
     "messages": [
     {
        "role": "system",
        "content": "Отвечай как экскурсовод"
     },
     {
       "role": "user",
       "content": "Расскажи мне о Москве в 1 предложении."
     } ]
    }

    Пример curl-запроса для выполнения запроса из командной строки:

    curl  https://{url}/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Token" \
    -d '{
          "model": "cotype_pro_2",
          "messages": [
          {
             "role": "system",
             "content": "Отвечай как экскурсовод"
          },
          {
             "role": "user",
             "content": " Расскажи мне о Москве в 1 предложении."
          }]
      }'

Результат выполнения запроса POST/v1/chat/completions

Результат успешного запроса:

{
    "id": "chatcmpl-db457e150dcb4c358fd2bab38db5d4f6",
    "object": "chat.completion",
    "created": 1748963043,
    "model": "cotype_pro_2",
    "choices": [
        {
            "index": 0,
            "message": {
               "role": "assistant",
               "reasoning_content": null,
               "content": "Москва, столица России, - это тысячелетний город с богатой историей и архитектурой, где древнерусские храмы и кремли, таких как Красная площадь и Московский Кремль, соседствуют с современными небоскребами и шумными улицами, создавая уникальный контраст между прошлым и настоящим."
               "tool_calls": []
            },
            "logprobs": null,
            "finish_reason": "stop",
            "stop_reason": null
        }
    ],
    "usage": {
        "prompt_tokens": 89,
        "total_tokens": 193,
        "completion_tokens": 104
    },
    "prompt_logprobs": null
}

Таблица 5. Параметры ответа на запрос POST/v1/chat/completions

Имя Тип данных Пример значение Описание
id string cmpl-e263c7d6179a43e98b2ca9580b57e4f6 Идентификатор запроса.
object string chat.completion Тип объект.
created integer 1748963043 Временная метка UNIX (в секундах), отмечающая дату и время, когда был создан запрос.
model string cotype_pro_2 ID модели, к которой вы обращались и которая ответила на ваш запрос.
choices array Список вариантов завершения чата.
   index integer 0 Индекс выбора в списке вариантов.
   message object Сгенерированное моделью сообщение.
     role string assistant Роль автора сообщения.
     content string or null Москва, столица России, - это тысячелетний город с богатой историей и архитектурой, где древнерусские храмы и кремли, таких как Красная площадь и Московский Кремль, соседствуют с современными небоскребами и шумными улицами, создавая уникальный контраст между прошлым и настоящим. Содержание сообщения.
     tool_calls array [] Вызовы тулов (функций), генерируемые моделью.
   logprobs object or null null Логирование информации о вероятности выбора.
   finish_reason string or null stop Причина, по которой модель прекратила генерировать ответы.
stop - если модель достигла естественной точки остановки или предоставленной последовательности остановки.
length - если было достигнуто максимальное количество токенов, указанное в запросе.
content_filter - если контент был пропущен из-за флага из фильтров контента.
tool_calls - если модель вызвала tool, или ​​если модель вызвала функцию.
   stop_reason string or null Аналогична finish_reason.
usage object or null "prompt_tokens": 89,
"total_tokens": 193,
"completion_tokens": 104
Статистика по токенам в вашем запросе. Это поле присутствует в ответе на запрос, если при установке stream_options: {"include_usage": true} в запросе.
Если поле присутствует, поле содержит нулевое значение, за исключением последнего фрагмента, который содержит статистику использования токена для всего запроса.
  prompt_tokens integer 39 Количество токенов в запросе.
   completion_tokens integer 91 Количество сгенерированных моделью токенов.
   total_tokens integer 130 Cумма токенов в запросе и сгенерированных токенов.
prompt_logprobs object or null null Логирование информации о промпте.

Для продолжения общения с моделью в рамках текущего диалога необходимо дополнить ваш предыдущий запрос ответом модели, а также добавить новое сообщение от лица пользователя. Атрибут role показывает, кто является автором сообщения в диалоге. Assistant — ответ модели, user — сообщение пользователя.

Пример тела запроса:

{
   "model": "//имя вашей модели",
   "messages": [
   {
       "role": "system",
       "content": "Отвечай как экскурсовод"
   },
   {
      "role": "user",
      "content": "Расскажи мне о Москве в 1 предложении."
   },
   {
      "role": "assistant",
      "content": "Москва - это столица России, древний и современный город, объединяющий богатую историю и культуру, архитектурные шедевры, таких как Кремль и храм Василия Блаженного, с динамичной городской жизнью, современными технологиями и инфраструктурой, а также уникальной атмосферой, которая сочетает в себе традиции и инновации."
   },
   {
      "role": "user",
      "content": "Расскажи мне более подробно о Кремле."
   }]
}

Модель сформирует ответ на ваш запрос с учётом контекста диалога. В данном примере расскажет именно о московском Кремле, а не о казанском или новгородском.

Пример выполнения запроса POST/v1/chat/completions с функцией tool calling

import requests
import json

def get_weather(location: str, unit: str):
    return f"Получить погоду для {location} в {unit}..."

tool_functions = {"get_weather": get_weather}

tools = [{
    "type": "function",
    "function": {
       "name": "get_weather",
       "description": "Определить текущую погоду в городе",
       "parameters": {
          "type": "object",
          "properties": {
             "location": {"type": "string", "description": "Город или поселок, например, 'Москва'"},
             "unit": {"type": "string", "enum": ["цельсии", "фаренгейты"]}
          },
           "required": ["location", "unit"]
        }
    }
}]

# URL API
url = "http://localhost:8000/v1/chat/completions"

# Заголовки запроса
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer dummy"
}

# Тело запроса
data = {
    "model": "your-model-name",  # Замените на имя вашей модели
    "messages": [{"role": "user", "content": "Как тепло сейчас в Санкт-Петербурге?"}],
    "tools": tools,
    "tool_choice": "auto"
}

# Отправка POST-запроса
response = requests.post(url, headers=headers, json=data)

# Проверка статуса ответа
if response.status_code == 200:
    response_data = response.json()
    tool_call = response_data['choices'][0]['message']['tool_calls'][0]['function']

    print(f"Function called: {tool_call['name']}")
    print(f"Arguments: {tool_call['arguments']}")
    print(f"Result: {get_weather(**json.loads(tool_call['arguments']))}")
else:
    print(f"Error: {response.status_code}")
    print(response.text)

Ответ от модели:

{
   'id': 'chatcmpl-080f745514ee4e27bffca4e567ba3c4a',
   'object': 'chat.completion',
   'created': 1741944362,
   'model': 'cotype',
   'choices': [
   {
      'index': 0,
      'message': 
      {
         'role': 'assistant',
         'content': None,
         'tool_calls': [
         {
            'id': 'chatcmpl-tool-8e49f569510b4cf6afd5524aee967647',
            'type': 'function',
            'function':
            {
               'name': 'get_weather',
               'arguments': '{"location": "Санкт-Петербург", "unit": "цельсии"}'
            }
         }]
      },
      'logprobs': None,
      'finish_reason': 'tool_calls',
      'stop_reason': None
   }],
   'usage':
   {
      'prompt_tokens': 261,
      'total_tokens': 294,
      'completion_tokens': 33,
      'prompt_tokens_details': None
   },
   'prompt_logprobs': None
}

GET/v1/models

Метод для получения списка доступных вам моделей.
Тип запроса: GET
Запрос:

 https://IP_Address/v1/models

где IP_Address необходимо заменить на IP-адрес вашей машины или адрес демо-стенда. Например:

 https://1.1.1.1:8000/v1/models

Пример curl-запроса для выполнения запроса из командной строки:

 curl -X 'GET' \  'https://{url}/v1/models' \
  -H 'accept: application/json'
  -H 'Authorization: Bearer Token' \

Пример ответа на запрос GET/v1/models:

{
    "object": "list",
    "data": [
        {
            "id": "cotype_pro_2",
            "object": "model",
            "created": 1748228864,
            "owned_by": "vLLM",
            "root": "/data/models/infer/model",
            "parent": null,
            "permission": [
                {
                    "id": "modelperm-5f9920eb9187466b998ccccd208c9f95",
                    "object": "model_permission",
                    "created": 1748228864,
                    "allow_create_engine": false,
                    "allow_sampling": true,
                    "allow_logprobs": true,
                    "allow_search_indices": false,
                    "allow_view": true,
                    "allow_fine_tuning": false,
                    "organization": "*",
                    "group": null,
                    "is_blocking": false
                }
            ]
        }
    ]
}

В результате выполнения запроса, вы получите список доступных вам моделей. Для обращения к модели скопируйте "id" - уникальный идентификатор модели в теле ответа на запрос. Затем используйте скопированный ID в запросе POST/v1/chat/completions в параметре model.

GET/health

Назначение: Запрос проверяет работоспособность модели. Если модель работоспособна, будет получен ответ [200 OK]. В случае если сервис недоступен по какой-либо причине, ответ не будет получен.
Тип запроса: GET
Запрос:

https://IP_Address/health

Где IP_Address необходимо заменить на IP-адрес вашей машины или адрес демо-стенда. Например:

https://1.1.1.1:8000/health

Пример curl-запроса для выполнения запроса из командной строки:

 curl -X 'GET' \
  'https://{url}/health' \
  -H 'accept: application/json'

POST/v1/completions

Назначение: Система дополняет и продолжает промпт пользователя. Не подходит для общения в чатовом режиме.
Тип запроса: POST
Запрос:

https://{IP-адрес}/v1/completions

Где IP_Address необходимо заменить на IP-адрес вашей машины или адрес демо-стенда. Например:

 https://1.1.1.1:8000/v1/completions

Таблица 6. Параметры запроса POST/v1/completions

Имя Тип данных Значение Описание
prompt (обязательный) string or array Запрос(ы) для генерации дополнений, закодированные как строка, массив строк, массив токенов или массив массивов токенов. Обратите внимание, что <¦endoftext¦> — это разделитель документов, который модель видит во время обучения, поэтому, если запрос не указан, модель будет генерировать так, как будто с начала нового документа.
model (обязательный) string ID ID модели, к которой вы обращаетесь.
temperature number or null Диапазон температуры — от 0 до 2. По умолчанию: 1. Задает температуру выборки, от 0 до 2. Более высокие значения, такие как 0.8, сделают вывод более случайным, а более низкие значения, такие как 0.2, сделают его более сфокусированным и детерминированным. Обычно рекомендуется изменять это значение или top_p параметр, но не оба.
top_p number or null Диапазон — от 0 до 1. По умолчанию: 1. Чем ниже значение атрибута, тем более популярные и часто встречающиеся токены модель будет использовать для формирования ответа. Рекомендуем изменять или этот атрибут, или temperature, но не оба сразу.
max_tokens integer Натуральное число, больше 0. По умолчанию: 16. Максимальное количество токенов, которые могут быть сгенерированы в ответ на запрос пользователя. Это позволяет регулировать длину ответа.
n integer or null Натуральное число больше 0. По умолчанию: 1. Количество ответов, которые модель сгенерирует.
stream boolean or null True/False. По умолчанию: false. Если установить значение true, ответ модели будет возвращаться не целиком сразу, а итеративно, по мере его формирования моделью.
stream_options object or null Параметры для потокового ответа. Устанавливайте только при установке stream: true.
  include_usage boolean Если установлено, дополнительный фрагмент будет передан перед сообщением data: [DONE]. Поле usage в этом фрагменте показывает статистику использования токена для всего запроса, а поле choices всегда будет пустым массивом. Все остальные фрагменты также будут включать поле usage, но с "null" значением.
frequency_penalty integer Натуральное число от -2 до 2. Штраф за частоту — число между -2.0 и 2.0. Положительные значения штрафуют новые токены, на основе их текущей частоты в тексте, снижая вероятность того, что модель повторит одну и ту же строку.
presence_penalty integer Натуральное число от -2 до 2. По умолчанию: 0. Положительные значения накладывают штраф на новые токены в зависимости от того, появляются ли они в тексте до сих пор, увеличивая вероятность того, что модель будет говорить о новых темах.
logit_bias map По умолчанию: null. Изменяет вероятность появления указанных токенов в завершении. Принимает объект JSON, который сопоставляет токены (указанные по их идентификатору токена в токенизаторе) со связанным значением смещения от -100 до 100.
best_of integer or null По умолчанию: 1. Генерирует best_of завершений на стороне сервера и возвращает «лучшее» (то, которое имеет наибольшую вероятность логарифма на токен). Результаты не могут быть переданы потоком. При использовании с n, best_of управляет количеством кандидатов на завершение, а n указывает, сколько возвращать. best_of должно быть больше n.
echo boolean or null По умолчанию: false. Повторяет промпт в дополнение к завершению.
logprobs integer or null По умолчанию: null. Включает логарифмические вероятности на logprobs наиболее вероятных выходных токенах, а также выбранные токены. Например, если logprobs равен 5, API вернет список из 5 наиболее вероятных токенов.
seed integer or null Если параметр задан, система приложит все усилия для детерминированной выборки, чтобы повторные запросы с тем же начальным значением и параметрами возвращали тот же результат.
stop string/array/null До 4 последовательностей, при которых API прекратит генерацию дальнейших токенов.
suffix string or null По умолчанию: null. Суффикс, который следует после завершения вставленного текста.
user string Уникальный идентификатор, представляющий вашего конечного пользователя, который может помочь отслеживать и обнаруживать злоупотребления.

Использование запроса POST/v1/completions

  1. Укажите Bearer Token.

    При активной однотокеновой авторизации токен одинаковый у всех пользователей. При пользовательской авторизации выдаются индивидуальные токены.

  2. Заполните тело запроса.
    Обязательные параметры: model и prompt. В model необходимо указать ID вашей модели. Получить ID модели можно с помощью запроса GET/v1/models, подробное описание смотрите в разделе GET/v1/models.
    Пример curl-запроса для выполнения запроса из командной строки:

    curl -X 'POST' \
     'https://{IP-адрес}/v1/completions' \
     -H 'accept: application/json'
    curl  https://{IP-адрес}/v1/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer Token" \
    -d '{"model": "cotype_pro_2", "prompt": "Тестовый запрос"}'

    Результат выполнения запроса POST/v1/completions

Результат успешного запроса:

{
    "id": "cmpl-b1e39b7c457f46e2af97b47e921cf64c",
    "object": "text_completion",
    "created": 1740518640,
    "model": "cotype_pro_2",
    "choices": [
        {
            "index": 0,
            "text": "! Как дела?\r",
            "logprobs": null,
            "finish_reason": "length",
            "stop_reason": null,
            "prompt_logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 116,
        "total_tokens": 121,
        "completion_tokens": 5,
        "prompt_tokens_details": null
    }
}

Таблица 7. Параметры ответа на запрос POST/v1/completions

Имя Тип данных Пример значения Описание
id string cmpl-b1e39b7c457f46e2af97b47e921cf64c Идентификатор запроса.
object string text.completion Тип объект.
created integer 1740518640 Временная метка UNIX (в секундах), отмечающая дату и время, когда был создан запрос.
model string cotype_pro_2 ID модели, к которой вы обращались и, которая ответила на ваш запрос.
choices array Список вариантов завершения чата.
   index integer 0 Индекс выбора в списке вариантов.
   text string Сгенерированное моделью сообщение.
   logprobs object or null null Логирование информации о вероятности выбора.
   finish_reason string stop Причина, по которой модель прекратила генерировать ответы.
stop - если модель достигла естественной точки остановки или предоставленной последовательности остановки.
length - если было достигнуто максимальное количество токенов, указанное в запросе.
content_filter - если контент был пропущен из-за флага из фильтров контента.
tool_calls - если модель вызвала инструмент, или ​​если модель вызвала функцию.
   stop_reason string or null Аналогична finish_reason.
   prompt_logprobs object or null null Логирование информации о промпте.
usage object or null "prompt_tokens": 116,
"total_tokens": 121,
"completion_tokens": 5
Статистика запроса на завершение.
   prompt_tokens integer 39 Количество токенов в промпте.
   completion_tokens integer 91 Количество сгенерированных моделью токенов.
   total_tokens integer 130 Cумма токенов в запросе и сгенерированных токенов.

POST/v1/embeddings

Назначение: Запрос трансформирует отправленный текст в эмбеддинги. Предназначен для представления текста в векторном виде.
Тип запроса: POST
Запрос:

https://IP_Address/v1/embeddings

Где IP_Address необходимо заменить на IP-адрес вашей машины или адрес демо-стенда. Например:

 https://1.1.1.1:8000/v1/embeddings

Пример curl-запроса для выполнения запроса из командной строки:

 curl -X 'POST' \
  'https://{IP-адрес}/v1/embeddings' \
  -H 'accept: application/json'
 curl  https://{IP-адрес}/v1/embeddings \
 -H "Content-Type: application/json" \
 -H "Authorization: Bearer Token" \
 -d '{"text":  ["Тестовый запрос"]}'

Пример ответа на запрос POST/v1/embeddings:

{
   "object": "list",
   "data": [
   {
      "object": "embedding",
      "index": 0,
      "embedding": [0.8983038067817688,
                    0.09742391109466553,
                   -0.9155033230781555,
                   … 
      ]
   }],
   "model": "mtsai-chat-embeddings",
   "usage": {
      "prompt_tokens": 6,
      "total_tokens": 6
   }
}

POST/token

Назначение: Получение токена доступа для работы с API.
Тип запроса: POST
Запрос:

 https://IP_Address/token

Где IP_Address необходимо заменить на IP-адрес вашей машины или адрес демо-стенда. Например:

 https://1.1.1.1:8000/token

Пример curl-запроса для выполнения запроса из командной строки:

 curl -X 'POST' \
  'https://{url}/token' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'username=your.email@example.ru&password=your_password'

Пример ответа на запрос:

{
   "access_token": "string",
   "token_type": "string"
}

Работа с чат-интерфейсом

Аутентификация

Для взаимодействия с LLM через чат в веб-интерфейсе, пройдите аутентификацию. Выполните следующие шаги:

  1. Откройте UI.
  2. Введите пароль в форме одним из следующих способов аутентификации:

    Способ 1. Введите токен в поле OpenAI API Key.

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

    Способ 2. Введите access_code в поле "код доступа".

    В этом случае в запросах к LLM будет использоваться тот токен, который администратор указал в OPENAI_API_KEY.
    Второй способ аутентификации станет доступным, если в ENV-файле указаны параметры CODE и OPENAI_API_KEY.

  3. Нажмите кнопку "Подтвердить".

    Вы можете пройти аутентификацию в удобный для вас момент. Для этого нажмите кнопку "Позже" внизу экрана.

Создание Чата

  1. Нажмите кнопку "Новый чат".

  2. Выберите одну из предложенных масок.
    Маска — это роль или личность, от лица которой модель будет с вами общаться.

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

    Если вы не хотите возвращаться к выбору маски при создании новых чатов в будущем, нажмите "Больше не показывать" (смотрите скриншот с выбором маски).
    Появится окно отключение выбора маски. Нажмите "Подтвердить" для сохранения своего выбора.

    Для просмотра полного списка масок, нажмите кнопку "Показать все" (смотрите скриншот с выбором маски). Появится список предустановленных ролей.

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

    Вы можете скачать json-файл с настройками, используя кнопку "Скачать предустановку" внизу окна.
    Для изменения настроек роли, клонируйте ее. Для этого нажмите "Клонировать предустановку". В списке предустановленных ролей появится клонированная роль. Нажмите кнопку "Редактировать" для изменения ее настроек.

  3. После изучения настроек роли, выберите ее из списка. Для этого нажмите кнопку "+Диалог" напротив роли (смотрите скриншот с настройками роли). Произойдет переход к чату для выбранной роли.

    Чтобы быстро найти роль в списке, вы можете использовать поиск. Введите в поле "Поиск ролей" (смотрите скриншот с клонированной ролью) полное название роли или первые буквы в ее названии. В списке отобразятся найденные роли.

    Для поиска роли, вы можете отфильтровать список по требуемому языку. Для этого нажмите кнопку "Все языки" и выберите из списка требуемый язык.

    Вы можете экспортировать или импортировать роль в json-формат. Для этого используйте соответствующие кнопки на экране "Предустановленные роли".

Взаимодействие с моделью

Для общения с моделью Cotype:

  1. Выберите нужный вам чат из списка чатов в левой панели экрана.

  2. Введите промпт в строке и нажмите ENTER на клавиатуре или кнопку "Отправить".

  3. Ждите ответа модели.
    Используйте кнопку "Быстрая команда" или "/" в строке для выбора промптов из списка.

    После того как выбранный промпт подставится в строку редактора, нажмите "Отправить".

    Для вызова команд для работы с чатом, введите символ ":" и выберите нужную команду из списка.

    Для удаление чата, вы также можете использовать кнопку "Очистить чат" на панели чата.

    Если вам нужно изменить сообщение, нажмите кнопку "Редактировать". После внесения изменений в сообщения, нажмите "Подтвердить".

Изменение настроек чата

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

В окне "Текущие настройки чата" вы можете:

  • изменить промпт;
  • аватар роли;
  • название роли;
  • скрыть предустановленные диалоги;
  • использовать глобальные настройки модели;
  • изменить основные настройки модели. Например, случайность (temperature), ядро выборки (top_p), ограничение на количество токенов (max_tokens), наказание за новизну тем (presense_penalty) и другие.
  • сохранить текущий чат как маску.

Таблица 8. Основные настройки чата

Термин Определение
Модель ID модели, которая будет использоваться для отправки запроса POST/v1/chat/completions. Если указан некорректный ID, вы не получите ответ от модели.
Температура Более низкие значения (например, 0.2) приводят к более последовательным результатам, а более высокие значения (например, 1.0) генерируют более разнообразные и творческие результаты. Выберите значение температуры исходя из желаемого компромисса между согласованностью и творчеством.
Top_P Чем ниже значение, тем более популярные и часто встречающиеся токены модель будет использовать для формирования ответа. Диапазон — от 0 до 1.
Максимальное количество токенов Определяет максимальное количество токенов в сообщении пользователя и ответе модели.
Штраф за повторения Положительные значения накладывают штраф на новые токены в зависимости от их появления в тексте до этого момента, увеличивая вероятность обсуждения новых тем.
Штраф за частоту Положительные значения штрафуют новые токены на основе их текущей частоты в тексте, снижая вероятность повторения одной и той же строки дословно.

Рекомендуется изменять либо температуру, либо Top_P, но не обе настройки одновременно.

Изменение общих настроек

Вы можете изменить настройки для всех чатов.

  1. Нажмите кнопку в левом нижнем углу экрана.

  2. Измените необходимые настройки из окна "Все параметры настроек". Например:

    • аватар;
    • сочетание клавиш для отправки промпта;
    • тему интерфейса: auto, dark или light;
    • язык интерфейса;
    • размер шрифта и шрифт чата;
    • настройки модели.

Удаление чата

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

Приложение 1. Описание возвращаемых ошибок при работе с методами API

Все запросы

401 — пользователь указал некорректный токен. Code 401: "UnauthorizedError: Wrong token"
403 — ошибка прав доступа. Для методов управления правом доступа пользователя. Например, когда пользователь пытается выполнить действие, доступное только администратору.
405 — метод не поддерживается. Code 405: "Method Not Allowed".
422 — ошибка, возникающая при некорректном по структуре запросе. Code 422: "Unprocessable Entity". Относится к методам с POST-запросом.
500 — непредвиденная ошибка. Code 500: "Internal Server Error".

Запрос POST/v1/chat/completions

503 — ошибка, возникающая в случае недоступности сервиса "Цензор". Code 503 — "The server was unable to complete your request. Please try again later".

Атрибут: model, обязательный

  1. Пользователь ввёл некорректный ID модели, система не смогла обнаружить модель с таким ID.

    Пример ответа 404:

    "The model "model" does not exist."

    Где "model" - тот ID модели, который указал пользователь.

  2. В запросе отсутствует атрибут "model".

    Пример ответа 400:

    {
      "object": "error",
      "message": "[{'type': 'missing','loc': ('body', 'model'),'msg': 'Field required','input':{'messages': "[{'role': 'system','content':'promt'},{'role': 'user','content': 'promt'}]}}]",
      "type": "BadRequestError",
      "param": null,
      "code": 400     
    }

Атрибут: messages, обязательный

  1. Пользователь ввёл слишком длинный промт.

    Пример ответа 404:

    "This model's maximum context length is X tokens. However, you requested N tokens in the messages, Please reduce the length of the messages."

    Где N - количество токенов в промпте ("prompt_tokens"),
    X - максимально допустимое количество токенов в промпте у модели, к которой пользователь обратился.

  2. В запросе отсутствует атрибут "messages".

    Пример ответа 404:

    {
      "object": "error", "message": "[{'type': 'missing','loc': ('body', 'messages'),'msg': 'Field required', 'input': {'model':'cotype_pro_2.0'}}]", 
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }

    Атрибут: temperature, опциональный

  3. Значение, введенное пользователем, не является числом.

    Пример ответа 400:

    {
      "object": "error",
      "message": "[{'type': 'float_parsing','loc': ('body', 'temperature'),'msg': 'Input should be a valid number, unable to parse string as a number','input': 'gh'}]",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }
  4. Пользователь ввел число, но оно отрицательное.

    Пример ответа 400:

    {
      "object": "error",
      "message": "temperature must be non-negative, got -5.0.",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }
  5. Пользователь ввел число, но оно больше 2.

    Пример ответа 400:

    {
      "object": "error",
      "message": "temperature must be in the range from 0 to 2, got 3.",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }

Атрибут: top_p, опциональный

  1. Значение, введенное пользователем, не является числом.

    Пример ответа 400:

    {
       "object": "error",
       "message": "[{'type': 'float_parsing','loc': ('body', 'top_p'),'msg': 'Input should be a valid number, unable to parse string as a number', 'input': 'gh'}]",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }
  2. Пользователь ввёл число, но оно находится вне диапазона от 0 до 1.

    Пример ответа 400:

    {
       "object": "error",
       "message": "top_p must be in (0, 1], got -1.0.",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }

Атрибут: max_tokens, опциональный

  1. Значение, введенное пользователем, не является числом.

    Пример ответа 400:

    {
       "object": "error",
       "message": "[{'type': 'int_parsing','loc': ('body', 'max_tokens'),'msg': 'Input should be a valid integer, unable to parse string as an integer', 'input': 'gh'}]",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }    
  2. Пользователь ввёл отрицательное число.

    Пример ответа 400:

    {
       "object": "error",
       "message": "max_tokens must be at least 1, got -1.",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }

    где -1 - это число, введенное пользователем, может быть любое отрицательное.

  3. Пользователь ввёл дробь, а не целое число.

    Пример ответа 400:

    {
       "object": "error",
       "message": "[{'type': 'int_from_float', 'loc': ('body', 'max_tokens'),'msg': 'Input should be a valid integer, got a number with a fractional part','input': 1.5}]",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }
  4. Если значение атрибута превышает текущее ограничение модели.

    Пример ответа 400:

    {
       "object": "error",
       "message": "This model's maximum context length is 32768 tokens. However, you requested 100000347 tokens (347 in the messages, 100000000 in the completion). Please reduce the length of the messages or completion.",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }

    Где X - длина контекстного окна модели, меняется в зависимости от развернутой модели,
    100000347 - введенное пользователем значение max_tokens,
    347 - длина промта в токенах. Числа указаны исключительно в качестве примера.

Атрибут: n, опциональный

  1. Значение, введенное пользователем, не является числом. Пользователь ввел число, которое не является натуральным.

    Пример ответа 400:

    {
       "object": "error",
       "message": "[{'type': 'int_parsing', 'loc': ('body', 'n'), 'msg': 'Input should be a valid integer, unable to parse string as an integer', 'input': 'gh'}]",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }
  2. Пользователь ввёл отрицательное число.

    Пример ответа 400:

    {
       "object": "error",
       "message": "n must be at least 1, got -1.",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }
  3. Пользователь ввёл дробь, а не целое число.

    Пример ответа 400:

    {
      "object": "error",
      "message": "[{'type': 'int_from_float','loc': ('body', 'n'),'msg': 'Input should be a valid integer, got a number with a fractional part','input': 1.5}]",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }
  4. Значение n не должно быть больше 10.

    Пример ответа 400:

    {
      "object": "error",
      "message": "n must be in the range from 1 to 10, got 23.",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }

Атрибут: stream, опциональный

Тип атрибута - boolean. Пользователь ввёл значение, отличное от True/False.

Пример ответа 400:

 {
    "object": "error",
    "message": "[{'type': 'bool_type','loc': ('body', 'stream'),'msg': 'Input should be a valid boolean','input': 1.5}]",
    "type": "BadRequestError",
    "param": null,
    "code": 400
 }

Атрибут: frequency_penalty, опциональный

  1. Значение, введенное пользователем, не является числом.

    Пример ответа 400:

    {
      "object": "error",
      "message": "[{'type': 'float_parsing','loc': ('body', 'frequency_penalty'),'msg': 'Input should be a valid number, unable to parse string as a number','input': 'gh'}]",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }
  2. Пользователь ввел число, но она находится вне диапазона от -2 до 2.

    Пример ответа 400:

    {
      "object": "error",
      "message": "frequency_penalty must be in [-2, 2], got -3.0.",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }

    Где -3.0 - значение, введенное пользователем.

Атрибут: presence_penalty, опциональный

  1. Значение, введенное пользователем, не является числом.

    Пример ответа 400:

    {
      "object": "error",
      "message": "[{'type': 'float_parsing','loc': ('body', 'presence_penalty'),'msg': 'Input should be a valid number, unable to parse string as a number', 'input': 'gh'}]",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }
  2. Пользователь ввел число, но она находится вне диапазона от -2 до 2.

    Пример ответа 400:

    {
      "object": "error",
      "message": "presence_penalty must be in [-2, 2], got -3.0.",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }

    Где -3.0 - значение, введенное пользователем.

Нераспознанный атрибут

Пользователь прислал не json в теле запроса, а какой-то иной формат данных.

Пример ответа 400:

{
    "object": "error",
    "message": "[{'type': 'json_invalid','loc': ('body', 65), 'msg': 'JSON decode error', 'input': {}, 'ctx': {'error': 'Expecting value'}}]",
    "type": "BadRequestError",
    "param": null,
    "code": 400
}

Запрос GET/v1/models

Ошибки, характерные только для данного запроса, отсутствуют.

Запрос POST/v1/completions

503 — ошибка, возникающая в случае недоступности сервиса "Цензор". Code 503 — "The server was unable to complete your request. Please try again later".

Атрибут: prompt, обязательный

  1. Пользователь ввёл слишком длинный промт.

    Пример ответа 400:

    "This model's maximum context length is X tokens. However, you requested N tokens in the messages, Please reduce the length of the messages."

    Где N - количество токенов в промпте ("prompt_tokens"),
    X - максимально допустимое количество токенов в промпте у модели, к которой пользователь обратился.

  2. В запросе отсутствует атрибут "messages".

    Пример ответа 400:

    {
      "object": "error",
      "message": "[{'type': 'missing','loc': ('body', 'prompt'),'msg': 'Field required','input': {'model': 'model_name}}]",
      "type": "BadRequestError",
      "param": null,
      "code": 400
    }

Атрибут: model, обязательный

  1. Пользователь ввёл некорректный ID модели, система не смогла обнаружить модель с таким ID.

    Пример ответа 400:

    "The model "model" does not exist."

    Где "model" - тот ID модели, который указал пользователь.

  2. В запросе отсутствует атрибут.

    Пример ответа 400:

    {
       "object": "error",
       "message": "[{'type': 'missing','loc': ('body', 'model'), 'msg': 'Field required', 'input': {'messages': [{'role': 'system', 'content': 'promt'}, {'role': 'user', 'content': 'promt'}]}}]",
       "type": "BadRequestError",
       "param": null,
       "code": 400
    }