Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Python için Bot Framework SDK'sından Python için Microsoft 365 Aracıları SDK'sı geçiş için gerekli değişiklikler açıklanmaktadır.
Tip
Bu çalışmayı yalnızca paket değiştirme işlemi değil, modernleştirme eforu olarak da değerlendirin. Agents SDK, daha basit ve görüş ayrımı olmayan kalıpları (asenkron/bekleme, bağımlılık enjeksiyonu, standart loglama) tercih eder ve eski özellikleri kaldırır. Yalnızca botunuzun gerçekten ihtiyaç duyduğu şeyleri koruyun ve eski şablon karmaşıklığını ileriye taşımaktan kaçının.
Önkoşullar
- Python sürüm 3.10 veya üzeri (3.11+ önerilir, 3.14'e kadar destekler)
- Mevcut Bot Framework SDK'sı projesi
- Azure Bot Hizmeti kaynağı
Azure kaynakları
Mevcut Azure kaynaklarınız bu geçiş sırasında değişmeden kalır. Geçerli Azure Bot kaydınızı (Uygulama Kimliği ve gizli anahtar) kullanmaya devam edin. Bu değerleri daha sonra açıklanan yeni yapılandırma yapısında referans verirsiniz. Birçok çözüm ayrıca APP_ID, APP_PASSWORD ve APP_TENANT_ID gibi eski uygulama ayarlarını da içerir. Bu girdiler geçiş sırasında zararsızdır, ancak Microsoft 365 Aracıları SDK'sı bunları artık kullanmaz. Yeni yapılandırmayı doğruladıktan sonra bu ayarları kaldırabilirsiniz.
İlk adımlar
Paket bağımlılıklarını güncelleştirerek başlayın. Aşağıdaki değişiklikler, dokunmanız gerekebilecek tüm ad alanlarını kapsamaz, ancak çoğu paket değişikliğini işler.
Paket bağımlılıklarını güncelleştirme
| Bot Framework SDK'sı | Aracıları SDK'sı |
|---|---|
botbuilder-core |
microsoft-agents-hosting-core |
botbuilder-schema |
microsoft-agents-activity |
botbuilder-azure |
microsoft-agents-storage-blob ve microsoft-agents-storage-cosmos |
botbuilder-integration-aiohttp |
microsoft-agents-hosting-aiohttp |
Botunuz Microsoft Teams ile tümleştirildiyse, temel Teams özellikleri için Teams Uzantısı paketini microsoft-agents-hosting-teams ekleyin.
Kimlik doğrulama için, MSAL tabanlı kimlik doğrulamayı ele almak adına microsoft-agents-authentication-msal ekleyin.
Kendi requirements.txt veya eşdeğer bağımlılık dosyanızı Bot Framework paketlerini Agent SDK eşdeğerleriyle değiştirecek şekilde güncelleyin.
pip install -r requirements.txt Yeni bağımlılıkları kurmak için tercih ettiğiniz paket yöneticisini kullanın.
Agents SDK, kod kalite standartlarını, biçimlendirme için black ve linting için flake8 kullanarak uygular. Bu araçları geliştirme bağımlılıklarınıza eklemeyi düşünün.
İçeri aktarmaları güncelleştirme
Important
Agents SDK, import yollarında (microsoft_agents) nokta (microsoft.agents) yerine alt çizgiler kullanır. Bu değişiklik tüm ithalatları etkiler.
Ayrıca, importları güncelleyin. En kolay yaklaşım, tam metni proje çapında bulup değiştirmektir.
| Bot Framework İçeri Aktarma | Agents SDK Aktarımı |
|---|---|
from botbuilder.core import ... |
from microsoft_agents.hosting.core import ... |
from botbuilder.schema import ... |
from microsoft_agents.activity import ... |
from botbuilder.integration.aiohttp import ... |
from microsoft_agents.hosting.aiohttp import ... |
from botbuilder.core.teams import ... |
from microsoft_agents.hosting.teams import ... |
Tür ve sınıf isimlerinin yeniden değiştirilmesi
Bazı türler ve sınıflar Agents SDK'da farklı isimlere sahiptir. Değişikliklerinizi yönlendirmek için aşağıdaki haritalamaları kullanın.
| Bot Framework | Aracıları SDK'sı |
|---|---|
BotState |
AgentState |
BotFrameworkAdapter |
CloudAdapter |
BotFrameworkHttpClient |
AgentHttpClient |
OAuthPromptSettings.connection_name |
OAuthPromptSettings.azure_bot_oauth_connection_name |
Etkinlik sınıfı değişiklikleri
Agents SDK'daki sınıf, ActivityPydantic kullanılarak yerleşik doğrulama içerir. JSON veya sözlüklerden aktiviteleri ayrıştırıp doğrulayabilirsiniz.Activity.model_validate()
Ayrıca, Activity sınıf faaliyet yükleriyle ilgili işlemleri merkezileştirir. Daha önce TurnContext üzerinde statik yöntemler olan yöntemler şimdi Activity üzerinde örnek yöntemlerdir.
| Bot Çerçevesi Statik Yöntemi | Aracılar SDK'sı Örnek Yöntemi |
|---|---|
TurnContext.apply_conversation_reference() |
activity.apply_conversation_reference() |
TurnContext.get_conversation_reference() |
activity.get_conversation_reference() |
TurnContext.get_reply_conversation_reference() |
activity.get_reply_conversation_reference() |
TurnContext.remove_recipient_mention() |
activity.remove_recipient_mention() |
TurnContext.get_mentions() |
activity.get_mentions() |
TurnContext.remove_mention_text() |
activity.remove_mention_text() |
Yaygın turn_state başvuruları güncelleştirin. Aşağıdaki kullanımları uygun şekilde değiştirin.
| Bot Framework | Aracıları SDK'sı |
|---|---|
turn_context.turn_state.get(ConnectorClient) |
turn_context.services.get(ConnectorClient) |
turn_context.turn_state.get(UserTokenClient) |
turn_context.services.get(UserTokenClient) |
turn_context.turn_state |
turn_context.services |
Yapılandırma
Ajan SDK, yapılandırma için hiyerarşik bir adlandırma konvensiyası olan ortam değişkenleri kullanır.
Ortam değişkenleri
Dosyanızı .env aşağıdaki yapıda oluşturun veya güncelleyin:
# Required for Azure Bot Service
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID=your-app-id
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET=your-app-secret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID=your-tenant-id
# Optional - for local debugging
PORT=3978
Geçiş Notu: Ortam değişkeni adlarınızı aşağıdaki tabloda gösterildiği gibi güncelleştirin:
| Bot Framework SDK'sı | Aracıları SDK'sı |
|---|---|
APP_ID veya MICROSOFT_APP_ID |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID |
APP_PASSWORD veya MICROSOFT_APP_PASSWORD |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET |
APP_TENANT_ID veya MICROSOFT_APP_TENANT_ID |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID |
Agents SDK yapılandırması, iç içe konfigürasyon hiyerarşilerini temsil etmek için çift alt çizgiler (__) kullanır. Bu desen, farklı dağıtım ortamlarında esnek yapılandırma yönetimi sağlar.
Başlangıç ve başlatma
Başlatma Agents SDK'da farklıdır. Bot Framework SDK genellikle manuel adaptör yapılandırmasıyla kullanılır aiohttp . Agents SDK'yı kullanarak, yerleşik sunucu araçlarını basitleştirilmiş kurulum için kullanabilirsiniz.
Sunucu kurulumu
Bot Framework SDK yaklaşımı
from aiohttp import web
from botbuilder.core import BotFrameworkAdapter, BotFrameworkAdapterSettings
from botbuilder.schema import Activity
# Configure adapter
SETTINGS = BotFrameworkAdapterSettings(
app_id=os.environ.get("APP_ID", ""),
app_password=os.environ.get("APP_PASSWORD", "")
)
ADAPTER = BotFrameworkAdapter(SETTINGS)
# Bot instance
BOT = MyBot()
async def messages(req: web.Request) -> web.Response:
if "application/json" in req.headers["Content-Type"]:
body = await req.json()
else:
return web.Response(status=415)
activity = Activity().deserialize(body)
auth_header = req.headers["Authorization"] if "Authorization" in req.headers else ""
response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn)
if response:
return web.json_response(data=response.body, status=response.status)
return web.Response(status=201)
APP = web.Application()
APP.router.add_post("/api/messages", messages)
if __name__ == "__main__":
web.run_app(APP, host="localhost", port=3978)
Aracılar SDK'sı yaklaşımı (dekoratör deseni)
Önerilen yaklaşım, daha modern ve bildirimsel bir stil için dekoratörlerle birlikte AgentApplication kullanır:
import re
from os import environ
from dotenv import load_dotenv
from microsoft_agents.hosting.aiohttp import CloudAdapter
from microsoft_agents.hosting.core import (
Authorization,
AgentApplication,
TurnState,
TurnContext,
MemoryStorage,
)
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.activity import load_configuration_from_env
# Load environment variables
load_dotenv()
agents_sdk_config = load_configuration_from_env(environ)
# Initialize core components
STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)
# Create agent application
AGENT_APP = AgentApplication[TurnState](
storage=STORAGE,
adapter=ADAPTER,
authorization=AUTHORIZATION,
**agents_sdk_config
)
# Register handlers using decorators
@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
await context.send_activity("Welcome!")
return True
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
await context.send_activity(f"You said: {context.activity.text}")
Agents SDK load_configuration_from_env() , ortam değişkenlerinden otomatik olarak yapılandırma yükleme sağlar ve manuel yapılandırma ayrıştırmasını ortadan kaldırır. Decorator modeli, işleyicileri açık sınıf tabanlı miras olmadan deklaratif olarak kaydetmenize olanak tanır.
Kimlik doğrulaması ve güvenlik
Bot Framework SDK, adaptörde JSON Web Token (JWT) doğrulamasını içeriyordu. Agents SDK, kimlik doğrulama endişelerini ayırır, böylece kimlik doğrulama ara yazılımını açıkça yapılandırmak mümkündür.
Üretim ortamları için, yapılandırma yoluyla JWT doğrulamasının etkinleştirildiğinden CloudAdapter emin olun. Adaptör, gelen isteği, MSAL kimlik doğrulama yapılandırmasını kullanarak otomatik olarak doğrular.
Bot Framework Emulator ile yerel geliştirme için, .env dosyanızdaki boş kimlik bilgilerini kullanabilirsiniz:
# Only for local development with Emulator
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__ANONYMOUS_ALLOWED=True
Etkinlik yönetimi
Bot Framework SDK ile oluşturulan botların çoğu ActivityHandler temel sınıfını temel alır.
Agents SDK, daha kolay geçiş için benzer bir API yüzeyi koruyan uyumlu ActivityHandler bir sistem sunar.
Önemli farklar
Handler yöntemi imza değişiklikleri
Bot Framework SDK işleyicileri tipik olarak konumsal parametreler kullanırken, Agents SDK işleyicileri birincil parametre TurnContext ile aynı deseni korur.
Agents SDK'da Ek Yöntemler
| Yöntem | Description |
|---|---|
on_message_delete() |
Mesaj silme etkinliklerini yönetir |
on_message_update() |
İleti güncelleştirme etkinliklerini yönetir |
on_sign_in_invoke() |
Oturum açma çağırma etkinliklerini işler |
Agents SDK'da eksik yöntemler
| Yöntem | Nedeni |
|---|---|
on_command_activity() |
Komut etkinlikleri desteklenmiyor |
on_command_result_activity() |
Komut sonucu etkinlikleri desteklenmiyor |
Geçiş örneği
Bot Framework SDK'sı
from botbuilder.core import ActivityHandler, TurnContext
from botbuilder.schema import ChannelAccount
class MyBot(ActivityHandler):
async def on_message_activity(self, turn_context: TurnContext):
await turn_context.send_activity(f"You said: {turn_context.activity.text}")
async def on_members_added_activity(
self,
members_added: list[ChannelAccount],
turn_context: TurnContext
):
for member in members_added:
if member.id != turn_context.activity.recipient.id:
await turn_context.send_activity("Welcome!")
Aracıları SDK'sı
from microsoft_agents.hosting.core import AgentApplication, TurnState, TurnContext
# AGENT_APP is initialized as shown in the Startup and initialization section
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
await context.send_activity(f"You said: {context.activity.text}")
@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
for member in context.activity.members_added:
if member.id != context.activity.recipient.id:
await context.send_activity("Welcome!")
return True
Göç işlemi çoğunlukla basittir, ana değişiklikler ise import ifadeleridir. Mevcut ActivityHandlertabanlı botların çoğu minimum modifikasyonla çalışır.
Durum yönetimi
ConversationState, UserState ve PrivateConversationState birkaç farkla uyumludur. Temel durum yönetim kalıpları Bot Framework SDK'ya benzer.
Durum nesnelerini kaydetmeli ve değişikliklerden sonra açıkça kaydetmelisiniz.
from microsoft_agents.hosting.core import (
AgentApplication,
TurnState,
TurnContext,
ConversationState,
UserState,
MemoryStorage,
)
# Initialize storage and state
STORAGE = MemoryStorage()
conversation_state = ConversationState(STORAGE)
user_state = UserState(STORAGE)
count_property = conversation_state.create_property("conversation_data")
# AGENT_APP is initialized as shown in the Startup and initialization section
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
# Access state
conversation_data = await count_property.get(context, {})
# Modify state
conversation_data["count"] = conversation_data.get("count", 0) + 1
await count_property.set(context, conversation_data)
await context.send_activity(f"Message count: {conversation_data['count']}")
# Save state changes
await conversation_state.save_changes(context)
await user_state.save_changes(context)
Depolama seçenekleri
Agents SDK, farklı arka uçlar için depolama uygulamaları sağlar:
# Memory storage (development only)
from microsoft_agents.hosting.core import MemoryStorage
storage = MemoryStorage()
# Azure Blob Storage
from microsoft_agents.storage.blob import BlobStorage
storage = BlobStorage(
connection_string="your-connection-string",
container_name="bot-state"
)
# Azure Cosmos DB
from microsoft_agents.storage.cosmos import CosmosDbPartitionedStorage
storage = CosmosDbPartitionedStorage(
cosmos_client_options={
"url": "your-cosmos-url",
"key": "your-cosmos-key"
},
database_id="bot-db",
container_id="bot-state"
)
Logging
Aracılar SDK'sı Python standart logging modülünü kullanır. Ana uygulama dosyanızda logiyi yapılandırın:
import logging
# Configure logging for Agents SDK
ms_agents_logger = logging.getLogger("microsoft_agents")
console_handler = logging.StreamHandler()
console_handler.setFormatter(
logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
)
ms_agents_logger.addHandler(console_handler)
ms_agents_logger.setLevel(logging.INFO)
Günlük düzeyleri
- DEBUG: Detaylı yerel durum takibi
- BILGI: Etkinlik işleme, API çağrıları ve dış varlıklara veya kuruluşlardan gelen istekler
- UYARI: Potansiyel sorunlara yol açan beklenmedik olaylar
- HATA: Gözlemlenen hatalar, yakalanmış olsun ya da olmasın
Yaygın geçiş desenleri
Temel "echo bot"
Bot Framework SDK'da basit echo bot
from botbuilder.core import ActivityHandler, TurnContext
class EchoBot(ActivityHandler):
async def on_message_activity(self, turn_context: TurnContext):
await turn_context.send_activity(f"Echo: {turn_context.activity.text}")
Agents SDK'da basit echo bot
from microsoft_agents.hosting.core import AgentApplication, TurnState, TurnContext
# AGENT_APP is initialized as shown in the Startup and initialization section
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
await context.send_activity(f"Echo: {context.activity.text}")
Sayaçlı devlet yönetimi
from microsoft_agents.hosting.core import (
AgentApplication,
TurnState,
TurnContext,
ConversationState,
MemoryStorage,
)
# Initialize storage and state
STORAGE = MemoryStorage()
conversation_state = ConversationState(STORAGE)
count_property = conversation_state.create_property("count")
# AGENT_APP is initialized as shown in the Startup and initialization section
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
count = await count_property.get(context, 0)
count += 1
await count_property.set(context, count)
await context.send_activity(f"Message count: {count}")
await conversation_state.save_changes(context)
Teams botu
from microsoft_agents.hosting.core import AgentApplication, TurnState, TurnContext
# AGENT_APP is initialized as shown in the Startup and initialization section
# Include microsoft-agents-hosting-teams in your dependencies for Teams support
@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
for member in context.activity.members_added:
await context.send_activity(f"Welcome to the team, {member.name}!")
return True
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
# Remove mentions
text = context.activity.remove_mention_text(context.activity.recipient.id)
await context.send_activity(f"You said: {text}")
Sorun giderme ve ipuçları
Aşağıdaki ipuçları daha başarılı olmanıza yardımcı olabilir.
İtiş hataları
Eğer içe aktarma hatalarıyla karşılaşırsanız, tüm içe aktarma ifadelerinde nokta (microsoft_agents) yerine alt çizgi (microsoft.agents) kullandığınızdan emin olun. Bu hata, en yaygın göç sorunudur.
Asenkron/await kalıpları
Tüm bot yöntemleri async ve await asenkron işlemler için kullanılmalıdır. Çağrıların, durum işlemlerinin ve diyalog işlemlerinin send_activity kullanarak await ile gerçekleştirilmesini sağlayın.
Tür ipuçları
Aracılar SDK'sı Python tür ipuçlarını kapsamlı olarak kullanır. Daha iyi IDE desteği ve hata tespiti için bot koduna tip ipuçları eklemeyi düşünün:
from microsoft_agents.hosting.core import TurnContext
async def on_message_activity(self, turn_context: TurnContext) -> None:
await turn_context.send_activity("Hello")
Yapılandırma doğrulaması
Botunuz yapılandırma hataları nedeniyle başlatılamıyorsa, ortam değişkeni adlarınızda doğru çift alt çizgi (__) biçiminin kullanıldığını ve gerekli tüm değerlerin ayarlandığını kontrol edin.
Hata ayıklama sırasında yerel 401 hataları
Bot Framework Emülatörü kullanarak yerel hata ayıklama sırasında 401 hatası görürseniz, kimlik bilgilerinizin dosyada .env doğru yapılandırıldığından emin olun veya Emülatörün kimlik doğrulama ayarlarını kullanın.
Python sürüm uyumluluğu
Python 3.10 veya üzerini kullandığınızdan emin olun. Aracılar SDK'sı, önceki sürümlerde bulunmayan modern Python özelliklerini kullanır.
Geçiş denetim listesi
✓ Analiz et ve plan yap: Kullanımdan aşağı düşen özellikleri tespit et ve göç mi yoksa yeniden inşa kapsamını da değerlendir.
✓ Python sürümünü yükseltin: Python 3.10 veya üzeri bir sürüme geçin (3.11+ önerilir).
✓ Paketleri değiştir: Kaldır botbuilder-*; ekle microsoft-agents-* (hosting-core, activity, hosting-aiohttp, authentication-msal, depolama sağlayıcıları, hosting-teams).
✓ İçe aktarmaları güncelle: Yukarıdaki tablolara göre bulma/değiştirme uygula; hepsini microsoft.agents 'ye microsoft_agentsdeğiştirin.
✓ Türleri ve sınıfları güncelleyin: Yeniden adlandırılan API'leri düzeltin ve statik metotları örnek TurnContext metotlara taşıyınActivity.
✓ Yapılandırmayı güncelle: Çift alt çizgi kullanarak hiyerarşik adlandırmalı bir .env dosyası oluşturun.
✓ Başlatmayı güncelle: CloudAdapter'i MsalAuth.from_environment() ve AgentsHttpMiddleware ile kullanın.
✓ Günlüğü yapılandır: Python için microsoft_agents günlük kaydediciyi ayarlayın.
✓ Yerel olarak oluştur ve test et: Bot Framework Emulator'u kimlik bilgileriyle kullanın; Temel senaryoları doğrulayın.
✓ Dağıt ve izle: Azure ortam değişkenlerini yeni yapılandırmayla eşleşecek şekilde güncelleyin ve dağıtım tamamlandıktan sonra günlükleri izleyin.