ms-ai-architect/skills/ms-ai-engineering/references/agent-orchestration/semantic-kernel-agents-implementation.md
Kjell Tore Guttormsen 3a73eeafdc refactor(ms-ai-architect): R13 del 1 — nøytraliser Cosmo-personaen i ref-korpusets headinger, etter å ha rettet en gate som var målt usann to ganger
Ordre 20260912T193441Z-7358817909. Steg 1 var ikke transformen, men å rette
roadmapens R13-gate og få den ratifisert. Gaten `grep -rl "Cosmo"
skills/*/references -> 0` var usann på to uavhengige måter:

1. Ordren fanget den første: 451 av forekomstene er Azure Cosmos DB, ekte
   produktinnhold. Diskriminatoren er ikke bokstaven «s» — `Cosmos <norsk
   substantiv>` er genitiv av personaen (`### Cosmos tonalitet`), mens
   `Cosmos DB`/`CosmosClient`/`cosmos_ru` er produkt.
2. Denne økten fant den andre: 132 persona-forekomster ligger i prosa,
   tabeller, dialog-replikker og proveniens-linjer. Heading-nøytralisering
   kan ikke nå dem, så «0 persona» er uoppnåelig også under den ratifiserte
   formen. Operatøren ratifiserte alternativ A: gaten speiler formen, og de
   132 bokføres til R13b/R14.

Tre korreksjoner av premisser som sto i ordren og STATE:
  «ca 320 produkt»   -> 451 (case-sensitivt nett manglet 327 lowercase
                        TOC-ankre + 99 identifikatorer; sann nevner 1 638)
  «169 headinger»    -> 401. 169 var `^## For Cosmo`-prefikset (168) og var
                        internt inkonsistent med sin egen topp-variant (204)
  «417 matcher ingen
   populasjon»       -> 417 er cosmo-headinger utenfor kodefences; briefens
                        nevner var reell hele tiden

Fence-bevissthet er målt skadelig, ikke nødvendig: begge toggle-regler er
gale på dette korpuset (naiv toggle skjuler en ekte heading i
chain-of-thought-prompting.md, CommonMark-regelen ubalanserer
service-level-documentation-dr.md). Fence-agnostisk deteksjon finner 401
heading-linjer i nøyaktig de samme 40 variantene som fence-bevisst finner
400 i — ingen kodeblokk-linje er byte-identisk til en persona-heading. Derfor
nøkles transformen på 40 enumererte heading-tekster og ignorerer fences. En
ukjent variant kaster; en slug-kollisjon kaster. Ingenting auto-fikses.

TOC-en regenereres ikke, den rettes kirurgisk: alle 327 persona-lenker hadde
lenketekst lik én av de 40 heading-tekstene og anker lik slugify av den
(327/327, 0 avvik), så heading og TOC-entry skrives i samme operasjon og
ingen mellomtilstand etterlater en død lenke.

Ratifisert målform: `For Cosmo`, `For Cosmo Skyberg` og `For arkitekten
(Cosmo)` konvergerer på `For arkitekten`. To filer kolliderte og er adjudisert
ved å lese dem, ikke ved regel.

Verifisering (alle 7 kriterier fra ordren):
  G1 persona på heading-linjer   401 -> 0
  G2 døde fragmentlenker         1 -> 1 (pre-eksisterende, unntatt)
  G3 produkt-forekomster         451 -> 451; `Cosmos DB|Azure Cosmos` 308 = 308
  de 3 kun-produkt-filene        byte-identiske
  nettet validert begge veier    injisert persona feller G1; genitiv feller G1;
                                 produkt-heading og de 3 filene passerer
  hele diffen                    802 heading-linjer + 654 TOC-linjer, ANNET = 0
  linjeantall                    728 lagt til = 728 slettet
  suite                          1120/1120 (1097 + 23 nye)
  validate-plugin                250 PASS / 0 FAIL
  stikkprøve                     10 filer, alle 5 skills, inkl. de 3 mest
                                 produkt-tunge (26/20/19) — kun heading+TOC

Utenfor scope, urørt: de 4 SKILL.md, de 23 commands, CLAUDE.md, README.md,
NOTICE.md, docs/ (alt R14).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 22:12:28 +02:00

504 lines
24 KiB
Markdown

