API v2 – źródła i trenowanie
Wyświetlaj listę źródeł agenta i twórz nowe, przesyłaj pliki bezpośrednio do pamięci masowej, usuwaj dokumenty, sprawdzaj stan trenowania i uruchamiaj ponowne trenowanie źródeł internetowych.
Za pomocą tych punktów końcowych zarządzasz źródłami tekstowymi, Q&A, URL i plikowymi oraz ponownie trenujesz zindeksowane źródła internetowe. Każdy punkt końcowy na tej stronie wymaga nagłówka Authorization: Bearer YOUR_API_KEY oraz dostępu do {agentId}.
Wspólne błędy uwierzytelniania, walidacji, limitów i zasobów opisano w katalogu błędów.
Obiekt źródła
| Pole | Typ | Uwagi |
|---|---|---|
id | ciąg znaków | Identyfikator dokumentu. |
title | ciąg znaków | Tytuł źródła. |
sourceType | ciąg znaków | Zapisany typ źródła: web_crawl, file_upload, text_snippet lub qna_entry. |
createdAt | liczba całkowita lub null | Znacznik czasu Unix w sekundach. |
lastCrawledAt | liczba całkowita lub null | Znacznik czasu Unix w sekundach. |
sourceMetadata | dowolna wartość JSON | Zapisane metadane źródła. |
Lista źródeł
Ścieżka: /api/v2/agents/{agentId}/sources
GET /api/v2/agents/{agentId}/sources
Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.
| Parametr | Wymagane | Ograniczenia |
|---|---|---|
limit | Nie | Liczba całkowita od 1 do 100; domyślnie 20. |
cursor | Nie | Nieprzejrzysty kursor zwrócony przez poprzednią stronę wyników. Prześlij go bez zmian. |
sourceType | Nie | web_crawl, file_upload, text_snippet lub qna_entry. |
curl 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/sources?sourceType=text_snippet&limit=20' \ -H 'Authorization: Bearer YOUR_API_KEY'
Sukces: 200 OK
{
"data": [
{
"id": "41b4c1d3-887d-46a5-95ae-c761922c6bc7",
"title": "Refund policy",
"sourceType": "text_snippet",
"createdAt": 1784332800,
"lastCrawledAt": null,
"sourceMetadata": null
}
],
"pagination": {
"cursor": null,
"hasMore": false,
"total": 1
}
}
Nieprawidłowe wartości limit, cursor oraz sourceType skutkują błędem 400 VALIDATION_INVALID_BODY.
Dodawanie źródła tekstowego
Ścieżka: /api/v2/agents/{agentId}/sources/text
POST /api/v2/agents/{agentId}/sources/text
Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.
| Pole treści żądania | Wymagane | Typ i ograniczenia |
|---|---|---|
title | Tak | Ciąg znaków o długości od 1 do 200 znaków przed przycięciem; przyjęta wartość jest przycinana. |
content | Tak | Niepusty ciąg znaków, o długości nieprzekraczającej 262 144 bajtów UTF-8 (256 KB), niebędący wyłącznie białymi znakami. |
curl -X POST 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/sources/text' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"title":"Refund policy","content":"Refunds are available within 30 days."}'
Sukces: 201 Created
{
"documentId": "41b4c1d3-887d-46a5-95ae-c761922c6bc7"
}
Nieprawidłowe dane wejściowe lub błąd przetwarzania niezwiązany z pamięcią masową skutkuje błędem 400 VALIDATION_INVALID_BODY. Przekroczenie limitu pamięci masowej podczas przetwarzania skutkuje błędem 403 QUOTA_STORAGE_LIMIT.
Dodawanie źródła pytań i odpowiedzi
Ścieżka: /api/v2/agents/{agentId}/sources/qna
POST /api/v2/agents/{agentId}/sources/qna
Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.
| Pole treści żądania | Wymagane | Typ i ograniczenia |
|---|---|---|
title | Tak | Ciąg znaków o długości od 1 do 200 znaków przed przycięciem; przyjęta wartość jest przycinana. |
questions | Tak | Tablica maksymalnie 10 ciągów znaków, każdy o długości do 500 znaków. Co najmniej jeden wpis musi zawierać znak inny niż biały znak. |
answer | Tak | Niepusty ciąg znaków, o długości nieprzekraczającej 262 144 bajtów UTF-8 (256 KB), niebędący wyłącznie białymi znakami. |
curl -X POST 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/sources/qna' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"title":"Shipping time","questions":["How long does shipping take?","When will my order arrive?"],"answer":"Standard shipping takes 3–5 business days."}'
Sukces: 201 Created
{
"documentId": "531a3fbe-40c2-4d22-a524-1f4a70f509f1"
}
Nieprawidłowe dane wejściowe lub błąd przetwarzania niezwiązany z pamięcią masową skutkuje błędem 400 VALIDATION_INVALID_BODY. Przekroczenie limitu pamięci masowej podczas przetwarzania skutkuje błędem 403 QUOTA_STORAGE_LIMIT.
Dodawanie lub ponowne trenowanie źródła URL
Ścieżka: /api/v2/agents/{agentId}/sources/url
POST /api/v2/agents/{agentId}/sources/url
Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.
| Pole treści żądania | Wymagane | Typ i ograniczenia |
|---|---|---|
url | Tak | Niepusty adres URL typu HTTP lub HTTPS z domeną. Brakujący protokół jest normalizowany do https://. Adresy typu loopback, prywatne, link-local, unique-local, zarezerwowane zakresy IP, warianty localhost, wewnętrzne TLD oraz nazwy hostów bez kropki są odrzucane. |
Przesłanie adresu URL już zindeksowanego dla danego agenta tworzy zadanie ponownego trenowania. W przypadku nowego adresu URL najpierw sprawdzana jest dostępna pamięć masowa. Adresy URL prowadzące do wideo wymagają dodatkowo dostępu do transkrypcji wideo w ramach planu.
curl -X POST 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/sources/url' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"url":"https://docs.example.com/getting-started"}'
Sukces: 202 Accepted
{
"jobId": "c3c61f67-70fe-42da-a843-24112ded8aeb",
"isRetrain": false
}
Nieprawidłowe dane wejściowe skutkują błędem 400 VALIDATION_INVALID_BODY. Brak dostępu do transkrypcji wideo skutkuje błędem 403 SUBSCRIPTION_API_RESTRICTED_PLAN; przekroczenie limitu pamięci masowej lub kolejki skutkuje błędem 403 QUOTA_STORAGE_LIMIT; błąd tworzenia zadania niezwiązany z limitem skutkuje błędem 500 INTERNAL_SERVER_ERROR.
Dodawanie źródeł plikowych za pomocą podpisanych adresów URL przesyłania
Źródła plikowe wykorzystują dwuetapowy przepływ API, dzięki czemu bajty pliku trafiają bezpośrednio z Twojego klienta do prywatnej pamięci masowej, zamiast przechodzić przez trasę API. Każdy plik może mieć maksymalnie 50 MB, a jedno żądanie może zawierać maksymalnie 20 plików. Obsługiwane rozszerzenia to .pdf, .txt, .md, .docx, .xlsx i .pptx.
1. Tworzenie podpisanych adresów URL przesyłania
Ścieżka: /api/v2/agents/{agentId}/sources/file/upload-url
POST /api/v2/agents/{agentId}/sources/file/upload-url
Wyślij oryginalne nazwy plików:
{
"files": [
{ "fileName": "product-guide.pdf" },
{ "fileName": "faq.md" }
]
}
curl -X POST 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/sources/file/upload-url' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"files":[{"fileName":"product-guide.pdf"},{"fileName":"faq.md"}]}'
Sukces: 200 OK
{
"files": [
{
"fileName": "product-guide.pdf",
"storagePath": "chatbot-955f28f1-8515-40bb-802c-f3f730bf0343/V1StGXR8_Z5jdHi6-product-guide.pdf",
"uploadUrl": "https://storage.example.com/storage/v1/object/upload/sign/training_files/chatbot-955f28f1-8515-40bb-802c-f3f730bf0343/V1StGXR8_Z5jdHi6-product-guide.pdf?token=SIGNED_TOKEN",
"token": "SIGNED_TOKEN"
},
{
"fileName": "faq.md",
"storagePath": "chatbot-955f28f1-8515-40bb-802c-f3f730bf0343/N5jFt4Z9kSC3vHqA-faq.md",
"uploadUrl": "https://storage.example.com/storage/v1/object/upload/sign/training_files/chatbot-955f28f1-8515-40bb-802c-f3f730bf0343/N5jFt4Z9kSC3vHqA-faq.md?token=SIGNED_TOKEN",
"token": "SIGNED_TOKEN"
}
]
}
2. Przesyłanie bajtów pliku
Prześlij każdy plik bezpośrednio pod jego adres uploadUrl metodą PUT:
await fetch(uploadUrl, {
method: 'PUT',
headers: { 'Content-Type': file.type },
body: file,
});
Jeśli korzystasz z klienta JavaScript Supabase, przekaż odpowiadającą ścieżkę i token z kroku 1:
await supabase.storage
.from('training_files')
.uploadToSignedUrl(storagePath, token, file);
Nie zmieniaj ani nie konstruuj ścieżek pamięci masowej samodzielnie. Rejestracja akceptuje wyłącznie ścieżki zwrócone dla tego agenta w kroku 1.
3. Rejestrowanie przesłanych plików
Ścieżka: /api/v2/agents/{agentId}/sources/file
POST /api/v2/agents/{agentId}/sources/file
Po zakończeniu każdego bezpośredniego przesyłania zarejestruj zwrócone ścieżki wraz z oryginalnymi nazwami plików:
{
"files": [
{
"storagePath": "chatbot-955f28f1-8515-40bb-802c-f3f730bf0343/V1StGXR8_Z5jdHi6-product-guide.pdf",
"fileName": "product-guide.pdf"
},
{
"storagePath": "chatbot-955f28f1-8515-40bb-802c-f3f730bf0343/N5jFt4Z9kSC3vHqA-faq.md",
"fileName": "faq.md"
}
]
}
Sukces: 202 Accepted
{
"jobId": 321,
"fileCount": 2
}
Przed rozpoczęciem zadania przetwarzania rejestracja sprawdza, czy każdy obiekt istnieje, jest niepusty, nie przekracza 50 MB i należy do wskazanego agenta. Nieprawidłowe lub brakujące przesłania skutkują błędem 400 VALIDATION_INVALID_BODY; odmowa z powodu limitu pamięci masowej skutkuje błędem 403 QUOTA_STORAGE_LIMIT; błędy pamięci masowej lub kolejki skutkują błędem 500 INTERNAL_SERVER_ERROR.
Usuwanie źródła
Ścieżka: /api/v2/agents/{agentId}/sources/{documentId}
DELETE /api/v2/agents/{agentId}/sources/{documentId}
Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.
{documentId} musi być identyfikatorem UUID zwróconym przez odpowiedź tworzenia źródła lub listy źródeł.
curl -X DELETE 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/sources/41b4c1d3-887d-46a5-95ae-c761922c6bc7' \ -H 'Authorization: Bearer YOUR_API_KEY'
Sukces: 200 OK
{
"deleted": true
}
Nieprawidłowy UUID skutkuje błędem 400 VALIDATION_INVALID_BODY. Prawidłowy UUID, który nie wskazuje dokumentu należącego do danego agenta, skutkuje błędem 404 RESOURCE_DOCUMENT_NOT_FOUND.
Pobieranie stanu trenowania
Ścieżka: /api/v2/agents/{agentId}/train
GET /api/v2/agents/{agentId}/train
Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.
Sukces: 200 OK wraz z nieopakowanym obiektem stanu.
| Pole | Typ | Uwagi |
|---|---|---|
status | ciąg znaków | training, gdy istnieje oczekujące lub uruchomione zadanie; w przeciwnym razie trained, gdy zapisany jest znacznik czasu ostatniego trenowania; w przeciwnym razie idle. |
documentCount | liczba całkowita | Liczba dokumentów źródłowych agenta. |
lastTrainedAt | liczba całkowita lub null | Znacznik czasu Unix w sekundach. |
activeJob | obiekt lub null | Najnowsze oczekujące lub uruchomione zadanie. |
activeJob.id | ciąg znaków | Identyfikator zadania. |
activeJob.status | ciąg znaków | Zapisany status zadania. |
activeJob.tasksCount | liczba całkowita | Łączna liczba zadań cząstkowych. |
activeJob.tasksCompletedCount | liczba całkowita | Liczba ukończonych zadań cząstkowych. |
activeJob.createdAt | liczba całkowita lub null | Znacznik czasu Unix w sekundach. |
{
"status": "training",
"documentCount": 12,
"lastTrainedAt": 1784246400,
"activeJob": {
"id": "c3c61f67-70fe-42da-a843-24112ded8aeb",
"status": "running",
"tasksCount": 8,
"tasksCompletedCount": 3,
"createdAt": 1784332800
}
}
Rozpoczynanie ponownego trenowania źródeł internetowych
POST /api/v2/agents/{agentId}/train
Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}. Ten punkt końcowy nie przyjmuje treści żądania.
Ten punkt końcowy ponownie trenuje zindeksowane adresy URL, a nie źródła tekstowe, Q&A ani przesłane pliki.
Gdy istnieje co najmniej jeden zindeksowany adres URL, odpowiedź w przypadku powodzenia to 202 Accepted:
{
"jobId": "c3c61f67-70fe-42da-a843-24112ded8aeb",
"count": 8,
"message": "Retraining started for 8 URLs"
}
Gdy nie ma żadnych zindeksowanych adresów URL, odpowiedź w przypadku powodzenia to 200 OK, a żadne zadanie nie jest tworzone:
{
"jobId": null,
"count": 0,
"message": "No web sources to retrain"
}
curl -X POST 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/train' \ -H 'Authorization: Bearer YOUR_API_KEY'