حزمة SDK للرصد للوكيل 365 المتوقف عن استخدامه

Important

توثق هذه المقالة Agent 365 Observability SDK المتوقفة. التكاملات الحالية لا تزال تعمل، لكن لا تستخدم مجموعة تطوير البرامج هذه للتكاملات الجديدة. للتطوير الجديد، استخدم توزيعة Microsoft OpenTelemetry. قبل تحديث تكامل موجود، راجع دليل الترحيل للغتك:

للاطلاع على نموذج البيانات الأساسي، والهوية والمصادقة، والنطاقات والموافقة، والحدود التي تنطبق على كل مسار تكامل، انظر مفاهيم قابلية الملاحظة لـ Agent 365.

ملحوظة

تعتبر إمكانية الرصد واحدة من مستويات القدرة المتزايدة في بدء استخدام تطوير Agent 365 وتتناسب مع جميع الأنواع الخاصة بالوكلاء.

للمشاركة في نظام Agent 365 البيئي، أضف قدرات الرصد الخاصة بالعميل 365 إلى وكيلك. يعتمد Agent 365 Observability على OpenTelemetry (OTel) ويوفر إطارا موحدا لالتقاط التليمترية بشكل متسق وأمان عبر جميع منصات الوكلاء. من خلال تنفيذ هذا المكون المطلوب، تمكن مسؤولي تقنية المعلومات من مراقبة نشاط وكيلك في مركز إدارة مايكروسوفت وتسمح لفرق الأمن باستخدام Defender وPurview للامتثال واكتشاف التهديدات.

المزايا الرئيسية

  • الرؤية من البداية إلى النهاية: التقط بيانات شاملة لكل استدعاء وكيل، بما في ذلك الجلسات، واستدعاءات الأدوات، والاستثناءات، مما يمنحك إمكانية التتبع الكاملة عبر المنصات.
  • تمكين الأمان والتوافق: تغذية سجلات التدقيق الموحدة في Defender و Purview، مما يتيح سيناريوهات الأمان المتقدمة وإعداد تقارير التوافق لوكيلك.
  • مرونة عبر المنصات: الاعتماد على معايير OTel ودعم أوقات التشغيل والأنظمة الأساسية المتنوعة مثل Copilot Studio وFoundry وأطر عمل الوكلاء المستقبلية.
  • كفاءة التشغيل للمسؤولين: توفير إمكانية مراقبة مركزية في مركز إدارة Microsoft 365، وتقليل وقت استكشاف الأخطاء وإصلاحها وتحسين الحوكمة باستخدام عناصر التحكم في الوصول المستندة إلى الأدوار لفرق تكنولوجيا المعلومات التي تدير وكيلك.

الوكلاء المعتمدون

تدعم أنواع الوكلاء التالية إمكانية مراقبة Agent 365:

التثبيت

استخدم هذه الأوامر لتثبيت وحدات المراقبة للغات التي يدعمها Agent 365.

تثبيت حزم قابلية المراقبة ووقت التشغيل الأساسية. تحتاج جميع العوامل التي تستخدم Agent 365 Observability إلى هذه الحزم.

pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime

إذا كان وكيلك يستخدم حزمة Microsoft Agents Hosting، فقم بتثبيت حزمة تكامل الاستضافة. يوفر البرنامج الوسيط الذي يملأ الأمتعة والنطاقات تلقائيا من TurnContext، ويتضمن التخزين المؤقت للرمز المميز لمصدر إمكانية المراقبة.

pip install microsoft-agents-a365-observability-hosting

إذا كان وكيلك يستخدم أحد أطر عمل الذكاء الاصطناعي المدعومة، فقم بتثبيت ملحق الأجهزة التلقائية المقابل لالتقاط بيانات تتبع الاستخدام تلقائيا دون رمز الأجهزة اليدوي. للحصول على تفاصيل الإعداد، راجع التخصيص التلقائي.

# For Semantic Kernel
pip install microsoft-agents-a365-observability-extensions-semantic-kernel

# For OpenAI Agents SDK
pip install microsoft-agents-a365-observability-extensions-openai

# For Microsoft Agent Framework
pip install microsoft-agents-a365-observability-extensions-agent-framework

# For LangChain
pip install microsoft-agents-a365-observability-extensions-langchain

الإعداد

استخدم الإعدادات التالية لتفعيل وتخصيص قابلية الرصد للوكيل 365 لوكيلك.

قم بتعيين متغير البيئة ENABLE_A365_OBSERVABILITY_EXPORTER إلى true لتحقيق الملاحظة. في Agent 365 SDK 2.0 وما بعده، يستخدم المُصدِّر دائمًا مسار الخدمة إلى الخدمة (S2S) ويصادق باستخدام بيانات اعتماد التطبيق فقط المُكوَّنة token_resolver. إذا فعلت المُصدِّر بدون مُحلِّل، يحتفظ Python بالرجوع إلى مُصدِّر وحدة التحكم كخيار احتياطي ولا يرسل بيانات القياس عن بُعد إلى Agent 365.

from microsoft_agents_a365.observability.core import configure

def token_resolver(agent_id: str, tenant_id: str) -> str | None:
    # Return a validated app-only observability token for this agent and tenant.
    return "<app-only-observability-token>"

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_resolver,
)

يتم استبعاد حل الرموز من تسجيل الدخول إلى وحدة التحكم.

يمكنك تخصيص سلوك المصدر عن طريق تمرير مثيل Agent365ExporterOptions إلى exporter_options. ** عندما يتم توفير exporter_options، يكون له الأسبقية على المعامل token_resolver والمعامل cluster_category.

from microsoft_agents_a365.observability.core import configure, Agent365ExporterOptions

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    exporter_options=Agent365ExporterOptions(
        cluster_category="prod",
        token_resolver=token_resolver,
    ),
    suppress_invoke_agent_input=True,
)

يصف الجدول التالي المعلمات الاختيارية ل configure().

المعامل الوصف Default
logger_name اسم مسجل Python المستخدم لتصحيح الأخطاء وإخراج سجل وحدة التحكم. microsoft_agents_a365.observability.core
exporter_options مثيل Agent365ExporterOptions يقوم بتكوين محلل الرمز المميز وفئة نظام المجموعة معا. None
suppress_invoke_agent_input عندما True، يمنع رسائل الإدخال على InvokeAgent النطاقات. False

يصف الجدول التالي الخصائص الاختيارية ل Agent365ExporterOptions.

الملكية الوصف Default
use_s2s_endpoint أصبح متقادمًا ويتم تجاهله. يستخدم Agent 365 SDK 2.0 وما بعده دائمًا مسار S2S، حتى عندما تكون هذه القيمة False. False (متجاهل)
max_queue_size الحد الأقصى لحجم قائمة الانتظار لمعالج الدفعات. 2048
scheduled_delay_ms التأخير بالمللي ثانية بين دفعات التصدير. 5000
exporter_timeout_ms المهلة بالمللي ثانية لعملية التصدير. 30000
max_export_batch_size الحد الأقصى لحجم الدفعة لعمليات التصدير. 512

سمات الأمتعة

يستخدم BaggageBuilder لتعيين المعلومات السياقية التي تتدفق عبر جميع الامتدادات في الطلب. تنفذ مجموعة تطوير البرمجيات (SDK) عملية SpanProcessor تنسخ جميع إدخالات الأعباء غير الفارغة إلى المقاطع الجديدة دون الكتابة فوق السمات الموجودة.

from microsoft_agents_a365.observability.core import BaggageBuilder

with (
    BaggageBuilder()
    .tenant_id("tenant-123")
    .agent_id("agent-456")
    .conversation_id("conv-789")
    .build()
):
    # Any spans started in this context will receive these as attributes
    pass

لتعبئة BaggageBuilder تلقائيًا من TurnContext، استخدم populate المساعد في الحزمة microsoft-agents-a365-observability-hosting. يستخرج هذا المساعد تلقائيا تفاصيل المتصل والوكيل والمستأجر والقناة والمحادثة من النشاط.

from microsoft_agents.hosting.core.turn_context import TurnContext
from microsoft_agents_a365.observability.core import BaggageBuilder
from microsoft_agents_a365.observability.hosting.scope_helpers.populate_baggage import populate

builder = BaggageBuilder()
populate(builder, turn_context)

with builder.build():
    # Baggage is auto-populated from the TurnContext activity
    pass

البرامج الوسيطة للأمتعة

إذا كان وكيلك يستخدم حزمة تكامل الاستضافة، فسجل البرامج الوسيطة للأمتعة لملء الأمتعة تلقائيا لكل طلب وارد. تزيل هذه الخطوة الحاجة إلى استدعاء BaggageBuilder يدويا في كل معالج نشاط.

سجل BaggageMiddleware في مجموعة البرامج للمحول الوسيط. يقوم تلقائيًا باستخراج تفاصيل المتصل والوكيل والمستأجر والقناة والمحادثة من كل عنصر وارد TurnContext ويغلف الطلب ضمن نطاق نقل البيانات.

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

بدلا من ذلك، استخدم ObservabilityHostingManager لتكوين البرامج الوسيطة للأمتعة جنبا إلى جنب مع ميزات الاستضافة الأخرى:

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)

يتجنب الواجهة البرمجية الوسيطة إعداد المعلومات المصاحبة للردود غير المتزامنة (ContinueConversation الأحداث) لتفادي استبدال المعلومات التي قد تم إعدادها بالفعل في الطلب الأصلي.

محلل الرمز المميز

عند استخدام المُصدِّر Agent 365 في Agent 365 SDK 2.0 وما بعده، وفّر محلّل الرموز الذي يعيد الرمز النهائي لقابلية ملاحظة التطبيق فقط لمثيل الوكيل المُصدِّر. المُصدِّر دائمًا يرسل بيانات تتبع الاستخدام إلى مسار S2S ولا يلجأ إلى المسار المفوض كمسار بديل. لا يحتاج مثيل وكيل مسجل في Agent 365 إلى Agent365.Observability.OtelWrite إذن أو موافقة المسؤول للتصدير عبر هذا المسار.

استخدم تبادل الهوية المدارة الاتحادية (FMI) ذي الخطوتين للحصول على الرمز المميز الخاص بالتطبيق فقط:

  1. احصل على رمز Blueprint client_credentials لـ api://AzureADTokenExchange/.default مع تعيين fmi_path على معرّف عميل مثيل الوكيل.
  2. احصل على رمز agent-instance‏ client_credentials لـ api://9b975845-388f-4429-889e-eab1ef63949c/.default. مرر رمز الخطوة 1 كـ client_assertion، واضبط client_assertion_type على urn:ietf:params:oauth:client-assertion-type:jwt-bearer.

للاطلاع على إعداد المصادقة الكامل، انظر Agent 365-enabled باستخدام S2S. للاطلاع على عمليات التنفيذ الكاملة لخدمات الرمز المميز، راجع عينات Agent 365 لـ Node.js وPython و.NET.

يجب أن يكون محلّل الأسماء لديك:

  • يُرجع رمزًا خاصًا بالتطبيق فقط لمثيل عامل التصدير والعميل المستأجر. لا تعيد أبدا إثبات المخطط الوسيط، أو رمز المخطط، أو رمز المستخدم، أو رمز OBO.
  • تحقق من صحة الرمز قبل أن يعيده. قبول idtyp=app. إذا idtyp كان غائبا، اقبل فقط رمزا له مطالبة غير فارغة roles أو مطالبة غير فارغة oid تساوي sub. ارفض الرموز التي لها بيان scp أو قيمة idtyp أخرى، أو الرموز منتهية الصلاحية، أو الرموز التي لا تكون قيمة aud فيها 9b975845-388f-4429-889e-eab1ef63949c أو api://9b975845-388f-4429-889e-eab1ef63949c.
  • احتفظ بالرمز مؤقتا وقم بتحديثه قبل انتهاء صلاحيته. يقوم المصدر باستدعاء المُحدِّد مرة واحدة لكل هوية مستأجر ولكل هوية وكيل في كل دفعة تصدير.

ملحوظة

الانتقال من SDK 1.x: SDK 2.0 يزيل تبادل الرموز المفوض لتصدير المرئية. استبدل رمز التوكن المفوَّض في الوكيل الخاص بك بمُحلِّل خاص بالتطبيق فقط، كما هو موضح في الأمثلة التالية. الوكلاء الذين يبقون على SDK 1.x ويُجرون التصدير عبر المسار المفوض لا يزالون بحاجة إلى الإذن المفوض Agent365.Observability.OtelWrite وموافقة المسؤول. الأمر a365 setup all لا يضبط هذا الإذن لوكلاء Blueprint. لمنح هذا الإذن، راجع امنح الإذن.

أجرِ مكالمة AgenticTokenCache.refresh_observability_token(agent_id, tenant_id, acquire_app_only_obs_token) من token_resolver. تمرر ذاكرة التخزين المؤقت نطاق إمكانية المراقبة /.default إلى استدعاء acquisition callback الخاص بك وتُعيد الرمز المميز المخزن مؤقتًا.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.hosting.token_cache_helpers import AgenticTokenCache

cache = AgenticTokenCache()

async def acquire_app_only_obs_token(
    agent_id: str,
    tenant_id: str,
    scopes: list[str],
) -> str:
    # Run the FMI exchange described earlier, validate the token, and return it.
    return "<app-only-observability-token>"

async def token_resolver(agent_id: str, tenant_id: str) -> str:
    return await cache.refresh_observability_token(
        agent_id, tenant_id, acquire_app_only_obs_token
    )

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_resolver,
)

يدعم Python أيضًا مُحلِّل أسماء متزامنًا يعيد رمزًا من ذاكرة تخزين مؤقت آمنة للخيوط. تستخدم عينات Agent 365 هذا النمط، مما يتجنب قيود تشغيل محلل غير متزامن على خيط المصدّر.

للانتقال من SDK 1.x، قم بإزالة النداء AGENT_APP.auth.exchange_token الذي طلب نطاق إمكانية الملاحظة والاستدعاء AgenticTokenCache.register_observability الذي مرر AgenticTokenStruct. في SDK 2.0، register_observability هو no-op مهمَل.

التجهيز التلقائي

يستمع التنميط التلقائي إلى إشارات القياس عن بعد الخاصة بالأطر الوكيلة (SDKs) بشكل تلقائي للتتبعات، ثم يحيلها إلى خدمة Agent 365 للرصد. تلغي هذه الميزة الحاجة للمطورين لكتابة كود المراقبة يدويا، وتبسط الإعداد، وتضمن تتبع الأداء المتسق.

Important

تملأ الأجهزة التلقائية سمات OTel القياسية فقط. يجب إضافة سمات خاصة Microsoft من خلال BaggageBuilder. لمعرفة السمات المفقودة، تحقق من صحة إخراج نطاق وحدة التحكم مقابل سجلات المتجر لمجموعة diff.

تدعم عدة مجموعات تطوير ومنصات تقنية القياس التلقائي:

المنصة SDKs / أطر العمل المدعومة
.NET نواة دلالية، OpenAI، Agent Framework
Python نواة دلالية، OpenAI، Agent Framework، LangChain
Node.js OpenAI،لانغتشين

ملحوظة

يختلف دعم الأجهزة التلقائية حسب النظام الأساسي وتنفيذ SDK.

النواة الدلالية

