AI Chat v2 API (Documentation Index
Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
Use this file to discover all available pages before exploring further.
/aichat2/conversations) — это новое поколение интерфейса диалогов, являющееся полной модернизацией AI Chat API. Он расширяет возможности v1, сохраняя простоту и поддержку многошаговых диалогов, добавляя:
- Мультимодальный ввод пользователя: через структурированное поле
messageможно напрямую передавать текст + изображения + файлы, без необходимости предварительно прикреплять черезreferences. - Вызов инструментов в режиме агента: встроенный набор инструментов для сетевого поиска, парсинга веб-страниц, чтения файлов и др., а также возможность подключения MCP-серверов с пользовательскими разрешениями (Google Drive, Notion, Slack, GitHub и др.). Модель может самостоятельно вызывать инструменты несколько раз в одном запросе для выполнения сложных задач.
- Структурированные потоковые события: при использовании
accept: text/event-streamилиapplication/x-ndjsonможно получать события по токенам:text_delta,tool_use,tool_result,thinking,citation,card,artifactи др., что облегчает их отдельный рендеринг на фронтенде. - Возможность прерывания и восстановления: модель при необходимости дополнительной информации от пользователя отправляет событие
ask_user_questionи приостанавливается; следующий вызов сtool_resultsпозволяет продолжить диалог. - Новые CRUD операции: на том же endpoint через поле
actionможно выполнятьretrieve/retrieve_batch/update/delete, без отдельного API для управления сессиями. - Постоянно обновляемый список моделей: по умолчанию доступны GPT-5.4, Claude Opus 4.7, Claude Sonnet 4.6, Gemini 3.1 Pro, GLM 5.1, DeepSeek V4, Kimi K2.5 и другие современные модели.
model + question (+ опционально stateful / id / references / preset), чтобы получить JSON-ответ {answer, id}, эквивалентный v1. Поэтому миграция с /aichat/conversations на /aichat2/conversations не требует переписывания клиента — достаточно заменить путь.
Если вы сейчас используете /aichat/conversations, старый интерфейс продолжит работать, и вы можете мигрировать в удобное время.
Процесс получения доступа
Для использования API необходимо подать заявку на соответствующую услугу на странице AI Chat v2 API. После перехода нажмите кнопку «Acquire», чтобы получить необходимые учетные данные для запросов. Если вы не вошли в систему или не зарегистрированы, произойдет автоматический переход на страницу входа. После регистрации и входа вы вернетесь на текущую страницу. При первом запросе предоставляется бесплатный лимит для использования API.Основное использование
Самый простой способ — так же, как и в v1: передатьmodel + question и получить {answer, id}.
Пример CURL:
model можно увидеть в выпадающем списке панели Try справа. Часто используемые категории:
- OpenAI:
gpt-5.4-mini,gpt-5.4-nano,gpt-5.2-pro,gpt-5.1-all,gpt-5-all,gpt-4.1,gpt-4o,gpt-4o-image,o3,o4-miniи др. - Anthropic:
claude-opus-4-7,claude-opus-4-6,claude-opus-4-5-20251101,claude-sonnet-4-6,claude-sonnet-4-5-20250929,claude-haiku-4-5-20251001и др. - Google:
gemini-3.1-pro,gemini-3.1-pro-preview,gemini-3.1-flash-image-preview,gemini-3-pro-preview,gemini-2.5-flash-liteи др. - xAI:
grok-4,grok-4-1-fast,grok-4-1-fast-reasoning,grok-3-mini-fastи др. - DeepSeek:
deepseek-v4-flash,deepseek-v3.2-exp,deepseek-r1-0528и др. - Moonshot:
kimi-k2.5,kimi-k2-thinking,kimi-k2-thinking-turboи др. - Zhipu:
glm-5.1,glm-5,glm-5-turbo,glm-4.7,glm-4.5vи др.
Многошаговый диалог
Как и в v1, передайтеstateful: true для сохранения сессии, API вернет id; последующие запросы с этим id продолжат диалог без необходимости самостоятельно хранить историю сообщений.
Первый запрос:
id:
По умолчаниюstatefulравенtrue, его можно опустить или явно указать. Если не хотите сохранять диалог на сервере, задайтеstateful: false.
Потоковый ответ
v2 поддерживает два формата потоковой передачи, выбираемых через заголовокaccept:
| Сценарий | accept | Формат данных |
|---|---|---|
| Веб-фронтенд / EventSource | text/event-stream | data: {json}\n\n, последняя строка data: [DONE]\n\n |
| Сервер / CLI / потоковый разбор Node | application/x-ndjson | Каждая строка — JSON-объект |
| Без потоков | application/json (по умолчанию) | Одноразовый ответ {answer, id} |
Пример NDJSON
text_delta:
Пример SSE
В браузереEventSource не поддерживает кастомное тело запроса, рекомендуется использовать fetch с ручным разбором по \n\n:
Типы потоковых событий
type | Значение |
|---|---|
text_delta | Инкрементальный фрагмент ответа ассистента. content — новый текст; для совместимости с v1 также есть delta_answer (равно content) и id. |
thinking | Процесс рассуждения модели (появляется, если выбранная модель поддерживает reasoning). |
tool_use | Модель решила вызвать инструмент, событие содержит tool_id, tool_name, input. |
tool_result | Результат работы инструмента, связывается с предыдущим tool_use по tool_id, is_error указывает на ошибку. |
card | Структурированная карточка, созданная инструментом (например, изображение, предпросмотр ссылки), подходит для прямого рендеринга. |
citation | Источник URL для цитирования соответствующего фрагмента текста. |
ask_user_question | Модель запрашивает дополнительную информацию у пользователя, диалог переходит в состояние awaiting_user_input (см. раздел Восстановление приостановленного диалога). |
artifact | Отдельный артефакт, сгенерированный моделью (например, блок кода, документ), можно сохранить или скачать. |
system_message | Системное сообщение (не часть диалога пользователя и ассистента), используется для UI. |
compact | Событие сжатого внутреннего контекста, не требует обработки. |
error | Ошибка в текущем запросе, message содержит описание. |
done | Завершение потокового ответа, содержит usage (токены запроса и ответа) и terminal_reason. |
content из событий text_delta — это эквивалентно полю answer в режиме application/json.
Мультимодальный ввод
Если ввод пользователя содержит изображения или файлы, вместоquestion передавайте массив message. Каждый элемент — блок содержимого:
text— обычный текст, обязательное полеtext.image_url— изображение, обязательное полеimage_url.url.file_url— файл (PDF, CSV, TXT и др.), обязательное полеfile_url.url.
Взаимодействие с references из v1
Для совместимости v2 продолжает распознавать поле references: ["https://...", ...]:
- URL с расширениями
jpg / jpeg / png / gif / bmp / webp / svg / heic / heifавтоматически преобразуются в блокimage_url; - Другие расширения — в блок
file_url; - Если одновременно передан
question, он добавляется как блокtextв начало.
/aichat2/conversations, и старый способ с references будет работать.
Для более точного контроля (например, вставлять несколько изображений между текстом или соблюдать порядок) используйте массив message.
Вызов инструментов и MCP
Ключевое улучшение v2 — модель может самостоятельно вызывать инструменты для выполнения многошаговых задач, по умолчанию включено, без дополнительной настройки со стороны клиента. Типичные сценарии:- Пользователь спрашивает «帮我搜一下最近上海有什么新展览» → модель вызывает встроенный web search → формирует ответ.
- Пользователь просит «读一下这个 PDF 然后写个摘要» → модель вызывает file_read → пишет резюме.
- Пользователь авторизовал Google Drive / GitHub / Notion и др. в Connections → модель может читать и записывать данные через MCP-инструменты.
tool_use и tool_result, например:
tool_use / tool_result / card / citation. Итоговый ответ все равно приходит через text_delta.
Параметр max_turns ограничивает максимальное число вызовов инструментов моделью за один запрос, по умолчанию лимит задает платформа. Установка маленького значения (например, max_turns: 1) заставит модель отвечать одним сообщением без вызовов инструментов.
Восстановление приостановленного диалога
Некоторые инструменты могут заставить модель задать уточняющий вопрос пользователю, при этом модель отправляет событиеask_user_question, и диалог переходит в состояние awaiting_user_input:
id, передав ответ через tool_results:
tool_use_id должен точно совпадать с tool_id из приостановленного события, иначе вернется ошибка 400. При наличии tool_results поля question / message / references игнорируются.
Если пользователь хочет пропустить вопрос, просто отправьте новый question или message; платформа автоматически отметит приостановленный вызов инструмента как «пропущенный пользователем».
Управление сессиями (CRUD)
v2 поддерживает легковесное управление сессиями через полеaction на том же endpoint, без отдельного API.
action: retrieve — получить сессию
messages, model, title, tools_used и др.).
action: retrieve_batch — список сессий (сводка)
{ items: [...], total }. Сводка не содержит messages, подходит для боковой панели. При открытии конкретной сессии используйте action: retrieve для загрузки полного содержимого.
Доступны фильтры: user_id, application_id, model_group, model.
action: update — изменить заголовок или переписать историю
messages, но сервер строго проверит схему (должна быть свернутая форма ToolUseContent), иначе вернется 400. Обычно рекомендуется менять только title.
action: delete — удалить сессию
{ id, success: true }. Удаление необратимо, убедитесь перед вызовом.
Плавная миграция с v1
Если вы уже используете/aichat/conversations, переход на v2 почти не требует изменений:
- Замените URL с
https://api.xhuoapi.ai/v1/aichat/conversationsнаhttps://api.xhuoapi.ai/v1/aichat2/conversations. - Если раньше использовались модели v1 (например,
gpt-3.5,gpt-4-browsing), при переходе на v2 рекомендуется обновиться до современных моделей (gpt-5.4,claude-opus-4-7,gemini-3.1-proи др.). - Потоковые поля NDJSON обратно совместимы: каждое событие
text_deltaпо-прежнему содержитdelta_answerиid, поэтому клиенты, которые парсятdelta_answerпо строкам, не нуждаются в изменениях.
message, SSE, вызов инструментов, CRUD через action) в удобном темпе.
Обработка ошибок
Ошибки возвращаются в формате:400 bad_request: отсутствуют обязательные поля, несоответствиеtool_use_id, неверная схемаmessagesи др.401 invalid_token: неверный заголовокauthorization.404 not_found: приaction: retrieve / update / deleteс несуществующимid.429 too_many_requests: превышен лимит запросов.500 chat_error: ошибка на стороне LLM илиcompletion_tokens=0(не списывается оплата).
{"type":"error","message":"..."}, после чего поток завершается.

