Ga naar inhoud

AI-platform: architectuur

Deze pagina is het globale ontwerp van het AI-platform. Het is het referentieontwerp uit de Terraform-modules: jouw deployment kan afwijken in namen, SKU's en in welke optionele onderdelen er zijn.

Lagen

De oplossing heeft drie lagen. Elke laag wordt boven op de vorige uitgerold.

flowchart TB
    subgraph shared["1. Shared platform (platform team)"]
        acct["Foundry account<br/>(AIServices)"]
        cae["Container Apps<br/>environment"]
        acr["Container Registry"]
        cosmos["Cosmos DB<br/>(agent threads)"]
        search["AI Search<br/>(vector store)"]
        kv["Key Vault"]
        law["Log Analytics"]
    end
    subgraph proj["2. Foundry project per workload"]
        p["Foundry project<br/>+ Agents capability host"]
        pid["Project identity"]
        st["Storage account"]
        ai["Application Insights"]
    end
    subgraph wl["3. Workload (workload team)"]
        app["Application / agent client"]
        wid["Workload identity"]
    end
    acct --> p
    p --> pid
    p --- st
    p --- ai
    p -. connection .-> cosmos
    p -. connection .-> search
    ai --> law
    app --> p
    app --> wid
    app --> cae
    cae --> acr
Laag Bevat Aangemaakt door
Gedeeld platform Foundry account, Container Apps environment, registry, Cosmos DB, AI Search, platformstorage, Key Vault, Log Analytics, netwerk Platformteam
Foundry project Project, project identity, storage account, Application Insights, connections, capability host, role assignments Platformteam, op aanvraag
Workload Applicatie, workload identity, role assignments voor die identity Workload team (met het platformteam waar rollen op gedeelde resources nodig zijn)

Foundry account

Eén account per platform. Uit de Terraform:

Instelling Waarde
Resourcetype Microsoft.CognitiveServices/accounts, kind AIServices, SKU S0
Project management Ingeschakeld (allowProjectManagement)
Lokale authenticatie (sleutel) Uitgeschakeld (disableLocalAuth), dus toegang loopt via Entra ID
Custom subdomain Gelijk aan de accountnaam
Identity Een user-assigned managed identity die met het account wordt aangemaakt
Network injection Scenario agent in een integratiesubnet dat je aanlevert (useMicrosoftManagedNetwork is false, dus je eigen subnet wordt gebruikt)
Private endpoint Alleen aangemaakt als een endpoint-subnet is aangeleverd, sub-resource account
Public network access Enabled in de module, zie Bekende problemen

De module wordt met de provider azapi uitgerold, omdat de resource niet volledig door azurerm wordt ondersteund. De module geeft als outputs het account-ID, de naam, het endpoint, een OpenAI-endpoint in de vorm https://<account>.openai.azure.com en de client- en principal-ID van de identity.

Foundry project

Elke workload krijgt een eigen project in het gedeelde account. De projectmodule maakt aan:

Resource Details
Resource group Eén per project, genoemd met de naming-module en het achtervoegsel -project
Project Microsoft.CognitiveServices/accounts/projects, met een user-assigned managed identity
Storage account Standard, LRS, minimaal TLS 1.2, public network access uitgeschakeld, met een private endpoint voor blob
Application Insights Workspace-based, gekoppeld aan de Log Analytics workspace die je aanlevert
Connections Storage, Cosmos DB en AI Search met Entra ID-authenticatie; Application Insights met zijn connection string
Capability host Kind Agents, met de connections voor de vector store, storage en threadopslag
Role assignments Voor de project identity en voor de owner-, contributor- en reader-groepen (Toegang en RBAC)

Alle connections hebben isSharedToAll op false: ze horen bij het project.

De module kan ook het Foundry account zelf aanmaken ("standalone mode", als er geen account_id wordt meegegeven). Met het gedeelde account van het platform gebruik je "decoupled mode", waarbij alleen het project wordt aangemaakt. Zie Platformmodules.

Waar agentdata staat

De capability host wijst de agentservice naar de gekoppelde stores:

Data Store
Threads, berichten, agentdefinities, runstatus Cosmos DB, database enterprise_memory, collections met de interne ID van het project als voorvoegsel (thread message store, system thread message store, agent entity store, agent definitions, run state)
Bestanden Het storage account van het project (blob)
Vectoren De Azure AI Search-service die aan het project is gekoppeld

Cosmos DB en AI Search worden gedeeld, dus de isolatie tussen projecten gebeurt met de collections per project en met role assignments, niet met aparte services.

Netwerk

  • Het Foundry account, en in de projectmodule ook het storage account van het project, zijn bereikbaar via private endpoints in het endpoint-subnet van de spoke.
  • Agents draaien met network injection in het integratiesubnet van de spoke.
  • De private DNS-zones die de projectmodule noemt voor volledige functionaliteit zijn: privatelink.vaultcore.azure.net, privatelink.openai.azure.com, privatelink.cognitiveservices.azure.com, privatelink.aiservices.azure.com, privatelink.blob.core.windows.net, privatelink.documents.azure.com en privatelink.search.windows.net.
  • De modules negeren wijzigingen aan de DNS zone group van hun private endpoints, dus de DNS-records worden buiten de module geregistreerd. Hoe dat op het platform gebeurt, staat in DNS-ontwerp.

Naamgeving

De projectmodule gebruikt de community naming-module met de projectnaam als achtervoegsel. De naam van het Foundry account wordt afgeleid van de naam van het cognitive account uit de naming-module, waarbij cog is vervangen door aif. De project identity heet id-<project>-foundry-project, en de lookup-module vertrouwt op die naam. Het patroon voor het achtervoegsel in de bron is <workload>-<environment>-<region> met afkortingen (prd, acc, tst, dev, np; weu, sec). De naamgeving van jouw platform kan afwijken: Naamgeving en tags.

Observability

  • Application Insights van het project schrijft naar de Log Analytics workspace van de spoke.
  • In standalone mode stelt de module ook diagnostic settings in op het account voor de logcategorieën Audit, RequestResponse en AzureOpenAIRequestUsage. De standalone-instelling wordt in decoupled mode niet aangemaakt. Diagnostic settings voor het gedeelde account maken geen deel uit van de accountmodule (zie Bekende problemen).