ms-ai-architect/skills/ms-ai-engineering/references/agent-orchestration/copilot-agent-integration-patterns.md
Kjell Tore Guttormsen baa2d0220b feat(ultraplan-local): v1.6.0 — /ultraresearch-local deep research command
Add /ultraresearch-local for structured research combining local codebase
analysis with external knowledge via parallel agent swarms. Produces research
briefs with triangulation, confidence ratings, and source quality assessment.

New command: /ultraresearch-local with modes --quick, --local, --external, --fg.
New agents: research-orchestrator (opus), docs-researcher, community-researcher,
security-researcher, contrarian-researcher, gemini-bridge (all sonnet).
New template: research-brief-template.md.

Integration: --research flag in /ultraplan-local accepts pre-built research
briefs (up to 3), enriches the interview and exploration phases. Planning
orchestrator cross-references brief findings during synthesis.

Design principle: Context Engineering — right information to right agent at
right time. Research briefs are structured artifacts in the pipeline:
ultraresearch → brief → ultraplan --research → plan → ultraexecute.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 08:58:35 +02:00

14 KiB

Copilot Agent Integration Patterns

Last updated: 2026-02 Status: GA Category: Agent Orchestration & Automation


Introduksjon

Integrasjon av agenter med Microsoft Copilot-økosystemet -- Copilot Studio, Microsoft 365 Copilot og Copilot Chat -- gir agenter tilgang til millioner av brukere gjennom kjente grensesnitt i Teams, Outlook, Word og andre Microsoft 365-applikasjoner. Denne integrasjonen utnytter Copilots orkestrator, grunnmodeller og sikkerhetstjenester, slik at agenter arver enterprise-grade compliance, RAI-standarder og governance uten ekstra utviklingsarbeid.

Microsoft tilbyr to hovedveier for agent-integrasjon med Copilot: Declarative agents som konfigurerer Copilots innebygde orkestrator med tilpassede instruksjoner, kunnskapskilder og handlinger, og Custom engine agents som bruker egne modeller og orkestreringslogikk men eksponeres gjennom Copilots brukergrensesnitt. Valget mellom disse avhenger av behovet for kontroll, fleksibilitet og integrasjonsgrad med Microsoft 365-datakilder.

Copilot Studio fungerer som det primære utviklingsverktøyet for begge agenttyper, med low-code-verktøy for forretningsbrukere og pro-code-muligheter via Microsoft 365 Agents Toolkit for utviklere. Semantic Kernel gir programmatisk integrasjon gjennom CopilotStudioAgent-klassen som kobler Copilot Studio-agenter direkte inn i multi-agent orkestreringsflyter.

Kjernekomponenter

Komponent Formål Teknologi
Copilot Orchestrator Orkestrer agentforespørsler i M365 Microsoft 365 Copilot platform
Declarative Agent Manifest Konfigurer agentens kapabiliteter JSON manifest-filer
Copilot Studio Low-code agentutvikling Microsoft Copilot Studio
Agents Toolkit Pro-code agentutvikling VS Code / Visual Studio extension
CopilotStudioAgent (SK) Programmatisk integrasjon Semantic Kernel Agent Framework
Graph Connectors Tilgang til organisasjonsdata Microsoft Graph, Copilot connectors

Copilot Studio Agent Binding

Declarative Agent arkitektur

