Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez az útmutató segít frissíteni a Python-kódot a Microsoft Agent Framework Options verziójában bevezetett új TypedDict-alapú rendszerre. Ez egy kompatibilitástörő változás , amely továbbfejlesztett típusbiztonságot, IDE automatikus kiegészítést és futásidejű bővíthetőséget biztosít.
A módosítások áttekintése
Ez a kiadás jelentős átalakítást vezet be abban, hogy hogyan adják át a beállításokat a csevegőklienseknek és csevegőügynököknek.
Hogyan működött korábban?
Korábban a beállítások közvetlen kulcsszóargumentumként lettek átadva az olyan metódusokon, mint a get_response(), get_streaming_response(), run()és az ügynökkonstruktorok:
# 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"},
)
Hogyan működik most?
A legtöbb lehetőség mostantól egyetlen options paraméteren keresztül van átadva gépelt szótárként:
# 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
},
)
Megjegyzés: Ügynökök esetében a és a
instructionsparaméterek közvetlen kulcsszó argumentumként érhetők el atoolsés aAgent.__init__()számára.agent.run()esetén csaktoolsérhető el kulcsszóargumentumként.# Agent creation accepts both tools and instructions as keyword arguments agent = Agent( 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 )
Kulcsmódosítások
-
Konszolidált beállítások paramétere: A kulcsszóargumentumok többsége (
model_idtemperaturestb.) mostantól egyetlenoptionsdiktáláson keresztül van átadva -
Az ügynöklétrehozás kivétele:
instructionséstoolstovábbra is elérhető közvetlen kulcsszóargumentumként aAgent.__init__()as_agent() -
Kivétel az ügynök futtatásánál: mint közvetlen kulcsszóargumentum továbbra is elérhető
toolsagent.run() -
TypedDict-alapú beállítások: A beállítások típusbiztonsági osztályokként
TypedDictvannak definiálva - Általános típustámogatás: A csevegési ügyfelek és ügynökök támogatják a szolgáltatóspecifikus beállítások általános beállításait, hogy lehetővé tegyék a futtatókörnyezet túlterhelését
-
Szolgáltatóspecifikus beállítások: Minden szolgáltatónak megvan a saját alapértelmezett TypedDict-je (pl.
OpenAIChatOptions,OllamaChatOptions) - Nincs több "additional_properties": A szolgáltatóspecifikus paraméterek most már teljes értékű típusmezők.
Előnyök
- Típusbiztonság: IDE automatikus kiegészítés és típusellenőrzés az összes beállításhoz
- Szolgáltatói rugalmasság: A szolgáltatóspecifikus paraméterek támogatása az első napon
- Tisztább kód: Konzisztens diktálási alapú paraméterátadás
- Egyszerűbb bővítmény: Egyéni beállítások létrehozása speciális használati esetekhez (például érvelési modellekhez vagy más API-háttérrendszerekhez)
Migrálási útmutató
1. Kulcsszóargumentumok konvertálása opciós szótárrá
A leggyakoribb változás az, hogy az egyes kulcsszóargumentumokat a options szótárba konvertálja.
Előtte (kulcsszóargumentumok):
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="")
(Opciók szótár után):
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="")
Ha olyan beállításokat ad át, amelyek nem megfelelőek az adott ügyfélhez, típushiba jelenik meg az IDE-ben.
2. A Provider-Specific beállításainak használata (nincs több additional_properties)
Korábban a kulcsszóargumentumok alaphalmazának nem részét képező szolgáltatóspecifikus paraméterek átadásához a additional_properties következő paramétert kellett használnia:
Előtte (additional_properties használata):
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
},
)
After (közvetlen beállítások a TypedDict használatával):
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
},
)
After (egyéni alosztályozás új paraméterek esetén):
Vagy ha olyan paraméterről van szó, amely még nem része az Ügynök-keretrendszernek (mert új, vagy mert egy OpenAI-kompatibilis háttérrendszer esetében egyéni), a beállításokat átsorolhatja, és használhatja az általános támogatást:
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!
},
)
A fő előnye az, hogy a legtöbb szolgáltatóspecifikus paraméter már része a gépelt beállítási szótárnak, így:
- IDE automatikus kiegészítés az összes elérhető beállításhoz
- Típusellenőrzés érvénytelen kulcsok vagy értékek elfogásához
- Nincs szükség további_tulajdonságokra az ismert szolgáltatói paraméterekhez
- Egyszerű bővítmény egyéni vagy új paraméterekhez
3. Az ügynök konfigurációjának frissítése
Az ügynökinicializálási és -futtatási módszerek ugyanazt a mintát követik:
Előtte (kulcsszóargumentumok konstruktoron és futtatáskor):
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
client = OpenAIChatClient()
# Default options as keyword arguments on constructor
agent = Agent(
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 Agent
from agent_framework.openai import OpenAIChatClient, OpenAIChatOptions
client = OpenAIChatClient()
agent = Agent(
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. Szolgáltatóspecifikus beállítások
Mostantól minden szolgáltató saját TypedDict típusú beállításokkal rendelkezik, ezek alapértelmezés szerint engedélyezve vannak. Ez lehetővé teszi, hogy szolgáltatóspecifikus paramétereket használjon teljes típusú biztonsággal:
OpenAI-példa:
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",
},
)
De explicit módon is megadható:
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. Egyéni beállítások létrehozása speciális modellekhez
Az új rendszer egyik hatékony funkciója, hogy egyéni TypedDict-beállításokat hozhat létre speciális modellekhez. Ez különösen hasznos az olyan modellek esetében, amelyek egyedi paraméterekkel rendelkeznek, például az OpenAI-val rendelkező érvelési modellek esetében:
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. Opciókkal rendelkező csevegőügynökök
Az általános beállítás a csevegőügynökökre is ki lett terjesztve:
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
agent = Agent(
chat_client=OpenAIChatClient[OpenAIReasoningChatOptions](),
default_options={
"model_id": "o3",
"max_tokens": 100,
"allow_multiple_tool_calls": True,
"reasoning_effort": "medium",
},
)
és megadhatja a generikus típusokat mind az ügyféloldalon, mind az ügynökoldalon, így ez is érvényes:
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
agent = Agent[OpenAIReasoningChatOptions](
chat_client=OpenAIChatClient(),
default_options={
"model_id": "o3",
"max_tokens": 100,
"allow_multiple_tool_calls": True,
"reasoning_effort": "medium",
},
)
6. Egyéni csevegési ügyfélalkalmazások frissítése
Ha egyéni csevegési ügyfelet implementált a kiterjesztéssel BaseChatClient, frissítse a belső metódusokat:
Before:
from agent_framework import BaseChatClient, Message, ChatOptions, ChatResponse
class MyCustomClient(BaseChatClient):
async def _inner_get_response(
self,
*,
messages: MutableSequence[Message],
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, Message, 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[Message],
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")
# ...
Gyakori áttelepítési minták
1. minta: Egyszerű paraméterfrissítés
# Before - keyword arguments
await client.get_response("Hello", temperature=0.7)
# After - options dict
await client.get_response("Hello", options={"temperature": 0.7})
2. minta: Több paraméter
# 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,
},
)
3. minta: Csevegőügyfél eszközökkel
Csevegési ügyfelek esetén a tools most az opciók könyvtárába kerül.
# 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",
},
)
4. minta: Ügynök eszközökkel és utasításokkal
Ügynöklétrehozás esetén, tools és instructions kulcsszóargumentumként is megmaradhat. Csak run() érhető el a tools számára:
# Before
agent = Agent(
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 = Agent(
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",
},
)
5. minta: Szolgáltatóspecifikus paraméterek
# 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}
A kompatibilitástörő változások összefoglalása
| Jellemző | Előtte | Utána |
|---|---|---|
| Csevegési ügyfél beállításai | Egyéni kulcsszóargumentumok (temperature=0.7) |
Egyetlen options szótár (options={"temperature": 0.7}) |
| Csevegési ügyféleszközök |
tools=[...] kulcsszóargumentum |
options={"tools": [...]} |
Ügynök létrehozása tools és instructions |
Kulcsszóargumentumok | Még mindig kulcsszóargumentumok (változatlan) |
Ügynök run()tools |
Kulcsszóargumentum | Még mindig kulcsszóargumentum (változatlan) |
Ügynök run()instructions |
Kulcsszóargumentum | Áthelyezés ide: options={"instructions": ...} |
| Szolgáltatóspecifikus beállítások | additional_properties={...} |
Közvetlenül a options szótárban |
| Az ügynök alapértelmezett beállításai | Kulcsszóargumentumok a konstruktoron | default_options={...} |
| Ügynök futtatási beállítások | Kulcsszóargumentumok a run() |
options={...} paraméter |
| Ügyfél gépelése | OpenAIChatClient() |
OpenAIChatClient[CustomOptions]() (nem kötelező) |
| Ügynök gépelése | Agent(...) |
Agent[CustomOptions](...) (nem kötelező) |
A migrálás tesztelése
ChatClient-frissítések
- Keresse meg az
get_response()get_streaming_response()összes olyan hívást, amely olyan kulcsszóargumentumokat használ, mint amodel_id=,temperature=,tools=stb. - Az összes kulcsszóargumentum áthelyezése egy
options={...}szótárba - Bármely
additional_propertiesérték közvetlen áthelyezése aoptionsszótárba
Ügynökfrissítések
- A kulcsszóargumentumokat használó összes
Agentkonstruktor ésrun()hívás megkeresése - Kulcsszóargumentumok áthelyezése konstruktorokon a
default_options={...} - Kulcsszóargumentumok áthelyezése a
run()-ről aoptions={...}-re -
Kivétel:
toolsésinstructionsmaradhat kulcsszóargumentumként aAgent.__init__()as_agent() -
Kivétel: a(z)
toolsrun()kulcsszóargumentumként maradhat.
Egyéni csevegési ügyfélfrissítések
- A
_inner_get_response()és_inner_get_streaming_response()metódus-aláírások frissítése: achat_options: ChatOptionsparaméter módosításaoptions: dict[str, Any] - Attribútumhozzáférés frissítése (pl.
chat_options.model_id) szótár-hozzáférésre (pl.options.get("model_id")) - (Nem kötelező) Nem szabványos paraméterek használata esetén: Egyéni TypedDict definiálása
- Általános típusparaméterek hozzáadása az ügyfélosztályhoz
Mindenkinek
-
Típustesztelő futtatása: Típushibák elkapásához használja a
mypyvagypyrightopciót - Végpontok közötti tesztelés: Az alkalmazás futtatása a funkciók ellenőrzéséhez
IDE-támogatás
Az új TypedDict-alapú rendszer kiváló IDE-támogatást nyújt:
- Automatikus kiegészítés: Javaslatok lekérése az összes elérhető beállításhoz
- Típusellenőrzés: Érvénytelen beállításkulcsok elfogása a fejlesztéskor
- Dokumentáció: Mutasson a kulcsokra a leírások megtekintéséhez
- Szolgáltatóspecifikus: Minden szolgáltató beállításai csak a releváns paramétereket jelenítik meg
Következő lépések
Ha meg szeretné tekinteni az OpenAI-érvelési modellek csevegés-befejezési API-val való használatakor működés közbeni beírt diktálásokat, tekintse meg ezt a mintát
A migrálás befejezése után:
- A szolgáltatóspecifikus lehetőségek megismerése az API dokumentációjában
- Frissített minták áttekintése
- Tudnivalók az egyéni csevegési ügyfelek létrehozásáról
További segítségért tekintse meg az Agent Framework dokumentációját , vagy forduljon a közösséghez.