Skip to content

Справочник API: базы знаний и знания ​

Создание баз знаний, импорт и управление документами, а также запрос прогресса обработки, копирование или перемещение содержимого.

Краткая шпаргалка по правам: маршруты чтения — Viewer+ и требуется право read на KB (собственный/общий в организации/видимый через общий Agent); маршруты записи — «создатель KB OR Admin+» и требуется право write. API key: для чтения нужен retrieve, для записи содержимого — ingest, для жизненного цикла KB — manage_kbs (все могут быть перекрыты full-access), и действует ограничение белого списка KB.

Эндпоинты блоков, тегов и предпросмотра разбиения (/chunks, /knowledge-bases/:id/tags, /chunker/preview) — в блоки и теги.

Базы знаний (/api/v1/knowledge-bases) ​

POST /api/v1/knowledge-bases ​

Назначение: создание базы знаний. Права: Contributor+; API key manage_kbs/full. Handler: internal/handler/knowledgebase.go

Тело запроса (types.KnowledgeBase):

ПолеТипОбязательныйОписание
namestringДаНазвание
descriptionstringНетОписание
typestringНетdocument (по умолчанию)/faq/wiki
embedding_model_idstringНетID Embedding-модели
chunking_configobjectНетКонфигурация разбиения на блоки (chunk_size/overlap/separators/strategy…)
image_processing_configobjectНетКонфигурация наблюдения свойств изображений: model_id / image_attrs_enabled / image_actions ({ ocr: { on: [...], on_unobserved: bool } }) / image_vector_enabled (векторная индексация и поиск изображений, по умолчанию false, см. возможности базы знаний)
storage_provider_configobjectНетКонфигурация хранилища
vector_store_idstringНетПривязка векторного хранилища (недопустимая возвращает code 2200/2201)
faq_config / wiki_config / extract_config / indexing_strategyobjectНетКонфигурации, зависящие от типа
summary_model_idstringНетМодель для резюме, а также модель по умолчанию для автоматических тегов и AI-описания
auto_tag_config / profile_configobjectНетАвтоматические теги, AI-описание базы знаний (только тип document, см. ниже)

Ответ: 201 {"success":true,"data":{KnowledgeBase}}

Переключатели, не указанные в indexing_strategy, остаются со значениями по умолчанию: векторный и keyword-поиски включены, Wiki и граф — выключены. Выключить их можно, только явно передав false.

bash
curl -X POST $BASE/api/v1/knowledge-bases -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"документация продукта","type":"document"}'

Конфигурация автоматических тегов и AI-описания ​

При создании базы знаний auto_tag_config, profile_config располагаются на верхнем уровне; при обновлении — в config.auto_tag_config, config.profile_config. Оба поддерживаются только базами знаний типа document, по умолчанию enabled=false.

auto_tag_config (автоматические теги):

ПолеТипЗначение по умолчаниюОписание
enabledboolfalseПосле разбора асинхронно выбирать из существующих тегов
model_idstringпустоЕсли пусто, используется summary_model_id базы знаний
max_tagsint3Максимум привязок на документ, верхняя граница 10
skip_if_taggedbooltrueЕсли тег уже есть, пропускать; false разрешает дополнять теги

После включения действует на вновь разобранные/повторно разобранные документы, не сканирует автоматически все старые документы. При отсутствии тегов-кандидатов или доступной модели приём в базу не блокируется.

profile_config (AI-описание базы знаний):

ПолеТипЗначение по умолчаниюОписание
enabledboolfalseПосле включения при добавлении, удалении, перемещении документов или обновлении резюме автоматически обновляется generated_profile
model_idstringпустоЕсли пусто, используется summary_model_id базы знаний
custom_instructionsstringпустоДополнительные требования, добавляемые к генерирующему промпту

generated_profile — поле только для чтения, записывается системой и не перекрывает написанное вручную description; также можно сгенерировать сразу через profile/generate (см. ниже). Пример обновления:

bash
curl -X PUT "$BASE/api/v1/knowledge-bases/kb-1" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"name":"документация продукта","config":{"auto_tag_config":{"enabled":true,"max_tags":3,"skip_if_tagged":true}}}'

GET /api/v1/knowledge-bases ​

Назначение: список баз знаний. Права: Viewer+; API key retrieve/full.

Параметр запросаТипОбязательныйОписание
agent_idstringНетФильтр по KB, видимым некоторым общим Agent
agent_source_tenant_iduint64НетКогда Agent с одинаковым именем опубликован несколькими пространствами, указывает пространство-источник; значение проверяется по отношению публикации, недопустимое значение сразу 400
creatorstringНетmine / others

Ответ: 200 {"success":true,"data":[KnowledgeBase],"total","page","page_size"}

bash
curl $BASE/api/v1/knowledge-bases -H "X-API-Key: $API_KEY"

GET /api/v1/knowledge-bases/:id ​

Назначение: сведения о базе знаний (у общей KB несёт my_permission). Права: Viewer+, KB read. Параметры запроса: agent_id (необязательно).

Ответ: 200 {"success":true,"data":{KnowledgeBase}}

bash
curl $BASE/api/v1/knowledge-bases/kb-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/knowledge-bases/:id ​

Назначение: обновление базы знаний. Права: создатель OR Admin+, KB write; API key manage_kbs/full.

ПолеТипОбязательныйОписание
namestringДа (binding:"required")Название
descriptionstringНетОписание
configobjectНетЧастичное обновление конфигурации: chunking_config, image_processing_config, faq_config, wiki_config, auto_tag_config, profile_config, indexing_strategy. Если image_processing_config не передан, он остаётся без изменений; при передаче заменяется целиком (непереданные поля вроде image_vector_enabled возвращаются в false)
vlm_configobjectНетКонфигурация мультимодальности, заменяется целиком: берутся только enabled, model_id (должен быть VLLM-моделью), description_language, custom_instructions (≤4000 символов); непереданные поля обрабатываются как пустые, не хотите менять — не передавайте. Для общей базы знаний требуется право владельца пространства или администратора общего доступа (editor получает 403). Старые встроенные поля model_name/base_url/api_key/interface_type не записываются: при включении управляемой model_id или выключении сохранённая старая конфигурация очищается, но чисто старая база (без сохранённого model_id, только model_name/base_url) возвращает результат GET как есть (enabled=false, а model_name/base_url совпадают с хранилищем) и считается неизменённой; у остальных баз enabled=true без model_id возвращает 400

Ответ: 200 {"success":true,"data":{KnowledgeBase}}

bash
curl -X PUT $BASE/api/v1/knowledge-bases/kb-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"документация продукта v2"}'

PATCH /api/v1/knowledge-bases/:id ​

Назначение: изменение только настроек, присутствующих в запросе, остальные сохраняются. Это поля названия, описания, моделей, хранилища, разбиения, переключателей индексации, FAQ, Wiki, автоматических тегов, AI-описания, изображений, речи и извлечения графа: поля вложенных объектов, не указанные в них, тоже сохраняют прежние значения. Права те же, что у PUT; при изменении embedding-модели, модели резюме, мультимодальности или речи для общей базы знаний дополнительно требуется право администратора общего доступа. Экземпляр хранилища может изменить только пространство-владелец базы знаний, а если в базе уже есть файлы — сначала необходимо перенести хранилище; администратор общего доступа может вернуть текущий ID хранилища как есть, но не может его заменить. embedding_model_id нельзя изменить, когда в базе уже есть документы. vector_store_id задаётся только при создании. Переданный name не может быть пустым; пустая строка в description очищает описание.

ПолеТипОбязательныйОписание
namestringНетНовое название
descriptionstringНетНовое описание; пустая строка очищает
embedding_model_id / summary_model_id / storage_backend_idstringНетМодель или экземпляр хранилища
chunking_configobjectНетПерезаписывает только указанные поля разбиения
indexing_strategyobjectНетПерезаписывает только указанные переключатели; должна остаться хотя бы одна индексация
vlm_config / asr_config / image_processing_configobjectНетМультимодальность, речь, изображения
faq_config / wiki_config / auto_tag_config / profile_configobjectНетНастройки, зависящие от типа
extract_config / question_generation_configobjectНетИзвлечение графа, генерация вопросов к блокам

Ответ: 200 {"success":true,"data":{KnowledgeBase}}

bash
curl -X PATCH $BASE/api/v1/knowledge-bases/kb-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"продуктовая документация v2"}'

DELETE /api/v1/knowledge-bases/:id ​

Назначение: удаление базы знаний (жёстко привязано к пространству-владельцу + Admin; общий editor удалить не может). Права: создатель OR Admin+, KB write; API key manage_kbs/full.

Ответ: 200 {"success":true,"message":"Knowledge base deleted successfully"}

bash
curl -X DELETE $BASE/api/v1/knowledge-bases/kb-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/knowledge-bases/:id/pin ​

Назначение: закрепить/снять закрепление (хранится в разрезе пользователя). Права: Viewer+, KB read. Без тела запроса.

Ответ: 200 {"success":true,"data":{KnowledgeBase(is_pinned переключён)}}

bash
curl -X PUT $BASE/api/v1/knowledge-bases/kb-1/pin -H "Authorization: Bearer $TOKEN"

POST /api/v1/knowledge-bases/:id/hybrid-search (совместим с GET) ​

Назначение: низкоуровневый recall внутри KB (вектор+ключевые слова), по умолчанию без rerank, возвращает оценку recall; rerank можно включить опционально. Подходит для сценариев вроде оценки recall или передачи предвычисленных векторов, где нужно контролировать исходный recall; для обычного поиска используйте knowledge-search, способ выбора см. в как выбрать эндпоинт поиска. Права: Viewer+, KB read; API key retrieve/full. GET с JSON body только для обратной совместимости (#1727), рекомендуется POST.

Параметры запроса: resource_urls=handle|public (public заменяет resource:// в content / image_info результата на загружаемую прямую ссылку, подробнее в обзоре API).

Тело запроса (types.SearchParams):

ПолеТипОбязательныйОписание
query_textstringУсловно обязательныйТекст запроса (если не передан query_embedding; обязателен при включённом rerank)
query_embedding[]float32НетПредвычисленный вектор
vector_threshold / keyword_thresholdfloat64НетПороги совпадения
match_countintНетВерхняя граница числа результатов (по умолчанию 50)
disable_keywords_match / disable_vector_matchboolНетОтключить один из путей recall
knowledge_base_ids[]stringНетПоиск сразу по нескольким базам знаний; :id из пути должен входить в них; embedding-модели этих баз знаний должны совпадать, иначе возвращается 400
knowledge_ids[]stringНетОграничить записями знаний
tag_ids[]stringНетФильтр по тегам (OR)
only_recommendedboolНетДля FAQ только рекомендованные записи
skip_context_enrichmentboolНетПропустить обогащение родительского блока/контекста
rerankobjectНетПередача включает rerank ({} использует модель из конфигурации пространства), поля см. в объект rerank

Ответ: 200 {"success":true,"data":[SearchResult]}; при наличии rerank добавляется meta.rerank (см. диагностика meta.rerank).

bash
curl -X POST "$BASE/api/v1/knowledge-bases/kb-1/hybrid-search?resource_urls=public" -H "X-API-Key: $API_KEY" \
  -H 'Content-Type: application/json' -d '{"query_text":"процесс возврата","match_count":5}'

# Зафиксировать параметры recall, затем rerank указанной моделью
curl -X POST $BASE/api/v1/knowledge-bases/kb-1/hybrid-search -H "X-API-Key: $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"query_text":"процесс возврата","vector_threshold":0.3,"match_count":5,"rerank":{"model_id":"rr-1","threshold":0.2}}'

POST /api/v1/knowledge-bases/copy ​

Назначение: копирование содержимого между KB (асинхронная задача). Права: Contributor+; API key manage_kbs/full (белые списки исходной/целевой KB проверяются в handler).

ПолеТипОбязательныйОписание
source_idstringДа (binding:"required")Исходная KB
target_idstringНетЦелевая KB (если пусто, создаётся автоматически)
task_idstringНетПользовательский ID задачи

Ответ: 200 {"success":true,"data":{"task_id","source_id","target_id","message"}}

bash
curl -X POST $BASE/api/v1/knowledge-bases/copy -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"source_id":"kb-1"}'

POST /api/v1/knowledge-bases/:id/duplicate ​

Назначение: создание копии KB (копируются только настройки, без содержимого/индекса/публикаций). Права: Contributor+, исходная KB read; API key manage_kbs/full. Без тела запроса.

Ответ: 201 {"success":true,"data":{"source_id","target_id","message","knowledge_base":{...}}}

bash
curl -X POST $BASE/api/v1/knowledge-bases/kb-1/duplicate -H "Authorization: Bearer $TOKEN"

POST /api/v1/knowledge-bases/:id/profile/generate ​

Назначение: немедленно перегенерировать AI-описание базы знаний (generated_profile); синхронно выполняет одну агрегацию профиля документов и один вызов небольшой модели, не изменяя написанное вручную description. Права: как при обновлении базы знаний (создатель/Admin и KB write); API key manage_kbs/full. Без тела запроса. Только тип document; если модель не настроена, возвращается 400.

Ответ: 200 {"success":true,"data":{"gist","topics":[...],"typical_questions":[...],"stats":{"document_count",...},"status":"ready","model_id","generated_at"}}

bash
curl -X POST $BASE/api/v1/knowledge-bases/kb-1/profile/generate -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge-bases/copy/progress/:task_id ​

Назначение: запрос прогресса копирования (задачи изолированы по пространствам). Права: Viewer+; API key retrieve/manage_kbs/full.

Ответ: 200 {"success":true,"data":{status,progress,message,...}}

bash
curl $BASE/api/v1/knowledge-bases/copy/progress/task-1 -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge-bases/:id/move-targets ​

Назначение: список KB, которые могут быть целями перемещения (тот же тип/тот же embedding). Права: Viewer+, KB read.

Ответ: 200 {"success":true,"data":[KnowledgeBase]}

bash
curl $BASE/api/v1/knowledge-bases/kb-1/move-targets -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge-bases/:id/files ​

Назначение: файловый прокси в области KB (отрисовка изображений в содержимом общей KB; tenant контекста уже перезаписан на владельца KB). Права: Viewer+; KB read; ограниченный KB key отклоняется, полнопространственный retrieve/full key пропускается. Зарегистрирован в serveKBScopedFiles (internal/router/files.go).

Параметр запросаТипОбязательныйОписание
file_pathstringДаПуть хранилища provider://... (запрещено ..)

Ответ: 200 файловый поток (Content-Type выводится по расширению; Cache-Control: private).

bash
curl "$BASE/api/v1/knowledge-bases/kb-1/files?file_path=local://1/exports/chart.png" \
  -H "Authorization: Bearer $TOKEN" -o chart.png

Знания (содержимое KB, /api/v1/knowledge-bases/:id/knowledge и /api/v1/knowledge) ​

POST /api/v1/knowledge-bases/:id/knowledge/file ​

Назначение: создать знание загрузкой файла. Права: создатель KB OR Admin+, KB write; API key ingest/full. Handler: internal/handler/knowledge.go

Поля multipart/form-data:

ПолеТипОбязательныйОписание
filefileДаЗагружаемый файл
fileNamestringНетПользовательское отображаемое имя или относительный путь с каталогами, например docs/spec/design.md; часть с каталогами используется для классификации, последний сегмент — имя файла
metadataJSON-строкаНетПользовательские метаданные
enable_multimodelboolНетПереключатель мультимодальной обработки
tag_idsstringНетID тегов через запятую
channelstringНетКанал приёма
process_configJSON-строкаНетПереопределение конфигурации разбора (KnowledgeProcessOverrides), см. таблицу ниже

Часто используемые поля process_config (все необязательны; при пропуске используется конфигурация базы знаний):

ПолеТипЗначение по умолчаниюОписание
summary_enabledbooltrueГенерировать ли резюме для документов этой загрузки; после отключения разбор, индексация и прочая обработка выполняются как обычно
parser_engine_rules[]objectконфигурация базы знанийУказать движок разбора по типу файла
parser_engine_overridesmap[string]stringпустоПараметры движка, например pdf_force_scanned
chunking_configobjectконфигурация базы знанийПараметры разбиения на блоки
enable_multimodel / vlm_config / asr_config-конфигурация базы знанийМультимодальность и распознавание речи
question_generation_configobjectконфигурация базы знанийГенерация вопросов
graph_enabled / extract_config-конфигурация базы знанийИзвлечение графа

Ответ: 200 {"success":true,"data":{Knowledge}}; повторный файл возвращает 409, а data — уже существующий Knowledge. Одноимённые файлы, которые удаляются или у которых разбор не удался, не считаются дубликатами.

bash
curl -X POST $BASE/api/v1/knowledge-bases/kb-1/knowledge/file \
  -H "X-API-Key: $API_KEY" -F 'file=@./manual.pdf' -F 'enable_multimodel=true'

Загрузка в заданный каталог: передайте в fileName путь относительно корня базы знаний, разделяя каталоги / и сохраняя имя файла с расширением. Отдельного поля folder_path у интерфейса загрузки нет.

bash
curl -X POST "$BASE/api/v1/knowledge-bases/kb-1/knowledge/file" \
  -H "X-API-Key: $API_KEY" \
  -F 'file=@./design.md' \
  -F 'fileName=docs/spec/design.md'

Этот запрос относит документ к docs/spec; в возвращаемом Knowledge folder_path равно docs/spec, а file_name — design.md. file=@./design.md задаёт локальный файл, fileName — путь классификации в базе знаний. Если fileName опущен или содержит только имя файла, документ оказывается в корне базы знаний.

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

После загрузки дерево каталогов можно посмотреть через GET /api/v1/knowledge-bases/:id/knowledge/folders (см. ниже). Уже существующие документы можно перенести в новый путь через POST /api/v1/knowledge/folder без повторной загрузки; только этот интерфейс перемещения принимает поле запроса folder_path.

POST /api/v1/knowledge-bases/:id/knowledge/url ​

Назначение: создать знание, захватив по URL. Права/API key как выше.

ПолеТипОбязательныйОписание
urlstringДа (binding:"required")Адрес для захвата
file_name / file_type / titlestringНетПереопределяющая информация
enable_multimodel*boolНетПереключатель мультимодальности
tag_ids[]stringНетТеги
channelstringНетКанал
process_configobjectНетПереопределение разбора

Ответ: 201 {"success":true,"data":{Knowledge}}; повторный URL возвращает 409.

bash
curl -X POST $BASE/api/v1/knowledge-bases/kb-1/knowledge/url -H "X-API-Key: $API_KEY" \
  -H 'Content-Type: application/json' -d '{"url":"https://example.com/doc"}'

POST /api/v1/knowledge-bases/:id/knowledge/manual ​

Назначение: создание ручного (Markdown) знания. Права/API key как выше.

ПолеТипОбязательныйОписание
titlestringНетЗаголовок
contentstringНетСодержимое Markdown
statusstringНетdraft / publish
tag_ids[]stringНетТеги
channelstringНетКанал
process_configobjectНетПереопределение разбора

Ответ: 200 {"success":true,"data":{Knowledge}}

bash
curl -X POST $BASE/api/v1/knowledge-bases/kb-1/knowledge/manual -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"title":"Сводка FAQ","content":"# содержимое","status":"publish"}'

