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
|
||||
|
||||
**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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue