# Egne AI-forbindelser

> Tilføj organisationens egen AI-infrastruktur eller udbyderkonto i hubben, vælg om Chat og API'et må bruge den, og kald den med processing connection:<id>.

Jeres organisation kan køre Chat på sin egen AI: egen infrastruktur, fx Azure OpenAI, egen hardware eller et andet OpenAI-kompatibelt endpoint, eller jeres egen konto hos en udbyder som Anthropic, OpenAI, Mistral AI eller OpenRouter. En administrator tilføjer hver forbindelse i hubben og bestemmer, om medarbejderne kan vælge den i Chat, og om den kan bruges via API.

Aftalen med udbyderen er jeres egen. Udbyderen er ikke komplais underdatabehandler, jeres organisation betaler udbyderen direkte, og forbruget tæller ikke med i loftet for AI-forbrug. Decide, Redacts genkendelse, Index og søgning i Dokumenter bruger altid komplais validerede modeller, så forbindelserne gælder ikke for dem.

## Tilføj en forbindelse

Du skal være administrator i organisationen. Siden findes, når organisationen har Chat eller Dokumenter.

1. [Log ind](https://hub.komplai.dk/login), og åbn **Organisation › AI og behandling › Forbindelser** (`/settings/ai`). Siden hedder **AI-forbindelser**.
2. Åbn **Tilføj forbindelse** under **Jeres forbindelser**.
3. Vælg **Type**. **Jeres konto hos en udbyder** kræver en **Udbyder**: Anthropic, OpenAI, Mistral AI, OpenRouter eller **Anden udbyder (OpenAI-kompatibel)**. **Jeres egen infrastruktur** er et OpenAI-kompatibelt endpoint, fx Azure OpenAI eller jeres egen hardware.
4. Skriv et **Navn**. Medarbejderne ser det i Chat, fx *Azure Sverige*.
5. Ved egen infrastruktur eller en anden udbyder skriver du **API-adresse**, **Hvor behandles data?** og **Forbliver data i EU/EØS?** (*Ja*, *Nej* eller *Ved ikke*). Ved en anden udbyder skriver du også **Udbyderens navn**. Adressen skal bruge https og kunne nås fra internettet.
6. Skriv **Model**, som udbyderen skriver den. Hos Azure er det udrulningens navn. Hos OpenRouter vælger `openrouter/free` blandt OpenRouters gratis modeller, eller du kan angive én bestemt model.
7. Indsæt **API-nøgle**. Den gemmes krypteret, og bagefter vises kun de sidste fire tegn.
8. Vælg **Kan vælges i Chat** og **Kan bruges via API**. En ny forbindelse starter med flueben ved Chat og uden flueben ved API.
9. Vælg **Tilføj forbindelse**. Siden kontrollerer forbindelsen med det samme, uden at sende en besked, og fortæller, om udbyderen godkendte nøglen og har modellen på sin liste.

## Hvad medarbejderne ser om en forbindelse

Hver forbindelse oplyser, hvor den behandler data, hvem der driver den, og om data forlader EU/EØS, både på siden og ved valget i Chat:

| Udbyder | Behandles i | Data forlader EU/EØS |
| --- | --- | --- |
| Anthropic | USA | Ja |
| OpenAI | USA | Ja |
| Mistral AI | Frankrig | Nej |
| OpenRouter | USA; OpenRouter sender hver anmodning videre til modellens udbyder, som kan ligge i et andet land | Ja |
| Jeres egen infrastruktur eller en anden udbyder | Hvor jeres administrator oplyser | Som jeres administrator oplyser |

Ved egen infrastruktur og en anden udbyder er oplysningerne jeres administrators egne, og hubben viser dem som jeres.

- **Gratis modeller.** OpenRouters modeller, der ender på `:free`, og routeren `openrouter/free` har en besked ved valget: Udbyderen kan gemme og bruge det, der sendes. Brug dem til afprøvning, syntetiske data og idéer.
- **Routere.** En router som `openrouter/free` vælger en model for hver anmodning. Den model, der svarede, vises i Chat og i forbrugsloggen, og API'et returnerer den i `model`.

## Kontrollér, ret eller slet en forbindelse

- **Kontrollér forbindelsen** afprøver nøglen og modellen uden at sende en besked. Svarer forbindelsen ikke inden for 15 sekunder, står der, at den ikke svarede.
- **Redigér** ændrer et hvilket som helst felt. Lad **API-nøgle** stå tomt for at beholde nøglen; skifter du udbyder, skal du skrive en ny.
- **Slet forbindelse** sletter også nøglen, og forbindelsen kan ikke længere vælges i Chat eller bruges via API. En forbindelse, der bruges til udkast, kan ikke slettes, før du vælger en anden behandling til udkast.

Samme side har **Udkast i Dokumenter, skabeloner og Word**: hvor teksten sendes hen, når nogen beder om et udkast eller et forslag. Vælg **Lokal infrastruktur** eller en af jeres forbindelser, og vælg **Gem valg**.

## Sådan beskyttes nøgler og adresser

- En administrator skriver nøglen én gang. Den gemmes krypteret og sendes aldrig tilbage til en browser. komplais medarbejdere modtager eller håndterer den aldrig.
- komplais operatører ser jeres forbindelser uden at kunne ændre dem, med værtsnavnet for jeres egen adresse, men aldrig nøglen, dens sidste tegn eller den fulde adresse.
- Adressen kontrolleres, når den gemmes, og igen før hvert kald. Den skal bruge https, må ikke pege på en intern eller privat netværksadresse og må ikke viderestille.
- Når en forbindelse oprettes, ændres eller slettes, og når valget til udkast ændres, skrives det i organisationens **Hændelseslog** uden nøglen.
- Kun organisationens administratorer kan åbne siden. komplais supportadgang, som kun kan læse, kan ikke.

## Brug en forbindelse via API

Et kald kan køre på en forbindelse, når:

- det bruger en personlig API-nøgle (`kp_live_...`) med `chat:complete`. Organisationens integrationsnøgle (`kp_org_...`) afvises med [integration_not_permitted](https://developers.komplai.dk/da/errors/integration_not_permitted);
- personen bag nøglen har adgang til Chat, og organisationens behandling for Chat er godkendt;
- forbindelsen har flueben ved **Kan bruges via API**. Forbindelsen viser så **Værdi til processing i API'et**, fx `connection:6d3f9a2e-1b4c-4e7d-8a5f-0c2b9e4d7a31`.

Valgene under **AI og behandling › Behandling** gælder komplais egen behandling; en forbindelse følger sine egne to kontakter.

1. Kopiér forbindelsens værdi fra siden Forbindelser.
2. Vis dens model med GET /v1/models. Listen har én post: den model eller router, forbindelsen angiver.

   ```bash
   curl "https://api.komplai.dk/v1/models?processing=connection:6d3f9a2e-1b4c-4e7d-8a5f-0c2b9e4d7a31" \
     -H "Authorization: Bearer $KOMPLAI_TOKEN"
   ```

   ```json
   {
     "object": "list",
     "data": [
       {
         "id": "openrouter/free",
         "object": "model",
         "owned_by": "openrouter",
         "name": "OpenRouter, gratis modeller",
         "processing": "connection:6d3f9a2e-1b4c-4e7d-8a5f-0c2b9e4d7a31"
       }
     ]
   }
   ```

3. Send POST /v1/chat/completions med værdien i `processing`. Udelad `model`, eller send den model, forbindelsen angiver.

   ```bash
   curl https://api.komplai.dk/v1/chat/completions \
     -H "Authorization: Bearer $KOMPLAI_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"processing": "connection:6d3f9a2e-1b4c-4e7d-8a5f-0c2b9e4d7a31", "messages": [{"role": "user", "content": "Hvor lang tid har jeg til at klage over en afgørelse om boligstøtte?"}], "max_tokens": 256}'
   ```

4. Læs svaret. `model` er den model, der svarede, og som en router vælger for hver anmodning; `requested_model` er den model eller router, forbindelsen angiver, og `processing` gentager forbindelsen.

   ```json
   {
     "object": "chat.completion",
     "model": "meta-llama/llama-3.3-70b-instruct:free",
     "requested_model": "openrouter/free",
     "processing": "connection:6d3f9a2e-1b4c-4e7d-8a5f-0c2b9e4d7a31",
     "choices": [
       {
         "index": 0,
         "message": {
           "role": "assistant",
           "content": "Du har normalt 4 uger til at klage, regnet fra den dag du fik afgørelsen. Fristen står i afgørelsens klagevejledning."
         },
         "finish_reason": "stop"
       }
     ]
   }
   ```

Et kald på en forbindelse følger de samme regler som andre Chat-kald: kun tekst, hele svaret på én gang, højst 32 beskeder og 80.000 UTF-16-tegn, og modellen har 120 sekunder til at svare. komplai gemmer kaldets metadata og den model, der svarede, ikke beskederne. Desuden gælder:

- `reasoning_effort` kan kun være `none`; andre værdier afvises med [reasoning_not_enabled](https://developers.komplai.dk/da/errors/reasoning_not_enabled).
- En forbindelse til Anthropic tager en `temperature` på højst 1, kun tekst som `response_format` og mindst én besked, der ikke er en systembesked. Alt andet afvises med [invalid_input](https://developers.komplai.dk/da/errors/invalid_input).
- En anden `model` end forbindelsens egen afvises med [model_not_enabled](https://developers.komplai.dk/da/errors/model_not_enabled).

API'et flytter aldrig et kald fra en forbindelse til komplais behandling eller til en anden forbindelse, heller ikke når forbindelsen fejler. [Chat-referencen](https://developers.komplai.dk/da/reference/chat#createChatCompletion) har alle felter. Et kald på en forbindelse kan også stoppe med disse fejl:

| Kode | Status | Hvad der skete |
| --- | --- | --- |
| [connection_not_found](https://developers.komplai.dk/da/errors/connection_not_found) | 404 | Ingen forbindelse med dette id er tilgængelig for dig via API. |
| [processing_choice_not_allowed](https://developers.komplai.dk/da/errors/processing_choice_not_allowed) | 403 | Forbindelsen er ikke gjort tilgængelig via API. |
| [connection_model_unavailable](https://developers.komplai.dk/da/errors/connection_model_unavailable) | 409 | Udbyderen kender ikke den model, forbindelsen angiver. |
| [connection_rate_limited](https://developers.komplai.dk/da/errors/connection_rate_limited) | 429 | Udbyderen afviser kald lige nu. Vent det antal sekunder, `Retry-After` angiver. |
| [connection_unauthorized](https://developers.komplai.dk/da/errors/connection_unauthorized) | 502 | Udbyderen afviste forbindelsens nøgle. |
| [connection_payment_required](https://developers.komplai.dk/da/errors/connection_payment_required) | 502 | Udbyderen kræver betaling på organisationens konto. |
| [connection_request_refused](https://developers.komplai.dk/da/errors/connection_request_refused) | 502 | Udbyderen afviste anmodningen, fx en værdi, den ikke tager imod. |
| [connection_failed](https://developers.komplai.dk/da/errors/connection_failed) | 502 | Udbyderen kunne ikke nås eller fejlede. |
| [connection_unavailable](https://developers.komplai.dk/da/errors/connection_unavailable) | 503 | Forbindelsens nøgle kan ikke læses, eller adressen afvises. |
| [timeout](https://developers.komplai.dk/da/errors/timeout) | 504 | Modellen svarede ikke inden for 120 sekunder. |

---

https://developers.komplai.dk/da/guides/ai-connections
