API базы знаний
API позволяет синхронизировать текстовые знания напрямую из вашей CMS. Каждый файл набора знаний перезаписывается полностью.
Токен должен иметь scope knowledge_base.
Базовый URL: https://api.apx.chat/api
Перед началом
- Создайте базу знаний в разделе Настройки -> Ресурсы AI -> База знаний.
- В настройках канала включите AI оператора и привяжите эту базу.
- Выпустите токен с scope
knowledge_base.
Допустимые форматы и лимиты
- Расширения:
.csv,.htm,.html,.md,.txt,.xml,.json - Максимальный размер файла:
20 MB - Лимит файлов на канал:
20
Где взять channelId
const url = "https://api.apx.chat/api/external/channels";
const response = await fetch(url, {
method: "GET",
headers: {
"X-Api-Token": "tok_xxxxx",
},
});
const data = await response.json();
console.log(data);Подробно: /docs/channels
fileId
fileId - произвольная строка (например slug статьи). Один fileId соответствует одному файлу.
Если хеш загруженного файла совпадает с предыдущей версией, повторная индексация не выполняется.
Получение списка файлов
GET /api/ai-operator/external/channels/{channelId}/knowledge
const url = "https://api.apx.chat/api/ai-operator/external/channels/{channelId}/knowledge";
const response = await fetch(url, {
method: "GET",
headers: {
"X-Api-Token": "tok_xxxxx",
},
});
const data = await response.json();
console.log(data);Загрузка или обновление файла
PUT /api/ai-operator/external/channels/{channelId}/knowledge/{fileId}
Запрос должен быть multipart/form-data с полем file.
const url = "https://api.apx.chat/api/ai-operator/external/channels/{channelId}/knowledge/{fileId}";
const formData = new FormData();
formData.append("file", fileInput.files[0]); // fileInput: <input type="file" />
const response = await fetch(url, {
method: "PUT",
headers: {
"X-Api-Token": "tok_xxxxx",
},
body: formData,
});
const data = await response.json();
console.log(data);Ответ возвращает объект загрузки и флаг updated.
Удаление файла
DELETE /api/ai-operator/external/channels/{channelId}/knowledge/{fileId}
const url = "https://api.apx.chat/api/ai-operator/external/channels/{channelId}/knowledge/{fileId}";
const response = await fetch(url, {
method: "DELETE",
headers: {
"X-Api-Token": "tok_xxxxx",
},
});
const data = await response.json();
console.log(data);Удаление асинхронное, в ответе возвращается jobId.
Что происходит после загрузки
- Файл сохраняется в S3 и сверяется по SHA-256 с предыдущей версией.
- Если контент изменился, старая версия удаляется, новые чанки индексируются в Milvus.
- В ответе ориентируйтесь на
statusиprocessedAt.