Примеры запросов
Готовые примеры: поиск и чат со стримом.
Ниже — рабочие примеры на основные сценарии: поиск, диалог с агентом и загрузка документа.
Поиск по базе знаний
curl https://api.cosai.pro/v1/search \
-H "Authorization: Bearer cosai_sk_…" \
-H "Content-Type: application/json" \
-d '{"query": "сколько стоит доставка", "limit": 6}'Ответ — список найденных фрагментов с их рангами в векторном и полнотекстовом поиске и итоговым RRF-скором:
{
"query": "сколько стоит доставка",
"results": [
{
"chunk_id": "…",
"document_id": "…",
"entity_type": "document",
"title": "Условия отгрузки",
"content": "…",
"rrf_score": 0.83,
"dense_rank": 1,
"sparse_rank": 3
}
]
}Диалог с агентом (потоковый ответ, SSE)
curl -N https://api.cosai.pro/v1/agents/<agent_id>/chat \
-H "Authorization: Bearer cosai_sk_…" \
-H "Content-Type: application/json" \
-d '{"message": "Какой у вас гарантийный срок?"}'Ответ приходит потоком событий Server-Sent Events:
event: start
data: {"conversation_id":"…","citations":[{"n":1,"document_id":"…","chunk_id":"…","title":"Гарантийные условия"}]}
event: text
data: {"delta":"Гарантийный "}
event: text
data: {"delta":"срок — 12 месяцев [1]."}
event: done
data: {"conversation_id":"…","usage":{"inputTokens":412,"outputTokens":18},"citations":[…]}Чтобы продолжить тот же диалог следующим сообщением, передайте conversation_id из события start:
curl -N https://api.cosai.pro/v1/agents/<agent_id>/chat \
-H "Authorization: Bearer cosai_sk_…" \
-H "Content-Type: application/json" \
-d '{"message": "А на комплектующие?", "conversation_id": "<conversation_id из start>"}'Пример чтения потока на JavaScript:
const res = await fetch(`https://api.cosai.pro/v1/agents/${agentId}/chat`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` },
body: JSON.stringify({ message: 'Какой у вас гарантийный срок?' }),
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buf = '';
for (;;) {
const { done, value } = await reader.read();
if (done) break;
buf += decoder.decode(value, { stream: true });
for (const line of buf.split('\n')) {
if (line.startsWith('data:')) console.log(JSON.parse(line.slice(5)));
}
}Загрузка документа
Загрузка файла (multipart, до 10 файлов, каждый до 25 МБ, форматы PDF/DOCX/TXT/MD):
curl https://api.cosai.pro/v1/sources/<source_id>/files \
-H "Authorization: Bearer cosai_sk_…" \
-F "files[]=@catalog.pdf"{ "files": [{ "name": "catalog.pdf", "job_id": "…" }] }Загрузка текстового документа без файла:
curl https://api.cosai.pro/v1/sources/<source_id>/documents \
-H "Authorization: Bearer cosai_sk_…" \
-H "Content-Type: application/json" \
-d '{"title": "FAQ по доставке", "content": "…текст документа…"}'Оба запроса возвращают 202 Accepted — обработка (разбор → нарезка → эмбеддинг → индекс) идёт асинхронно; статус можно проверить через GET /jobs/:id.
Про цитаты в ответах
Массив citations (в событии start и done чата, а также в качестве отдельного элемента при прямом поиске) — это список фрагментов, на которые агент опирался, каждый с номером n, соответствующим меткам [N] внутри текста ответа. Так можно показать пользователю не просто ответ, а ответ со ссылками на конкретные источники.