Hoppa till huvudinnehåll

Chattverktyg

Chatt kan låta modellen anropa verktyg. En tur med verktyg aktiverade kör en inbyggd flervarvsloop: modellen begär ett verktyg, Libre WebUI kör det under den anropande användarens identitet och behörigheter, resultatet skickas till modellen och loopen fortsätter tills modellen svarar. Högst åtta varv per tur och åtta anrop per varv tillåts. Stopp avbryter modellanropet, pågående verktygsanrop och väntande godkännanden.

Verktygsanrop registreras som normaliserade händelser (chat.tool-call.v1, chat.tool-result.v1, chat.approval.v1) som flödar likadant över den privata WebSocket-vägen och den beständiga händelseströmmen. En uppdatering eller återanslutning spelar därför upp samma tillstånd. Den slutförda turen lagrar anropen med begränsade resultatförhandsvisningar i assistentmeddelandet.

Aktivera verktyg​

Verktyg är avstängda som standard. En administratör öppnar dem under Inställningar → Användarhantering → Åtkomst och policyer → Verktygsåtkomst för endast administratörer eller alla användare. Varje tur väljer sedan verktyg genom skiftnyckeln i redigeraren, som öppnar en huvudbrytare och en kryssruta per inbyggt verktyg och registrerad server. Väljaren kan begränsa profilens bindningar men aldrig utöka dem. Privata inkognitochattar erbjuder inga verktyg eftersom ett anrop är en utåtriktad åtgärd som kan lämna godkännanden och revisionsposter.

Brytaren Verktygsåtkomst sparar direkt. Klicka på den, eller använd Tab för att fokusera den och Space för att växla. Att ändra åtkomsten behåller inställningsfönstret och dess rullposition.

En assistentprofil (persona) kan avgränsa verktygen: bundna verktygsservrar, en delmängd av inbyggda verktyg, bundna färdigheter och kunskapssamlingar begränsar vad modellen ser.

Inbyggda verktyg​

Chatt innehåller tretton förstapartsverktyg. Alla är skrivskyddade utom verktygen som ändrar anteckningar och kalendrar, vilka går genom godkännandeflödet för sidoeffekter:

  • web_search — den administratörskonfigurerade sökmotorn som följer åtkomstläget för webbsökning.
  • search_documents — hybridsökning i användarens uppladdade dokument och kunskapssamlingar, inklusive delade samlingar; varje passage citeras med segment och källplats.
  • list_documents — listar dokumenten i chattens omfång med ID, typ och storlek så modellen kan välja vad som ska läsas.
  • read_document — läser ett begränsat fönster i ett tillgängligt dokument efter ID och offset, märkt med källplats, för filer som hämtning ensam inte kan besvara.
  • load_skill — läser in fullständiga färdighetsinstruktioner efter slug; beskrivningen innehåller manifestet över aktiverade färdigheter så de förblir latenta tills modellen behöver dem. Medföljande filer listas sist.
  • read_skill_file — läser en medföljande fil efter slug och relativ sökväg, så ett stort referensdokument använder ingen kontext förrän det öppnas.
  • list_notes — listar användarens egna och delade anteckningar med ID.
  • read_note — läser en antecknings fullständiga innehåll efter ID.
  • create_note — skapar en anteckning och kräver godkännande av sidoeffekt.
  • update_note — ersätter anteckningens innehåll och behåller föregående tillstånd som återställbar version; kräver godkännande.
  • list_calendar_events — listar egna och delade kalenderhändelser inom ett intervall av epoch-millisekunder.
  • create_calendar_event — skapar en kalenderhändelse och kräver godkännande.
  • delete_calendar_event — tar bort en kalenderhändelse efter ID och kräver godkännande.

Verktygsservrar​

Administratörer registrerar externa verktygsservrar under Inställningar → Verktyg. Startmallar förifyller formuläret, inklusive ett säkert offentligt demo-API:

  • OpenAPI: en JSON OpenAPI 3.x-specifikation hämtas en gång och fästs med SHA-256-digest. Varje operation blir ett verktyg; GET klassificeras skrivskyddat och övriga som sidoeffekt tills en administratör åsidosätter per verktyg. Körningen bygger anropet från den fästa operationen—modellargument väljer aldrig destination.
  • MCP (strömmande HTTP): serverns verktygslista hämtas över JSON-RPC och fästs likadant. annotations.readOnlyHint markerar skrivskydd. stdio-MCP stöds avsiktligt inte; externa processer körs aldrig i webbprocessen.

En ändrad inventering gäller först när en administratör uppdaterar servern, vilket flyttar den fästa versionen och bevarar åsidosättningar per verktyg. Tillgängligheten per server kan vara endast administratörer, alla användare eller behörighetsbaserad genom den gemensamma resursmodellen.

Autentiseringsuppgifter​

Servrar som kräver autentisering använder uppgifter per användare, bearer-token eller namngivet huvud. Varje hemlighet krypteras med ytterligare autentiserade data som binder den till exakt användare och server, anges under Inställningar → Verktyg och delas aldrig mellan konton.

Interaktiv OAuth (MCP)​

En MCP-server kan också logga in varje person för sig själv. Registrera den med autentiseringsläget Interaktiv OAuth, så läser Libre WebUI utmaningen WWW-Authenticate som servern svarar med, följer den till metadatan för den skyddade resursen, sedan till auktoriseringsserverns metadata, och registrerar en klient dynamiskt (RFC 7591) när auktoriseringsservern erbjuder registrering. Leverantörer som inte registrerar klienter automatiskt tar ett administratörsangivet klient-id, och valfri hemlighet, på registreringsformuläret; hemligheten krypteras tillsammans med de upptäckta endpointerna.

Varje person trycker sedan på Anslut på serverns kort och omdirigeras till leverantören. Flödet använder PKCE (S256) med CSRF-tillstånd och PKCE-verifieraren i en HttpOnly-cookie knuten till just den servern. Callbacken växlar in koden på servern, lagrar token krypterade med samma användar-och-server-bindning som en statisk hemlighet, och skickar webbläsaren tillbaka till appen med en statusflagga — åtkomst- och refresh-token når aldrig sidan. Åtkomsttoken förnyas automatiskt en minut före utgång, en gång per person och server även när flera verktygsanrop tävlar. När en förnyelse är omöjlig kommer verktygsanropet tillbaka och ber om ny anslutning i stället för att misslyckas anonymt. Koppla från tar bort personens token och lämnar registreringen kvar; att radera servern glömmer även den upptäckta konfigurationen.

En server som nekar en oautentiserad verktygslistning registreras ändå: dess inventering fästs vid första lyckade anslutningen (och vid varje administratörsuppdatering), så inget erbjuds en modell innan det är känt.

Policy för utgående trafik​

Varje verktygsbegäran löser själv sin destination, nekar privata, loopback- och metadataadressrymder och fäster anslutningen vid löst adress så DNS-rebindning inte kan omdirigera. Omdirigeringar nekas. Svar storleksbegränsas och varje anrop har en strikt tidsgräns. Exakta interna värdnamn kan tillåtas med TOOLS_PRIVATE_NETWORK_ALLOWLIST; de förblir fästa och begränsade. Verktygsutdata återgår till modellen som obetrodd text.

Godkännanden​

Skrivskyddade verktyg kör utan fråga. Ett verktyg med sidoeffekt pausar turen och frågar: tillåt en gång, för chatten, alltid på servern eller neka. Beslut är beständiga; "alltid" överlever omstarter och kan återkallas under Inställningar → Verktyg. En väntande begäran löper ut efter två minuter och ses som nekad. Nekanden och tidsgränser kör aldrig anropet. Varje beslut och anrop lämnar en maskerad säkerhetsrevisionshändelse.

Exempel​

Slå först på skiftnyckeln i redigeraren; varje exempel nedan är ett vanligt chattmeddelande.

web_search — slå upp något​

Vad ändrades i den senaste SQLite-utgåvan? Sök på webben innan du svarar.

Modellen anropar web_search med en fråga som {"query": "SQLite latest release changelog"}, anropskortet visar mottagna utdrag och svaret citerar fynden. Webbsökning måste vara konfigurerad och tillåten för kontot.

search_documents — fråga dina egna filer​

Ladda upp en PDF eller lägg till dokument i en kunskapssamling och skriv:

Sök i mina dokument efter uppsägningsklausulen och citera den exakt.

Modellen anropar search_documents med {"query": "termination clause"} och får matchande passager märkta med källdokument, så svaret kan citera och ange källa.

load_skill — tillämpa en sparad färdighet​

Skapa en färdighet under Inställningar → Färdigheter (exempelvis $release-notes, hur versionsinformation ska skrivas) och skriv:

Skriv ett utkast till versionsinformation för diffen med $release-notes.

