docs(ms-ai-architect): KB-refresh LOW 46/52 — migration-patterns: seksjon 6 korrigert (Agent Framework = egen SDK agent-framework, ikke SK-namespace) + Copilot Credits + api_version

This commit is contained in:
Kjell Tore Guttormsen 2026-06-24 13:36:32 +02:00
commit fc40e4e9e5

View file

@ -1,6 +1,6 @@
# Migration Patterns - Microsoft AI Platforms
**Last updated:** 2026-01 (research via microsoft-learn MCP)
**Last updated:** 2026-06-24 (research via microsoft-learn MCP)
---
@ -84,7 +84,7 @@ Denne referansen dekker vanlige migrasjonsveier mellom Microsoft AI-plattformer
```
**Viktige endringer:**
- `api_version` er påkrevd (bruk nyeste stable: `2024-10-21`)
- `api_version` er påkrevd (bruk en gjeldende stable api_version — verifiser nyeste; `2024-10-21` er et fungerende eksempel, og Foundry anbefaler v1 `/openai/v1/`-surface fremover)
- `model` parameter er **deployment name** i Azure, ikke OpenAI model name
- Endpoint URL endres til Azure-format
@ -314,9 +314,9 @@ Denne referansen dekker vanlige migrasjonsveier mellom Microsoft AI-plattformer
- Vurder parallell drift ved høy business-kritikalitet
#### Kostnadsforskjeller
- Copilot Studio: Per session pricing (billed sessions)
- PVA classic: Per session pricing (samme modell)
- Nytt: Generative AI-funksjoner har tilleggskostnad (per message)
- Copilot Studio: Copilot Credits-basert forbruk (felles valuta fra 1. sep 2025; erstattet messages/sessions). Eldre lisenser kjøpt før 1. jan 2024 kan fortsatt bruke billed sessions.
- Rater: classic answer 1 · generative answer 2 · agent action 5 · tenant graph grounding 10 Copilot Credits. M365 Copilot-lisensierte brukere belastes ikke (B2E fair use).
- PVA classic: samme Copilot Credits-modell etter konvertering
#### Vanlige fallgruver
- ❌ Ikke teste Power Automate flows grundig nok
@ -454,7 +454,7 @@ Denne referansen dekker vanlige migrasjonsveier mellom Microsoft AI-plattformer
#### Kostnadsforskjeller
- **Custom bot:** EC2/App Service ($100-500/mnd) + utviklertid
- **Copilot Studio:** Per session pricing ($200-1000/mnd avhengig av volum)
- **Copilot Studio:** Copilot Credits-basert forbruk, pay-as-you-go eller prepaid packs ($200-1000/mnd avhengig av volum)
- **ROI:** Typisk break-even etter 6-12 mnd grunnet redusert vedlikehold
---
@ -655,149 +655,112 @@ Denne referansen dekker vanlige migrasjonsveier mellom Microsoft AI-plattformer
### 6. Semantic Kernel → Microsoft Agent Framework
**Scenario:** Du bruker Semantic Kernel for AI orchestration og ønsker å oppgradere til Microsoft Agent Framework for multi-agent capabilities.
**Scenario:** Du bruker Semantic Kernel (eller AutoGen) for AI-orchestrering og ønsker å migrere til **Microsoft Agent Framework** for multi-agent capabilities.
> **Produktavklaring (viktig):** Microsoft Agent Framework er en **egen, ny multi-språk SDK** — pakke `agent-framework` (importeres som `agent_framework`) i Python, `Microsoft.Agents.AI` i .NET — *ikke* et namespace inni `semantic-kernel`. Den er den **direkte etterfølgeren til BÅDE Semantic Kernel og AutoGen**, bygget av de samme teamene: AutoGens enkle agent-abstraksjoner + Semantic Kernels enterprise-funksjoner (session-state, type-sikkerhet, middleware, telemetri) + nye graf-baserte `Workflow`-er for eksplisitt multi-agent-orkestrering. SK og AutoGen har hver sin offisielle migrasjonsguide (kilder nederst). Ikke forveksle dette med Semantic Kernels *interne* «Agent Framework RC»-migrasjon (som bare endret `ChatCompletionAgent`-konstruktøren innenfor `semantic-kernel`) — det er en SK-intern endring, ikke denne SDK-en.
#### Hvorfor migrere?
- Multi-agent orchestration (AutoGen integrering)
- Bedre plugin management
- Unified API for agents
- Alignment med Microsoft 365 Agents SDK
- Multi-agent orchestration via typede, graf-baserte workflows (samler SK + AutoGen i én orkestrator)
- Forenklet agent-oppretting — **ingen `Kernel`-objekt**; agenten bygges direkte på en `ChatClient`
- `@tool`-dekoratør (eller bare en Python-funksjon) i stedet for plugin + Kernel-boilerplate
- Alignment med Microsoft 365 Agents SDK (`ChatClientAgent`/`AIAgent`)
- Gradvis migrering mulig — eksisterende SK `KernelFunction` kan gjenbrukes (se kompatibilitet under)
#### Migrasjonssteg
1. **Forberedelse (Uke 1)**
**Installer Agent Framework:**
1. **Forberedelse (Uke 1) — installer Agent Framework:**
```bash
# Python
pip install semantic-kernel[agents] --upgrade
# Python — meta-pakken installerer core + vanlige providers
pip install agent-framework --pre
# ...eller bare de providerne du trenger (core trekkes inn automatisk):
pip install --pre agent-framework-foundry agent-framework-openai
# .NET
dotnet add package Microsoft.SemanticKernel.Agents
# .NET (provider-pakke; core = Microsoft.Agents.AI)
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
```
2. **Kodeendringer (Uke 1-2)**
2. **Kodeendringer (Uke 12) — agent-oppretting uten Kernel:**
**Før (Semantic Kernel):**
```python
from semantic_kernel import Kernel
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
kernel = Kernel()
kernel.add_service(
AzureChatCompletion(
deployment_name="gpt-4o",
endpoint=endpoint,
api_key=api_key
)
)
# Kjør funksjon
result = await kernel.invoke(
function_name="MyPlugin-MyFunction",
input="Hello world"
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="Support",
instructions="Answer in one sentence.",
)
```
**Etter (Agent Framework):**
```python
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.agents import AgentThread
from semantic_kernel import Kernel
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
# Opprett agent (erstatter kernel)
agent = ChatCompletionAgent(
service_id="agent-gpt4o",
kernel=kernel,
name="MyAgent",
instructions="You are a helpful assistant"
# Ingen Kernel — agenten bygges direkte på en ChatClient
agent = Agent(
client=FoundryChatClient(credential=AzureCliCredential()),
instructions="You are a helpful assistant",
)
# ...eller via convenience-metoden:
# agent = FoundryChatClient(credential=AzureCliCredential()).as_agent(instructions=...)
# Opprett thread (erstatter direkte invoke)
thread = AgentThread()
# Få respons
async for response in agent.invoke(
thread=thread,
messages=[{"role": "user", "content": "Hello world"}]
):
print(response.message.content)
thread = agent.get_new_thread()
response = await agent.run("Hello world", thread)
print(response.text)
```
**Nøkkelforskjeller:**
- `Kernel` object eksisterer fortsatt, men wrappes av `Agent`
- `invoke()` returnerer nå `AgentResponseItem` (ikke bare string)
- Threads må håndteres eksplisitt (bedre for multi-turn conversations)
- **Ingen `Kernel`-objekt** — agenten bygges på en `ChatClient` (Foundry/OpenAI/Azure OpenAI). Dette er hovedforskjellen fra SK.
- Invokering: `invoke`/`invoke_stream``run(..., stream=True/False)`; returtyper `AgentResponse` / `AgentResponseUpdate` (tekst i `response.text`).
- Thread opprettes av agenten: `thread = agent.get_new_thread()` (ikke manuell type-instansiering).
3. **Plugin migration (Uke 2)**
**Semantic Kernel plugins fungerer fortsatt!**
3. **Tool-registrering (Uke 2) — `@tool` i stedet for plugin + Kernel:**
```python
# Register plugin (samme som før)
kernel.add_plugin(
MyPlugin(),
plugin_name="MyPlugin"
)
from typing import Annotated
from agent_framework import tool
# Agent Framework bruker samme plugins automatisk
agent = ChatCompletionAgent(
kernel=kernel, # Plugins er tilgjengelige via kernel
name="PluginAgent"
)
@tool(name="weather_tool", description="Retrieves weather information")
def get_weather(location: Annotated[str, "The location to get the weather for."]) -> str:
"""Get the weather for a given location."""
return f"The weather in {location} is sunny."
agent = chat_client.as_agent(tools=get_weather)
```
En vanlig Python-funksjon fungerer også direkte (funksjonsnavn → tool-navn, docstring → beskrivelse). Ingen `Plugin`-klasse eller `Kernel` kreves.
4. **Multi-agent orchestration (Uke 2-4)**
**Kompatibilitet (gradvis migrering):** Eksisterende SK `KernelFunction`-instanser kan konverteres til Agent Framework-tools via `.as_agent_framework_tool` (krever `semantic-kernel` ≥ 1.38). Slik gjenbruker du eksisterende SK-plugins og VectorStore-integrasjoner (Azure AI Search, Qdrant, …) mens du migrerer modul for modul.
**Nytt i Agent Framework:**
```python
from semantic_kernel.agents import AgentGroupChat
4. **Multi-agent orchestration (Uke 24):**
Agent Framework erstatter SKs `AgentGroupChat` med typede, **graf-baserte `Workflow`-er** som ruter data langs edges og aktiverer executors når input er klart — eksplisitt kontroll over kjørestier, checkpointing og human-in-the-loop. For konkrete, kjørbare workflow-eksempler, bruk de offisielle samples (lenker nederst); ikke anta SK `AgentGroupChat`-API-et.
# Opprett flere agents
researcher = ChatCompletionAgent(
kernel=kernel,
name="Researcher",
instructions="You research topics thoroughly"
)
5. **Testing (Uke 34)**
- Valider at konverterte SK `KernelFunction`-tools fungerer
- Test single-agent `run`/streaming-kontrakten (`AgentResponse` / `AgentResponseUpdate`)
- Valider multi-agent workflows mot offisielle samples
- Test error handling og retry-logikk
writer = ChatCompletionAgent(
kernel=kernel,
name="Writer",
instructions="You write engaging content"
)
# Orchestrer agents
chat = AgentGroupChat(
agents=[researcher, writer],
selection_strategy=SequentialSelectionStrategy()
)
# Kjør multi-agent workflow
async for response in chat.invoke(
messages=[{"role": "user", "content": "Write article about AI"}]
):
print(f"{response.agent.name}: {response.message.content}")
```
5. **Testing (Uke 3-4)**
- Test at eksisterende Semantic Kernel plugins fungerer
- Valider multi-agent workflows
- Verifiser at thread state håndteres korrekt
- Test error handling og retry logic
#### Breaking changes (Python 1.26.1+)
- ❌ `agent.chat_history` er fjernet → Bruk `thread` i stedet
- ❌ Import paths endret: `semantic_kernel.agents.autogen``semantic_kernel.agents`
- ⚠️ `invoke()` returnerer `AgentResponseItem`, ikke `ChatMessageContent` direkte
#### Viktige endringer vs. Semantic Kernel
- **Pakke/imports:** `semantic-kernel``agent-framework`; `from semantic_kernel…``from agent_framework…`
- **Ingen `Kernel`:** ett `Agent`-grunntype for de fleste tjenester (+ `CopilotStudioAgent`, `A2AAgent`)
- **Invokering:** `invoke`/`invoke_stream``run(..., stream=…)`; `AgentResponse` / `AgentResponseUpdate`
- **Tools:** `@kernel_function` + `Plugin` + `Kernel``@tool` (eller bare en funksjon)
#### Rollback
- Minimal risiko (Semantic Kernel fortsatt tilgjengelig)
- Kan kjøre begge frameworks parallelt
- Pinne til eldre versjon ved behov: `semantic_kernel==1.25.0`
- Lav risiko — `semantic-kernel` kan kjøres parallelt under migreringen
- `.as_agent_framework_tool`-broen gir inkrementell migrering, modul for modul
#### Kostnadsforskjeller
- Ingen prising-forskjell (samme LLM-forbruk)
- Ingen prising-forskjell i seg selv (samme LLM-forbruk)
- Mulig økning ved multi-agent workflows (flere LLM-kall)
#### Kilder (offisiell migrasjon)
- [Microsoft Agent Framework — overview](https://learn.microsoft.com/agent-framework/overview/)
- [Migrasjon fra Semantic Kernel](https://learn.microsoft.com/agent-framework/migration-guide/from-semantic-kernel/)
- [Migrasjon fra AutoGen](https://learn.microsoft.com/agent-framework/migration-guide/from-autogen/)
---
### 7. Basic RAG → Azure AI Search Enhanced RAG