Hop til hovedindhold

Chatværktøjer

Chat kan lade modellen kalde værktøjer. En tur med værktøjer aktiveret kører et indbygget flertrinsloop: modellen anmoder om et værktøj, Libre WebUI kører det under den kaldende brugers identitet og tilladelser, resultatet sendes til modellen, og loopet fortsætter, indtil modellen svarer. Højst otte runder pr. tur og otte kald pr. runde tillades. Stop afbryder modelkaldet, igangværende værktøjskald og ventende godkendelser.

Værktøjskald registreres som normaliserede hændelser (chat.tool-call.v1, chat.tool-result.v1, chat.approval.v1), der flyder ens over den private WebSocket-vej og den vedvarende hændelsesstrøm. En opdatering eller genforbindelse afspiller derfor samme tilstand. Den afsluttede tur gemmer kaldene med afgrænsede resultatforhåndsvisninger i assistentbeskeden.

Aktivér værktøjer​

Værktøjer er deaktiveret som standard. En administrator åbner dem under Indstillinger → Brugeradministration → Adgang og politikker → Værktøjsadgang for kun administratorer eller alle brugere. Hver tur vælger derefter værktøjer gennem skruenøglen i editoren, som åbner en hovedkontakt og et afkrydsningsfelt pr. indbygget værktøj og registreret server. Vælgeren kan begrænse profilens bindinger, aldrig udvide dem. Private inkognito-chats tilbyder ingen værktøjer, fordi et kald er en udadrettet handling, der kan efterlade godkendelser og revisionsposter.

Kontakten Værktøjsadgang gemmer med det samme. Klik på den, eller brug Tab til at fokusere den og Space til at slå den til og fra. At ændre adgangen bevarer indstillingsvinduet og dets rulleposition.

En assistentprofil (persona) kan afgrænse værktøjerne: bundne værktøjsservere, en delmængde af indbyggede værktøjer, bundne færdigheder og videnssamlinger begrænser, hvad modellen ser.

Indbyggede værktøjer​

Chat indeholder tretten førstepartsværktøjer. Alle er skrivebeskyttede bortset fra værktøjerne, der ændrer noter og kalendere, som går gennem godkendelsesflowet for sideeffekter:

  • web_search — den administratorkonfigurerede søgemaskine, som følger adgangstilstanden for websøgning.
  • search_documents — hybridsøgning i brugerens uploadede dokumenter og videnssamlinger, inklusive delte samlinger; hver passage citeres med segment og kildeplacering.
  • list_documents — viser dokumenterne i chattens omfang med ID, type og størrelse, så modellen kan vælge, hvad der skal læses.
  • read_document — læser et afgrænset vindue i et tilgængeligt dokument efter ID og offset, mærket med kildeplacering, til filer som hentning alene ikke kan besvare.
  • load_skill — indlæser komplette færdighedsinstruktioner efter slug; beskrivelsen indeholder manifestet over aktiverede færdigheder, så de forbliver dovne, til modellen behøver dem. Medfølgende filer vises til sidst.
  • read_skill_file — læser én medfølgende fil efter slug og relativ sti, så et stort referencedokument ikke bruger kontekst, før det åbnes.
  • list_notes — viser brugerens egne og delte noter med ID.
  • read_note — læser en notes fulde indhold efter ID.
  • create_note — opretter en note og kræver godkendelse af sideeffekt.
  • update_note — erstatter notens indhold og bevarer den tidligere tilstand som gendannelig version; kræver godkendelse.
  • list_calendar_events — viser egne og delte kalenderbegivenheder i et epoch-millisekundinterval.
  • create_calendar_event — opretter en kalenderbegivenhed og kræver godkendelse.
  • delete_calendar_event — sletter en kalenderbegivenhed efter ID og kræver godkendelse.

Værktøjsservere​

Administratorer registrerer eksterne værktøjsservere under Indstillinger → Værktøjer. Startskabeloner forudfylder formularen, inklusive et sikkert offentligt demo-API:

  • OpenAPI: en JSON OpenAPI 3.x-specifikation hentes én gang og fastgøres med SHA-256-digest. Hver operation bliver et værktøj; GET klassificeres som skrivebeskyttet og resten som sideeffekt, indtil en administrator tilsidesætter pr. værktøj. Kørsel bygger kaldet fra den fastgjorte operation—modelargumenter vælger aldrig destinationen.
  • MCP (streambar HTTP): serverens værktøjsliste hentes over JSON-RPC og fastgøres tilsvarende. annotations.readOnlyHint markerer skrivebeskyttet. stdio-MCP understøttes bevidst ikke; eksterne processer kører aldrig i webprocessen.