Modellen ser färdigheten i manifestet, anropar load_skill {"slug": "release-notes"} för fullständiga instruktioner och följer dem. $ i redigeraren autokompletterar färdighetsslugs.

En OpenAPI-server — exempelvis ett väder-API​

  1. Inställningar → Verktyg → Registrera server: namn Weather, typ OpenAPI, bas-URL https://api.example-weather.dev, specifikations-URL https://api.example-weather.dev/openapi.json, autentiseringsläge bearer.

  2. Specifikationen fästs och operationerna visas som verktyg, exempelvis getForecast (GET, skrivskyddad) och createAlert (POST, sidoeffekt).

  3. Varje användare sparar sin API-nyckel på serverkortet.

  4. I chatten:

    Hur blir vädret i Montreal i helgen?

    Modellen anropar weather__getForecast {"city": "Montreal"} och det körs direkt; skrivskyddade verktyg frågar aldrig.

    Varna mig om temperaturen sjunker under -20 i natt.

    weather__createAlert har en sidoeffekt, så turen pausas med valen Tillåt en gång, Tillåt för chatten, Tillåt alltid eller Neka. Inget skickas före valet.

Exa MCP — sök och hämta webben​

Under Inställningar → Verktyg → Börja från en mall väljer du Exa för att förifylla en MCP-registrering med:

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

URL:en väljer web_search_exa och web_fetch_exa med Exas parameter för verktygsval. Mallen använder ingen autentisering och begränsar som standard åtkomsten till administratörer. Granska formuläret och välj Spara för att ansluta och fästa verktygslistan. Att öppna eller avbryta mallen kontaktar inte Exa. Sökfrågor och begärda URL:er skickas till Exa när verktygen körs.

En MCP-server — exempelvis en ärendespårare​

  1. Inställningar → Verktyg → Registrera server: namn Issues, typ MCP, bas-URL https://mcp.example-tracker.dev/mcp, autentiseringsläge header med huvudnamnet X-Api-Key.

  2. Verktygslistan fästs. Skrivskyddade verktyg som search_issues kör fritt, övriga som create_issue frågar först.

  3. I chatten:

    Hitta öppna ärenden som nämner "database lock" och skapa ett nytt som sammanfattar mönstret.

    issues__search_issues kör direkt; issues__create_issue visar exakta argument i godkännandekortet så du kan läsa vad som lämnas in.

Miljövariabler​

VariabelEffekt
TOOLS_ACCESS_MODEFäst verktygsfunktionen till admins eller all-users och lås reglaget.
TOOLS_PRIVATE_NETWORK_ALLOWLISTExakta värdnamn som får lösas till privata adresser, kommaseparerade.

Gränser​

  • Verktygsanrop körs på WebSocket-vägen (privat sessionstransport är avsiktligt utesluten) och den beständiga genereringsvägen för sparade chattar. Äldre REST-strömningsendpoint kör inte verktygsloopen.
  • @model-omnämnanden i kanaler kör samma loop mot den omnämnande medlemmens katalog, med en skillnad: det finns ingen att fråga, så ett verktygsanrop med sidoeffekt utan ett stående godkännande avvisas direkt i stället för att vänta. Skrivskyddade verktyg körs som vanligt.
  • Work-agenter anropar samma servrar via samma gateway: endast körningar med nätverk, servrar utan lagrade uppgifter filtreras bort redan när verktygen erbjuds, och verktyg med sidoeffekter styrs av Works godkännanden.
  • Gemini- och agent-CLI-modeller får inga verktyg; Ollama-, OpenAI-kompatibla, Responses-API- och Anthropic-leverantörer får dem.
  • Interaktiv OAuth gäller bara MCP: en OpenAPI-server använder fortfarande en statisk uppgift per användare. Flödet är auktoriseringskod-beviljandet med PKCE; enhetskod- och klientuppgiftsflöden erbjuds inte, och en auktoriseringsserver som inte publicerar metadata (eller ingen registreringsendpoint och inget administratörsangivet klient-id) kan inte anslutas.
  • Upptäckta OAuth-endpoints måste vara https; oskyddad http accepteras bara för loopback, för en leverantör som körs på samma maskin under utveckling.
  • Omdirigerings-URI:n härleds från BASE_URL (eller den första CORS_ORIGIN), så det värdet måste vara adressen webbläsaren faktiskt når och måste registreras hos leverantörer som fäster omdirigerings-URI:er.