AI-integrationer
fremforge har tre AI-funktioner på serversiden — AI-gennemgang af pull requests, forklaringer på Renovates afhængighedsopdateringer og en AI-gateway, som kunden selv kan kalde, på POST /_app/api/v1/orgs/<slug>/ai/complete. Alle tre kører efter BYOK-modellen (bring your own key): kunden vælger en AI-leverandør, indsætter en API-nøgle fra leverandøren i administrationsbrugerfladen, og fremforge videresender kaldene med revisionsspor og registrering af forbrug. Leverandøren er kundens egen databehandler under kundens egen aftale, ikke en underdatabehandler for fremverk (se trust-siden og databehandleraftalens bilag B §B.8).
Hvor kaldene går hen. Hvert kald til din udbyder forlader kun fremforge gennem en begrænset udgående proxy, og kun til udbyderens vært, som den blev kontrolleret og fastlåst, da du gemte udbyderen: en https-adresse med et DNS-navn, aldrig en IP-adresse eller en privat, intern eller link-local adresse. Viderestillinger følges ikke. Et kald til en anden vært afvises, slår funktionen fra og registreres i revisionsloggen (ai.feature.auto_disabled). Proxyen ser kun værten og porten for den krypterede forbindelse, aldrig prompten eller svaret.
Denne side er referencen for den konfiguration til dem, der administrerer organisationen. For AI-værktøjerne på udviklersiden (Claude Code, Cursor, Continue og JetBrains AI, der taler direkte med fremforge med et PAT) se AI i din IDE — et andet publikum, en anden flade og en anden historie om suverænitet.
Hvad du konfigurerer
Alt nedenfor ligger på /<org>/_admin/ai-integrations.
Udbydere
En “udbyder” er én konto hos en AI-leverandør. Kunden tilføjer så mange, som den vil (typisk: én til produktion og én til staging med en billigere model). Hver række indeholder:
- Label — et læsbart navn (f.eks.
anthropic-prod). Den stabile identitet, der bruges i administrationsbrugerfladen og i tilfredshedsscorer. - Vendor + Adapter — leverandørens identitet (
anthropic/openai/azure-openai/mistral/vertex-gemini/custom) bestemmer, hvilken adapter der håndterer kaldet (openai-compatible/anthropic/vertex-gemini). - Base URL + Default model — leverandørens endpoint og modelidentifikator.
- API key — krypteret i hvile med AES-256-GCM med T Cloud Public DEW KMS som rod og en AAD-binding pr. række. Klarteksten hentes kun frem i det øjeblik, der kaldes til leverandøren.
- Indbygget test — når du gemmer, kalder fremforge leverandørens endpoint til listen over modeller (eller tilsvarende) med nøglen. Et rødt mærke på rækken betyder, at nøglen ikke kunne valideres. Mærket bliver også rødt, når leverandøren afviser nøglen (HTTP 401 eller 403) ved et rigtigt kald, for eksempel efter at nøglen er tilbagekaldt hos leverandøren, så rækken aldrig bliver ved med at vise en gammel vellykket test. Gemmer du udbyderen igen, testes nøglen igen, og mærket ryddes.
Hvem der driver hver leverandør
Hver leverandørflise og hver udbyder, du har tilføjet, viser, hvem der driver den. API’et rapporterer det samme som operator_jurisdiction på hvert udbyderobjekt.
| Leverandør | Drives |
|---|---|
| Mistral | I EU |
| Scaleway Generative APIs | I EU |
| Azure OpenAI | Af et amerikansk selskab, også når ressourcen ligger i en EU-region |
| Anthropic | Af et amerikansk selskab |
| OpenAI | Af et amerikansk selskab |
| Google Vertex Gemini | Af et amerikansk selskab |
| Custom | Afhænger af endpointet: den URL, du angiver, afgør det |
En leverandør, der drives fra USA, drives af et amerikansk selskab, så amerikansk lovgivning kan kræve adgang til de data, den behandler, også når dataene er lagret i EU. Se databehandleraftalen §11.3 og bilag B §B.8.
Standarder for funktioner
Fem funktioner, én række hver i tabellen ai_feature_defaults:
| Funktion | Hvad den gør |
|---|---|
| pr-review | Skriver en struktureret AI-gennemgang som kommentar på hver ny pull request. Commit-status pending → success / warning. |
| renovate-explanation | Tilføjer forklaringer om CVE’er og breaking changes til pull requests med afhængighedsopdateringer, som Renovate har oprettet. |
| workflow-callable | Dirigerer det endpoint, kunden selv kan kalde, POST /_app/api/v1/orgs/<slug>/ai/complete. |
| autofix | Foreslår en pull request med en rettelse til et udvalgt SAST-fund, når en person klikker på AI-rettelse (AI-rettelse). Kræver også, at AI-rettelser er slået til under SAST-indstillingerne, hvor de som standard er slået fra. |
| active-work-semantic | Semantisk matchning til Active work: spørger din udbyder, om to stykker igangværende arbejde i samme repository er det samme arbejde. Sender titler, begyndelsen af beskrivelser, branch-navne og mapper på øverste niveau, aldrig kode; et felt, der indeholder loginoplysninger, udelades. Kræver, at Active work er slået til, og en udbyder med en fastlåst vært; slås kun til i konsollen og er slået fra, indtil en organisationsejer slår den til. |
Alle funktioner er slået fra, indtil du slår dem til. At tilføje en udbyder slår intet til: en funktion kører kun, hvor dens række siger enabled=true (sæt flueben i Slået til og gem, eller PUT /_app/api/v1/orgs/<slug>/ai/feature-defaults/<feature>). Konsollen viser hver funktion som Til eller Fra. En række kan også vælge udbyderen og en anden model; er der ikke valgt en udbyder, bruger en funktion, der er slået til, din nyeste aktive udbyder.
Indtil 2026-10-19 brugte en funktion uden gemt standard din nyeste udbyder, så når du tilføjede en udbyder, blev alle funktioner slået til, også AI-gennemgang af pull requests. Sådan er det ikke længere.
Tilsidesættelser pr. repository
Kunden kan tilsidesætte funktionens standard på et enkelt repository — f.eks. slå AI-gennemgang fra på et følsomt repository, slå den til for kun ét repository eller fastlåse et reguleret repository til en anden model.
Om en funktion kører for et repository: rækken i ai_repo_overrides for (tenant, repo_full_name, feature), hvis der er en, ellers rækken i ai_feature_defaults for (tenant, feature), ellers fra. Intet af det nedenstående bliver spurgt for en funktion, der er slået fra, heller ikke en udbydertilsidesættelse i det enkelte kald.
Hvilken udbyder den bruger, i AiGateway.resolveProvider():
provider_override/model_overridei det enkelte kald (workflowets request body)- Udbyderen i tilsidesættelsen for repositoriet
- Udbyderen i funktionens standard
- Reserve: tenantens nyeste aktive udbyder
Workflows, der bruger AI
Hver dag gennemgår cronjobbet /jobs/sha-pin-scan alle workflow-YAML-filer under .forgejo/workflows/, .gitea/workflows/ og .github/workflows/ og finder:
- En bloknotation
# fremforge-ai:, der angiverprovider:+model: - Ethvert direkte kald til
/_app/api/v1/orgs/<slug>/ai/complete
Begge signaler fodrer administrationsafsnittet “Workflows using AI”. Brug det til at forudsige forbrug, revidere suverænitet og planlægge rotation af nøgler.
Notationens format:
# fremforge-ai:
# provider: anthropic-prod
# model: claude-opus-4-7
name: ai-summary
on:
pull_request:
types: [opened]
jobs:
summarize:
runs-on: fremforge
steps:
- name: Call AI
run: |
curl -sf https://frem.sh/_app/api/v1/orgs/<org>/ai/complete \
-H "authorization: Bearer $FREMFORGE_TOKEN" \
-H "content-type: application/json" \
-d '{"messages":[{"role":"user","content":"…"}]}'Opsummering af forbrug
Månedlig sammentælling af ai_usage_events — anmodninger, tokens ind og tokens ud pr. tenant. Anslåede euro er i øjeblikket null; opslag af priser pr. leverandør er planlagt. Leverandørens faktura er den autoritative kilde til omkostningen — fremforges opsummering er til forudsigelser og til at forme omkostningen pr. (udbyder, model).
Feedback på gennemgange
Tilfredshedsscore pr. (udbyder, model) ud fra 👍 / 👎-reaktioner på kommentarer fra AI-gennemgang af pull requests. Hentes dagligt fra Forgejo i 14 dage, efter at hver kommentar er skrevet. Under 70 % vises med rødt — overvej at skifte model eller omskrive prompten.
Bløde fejl i brugerfladen
AI-funktioner blokerer aldrig en pull request. Hver fejltype ender i en blød fejl:
| Årsag | Status | Brugerflade |
|---|---|---|
no_provider | 503 | (ingenting — funktionen er slået fra for denne tenant) |
invalid_key | 502 | Advarsel i commit-status: “AI provider key invalid — re-add under AI integrations” |
rate_limited | 429 | Advarsel i commit-status: “AI review queued — retrying on next push” |
over_cap | 402 | Advarsel i commit-status: “AI quota exhausted this month” |
vendor_error | 502 | Advarsel i commit-status: “AI review unavailable; retry on next push” |
timeout | 504 | Advarsel i commit-status: “AI review timed out” |
En kundes CI- og merge-forløb påvirkes ikke af nogen AI-fejl — det eneste, der mangler, er den AI-genererede kommentar.
PAT-omfang
Det endpoint, kunden selv kan kalde, POST /_app/api/v1/orgs/<slug>/ai/complete, kræver et PAT med omfanget ai:invoke. Opret det på /-/settings/tokens; vælg en maksimal levetid på 90 dage; send det som Authorization: Bearer ffp_…. Forbruget af tokens lægges på den konfigurerede udbyders regning fra leverandøren, ikke på fremforges gebyrer.
Fase 2 — nøglefærdig AIFS
Et nøglefærdigt planniveau, hvor fremverk har en AIFS-Germany-konto og fakturerer tokens pr. bruger, er på køreplanen (6–18 måneder — afhænger af, at AIFS-kataloget får en kodetunet model, der er god nok til gennemgang af pull requests). Når det sker, forbliver BYOK-vejen tilgængelig; gatewayens resolveProvider() spørger først et flag for den nøglefærdige plan.
Slå AI fra overalt
Har du af en eller anden grund brug for at slå AI fra for hele tenanten: sæt hver række i ai_feature_defaults til enabled=false (en funktion uden række er allerede slået fra), og fjern alle tilsidesættelser pr. repository, der slår en funktion til. Kontakt support for at slå AI fra på hele platformen for din tenant.
Relateret
- Trust-siden — dataforløbet for AI-integrationer — artiklen om suverænitet til kunderne
- Databehandleraftalens bilag B §B.8 — det kontraktlige grundlag for, at BYOK ikke er en underdatabehandler
- Kvikstart pr. værktøj i IDE’en — AI-værktøjer på udviklersiden
- OpenAPI-specifikation —
POST /orgs/{org}/ai/completeer dokumenteret undertags: [AI]