Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Important
Ta funkcja jest dostępna w wersji beta. Administrator przestrzeni roboczej musi włączyć podgląd API Genie One . Zobacz Wymagania.
Interfejs API Genie One pozwala Twojej aplikacji, usłudze backendowej lub agentowi zadawać Genie One pytania w języku naturalnym dotyczące Twoich danych przez HTTP i strumieniować odpowiedzi zwrotnie. Genie One obsługuje wszystkie dane, do których ma dostęp użytkownik wywołujący, i opiera swoje odpowiedzi na Genie Ontology, więc nie musisz najpierw skonfigurować wyselekcjonowanego agenta. Nowe pytania są uruchamiane z uprawnieniami Unity Catalog użytkownika wywołującego, więc odpowiedzi zawierają tylko dane, do których użytkownik wywołujący ma dostęp. Odczytanie zapisanej odpowiedzi lub historii rozmów zwraca zapisaną treść. Nie uruchamia ponownie zapytań ani nie sprawdza uprawnień na danych bazowych.
Ta strona wyjaśnia, jak się uwierzytelniać, zadawać pytania, strumieniować odpowiedzi i zarządzać rozmowami. Pełne formaty żądań i odpowiedzi można znaleźć w referencji Genie One API.
Requirements
- Administrator obszaru roboczego musi włączyć podgląd Genie One API na stronie Podglądy obszaru roboczego.
- Dzwoniący musi umieć korzystać z Genie One. Uprawnienie dostępu dla użytkownika lub jakiekolwiek wyższe uprawnienie do przestrzeni roboczej wystarczy. Zobacz Co to jest dostęp konsumentów?.
- Wywołujący musi mieć uprawnienia
SELECTdo danych Unity Catalog, które wykorzystują jego pytania. - Aby wykonywać zapytania w określonym magazynie SQL, wywołujący musi mieć co najmniej uprawnienie CAN USE do tego magazynu. Jeśli nie określisz magazynu, Genie One wybiera odpowiedni magazyn.
Authenticate
API Genie One akceptuje tokeny dostępu OAuth o zakresie genie.
- W aplikacjach, w których obecny jest użytkownik, używaj OAuth dla użytkowników (OAuth U2M). Żądania są wykonywane jako ten użytkownik, więc odpowiedzi odzwierciedlają uprawnienia użytkownika do Unity Catalog.
- Dla zautomatyzowanych zadań używaj service principal z OAuth dla service principals (OAuth M2M). Jednostka usługi musi mieć dostęp do danych i magazynów SQL, z których korzystają jej pytania.
Potrzebujesz też adresu URL swojego workspace. Przykłady na tej stronie używają do tego <workspace-url>. Zobacz Pobieranie identyfikatorów dla obiektów obszaru roboczego.
Zadaj pytanie i przesyłaj odpowiedź na żywo
Wyślij pytanie na adres POST /api/2.0/genie/one/responses. Punkt końcowy zwraca odpowiedź text/event-stream, która przesyła strumieniowo postępy i ostateczną odpowiedź Genie One jako Server-Sent Events (SSE).
Zacznij rozmowę
Pomiń conversation_id, aby rozpocząć nową rozmowę. Ustaw input na pytanie:
curl
curl -N -X POST "https://<workspace-url>/api/2.0/genie/one/responses" \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{"input": "How did revenue change last quarter?"}'
Opcja -N wyłącza buforowanie wyjścia, dzięki czemu curl drukuje każde zdarzenie w momencie jego wystąpienia.
Python
Poniższy przykład wykorzystuje Databricks SDK dla Python wyłącznie do obsługi uwierzytelniania, więc działa z OAuth U2M, OAuth M2M lub profilem konfiguracyjnym. Wysyła żądanie za pomocą biblioteki requests, przekazuje identyfikatory odpowiedzi i rozmów do funkcji callback on_created zaraz po zaakceptowaniu odpowiedzi, a jeśli stream kończy się wcześniej, wznawia działanie za pomocą żądania GET. Następnie drukuje ostateczną odpowiedź.
Zainstaluj pakiety, których używa ten przykład:
pip install databricks-sdk requests
import json
import time
import requests
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
base_url = f"{w.config.host}/api/2.0/genie/one"
terminal_events = ("response.completed", "response.failed", "response.incomplete")
def get_response(conversation_id, response_id, timeout_seconds=600):
# Poll the stored response until it reaches a terminal status.
deadline = time.time() + timeout_seconds
while True:
resp = requests.get(
f"{base_url}/conversations/{conversation_id}/responses/{response_id}",
headers=w.config.authenticate(),
)
resp.raise_for_status()
response = resp.json()
if response["status"] != "in_progress" or time.time() > deadline:
return response
time.sleep(3)
def ask(question, conversation_id=None, on_created=None):
body = {"input": question}
if conversation_id:
body["conversation_id"] = conversation_id
created = None
try:
with requests.post(
f"{base_url}/responses",
headers={**w.config.authenticate(), "Content-Type": "application/json"},
json=body,
stream=True,
) as resp:
resp.raise_for_status()
# The stream is UTF-8, but its content type doesn't declare a charset.
resp.encoding = "utf-8"
for line in resp.iter_lines(decode_unicode=True):
if not line or not line.startswith("data:"):
continue
# SSE allows an optional single space after "data:".
data = line[len("data:"):]
if data.startswith(" "):
data = data[1:]
if data == "[DONE]":
break
event = json.loads(data)
if event["type"] == "response.created":
created = event["response"]
if on_created:
on_created(created["conversation_id"], created["id"])
elif event["type"] in terminal_events:
return event["response"]
except requests.RequestException:
# Without response.created, you can't tell whether the request was accepted.
if created is None:
raise
if created is None:
raise RuntimeError("The stream ended before the response was accepted.")
# The stream ended or disconnected before a terminal event. Recover with GET.
return get_response(created["conversation_id"], created["id"])
response = ask(
"How did revenue change last quarter?",
on_created=lambda conversation_id, response_id: print(
f"conversation_id={conversation_id} response_id={response_id}"
),
)
print(response["status"])
for item in response["output"]:
if item.get("phase") == "final_answer":
# Keep parts separate so Markdown tables and source notes stay on their own lines.
print("\n\n".join(part["text"] for part in item["content"]))
Ten przykład czeka na zdarzenie terminalne. Aby pokazać postęp podczas działania Genie One, obsługuj także zdarzenia elementów wyjściowych, jak opisano w Odczytywanie strumienia zdarzeń.
Odczytaj strumień zdarzeń
Każde zdarzenie ma nazwę SSE event oraz ciało JSON data z odpowiadającym type i rosnącym sequence_number. Skrócony strumień wygląda tak:
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"object":"response","id":"9f7c84c6d3af4ae8ac5cc43590a15366","model":"genie-one","status":"in_progress","output":[],"conversation_id":"6a34b9a50cb4435da7c463130c9d42c1"}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":1,"output_index":0,"item":{"type":"message","role":"assistant","status":"in_progress","phase":"final_answer","content":[{"type":"output_text","text":"Revenue increased 12% last quarter.","annotations":[]}]}}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":2,"output_index":0,"item":{"type":"message","role":"assistant","status":"completed","phase":"final_answer","content":[{"type":"output_text","text":"Revenue increased 12% last quarter.","annotations":[]}]}}
event: response.completed
data: {"type":"response.completed","sequence_number":3,"response":{"object":"response","id":"9f7c84c6d3af4ae8ac5cc43590a15366","status":"completed","output":[...],"conversation_id":"6a34b9a50cb4435da7c463130c9d42c1"}}
data: [DONE]
Obsługuj zdarzenia w następujący sposób:
-
response.created: Odpowiedź przyjęta. Zapiszresponse.idiresponse.conversation_id. Potrzebujesz, żeby zadali pytanie uzupełniające lub poradzili sobie po rozłączeniu strumienia. -
response.output_item.added,response.output_item.updated, orazresponse.output_item.done: Wiadomość asystenta została dodana, zmieniona lub zakończona. Każde zdarzenie niesie pełną wiadomość, więc zamień wiadomość woutput_indexzamiast dodawać do niej tekst. -
response.completed,response.failed, lubresponse.incomplete: Odpowiedź osiągnęła stan końcowy. Tablicaresponse.outputzawiera ostatnie wiadomości asystenta. Strumień następnie kończy się elementemdata: [DONE].
Każda wiadomość asystenta ma element phase. Wiadomości oznaczone fazą commentary opisują postępy Genie One podczas działania i możesz je wyświetlać jako aktualizacje statusu. Wiadomość z fazą final_answer jest odpowiedzią. Tekst odpowiedzi to Markdown i może zawierać tabele wyników.
Jeśli odpowiedź zakończy się błędem po jej zaakceptowaniu, status HTTP nadal wynosi 200, a strumień kończy się zdarzeniem response.failed. Obiekt response.error opisuje awarię. Zobacz Rozwiązywanie problemów.
Zadaj pytanie uzupełniające
Aby kontynuować rozmowę, przekaż element conversation_id z response.created. Genie One wykorzystuje wcześniejsze pytania i odpowiedzi jako kontekst.
curl -N -X POST "https://<workspace-url>/api/2.0/genie/one/responses" \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"input": "Break that down by region.",
"conversation_id": "<conversation-id>"
}'
Możesz też ustawić warehouse_id tak, aby uruchamiać zapytania w konkretnym magazynie SQL, oraz ustawić user_timezone na strefę czasową IANA, na przykład America/Los_Angeles, aby Genie One interpretował daty względne w strefie czasowej użytkownika.
Odzyskaj połączenie po jego zerwaniu
Rozłączenie się ze strumieniem nie anuluje odpowiedzi. Genie One nadal działa, a wynik można pobrać za pomocą identyfikatorów z response.created:
curl "https://<workspace-url>/api/2.0/genie/one/conversations/<conversation-id>/responses/<response-id>" \
-H "Authorization: Bearer <access-token>"
Żądanie zwraca ten sam obiekt Response co zdarzenie strumienia końcowego. Gdy status jest in_progress, zapytuj punkt końcowy co kilka sekund. Zatrzymaj się, gdy jest to status, completed, failed lub incomplete.
Nie wysyłaj ponownie żądania POST, aby odzyskać. Każde POST żądanie rozpoczyna nową odpowiedź.
Przeczytaj cytowania
Każda output_text część ma annotations tablicę zawierającą listę źródeł, których Genie One użył do tego tekstu. Każda adnotacja obejmuje:
-
title: Wyświetlana nazwa źródła. -
asset_type: Rodzaj źródła, taki jakTABLE,NOTEBOOK, lubWEB. -
identifier: Identyfikator zasobu, ścieżka woluminów lub adres URL internetowy. -
index: Numer cytowania liczony od 1, do którego odnosi się tekst odpowiedzi.
Zarządzaj rozmowami
Rozmowy tworzone za pomocą interfejsu API Genie One należą do wywołującego użytkownika lub jednostki usługi. Pojawiają się także w historii czatu tego użytkownika w Genie One.
-
Lista rozmów:
GET /api/2.0/genie/one/conversationszwraca rozmowy dzwoniącego z Genie One, ostatnio zaktualizowane jako pierwsze. Nie zawiera rozmów z Genie Agent. Użyjpage_size(domyślnie 20, maksymalnie 100) i przekażnext_page_tokenjakopage_token, aby uzyskać następną stronę. -
Pobierz rozmowę:
GET /api/2.0/genie/one/conversations/{conversation_id}zwraca tytuł rozmowy i znaczniki czasu, bez wiadomości. -
Wypisz elementy rozmowy:
GET /api/2.0/genie/one/conversations/{conversation_id}/itemszwraca wiadomości użytkownika i asystenta w rozmowie. Użyj go do odbudowy historii czatów w aplikacji. -
Usuń rozmowę:
DELETE /api/2.0/genie/one/conversations/{conversation_id}usuwa rozmowę.
Na przykład, aby wymienić trzy najnowsze rozmowy:
curl "https://<workspace-url>/api/2.0/genie/one/conversations?page_size=3" \
-H "Authorization: Bearer <access-token>"
Ograniczenia
- Każde żądanie akceptuje jedno pytanie jako tekst, do 25 000 bajtów UTF-8. Obrazy, pliki i wiele wiadomości w jednym żądaniu nie są obsługiwane.
- Rozmowa może mieć tylko jedną aktywną odpowiedź. Nowe pytanie w tej rozmowie zwraca HTTP
409do czasu zakończenia aktywnej odpowiedzi. - Żądania są ograniczone w zależności od obszaru roboczego. Żądania powyżej limitu zwracają HTTP
429.
Najlepsze praktyki
-
Zapisz identyfikatory z
response.created: Zapisz identyfikatory odpowiedzi i konwersacji zaraz po rozpoczęciu strumienia, aby móc odzyskać odpowiedź, jeśli połączenie się zerwie. -
Ponawianie odrzuconych żądań z wykładniczym wydłużaniem odstępów: Gdy API zwraca odpowiedź błędu przed rozpoczęciem strumienia, taką jak
429, ponów próbę z rosnącym opóźnieniem między próbami. Po otrzymaniuresponse.createdpobierz odpowiedź za pomocąGETzamiast ponownie wysyłać żądaniePOST. -
Nie próbuj ponownie na ślepo po przekroczeniu limitu czasu lub błędzie bramy: jeśli żądanie przekroczy limit czasu lub zwróci błąd bramy, taki jak
502lub504, zanim nadejdzieresponse.created, interfejs API mógł je zaakceptować. Ponowne wysłanie żądaniaPOSTmoże wtedy wywołać drugą odpowiedź. -
Ponawiaj nieudane odpowiedzi tylko wtedy, gdy błąd nadaje się do ponowienia: Gdy odpowiedź się nie powiedzie, sprawdź
response.error.retryableprzed ponownym zadaniem pytania. - Rozpocznij nową rozmowę dla każdej sesji: Powtarzanie jednej rozmowy w niepowiązanych sesjach może obniżyć dokładność, ponieważ Genie One wykorzystuje wcześniejsze tury jako kontekst.
- Rejestruj żądania i odpowiedzi: Rejestruj identyfikatory odpowiedzi, statusy i błędy, aby pomóc w debugowaniu i monitorowaniu użycia.
Rozwiązywanie problemów
| Objaw | Przyczyna i rozwiązanie |
|---|---|
404 z komunikatem "Żądany zasób nie został znaleziony." |
Podgląd API Genie One jest wyłączony dla przestrzeni roboczej, identyfikator rozmowy lub odpowiedzi jest błędny, należy do innego użytkownika, albo magazyn nie jest dostępny dla dzwoniącego. Poproś administratora workspace, aby sprawdził stronę workspace Previews, a następnie sprawdź identyfikatory i uprawnienia wywołującego. |
401 lub 403 |
Żądanie nie ma prawidłowego tokenu lub wywołujący nie może dodać odpowiedzi do rozmowy. Sprawdź swój token OAuth i jego genie zakres uprawnień. Zobacz Uwierzytelnij. |
400 Z INVALID_PARAMETER_VALUE |
Ciało żądania zawiera nieznane pole lub nieobsługiwaną opcję, więcej niż jedną wiadomość lub pytanie dłuższe niż 25 000 bajtów. Wyślij tylko pola z referencji API. |
409 Z ALREADY_EXISTS |
Inna odpowiedź jest aktywna w rozmowie. Poczekaj, aż się skończy, a potem spróbuj ponownie. |
429 Z RESOURCE_EXHAUSTED |
Przestrzeń robocza przekroczyła limit liczby żądań. Ponów próbę z wycofywaniem wykładniczym. Zobacz Ograniczenia. |
Strumień kończy się na response.failed |
Przetwarzanie odpowiedzi nie powiodło się po jej zaakceptowaniu. Czytaj response.error.message, i próbuj ponownie tylko wtedy, gdy response.error.retryable jest true. |
| Strumień rozłącza się przed zdarzeniem końcowym | Pobierz odpowiedź z identyfikatorami z response.created. Zobacz Odzyskiwanie po utracie połączenia. |
Pricing
API Genie One uruchamia Chat w Genie One, więc żądania są rozliczane tak samo jak w czacie Genie One. Zobacz Cennik usługi Genie.
Dodatkowe zasoby
- Dokumentacja referencyjna API Genie One: Odpowiedź dla punktów końcowych tworzenia i pobierania odpowiedzi oraz strumienia zdarzeń.
- Referencja do API Genie One: Conversation dla punktów końcowych konwersacji.
- Czat w Genie One , aby dowiedzieć się, jak Genie One odpowiada na pytania.
- Użyj API Genie Agents , aby zapytać jednego wyselekcjonowanego Genie Agenta.
- Serwer MCP Genie One do połączenia klienta lub agenta MCP z Genie One.