Files
chatballs/docs/agent-test-chat-api.md
T

4.3 KiB

Проверочный чат агента

POST /api/v1/organizations/{organizationPublicId}/agents/{id}/test-chat/ требует права управления агентом и активного AI-агента. Проверочный чат использует планирование знаний, псевдонимизацию и цикл инструментов живого хода. Подготовка и журнал выполняются в коротких tenant-транзакциях, сеть — между ними.

{
  "message": "Где мой заказ?",
  "history": [{"role": "assistant", "content": "Здравствуйте"}],
  "clientData": {
    "name": "Анна",
    "email": "anna@example.test",
    "phone": "+79990001122",
    "webFields": {
      "42": {"order_number": "10482"}
    }
  }
}

id — идентификатор карточки (Channel), ключ webFields — строковый ID веб-подключения этого агента. Поля проверяются по текущей схеме подключения тем же валидатором, что значения веб-виджета. Неизвестные подключения и поля, неверные типы, формат или варианты enum дают 400 до вызова провайдера. Имя, e-mail и телефон также проверяются по типу и длине поля контакта.

clientData необязателен; пустой объект сбрасывает тестовые данные. Отсутствующие и null-значения означают отсутствие данных; для стандартных полей допускается также пустая строка. Обязательность формы перед чатом не применяется: можно проверить поведение без значения привязанного параметра. Без обязательного привязанного значения инструмент не предлагается модели. История допускает только роли user и assistant, обрезается до окна агента.

Стандартные поля и свои тестовые значения становятся известными значениями карты псевдонимизации, общей для эмбеддинга, истории, промпта и инструментов. В промпт входят стандартные поля и свои поля с ai_visible=true в порядке схемы; все переданные поля доступны серверным привязкам HTTP-параметров. Данные, карта токенов, аргументы и тела ответов инструментов остаются в памяти. Контакты, значения полей, диалоги и события проверочного чата не создаются. В журнале LLM остаются только метаданные вызовов и учёт токенов каждого раунда.

Ответ сохраняет reply, model, promptTokens, completionTokens и добавляет toolCalls. Числа токенов суммируются по всем раундам ответа. Каждый вызов:

{
  "name": "order_status",
  "tool": "Статус заказа",
  "ok": true,
  "errorCode": "",
  "error": "",
  "durationMs": 400,
  "turnId": null
}

Это метаданные для плашки: итог успеха или ошибки, а не тело ответа инструмента. error — переведённая подпись по тем же правилам, что в ленте диалога. turnId=null: сохраняемого сообщения хода нет; UI группирует вызовы одного HTTP-ответа. При отказе провайдера 502 содержит detail и уже выполненные toolCalls. Ошибка инструмента возвращается модели кодом; она может закончить ход ответом.