GET /api/v1/knowledge-bases/:id/knowledge ​

Назначение: список знаний в KB. Права: Viewer+, KB read; API key retrieve/full.

Параметр запросаТипОбязательныйОписание
page / page_sizeintНетПагинация (по умолчанию 1/20)
tag_idsstringНетТеги через запятую (OR)
keywordstringНетКлючевое слово
file_typestringНетФильтр по типу файла
parse_statusstringНетpending/processing/completed/failed
sourcestringНетКанал или manual/url
start_time / end_timestringНетRFC3339, фильтр по updated_at
folder_pathstringНетФильтр по папке; пустая строка означает корневой каталог базы знаний, при пропуске фильтрация по папке не применяется
folder_recursiveboolНетРаботает вместе с folder_path; при true включать документы из подпапок
sort_bystringНетПоле сортировки: updated_at, created_at или file_name; по умолчанию created_at
sort_orderstringНетНаправление сортировки: asc или desc; по умолчанию desc

Если параметры сортировки не переданы, сортировка по created_at desc; значение вне указанного диапазона возвращает 400. При использовании updated_at порядок зависит от повторного разбора, редактирования или изменения статуса; при использовании file_name сортировка по отображаемому имени файла без учёта регистра, а при пустом имени файла последовательно берутся заголовок и источник. При одинаковых значениях сортировки порядок по ID знания, что обеспечивает стабильность постраничных результатов.

