From fc40e4e9e5e4161951339dda288c6a7f20239671 Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Wed, 24 Jun 2026 13:36:32 +0200 Subject: [PATCH] =?UTF-8?q?docs(ms-ai-architect):=20KB-refresh=20LOW=2046/?= =?UTF-8?q?52=20=E2=80=94=20migration-patterns:=20seksjon=206=20korrigert?= =?UTF-8?q?=20(Agent=20Framework=20=3D=20egen=20SDK=20agent-framework,=20i?= =?UTF-8?q?kke=20SK-namespace)=20+=20Copilot=20Credits=20+=20api=5Fversion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../architecture/migration-patterns.md | 183 +++++++----------- 1 file changed, 73 insertions(+), 110 deletions(-) diff --git a/skills/ms-ai-advisor/references/architecture/migration-patterns.md b/skills/ms-ai-advisor/references/architecture/migration-patterns.md index 2bf9dec..e238c66 100644 --- a/skills/ms-ai-advisor/references/architecture/migration-patterns.md +++ b/skills/ms-ai-advisor/references/architecture/migration-patterns.md @@ -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 1–2) — 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 2–4):** + 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 3–4)** + - 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