sdk/KB_API_Guide.md
mrmamongo 2926e702d7 docs: add Knowledge Base API guide
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-20 12:07:05 +03:00

401 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Knowledge Base API — Руководство
Базовый URL: `https://api.er-gpt.ru`
Все запросы требуют авторизации (передавай токен в заголовке `Authorization: Bearer <token>`).
---
## 1. Базы знаний (Knowledge Base)
### 1.1 Создать базу знаний
```bash
curl -X POST https://api.er-gpt.ru/api/knowledge \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Моя база знаний",
"description": "Описание базы",
"config": {
"chunk_size": 1000,
"chunk_overlap": 200
}
}'
```
**Параметры тела запроса:**
| Поле | Тип | Обязательное | Описание |
|------|-----|-------------|----------|
| `name` | string | Да | Название базы знаний |
| `description` | string | Да | Описание базы знаний |
| `config.chunk_size` | integer | Да | Размер чанка (фрагмента текста) |
| `config.chunk_overlap` | integer | Да | Перекрытие между чанками |
**Ответ:** объект `KnowledgeBase`
```json
{
"id": "uuid",
"name": "Моя база знаний",
"description": "Описание базы",
"config": { "chunk_size": 1000, "chunk_overlap": 200 },
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"user_id": "uuid",
"documents_count": 0
}
```
### 1.2 Получить список баз знаний
```bash
curl -X GET "https://api.er-gpt.ru/api/knowledge?current=0&page_size=10" \
-H "Authorization: Bearer <token>"
```
**Query-параметры:**
| Параметр | Тип | По умолчанию | Описание |
|----------|-----|-------------|----------|
| `search` | string | null | Поиск по названию/описанию |
| `current` | integer | 0 | Номер страницы (0-based) |
| `page_size` | integer | 10 | Количество элементов на странице |
**Ответ:**
```json
{
"result": [ /* массив KnowledgeBase */ ],
"total": 42
}
```
### 1.3 Получить одну базу знаний
```bash
curl -X GET https://api.er-gpt.ru/api/knowledge/{id} \
-H "Authorization: Bearer <token>"
```
**Параметры пути:**
| Параметр | Тип | Описание |
|----------|-----|----------|
| `id` | UUID | ID базы знаний |
**Ответ:** объект `QueryKnowledgeBaseAggregate` (включает `documents_count`)
### 1.4 Обновить базу знаний
```bash
curl -X PATCH https://api.er-gpt.ru/api/knowledge/{id} \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Новое название",
"description": "Новое описание"
}'
```
**Параметры тела запроса:**
| Поле | Тип | Обязательное | Описание |
|------|-----|-------------|----------|
| `name` | string | Да | Новое название |
| `description` | string | Да | Новое описание |
### 1.5 Удалить базу знаний
```bash
curl -X DELETE https://api.er-gpt.ru/api/knowledge/{id} \
-H "Authorization: Bearer <token>"
```
> **Важно:** удаление базы знаний каскадно удаляет все связанные с ней документы и чанки.
---
## 2. Документы
### 2.1 Загрузить документ в базу знаний
```bash
curl -X POST https://api.er-gpt.ru/api/knowledge/upload/{kb_id} \
-H "Authorization: Bearer <token>" \
-F "file=@/path/to/document.pdf"
```
**Параметры пути:**
| Параметр | Тип | Описание |
|----------|-----|----------|
| `kb_id` | UUID | ID базы знаний |
**Тело запроса:** `multipart/form-data` с полем `file` (бинарный файл)
**Ответ:** объект `DocumentWithContentUrl`
```json
{
"id": "uuid",
"filename": "document.pdf",
"bucket": "documents",
"kb_id": "uuid",
"content_type": "application/pdf",
"size": 123456,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"status": "PENDING",
"error": null,
"content_url": "https://..."
}
```
**Статусы документа:**
- `PENDING` — ожидает обработки
- `PROCESSING` — в процессе обработки
- `COMPLETED` — обработан успешно
- `FAILED` — ошибка обработки
### 2.2 Получить список документов базы знаний
```bash
curl -X GET "https://api.er-gpt.ru/api/knowledge/{kb_id}/documents?statuses=PENDING&statuses=FAILED&current=0&page_size=10" \
-H "Authorization: Bearer <token>"
```
**Параметры пути:**
| Параметр | Тип | Описание |
|----------|-----|----------|
| `kb_id` | UUID | ID базы знаний |
**Query-параметры:**
| Параметр | Тип | По умолчанию | Описание |
|----------|-----|-------------|----------|
| `statuses` | string[] | null | Фильтр по статусам (можно несколько) |
| `current` | integer | 0 | Номер страницы |
| `page_size` | integer | 10 | Размер страницы |
**Ответ:**
```json
{
"result": [ /* массив DocumentWithContentUrl */ ],
"total": 15
}
```
### 2.3 Удалить документ
```bash
curl -X DELETE https://api.er-gpt.ru/api/knowledge/document/{document_id} \
-H "Authorization: Bearer <token>"
```
### 2.4 Массовое удаление документов
```bash
curl -X DELETE "https://api.er-gpt.ru/api/knowledge/document/bulk?document_ids=uuid1&document_ids=uuid2&document_ids=uuid3" \
-H "Authorization: Bearer <token>"
```
**Query-параметры:**
| Параметр | Тип | Описание |
|----------|-----|----------|
| `document_ids` | UUID[] | Массив ID документов для удаления |
### 2.5 Перезапустить обработку документа
```bash
curl -X POST https://api.er-gpt.ru/api/knowledge/{document_id}/retry \
-H "Authorization: Bearer <token>"
```
> Полезно, если документ застрял в статусе `FAILED` или `PENDING`.
---
## 3. Чанки документов
### 3.1 Получить чанки документа
```bash
curl -X GET "https://api.er-gpt.ru/api/knowledge/documents/{document_id}/chunks?limit=10&cursor=<cursor>" \
-H "Authorization: Bearer <token>"
```
**Параметры пути:**
| Параметр | Тип | Описание |
|----------|-----|----------|
| `document_id` | UUID | ID документа |
**Query-параметры:**
| Параметр | Тип | По умолчанию | Описание |
|----------|-----|-------------|----------|
| `search` | string | null | Поисковый запрос по тексту чанков |
| `cursor` | string | null | Курсор для пагинации |
| `limit` | integer | 10 | Количество чанков за запрос |
**Ответ:**
```json
{
"pagination": {
"cursor": "next_cursor_string",
"has_more": true
},
"result": [
{
"text": "Содержимое чанка...",
"document_id": "uuid",
"filename": "document.pdf",
"chunk_id": 0
}
]
}
```
---
## 4. Поиск по базе знаний
### 4.1 Семантический поиск
```bash
curl -X POST https://api.er-gpt.ru/api/knowledge/{kb_id}/search \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"query": "Как настроить авторизацию?",
"kb_id": "uuid",
"limit": 5,
"score_threshold": 0.2
}'
```
**Параметры пути:**
| Параметр | Тип | Описание |
|----------|-----|----------|
| `kb_id` | UUID | ID базы знаний |
**Тело запроса:**
| Поле | Тип | Обязательное | По умолчанию | Описание |
|------|-----|-------------|-------------|----------|
| `query` | string | Да | — | Поисковый запрос |
| `kb_id` | UUID | Да | — | ID базы знаний (дублирует путь) |
| `limit` | integer / null | Нет | null | Максимальное количество результатов |
| `score_threshold` | number | Нет | 0.2 | Минимальный порог релевантности (0.01.0) |
**Ответ:**
```json
{
"chunks": [
{
"id": "uuid",
"filename": "document.pdf",
"bucket": "documents",
"kb_id": "uuid",
"content_type": "application/pdf",
"size": 123456,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"status": "COMPLETED",
"error": null,
"content_url": "https://...",
"chunks": [
{
"text": "Релевантный фрагмент текста...",
"score": 0.85
}
]
}
]
}
```
> Поиск возвращает документы с вложенными чанками, отсортированными по релевантности. Каждый чанк содержит `score` — степень соответствия запросу.
---
## 5. Полная схема KnowledgeBase
```json
{
"id": "uuid",
"name": "string",
"description": "string",
"config": {
"chunk_size": 1000,
"chunk_overlap": 200
},
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"user_id": "uuid",
"documents_count": 0
}
```
## 6. Полная схема DocumentWithContentUrl
```json
{
"id": "uuid",
"filename": "string",
"bucket": "string",
"kb_id": "uuid",
"content_type": "string",
"size": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"status": "PENDING | PROCESSING | COMPLETED | FAILED",
"error": "string | null",
"content_url": "string"
}
```
---
## 7. Обработка ошибок
Все эндпоинты возвращают `422 Unprocessable Entity` при валидационных ошибках:
```json
{
"detail": [
{
"loc": ["body", "name"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
```
---
## 8. Quick Reference
| Действие | Метод | URL |
|----------|-------|-----|
| Создать базу знаний | `POST` | `/api/knowledge` |
| Получить список баз | `GET` | `/api/knowledge` |
| Получить базу | `GET` | `/api/knowledge/{id}` |
| Обновить базу | `PATCH` | `/api/knowledge/{id}` |
| Удалить базу | `DELETE` | `/api/knowledge/{id}` |
| Загрузить документ | `POST` | `/api/knowledge/upload/{kb_id}` |
| Получить документы базы | `GET` | `/api/knowledge/{kb_id}/documents` |
| Удалить документ | `DELETE` | `/api/knowledge/document/{document_id}` |
| Удалить документы bulk | `DELETE` | `/api/knowledge/document/bulk` |
| Перезапустить обработку | `POST` | `/api/knowledge/{document_id}/retry` |
| Получить чанки | `GET` | `/api/knowledge/documents/{document_id}/chunks` |
| Поиск | `POST` | `/api/knowledge/{kb_id}/search` |