Ответ: 200 {"success":true,"data":[Knowledge],"total","page","page_size"}

bash
curl "$BASE/api/v1/knowledge-bases/kb-1/knowledge?page=1&parse_status=completed" -H "X-API-Key: $API_KEY"

POST /api/v1/knowledge-bases/:id/knowledge/batch-download ​

Назначение: упаковать исходные файлы нескольких документов одной базы знаний в ZIP для загрузки. Права как при загрузке одного файла: Contributor+ и KB write (общий Viewer в организации не может скачать); API key retrieve/full.

ПолеТипОбязательныйОписание
ids[]stringДаСписок ID знаний, от 1 до 200

Поведение:

  • Суммарный объём исходных файлов не более 512 MiB, при превышении возвращается 400;
  • Записи без исходных файлов (например, импортированные веб-страницы) пропускаются; если ни у одной из выбранных записей нет исходного файла, возвращается 400;
  • Внутри ZIP сохраняется структура папок базы знаний, к одноимённым файлам автоматически добавляется номер;
  • Если любой ID не существует или не принадлежит этой базе знаний, возвращается 404; сбой чтения возвращает 500; архив с отсутствующими файлами не создаётся;
  • Один экземпляр одновременно обрабатывает не более 4 пакетных загрузок, при превышении возвращается 429.

Ответ: 200 файловый поток application/zip, имя файла вида knowledge-files-20260923-150405.zip.

bash
curl -X POST $BASE/api/v1/knowledge-bases/kb-1/knowledge/batch-download \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"ids":["k-1","k-2"]}' -o knowledge-files.zip

GET /api/v1/knowledge-bases/:id/knowledge/folders ​

Назначение: получение дерева каталогов базы знаний. При загрузке всего каталога структура каталогов сохраняется (начиная с migration 000079 существует столбец knowledges.folder_path; пути из исторического file_name уже перенесены в это поле). Права: Viewer+ + KBAccessRead.

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

Ответ: 200. Пример (есть только загруженный выше docs/spec/design.md):

json
{
  "success": true,
  "data": {
    "root_document_count": 0,
    "total_document_count": 1,
    "folders": [{
      "path": "docs",
      "name": "docs",
      "document_count": 0,
      "total_count": 1,
      "children": [{
        "path": "docs/spec",
        "name": "spec",
        "document_count": 1,
        "total_count": 1
      }]
    }]
  }
}

root_document_count — число документов в корне базы знаний, total_document_count — общее число документов базы знаний; у узлов каталогов document_count считает только непосредственные документы, а total_count включает документы всех подкаталогов.

bash
curl $BASE/api/v1/knowledge-bases/kb-1/knowledge/folders -H "Authorization: Bearer $TOKEN"

PUT /api/v1/knowledge-bases/:id/knowledge/folders ​

Назначение: переименование или перемещение папки; путь изменяется вместе со всеми её подкаталогами. Если целевой путь уже существует, две папки объединяются; перемещение в собственный подкаталог запрещено. Права: KB owner или Admin+ + KBAccessWrite.

ПолеТипОбязательныйОписание
fromstringДаИсходный путь
tostringДаНовый путь

Ответ: 200 {"success":true}

bash
curl -X PUT $BASE/api/v1/knowledge-bases/kb-1/knowledge/folders -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"from":"проектная документация/старая версия","to":"архив/проектная документация"}'

DELETE /api/v1/knowledge-bases/:id/knowledge ​

Назначение: очистить всё содержимое KB (деструктивно). Права: Admin+, KB write; API key только full-access.

Ответ: 200 {"success":true,"message":"Knowledge base contents clear task submitted","data":{"deleted_count":N}}

bash
curl -X DELETE $BASE/api/v1/knowledge-bases/kb-1/knowledge -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge/batch ​

Назначение: пакетное получение знаний по ID (кросс-KB, доступ проверяется в handler самостоятельно). Права: Viewer+; API key retrieve/full.

Параметр запросаТипОбязательныйОписание
ids[]stringДаID знаний (можно повторять параметр или через запятую)
kb_idstringНетОграничить KB
agent_idstringНетОбласть общего Agent
agent_source_tenant_iduint64НетСелектор пространства-источника общего Agent, проверяется по отношению публикации

