Appearance
Info: chat /info és admin betöltés
Ez a dokumentum két dolgot mutat be: (1) az info a chatben – a /info slash parancs használata; (2) az info betöltését – az /admin/info API-n keresztül, hogy a tartalom elérhetővé váljon a /info válaszaiban.
Új (geo + általános tudás): tenant kapcsolók és tool-sorrend → 58-info-geo-and-general-knowledge.md (GET/PUT /admin/info/chat-settings).
Info a chatben
Mi az /info?
A chatben (POST /chat, POST /chat/stream, POST /api/v1/chat) a felhasználó slash parancsként küldi: /info + szóköz + kérdés vagy téma. Példa: "/info Pergel Attila", "/info mi az ÁSZF?". A rendszer az info módot választja; a válasz az adott tenant indexelt info elemekből (FAQ, segítség, szabályzat stb.) generálódik.
Nincs külön endpoint – ugyanaz a chat endpoint, a text mező elején lévő /info prefix határozza meg a módot.
Hitelesítés
- Internal: JWT (POST /chat, POST /chat/stream) vagy X-API-Key (POST /api/v1/chat).
- Widget: POST /chat, body: public_widget_token, session_id.
Példa kérés (POST /chat)
python
import requests
BASE_URL = "https://<your-api-host>"
JWT_TOKEN = "your-jwt-token"
url = f"{BASE_URL}/chat"
payload = {
"channel": "internal",
"text": "/info Hogyan kell regisztrálni?",
"session_id": "my-session-123"
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {JWT_TOKEN}"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())Példa (POST /api/v1/chat)
python
payload = {
"text": "/info mi a szállítási idő?",
"session_id": "my-session-123"
}
headers = {
"Content-Type": "application/json",
"X-API-Key": "rak_your_api_key_here"
}
response = requests.post(f"{BASE_URL}/api/v1/chat", json=payload, headers=headers)
print(response.json())Válasz
A válasz egy ResponseEnvelope (trace_id, mode, status_code, text, sources). A text az info tartalom alapján generált válasz; a sources az info kontextusra hivatkozhat. Ha nincs indexelt info vagy nincs releváns találat, a rendszer ezt jelezni fogja a válaszban.
Info betöltése (admin API)
Mi az info betöltés?
Az info elemek szöveges tartalmak (cím, leírás, content), amelyeket az admin API-n keresztül hozunk létre és indexelünk. Ha az indexelés kész (INDEXED), a chat /info válasza ezekből a tartalmakból ad választ.
Endpointok (prefix: /admin/info)
| Endpoint | Method | Leírás | Szerepkör |
|---|---|---|---|
| /admin/info | GET | Info elemek listája (query: limit, offset, scope, status, search) | JWT, VIEWER is listázhat |
| /admin/info/ | GET | Egy elem teljes tartalommal (szerkesztéshez) | JWT |
| /admin/info | POST | Info elem létrehozása; mentés után PENDING index job | EDITOR, TENANT_ADMIN, SYSTEM_ADMIN |
| /admin/info/ | PUT | Info elem szerkesztése; mentés után PENDING index job | EDITOR, TENANT_ADMIN, SYSTEM_ADMIN |
| /admin/info/ | DELETE | Info elem törlése (és document_store chunkok) | EDITOR, TENANT_ADMIN, SYSTEM_ADMIN |
| /admin/info/{item_id}/index | POST | Indexelés kézi indítása (ha nincs már PENDING job) | EDITOR, TENANT_ADMIN, SYSTEM_ADMIN |
| /admin/info/extract-file | POST | PDF / Word / TXT / MD → kinyert szöveg (multipart) | EDITOR, TENANT_ADMIN, SYSTEM_ADMIN |
| /admin/info/generate-description/start | POST | Aszinkron LLM: description + mintakérdések | EDITOR, TENANT_ADMIN, SYSTEM_ADMIN |
| /admin/info/generate-description/status | GET | LLM job poll (job_id query) | VIEWER+ (tenant saját job) |
| /admin/info/chat-settings | GET | Geo + általános tudás flagok | JWT (Info admin) |
| /admin/info/chat-settings | PUT | Flagok mentése | JWT (Info admin) |
GET /admin/info – lista
Query paraméterek: limit (default 100), offset, scope (internal/public), status (NOT_INDEXED, PENDING, PROCESSING, INDEXED, FAILED), search.
Válasz: { "items": [ ... ], "total": N }. Minden item: id, tenant_id, title, description, content (rövidítve 500 karig a listában), scope, is_active, indexing_status, created_at, updated_at, doc_id.
POST /admin/info – létrehozás
Request body:
json
{
"title": "Gyakori kérdések",
"description": "Regisztráció és bejelentkezés",
"content": "Hogyan regisztrálok? A Regisztráció menüpontból...",
"scope": "internal",
"is_active": true
}- title: kötelező.
- description: opcionális.
- content: opcionális, max 100 000 karakter.
- scope: "internal" vagy "public", default "internal".
- is_active: default true.
Válasz: { "id": "uuid", "message": "Az indexelés hamarosan indul." }. Mentés után automatikusan PENDING index job kerül a sorba; az indexelés háttérben fut, az indexing_status majd INDEXED lesz.
PUT /admin/info/{item_id} – szerkesztés
Request body: title, description, content, scope, is_active (mind opcionális; csak a megadott mezők frissülnek). A content max 100 000 karakter. scope csak "internal" vagy "public".
Válasz: { "message": "Az indexelés hamarosan indul." } – új PENDING index job.
DELETE /admin/info/
Törli az info elemet és a hozzá tartozó chunkokat (doc_type=info). Válasz: { "message": "Deleted" }.
POST /admin/info/{item_id}/index
Indexelés kézi indítása. Ha már van PENDING job ehhez az elemhez, nem ad hozzá újat. Válasz: üzenet az indexelés indításáról.
Fájl feltöltés → tartalom (POST /admin/info/extract-file)
Az admin felületen a Fájl feltöltése gomb ezt az endpointot hívja: a feltöltött dokumentumból kinyeri a szöveget, amit az info elem content mezőjébe másolhatsz.
Hitelesítés: JWT (Authorization: Bearer ...). Szerepkör: EDITOR, TENANT_ADMIN vagy SYSTEM_ADMIN.
Kérés: multipart/form-data, mező: file.
Támogatott kiterjesztések: .pdf, .docx, .doc, .txt, .md, .markdown.
Korlátok:
- Max fájlméret: 50 MB
- A kinyert szöveg max 100 000 karakter (hosszabb esetén levágás + jelzés a szöveg végén)
Válasz (200):
json
{
"filename": "aszf.pdf",
"title_suggestion": "aszf",
"content": "… kinyert szöveg …",
"char_count": 12345
}- title_suggestion: a fájlnévből (kiterjesztés nélkül,
_/-→ szóköz). - content: a kinyert szöveg; ezt másold az űrlap content mezőjébe, vagy szerkeszd mentés előtt.
Hibák: 400 – hiányzó fájlnév, nem támogatott típus, üres kinyerés, túl nagy fájl.
Python példa – fájl kinyerés
python
import requests
BASE_URL = "https://<your-api-host>"
headers = {"Authorization": f"Bearer {JWT}"}
with open("aszf.pdf", "rb") as f:
r = requests.post(
f"{BASE_URL}/admin/info/extract-file",
headers=headers,
files={"file": ("aszf.pdf", f, "application/pdf")},
)
print(r.json())LLM leírás generálás (description mező)
A description mező segít a chat routingnak: mikor válassza ezt az info elemet. Az admin UI „LLM leírás generálása mentéskor” jelölőnégyzet mellett vagy külön gombbal indítható aszinkron LLM hívás.
Endpoint ID (token számlázás): info_description_generate — lásd /api/llm-models.
Előfeltétel: pozitív tenant token egyenleg; kimerült egyenleg → 402.
POST /admin/info/generate-description/start
Request body (JSON):
json
{
"title": "ÁSZF",
"content": "… a teljes info tartalom (kötelező) …"
}- content: kötelező, max 100 000 karakter.
- title: opcionális; segíti az LLM-et.
Válasz (200):
json
{
"job_id": "uuid",
"message": "A leírás generálása elindult."
}GET /admin/info/generate-description/status
Query: job_id (a start válaszából).
Válasz: { "status": "pending" | "done" | "error", "result"?: { "description": "…" }, "error"?: "…" }
- done: a
result.descriptiontartalmazza a magyar leírást és a mintakérdések listáját (a chat routing számára). - error: LLM vagy feldolgozási hiba rövid üzenettel.
- Lejárt vagy más tenant job → 404.
Flow: fájl / tartalom → LLM description → mentés → index
- Login – POST /auth/login.
- (Opcionális) Fájl kinyerés – POST /admin/info/extract-file →
content+title_suggestion. - (Opcionális) LLM description – POST …/generate-description/start → poll …/status → a
descriptionmező értéke. - Info elem mentés – POST /admin/info vagy PUT /admin/info/{item_id} (
title,description,content,scope). - Indexelés – automatikus PENDING job; ellenőrzés GET /admin/info →
indexing_status= INDEXED. - Chat /info – POST /chat, text:
/info ….
Python példa – LLM description poll
python
import time
import requests
BASE_URL = "https://<your-api-host>"
headers = {"Authorization": f"Bearer {JWT}", "Content-Type": "application/json"}
start = requests.post(
f"{BASE_URL}/admin/info/generate-description/start",
headers=headers,
json={"title": "ÁSZF", "content": "1. A szolgáltatás használata…"},
).json()
job_id = start["job_id"]
for _ in range(60):
st = requests.get(
f"{BASE_URL}/admin/info/generate-description/status",
headers=headers,
params={"job_id": job_id},
).json()
if st["status"] == "done":
print(st["result"]["description"])
break
if st["status"] == "error":
print("Hiba:", st.get("error"))
break
time.sleep(2)Flow: létrehozás → indexelés → chat
- Login – POST /auth/login, JWT token.
- Info elem létrehozása – POST /admin/info (title, content, scope).
- Indexelés állapota – GET /admin/info; keressük az elem indexing_status mezőjét (PENDING → PROCESSING → INDEXED). INDEXED után a tartalom használható a /info chatben.
- Chat /info – POST /chat vagy POST /api/v1/chat, text: "/info <kérdés>".
Python példa: info létrehozás + lista
python
import requests
BASE_URL = "https://<your-api-host>"
token = "your-jwt-token"
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
# Létrehozás
r = requests.post(f"{BASE_URL}/admin/info", json={
"title": "ÁSZF",
"description": "Általános szerződési feltételek",
"content": "1. A szolgáltatás használata...",
"scope": "internal"
}, headers=headers)
data = r.json()
print("Created:", data.get("id"), data.get("message"))
# Lista (indexing_status ellenőrzés)
r2 = requests.get(f"{BASE_URL}/admin/info", headers=headers, params={"limit": 10})
items = r2.json().get("items", [])
for it in items:
print(it["title"], "- status:", it.get("indexing_status"))További információ
- Info kérdőívek (publikus widget): 49-info-surveys-public-widget.md – admin szerkesztő, widget beküldés, API összefoglaló
- Info web crawl (URL → tartalom): 48-info-web-crawl-from-url.md – alternatíva a kézi content feltöltéshez; a description generálás ugyanazt a routing célú
descriptionmezőt tölti, mint az LLM endpoint itt - Chat sync: 10-chat-sync.md
- API v1 chat: 12-api-v1-chat.md
- RAG dokumentumok admin (hasonló állapotkezelés): 43-rag-documents-admin.md
- OpenAPI / Redoc: openapi.json, redoc – /admin/info endpointok részletei.