AI med egen nyckel
På Zkrinet: lägg till blocket under Byggblock i panelen — ett klick, din egen kod rörs inte och en ögonblicksbild tas först. Installationsstegen nedan gäller om du kör PocketBase själv, till exempel efter en export.
Låt din app prata med en AI-modell — med din egen API-nyckel, som aldrig lämnar servern. Appen anropar en enda rutt; vilken leverantör, modell och systemprompt som används bestäms i adminpanelen. Med kvot per användare, månadsbudget och logg.
Stödjer Anthropic (Claude), OpenAI, Google Gemini och OpenAI-kompatibla tjänster — t.ex. Mistral (EU) eller en egen modell i Ollama/vLLM.
Testat mot PocketBase 0.40.4.
#Installation
- Kopiera
pb_hooks/ochpb_migrations/till din PocketBase och starta om. - Skapa en rad i
zk_ai_installningar:
| Fält | |
|---|---|
leverantor | anthropic, openai, gemini eller kompatibel |
nyckel | Din API-nyckel (dold — bara superusers ser den). Alternativt miljövariabeln ZK_AI_NYCKEL, som vinner. Kan lämnas tom för en lokal modell utan nyckel. |
modell | Krävs för OpenAI, Gemini och kompatibla. För Anthropic är standard claude-opus-5-5. |
bas_url | Bara för kompatibel (t.ex. https://api.mistral.ai eller http://localhost:11434), eller om du går via en proxy |
max_tokens | Tak för svarets längd. Anthropic: standard 16 000 |
anstrangning | Bara Anthropic: low/medium/high — lägre = snabbare och billigare |
dagsgrans_per_anvandare | Frågor per användare och dygn (UTC). Standard 50 |
manadsgrans_tokens | Stoppa alla anrop när månadens tokens (in + ut) nått gränsen. Tom = ingen gräns — sätt den, det är din nyckel som betalar |
spara_innehall | Av som standard: loggen sparar bara antal tokens, inte vad som frågades. Slå bara på om du behöver det, och nämn det i din integritetspolicy. |
- Uppdrag: i
zk_ai_uppdragfinns redanassistent. Lägg till fler (t.ex.sammanfatta,oversatt) med egen systemprompt, och vid behov egen modell ochmax_tokens. Systemprompterna stannar på servern — appen kan varken läsa eller ändra dem.
#Användning från appen
const r = await pb.send("/api/zk/ai/chatt", { method: "POST", body: {
uppdrag: "assistent", // valfritt, standard "assistent"
meddelanden: [
{ roll: "anvandare", text: "Vad kostar frakten?" },
{ roll: "assistent", text: "Frakten kostar 49 kr." },
{ roll: "anvandare", text: "Och till Norge?" },
],
}})
// r = { svar: "…", vagrad: false, modell: "…", tokens: { in: 412, ut: 38 }, kvar_idag: 47 }
// Visa hur många frågor som är kvar
const { kvar_idag } = await pb.send("/api/zk/ai/kvot")
Appen skickar hela samtalet varje gång (max 50 meddelanden / 50 000 tecken). Det ska börja och sluta med användarens meddelande. Inloggning krävs.
| Svar | Betyder |
|---|---|
200, vagrad: false | Svaret i svar |
200, vagrad: true | Modellen avböjde frågan. Visa ett vänligt meddelande. |
| 400 | Fel i anropet (okänt uppdrag, felaktigt samtal) |
| 429 | Dagens kvot eller månadens budget är slut |
| 502 | Leverantören svarade med fel — det riktiga felet står i zk_ai_logg, appen får ett allmänt meddelande |
| 503 | Inte konfigurerat |
Användaren kan läsa sina egna rader i zk_ai_logg (t.ex. för att visa förbrukning).
#Bra att veta
- Anthropic: pluginet använder API-version
2026-10-21. Mot Anthropics officiella API slås automatisk reservmodell på för de modeller som stödjer det (fallbacks: "default"): avböjer modellen av säkerhetsskäl körs frågan om på en annan modell i samma anrop. Inte via proxy/egenbas_url. - Vill du hålla data inom EU? Välj
kompatibelmed en EU-leverantör eller en modell du kör själv. - Kvoterna räknas när frågan kommer in. Skickar en användare många frågor exakt samtidigt kan hen gå några över gränsen.
#Begränsningar
- Ingen strömning — svaret kommer när det är klart (timeout 120 s).
- Bara text: inga bilder, filer eller verktyg i den här versionen.
- Kostnaden beräknas inte i kronor — loggen visar tokens; priset per token hittar du hos din leverantör.
#Testa
./bank.py ai
14 tester mot en låtsas-leverantör (inget når internet): rätt format för alla fyra leverantörer, reservmodell bara där den gäller, vägran, att leverantörsfel inte läcker till appen, ogiltiga samtal, dagskvot, månadsbudget, innehållsloggning av/på, behörighet och nyckel ur miljön. Skydden är mutantverifierade.
#Vem som ser dina anrop
Blocket skickar texten du bearbetar till den leverantör du valt, med din egen nyckel: Anthropic, OpenAI, Google Gemini eller en egen kompatibel tjänst. Leverantören är då din leverantör, inte Zkrinets. Innehåller anropen personuppgifter ansvarar du för att ha ett biträdesavtal med leverantören och för var datan hamnar. Loggen sparar bara antal tokens om du inte slår på annat.