Gemmes i localStorage på din browser.
Bruges af supportsystemet (eller egne scripts) til at stille spørgsmål og indsende feedback.
Base URL: https://smartpack-vector.geekshop.dk
Auth header: X-API-Key: <hex-streng>
Content-Type: application/json
Rate limit: pr. nøgle. 429 returneres med Retry-After header.
Embedder spørgsmålet, henter top-k chunks fra Qdrant, kalder Claude og returnerer dansk svar.
{
"question": "string (påkrævet)",
"top_k": 12 // valgfri
}
{
"answer": "markdown-svar",
"sources": [{
"source": "code|feedback|ticket",
"score": 0.823,
"title": "...",
"file_path": "...", // kun source=code
"symbol": "...", // kun source=code
"line_start": 10, // kun source=code
"line_end": 25 // kun source=code
}]
}
Claude omsætter korrektionen til en søgbar viden-artikel som fremtidige /ask-kald henter ind som kontekst. Den rå tekst bliver ikke direkte søgbar.
{
"question": "påkrævet",
"answer": "RAG-svaret I retter",
"rating": 1-5 (påkrævet),
"correction": "hvad svaret burde have sagt",
"submitter": "fx email/initialer"
}
{
"ingested": true,
"id": "uuid",
"title": "syntetiseret titel",
"content": "syntetiseret indhold",
"keywords": ["..."]
}
{
"ingested": false,
"reason": "rating>=4 without correction — skipping"
}
/feedback betyder ikke nødvendigvis at korrektionen blev gemt — tjek altid ingested. Hvis rating ≥ 4 uden korrektion, eller hvis korrektionen er for vag til at synthesizer kan lave en viden-artikel, returneres ingested: false med en reason.
Tager hele tråden mellem kunde og support, kører grundig anonymisering (regex + Claude + verifier-pass), destillerer den til en søgbar viden-artikel og lægger den i indekset. Tænkt brugt når second-level har godkendt en løst sag som læring værd. ticket_id er påkrævet og gør re-send idempotent.
{
"ticket_id": "INT-1234", // påkrævet
"messages": [
{"role": "customer", "content": "...", "ts": "..."},
{"role": "agent", "content": "...", "ts": "..."}
],
"tags": ["faktura"], // valgfri
"advisor_notes": "Kunden havde aktivt MOMS_LOCKED — ekstra kontekst fra reviewer",
"submitter": "support@smartpack.dk"
}
{
"ingested": true,
"id": "uuid",
"ticket_id": "INT-1234",
"title": "syntetiseret titel",
"content": "syntetiseret indhold",
"keywords": ["..."]
}
{
"ingested": false,
"reason": "anonymization failed on message 2 (role=agent): PII still detected after retry: personnavn"
}
ticket_id overskriver så det forrige forsøg.
401 — manglende eller forkert X-API-Key422 — ugyldig request body (fx rating uden for 1-5)429 — rate limit ramt; Retry-After header angiver sekunder# /ask
curl -X POST https://smartpack-vector.geekshop.dk/ask \
-H "Content-Type: application/json" \
-H "X-API-Key: $KEY" \
-d '{"question":"hvordan virker brugerroller"}'
# /feedback
curl -X POST https://smartpack-vector.geekshop.dk/feedback \
-H "Content-Type: application/json" \
-H "X-API-Key: $KEY" \
-d '{
"question": "hvordan virker brugerroller",
"answer": "<det svar I fik>",
"rating": 2,
"correction": "Roller arves ikke automatisk fra parent-konto …",
"submitter": "support@smartpack.dk"
}'
# /tickets
curl -X POST https://smartpack-vector.geekshop.dk/tickets \
-H "Content-Type: application/json" \
-H "X-API-Key: $KEY" \
-d '{
"ticket_id": "INT-1234",
"messages": [
{"role":"customer","content":"Mine pakker tæller forkert i statistikken …"},
{"role":"agent", "content":"Hej, det skyldes at filteret …"}
],
"tags": ["statistik","pakker"],
"advisor_notes": "Bemærk: gælder kun når Carrier-status = Returned",
"submitter": "support@smartpack.dk"
}'
Få udleveret en API-nøgle af niklas@smartpack.dk. Hver nøgle har sin egen rate limit (rpm) sat ved oprettelse.