Ответ: 200 {"success":true,"data":[Knowledge]}. Знания в статусе pending/processing/finalizing дополнительно несут last_activity_at (RFC3339) — берётся более позднее из updated_at строки и последней записи по всем span этого знания. Знания без прогресса более 20 минут дополнительно несут stall_state: queued означает, что задачи всё ещё ждут в очереди asynq или в постоянной очереди Wiki (накопление), stalled означает, что нет задач, способных продвинуть его (предположительно зависло). Логика определения та же, что у определения накопления в housekeeping; на стороне очереди это однократное сканирование всей очереди, разделяемое всеми запросами с кэшем 60 секунд. При сбое зондирования stall_state не возвращается, и фронтенд отображает его как обычный разбор.

bash
curl "$BASE/api/v1/knowledge/batch?ids=k-1&ids=k-2" -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge/:id ​

Назначение: сведения о знании. Права: Viewer+, родительская KB read.

Ответ: 200 {"success":true,"data":{Knowledge}}

bash
curl $BASE/api/v1/knowledge/k-1 -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge/:id/stages и GET /api/v1/knowledge/:id/spans ​

Назначение: этапы разбора/trace (оба пути — один handler GetKnowledgeSpans). Права: Viewer+, родительская KB read. Параметр запроса: attempt (int, 0=последняя попытка).

Ответ: 200 {"success":true,"data":{"knowledge_id","attempt","latest_attempt","parse_status","current_stage","last_activity_at","stall_state","trace":{...},"last_error":{...}}}

last_activity_at возвращается только во время выполнения разбора, берётся более позднее из updated_at строки и последней записи по всем span текущей попытки; смысл stall_state как выше. current_stage — этап, который всё ещё выполняется; если выполняющихся этапов нет (например, finalizing, когда этапы постобработки закрыты, а подзадачи вроде резюме всё ещё выполняются), берётся этап, к которому принадлежит всё ещё выполняющийся дочерний span. У знаний, признанных housekeeping зависшими, span места зависания помечается как неуспешный с TASK_STALLED, и last_error в первую очередь указывает на него.

bash
curl $BASE/api/v1/knowledge/k-1/spans -H "Authorization: Bearer $TOKEN"

DELETE /api/v1/knowledge/:id ​

Назначение: удаление знания (асинхронно). Права: создатель KB OR Admin+, KB write; API key ingest/full.

Ответ: 200 {"success":true,"message":"Delete task submitted","data":{"task_id"}}

bash
curl -X DELETE $BASE/api/v1/knowledge/k-1 -H "X-API-Key: $API_KEY"

PUT /api/v1/knowledge/:id ​

Назначение: обновление метаинформации знания. Права как выше. Тело запроса (подмножество types.Knowledge): title, description, tags, custom_metadata (все необязательны). Пропуск description сохраняет прежнее резюме, явная пустая строка очищает резюме, непустое значение сохраняет ручное резюме; в интерфейсе можно редактировать на странице содержимого документа.

custom_metadata — описательные метаданные, заполняемые пользователем (хранятся отдельно от metadata, используемых внутри системы, migration 000078); правила валидации см. в internal/application/service/knowledge.go:

ОграничениеЗначение
Число полей≤ 20
Длина ключа1-64 символа, не может быть пробельным
Тип значенияstring / number / boolean / null
Длина значения≤ 1000 символов

Обновление целиком перезаписью (переданный объект заменяет прежний объект). Если метаданные изменились и у документа уже есть резюме, автоматически ставится в очередь одно обновление резюме (summary_status переходит в pending). Текст метаданных участвует в генерации резюме и в контексте модели уровня документа (Knowledge.CustomMetadataText()).

Ответ: 200 {"success":true,"message":"Knowledge updated successfully","data":{Knowledge}}

bash
curl -X PUT $BASE/api/v1/knowledge/k-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"title":"новый заголовок","custom_metadata":{"отдел":"центр разработки","уровень секретности":"внутренний","версия":3}}'

POST /api/v1/knowledge/:id/regenerate-summary ​

Назначение: перегенерировать резюме этого документа после редактирования содержимого блока или пользовательских метаданных. Права: KB owner или Admin+, и есть право write на родительскую KB.

Поведение бывает двух видов: если у документа ранее не было резюме (summary_status пусто или none), генерация запускается синхронно; если резюме уже есть, вместо этого ставится в очередь задача обновления, summary_status переходит в pending, и она выполняется асинхронно через knowledge_summary_refresh.go.

Ответ: 200 {"success":true,"data":{Knowledge}}

bash
curl -X POST $BASE/api/v1/knowledge/k-1/regenerate-summary -H "Authorization: Bearer $TOKEN"

PUT /api/v1/knowledge/manual/:id ​

Назначение: полная замена вручную введённого Markdown (подмножество ManualKnowledgePayload: title/content/status/...). Применяется только к ручным знаниям; содержимое загруженных файлов этим интерфейсом изменить нельзя. content — полный текст, пустое содержимое отклоняется. status — draft (не попадает в поиск) или publish (строится индекс); если status не передан, запись сохраняется как черновик. Права как выше.

Ответ: 200 {"success":true,"data":{Knowledge}}