┌───────────────────────────────────────────────┐
│              Microsoft 365 Copilot             │
│  ┌─────────────────────────────────────────┐  │
│  │         Copilot Orchestrator            │  │
│  │  - Intent classification                │  │
│  │  - Grounding via Microsoft Graph        │  │
│  │  - RAI filters                          │  │
│  └───────────────┬─────────────────────────┘  │
│                  │                             │
│  ┌───────────────▼─────────────────────────┐  │
│  │       Declarative Agent Config          │  │
│  │  ┌──────────┬──────────┬──────────┐    │  │
│  │  │Custom    │Custom    │Custom    │    │  │
│  │  │Instruc-  │Knowledge │Actions   │    │  │
│  │  │tions     │(SP, Graph│(API      │    │  │
│  │  │          │Connectors│Plugins)  │    │  │
│  │  └──────────┴──────────┴──────────┘    │  │
│  └─────────────────────────────────────────┘  │
│                                               │
│  Surfacing: Teams, Outlook, Word, Excel       │
└───────────────────────────────────────────────┘

Agent manifest-fil

{
    "name": "SaksbehandlingAgent",
    "description": "Hjelper saksbehandlere med å finne relevant regelverk og tidligere vedtak",
    "instructions": "Du er en assistent for saksbehandlere i norsk offentlig sektor. Du hjelper med å finne relevant regelverk, tidligere vedtak og saksbehandlingsrutiner. Svar alltid med kildehenvisning. Følg Forvaltningslovens prinsipper.",
    "capabilities": [
        {
            "name": "WebSearch",
            "disabled": true
        },
        {
            "name": "CodeInterpreter",
            "disabled": true
        },
        {
            "name": "GraphicArt",
            "disabled": true
        }
    ],
    "conversation_starters": [
        {
            "title": "Finn regelverk",
            "text": "Hva sier regelverket om..."
        },
        {
            "title": "Tidligere vedtak",
            "text": "Finn lignende saker der..."
        }
    ],
    "actions": [
        {
            "id": "searchRegulations",
            "file": "regulations-api-plugin.json"
        }
    ]
}

Message Format Adaptation

Adaptive Cards for rike svar

{
    "type": "AdaptiveCard",
    "version": "1.5",
    "body": [
        {
            "type": "TextBlock",
            "text": "Saksbehandlingsresultat",
            "weight": "Bolder",
            "size": "Large"
        },
        {
            "type": "FactSet",
            "facts": [
                {"title": "Saksnummer", "value": "${saksnummer}"},
                {"title": "Status", "value": "${status}"},
                {"title": "Regelverk", "value": "${regelverk}"}
            ]
        },
        {
            "type": "ActionSet",
            "actions": [
                {
                    "type": "Action.OpenUrl",
                    "title": "Se fullstendig sak",
                    "url": "${sakUrl}"
                },
                {
                    "type": "Action.Submit",
                    "title": "Send til godkjenning",
                    "data": {"action": "approve", "sakId": "${sakId}"}
                }
            ]
        }
    ]
}

Copilot-kompatibelt responsformat

# Formater agentrespons for Copilot-kontekst
class CopilotResponseFormatter:
    def format_for_copilot(self, agent_response: dict) -> dict:
        """Tilpass agentrespons til Copilot-forventninger"""
        return {
            "text": agent_response["content"],
            "citations": [
                {
                    "title": ref["title"],
                    "url": ref["url"],
                    "content": ref["snippet"]
                }
                for ref in agent_response.get("references", [])
            ],
            "followup_prompts": agent_response.get("suggestions", []),
            "confidence": agent_response.get("confidence", None),
        }

Capability Exposure

API Plugin for Copilot

{
    "schema_version": "v2.1",
    "name_for_human": "Regelverk-søk",
    "description_for_human": "Søk i norske lover og forskrifter",
    "description_for_model": "Bruk denne pluginen når brukeren spør om norske lover, forskrifter eller regelverk. Pluginen søker i Lovdata og returnerer relevante paragrafer.",
    "auth": {
        "type": "oauth",
        "authorization_url": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize",
        "token_url": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token",
        "scopes": "api://regulations-api/.default"
    },
    "api": {
        "type": "openapi",
        "url": "https://api.regulations.no/openapi.json"
    },
    "functions": [
        {
            "name": "searchRegulations",
            "description": "Søk etter lover og forskrifter",
            "parameters": {
                "query": {
                    "type": "string",
                    "description": "Søketekst for lover og forskrifter"
                },
                "category": {
                    "type": "string",
                    "enum": ["lov", "forskrift", "rundskriv"],
                    "description": "Type regulering"
                }
            }
        }
    ]
}

User Context Passing

Semantic Kernel CopilotStudioAgent

from semantic_kernel.agents import CopilotStudioAgent

# Opprett CopilotStudioAgent for bruk i multi-agent orkestrering
agent = CopilotStudioAgent(
    name="CopilotStudioHRAgent",
    # Kobles til en eksisterende Copilot Studio-agent
    agent_id="<copilot-studio-agent-id>",
    endpoint="<copilot-studio-endpoint>",
    # Brukerkontekst passeres automatisk
)

# Bruk i Semantic Kernel orkestrering
thread = CopilotStudioAgentThread()
async for response in agent.invoke(
    messages=[ChatMessageContent(
        role=AuthorRole.User,
        content="Hva er min feriesaldo?"
    )],
    thread=thread
):
    print(response.content)

Brukerkontekst fra Microsoft Graph

// Berik agent-kontekst med brukerdata fra Graph
public class UserContextEnricher
{
    private readonly GraphServiceClient _graphClient;

    public async Task<UserContext> EnrichContext(string userId)
    {
        var user = await _graphClient.Users[userId]
            .GetAsync(config =>
            {
                config.QueryParameters.Select = new[]
                {
                    "displayName", "department", "jobTitle",
                    "officeLocation", "preferredLanguage"
                };
            });

        return new UserContext
        {
            Name = user.DisplayName,
            Department = user.Department,
            Role = user.JobTitle,
            Location = user.OfficeLocation,
            Language = user.PreferredLanguage ?? "nb-NO",
            // Brukes i agent-instruksjoner for personalisering
        };
    }
}

Session Management

Copilot conversation threading

# Håndter samtalehistorikk på tvers av Copilot-sesjoner
class CopilotSessionManager:
    def __init__(self, cosmos_client):
        self.container = cosmos_client.get_database_client("agents") \
            .get_container_client("sessions")

    async def get_or_create_session(
        self, user_id: str, agent_id: str
    ) -> dict:
        """Hent eller opprett sesjon for bruker-agent-par"""
        try:
            session = await self.container.read_item(
                item=f"{user_id}:{agent_id}",
                partition_key=user_id
            )
        except Exception:
            session = {
                "id": f"{user_id}:{agent_id}",
                "user_id": user_id,
                "agent_id": agent_id,
                "created_at": datetime.utcnow().isoformat(),
                "message_count": 0,
                "context_summary": "",
                "ttl": 86400  # 24 timer
            }
            await self.container.upsert_item(session)

        return session

    async def update_context_summary(
        self, session_id: str, user_id: str, new_summary: str
    ):
        """Oppdater komprimert kontekst for langvarige samtaler"""
        await self.container.patch_item(
            item=session_id,
            partition_key=user_id,
            patch_operations=[
                {"op": "replace", "path": "/context_summary",
                 "value": new_summary},
                {"op": "incr", "path": "/message_count", "value": 1}
            ]
        )

Declarative vs Custom Engine Integration

Aspekt Declarative Agent Custom Engine Agent
Hosting Copilots orkestrator Egne servere/Azure
Modell Copilots foundation model Valgfri modell
Kanaler Teams, Outlook, Word, Excel Teams, Copilot, eksterne kanaler
Utvikling Low-code (Copilot Studio) / Pro-code (Agents Toolkit) Full kode-kontroll
Compliance Arver M365 compliance Eget ansvar
Begrensninger Sekvensiell prosessering, begrenset orkestrering Ingen begrensninger
Governance M365 admin center Egne governance-verktøy

Norsk offentlig sektor

Aspekt Krav Implementering
Datalokalitet Schrems II Copilot EU Data Boundary + tenant-config
M365-lisens Copilot-lisens per bruker Kostnadsvurdering per avdeling
Innholdssikkerhet Ansvarlig AI Copilots innebygde RAI-filtre
Tilgangsstyring eInnsyn Admin center agent governance
Språk Norsk (bokmål/nynorsk) Custom instruksjoner på norsk

Deployment-mønster for offentlig sektor

1. Pilot:     5-10 brukere med sideloaded agent
2. Avdeling:  Publiser til organizational catalog
3. Etat:      Utvidet tilgang via M365 admin center
4. Tverrgående: Vurder commercial marketplace (for felles løsninger)

Beslutningsrammeverk

Scenario Anbefaling Begrunnelse
Enkel FAQ-bot med M365-data Declarative agent via Copilot Studio Raskest å implementere, arver M365
Avansert orkestrering, egne modeller Custom engine agent via Agents Toolkit Full kontroll over logikk og modeller
Multi-agent som inkluderer Copilot CopilotStudioAgent i Semantic Kernel Kombiner Copilot med egne agenter
ISV-løsning for flere kunder Commercial Marketplace-publisering Bred distribusjon, M365 integrasjon
Intern pilot med eksisterende data Declarative agent med SharePoint-kunnskap Utnytter eksisterende infrastruktur

For Cosmo

  • Declarative agents er startpunktet for de fleste M365-integrerte scenarier -- de arver Copilots orkestrator, compliance og distribusjon. Gå til custom engine kun ved reelle begrensninger.
  • CopilotStudioAgent i Semantic Kernel er broen mellom Copilot-verdenen og programmatisk agent-orkestrering -- bruk den for å inkludere Copilot Studio-agenter i multi-agent-systemer.
  • API plugins er nøkkelen til å gi agenter handlingsevne utover samtale -- definer OpenAPI-spesifikasjoner for alle virksomhetssystemer agenten skal interagere med.
  • User context fra Microsoft Graph forbedrer personalisering dramatisk -- avdeling, rolle og språkpreferanser gir agenten nødvendig kontekst uten at brukeren trenger å gjenta seg.
  • For norsk offentlig sektor: Utnytt Copilots EU Data Boundary for datalokalitet, konfigurer instruksjoner på norsk, og bruk M365 admin center for sentral governance av agentdistribusjon.