Skip to content

Обзор API ​

HTTP API aihelpme.ru использует префикс /api/v1 и поддерживает аутентификацию JWT, API Key и Embed token; встроенные эндпоинты MCP Server используют отдельную аутентификацию по токену эндпоинта. Перед вызовом интерфейсов ресурсов нужно выбрать учётные данные в зависимости от типа клиента и следовать единым соглашениям об ответах, обработке ошибок, пагинации и потоковых событиях.

Base URL и префикс версии ​

  • Все бизнес-API смонтированы под префиксом /api/v1 (r.Group("/api/v1") в router.go).
  • Проверка работоспособности: GET /health (без аутентификации), возвращает {"status":"ok"}.
  • Swagger UI: /swagger/index.html бэкенда, регистрируется только в режиме, отличном от release (GIN_MODE != release). Docker Compose по умолчанию использует release; шаги включения, порт бэкенда и диагностика пустой страницы см. в руководстве по разработке.
  • Особые пути помимо аутентификации: GET|HEAD /r/:token (URL авторизации ресурса с коротким сроком действия), GET /files (прокси файлов после аутентификации), GET|HEAD /api/v1/files/presigned (URL с HMAC-подписью, без аутентификации), GET /api/v1/files/presigned-preview (диагностика Admin).
BASE=http://localhost:8080

Способы аутентификации ​

Аутентификация единообразно обрабатывается middleware Auth из internal/middleware/auth.go, попытки выполняются в следующем порядке:

JWT Bearer (пользователи Web) ​

Authorization: Bearer <access_token>
  • Через POST /api/v1/auth/login (или register / OIDC; нативные десктопные приложения используют auto-setup) получают token и refresh_token; POST /api/v1/auth/refresh выдаёт новый token.
  • Необязательный заголовок X-Tenant-ID: <tenant_id>: переключение целевого пространства за пределами указанного в JWT (нужно быть активным участником этого пространства или обладать свойством кросс-пространственного суперадмина CanAccessAllTenants). Некорректное значение или 0 сразу возвращает 400.
  • Если из JWT не удалось определить ни одного пространства и эндпоинт не входит в белый список «пространство не требуется» (например, /auth/me, /me/invitations и т. п.), возвращается 409 {"code":"TENANT_REQUIRED"}.

API Key (машинный субъект) ​

X-API-Key: <api_key>
  • Key уровня пространства (workspace): создаётся в POST /api/v1/tenants/:id/api-keys, привязан к одному пространству; указание X-Tenant-ID на другое пространство даёт 403.
  • Key уровня платформы (platform): создаётся в POST /api/v1/system/admin/api-keys, обязательно должен нести X-Tenant-ID для выбора целевого пространства (кроме /system/admin/*, /tenants/all|search, POST /tenants), иначе возвращается 409 TENANT_REQUIRED.
  • Модель авторизации (internal/middleware/api_key_gate.go, по умолчанию запрет): каждый маршрут /api/v1 должен явно объявлять политику API key; для маршрутов без объявления любой key получает 403.
  • full_access key: полные права в пространстве (машинный эквивалент Owner).
  • Ограниченный (scoped) key: пропускается по capability и ограничен белым списком knowledge_base_ids. Константы capability см. в internal/types/tenant_api_key.go: retrieve, ingest, chat, read_agents, manage_kbs, manage_agents, message_history, manage_models, manage_mcp_services, manage_datasources, manage_channels, manage_vector_stores, manage_storage_backends, manage_web_search, run_evaluations, manage_members, manage_spaces, manage_tenant_settings; способности платформы: system_tenants_read/manage, system_settings_read/manage, system_runtime_read/manage, system_audit_read.
  • Субъект внешнего пользователя (необязательно, настраивается через api-principal-config пространства):
  • Режим direct: X-External-User-ID: <ID внешнего пользователя> (≤128 символов).
  • Режим signed_token: X-External-User-Token: <HS256 JWT>, требует aud=weknora, exp (время жизни ≤24h), claim tenant_id, совпадающий с целевым пространством, и sub — ID внешнего пользователя.

Embed publish token (анонимный встраиваемый клиент) ​

Публичные маршруты /api/v1/embed/:channel_id/* используют отдельный middleware EmbedAuth (internal/middleware/embed_auth.go):

Authorization: Embed <publish_token или session_token>
  • POST /embed/:channel_id/exchange обменивает publish token на краткосрочный session token; для операций уровня сессии также нужен X-Embed-Session: <sig> (подписанный дескриптор, возвращаемый при создании сессии).
  • Маршруты обратных вызовов IM (/api/v1/im/callback/:channel_id) регистрируются до глобального middleware аутентификации и используют собственную проверку подписи каждой IM-платформы.

Токен эндпоинта MCP (встроенный MCP Server) ​

/mcp/:endpoint_id (без префикса /api/v1) — это MCP Streamable HTTP эндпоинт, публикуемый пространством наружу; проверяется internal/middleware/mcp_endpoint_auth.go:

Authorization: Bearer <endpoint_token>

Токен отображается один раз при создании эндпоинта в разделе «Настройки → Публикация интеграций → MCP Server», его можно ротировать. Запросы выполняются от имени машинного субъекта пространства, которому принадлежит эндпоинт, а права ограничены отмеченными в эндпоинте инструментами и базами знаний. Интерфейс управления эндпоинтами — /api/v1/mcp-endpoints (чтение Viewer+, изменение Admin+, API Key требует manage_channels), использование см. в интеграции MCP.

Схема аутентификации ​

Модель ролей и прав (RBAC) ​

internal/middleware/rbac.go + internal/middleware/access.go:

РольОписание
ownerВладелец пространства: жизненный цикл пространства, API key, управление участниками
adminАдминистратор пространства: конфигурации уровня пространства — модели/инфраструктура/каналы и т. п.
contributorУчастник с правами записи: может создавать KB/Agent, изменять созданные им ресурсы
viewerУчастник только для чтения: чтение и использование сессий
SystemAdminАдминистратор уровня платформы (User.IsSystemAdmin), независим от ролей пространства, охраняет /system/admin/*, применяется всегда
  • В документации «Viewer+ / Contributor+ / Admin+ / Owner» обозначают минимальные требования к роли; «создатель OR Admin+» соответствует RequireOwnershipOrRole (Contributor может изменять только созданные им KB/Agent/контент).
  • При cfg.Tenant.EnableRBAC=false страж ролей только пишет в лог и не блокирует (rollout fail-open); на страж SystemAdmin этот переключатель не влияет.
  • Страж доступа уровня KB KBAccessRead/Write (internal/middleware/kb_access.go): разбирает три типа доступа — «собственный / общий в организации / видимый через общий Agent» — и перезаписывает tenant в контексте запроса на пространство-владелец KB.
  • Субъект API key обходит (short-circuit) страж ролей JWT; его фактические права полностью определяются APIKeyGate (capability + белый список KB).
  • Отклонённые запросы записываются в журнал аудита (middleware.AuditServiceProvider, дедупликация по скользящему окну 1 минута).

Общий формат ответов и коды ошибок ​

Большинство handler'ов возвращают:

json
{ "success": true, "data": { ... } }

Для списочных эндпоинтов распространены дополнительные поля: total, page, page_size. Несколько исключений: часть читающих эндпоинтов /system/admin/* возвращает исходные строки/массивы напрямую (без обёртки); /system/info и подобные используют {"code":0,"msg":"success","data":...}.

Ошибки единообразно выводятся через internal/middleware/error_handler.go (AppError из internal/errors/errors.go):

json
{ "success": false, "error": { "code": 1003, "message": "...", "details": null } }

Уровень middleware (аутентификация/RBAC) возвращает напрямую {"error": "..."} (часть — со строковым "code", например TENANT_REQUIRED).

Код ошибкиЗначениеHTTP
1000ErrBadRequest ошибка запроса400
1001ErrUnauthorized не аутентифицирован401
1002ErrForbidden нет прав403
1003ErrNotFound ресурс не существует404
1004ErrMethodNotAllowed405
1005ErrConflict конфликт409
1006ErrTooManyRequests ограничение частоты/квота429
1007ErrInternalServer внутренняя ошибка500
1008ErrServiceUnavailable временно недоступен503
1009ErrTimeout тайм-аут—
1010ErrValidation ошибка валидации параметров400
2000-2005Пространство: не существует/уже существует/отключено/имя обязательно/недопустимый статус/самостоятельное создание запрещено404/409/403/…
2100-2103Agent: отсутствует модель рассуждений/отсутствуют разрешённые инструменты/недопустимое число итераций (1-20)/недопустимая температура (0-2)400
2200-2201Недопустимая привязка VectorStore / сейчас недоступен400

Есть также ошибки без кода: types.StorageQuotaExceededError (превышена квота хранилища), types.DuplicateKnowledgeError (дублирующийся файл/URL; интерфейс загрузки возвращает 409, а data содержит уже существующий Knowledge).

Соглашения о пагинации ​

internal/handler/list_pagination.go:

ПараметрТипОбязательныйОписание
pageintНетНомер страницы, по умолчанию 1, должен быть ≥1
page_sizeintНетЧисло записей на странице, по умолчанию 20, диапазон 1-100

Значение вне диапазона или недопустимое возвращает ошибку валидации (code 1010). Ответы списков содержат total/page/page_size. Часть эндпоинтов использует курсорную пагинацию: журнал аудита (after_id+limit, ответ содержит next_cursor), задачи среды выполнения системы (cursor+page_size, ответ содержит next_cursor/has_more), Wiki index/log (cursor+limit).

Протокол потоковых эндпоинтов (SSE) ​

Чат-эндпоинты (POST /api/v1/knowledge-chat/:session_id, POST /api/v1/agent-chat/:session_id, GET /api/v1/sessions/continue-stream/:session_id, а также соответствующие маршруты на стороне embed) возвращают Server-Sent Events:

Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive
X-Accel-Buffering: no

Каждое событие — event: message, data: — JSON types.StreamResponse:

ПолеТипОписание
idstringID запроса
response_typestringanswer / references / thinking / tool_call / tool_result / command_output / reflection / session_title / agent_query / artifacts_pending / memory_recalled / user_message_injected / context_compacted / tool_approval_required / tool_approval_resolved / mcp_oauth_required / mcp_oauth_resolved / error / complete; поток записи установки навыков дополнительно содержит install_prompt / install_output
contentstringИнкрементальный текст
doneboolЗавершено ли событие этого типа
knowledge_references[]SearchResultСсылки, передаваемые событием references
tool_calls[]LLMToolCallСобытия вызова инструментов
dataobjectДополнительные метаданные события (например, success результата инструмента, truncated ответа)
session_id / assistant_message_idstringПередаётся событием agent_query
usageTokenUsageprompt_tokens/completion_tokens/total_tokens/cache_*
finish_reasonstringПричина завершения

source_locators в SearchResult (результаты knowledge_references и эндпоинтов поиска) — это позиция данного блока в исходном файле, по ней можно найти ссылку в исходном тексте (для документов, добавленных до запуска этой функции, пусто):

ПолеПрименимый typeОписание
type—pdf / docx / slide / sheet / text / time / section
page, bboxpdfНомер страницы (с 1); bbox — [x0,y0,x1,y1], пропорции относительно ширины и высоты страницы, начало координат в левом верхнем углу страницы, может отсутствовать
blockdocxНомер абзаца или таблицы в тексте (с 1)
slideslideНомер слайда (с 1)
sheet, row_start, row_endsheetИмя листа (для CSV пусто) и номера строк (с 1, как в Excel)
start, endtextДиапазон символов текста исходного файла (кодовые точки Unicode)
start_ms, end_mstimeВременной диапазон аудио (миллисекунды)
section, titlesectionНомер элемента в spine EPUB (с 1) и заголовок раздела
quoteвсеЦитируемый текст, не более 300 символов

Числовые поля со значением 0 опускаются. Объединённый результат поиска несёт объединение позиций объединённых блоков.

Поток завершается response_type:"complete" (done:true); при ошибке завершается response_type:"error" (done:true). Сбой выполнения инструмента возвращается как tool_result (data.success=false), а error означает только провал всего раунда; когда ответ усечён из-за лимита вывода, событие answer несёт data.truncated=true. continue-stream использует семантику возобновления «воспроизведение + опрос каждые 100ms для догона инкремента» (?message_id= обязателен).

Формы ссылок на файлы (resource_urls) ​

Изображения/вложения, на которые ссылаются ответы и результаты поиска, по умолчанию возвращаются как внутренний дескриптор resource://<handle>; чтобы получить содержимое, клиент должен ещё раз обратиться к прокси /files с аутентификацией. Если стороннее приложение хочет получить ссылку «готовую к отрисовке сразу», можно переключиться в режим прямых ссылок:

Область действияИспользование
Единичный запросДобавить к URL ?resource_urls=public
Всё развёртываниеПеременная окружения RESOURCE_URL_MODE=public

Допустимы только значения handle (по умолчанию) и public; любое другое значение возвращает 400. Параметр единичного запроса имеет приоритет над переменной окружения, поэтому после установки значения по умолчанию public для всего развёртывания всё ещё можно отдельно откатиться через ?resource_urls=handle.

Эндпоинты, поддерживающие этот параметр: POST /knowledge-chat/{session_id}, POST /agent-chat/{session_id}, GET /sessions/continue-stream/{session_id}, GET /messages/{session_id}/load, POST /knowledge-search, POST /knowledge-bases/{id}/hybrid-search (совместим с GET). Переписывание охватывает текст ответа, content / image_info результатов поиска, knowledge_references, шаги выполнения Agent и результаты инструментов, а также вложения-изображения в сообщениях; ссылки в потоковом ответе, разорванные на границе chunk, сначала буферизуются, а затем переписываются, поэтому клиент всегда получает полную ссылку.

Несколько вещей, которые нужно знать перед использованием:

  • Требуется возможность внешних ссылок: прямая ссылка создаётся предподписью бэкенда хранилища либо через APP_EXTERNAL_URL + /r/<token>. Если нет ни того ни другого (например, локальное хранилище и не задан APP_EXTERNAL_URL), ссылка остаётся в исходном виде resource://, и клиент по-прежнему может откатиться к /files;
  • Прямая ссылка анонимно доступна на чтение в течение ограниченного времени (grant, выдаваемый платформой, — 2 часа; предподпись MinIO — 24 часа), любой, кто получил ссылку, сможет прочитать её до истечения срока; не записывайте её в журналы и не пересылайте тем, кому не следует видеть;
  • Встраиваемые каналы не поддерживаются: эндпоинты под /api/v1/embed/... принудительно используют handle, изображения для гостей продолжают идти через аутентифицирующий прокси уровня канала;
  • API Key, ограниченный определёнными базами знаний, при public вернёт 403: такому Key и так запрещён доступ к прокси /files, а получение анонимной прямой ссылки означало бы обход этого же ограничения;
  • Прямая ссылка на один и тот же файл переиспользуется в пределах срока действия, повторные запросы не выдают учётные данные заново, поэтому клиентский кэш и кэш CDN срабатывают.

Какую форму получает каждый канал (Web / IM / встраиваемый виджет / API) и как диагностировать случаи, когда изображения не загружаются, см. в внешний доступ к изображениям и файлам.

Как выбрать эндпоинт поиска ​

Наружу доступны два эндпоинта поиска, оба требуют у API Key права retrieve (или full) и оба возвращают список SearchResult.

По умолчанию используйте POST /knowledge-search. Он проходит тот же конвейер поиска, что и режим «вопрос-ответ» в продукте (recall → rerank → объединение → усечение), и возвращает именно те фрагменты, которые используются в режиме «вопрос-ответ» на странице. POST /knowledge-bases/{id}/hybrid-search — более низкоуровневый эндпоинт recall: по умолчанию не выполняет rerank, а оценка — это оценка recall; подходит для сценариев, где нужно видеть или контролировать исходные результаты recall.

Выбор по сценарию ​

Я хочу…Что использоватьКлючевые моменты тела запроса
Получить результаты поиска для своего RAG / агента, чтобы ранжирование совпадало с режимом «вопрос-ответ» на страницеknowledge-searchquery + knowledge_base_ids, остальное не заполнять
Искать одновременно по нескольким базам знаний с разными embedding-моделямиknowledge-searchknowledge_base_ids
Искать только в некоторых документах или тегахknowledge-searchknowledge_ids / tag_ids; при поиске только по указанным документам не передавайте также их knowledge_base_ids — берётся объединение
Настроить число результатов или порог recall, но всё ещё с rerankknowledge-searchmatch_count, vector_threshold, keyword_threshold
Сменить rerank-модель или изменить порог rerankknowledge-searchrerank.model_id, rerank.threshold
Без rerank, сразу получить результаты recallknowledge-search или hybrid-searchПервый передаёт "rerank":{"enabled":false}; второй не передаёт rerank
Результат пуст, хочется узнать причинуknowledge-searchСмотреть meta.rerank.outcome в ответе
Вектор запроса уже вычислен самостоятельноhybrid-searchquery_embedding + disable_keywords_match: true
Оценка качества recall: фиксированная база, фиксированные параметры, смотрим исходную оценку recallhybrid-searchНе передавать rerank
На основе предыдущей оценки дополнительно сравнить эффект с добавлением rerankhybrid-searchДобавить rerank к тому же запросу
Родительские и соседние блоки должны возвращаться отдельными строками результатов, а не вклеиваться в текстhybrid-searchТак по умолчанию, skip_context_enrichment: true отключает

Различия между ними ​

knowledge-searchhybrid-search
rerankВключён по умолчанию (используется конфигурация пространства); объект rerank может переопределить или отключитьВыключен по умолчанию; включается только при передаче объекта rerank
Несколько баз знанийМожно; embedding-модели могут различатьсяknowledge_base_ids можно, но embedding-модели должны совпадать, и {id} из пути также должен входить в них
Предвычисленный векторНе поддерживаетсяquery_embedding
Контекстные блокиВклеиваются в content результатаВозвращаются отдельными строками результатов
Если match_count опущенrerank_top_k из конфигурации пространства (по умолчанию 10)50
meta.rerankВозвращается всегдаВозвращается только при наличии rerank

Параметры recall обоих эндпоинтов (vector_threshold, keyword_threshold, match_count, disable_keywords_match, disable_vector_match) и объект rerank имеют одинаковый смысл; параметры, опущенные в knowledge-search, берутся из конфигурации поиска пространства (GET /tenants/kv/retrieval-config).

Объект rerank ​

Поле rerank у обоих эндпоинтов имеет одинаковую структуру:

ПолеТипЗначение по умолчаниюОписание
enabledbooltrueУстановка false отключает rerank, результаты сохраняют порядок recall
model_idstringсм. нижеID rerank-модели (модель с type = Rerank в GET /models). Если ID не существует, не активирован или это не rerank-модель, возвращается 400, без незаметной подмены на другую модель
top_kintчисло результатов эндпоинтаСколько максимум оставить после rerank; отрицательное число или более 200 возвращает 400
thresholdfloatrerank_threshold из конфигурации поиска пространства (при отсутствии 0.2)Нижняя граница оценки модели; 0 и отрицательные значения допустимы

Если model_id не передан, последовательно используется: rerank_model_id из конфигурации поиска пространства → первая rerank-модель в пространстве. Если ни того ни другого нет, rerank не выполняется, результаты возвращаются в порядке recall, а meta.rerank.outcome равен no_model.

Процесс rerank использует ту же реализацию, что и цепочка «вопрос-ответ» и инструмент search_knowledge интеллектуального рассуждения (internal/reranking):

  1. Текст, отправляемый модели на оценку = заголовок документа + текст блока без разметки Markdown + описание изображений и OCR-текст + сгенерированные вопросы. К записям FAQ заголовок не добавляется. Если для модели настроены лимиты длины одного документа или одного запроса (max_document_chars / max_request_chars), слишком длинный текст обрезается с конца до лимита перед отправкой, причём первыми отрезаются дополнительный текст изображений и сгенерированные вопросы; из-за одного слишком длинного текста вся партия не провалится.
  2. Оставляются результаты с оценкой не ниже threshold. Если не осталось ни одного, а threshold выше 0.3, порог снижается до max(threshold×0.7, 0.3) и фильтрация повторяется. Если и тогда ничего нет: при максимальной оценке не ниже 0.15 остаётся только эта одна запись, иначе возвращается пустой список.
  3. Оценка ранжирования = 0.6×оценка модели + 0.3×оценка recall + 0.1×вес источника; в metadata результата присутствуют model_score и base_score.
  4. С помощью MMR (λ=0.7) из них выбираются top_k записей, что снижает дублирование контента.

Попадания по вектору изображения также можно переранжировать по оригиналу: модель rerank должна объявлять и реализовывать приём изображений, обычный текстовый rerank по-прежнему использует текстовую информацию; визуальные диалоговые модели могут принимать сохранённые изображения попаданий. Правила сохранения изображений-кандидатов и контекста см. в процессе RAG-поиска.

Когда в hybrid-search включён rerank, глубина recall как минимум равна top_k, пул кандидатов — блоки, занимающие первые max(top_k, 50) мест после слияния, поэтому даже при очень малом match_count модели хватает кандидатов для выбора.

Если загрузка rerank-модели не удалась или вызов завершился ошибкой, запрос не падает, а результаты возвращаются в порядке recall, а причина указывается в meta.rerank.

Диагностика meta.rerank ​

Ответ knowledge-search всегда содержит meta.rerank; hybrid-search содержит его только тогда, когда в запросе был объект rerank.

json
{
  "success": true,
  "data": [],
  "meta": {
    "rerank": {
      "applied": true,
      "outcome": "all_below_threshold",
      "model_id": "rr-1",
      "model_source": "tenant",
      "threshold": 0.3,
      "effective_threshold": 0.3,
      "top_score": 0.08,
      "candidate_count": 24,
      "result_count": 0
    }
  }
}
ПолеОписание
appliedОпределили ли оценки rerank порядок возврата
outcomeсм. таблицу ниже
model_id / model_sourceИспользуемая модель и откуда она взялась: request (указана в запросе), tenant (конфигурация пространства), auto (автоматический выбор)
threshold / effective_thresholdЗапрошенный порог и фактически использованный после деградации
top_scoreНаибольшая оценка модели среди кандидатов
candidate_count / result_countЧисло кандидатов, отправленных на rerank / число возвращённых записей
errorСообщение об ошибке при model_error, model_unavailable
outcomeЗначение
okЕсть результаты, достигшие порога
threshold_degradedПри исходном пороге результатов не было, появились после снижения порога
fallback_top1Ни один порог не пройден, оставлена только запись с наибольшей оценкой
all_below_thresholdМодель считает, что ни один кандидат не релевантен, результат пуст. Можно переформулировать вопрос или снизить rerank.threshold
model_errorВызов модели не удался, возврат в порядке recall
model_unavailableЗагрузка модели не удалась (проблемы конфигурации: учётные данные, адрес и т. п.), возврат в порядке recall
no_modelВ пространстве нет rerank-модели, возврат в порядке recall
disabledrerank.enabled в запросе равен false
no_candidatesНа этапе recall нет результатов

Ограничение частоты ​

АспектОграничениеИсточник
Эндпоинты публичных ссылок общего доступа (/auth/invitations/lookup, /auth/register-by-invite)30 раз/минуту на IP (оба эндпоинта делят лимит), при превышении 429 (code 1006)internal/middleware/auth_public_ratelimit.go
Публичные маршруты EmbedНа (channel, IP) rate_limit_per_minute (по умолчанию 30)/минуту; на уровне channel rate_limit_per_minute*20 (нижняя граница 120)/минуту; на уровне channel rate_limit_per_day (по умолчанию 10000)/сутки; при превышении 429internal/middleware/embed_auth.go
Доверие обратному проксиДоверять X-Forwarded-For только от WEKNORA_TRUSTED_PROXIES (по умолчанию loopback + внутренние подсети) для предотвращения подделки IP в обход ограничения частотыrouter.go trustedProxies()

У остальных бизнес-эндпоинтов глобального ограничения частоты нет; отказы по квоте, например при самостоятельном создании пространства, также используют 429 (code 1006).

Навигация по группам API ​

ГруппаДокументОсновной префикс
Аутентификация и пользователи02-api-auth.md/auth, /me/invitations
Тенанты (пространства) и участники02-api-tenant.md/tenants
Организации и общий доступ02-api-org.md/organizations, /shared-*, /knowledge-bases/:id/shares, /agents/:id/shares
Базы знаний и знания02-api-knowledge.md/knowledge-bases, /knowledge, папки базы знаний, галерея, /image-attrs/schema
Блоки и теги02-api-chunks.md/chunks, /knowledge-bases/:id/tags, /chunker/preview
FAQ и Wiki02-api-faq-wiki.md/knowledge-bases/:id/faq, /faq, /knowledgebase/:kb_id/wiki, /wiki-search
Сессии, сообщения и чат02-api-chat.md/sessions, /messages, /knowledge-chat, /agent-chat, /knowledge-search
Модели и инициализация02-api-model-system.md/models, /initialization, /evaluation, /weknoracloud
Система и управление платформой02-api-system.md/system, /system/admin
Инфраструктура и источники данных02-api-infra.md/vector-stores, /storage-backends, /web-search-providers, /datasource
Agent и MCP02-api-agent-mcp.md/agents, /mcp-services, /agent, /user/favorites
Встроенный MCP Serverинтеграция MCP/mcp-endpoints, /mcp/:endpoint_id
Локальный браузерлокальный браузер/me/browser, /local-browser
Песочница, навыки и личные переменные02-api-sandbox-skills.md/sandbox-configs, /skills, /me/env-vars
Долговременная память02-api-memory.md/memory, /tenants/kv/memory-config
IM, Embed и файловые сервисы02-api-channels.md/im, /im-channels, /wechat, /embed-channels, /embed, /files, /r/:token

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

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