bash
curl -X PUT $BASE/api/v1/knowledge/manual/k-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"content":"# обновлённое содержимое","status":"publish"}'

POST /api/v1/knowledge/:id/reparse ​

Назначение: повторный разбор знания. Права как выше. Тело запроса (необязательно): {"process_config":{...}}.

Ответ: 200 {"success":true,"message":"Reparse task submitted","data":{Knowledge}}

bash
curl -X POST $BASE/api/v1/knowledge/k-1/reparse -H "X-API-Key: $API_KEY"

POST /api/v1/knowledge/:id/cancel-parse ​

Назначение: отмена разбора. Права как выше. Без тела запроса.

Ответ: 200 {"success":true,"message":"Knowledge parse cancelled","data":{Knowledge}}

bash
curl -X POST $BASE/api/v1/knowledge/k-1/cancel-parse -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge/:id/download ​

Назначение: загрузка исходного файла (строже, чем предпросмотр: Contributor+ и KB write; общий Viewer в организации не может скачать исходный файл). API key retrieve/full.

Ответ: 200 бинарный поток (application/octet-stream).

bash
curl -OJ $BASE/api/v1/knowledge/k-1/download -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge/:id/preview ​

Назначение: предпросмотр содержимого файла после разбора. Права: Viewer+, KB read.

Ответ: 200 поток предпросмотра (текст/HTML).

bash
curl $BASE/api/v1/knowledge/k-1/preview -H "Authorization: Bearer $TOKEN"

PUT /api/v1/knowledge/image/:id/:chunk_id ​

Назначение: обновление информации об изображениях некоторого блока (caption/OCR и т. п.). Права: создатель KB OR Admin+, KB write. Параметры пути: id — ID знания, chunk_id — ID блока. Тело запроса — JSON с информацией об изображениях.

Ответ: 200 {"success":true,...}

bash
curl -X PUT $BASE/api/v1/knowledge/image/k-1/c-1 -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"caption":"схема архитектуры"}'

Назначение: поиск файлов по всем KB (селектор @файл в сессии). Права: Viewer+; API key retrieve/full.

Параметр запросаТипОбязательныйОписание
keyword / querystringУсловно обязательныйКлючевое слово (оба равнозначны); при пустом значении обязательно передать recent=true, иначе возвращается 400
file_typesstringНетФильтр по расширениям через запятую, например csv,xlsx
offset / limitintНетПагинация; limit по умолчанию 20, диапазон от 1 до 100
recentboolНетПри пустом ключевом слове возвращать последние файлы
agent_idstringНетОбласть общего Agent
agent_source_tenant_iduint64НетСелектор пространства-источника общего Agent, проверяется по отношению публикации

Ответ: 200 {"success":true,"data":[Knowledge],"has_more":bool,"total":N}

bash
curl "$BASE/api/v1/knowledge/search?keyword=отчёт&limit=20" -H "Authorization: Bearer $TOKEN"

GET /api/v1/knowledge/move/progress/:task_id ​

Назначение: запрос прогресса задачи перемещения. Права: Viewer+; API key retrieve/full.

Ответ: 200 {"success":true,"data":{MoveProgress}}

bash
curl $BASE/api/v1/knowledge/move/progress/task-1 -H "Authorization: Bearer $TOKEN"

PUT /api/v1/knowledge/tags ​

Назначение: пакетное обновление тегов знаний. Права: Contributor+; API key ingest/full (белый список KB проверяется в handler). Два способа взаимоисключающие: updates либо knowledge_ids вместе с tag_ids.

ПолеТипОбязательныйОписание
updatesmap[string][]stringодно из двух с knowledge_idsknowledge_id → tag_ids, заменяет существующие теги документа
kb_idstringНетОграничить KB; если не передан, выводится из первого знания
knowledge_ids[]stringодно из двух с updatesмаксимум 20 документов, одна и та же группа тегов
tag_ids[]stringобязательно при knowledge_idsмаксимум 50; пустой массив очищает теги

Ответ: 200 {"success":true}

bash
curl -X PUT $BASE/api/v1/knowledge/tags -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"updates":{"k-1":["t-1"]},"kb_id":"kb-1"}'

POST /api/v1/knowledge/batch-reparse ​

Назначение: пакетный повторный разбор. Права: Contributor+; API key ingest/full.

ПолеТипОбязательныйОписание
kb_idstringДа (binding:"required")KB ID
ids[]stringДа (binding:"required")Список ID знаний
process_configobjectНетПереопределение разбора

Ответ: 200 {"success":true,"message":"Batch reparse task submitted","data":{"task_id"}}

bash
curl -X POST $BASE/api/v1/knowledge/batch-reparse -H "X-API-Key: $API_KEY" \
  -H 'Content-Type: application/json' -d '{"kb_id":"kb-1","ids":["k-1","k-2"]}'

POST /api/v1/knowledge/batch-delete ​

Назначение: пакетное удаление (≤200 записей). Права: Contributor+; API key ingest/full.

ПолеТипОбязательныйОписание
kb_idstringДа (binding:"required")KB ID
ids[]stringДа (binding:"required")Список ID знаний (≤200)

Ответ: 200 {"success":true,"message":"Batch delete task submitted","data":{"task_id","deleted_count"}}

bash
curl -X POST $BASE/api/v1/knowledge/batch-delete -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"kb_id":"kb-1","ids":["k-1"]}'

POST /api/v1/knowledge/folder ​

Назначение: отнести несколько документов в указанную папку (меняется только классификация; принадлежность к базе знаний и повторный разбор не затрагиваются). Права: Contributor+ / API key ingest.

ПолеТипОбязательныйОписание
kb_idstringДаID базы знаний
knowledge_ids[]stringДаПеремещаемые документы
folder_pathstringНетПуть целевой папки относительно корня базы знаний, например docs/spec; новый путь не нужно создавать заранее, пустая строка означает перенос в корень базы знаний

Ответ: 200 {"success":true}

bash
curl -X POST $BASE/api/v1/knowledge/folder -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"kb_id":"kb-1","knowledge_ids":["k-1","k-2"],"folder_path":"проектная документация"}'

POST /api/v1/knowledge/move ​

Назначение: перемещение знаний между KB (асинхронно). Права: Contributor+; API key ingest/full (и исходная, и целевая KB должны быть в белом списке).

ПолеТипОбязательныйОписание
knowledge_ids[]stringДа (binding:"required,min=1")Перемещаемые знания
source_kb_idstringДа (binding:"required")Исходная KB
target_kb_idstringДа (binding:"required")Целевая KB
modestringДа (binding:"required,oneof=reuse_vectors reparse")Переиспользовать векторы или повторно разобрать

Ответ: 200 {"success":true,"data":{"task_id","source_kb_id","target_kb_id","knowledge_count","message"}}

bash
curl -X POST $BASE/api/v1/knowledge/move -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"knowledge_ids":["k-1"],"source_kb_id":"kb-1","target_kb_id":"kb-2","mode":"reuse_vectors"}'

Чтение галереи требует Viewer+ и права чтения на целевую базу знаний; API-ключ — retrieve или full, с соблюдением области базы знаний. Переключатели галереи и векторного индекса изображений независимы; в список входят описания извлечённых изображений, OCR и источник.

Возвращает {"success":true,"data":{"attribute_sources":[...],"attributes":[...],"mode":"...","status":{...}}}. Клиент строит поиск, фильтрацию и сортировку по возвращённым определениям свойств и политикам их использования; не хардкодьте доступные свойства. ID свойств имеют префикс источника, например builtin:caption, system:contain.text.

GET /api/v1/knowledge-bases/:id/images ​

Параметр запросаОписание
page / page_sizeпо умолчанию 1 / 20, page_size максимум 1000
keyword / search_inпоиск подстроки без учёта регистра; search_in — ID искомых свойств через запятую, по умолчанию описание и OCR
sort_by / sort_orderID сортируемого свойства, по умолчанию created_at / desc; поддерживаются также старые значения created_at, updated_at, caption
knowledge_idsID исходных документов через запятую; GET берёт только первые 50, для большего числа документов используйте POST
is_enabledtrue / false, фильтр по состоянию включения принадлежащего блока
attr_filtersJSON-объект: ID свойства → массив допустимых значений; по одному свойству OR, между свойствами AND
attr_rulesJSON-объект: ID свойства → значение → on/off; принудительный показ через on имеет приоритет над off, изображения, не попавшие в правила, сохраняются

Принимаются только поля поиска, фильтрации и сортировки, признанные применимыми в gallery-config; неприменимые поля отбрасываются. Ответ {"success":true,"data":[ImageAsset],"total":N,"page":1,"page_size":20}. Каждый элемент содержит id, chunk_id, knowledge_id, source_name, url, original_url, caption, ocr_text, attrs, is_enabled, status и метки времени.

POST /api/v1/knowledge-bases/:id/images ​

Тот же read-only запрос, что и GET, но параметры передаются в JSON body; knowledge_ids и search_in — массивы строк, attr_filters / attr_rules передаются объектами напрямую. Исходных документов — максимум 1000, при превышении возвращается 400; удобно при полном выделении фильтра по источнику, чтобы URL не оказался слишком длинным.

bash
curl -X POST "$BASE/api/v1/knowledge-bases/kb-1/images" -H "X-API-Key: $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"page":1,"page_size":20,"knowledge_ids":["k-1","k-2"],"keyword":"архитектура"}'

GET /api/v1/image-attrs/schema ​

Глобальный read-only реестр свойств наблюдения за изображениями; требуется Viewer+, API-ключ retrieve/full, привязки к базе знаний в пути нет. Редактор базы знаний использует его для настройки условий наблюдения за изображениями и OCR; фактическое применение поиска и фильтрации в галерее определяется gallery-config конкретной базы знаний.

Справочник по реализации ​

Регистрация маршрутов: RegisterKnowledgeBaseRoutes, RegisterKnowledgeRoutes в internal/router/routes_knowledge.go. Handler: internal/handler/knowledgebase.go, internal/handler/knowledge.go.

Версия v0.8.3 · MIT License