# Semantic Kernel and Microsoft Agent Framework - Implementation Patterns
**Last updated:** 2026-06-18
**Status:** GA — Microsoft Agent Framework 1.0 (3. apr 2026), orchestration patterns GA
**Category:** Agent Orchestration & Automation
**Type:** reference
**Source:** https://learn.microsoft.com/agent-framework/overview/agent-framework-overview
> **Produksjonsklart rammeverk (juni 2026):** Microsoft Agent Framework (MAF) 1.0 nådde GA 3. april 2026 og er det produksjonsklare, open-source rammeverket (.NET + Python) som Semantic Kernel og AutoGen har konvergert inn i. SK og AutoGen er nå i vedlikeholds-/migrasjonsmodus (migration guides finnes); ny utvikling bør bygge på MAF. De fem orkestreringsmønstrene — Sequential, Concurrent, Handoff, Group Chat og Magentic — er **stabile (GA)** i MAF 1.0 med streaming, checkpointing, human-in-the-loop og pause/resume.
---
## Innhold
- [Introduksjon](#introduksjon)
- [Kjernekomponenter](#kjernekomponenter)
- [Arkitekturmønstre](#arkitekturmønstre)
- [Beslutningsveiledning](#beslutningsveiledning)
- [Integrasjon med Microsoft-stacken](#integrasjon-med-microsoft-stacken)
- [Offentlig sektor (Norge)](#offentlig-sektor-norge)
- [Kostnad og Lisensiering](#kostnad-og-lisensiering)
- [For arkitekten](#for-arkitekten)
- [Kilder og verifisering](#kilder-og-verifisering)
## Introduksjon
Semantic Kernel Agent Framework og Microsoft Agent Framework representerer neste generasjon av agentic AI-utvikling på Microsoft-stacken. Semantic Kernel Agent Framework bygger på det etablerte Semantic Kernel-økosystemet og utvider det med multi-agent orchestration patterns, mens Microsoft Agent Framework forener kapabilitetene fra Semantic Kernel og AutoGen i ett unified framework.
Begge frameworks deler samme grunnleggende filosofi: agenter er autonome enheter som kan resonnere, kalle funksjoner, samarbeide med andre agenter, og tilpasse seg dynamisk til komplekse scenarier. De bruker function calling som primær planleggingsmekanisme, der moderne LLM-modeller iterativt velger og utfører funksjoner for å løse oppgaver.
**Semantic Kernel Agent Framework** gir fem hovedagent-typer (ChatCompletionAgent, OpenAIAssistantAgent, AzureAIAgent, OpenAIResponsesAgent, CopilotStudioAgent) og fem orchestration patterns (Concurrent, Sequential, Handoff, Group Chat, Magentic). **Microsoft Agent Framework** bygger videre på dette og legger til enterprise-grade features som OpenTelemetry observability, Microsoft Entra-integrasjon, og standarder som Agent-to-Agent (A2A) protocol og Model Context Protocol (MCP).
Nøkkelforskjellen: Semantic Kernel bruker `Kernel`-objektet som sentral orkestreringsenhet, mens Microsoft Agent Framework bruker `IChatClient` wrapped av `ChatClientAgent` for mer fleksibel provider-integrasjon.
## Kjernekomponenter
### Agent-typer i Semantic Kernel
| Agent Type | Use Case | State Management | Function Calling |
|------------|----------|------------------|------------------|
| **ChatCompletionAgent** | Generell-purpose conversational agents | Lokal (ChatHistory) | Må aktiveres eksplisitt (`FunctionChoiceBehavior.Auto()`) |
| **OpenAIAssistantAgent** | OpenAI Assistants API-baserte agenter | Serverside (OpenAI) | Alltid aktivert |
| **AzureAIAgent** | Azure AI Agent Service-baserte agenter | Serverside (Azure) | Matcher AzureAIAgentThread |
| **OpenAIResponsesAgent** | Structured responses via Responses API | Lokal/Serverside | Konfigurerbar |
| **CopilotStudioAgent** | Copilot Studio agent-integrasjon | Copilot Studio | Via Copilot Studio |
### Plugins og Function Calling
Plugins er grunnlaget for agent-kapabiliteter. De defineres med `[KernelFunction]`-attributtet og registreres på Kernel-objektet:
```csharp
public class OrderPlugin {
[KernelFunction("check_order_status")]
[Description("Gets the current status of an order")]
public string CheckOrderStatus(string orderId)
=> $"Order {orderId} is shipped.";
}
// Registrer plugin på agenten
ChatCompletionAgent agent = new() {
Name = "OrderAgent",
Instructions = "You help customers with order inquiries.",
Kernel = kernel,
Arguments = new KernelArguments(
new OpenAIPromptExecutionSettings() {
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
})
};
agent.Kernel.Plugins.AddFromType<OrderPlugin>();
```
**Function calling loop:**
1. LLM får chat history + function schemas
2. LLM bestemmer om den skal svare eller kalle en funksjon
3. Hvis funksjonskall: parse funksjonsnavn og parametere
4. Utfør funksjonen
5. Returner resultatet til LLM
6. Repeter til oppgaven er løst eller brukeren trengs
Semantic Kernel automatiserer hele denne loopen når `FunctionChoiceBehavior.Auto()` er aktivert.
### Agent Thread og Conversation State
`AgentThread` abstraherer conversation state management:
- **Stateful agents** (AzureAIAgent, OpenAIAssistantAgent): State lagres i tjenesten, tilgang via ID
- **Stateless agents** (ChatCompletionAgent): Chat history sendes med hver invokasjon
- **Type matching**: Stateful agents krever matching thread-type (f.eks. `AzureAIAgent` + `AzureAIAgentThread`)
```python
# ChatCompletionAgent med lokal state
from semantic_kernel.agents import ChatCompletionAgent, ChatHistoryAgentThread
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
instructions="You are a helpful assistant.",
plugins=[MyPlugin()]
)
thread = ChatHistoryAgentThread() # Lokal state
async for message in agent.invoke(user_message, thread):
print(message.content)
```
### Orchestration Patterns (Semantic Kernel)
| Pattern | Koordinering | Typisk bruk | Status |
|---------|-------------|-------------|--------|
| **Concurrent** | Broadcast til alle, samle resultater uavhengig | Parallell analyse, ensemble decision making | GA i MAF 1.0 (3. apr 2026) |
| **Sequential** | Pass resultat fra én agent til neste i sekvens | Pipelines, multi-stage processing | GA i MAF 1.0 (3. apr 2026) |
| **Handoff** | Dynamisk overføring basert på kontekst/regler | Escalation, expert handoff | GA i MAF 1.0 (3. apr 2026) |
| **Group Chat** | Alle agenter i gruppe, koordinert av manager | Collaborative problem solving, brainstorming | GA i MAF 1.0 (3. apr 2026) |
| **Magentic** | Planner-based manager koordinerer team | Komplekse, generalist multi-agent tasks | GA i MAF 1.0 (3. apr 2026) |
**Unified interface**: Alle orchestration patterns har samme konstruksjons- og invokasjonsmønster.
### Microsoft Agent Framework Additions
Microsoft Agent Framework bygger på Semantic Kernel og tilbyr:
- **Multi-agent orchestration**: Sequential, Concurrent, Group Chat, Handoff, Magentic
- **Cloud/provider flexibility**: Cloud-agnostisk (containers, on-prem, multi-cloud) og provider-agnostisk (OpenAI, Microsoft Foundry)
- **Enterprise features**: OpenTelemetry, Microsoft Entra, Responsible AI (prompt injection protection, task adherence monitoring)
- **Standards-based interoperability**: A2A protocol, Model Context Protocol (MCP)
**Hovedforskjell fra Semantic Kernel**: Bruker `IChatClient` (Microsoft.Extensions.AI) i stedet for `Kernel`-objektet.
```csharp
// Microsoft Agent Framework approach
var chatClient = new AzureOpenAIClient(endpoint, credential).AsChatClient(modelId);
var chatClientAgent = new ChatClientAgent(chatClient, name: "Assistant");
// Semantic Kernel approach
var kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey)
.Build();
var agent = new ChatCompletionAgent() { Kernel = kernel };
```
## Arkitekturmønstre
### 1. Single Agent med Function Calling
**Bruk når**: Oppgaven kan løses av én spesialisert agent med tilgang til plugins.
**Fordeler**:
- Enkel arkitektur
- Lav latency (ingen koordinering mellom agenter)
- Lett å debugge
**Ulemper**:
- Begrenset til én agents kompetanseområde
- Kan ikke håndtere komplekse, multi-domene oppgaver
```python
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
instructions="You are a GitHub repository assistant.",
plugins=[GitHubPlugin()],
function_choice_behavior=FunctionChoiceBehavior.Auto()
)
thread = ChatHistoryAgentThread()
async for message in agent.invoke("What issues are open?", thread):
print(message.content)
```
### 2. Sequential Orchestration
**Bruk når**: Oppgaven er en tydelig pipeline der hver agent bygger på resultatet fra forrige.
**Fordeler**:
- Forutsigbar flyt
- Lett å resonnere om
- God for step-by-step workflows
**Ulemper**:
- Blokkerende (agent 2 venter på agent 1)
- Kan ikke håndtere sideveier eller branching
**Eksempel**: Document processing pipeline (Extract → Analyze → Summarize → Translate)
### 3. Group Chat med Magentic Manager
**Bruk når**: Oppgaven er kompleks, åpen, og krever dynamisk samarbeid mellom spesialiserte agenter.
**Fordeler**:
- Fleksibel koordinering
- Manager kan re-plane basert på fremgang
- Human-in-the-loop plan review støttes
**Ulemper**:
- Høyere latency (planning overhead)
- Manager må være kraftig modell (gpt-4o, o1)
- Kan stall hvis agenter ikke gjør fremgang
```python
from agent_framework import MagenticBuilder
workflow = (
MagenticBuilder()
.participants([researcher_agent, coder_agent, reviewer_agent])
.with_manager(
agent=manager_agent,
max_round_count=10,
max_stall_count=3,
max_reset_count=2
)
.with_plan_review() # Enable HITL
.build()
)
async for event in workflow.run(task="Research and implement feature X"):
if event.type == "RequestInfoEvent":
# Handle plan review request
response = await get_human_approval(event.data)
await workflow.respond(response)
```
### 4. Handoff Pattern
**Bruk når**: Agenter er organisert i mesh-topologi og kan dynamisk overføre kontroll uten sentral manager.
**Fordeler**:
- Desentralisert (ingen single point of failure)
- Agenter bestemmer selv når de hander off
- God for escalation-scenarier
**Ulemper**:
- Kan være vanskeligere å resonnere om flyt
- Krever tydelige handoff-regler i agent instructions
**Eksempel**: Customer support (TriageAgent → OrderStatusAgent | ReturnAgent | RefundAgent)
## Beslutningsveiledning
### Velg Agent Type
```
Trenger du OpenAI Assistants API features (code interpreter, retrieval)?
├─ Ja → OpenAIAssistantAgent
└─ Nei → Trenger du Azure AI Agent Service (persistent threads, storage)?
├─ Ja → AzureAIAgent
└─ Nei → Trenger du Copilot Studio integrasjon?
├─ Ja → CopilotStudioAgent
└─ Nei → ChatCompletionAgent (mest fleksibel)
```
### Velg Orchestration Pattern
**Foer du velger multi-agent pattern:** Evaluer om scenariet faktisk krever det. Hvert kompleksitetsnivaa introduserer koordinerings-overhead, latens og kostnad. Bruk laveste kompleksitetsnivaa som tilfredsstillende loser problemet:
1. **Direct model call** — klassifisering, oppsummering, oversettelse (ingen agent)
2. **Single agent med tools** — varierte spoerringsmaal innen ett domene (ofte riktig default)
3. **Multi-agent orchestration** — cross-domain, ulike sikkerhetsbegrensninger, eller oppgaver som drar nytte av parallell spesialisering
| Scenario | Anbefalt Pattern | Hvorfor |
|----------|------------------|---------|
| Uavhengige subtasks | Concurrent | Parallell utførelse, redusert total tid |
| Lineær pipeline | Sequential | Forutsigbar, enkel flyt |
| Ukjent løsningsvei | Magentic | Dynamisk planning, iterativ refinement |
| Samarbeid uten planning | Group Chat | Enklere enn Magentic, fortsatt fleksibel |
| Triage/escalation | Handoff | Desentralisert, agent-drevet routing |
### Vanlige feil
| Feil | Konsekvens | Fix |
|------|------------|-----|
| Glemmer å aktivere `FunctionChoiceBehavior.Auto()` | Agent kaller aldri plugins | Legg til i `Arguments` ved agent-opprettelse |
| Bruker feil thread-type med stateful agent | Runtime exception | Match thread-type til agent-type (AzureAIAgent + AzureAIAgentThread) |
| For mange plugins på én agent | Token overflow, dårlig function selection | Split agenter etter domene, bruk orchestration |
| Mangler `[Description]` på functions | LLM velger feil funksjon | Alltid beskriv funksjonens formål tydelig |
| Bruker Group Chat når Sequential ville fungert | Unødvendig overhead | Vurder om oppgaven faktisk trenger dynamisk koordinering |
### Røde flagg
- **Agent kaller samme funksjon i loop**: Manglende progress tracking eller dårlig instruction prompt
- **Manager i Magentic staller umiddelbart**: Agenter mangler capabilities til oppgaven, eller task er for vag
- **Function calling returnerer "Unable to find function"**: Plugin ikke registrert på Kernel, eller function name mismatch
- **Chat history vokser uhåndterlig**: Mangler conversation summarization eller token management
## Integrasjon med Microsoft-stacken
### Microsoft Foundry
Semantic Kernel-agenter kan bruke Microsoft Foundry-deployments via Azure OpenAI connector:
```csharp
builder.AddAzureOpenAIChatCompletion(
deploymentName: "gpt-4o",
endpoint: "https://<resource>.openai.azure.com",
credentials: new AzureCliCredential()
);
```
AzureAIAgent integrerer direkte med Azure AI Agent Service for persistent threads og storage.
### Copilot Studio
CopilotStudioAgent lar Semantic Kernel-kode kommunisere med Copilot Studio-bygde agenter:
```csharp
var copilotAgent = new CopilotStudioAgent() {
Name = "CopilotStudioBot",
CopilotStudioEndpoint = "https://<endpoint>",
// State management via Copilot Studio
};
```
**Use case**: Wrap Copilot Studio-agent i større multi-agent workflow.
### Microsoft 365 Agents SDK
Microsoft 365 Agents SDK bruker Semantic Kernel eller Agent Framework som orchestrator:
- Agents SDK gir `TurnContext` og `TurnState` for channel-integrasjon (Teams, M365 Copilot)
- Semantic Kernel `Kernel`-objekt registreres som singleton i `Program.cs`
- Agent Framework bruker `IChatClient` wrapper i stedet
**Deployment**: Agents kan deployes til Microsoft Teams, M365 Copilot, eller egne channels.
### Power Platform
Semantic Kernel kan integreres med Power Platform via:
- **Power Automate**: Custom connectors som kaller Semantic Kernel-backends
- **AI Builder**: Prompt-baserte modeller kan wrappes som Semantic Kernel plugins
- **Dataverse**: Lagre agent conversation state i Dataverse
## Offentlig sektor (Norge)
### GDPR og Datasuverenitet
**Utfordring**: Chat history og function call logs inneholder ofte persondata.
**Mitigering**:
- **ChatCompletionAgent**: Chat history lagres lokalt — full kontroll over data residency
- **OpenAIAssistantAgent/AzureAIAgent**: State lagres i tjenesten — verifiser at Azure-region er EU (West Europe, North Europe)
- **Logging**: Bruk Azure Monitor i norsk region, aktiver data residency-garantier
- **PII filtering**: Implementer pre-processing hooks som anonymiserer/pseudonymiserer PII før sending til LLM
### AI Act Compliance
**Høyrisiko AI-systemer** (f.eks. helse, politi): Krever human oversight, logging, bias-testing.
**Semantic Kernel-tilpasninger**:
- **Human-in-the-loop**: Bruk `with_plan_review()` i Magentic for å kreve menneskelig godkjenning av planer
- **Audit logging**: Log alle function calls og agent decisions til tamper-proof storage (Azure Immutable Storage)
- **Bias testing**: Test agenter mot representative datasett fra norsk kontekst
### Forvaltningsloven og Utredningsinstruksen
**Krav**: Beslutninger må kunne etterprøves og begrunnes.
**Semantic Kernel-tilpasninger**:
- **Explainability**: Logg hele ChatHistory med function calls for full transparency
- **Decision tracing**: Bruk metadata-felter i `ChatMessageContent` for å tagge beslutningspunkter
- **Versjonering**: Versjonshåndter agent instructions og plugin code for å kunne gjenskape beslutninger
### Schrems II og Cloud Act
**Risiko**: Data lagret i US-baserte cloud-tjenester kan potensielt tilgjengeliggjøres for amerikanske myndigheter.
**Mitigering**:
- **Azure EU regions**: Bruk West Europe/North Europe for alle Semantic Kernel-relaterte ressurser
- **ChatCompletionAgent over stateful agents**: Reduserer avhengighet av US-baserte tjenester (OpenAI Assistants API)
- **On-prem LLMs**: For ekstremt sensitive data, kjør open-source modeller (Phi, Llama) on-prem med Semantic Kernel
## Kostnad og Lisensiering
### Prismodell
| Komponent | Kostnad | Enhet |
|-----------|---------|-------|
| **Azure OpenAI (GPT-4o)** | ~0.60 USD per 1M input tokens, ~1.80 USD per 1M output tokens | Token |
| **Azure AI Agent Service** | ~0.002 USD per agent session + storage | Session + GB |
| **OpenAI Assistants API** | ~0.03 USD per assistant/day + token costs | Day + Token |
| **Semantic Kernel SDK** | Gratis (open source) | - |
| **Microsoft Agent Framework** | Gratis (open source) | - |
### Kostnadsoptimalisering
**1. Token management**:
```csharp
// Bruk smaller context window når mulig
var settings = new OpenAIPromptExecutionSettings() {
MaxTokens = 500, // Begrens output
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(
autoInvoke: true,
options: new() {
AllowConcurrentInvocation = true // Parallel function calling → fewer turns
}
)
};
```
**2. Velg billigere modeller for enkle agenter**:
- **Manager i Magentic**: GPT-4o (trenger reasoning)
- **Specialist agents**: GPT-4o-mini (40% billigere, ofte tilstrekkelig)
**3. Caching** (Azure OpenAI):
- Bruk system message caching for agent instructions (redusert input token cost)
**4. Kernel cloning** (Semantic Kernel):
```csharp
// IKKE opprett ny Kernel for hver agent
Kernel agentKernel = sharedKernel.Clone(); // Rebruk AI service connections
```
**5. Batch processing**:
- Grupper uavhengige oppgaver og bruk Concurrent orchestration (fewer total LLM calls)
### Lisensiering
**Semantic Kernel**: MIT License (ingen restriksjon på kommersiell bruk)
**Microsoft Agent Framework**: MIT License
**Azure OpenAI**: Krever Azure-abonnement, ingen per-agent lisensavgift
**OpenAI API**: Per-token pricing, ingen agent-lisens
**Offentlig sektor**: Ingen spesielle lisensbegrensninger, men vurder data residency-krav ved valg av AI service (Azure OpenAI vs. OpenAI).
## For arkitekten
### Spørsmål å stille kunden
1. **Kompleksitetsnivå**: Er oppgaven løsbar av én agent, eller kreves samarbeid mellom spesialiserte agenter?
2. **State management**: Trenger dere persistent conversation state på tvers av sesjoner, eller er in-memory tilstrekkelig?
3. **Data residency**: Har dere krav om at chat history og agent state må lagres i EU?
4. **Human oversight**: Må menneskelige beslutningstagere godkjenne agent-planer før utførelse?
5. **Integrasjon**: Skal agentene integreres med eksisterende Microsoft 365-kanaler (Teams, Copilot)?
6. **Volum**: Hvor mange samtidige agentsesjoner forventer dere? (påvirker valg av Azure-tier og caching-strategi)
7. **Compliance**: Er dette et høyrisiko AI-system som faller under AI Act? Krever dere full audit trail?
8. **Existing plugins**: Har dere eksisterende Semantic Kernel plugins, eller starter dere fra scratch?
### Fallgruver
| Fallgruve | Konsekvens | Forebygging |
|-----------|------------|-------------|
| Over-engineering med orchestration | Høy latency, kostnad | Start med single agent, utvid til orchestration kun hvis nødvendig |
| Under-engineering agent instructions | Agent kaller feil funksjoner | Bruk templates, test med few-shot examples |
| Manglende error handling i plugins | Agent får "function failed" uten context | Wrap plugin methods med try-catch, returner descriptive error messages |
| Ikke versjonshåndtere agent definitions | Kan ikke gjenskape historiske beslutninger | Versjonshåndter instructions og plugin code i git |
| Blande stateful og stateless agents | Thread type mismatch, runtime errors | Cluster agenter etter state management pattern |
### Anbefalinger per modenhetsnivå
**Beginner** (aldri brukt Semantic Kernel):
- Start med **ChatCompletionAgent** og én enkel plugin
- Bruk **automatic function calling** (`FunctionChoiceBehavior.Auto()`)
- Unngå orchestration inntil du mestrer single-agent patterns
- Bruk OpenAI Playground for å teste function calling-prompts før implementasjon
**Intermediate** (erfaring med Semantic Kernel, nye på agenter):
- Eksperimenter med **Sequential orchestration** for pipelines
- Implementer **ChatHistoryAgentThread** for conversation management
- Utforsk **AzureAIAgent** for persistent threads
- Legg til OpenTelemetry for å spore function calls og agent decisions
**Advanced** (building production multi-agent systems):
- Bruk **Magentic orchestration** med human-in-the-loop for komplekse workflows
- Implementer **Microsoft Agent Framework** for enterprise features (Entra, observability)
- Bygg custom managers for spesialiserte orchestration patterns
- Integrer med Microsoft Foundry evaluations for kvalitetstesting av agenter
**Enterprise** (large-scale deployment):
- Vurder **Microsoft Agent Framework** over Semantic Kernel for standardized observability
- Implementer **multi-region deployment** for data residency compliance
- Bygg internal plugin marketplace for å dele reusable capabilities
- Etabler governance-prosess for agent instruction review (AI Act compliance)
## Kilder og verifisering
### Microsoft Learn-dokumentasjon (Verified via MCP)
1. [Semantic Kernel Agent Orchestration](https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/) — Confidence: Verified (2026-02)
2. [Agent Architecture Overview](https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-architecture) — Confidence: Verified (2026-02)
3. [Configuring Agents with Plugins](https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-functions) — Confidence: Verified (2026-02)
4. [Planning and Function Calling](https://learn.microsoft.com/en-us/semantic-kernel/concepts/planning) — Confidence: Verified (2026-02)
5. [Microsoft Agent Framework Overview](https://learn.microsoft.com/en-us/agent-framework/overview/agent-framework-overview) — Confidence: Verified (2026-02)
6. [Magentic Orchestration Pattern](https://learn.microsoft.com/en-us/agent-framework/user-guide/workflows/orchestrations/magentic) — Confidence: Verified (2026-02)
7. [Microsoft 365 Agents SDK - Semantic Kernel Integration](https://learn.microsoft.com/en-us/microsoft-365/agents-sdk/using-semantic-kernel-agent-framework) — Confidence: Verified (2026-02)
8. [AI Agent Orchestration Patterns (Azure Architecture)](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/ai-agent-design-patterns) — Confidence: Verified (oppdatert 2026-04: start med riktig kompleksitetsnivaa — direct model call, single agent med tools, multi-agent; guidance om naar multi-agent er hensiktsmessig)
### Kodeeksempler (Verified via MCP Code Search)
9. [ChatCompletionAgent with GitHub Plugin](https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/examples/example-chat-agent) — C# sample, Confidence: Verified (2026-02)
10. [Function Calling Loop Implementation](https://learn.microsoft.com/en-us/semantic-kernel/concepts/planning#using-automatic-function-calling) — Multi-language samples, Confidence: Verified (2026-02)
11. [Handoff Pattern Example](https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/handoff) — Customer support scenario, Confidence: Verified (2026-02)
### Konfidensgradering per seksjon
| Seksjon | Konfidensnivå | Kilde |
|---------|---------------|-------|
| Agent-typer | Verified | Microsoft Learn API reference |
| Orchestration patterns | Verified | Semantic Kernel docs + Agent Framework docs |
| Function calling loop | Verified | Planning docs + code samples |
| Microsoft Agent Framework additions | Verified | Agent Framework docs |
| Kostnadsmodell | Baseline | Azure pricing calculator (feb 2026) |
| Offentlig sektor compliance | Baseline | Generell AI Act/GDPR-kunnskap + Azure compliance docs |
| Integration patterns | Verified | Microsoft 365 Agents SDK docs |
**Totalt**: 11 unike kilder fra Microsoft Learn, 10/11 verifisert via MCP (feb 2026).