Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato příručka vám pomůže upgradovat kód Pythonu na nový systém založený na Options TypedDict představený ve verzi 1.0.0b260114 rozhraní Microsoft Agent Framework. Jedná se o zásadní změnu , která poskytuje vylepšenou bezpečnost typů, automatické dokončování IDE a rozšiřitelnost modulu runtime.
Přehled změn
Tato verze představuje hlavní refaktoring toho, jak se možnosti předávají chatovacím klientům a chatovacím agentům.
Jak to fungovalo dříve
Dříve byly možnosti předány jako argumenty přímého klíčového slova pro metody, jako jsou get_response(), get_streaming_response(), run()a konstruktory agenta:
# Options were individual keyword arguments
response = await client.get_response(
"Hello!",
model_id="gpt-4",
temperature=0.7,
max_tokens=1000,
)
# For provider-specific options not in the base set, you used additional_properties
response = await client.get_response(
"Hello!",
model_id="gpt-4",
additional_properties={"reasoning_effort": "medium"},
)
Jak to teď funguje
Většina možností je nyní předávána jedním options parametrem jako typový slovník.
# Most options go in a single typed dict
response = await client.get_response(
"Hello!",
options={
"model_id": "gpt-4",
"temperature": 0.7,
"max_tokens": 1000,
"reasoning_effort": "medium", # Provider-specific options included directly
},
)
Poznámka: U agentů zůstávají parametry
instructionstoolsdostupné jako přímé argumenty klíčového slova naChatAgent.__init__()aclient.as_agent(). Proagent.run(), je k dispozici pouzetoolsjako argument klíčového slova:# Agent creation accepts both tools and instructions as keyword arguments agent = ChatAgent( chat_client=client, tools=[my_function], instructions="You are a helpful assistant.", default_options={"model_id": "gpt-4", "temperature": 0.7}, ) # agent.run() only accepts tools as a keyword argument response = await agent.run( "Hello!", tools=[another_function], # Can override tools per-run )
Klíčové změny
-
Konsolidovaný parametr možností: Většina argumentů klíčových slov (
model_idtemperatureatd.) se teď předává prostřednictvím jednohooptionsslovníku. -
Výjimka pro vytvoření agenta:
instructionsatoolszůstávají k dispozici jako přímé klíčové argumenty naChatAgent.__init__()acreate_agent() -
Výjimka pro spuštění agenta:
toolszůstává k dispozici jako argument přímého klíčového slova naagent.run() -
Možnosti založené na TypedDict: Možnosti jsou definovány jako
TypedDicttřídy pro zabezpečení typů - Podpora obecného typu: Klienti chatu a agenti podporují obecné typy možností specifických pro poskytovatele, aby bylo možné přetížení modulu runtime
-
Možnosti specifické pro poskytovatele: Každý poskytovatel má vlastní výchozí typedDict (např.
OpenAIChatOptions,OllamaChatOptions) - Žádné další dodatečné vlastnosti: Poskytovatelem specifické parametry jsou nyní hlavní typově definovaná pole
Výhody
- Zabezpečení typů: Automatické dokončování integrovaného vývojového prostředí (IDE) a kontrola typů pro všechny možnosti
- Flexibilita poskytovatele: Podpora parametrů specifických pro poskytovatele v den 1
- Čistější kód: Konzistentní předávání parametrů založených na diktování
- Jednodušší rozšíření: Vytvoření vlastních možností pro specializované případy použití (např. modely odůvodnění nebo jiné back-endy rozhraní API)
Průvodce migrací
1. Převod argumentů klíčových slov na diktování možností
Nejběžnější změnou je převod jednotlivých argumentů klíčových slov do slovníku options .
Před (argumenty klíčových slov):
from agent_framework.openai import OpenAIChatClient
client = OpenAIChatClient()
# Options passed as individual keyword arguments
response = await client.get_response(
"Hello!",
model_id="gpt-4",
temperature=0.7,
max_tokens=1000,
)
# Streaming also used keyword arguments
async for chunk in client.get_streaming_response(
"Tell me a story",
model_id="gpt-4",
temperature=0.9,
):
print(chunk.text, end="")
Po (dikt s možnostmi):
from agent_framework.openai import OpenAIChatClient
client = OpenAIChatClient()
# All options now go in a single 'options' parameter
response = await client.get_response(
"Hello!",
options={
"model_id": "gpt-4",
"temperature": 0.7,
"max_tokens": 1000,
},
)
# Same pattern for streaming
async for chunk in client.get_streaming_response(
"Tell me a story",
options={
"model_id": "gpt-4",
"temperature": 0.9,
},
):
print(chunk.text, end="")
Pokud předáte možnosti, které nejsou vhodné pro daného klienta, zobrazí se v integrovaném vývojovém prostředí (IDE) chyba typu.
2. Použití možností specifických pro poskytovatele (žádné další další_vlastnosti)
Pokud jste dříve chtěli předat parametry specifické pro zprostředkovatele, které nebyly součástí základní sady argumentů klíčových slov, museli jste použít additional_properties parametr:
Před (použitím additional_properties):
from agent_framework.openai import OpenAIChatClient
client = OpenAIChatClient()
response = await client.get_response(
"What is 2 + 2?",
model_id="gpt-4",
temperature=0.7,
additional_properties={
"reasoning_effort": "medium", # No type checking or autocomplete
},
)
Za (přímé možnosti pomocí TypedDict):
from agent_framework.openai import OpenAIChatClient
# Provider-specific options are now first-class citizens with full type support
client = OpenAIChatClient()
response = await client.get_response(
"What is 2 + 2?",
options={
"model_id": "gpt-4",
"temperature": 0.7,
"reasoning_effort": "medium", # Type checking or autocomplete
},
)
Po (vytvoření vlastních podtříd pro nové parametry):
Nebo pokud se jedná o parametr, který ještě není součástí rozhraní Agent Framework (protože je nový nebo protože je vlastní pro s OpenAI kompatibilní back-end), můžete nyní vytvořit podtřídu a použít obecnou podporu.
from typing import Literal
from agent_framework.openai import OpenAIChatOptions, OpenAIChatClient
class MyCustomOpenAIChatOptions(OpenAIChatOptions, total=False):
"""Custom OpenAI chat options with additional parameters."""
# New or custom parameters
custom_param: str
# Use with the client
client = OpenAIChatClient[MyCustomOpenAIChatOptions]()
response = await client.get_response(
"Hello!",
options={
"model_id": "gpt-4",
"temperature": 0.7,
"custom_param": "my_value", # IDE autocomplete works!
},
)
Klíčovou výhodou je, že většina parametrů specifických pro poskytovatele je teď součástí slovníku typed options a poskytuje vám následující výhody:
- Automatické dokončování integrovaného vývojového prostředí (IDE) pro všechny dostupné možnosti
- Kontrola typů pro zachycení neplatných klíčů nebo hodnot
- Není potřeba dodatečných_vlastností pro známé parametry zprostředkovatele.
- Snadné rozšíření pro vlastní nebo nové parametry
3. Aktualizace konfigurace chatagentu
Inicializace a spouštění chatagentů se řídí stejným vzorem:
Před (argumenty klíčových slov v konstruktoru a spuštění):
from agent_framework import ChatAgent
from agent_framework.openai import OpenAIChatClient
client = OpenAIChatClient()
# Default options as keyword arguments on constructor
agent = ChatAgent(
chat_client=client,
name="assistant",
model_id="gpt-4",
temperature=0.7,
)
# Run also took keyword arguments
response = await agent.run(
"Hello!",
max_tokens=1000,
)
After:
from agent_framework import ChatAgent
from agent_framework.openai import OpenAIChatClient, OpenAIChatOptions
client = OpenAIChatClient()
agent = ChatAgent(
chat_client=client,
name="assistant",
default_options={ # <- type checkers will verify this dict
"model_id": "gpt-4",
"temperature": 0.7,
},
)
response = await agent.run("Hello!", options={ # <- and this dict too
"max_tokens": 1000,
})
4. Možnosti specifické pro poskytovatele
Každý zprostředkovatel teď má vlastní typedDict pro možnosti, které jsou ve výchozím nastavení povolené. To vám umožní používat parametry specifické pro zprostředkovatele při plné typové bezpečnosti.
Příklad OpenAI:
from agent_framework.openai import OpenAIChatClient
client = OpenAIChatClient()
response = await client.get_response(
"Hello!",
options={
"model_id": "gpt-4",
"temperature": 0.7,
"reasoning_effort": "medium",
},
)
Můžete ho ale také explicitně nastavit:
from agent_framework_anthropic import AnthropicClient, AnthropicChatOptions
client = AnthropicClient[AnthropicChatOptions]()
response = await client.get_response(
"Hello!",
options={
"model_id": "claude-3-opus-20240229",
"max_tokens": 1000,
},
)
5. Vytváření vlastních možností pro specializované modely
Jednou z výkonných funkcí nového systému je možnost vytvářet vlastní možnosti TypedDict pro specializované modely. To je zvlášť užitečné pro modely, které mají jedinečné parametry, jako je například odůvodnění modelů s OpenAI:
from typing import Literal
from agent_framework.openai import OpenAIChatOptions, OpenAIChatClient
class OpenAIReasoningChatOptions(OpenAIChatOptions, total=False):
"""Chat options for OpenAI reasoning models (o1, o3, o4-mini, etc.)."""
# Reasoning-specific parameters
reasoning_effort: Literal["none", "minimal", "low", "medium", "high", "xhigh"]
# Unsupported parameters for reasoning models (override with None)
temperature: None
top_p: None
frequency_penalty: None
presence_penalty: None
logit_bias: None
logprobs: None
top_logprobs: None
stop: None
# Use with the client
client = OpenAIChatClient[OpenAIReasoningChatOptions]()
response = await client.get_response(
"What is 2 + 2?",
options={
"model_id": "o3",
"max_tokens": 100,
"allow_multiple_tool_calls": True,
"reasoning_effort": "medium", # IDE autocomplete works!
# "temperature": 0.7, # Would raise a type error, because the value is not None
},
)
6. Chat agent s nastavením
Obecné nastavení bylo také rozšířeno na agenty chatu:
from agent_framework import ChatAgent
from agent_framework.openai import OpenAIChatClient
agent = ChatAgent(
chat_client=OpenAIChatClient[OpenAIReasoningChatOptions](),
default_options={
"model_id": "o3",
"max_tokens": 100,
"allow_multiple_tool_calls": True,
"reasoning_effort": "medium",
},
)
a obecný parametr můžete zadat v klientovi i agentu, takže je to také platné:
from agent_framework import ChatAgent
from agent_framework.openai import OpenAIChatClient
agent = ChatAgent[OpenAIReasoningChatOptions](
chat_client=OpenAIChatClient(),
default_options={
"model_id": "o3",
"max_tokens": 100,
"allow_multiple_tool_calls": True,
"reasoning_effort": "medium",
},
)
6. Aktualizace vlastních implementací chatovacího klienta
Pokud jste implementovali vlastního chatovacího klienta rozšířením BaseChatClient, aktualizujte interní metody:
Before:
from agent_framework import BaseChatClient, ChatMessage, ChatOptions, ChatResponse
class MyCustomClient(BaseChatClient):
async def _inner_get_response(
self,
*,
messages: MutableSequence[ChatMessage],
chat_options: ChatOptions,
**kwargs: Any,
) -> ChatResponse:
# Access options via class attributes
model = chat_options.model_id
temp = chat_options.temperature
# ...
After:
from typing import Generic
from agent_framework import BaseChatClient, ChatMessage, ChatOptions, ChatResponse
# Define your provider's options TypedDict
class MyCustomChatOptions(ChatOptions, total=False):
my_custom_param: str
# This requires the TypeVar from Python 3.13+ or from typing_extensions, so for Python 3.13+:
from typing import TypeVar
TOptions = TypeVar("TOptions", bound=TypedDict, default=MyCustomChatOptions, covariant=True)
class MyCustomClient(BaseChatClient[TOptions], Generic[TOptions]):
async def _inner_get_response(
self,
*,
messages: MutableSequence[ChatMessage],
options: dict[str, Any], # Note: parameter renamed and just a dict
**kwargs: Any,
) -> ChatResponse:
# Access options via dict access
model = options.get("model_id")
temp = options.get("temperature")
# ...
Běžné vzory migrace
Vzor 1: Jednoduchá aktualizace parametrů
# Before - keyword arguments
await client.get_response("Hello", temperature=0.7)
# After - options dict
await client.get_response("Hello", options={"temperature": 0.7})
Model 2: Více parametrů
# Before - multiple keyword arguments
await client.get_response(
"Hello",
model_id="gpt-4",
temperature=0.7,
max_tokens=1000,
)
# After - all in options dict
await client.get_response(
"Hello",
options={
"model_id": "gpt-4",
"temperature": 0.7,
"max_tokens": 1000,
},
)
Model 3: Chatovací klient s nástroji
U chatovacích klientů tools je nyní umístěn v objektu možností:
# Before - tools as keyword argument on chat client
await client.get_response(
"What's the weather?",
model_id="gpt-4",
tools=[my_function],
tool_choice="auto",
)
# After - tools in options dict for chat clients
await client.get_response(
"What's the weather?",
options={
"model_id": "gpt-4",
"tools": [my_function],
"tool_choice": "auto",
},
)
Model 4: Agent s nástroji a pokyny
Pro vytvoření agenta tools a instructions mohou zůstat jako argumenty klíčových slov. V případě run() je k dispozici pouze tools.
# Before
agent = ChatAgent(
chat_client=client,
name="assistant",
tools=[my_function],
instructions="You are helpful.",
model_id="gpt-4",
)
# After - tools and instructions stay as keyword args on creation
agent = ChatAgent(
chat_client=client,
name="assistant",
tools=[my_function], # Still a keyword argument!
instructions="You are helpful.", # Still a keyword argument!
default_options={"model_id": "gpt-4"},
)
# For run(), only tools is available as keyword argument
response = await agent.run(
"Hello!",
tools=[another_function], # Can override tools
options={"max_tokens": 100},
)
# Before - using additional_properties
await client.get_response(
"Solve this problem",
model_id="o3",
additional_properties={"reasoning_effort": "high"},
)
# After - directly in options
await client.get_response(
"Solve this problem",
options={
"model_id": "o3",
"reasoning_effort": "high",
},
)
Vzor 5: parametry specifické pro poskytovatele
# Define reusable options
my_options: OpenAIChatOptions = {
"model_id": "gpt-4",
"temperature": 0.7,
}
# Use with different messages
await client.get_response("Hello", options=my_options)
await client.get_response("Goodbye", options=my_options)
# Extend options using dict merge
extended_options = {**my_options, "max_tokens": 500}
Shrnutí zásadních změn
| Aspekt | Před | Po |
|---|---|---|
| Možnosti chatovacího klienta | Jednotlivé argumenty klíčových slov (temperature=0.7) |
Jeden options slovník (options={"temperature": 0.7}) |
| Chatovací klientské nástroje |
tools=[...] argument klíčového slova |
options={"tools": [...]} |
Vytvoření agenta tools a instructions |
Argumenty klíčových slov | Stále argumenty klíčového slova (beze změny) |
Agent run()tools |
Argument klíčového slova | Argument klíčového slova ( beze změny) |
Agent run()instructions |
Argument klíčového slova | Přesunuto do options={"instructions": ...} |
| Možnosti specifické pro zprostředkovatele | additional_properties={...} |
Přímo zahrnuto v options slovníku |
| Výchozí možnosti agenta | Argumenty klíčových slov v konstruktoru | default_options={...} |
| Možnosti spuštění agenta | Argumenty klíčových slov pro run() |
options={...} parametr |
| Klient píše | OpenAIChatClient() |
OpenAIChatClient[CustomOptions]() (volitelné) |
| Agent píše | ChatAgent(...) |
ChatAgent[CustomOptions](...) (volitelné) |
Testování migrace
Aktualizace ChatClient
- Vyhledejte všechna volání
get_response()aget_streaming_response(), která používají argumenty klíčových slov, jako jsoumodel_id=,temperature=,tools=atd. - Přesunutí všech argumentů klíčových slov do slovníku
options={...} - Přesuňte libovolné
additional_propertieshodnoty přímo do slovníkuoptions
Aktualizace chatagentu
- Vyhledání všech
ChatAgentkonstruktorů arun()volání používajících argumenty klíčového slova - Přesunutí argumentů klíčových slov u konstruktorů do
default_options={...} - Přesuňte argumenty klíčových slov z
run()naoptions={...} -
Výjimka:
toolsainstructionsmohou zůstat jako argumenty klíčových slov naChatAgent.__init__()acreate_agent() -
Výjimka:
toolsmůže zůstat jako argument klíčového slova urun()
Aktualizace vlastního chatovacího klienta
- Aktualizujte podpisy metod
_inner_get_response()a_inner_get_streaming_response(): změňte parametrchat_options: ChatOptionsnaoptions: dict[str, Any] - Aktualizovat přístup k atributům (např.
chat_options.model_id) na přístup k slovníku (např.options.get("model_id")) - (Volitelné) Pokud používáte nestandardní parametry: Definujte vlastní typeddict.
- Přidání parametrů obecného typu do klientské třídy
Pro všechny
-
Spusťte kontrolu typů: Použijte
mypynebopyrightk zachycení chyb typu - Kompletní testování: Spuštěním aplikace ověřte funkčnost.
Podpora integrovaného vývojového prostředí (IDE
Nový systém založený na TypedDict poskytuje vynikající podporu integrovaného vývojového prostředí (IDE):
- Automatické dokončování: Získání návrhů pro všechny dostupné možnosti
- Kontrola typů: Zachycení neplatných klíčů možností v době vývoje
- Dokumentace: Když najedete myší na klíče, zobrazí se popisy.
- Specifické pro zprostředkovatele: Možnosti jednotlivých poskytovatelů zobrazují jenom relevantní parametry.
Další kroky
Pokud chcete zobrazit napsané diktování v akci pro případ použití modelů pro odůvodnění OpenAI s rozhraním API pro dokončování chatu, projděte si tuto ukázku.
Po dokončení migrace:
- Prozkoumání možností specifických pro poskytovatele v dokumentaci k rozhraní API
- Zkontrolovat aktualizované ukázky
- Informace o vytváření vlastních chatovacích klientů
Další nápovědu najdete v dokumentaci k rozhraní Agent Framework nebo se spojte s komunitou.