AI-tjänster

Proxytjänst för AI-assistenter

Gemensam serversidestjänst som förmedlar säker trafik mellan kommunens AI-chattar och AI-plattformen, inklusive tal- och översättningstjänster.

Om applikationen

Tjänsten är den gemensamma bakomliggande motorn för kommunens AI-assistenter. Den tar emot frågor från chattwidgets och appar (till exempel serviceassistenter och Pratomaten) och vidarebefordrar dem till AI-plattformen Intric/Eneo, utan att API-nycklarna exponeras i webbläsaren. Varje assistent har en egen API-nyckel som hanteras centralt här.

Utöver själva chattflödet (assistenter, sessioner, konversationer, filuppladdning, kunskapsgrupper och utrymmen) tillhandahåller tjänsten tillgång till Azures taltjänster och maskinöversättning, så att chattar kan erbjuda tal-till-text och översatta svar.

Tjänsten kan köras i internt eller externt läge. Anrop från inbäddade chattar verifieras med en beräknad hash, och det finns stöd för SAML-inloggning samt begränsning av anropstakt för att skydda mot överbelastning.

Det här stödjer applikationen

  • Förmedling till AI-plattform – Vidarebefordrar frågor och svar mellan chattklienter och AI-plattformen Intric/Eneo.
  • Central nyckelhantering – API-nycklar för respektive assistent (bl.a. vuxenutbildning, Servanet och flera Pratomat-instanser) hålls på servern.
  • Tal och översättning – Utfärdar åtkomst till Azure Speech för tal-till-text och förmedlar översättningar via Azure Translator.
  • Sessions- och filhantering – Hanterar konversationer, sessioner, filuppladdningar, kunskapsgrupper och utrymmen i AI-plattformen.
  • Skydd och åtkomstkontroll – Hashverifiering av inbäddade klienter, SAML-stöd samt begränsning av anropstakt.

Teknisk dokumentation

Nedan beskrivs hur applikationen är uppbyggd, vilka API:er den använder och vad som krävs för att driftsätta den. Informationen är härledd ur källkoden och dess konfiguration på GitHub.

Arkitektur

Arkitekturskiss för Proxytjänst för AI-assistenter: webbappens delar och dess integrationer.
Lösningsarkitektur, härledd ur källkodens konfiguration.

Applikationen består av en webbaserad frontend (Minimal Next.js-frontend (från mall)) och en backend (Node.js med Express och routing-controllers samt Prisma) som utvecklas i samma kodbas. Verksamhetsanrop går via kommunens gemensamma API-plattform (WSO2) – frontend pratar aldrig direkt med underliggande system. Inloggning: Hashverifiering för inbäddade chattklienter; SAML (SSO) konfigurerbart för internt läge. Övriga integrationer som förekommer i koden: AI-plattformen Intric/Eneo, Azure Speech (taltjänster), Azure Translator (maskinöversättning), SAML IdP, WSO2 API-gateway.

Teknikstack

  • Frontend: Minimal Next.js-frontend (från mall)
  • Backend: Node.js med Express och routing-controllers samt Prisma
  • Test: Jest

API-beroenden

Applikationen konsumerar följande API:er via kommunens API-plattform. Versionerna är hämtade ur källkodens API-konfiguration.

API-beroenden för Proxytjänst för AI-assistenter
APIVersionAnvändning
SimulatorServer2.0Hälsokontroll av API-anslutningen (enligt api-config).

Konfiguration och driftsättning

  • Miljöfil .env.example.local med INTRIC_API_BASE_URL, användaruppgifter och salt för hashverifiering
  • En API-nyckel per ansluten assistent (INTRIC_APIKEY_*)
  • Azure-nycklar för tal och översättning (AZURE_REGION, AZURE_SUBSCRIPTION_KEY, AZURE_TRANSLATOR_KEY)
  • SAML-certifikat och nycklar för inloggning
  • Läge INTERNAL/EXTERNAL samt inställningar för anropsbegränsning (rate/spike limit)

Noterbart ur källkoden

  • Konfigurationen listar nycklar för bl.a. vuxenutbildningens assistent, Servanet och nio Pratomat-instanser.
  • Senare ändringar refererar till Eneo, det nya namnet på Intric-plattformen.
  • Tjänsten är i första hand ett API (proxy) – frontenddelen i repot är en mallrest.

Källkod

Källkoden är öppen och finns hos Sundsvalls kommun på GitHub. I källkodsförrådet finns även instruktioner för att klona, konfigurera och starta applikationen i egen miljö.