En ændret oversigt gælder først, når en administrator opdaterer serveren, hvilket fremfører den fastgjorte version og bevarer tilsidesættelser pr. værktøj. Tilgængeligheden pr. server kan være kun administratorer, alle brugere eller tilladelsesbaseret gennem den fælles ressourcemodel.

Legitimationsoplysninger​

Servere, der kræver godkendelse, bruger legitimationsoplysninger pr. bruger, bearer-token eller navngivet header. Hver hemmelighed krypteres med yderligere godkendte data, der binder den til præcis bruger og server, angives under Indstillinger → Værktøjer og deles aldrig mellem konti.

Interaktiv OAuth (MCP)​

En MCP-server kan også logge hver person ind for sig selv. Registrér den med godkendelsestilstanden Interaktiv OAuth, så læser Libre WebUI WWW-Authenticate-udfordringen, serveren svarer med, følger den til metadata for den beskyttede ressource, derefter til godkendelsesserverens metadata, og registrerer en klient dynamisk (RFC 7591), når godkendelsesserveren tilbyder registrering. Udbydere, der ikke registrerer klienter automatisk, tager i stedet et administratorleveret klient-id, og en valgfri hemmelighed, på registreringsformularen; hemmeligheden krypteres sammen med de fundne endpoints.

Hver person trykker derefter på Opret forbindelse på serverens kort og sendes videre til udbyderen. Flowet bruger PKCE (S256) med CSRF-state og PKCE-verifikatoren opbevaret i en HttpOnly-cookie, der er afgrænset til netop den ene server. Callbacket udveksler koden på serveren, gemmer tokens krypteret med den samme bruger-og-server-binding som en statisk hemmelighed, og sender browseren tilbage til appen med et statusflag — adgangs- og opdateringstokens når aldrig siden. Adgangstokens fornyes automatisk et minut før udløb, én gang pr. person og server, selv når flere værktøjskald kapløber. Når en fornyelse er umulig, kommer værktøjskaldet tilbage og beder om at oprette forbindelse igen i stedet for at mislykkes anonymt. Afbryd forbindelse fjerner personens tokens og lader registreringen stå; sletning af serveren glemmer også den fundne konfiguration.

En server, der afviser en ugodkendt værktøjsliste, registreres alligevel: dens inventar fastgøres ved den første vellykkede forbindelse (og ved enhver administratoropdatering), så intet tilbydes en model, før det er kendt.

Politik for udgående trafik​

Hver værktøjsanmodning opløser selv destinationen, afviser private, loopback- og metadataadresser og fastgør forbindelsen til den opløste adresse, så DNS-rebinding ikke kan omdirigere. Omdirigeringer afvises. Svar størrelsesbegrænses, og hvert kald har en fast tidsgrænse. Nøjagtige interne værtsnavne kan tillades med TOOLS_PRIVATE_NETWORK_ALLOWLIST; de forbliver fastgjorte og begrænsede. Værktøjsoutput vender tilbage til modellen som upålidelig tekst.

Godkendelser​

Skrivebeskyttede værktøjer kører uden spørgsmål. Et værktøj med sideeffekt pauser turen og spørger: tillad én gang, for denne chat, altid på serveren eller afvis. Beslutninger er vedvarende; "altid" overlever genstarter og kan tilbagekaldes under Indstillinger → Værktøjer. En ventende anmodning udløber efter to minutter og ses som afvist. Afvisninger og tidsgrænser kører aldrig kaldet. Hver beslutning og hvert kald efterlader en maskeret sikkerhedsrevisionshændelse.

Eksempler​

Slå først skruenøglen til i editoren; hvert eksempel nedenfor er en normal chatbesked.

web_search — slå noget op​

Hvad ændrede sig i den seneste SQLite-udgivelse? Søg på nettet, før du svarer.

Modellen kalder web_search med en forespørgsel som {"query": "SQLite latest release changelog"}, kaldkortet viser de modtagne uddrag, og svaret citerer resultaterne. Websøgning skal være konfigureret og tilladt for kontoen.

search_documents — spørg dine egne filer​

Upload en PDF, eller føj dokumenter til en videnssamling, og skriv:

Søg efter opsigelsesklausulen i mine dokumenter, og citér den nøjagtigt.

Modellen kalder search_documents med {"query": "termination clause"} og modtager matchende passager mærket med kildedokument, så svaret kan citere og angive kilden.

load_skill — anvend en gemt færdighed​

Opret en færdighed under Indstillinger → Færdigheder (f.eks. $release-notes, hvordan udgivelsesnoter skal skrives), og skriv:

Skriv et udkast til udgivelsesnoter for denne diff med $release-notes.

Modellen ser færdigheden i manifestet, kalder load_skill {"slug": "release-notes"} for de fulde instruktioner og følger dem. $ i editoren autofuldfører færdighedsslugs.

En OpenAPI-server — f.eks. et vejr-API​

  1. Indstillinger → Værktøjer → Registrer server: navn Weather, type OpenAPI, basis-URL https://api.example-weather.dev, specifikations-URL https://api.example-weather.dev/openapi.json, godkendelsestilstand bearer.

  2. Specifikationen fastgøres, og operationerne vises som værktøjer, f.eks. getForecast (GET, skrivebeskyttet) og createAlert (POST, sideeffekt).

  3. Hver bruger gemmer sin API-nøgle på serverkortet.

  4. I chatten:

    Hvordan bliver vejret i Montreal i weekenden?

    Modellen kalder weather__getForecast {"city": "Montreal"}, og det kører straks; skrivebeskyttede værktøjer spørger aldrig.

    Advar mig, hvis temperaturen falder under -20 i aften.

    weather__createAlert har en sideeffekt, så turen pauses med valgene Tillad én gang, Tillad for denne chat, Tillad altid eller Afvis. Intet sendes før valget.

Exa MCP — søg og hent websider​

Under Indstillinger → Værktøjer → Start fra en skabelon vælger du Exa for at forudfylde en MCP-registrering med:

https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa

URL'en vælger web_search_exa og web_fetch_exa med Exas parameter til værktøjsvalg. Skabelonen bruger ingen godkendelse og begrænser som standard adgangen til administratorer. Gennemgå formularen, og vælg Gem for at oprette forbindelse og fastgøre værktøjslisten. At åbne eller annullere skabelonen kontakter ikke Exa. Søgeforespørgsler og anmodede URL'er sendes til Exa, når værktøjerne kører.

En MCP-server — f.eks. en problemsporing​

  1. Indstillinger → Værktøjer → Registrer server: navn Issues, type MCP, basis-URL https://mcp.example-tracker.dev/mcp, godkendelsestilstand header med navnet X-Api-Key.

  2. Værktøjslisten fastgøres. Skrivebeskyttede værktøjer som search_issues kører frit, mens andre som create_issue spørger først.

  3. I chatten:

    Find åbne issues, der nævner "database lock", og opret et nyt, som sammenfatter mønstret.

    issues__search_issues kører straks; issues__create_issue viser de nøjagtige argumenter i godkendelseskortet, så du kan læse indholdet før godkendelse.

Miljøvariabler​

VariabelEffekt
TOOLS_ACCESS_MODEFastgør værktøjsfunktionen til admins eller all-users, og lås kontakten.
TOOLS_PRIVATE_NETWORK_ALLOWLISTNøjagtige værtsnavne, der må opløses til private adresser, kommasepareret.

Grænser​

  • Værktøjskald kører på WebSocket-vejen (privat sessionstransport er bevidst udeladt) og den vedvarende genereringsvej til gemte chats. Det ældre REST-streamingendpoint kører ikke værktøjsloopet.
  • Kanalers @model-omtaler kører samme loop mod det omtalte medlems katalog, med én forskel: der er ingen til at spørge, så et værktøj med sideeffekt uden en stående godkendelse afvises straks i stedet for at vente. Skrivebeskyttede værktøjer kører normalt.
  • Work-agenter kalder de samme servere gennem den samme gateway: kun kørsler med netværk, servere uden gemte legitimationsoplysninger filtreres fra allerede når værktøjerne tilbydes, og værktøjer med sideeffekter styres af Works godkendelser.
  • Gemini- og agent-CLI-modeller modtager ingen værktøjer; Ollama-, OpenAI-kompatible, Responses-API- og Anthropic-udbydere gør.
  • Interaktiv OAuth er kun til MCP: en OpenAPI-server bruger stadig en statisk oplysning pr. bruger. Flowet er authorization-code-grant med PKCE; device-code- og client-credentials-flows tilbydes ikke, og en godkendelsesserver, der ikke offentliggør metadata (eller ingen registreringsendpoint og intet administratorleveret klient-id), kan ikke forbindes.
  • Fundne OAuth-endpoints skal være https; almindelig http accepteres kun for loopback, til en udbyder, der kører på samme maskine under udvikling.
  • Redirect-URI'en udledes af BASE_URL (eller den første CORS_ORIGIN), så den værdi skal være adressen, browseren rent faktisk når, og skal registreres hos udbydere, der fastgør redirect-URI'er.