Appearance
Best Practices
A GLC-RAG API használatával kapcsolatos legjobb gyakorlatok és ajánlások.
Hitelesítés
JWT Token (Internal)
- Token lekérése: A backend adminisztrátor által generált JWT token használata.
- Authorization header:
Authorization: Bearer <token> - Token élettartam: A tokenok korlátozott élettartammal rendelkeznek (pl. 24 óra).
- Token frissítés: Lejáró tokenek helyett új tokenek lekérése.
Widget Token (Public)
- Widget token: Nyilvános widgetekhez használt token.
- Token lekérés: Adminisztrációs felületen vagy API hívással.
- Token élettartam: Hosszabb élettartamú tokenek (pl. 30 nap).
- Token korlátozás: IP cím alapú korlátozás lehetséges.
API Kulcs
- API kulcs: Backend integrációkhoz használt kulcs.
- Chat B2B: POST /api/v1/chat, X-API-Key header. Ne használj body
api_key-t a chatnál. - X-API-Key header:
X-API-Key: <api_key> - Kulcs biztonság: A kulcsokat biztonságosan tárolni kell (pl. environment variable).
- Kulcs forgatás: Reguláris időközönként frissíteni kell a kulcsokat.
Chat Endpointok
POST /chat (sync)
- Kötelező mezők:
text,session_id,channel(internal vagy public) - Opcionális mezők:
public_widget_token,token_id,history - Válasz:
ResponseEnvelope(trace_id, text, sources) - Streaming: Nem támogatott (használd a
/chat/streamendpointot)
POST /chat/stream
- Kötelező mezők:
text,session_id,channel(internal vagy public) - Opcionális mezők:
public_widget_token,token_id,history - Válasz: SSE (Server-Sent Events)
- Események:
event: header,event: delta,event: footer - Streaming feldolgozás:python
async for event in response.aiter_lines(): event = event.split("data:", 1)[1].strip() if event.startswith("event:"): event_type = event.split(" ", 1)[1] data = json.loads(event.split("data:", 1)[1].strip())
POST /api/v1/chat
- Egyszerűsített request:
text,session_id,mode(opcionális) - Válasz:
ApiChatResponse(trace_id, status_code, text, sources, products, mode) - Mode értékek:
rag,shopping,creative,archive - Használat: Egyszerű integrációkhoz, ahol a válasz struktúrája nem kritikus
POST /landing/chat/stream
- Nincs hitelesítés: Nyilvános endpoint
- Kötelező mezők:
text,session_id - Opcionális mezők:
history - Rate limit: IP cím alapú korlátozás
- Válasz: SSE (Server-Sent Events)
- Használat: Nyilvános widgetekhez, demo célokra
Tool Megerősítés
Tool Proposal Flow
- Tool proposal: Az LLM tool proposal-ot ad vissza (tool_run_id, modified_parameters)
- Tool confirm request: A felhasználó megerősíti a tool hívást
- Tool confirm response: A backend visszaadja a megerősített tool_run_id-t
- Tool execution: A tool végrehajtása
- Tool response: A tool válasza
Tool Confirm Példa
python
# Tool proposal
proposal = {
"tool_run_id": "tool-run-123",
"modified_parameters": {
"search_terms": "óra",
"price_min": 100000,
"price_max": 500000
}
}
# Tool confirm
response = requests.post(
f"{BASE_URL}/chat/tool/confirm",
json={
"tool_run_id": "tool-run-123",
"modified_parameters": proposal["modified_parameters"]
}
)Shopping Endpoint
POST /shopping
- Kötelező mezők:
text,session_id - Opcionális mezők:
public_widget_token,token_id - Válasz:
ShoppingResponse(trace_id, status_code, body, ux_context) - Body:
text,products(ShoppingProductCard lista) - Mechanizmus: Tool-alapú keresés, 4-list search, text-to-SQL
Ár-érzékeny keresés
- Legolcsóbb: "legolcsóbb aranyórát"
- Legdrágább: "legdrágább Rolex"
- Ár tartomány: "doxa órát keresek 400000 és 800000 forint között"
- Konkrét összeg: "keress órát 500000 Ft körül"
Tasks API
A Tasks API prefixe: /admin/tasks. Példák: GET/POST /admin/tasks/projects, GET/POST /admin/tasks/tasks, GET /admin/tasks/tasks/{task_id}.
- Hitelesítés: JWT vagy X-API-Key (egyik kötelező)
- Projektek: GET /admin/tasks/projects (lista), POST /admin/tasks/projects (létrehozás)
- Feladatok: GET /admin/tasks/tasks (lista), POST /admin/tasks/tasks (létrehozás), GET /admin/tasks/tasks/{task_id} (részletek)
- Részletek: 17-tasks-api.md
Hibakezelés
HTTP Kódok
- 200 OK: Sikeres válasz
- 400 Bad Request: Érvénytelen request
- 401 Unauthorized: Hitelesítés hiányos
- 403 Forbidden: Nincs jogosultság
- 404 Not Found: Az erőforrás nem található
- 409 Conflict: Konfliktus (pl. duplikált resource)
- 429 Too Many Requests: Rate limit túllépés
- 500 Internal Server Error: Szerver hiba
- 503 Service Unavailable: Szerver nem elérhető
Rate Limiting
- IP rate limit: Landing/widget endpointokhoz
- Token rate limit: Public widget tokenokhoz
- Retry-After header: 429 válaszban a várakozási idő
Tippek
- Session ID: Mindig küldd a
session_idmezőt a chat endpointokhoz. - Trace ID: A válaszokban szereplő
trace_idnyomon követéshez. - History: Az előző üzenetek küldése a kontextushoz.
- Streaming: A streaming endpointokhoz használj
requestsvagyfetchstream mode-t. - Error handling: Mindig kezeld a hibákat megfelelően (pl. try-catch).
- Logging: A
trace_idalapján nyomon követheted a kéréseket.