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:
parent
a306993f62
commit
fc40e4e9e5
1 changed files with 74 additions and 111 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
# Migration Patterns - Microsoft AI Platforms
|
# 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:**
|
**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
|
- `model` parameter er **deployment name** i Azure, ikke OpenAI model name
|
||||||
- Endpoint URL endres til Azure-format
|
- 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
|
- Vurder parallell drift ved høy business-kritikalitet
|
||||||
|
|
||||||
#### Kostnadsforskjeller
|
#### Kostnadsforskjeller
|
||||||
- Copilot Studio: Per session pricing (billed sessions)
|
- 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.
|
||||||
- PVA classic: Per session pricing (samme modell)
|
- 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).
|
||||||
- Nytt: Generative AI-funksjoner har tilleggskostnad (per message)
|
- PVA classic: samme Copilot Credits-modell etter konvertering
|
||||||
|
|
||||||
#### Vanlige fallgruver
|
#### Vanlige fallgruver
|
||||||
- ❌ Ikke teste Power Automate flows grundig nok
|
- ❌ Ikke teste Power Automate flows grundig nok
|
||||||
|
|
@ -454,7 +454,7 @@ Denne referansen dekker vanlige migrasjonsveier mellom Microsoft AI-plattformer
|
||||||
|
|
||||||
#### Kostnadsforskjeller
|
#### Kostnadsforskjeller
|
||||||
- **Custom bot:** EC2/App Service ($100-500/mnd) + utviklertid
|
- **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
|
- **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
|
### 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?
|
#### Hvorfor migrere?
|
||||||
- Multi-agent orchestration (AutoGen integrering)
|
- Multi-agent orchestration via typede, graf-baserte workflows (samler SK + AutoGen i én orkestrator)
|
||||||
- Bedre plugin management
|
- Forenklet agent-oppretting — **ingen `Kernel`-objekt**; agenten bygges direkte på en `ChatClient`
|
||||||
- Unified API for agents
|
- `@tool`-dekoratør (eller bare en Python-funksjon) i stedet for plugin + Kernel-boilerplate
|
||||||
- Alignment med Microsoft 365 Agents SDK
|
- Alignment med Microsoft 365 Agents SDK (`ChatClientAgent`/`AIAgent`)
|
||||||
|
- Gradvis migrering mulig — eksisterende SK `KernelFunction` kan gjenbrukes (se kompatibilitet under)
|
||||||
|
|
||||||
#### Migrasjonssteg
|
#### Migrasjonssteg
|
||||||
|
|
||||||
1. **Forberedelse (Uke 1)**
|
1. **Forberedelse (Uke 1) — installer Agent Framework:**
|
||||||
|
|
||||||
**Installer Agent Framework:**
|
|
||||||
```bash
|
```bash
|
||||||
# Python
|
# Python — meta-pakken installerer core + vanlige providers
|
||||||
pip install semantic-kernel[agents] --upgrade
|
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
|
# .NET (provider-pakke; core = Microsoft.Agents.AI)
|
||||||
dotnet add package Microsoft.SemanticKernel.Agents
|
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):**
|
**Før (Semantic Kernel):**
|
||||||
```python
|
```python
|
||||||
from semantic_kernel import Kernel
|
from semantic_kernel.agents import ChatCompletionAgent
|
||||||
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
|
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
|
||||||
|
|
||||||
kernel = Kernel()
|
agent = ChatCompletionAgent(
|
||||||
kernel.add_service(
|
service=AzureChatCompletion(),
|
||||||
AzureChatCompletion(
|
name="Support",
|
||||||
deployment_name="gpt-4o",
|
instructions="Answer in one sentence.",
|
||||||
endpoint=endpoint,
|
|
||||||
api_key=api_key
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Kjør funksjon
|
|
||||||
result = await kernel.invoke(
|
|
||||||
function_name="MyPlugin-MyFunction",
|
|
||||||
input="Hello world"
|
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Etter (Agent Framework):**
|
**Etter (Agent Framework):**
|
||||||
```python
|
```python
|
||||||
from semantic_kernel.agents import ChatCompletionAgent
|
from agent_framework import Agent
|
||||||
from semantic_kernel.agents import AgentThread
|
from agent_framework.foundry import FoundryChatClient
|
||||||
from semantic_kernel import Kernel
|
from azure.identity import AzureCliCredential
|
||||||
|
|
||||||
# Opprett agent (erstatter kernel)
|
# Ingen Kernel — agenten bygges direkte på en ChatClient
|
||||||
agent = ChatCompletionAgent(
|
agent = Agent(
|
||||||
service_id="agent-gpt4o",
|
client=FoundryChatClient(credential=AzureCliCredential()),
|
||||||
kernel=kernel,
|
instructions="You are a helpful assistant",
|
||||||
name="MyAgent",
|
|
||||||
instructions="You are a helpful assistant"
|
|
||||||
)
|
)
|
||||||
|
# ...eller via convenience-metoden:
|
||||||
|
# agent = FoundryChatClient(credential=AzureCliCredential()).as_agent(instructions=...)
|
||||||
|
|
||||||
# Opprett thread (erstatter direkte invoke)
|
thread = agent.get_new_thread()
|
||||||
thread = AgentThread()
|
response = await agent.run("Hello world", thread)
|
||||||
|
print(response.text)
|
||||||
# Få respons
|
|
||||||
async for response in agent.invoke(
|
|
||||||
thread=thread,
|
|
||||||
messages=[{"role": "user", "content": "Hello world"}]
|
|
||||||
):
|
|
||||||
print(response.message.content)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Nøkkelforskjeller:**
|
**Nøkkelforskjeller:**
|
||||||
- `Kernel` object eksisterer fortsatt, men wrappes av `Agent`
|
- **Ingen `Kernel`-objekt** — agenten bygges på en `ChatClient` (Foundry/OpenAI/Azure OpenAI). Dette er hovedforskjellen fra SK.
|
||||||
- `invoke()` returnerer nå `AgentResponseItem` (ikke bare string)
|
- Invokering: `invoke`/`invoke_stream` → `run(..., stream=True/False)`; returtyper `AgentResponse` / `AgentResponseUpdate` (tekst i `response.text`).
|
||||||
- Threads må håndteres eksplisitt (bedre for multi-turn conversations)
|
- Thread opprettes av agenten: `thread = agent.get_new_thread()` (ikke manuell type-instansiering).
|
||||||
|
|
||||||
3. **Plugin migration (Uke 2)**
|
3. **Tool-registrering (Uke 2) — `@tool` i stedet for plugin + Kernel:**
|
||||||
|
|
||||||
**Semantic Kernel plugins fungerer fortsatt!**
|
|
||||||
```python
|
```python
|
||||||
# Register plugin (samme som før)
|
from typing import Annotated
|
||||||
kernel.add_plugin(
|
from agent_framework import tool
|
||||||
MyPlugin(),
|
|
||||||
plugin_name="MyPlugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Agent Framework bruker samme plugins automatisk
|
@tool(name="weather_tool", description="Retrieves weather information")
|
||||||
agent = ChatCompletionAgent(
|
def get_weather(location: Annotated[str, "The location to get the weather for."]) -> str:
|
||||||
kernel=kernel, # Plugins er tilgjengelige via kernel
|
"""Get the weather for a given location."""
|
||||||
name="PluginAgent"
|
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:**
|
4. **Multi-agent orchestration (Uke 2–4):**
|
||||||
```python
|
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.
|
||||||
from semantic_kernel.agents import AgentGroupChat
|
|
||||||
|
|
||||||
# Opprett flere agents
|
5. **Testing (Uke 3–4)**
|
||||||
researcher = ChatCompletionAgent(
|
- Valider at konverterte SK `KernelFunction`-tools fungerer
|
||||||
kernel=kernel,
|
- Test single-agent `run`/streaming-kontrakten (`AgentResponse` / `AgentResponseUpdate`)
|
||||||
name="Researcher",
|
- Valider multi-agent workflows mot offisielle samples
|
||||||
instructions="You research topics thoroughly"
|
- Test error handling og retry-logikk
|
||||||
)
|
|
||||||
|
|
||||||
writer = ChatCompletionAgent(
|
#### Viktige endringer vs. Semantic Kernel
|
||||||
kernel=kernel,
|
- **Pakke/imports:** `semantic-kernel` → `agent-framework`; `from semantic_kernel…` → `from agent_framework…`
|
||||||
name="Writer",
|
- **Ingen `Kernel`:** ett `Agent`-grunntype for de fleste tjenester (+ `CopilotStudioAgent`, `A2AAgent`)
|
||||||
instructions="You write engaging content"
|
- **Invokering:** `invoke`/`invoke_stream` → `run(..., stream=…)`; `AgentResponse` / `AgentResponseUpdate`
|
||||||
)
|
- **Tools:** `@kernel_function` + `Plugin` + `Kernel` → `@tool` (eller bare en funksjon)
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
#### Rollback
|
#### Rollback
|
||||||
- Minimal risiko (Semantic Kernel fortsatt tilgjengelig)
|
- Lav risiko — `semantic-kernel` kan kjøres parallelt under migreringen
|
||||||
- Kan kjøre begge frameworks parallelt
|
- `.as_agent_framework_tool`-broen gir inkrementell migrering, modul for modul
|
||||||
- Pinne til eldre versjon ved behov: `semantic_kernel==1.25.0`
|
|
||||||
|
|
||||||
#### Kostnadsforskjeller
|
#### 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)
|
- 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
|
### 7. Basic RAG → Azure AI Search Enhanced RAG
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue