Microsoft مربع أدوات Foundry

مربع أدوات Microsoft Foundry عبارة عن مجموعة من تكوينات الأدوات المستضافة المسماة والمصدارة من جانب الخادم، مثل مترجم التعليمات البرمجية والبحث عن الملفات وإنشاء الصور وMCP والبحث على الويب. تتيح لك مربعات الأدوات إدارة تكوين الأدوات مرة واحدة في Foundry وإعادة استخدامه عبر العوامل.

يغطي إطار عمل العامل استهلاك مربع الأدوات. إنشاء وتحديث إصدارات مربع الأدوات من خلال مدخل Foundry أو azure-ai-projects SDK.

Important

FoundryToolbox يتم توفيرها بواسطة حزمة بيتا agent-framework-foundry-hosting ويمكن أن تتغير قبل الإصدار المستقر.

بالنسبة إلى خدمة مدارة FoundryAgent، قم بإرفاق مربع الأدوات بتعريف العامل في Foundry. إرشادات استهلاك .NET Toolbox من جانب العميل غير موثقة حاليا.

ثبت الحزم

pip install agent-framework-foundry-hosting agent-framework-foundry --pre

FoundryToolbox يتم استيرادها من agent_framework.foundry وتوفيرها بواسطة agent-framework-foundry-hosting.

تكوين مربع الأدوات

تعيين نقطة نهاية MCP ل Toolbox صريحة:

TOOLBOX_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<name>/mcp?api-version=v1"

أو اسمح FoundryToolbox بإنشاء نقطة النهاية:

FOUNDRY_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
TOOLBOX_NAME="<toolbox-name>"

تستخدم AZURE_AI_MODEL_DEPLOYMENT_NAME نماذج الوكيل المستضاف أيضا ل FoundryChatClient.

استخدام FoundryToolbox مع عامل مستضاف

FoundryToolboxيحل نقطة النهاية الخاصة به، ويصادق كل طلب MCP مع بيانات اعتماد Azure المتوفرة، ويحيل معرف استدعاء Foundry لكل طلب، ويشارك في دورة حياة اتصال العامل.

import asyncio
import os

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox, ResponsesHostServer
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()


async def main():
    credential = DefaultAzureCredential()

    # FoundryToolbox resolves the toolbox endpoint from the environment
    # (TOOLBOX_ENDPOINT, or FOUNDRY_PROJECT_ENDPOINT + TOOLBOX_NAME), authenticates
    # every request with the credential, and transparently forwards the platform
    # per-request call-id to the toolbox. The hosting server enters the agent, which
    # connects the toolbox on first use and closes it at shutdown.
    toolbox = FoundryToolbox(credential)

    # Create the chat client
    client = FoundryChatClient(
        project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
        credential=credential,
    )

    agent = Agent(
        client=client,
        instructions="You are a friendly assistant. Keep your answers brief.",
        tools=toolbox,
        # History will be managed by the hosting infrastructure, thus there
        # is no need to store history by the service. Learn more at:
        # https://developers.openai.com/api/reference/resources/responses/methods/create
        default_options={"store": False},
    )

    server = ResponsesHostServer(agent)
    await server.run_async()

كشف مهارات مربع الأدوات

يمكن أن يعرض مربع الأدوات مهارات العامل عبر MCP. قم بتعيين load_tools=False متى يجب أن تكون المهارات فقط مرئية للنموذج، ثم أضف Toolbox كأداة بحيث تتصل جلسة MCP الخاصة بها وتستخدم as_skills_provider() كموفر سياق.

import asyncio
import os

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox, ResponsesHostServer
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()


async def main() -> None:
    credential = DefaultAzureCredential()

    # FoundryToolbox resolves the toolbox endpoint from the environment
    # (TOOLBOX_ENDPOINT, or FOUNDRY_PROJECT_ENDPOINT + TOOLBOX_NAME), authenticates
    # every request with the credential, and forwards the platform per-request
    # call-id. ``load_tools=False`` keeps the toolbox's tools hidden so only its
    # Agent Skills (SEP-2640) are surfaced; passing it via ``tools=`` connects the
    # MCP session that ``as_skills_provider()`` reads from.
    toolbox = FoundryToolbox(credential, load_tools=False)

    # as_skills_provider() discovers skills from skill://index.json on the toolbox
    # MCP session and exposes them as an agent context provider; SKILL.md bodies are
    # fetched on demand via resources/read. disable_load_skill_approval=True registers
    # the load_skill tool with approval_mode="never_require" so this unattended agent
    # can load skills without an approval round-trip -- the Responses host runs the
    # agent without an AgentSession, which the default approval flow requires.
    skills_provider = toolbox.as_skills_provider(disable_load_skill_approval=True)

    client = FoundryChatClient(
        project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
        credential=credential,
    )

    agent = Agent(
        client=client,
        name=os.environ.get("AGENT_NAME", "hosted-toolbox-mcp-skills"),
        instructions="You are a helpful assistant.",
        tools=toolbox,
        context_providers=[skills_provider],
        # History will be managed by the hosting infrastructure, thus there
        # is no need to store history by the service. Learn more at:
        # https://developers.openai.com/api/reference/resources/responses/methods/create
        default_options={"store": False},
    )

    server = ResponsesHostServer(agent)
    await server.run_async()

تظل الموافقة ممكنة بشكل افتراضي لعمليات المهارة. تعطيل الموافقات الفردية فقط للسيناريوهات الموثوق بها وغير المراقب.

استخدام مربع أدوات مع FoundryAgent

إرفاق Toolbox بتعريف Prompt أو Hosted Agent في Foundry. FoundryAgent يستخدم تكوين الأداة المخزنة؛ لا يؤدي تمرير جانب عميل Toolbox إلى إضافته إلى العامل المدار.

الاتصال من خلال MCP الخام

استخدم MCPStreamableHTTPTool مباشرة عندما لا يستخدم التطبيق برنامج تضمين الاستضافة FoundryToolbox . قم بتوفير نقطة نهاية مربع الأدوات ورمز حامل Entra ID من خلال header_provider.

import asyncio
import os
from collections.abc import Callable
from typing import Any, cast

from agent_framework import Agent, MCPStreamableHTTPTool
from agent_framework.foundry import FoundryChatClient
from azure.core.credentials import TokenCredential
from azure.identity import AzureCliCredential, DefaultAzureCredential, get_bearer_token_provider
from dotenv import load_dotenv
def make_toolbox_header_provider(credential: TokenCredential) -> Callable[[dict[str, Any]], dict[str, str]]:
    """Build a header_provider that injects a fresh Azure AI bearer token on every MCP request."""
    get_token = get_bearer_token_provider(credential, "https://ai.azure.com/.default")

    def provide(_kwargs: dict[str, Any]) -> dict[str, str]:
        return {
            "Authorization": f"Bearer {get_token()}",
        }

    return provide


async def main() -> None:
    credential = DefaultAzureCredential()

    toolbox_tool = MCPStreamableHTTPTool(
        name="foundry_toolbox",
        description="Tools exposed by the configured Foundry toolbox",
        url=os.environ["FOUNDRY_TOOLBOX_ENDPOINT"],
        header_provider=make_toolbox_header_provider(credential),
        load_prompts=False,
    )

    async with Agent(
        client=FoundryChatClient(
            project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
            model=os.environ["FOUNDRY_MODEL"],
            credential=credential,
        ),
        instructions="You are a helpful assistant. Use the available toolbox tools to answer the user.",
        tools=toolbox_tool,
    ) as agent:
        query = "What tools do you have access to?"
        print(f"User: {query}")
        result = await agent.run(query)
        print(f"Assistant: {result}")

يستخدم FOUNDRY_TOOLBOX_ENDPOINTنموذج المستوى الأدنى . يستخدم FOUNDRY_TOOLBOX_MCP_SERVER_URLنموذج مهارات مربع الأدوات ؛ تنتمي هذه الأسماء إلى تلك العينات وهي منفصلة FoundryToolbox عن إعدادات TOOLBOX_ENDPOINT الفئة والإعدادات TOOLBOX_NAME .

Limitations

  • تستخدم أدوات MCP داخل مربع الأدوات المصادقة من جانب الخادم من خلال Foundry project_connection_id؛ لا يحتفظ عميل Agent Framework بالرمز المميز لحامل MCP المصدر.
  • يتطلب استهلاك مربع أدوات كخادم MCP مصادقة Entra ID من جانب العميل لنقطة نهاية مربع الأدوات.
  • تتم معالجة استجابات تدفق الموافقة مثل CONSENT_REQUIRED أثناء تشغيل العامل، وليس أثناء إنشاء اتصال مربع الأدوات.

Samples

عينة Description
foundry_toolbox/main.py FoundryToolbox مع عامل استجابات مستضاف
foundry_toolbox_mcp_skills/main.py مهارات العامل المدعومة من مربع الأدوات
foundry_chat_client_with_toolbox.py استهلاك MCP في مربع الأدوات مع MCPStreamableHTTPTool
foundry_chat_client_with_toolbox_skills.py تكوين المهارات المدعومة من مربع الأدوات
invoke_foundry_toolbox_mcp استهلاك MCP من جانب سير العمل

لا يعرض Go حاليا مساعد "مربع أدوات Foundry". تكوين مربعات الأدوات من خلال Foundry واستخدام إعلانات الأدوات المحلية أو المستضافة المدعومة لوكلاء Go.