Hop til hovedindhold

Teknisk reference

Denne side er til udviklere, der vil forstå, hvad assistenten skriver, eller læse og rette en miniapps kode. Du behøver den ikke for at bygge eller bruge en miniapp.

En miniapp er ét HTML-dokument med sin egen CSS og JavaScript. Før dens egen kode kører, sætter AgentBase tre ting ind øverst i <head>: et stylesheet med organisationens farver, listen over miniappens apps og en lille klient, der giver koden window.agentbase.

window.agentbase​

Den eneste vej fra miniappen til AgentBase. Objektet er låst (kan ikke overskrives), og alle kald returnerer et Promise, der afvises med en Error, hvis message er en dansk besked, der kan vises direkte for brugeren.

window.agentbase.apps
// Miniappens apps:
// [{ id, name, description, inputs, outputs, gated, accessible, ... }]
// inputs er et JSON Schema; outputs er [{ name, type, label }].

await window.agentbase.runApp(appIdEllerNavn, inputs)
// Kører appen som den, der bruger miniappen. Svarer med { outputnavn: værdi }.

await window.agentbase.ask(prompt, { system, schema })
// Spørger organisationens sprogmodel. Uden schema: en tekst.
// Med et JSON Schema (type "object"): et objekt, der overholder det.

await window.agentbase.fileFromInput(inputElement)
// Uploader filerne fra et <input type="file"> som brugerens egne og svarer med
// [{ filename, mime_type, data: "", file_id }] — den form, en apps fil-input
// tager imod. Send værdien videre til runApp, som den er.

await window.agentbase.download(fil)
// Gemmer en fil hos brugeren: en apps outputfil { filename, mime_type, data },
// en fil fra fileFromInput (med file_id) eller en data:-URL.

apps​

FeltBetydning
id, name, descriptionAppen. runApp tager både id og navn (navnet uden forskel på store og små bogstaver).
inputsAppens input som JSON Schema
outputs[{ name, type, label }] — svaret fra runApp har én nøgle pr. output-name
accessiblefalse, når den, der bruger miniappen, ikke må køre appen. Så har posten kun navnet, ikke felterne.
missingAppen eller dens låste version findes ikke længere
follows_currentAppen er ikke låst til en version og følger den nuværende
version_labelDen låste version, fx v2.0
gatedAppen har et godkendelsestrin (kan ikke køres fra en miniapp)

En god miniapp tjekker accessible og viser en forklaring i stedet for en knap, der vil fejle.

runApp​

const button = document.querySelector('#kør')
button.disabled = true
status.textContent = 'Kører …'
try {
const filer = await window.agentbase.fileFromInput(document.querySelector('#kontrakt'))
const svar = await window.agentbase.runApp('Kontrakttjek', { kontrakt: filer[0] })
vis(svar.fund)
} catch (err) {
fejl.textContent = err.message
} finally {
button.disabled = false
}
  • Kun apps, der er erklæret i miniappen (står i apps), kan køres. Andre afvises, før der sendes noget.
  • I kladden i Chat køres appens nuværende version; fra en delt miniapp den version, den delte version er låst til.
  • Kaldet venter, til kørslen er færdig. Der er ingen ventende kørsler — apps med godkendelsestrin afvises.

ask​

const svar = await window.agentbase.ask(tekst, {
system: 'Opsummer henvendelsen i tre punkter på dansk.',
})

const data = await window.agentbase.ask(tekst, {
schema: {
type: 'object',
properties: { emne: { type: 'string' }, haster: { type: 'boolean' } },
required: ['emne', 'haster'],
},
})
// data.emne, data.haster

Modellen er den samme som i Chat, på organisationens egen nøgle, hvis den har en. Et schema kontrolleres på samme måde som i byggeklodsen Struktureret output, og svaret valideres mod det: koden får enten et objekt, der passer, eller en fejl.

Udseende​

Et stylesheet med organisationens farver og skriften Inter er allerede indlæst, og det følger lyst og mørkt tema.

KlasseTil
ab-stackLodret stak med luft imellem
ab-rowVandret række, der ombryder
ab-cardKort med kant og baggrund
ab-button, ab-button secondaryPrimær og sekundær knap
ab-inputTekstfelt, valgliste og textarea
ab-tableTabel
ab-mutedDæmpet tekst
ab-errorFejltekst

Farvevariabler: var(--primary), var(--primary-foreground), var(--foreground), var(--muted-foreground), var(--border), var(--card), var(--radius).

Grænser​

HvadGrænse
Miniappens kode200.000 tegn
Miniappens navn200 tegn
ask — spørgsmål100.000 tegn
ask — system og schema20.000 tegn hver
Én forespørgsel fra miniappen60 MB
Uploadede filerSamme grænse som andre uploads i AgentBase
Fejl, der sendes med til assistenten20 pr. tur, 2.000 tegn hver

Der er ingen grænse for, hvor mange kald en miniapp må lave.

Fejl i koden​

Fejl i siden (error, ubehandlede Promise-afvisninger og console.error) opsamles og sendes med til assistenten på næste tur sammen med de seneste svar fra apps og sprogmodel. Linjenumre gælder miniappens egen kode, ikke det, AgentBase har sat ind foran.

Rammen​

Miniappen vises i et <iframe> med srcdoc og sandbox="allow-scripts allow-forms allow-modals allow-downloads allow-popups allow-popups-to-escape-sandbox" — aldrig allow-same-origin eller allow-top-navigation. Rammen har derfor ingen oprindelse: localStorage, sessionStorage og cookies virker ikke, og koden kan ikke læse AgentBase-siden. Al kommunikation går som postMessage til AgentBase-siden, som kun svarer på beskeder fra netop denne ramme. Se Sikkerhed og data.

Kørsler​

En appkørsel fra en miniapp har triggeren Miniapp i kørselsloggen og tilhører den, der brugte miniappen. Den tæller med i appens hukommelse og byggeklodsernes hukommelse mellem kørsler som andre kørsler i drift.

Relaterede sider​