يتطلب القياس التلقائي استخدام منشئ baggage. قم بتعيين معرف الوكيل ومعرف المستأجر باستخدام BaggageBuilder.

تثبيت الحزمة.

pip install microsoft-agents-a365-observability-extensions-semantic-kernel

تهيئة قدرات المراقبة.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.semantickernel.trace_instrumentor import SemanticKernelInstrumentor

# Configure observability
configure(
    service_name="my-semantic-kernel-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = SemanticKernelInstrumentor()
instrumentor.instrument()

# Your Semantic Kernel code is now automatically traced

OpenAI

يتطلب القياس التلقائي استخدام منشئ Baggage. قم بتعيين معرف الوكيل ومعرف المستأجر باستخدام BaggageBuilder.

تثبيت الحزمة.

pip install microsoft-agents-a365-observability-extensions-openai

تهيئة قدرات المراقبة.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.openai import OpenAIAgentsTraceInstrumentor

# Configure observability
configure(
    service_name="my-openai-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = OpenAIAgentsTraceInstrumentor()
instrumentor.instrument()

# Your OpenAI Agents code is now automatically traced

إطار عمل الوكيل

يتطلب التجهيز التلقائي استخدام منشئ الـ baggage. قم بتعيين معرف الوكيل ومعرف المستأجر باستخدام BaggageBuilder.

تثبيت الحزمة.

pip install microsoft-agents-a365-observability-extensions-agent-framework

تهيئة قدرات المراقبة.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.agentframework import (
    AgentFrameworkInstrumentor,
)

# Configure observability
configure(
    service_name="AgentFrameworkTracingWithAzureOpenAI",
    service_namespace="AgentFrameworkTesting",
)

# Enable auto-instrumentation
AgentFrameworkInstrumentor().instrument()

إطار عمل LangChain

ملحوظة

يدعم التجهيز التلقائي لأطر عمل LangChain أيضًا كلاً من LangGraph وDeep Agents. يلتقط نفس الملحق تلقائيا بيانات تتبع الاستخدام للعوامل المبنيين باستخدام أي من هذه الأطر.

تتطلب الأجهزة الآلية اِسْتِخْدَام منشئ الأمتعة. قم بتعيين معرف الوكيل ومعرف المستأجر باستخدام BaggageBuilder.

تثبيت الحزمة.

pip install microsoft-agents-a365-observability-extensions-langchain

تهيئة قدرات المراقبة.

from microsoft_agents_a365.observability.core.config import configure
from microsoft_agents_a365.observability.extensions.langchain import CustomLangChainInstrumentor

# Configure observability
configure(
    service_name="my-langchain-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
CustomLangChainInstrumentor()

# Your LangChain code is now automatically traced

الأدوات اليدوية

استخدم SDK قابلية المراقبة لـ Agent 365 لفهم العمل الداخلي للوكيل البرمجي. يوفر SDK النطاقات التي يمكنك بدء تشغيلها: InvokeAgentScopeو ExecuteToolScopeInferenceScopeو و.OutputScope

استدعاء الوكيل

استخدم هذا النطاق في بداية عملية وكيلك. باستخدام نطاق وكيل الاستدعاء، يمكنك التقاط خصائص مثل الوكيل الحالي الذي يتم استدعاؤه، وبيانات مستخدم الوكيل، والمزيد.

from microsoft_agents_a365.observability.core import (
    InvokeAgentScope,
    InvokeAgentScopeDetails,
    AgentDetails,
    CallerDetails,
    UserDetails,
    Channel,
    Request,
    ServiceEndpoint,
)

agent_details = AgentDetails(
    agent_id="agent-456",
    agent_name="My Agent",
    agent_description="An AI agent powered by Azure OpenAI",
    agentic_user_id="auid-123",
    agentic_user_email="agent@contoso.com",
    agent_blueprint_id="blueprint-789",
    tenant_id="tenant-123",
)

scope_details = InvokeAgentScopeDetails(
    endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)

request = Request(
    content="User asks a question",
    session_id="session-42",
    conversation_id="conv-xyz",
    channel=Channel(name="msteams"),
)

caller_details = CallerDetails(
    user_details=UserDetails(
        user_id="user-123",
        user_email="jane.doe@contoso.com",
        user_name="Jane Doe",
    ),
)

with InvokeAgentScope.start(request, scope_details, agent_details, caller_details):
    # Perform agent invocation logic
    response = call_agent(...)

تنفيذ الأدوات

الأمثلة التالية توضح كيفية إضافة تتبع قابلية الملاحظة إلى تنفيذ أداة وكيلك. يلتقط هذا التتبع بيانات التليمترية لأغراض المراقبة والتدقيق.

from microsoft_agents_a365.observability.core import (
    ExecuteToolScope,
    ToolCallDetails,
    Request,
    ServiceEndpoint,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

tool_details = ToolCallDetails(
    tool_name="summarize",
    tool_type="function",
    tool_call_id="tc-001",
    arguments="{'text': '...'}",
    description="Summarize provided text",
    endpoint=ServiceEndpoint(hostname="tools.contoso.com", port=8080),
)

with ExecuteToolScope.start(request, tool_details, agent_details) as scope:
    result = run_tool(tool_details)
    scope.record_response(result)

استدلال

تظهر الأمثلة التالية كيفية تجهيز استدعاءات استدلال النموذج بالذكاء الاصطناعي بتتبع إمكانية المراقبة لالتقاط استخدام الرموز المميزة وتفاصيل النموذج والبيانات الوصفية للاستجابة.

from microsoft_agents_a365.observability.core import (
    InferenceScope,
    InferenceCallDetails,
    InferenceOperationType,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

inference_details = InferenceCallDetails(
    operationName=InferenceOperationType.CHAT,
    model="gpt-4o-mini",
    providerName="azure-openai",
    inputTokens=123,
    outputTokens=456,
    finishReasons=["stop"],
)

with InferenceScope.start(request, inference_details, agent_details) as scope:
    completion = call_llm(...)
    scope.record_output_messages([completion.text])
    scope.record_input_tokens(completion.usage.input_tokens)
    scope.record_output_tokens(completion.usage.output_tokens)

الإخرَاج

استخدم هذا النطاق للسيناريوهات غير المتزامنة حيث InvokeAgentScopeExecuteToolScope، أو ، أو InferenceScope لا يمكن التقاط بيانات الإخراج بشكل متزامن. ابدأ OutputScope كامتداد فرعي لتسجيل رسائل الإخراج النهائية بعد انتهاء النطاق الأصل.

from microsoft_agents_a365.observability.core import (
    OutputScope,
    Response,
    SpanDetails,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

# Get the parent context from the originating scope
parent_context = invoke_scope.get_context()

response = Response(messages=["Here is your organized inbox with 15 urgent emails."])

with OutputScope.start(
    request,
    response,
    agent_details,
    span_details=SpanDetails(parent_context=parent_context),
):
    # Output messages are recorded automatically from the response
    pass

التحقق محليا

للتحقق من أنك دمجمت بنجاح مع SDK قابلية الملاحظة، افحص سجلات الكونسول التي يولدها وكيلك والسجلات من SDK قابلية الملاحظة.

قم بتعيين متغير البيئة ENABLE_A365_OBSERVABILITY_EXPORTER الى false. هذا الإعداد يصدر (traces) إلى وحدة التحكم.

للتحقيق في فشل التصدير، قم بتمكين التسجيل المطول عن طريق الإعداد ENABLE_A365_OBSERVABILITY_EXPORTER إلى true وتكوين تسجيل تتبع الأخطاء في بدء تشغيل التطبيق الخاص بك:

import logging

logging.basicConfig(level=logging.DEBUG)
logging.getLogger("microsoft_agents_a365.observability.core").setLevel(logging.DEBUG)

# Or target only the exporter:
logging.getLogger(
    "microsoft_agents_a365.observability.core.exporters.agent365_exporter"
).setLevel(logging.DEBUG)

رسائل السجل الرئيسية:

DEBUG  Token resolved for agent {agentId} tenant {tenantId}
DEBUG  Exporting {n} spans to {url}
DEBUG  HTTP 200 - correlation ID: abc-123
ERROR  Token resolution failed: {error}
ERROR  HTTP 401 exporting spans - correlation ID: abc-123
INFO   No spans with tenant/agent identity found; nothing exported.

عرض السجلات المصدرة

لعرض القياس عن بُعد للوكلاء في Microsoft Purview أو Microsoft Defender، تأكد من استيفاء المتطلبات التالية:

التحقق من جاهزية النشر في المتجر

Important

للتحقق من صحة المتجر بنجاح، يجب على الوكيل تنفيذ النطاقات InvokeAgentScope, InferenceScope, وExecuteToolScope. هذه النطاقات الثلاثة مطلوبة للنشر.

قبل النشر، استخدم سجلات وحدة التحكم للتحقق من صحة تكامل إمكانية المراقبة للعامل عن طريق تنفيذ invoke agentexecute toolinferenceالنطاقات المطلوبة و.output ثم قارن سجلات وكيلك مع قوائم السمات التالية للتحقق من وجود جميع السمات المطلوبة. التقط السمات على كل منظار أو من خلال أداة بناء الأمتعة، وأضف سمات اختيارية حسب تقديرك.

لمزيد من المعلومات حول متطلبات النشر في المتجر، راجع إرشادات التحقق من صحة المتجر.

InvokeAgentScope سمات

تلخص القائمة التالية سمات القياس عن بعد المطلوبة والاختيارية المسجلة عند بدء InvokeAgentScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "microsoft.a365.caller.agent.blueprint.id": "Optional",
        "microsoft.a365.caller.agent.id": "Optional",
        "microsoft.a365.caller.agent.name": "Optional",
        "microsoft.a365.caller.agent.platform.id": "Optional",
        "microsoft.a365.caller.agent.user.email": "Optional",
        "microsoft.a365.caller.agent.user.id": "Optional",
        "microsoft.a365.caller.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "server.address": "Required",
        "server.port": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

ExecuteToolScope سمات

تلخص القائمة التالية سمات القياس عن بعد المطلوبة والاختيارية المسجلة عند بدء ExecuteToolScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.tool.call.arguments": "Required",
        "gen_ai.tool.call.id": "Required",
        "gen_ai.tool.call.result": "Required",
        "gen_ai.tool.description": "Optional",
        "gen_ai.tool.name": "Required",
        "gen_ai.tool.type": "Required",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

InferenceScope سمات

تلخص القائمة التالية سمات القياس عن بعد المطلوبة والاختيارية المسجلة عند بدء InferenceScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.a365.agent.thought.process": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "gen_ai.provider.name": "Required",
        "gen_ai.request.model": "Required",
        "gen_ai.response.finish_reasons": "Optional",
        "gen_ai.usage.input_tokens": "Optional",
        "gen_ai.usage.output_tokens": "Optional",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.tenant.id": "Required"
    }

OutputScope سمات

تلخص القائمة التالية سمات القياس عن بعد المطلوبة والاختيارية المسجلة عند بدء OutputScope. استخدم هذا النطاق للسيناريوهات غير المتزامنة حيث لا يمكن للنطاق الأصل التقاط بيانات الإخراج بشكل متزامن.

"attributes": {
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

اختبر وكيلك بقدرات المراقبة

بعد تنفيذ إمكانية الملاحظة في وكيلك، اختبره للتأكد من أنه يلتقط البيانات عن بعد بشكل صحيح. اتبع دليل الاختبار لإعداد بيئتك. بعد ذلك، ركز بشكل أساسي على قسم View observability logs للتحقق من أن تنفيذ إمكانية المراقبة يعمل كما هو متوقع.

التحقق:

  • انتقل إلى: https://admin.cloud.microsoft/#/agents/all
  • اختر نشاط وكيلك >
  • ترى جلسات العمل ومكالمات الأدوات

استكشاف الأخطاء وإصلاحها

يصف هذا القسم المشكلات الشائعة عند تنفيذ واستخدام قابلية الملاحظة.

المشكلة الوصف
لا تظهر بيانات إمكانية المراقبة لا تظهر أي بيانات قياس عن بُعد لأنه لم يتم تمكين التصدير، أو لأن التكوين غير صحيح، أو لأن تحليل الرمز المميز فشل.
معرف المستأجر المفقود أو معرف العامل - تم تخطي الامتدادات تُسقَط النطاقات قبل التصدير عندما تكون سمات الهوية المطلوبة للتقسيم مفقودة.
فشل حل الرمز المميز - تصدير تم تخطيه أو غير مصرح به يفشل التصدير عندما لا يعيد مُحلِّل المرجع أي رمز أو يواجه استثناءً.
HTTP 401 غير مصرح به تنجح المصادقة من الناحية التركيبية ولكن الرمز المميز غير صالح للاستيعاب بسبب النطاق أو النوع أو انتهاء الصلاحية.
HTTP 403 ممنوع يتم رفض الوصول بسبب ثغرات في ترخيص المستأجر، أو فقدان تسجيل Agent 365، أو فقدان إذن قابلية الملاحظة إذا كان مطلوبا.
HTTP 403 ممنوع - عدم تطابق معرف العامل يتم رفض الطلب عندما لا تتطابق هوية العامل في عنوان URL مع الهوية الممثلة بالرمز المميز.
أخطاء HTTP 429 أو 5xx - أخطاء عابرة يؤدي التقييد المؤقت أو حالات الفشل من جانب الخدمة إلى مقاطعة التصدير وقد يتطلب ضبطا لإعادة المحاولة.
مهلة التصدير تتجاوز دفعات القياس عن بُعد نوافذ المهلة المحددة بسبب زمن انتقال الشبكة أو بطء استجابة نقطة النهاية.
ينجح التصدير ولكن بيانات تتبع الاستخدام لا تظهر في Defender أو Purview يكتمل الاستيراد، ولكن يتأخر ظهور البيانات في المراحل اللاحقة أو يُمنع بسبب المتطلبات الأساسية للمنتج.

Tip

يحتوي دليل استكشاف أخطاء العميل 365 على توصيات عالية المستوى لحل المشاكل، وأفضل الممارسات، وروابط لمحتوى استكشاف الأخطاء لكل جزء من دورة تطوير الوكيل 365.

بيانات إمكانية الملاحظة لا تظهر

الأعراض:

  • العميل يهرب
  • لا يوجد تتبع في مركز الإدارة
  • لا يمكن رؤية نشاط العميل

السبب الجذري:

  • الملاحظة غير مفعلة
  • أخطاء التكوين
  • مشاكل حل الرموز

الحلول: جرب الخطوات التالية لحل المشكلة:

  • التحقق من تمكين مُصدِّر إمكانية المراقبة

    يجب تمكين مُصدّر Agent 365 بشكل واضح. عند التعطيل، يعود SDK إلى مُصدّر وحدة التحكم ولا يتم إرسال البيانات الحيوية إلى الخدمة. للحصول على تفاصيل التكوين، راجع التكوين.

  • التحقق من تكوين محلل الرمز المميز

    يتطلب المُصدِّر مُحدِّد رموز صالحًا يُعيد رمز قابلية الملاحظة الخاص بالتطبيق فقط لكل طلب تصدير. إذا كان المحلِّل مفقودًا، أو لم يُعِد رمزًا، أو يطرح استثناءً، فلا يرسل التصدير طلبًا. تأكد من أن كودك ينفذ محلّل التوكن. للحصول على التفاصيل، راجع محلل الرمز المميز.

  • تحقق من الأخطاء في السجلات

    فعّل تسجيل المعلومات بشكل موسع واستخدم الأمر az webapp log tail للبحث في السجلات عن الأخطاء المتعلقة بقابلية المراقبة. للحصول على تفاصيل حول كيفية تمكين التسجيل لكل نظام أساسي، راجع التحقق محليا.

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • تحقق من تصدير القياس عن بعد

    تأكد من أنه تم توليد القياس عن بعد وتصديره كما هو متوقع.

    • أضف مُصدِّر وحدة التحكم وتحقق مما إذا كانت القياسات البُعادية تُنتَج محلياً. للحصول على تفاصيل حول كيفية استخدام مصدر وحدة التحكم والتحقق من صحة الإخراج، راجع التحقق محليا.

معرف المستأجر أو معرف الوكيل مفقود — تم تخطي النطاقات

اعراض: يتجاهل النظام بصمت العمليات ولا يصدرها مطلقًا. تسجل بعض SDKs عدد الامتدادات التي تم تخطيها أو رسالة مثل "لم يتم العثور على أي امتدادات مع هوية المستأجر/العامل." بينما يسقطها الآخرون دون تسجيل الدخول.

القرار:

  • قبل التصدير، تمتد أقسام SDK حسب هوية المستأجر والعامل. يفلت النظام نطاقات تفتقر إما إلى معرف مستأجر أو معرف عامل ولا ترسلها أبدا إلى الخدمة.
  • تأكد من إعداد BaggageBuilder مع معرف المستأجر ومعرف الوكيل قبل إنشاء المَتَتالَبات. تنتشر هذه القيم من خلال سياق OpenTelemetry وترتبط بجميع الامتدادات التي تم إنشاؤها ضمن نطاق الحمولة. للحصول على واجهة برمجة التطبيقات الخاصة بالنظام الأساسي، راجع سمات الأمتعة.
  • تأكد من TurnContext أن النشاط لديه مستلم صالح له هوية الوكيل إذا كنت تستخدم برنامج وسيط الأمتعة أو تحويل مساعد السياق من حزمة تكامل الاستضافة لملء هذه المعرفات.

فشل حل الرمز المميز — تصدير تم تخطيه أو غير مصرح به

الأعراض: يعيد null، أو يعيد مُفسِّر الرمز المميز رمزًا فارغًا، أو يطرح خطأ. يفشل التصدير دون إرسال طلب، ولا يلجأ المُصدِّر إلى المسار المفوض.

القرار:

  • توفير مُفسِّر يعيد رمز إمكانية الملاحظة النهائي الخاص بالتطبيق فقط لمثيل وكيل التصدير والمستأجر.
  • تأكد من استخدام معرف المستأجر الصحيح ومعرف العامل ل BaggageBuilder، لأنه يتم تمرير هذه القيم إلى محلل الرمز المميز.
  • تحقق من سلوك بدء التشغيل الخاص باللغة. يفشل Node.js في التكوين عندما يكون exporter الخاص بـ Agent 365 مفعّلًا بدون resolver، ويفشل .NET في إنشاء الـ exporter، ويعود Python إلى console exporter عندما لا يكون هناك resolver مُكوَّن.
  • تحقق من أن المُحلِّل يتحقق من صحة الرمز قبل إرجاعه. يجب أن ترفض الرموز المفوضة التي تحمل مطالبة scp والرموز الصادرة للجمهور المستهدف الخطأ.

HTTP 401 غير مصرح به

اعراض: فشل التصدير مع HTTP 401. لا يقوم المصدر بإعادة محاولة هذا الخطأ.

القرار:

  • تحقق من أن قيمة audience للرمز هي 9b975845-388f-4429-889e-eab1ef63949c أو api://9b975845-388f-4429-889e-eab1ef63949c.
  • تحقق من أن مُحلِّل الرمز المميز لا يعيد رمز مستخدم مفوض، أو رمزًا يتضمن مطالبة scp، أو رمزًا لجمهور غير صحيح، أو رمزًا مميزًا منتهي الصلاحية.
  • تأكد من أن المُحلِّل يعيد رمز مثيل الوكيل النهائي، وليس توكيد المخطط الوسيط.

HTTP 403 ممنوع

اعراض: فشل التصدير مع HTTP 403. لا يقوم المصدر بإعادة محاولة هذا الخطأ.

السبب الجذري: يمكن أن يكون لخطأ HTTP 403 أسباب مختلفة. تحقق من الإعدادات التالية بالترتيب.

القرار:

  • الترخيص مفقود — تأكد من أن المستأجر لديه أحد التراخيص التالية المعينة في مركز إدارة Microsoft 365:

    • اختبار - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft وكيل فورنتير 365
  • مثيل الوكيل غير مسجل — يقبل مسار S2S رمزًا مميزًا خاصًا بالتطبيق فقط من مثيل وكيل مسجل في Agent 365، من دون الدور Agent365.Observability.OtelWrite وإلا، فإنه يعيد HTTP 403 insufficient_scope. بالنسبة لوكلاء المخطط، a365 setup all يسجل مثيل الوكيل. لإعادة محاولة عملية تسجيل فاشلة، شغل a365 setup all --agent-registration-only. إنشاء هوية Microsoft Entra وحده لا يسجل مثيل الوكيل.

  • الرمز ليس للتطبيق فقط — تحقق من أن الرمز لا يتضمن scp claim. يتطلب مسار S2S رمزًا مميزًا خاصًا بالتطبيق فقط.

  • الهوية غير المسجلة تفتقر إلى دور التطبيق (App role) — الهويات غير المسجلة، بما في ذلك تسجيلات التطبيقات القياسية التي يستخدمها وكلاء المحرك المخصص، تحتاج إلى Agent365.Observability.OtelWrite دور التطبيق (App role). لمنحه، انظر امنح الإذن.

  • وكيل SDK 1.x على المسار المفوض — يحتاج المسار المفوض إلى إذن مفوض Agent365.Observability.OtelWrite وموافقة المسؤول، والتي a365 setup all لا تضبط لوكلاء Blueprint. قم بالترقية إلى SDK 2.0، أو امنح الإذن.

  • معرف الوكيل لا يطابق الرمز — انظر HTTP 403 ممنوع - عدم تطابق معرف الوكيل.

HTTP 403 ممنوع — عدم تطابق معرف الوكيل

الأعراض: يفشل التصدير مع HTTP 403 ورسالة خادم مشابهة لـ 403 Forbidden مع agent-ID-mismatch من حالات الفشل عند استدعاء نقاط نهاية التتبع الخاصة بـ Agent 365.

السبب الجذري: يحدث هذا الخطأ عند استخدام معرف عميل المخطط بدلا من معرف عميل مثيل العامل عند تعيين تفاصيل العامل. لا يتطابق معرف العامل في عنوان URL للتصدير مع الهوية المعتمدة من قبل الرمز المميز، لذلك ترفض نقطة نهاية التتبع الطلب.

القرار:

  • تحقق مما إذا كان معرف المستأجر قد تمت إضافته إلى قائمة المستأجرين المسموح بها ل Agent 365.
  • تعيين تفاصيل العامل مع معرف عميل مثيل العامل (وليس معرف عميل المخطط).
  • تحقق من عنوان URL للتصدير الذي تم إنشاؤه - يتم تسجيله إذا قمت بتمكين المسجل. تأكد من أن معرف العامل في عنوان URL يطابق معرف عميل مثيل العامل.
  • لتمكين التسجيل التشخيصي لكل SDK، راجع التحقق محليا.

أخطاء HTTP 429 أو 5xx - أخطاء عابرة

اعراض: فشل التصدير مع رمز حالة HTTP عابر مثل 429 أو 5xx.

القرار:

  • عادة ما تكون هذه الأخطاء عابرة وتحل من تلقاء نفسها. تقوم حزم تطوير البرمجيات Python وJavaScript بإعادة المحاولة تلقائياً عند مواجهة رموز حالة HTTP 408 و429 و5xx حتى ثلاث مرات، باستخدام طريقة التراجع الأسي. لا تتم إعادة محاولة .NET SDK تلقائيا.
  • إذا استمرت الأخطاء، فتحقق من لوحة معلومات حماية الخدمة.
  • ضع في اعتبارك تقليل تكرار التصدير عن طريق زيادة التأخير المجدول بين الدفعات أو زيادة الحد الأقصى لحجم دفعة التصدير. للحصول على خيارات التكوين لكل نظام أساسي، راجع الجدول في Agent365ExporterOptionsالتكوين.

مهلة التصدير

الأعراض: انتهت مدة محاولات التصدير.

القرار:

  • تحقق من اتصال الشبكة بنقطة نهاية إمكانية المراقبة.
  • تختلف إعدادات المهلة الافتراضية حسب المنصة. مهلة طلب HTTP الافتراضية هي 30 ثانية. تحتوي بعض SDKs أيضا على مهلة مصدرة شاملة منفصلة تغطي دورة التصدير بأكملها بما في ذلك عمليات إعادة المحاولة. للحصول على الخصائص والإعدادات الافتراضية الدقيقة لكل نظام أساسي، راجع Agent365ExporterOptions الجدول في التكوين.
  • إذا كانت المهلات تحدث بشكل متكرر، فقم بزيادة قيمة المهلة ذات الصلة في خيارات المصدر.

ينجح التصدير ولكن بيانات تتبع الاستخدام لا تظهر في Defender أو Purview

Symptoms: تعرض السجلات تصديرا ناجحا ولكن بيانات تتبع الاستخدام غير مرئية في Microsoft Defender أو Microsoft Purview.

القرار:

  • تحقق من تلبية المتطلبات الأساسية لعرض السجلات المصدرة. بالنسبة إلى Purview، يجب تشغيل التدقيق. بالنسبة Defender، يجب تكوين التتبع المتقدم. لمزيد من المعلومات، راجع عرض السجلات المصدرة.
  • يمكن أن يستغرق القياس عن بعد عدة دقائق للتعبئة بعد التصدير الناجح. انتظر حتى تظهر البيانات قبل إجراء مزيد من التحقيق.

لمعرفة المزيد حول اختبار إمكانية المراقبة، راجع: