ضوء تشعبي

الإضاءة التشعبية هي الخلفية الموثقة حاليا ل CodeAct في إطار عمل العامل. يعرض أداة execute_code مدعومة بوقت تشغيل بيئة الاختبار المعزولة ويمكنه استدعاء أدوات المضيف المملوكة للموفر من خلال call_tool(...).

يستخدم هذا التكامل نمط CodeAct: يساهم الموفر بأداة تنفيذ التعليمات البرمجية ويدير بيئة التنفيذ حول كل تشغيل.

للحصول على نظرة عامة على مستوى النمط، راجع CodeAct.

لماذا Hyperlight CodeAct

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

تقوم CodeAct المدعومة بضوء تشعبي بطي هذه الحلقة. يكتب النموذج برنامجا قصيرا واحدا Python، وتنفذه بيئة الاختبار المعزولة مرة واحدة، ويتم الوصول إلى الأدوات المملوكة للموفر من داخل بيئة الاختبار المعزولة باستخدام call_tool(...). في أحمال العمل التمثيلية كثيفة الأدوات، يمكن أن يؤدي هذا التحول إلى خفض زمن الانتقال تقريبا إلى نصف واستخدام الرمز المميز بأكثر من 60%، مع الحفاظ على التنفيذ معزولا وقابلا للتدقيق.

تثبيت الحزمة

dotnet add package Microsoft.Agents.AI.Hyperlight --prerelease

Microsoft.Agents.AI.Hyperlight يشحن بشكل منفصل عن التجريدات الأساسية، لذلك لا تأخذ سوى وقت تشغيل بيئة الاختبار المعزولة عندما تحتاج إليه.

Important

حزمة .NET قيد المعاينة. يعتمد ذلك على حزمة Hyperlight.HyperlightSandbox.Api NuGet من hyperlight-dev/hyperlight-sandbox؛ حتى يتم نشر هذه التبعية nuget.org سيفشل المشروع في الاستعادة. تعقب مستودع بيئة الاختبار المعزولة المصدر للتوفر.

Note

يتطلب Hyperlight ظاهرية الأجهزة على المضيف: KVM على Linux أو Windows Hypervisor Platform (WHP) على Windows. Wasm بالإضافة إلى ذلك، تتطلب الواجهة الخلفية وحدة ضيف Hyperlight Python — تم تعيينها HYPERLIGHT_PYTHON_GUEST_PATH إلى مسارها المطلق قبل التشغيل.

استخدام HyperlightCodeActProvider

HyperlightCodeActProvider هي نقطة الإدخال الموصى بها عندما تريد إضافة CodeAct تلقائيا لكل تشغيل. وهو AIContextProvider الذي يضخ تعليمات CodeAct ذات النطاق التشغيلي بالإضافة إلى execute_code الأداة، مع الاحتفاظ بالأدوات المملوكة للموفر خارج سطح أداة العامل المباشر. يطبق الموفر لقطة/استعادة لكل تشغيل بحيث يبدأ الضيف من حالة نظيفة معروفة كل استدعاء.

HyperlightCodeActProviderOptions.CreateForWasm(modulePath) استخدم المصنع لاستهداف ضيف Python المستند إلى Wasm الذي تستخدمه العينات؛ CreateForJavaScript() كما يتوفر للواجهة الخلفية JavaScript.

using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Hyperlight;
using OpenAI.Chat;

var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
    ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
var guestPath = Environment.GetEnvironmentVariable("HYPERLIGHT_PYTHON_GUEST_PATH")
    ?? throw new InvalidOperationException("HYPERLIGHT_PYTHON_GUEST_PATH is not set.");

using var codeAct = new HyperlightCodeActProvider(
    HyperlightCodeActProviderOptions.CreateForWasm(guestPath));

AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
    .GetChatClient(deploymentName)
    .AsAIAgent(new ChatClientAgentOptions()
    {
        ChatOptions = new()
        {
            Instructions = "You are a helpful assistant. When the user asks something quantitative, "
                + "write Python and call `execute_code` instead of guessing.",
        },
        AIContextProviders = [codeAct],
    });

Console.WriteLine(await agent.RunAsync("What is the 20th Fibonacci number?"));

Note

يمكن إرفاق عامل واحد HyperlightCodeActProvider فقط بعامل معين. يستخدم الموفر مفتاح حالة ثابت بحيث ChatClientAgentيرفض التحقق من تفرد مفتاح الحالة التسجيلات المكررة. HyperlightCodeActProvider IDisposableينفذ ؛ استخدم إعلانا using بحيث يتم تحرير بيئة الاختبار المعزولة الأساسية عندما لا تكون هناك حاجة إلى العامل.

يمكن توفير الأدوات وتركيبات الملفات وإدخالات قائمة السماح الصادرة مقدما عبر HyperlightCodeActProviderOptions (Toolsو AllowedDomainsHostInputDirectoryFileMountsو و) أو إدارتها في وقت التشغيل عبر ملحقات الموفر AddTools(...)ClearTools()AddFileMounts(...)RemoveTools(...)AddAllowedDomains(...)و المطابقة.Get*

كيفية عمل الموافقات وأدوات المضيف

تحمل أدوات إطار عمل العامل بيانات تعريف الموافقة التي تتحكم فيما إذا كان يمكن استدعاؤها تلقائيا أو يجب إيقافها مؤقتا للحصول على موافقة المستخدم. في .NET، تكون الموافقة هي الاشتراك عن طريق تضمين AIFunction في ApprovalRequiredAIFunction.

الفرق الرئيسي بين تسجيل أداة على HyperlightCodeActProvider وتسجيلها مباشرة على العامل هو كيفية استدعاء الأداة، وليس مكان تشغيل الوظيفة في نهاية المطاف:

  • يتم إخفاء الأدوات المسجلة على HyperlightCodeActProviderOptions.Tools من النموذج كأدوات مباشرة. يصل إليهم النموذج بكتابة التعليمات البرمجية التي تستدعي call_tool("name", ...) داخل execute_code.
  • يتم عرض الأدوات المسجلة مباشرة على العامل (على سبيل المثال عبر AsAIAgent(tools: [...])) إلى النموذج كأدوات من الدرجة الأولى، وتكرم كل مكالمة مباشرة بيانات تعريف الموافقة الخاصة بهذه الأداة.

call_tool(...) هو جسر العودة إلى رد الاتصال المضيف؛ إنها ليست إعادة تطبيق في بيئة الاختبار المعزولة للأداة. وهذا يعني أن الأدوات المملوكة للموفر لا تزال تنفذ في عملية المضيف، مع أي نظام ملفات وشبكة وبيانات اعتماد يمكن لعملية المضيف نفسها الوصول إليها.

CodeActApprovalMode يتحكم قائمة التعداد في كيفية الموافقة على execute_code الأداة نفسها:

  • CodeActApprovalMode.NeverRequire (افتراضي): يتم نشر الموافقة من الأدوات المسجلة. إذا كانت أي أداة في السجل ملتفة في ApprovalRequiredAIFunction، execute_code تتطلب أيضا الموافقة؛ وإلا فإنها لا تفعل ذلك.
  • CodeActApprovalMode.AlwaysRequire: execute_code يتطلب دائما موافقة المستخدم قبل استدعاء.

كقاعدة عامة:

  • ضع أدوات رخيصة، حتمية، آمنة إلى سلسلة على الموفر حتى يتمكن النموذج من إنشاء العديد من المكالمات داخل منعطف واحد execute_code .
  • التفاف العمليات الجانبية أو الحساسة في ApprovalRequiredAIFunction (ومراعاة الاحتفاظ بها كأدوات عامل مباشر بدلا من ذلك) حتى يبقى كل استدعاء مرئيا بشكل فردي وقابلا للتطبيق.

تسجل العينة التالية أداتين آمنتين (fetch_docs، query_data) بالإضافة إلى أداة حساسة send_email ملتفة في ApprovalRequiredAIFunction. نظرا لأن أداة مسجلة واحدة على الأقل تتطلب الموافقة، يتسبب execute_code الوضع الافتراضي NeverRequire في طلب الموافقة كلما تم استدعاؤها.

AIFunction fetchDocs = AIFunctionFactory.Create(
    (string topic) => $"Docs for {topic}: (...)",
    name: "fetch_docs",
    description: "Fetch documentation for a given topic.");

AIFunction queryData = AIFunctionFactory.Create(
    (string query) => $"Rows for `{query}`: []",
    name: "query_data",
    description: "Run a read-only SQL-like query against the sample store.");

AIFunction sendEmail = new ApprovalRequiredAIFunction(
    AIFunctionFactory.Create(
        (string to, string subject) => $"Sent '{subject}' to {to}.",
        name: "send_email",
        description: "Send an email on behalf of the user."));

var options = HyperlightCodeActProviderOptions.CreateForWasm(guestPath);
options.Tools = [fetchDocs, queryData, sendEmail];

using var codeAct = new HyperlightCodeActProvider(options);

AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
    .GetChatClient(deploymentName)
    .AsAIAgent(new ChatClientAgentOptions()
    {
        ChatOptions = new()
        {
            Instructions = "You are a helpful assistant. Prefer orchestrating your work in a single "
                + "`execute_code` block using `call_tool(...)` over issuing many direct tool calls.",
        },
        AIContextProviders = [codeAct],
    });

نظرا لتشغيل أدوات المضيف خارج بيئة الاختبار المعزولة، FileMounts وتقييد AllowedDomains التعليمات البرمجية لبيئة الاختبار المعزولة نفسها، وليس رد اتصال المضيف خلف call_tool(...). عندما تحتاج إلى وصول متحكم به إلى مورد حساس، تفضل أداة مضيف ضيقة على توسيع أذونات بيئة الاختبار المعزولة.

استخدام HyperlightExecuteCodeFunction للأسلاك المباشرة

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

على عكس HyperlightCodeActProvider، لا تقوم الدالة المستقلة بإدخال إرشادات فورية تلقائيا، لذلك فأنت مسؤول عن إضافة BuildInstructions(...) الإخراج إلى إرشادات العامل بنفسك. تمرير toolsVisibleToModel: false عندما يمكن الوصول إلى الأدوات المسجلة فقط من خلال call_tool(...)، وعندما true يتم عرض نفس الأدوات أيضا مباشرة إلى النموذج.

AIFunction calculate = AIFunctionFactory.Create(
    (double a, double b) => a * b,
    name: "multiply",
    description: "Multiply two numbers.");

var options = HyperlightCodeActProviderOptions.CreateForWasm(guestPath);
options.Tools = [calculate];

using var executeCode = new HyperlightExecuteCodeFunction(options);

var instructions =
    "You are a helpful assistant. When math is involved, solve it by writing Python "
    + "and calling `execute_code` instead of computing values yourself.\n\n"
    + executeCode.BuildInstructions(toolsVisibleToModel: false);

AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
    .GetChatClient(deploymentName)
    .AsAIAgent(instructions: instructions, tools: [executeCode]);

HyperlightExecuteCodeFunction IDisposableينفذ أيضا . عندما يتطلب التكوين الموافقة (لكل ApprovalMode أو بسبب تضمين ApprovalRequiredAIFunctionأداة مكونة في حد ذاتها)، يظهر المثيل وكيلا ApprovalRequiredAIFunction عبر AITool.GetService(...)، وهي الطريقة التي يكتشف بها باقي إطار العمل متطلبات الموافقة.

تكوين الملفات والوصول الصادر

يمكن أن يعرض الضوء التشعبي شجرة للقراءة فقط /input بالإضافة إلى منطقة قابلة /output للكتابة للبيانات الاصطناعية التي تم إنشاؤها.

  • استخدم HostInputDirectory لجعل دليل المضيف متوفرا ضمن /input/.
  • يستخدم FileMounts لتعيين مسارات مضيف محددة في بيئة الاختبار المعزولة عبر new FileMount(hostPath, mountPath).
  • يستخدم AllowedDomains لتمكين الوصول الصادر فقط لأهداف أو أساليب محددة عبر new AllowedDomain(target, methods).
var options = HyperlightCodeActProviderOptions.CreateForWasm(guestPath);
options.Tools = [compute];
options.FileMounts =
[
    new FileMount("/host/data", "/input/data"),
    new FileMount("/host/models", "/sandbox/models"),
];
options.AllowedDomains =
[
    new AllowedDomain("https://api.github.com"),
    new AllowedDomain("https://internal.api.example.com", ["GET"]),
];

using var codeAct = new HyperlightCodeActProvider(options);

يمكن أيضا تعديل نفس FileMounts المجموعات وAllowedDomains، بالإضافة إلى الأدوات، في وقت التشغيل من خلال AddFileMounts(...)و RemoveFileMounts(...)AddAllowedDomains(...)و و RemoveAllowedDomains(...) في HyperlightCodeActProvider.

إرشادات الإخراج

لعرض النص من execute_code، قم بإنهاء رمز الضيف ب print(...)؛ لا يرجع الضوء التشعبي قيمة التعبير الأخير تلقائيا.

عند تمكين الوصول إلى نظام الملفات، اكتب بيانات اصطناعية أكبر إلى /output/<filename> بدلا من ذلك. يتم إرفاق الملفات التي تم إرجاعها بنتيجة الأداة، بينما تتوفر الملفات الموجودة ضمن /input للقراءة داخل بيئة الاختبار المعزولة.

القيود الحالية

لا تزال هذه الحزمة معاينة، وبعض القيود تستحق التخطيط لها:

  1. تعتمد الحزمة على Hyperlight.HyperlightSandbox.Api، والتي لم يتم نشرها بعد على nuget.org. حتى يتم شحنها، ستفشل استعادة المشروع.
  2. يتبع دعم النظام الأساسي حزم الواجهة الخلفية للضوء الفائق المنشورة: بيئات Linux المدعومة (KVM) وبيئات Windows (WHP). ستفشل الأنظمة الأساسية غير المدعومة أو النهايات الخلفية للظاهرية المفقودة عند إنشاء بيئة الاختبار المعزولة.
  3. تنفذ الواجهة الخلفية الحالية ل Wasm وحدة ضيف Python محددة بواسطة HYPERLIGHT_PYTHON_GUEST_PATH. تتوفر الواجهة الخلفية JavaScript (CreateForJavaScript()) للتعليمات البرمجية للضيف في JavaScript.
  4. لا تستمر حالة المترجم في الذاكرة عبر مكالمات منفصلة execute_code . استخدم الملفات والبيانات /output الاصطناعية التي تم تحميلها عندما تحتاج البيانات إلى البقاء على قيد الحياة عبر المكالمات.
  5. تنطبق الموافقة execute_code على استدعاء ككل، وليس على كل فرد call_tool(...) داخل كتلة التعليمات البرمجية نفسها.
  6. أوصاف الأداة والتعليقات التوضيحية للمعلمة وإرجاع الأشكال مهمة أكثر هنا لأن النموذج يكتب التعليمات البرمجية مقابل هذا العقد بدلا من اختيار استدعاءات الأدوات المباشرة المعزولة.
  7. لا يوجد ما يعادل .NET عينة معيار Python حتى الآن - راجع علامة التبويب Python لتسخير المقارنة المنشورة.

تثبيت الحزمة

pip install agent-framework-hyperlight --pre

agent-framework-hyperlight يشحن بشكل منفصل عن agent-framework-core، لذلك لا تأخذ سوى وقت تشغيل بيئة الاختبار المعزولة عندما تحتاج إليه.

Note

تعتمد الحزمة على مكونات بيئة الاختبار المعزولة Hyperlight. إذا لم يتم نشر الواجهة الخلفية للنظام الأساسي الحالي حتى الآن، execute_code تفشل عندما تحاول إنشاء بيئة الاختبار المعزولة.

استخدام HyperlightCodeActProvider

HyperlightCodeActProvider هي نقطة الإدخال الموصى بها عندما تريد إضافة CodeAct تلقائيا لكل تشغيل. يقوم بإدخال تعليمات CodeAct ذات نطاق التشغيل بالإضافة إلى execute_code الأداة، مع الاحتفاظ بالأدوات المملوكة للموفر خارج سطح أداة العامل المباشر.

import os

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework.hyperlight import HyperlightCodeActProvider
from azure.identity import AzureCliCredential

# 1. Create the Hyperlight-backed provider and register sandbox tools on it.
codeact = HyperlightCodeActProvider(
    tools=[compute, fetch_data],
    approval_mode="never_require",
)

# 2. Create the client and the agent.
agent = Agent(
    client=FoundryChatClient(
        project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        model=os.environ["FOUNDRY_MODEL"],
        credential=AzureCliCredential(),
    ),
    name="HyperlightCodeActProviderAgent",
    instructions="You are a helpful assistant.",
    context_providers=[codeact],
)

# 3. Run a request that should use execute_code plus provider-owned tools.
query = (
    "Fetch all users, find admins, multiply 7*(3*2), and print the users, "
    "admins, and multiplication result. Use execute_code and call_tool(...) "
    "inside the sandbox."
)
result = await agent.run(query)
print(result.text)

تتوفر الأدوات المسجلة على الموفر داخل بيئة الاختبار المعزولة من خلال call_tool(...)، ولكنها لا تعرض كأدوات عامل مباشر. يعرض الموفر أيضا إدارة نمط CRUD للأدوات وتركيبات الملفات وإدخالات قائمة السماح الصادرة من خلال أساليب مثل add_tools(...)و remove_tool(...)add_file_mounts(...)و وadd_allowed_domains(...).

كيفية عمل الموافقات وأدوات المضيف

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

الفرق الرئيسي بين تسجيل أداة على HyperlightCodeActProvider وتسجيلها مباشرة Agent(tools=...) هو كيفية استدعاء الأداة، وليس مكان تشغيل وظيفة Python في نهاية المطاف:

  • يتم إخفاء الأدوات المسجلة على HyperlightCodeActProvider(tools=...) من النموذج كأدوات مباشرة. يصل إليهم النموذج بكتابة التعليمات البرمجية التي تستدعي call_tool("name", ...) داخل execute_code.
  • يتم عرض الأدوات المسجلة على Agent(tools=...) إلى النموذج كأدوات من الدرجة الأولى، وكل مكالمة مباشرة تكرم تلك الأداة الخاصة approval_mode.

call_tool(...) هو جسر العودة إلى رد الاتصال المضيف؛ إنها ليست إعادة تطبيق في بيئة الاختبار المعزولة للأداة. وهذا يعني أن الأدوات المملوكة للموفر لا تزال تنفذ في عملية المضيف، مع أي نظام ملفات وشبكة وبيانات اعتماد يمكن لعملية المضيف نفسها الوصول إليها.

كقاعدة عامة:

  • ضع أدوات رخيصة، حتمية، آمنة إلى سلسلة على الموفر حتى يتمكن النموذج من إنشاء العديد من المكالمات داخل منعطف واحد execute_code .
  • احتفظ بالعمليات الجانبية أو عمليات الموافقة على البوابات كأدوات عامل مباشر، غالبا مع approval_mode="always_require"، بحيث يبقى كل استدعاء مرئيا بشكل فردي وقابلا للتطبيق.

نظرا لتشغيل أدوات المضيف خارج بيئة الاختبار المعزولة، file_mounts وتقييد allowed_domains التعليمات البرمجية لبيئة الاختبار المعزولة نفسها، وليس رد اتصال المضيف خلف call_tool(...). عندما تحتاج إلى وصول متحكم به إلى مورد حساس، تفضل أداة مضيف ضيقة على توسيع أذونات بيئة الاختبار المعزولة.

Note

الأدوات التي تم استدعاؤها من خلال call_tool(...) إرجاع قيمة Python الأصلية الخاصة بها (dictأو listأو عنصر بدائي أو مخصص) مباشرة إلى الضيف. أي result_parser تكوين على FunctionTool مخصص للمستهلكين الذين يواجهون LLM ولا يتم تشغيله على مسار بيئة الاختبار المعزولة — تطبيق التنسيق داخل وظيفة الأداة نفسها إذا كنت بحاجة إليها للمستهلكين في بيئة الاختبار المعزولة.

استخدام HyperlightExecuteCodeTool للأسلاك المباشرة

عندما تحتاج إلى المزج execute_code مع أدوات مباشرة فقط على نفس العامل، استخدم HyperlightExecuteCodeTool بدلا من الموفر. بالنسبة للتكوينات الثابتة، يمكنك إنشاء إرشادات CodeAct مرة واحدة وربط الأداة مباشرة:

from agent_framework.hyperlight import HyperlightExecuteCodeTool

execute_code = HyperlightExecuteCodeTool(
    tools=[compute],
    approval_mode="never_require",
)

codeact_instructions = execute_code.build_instructions(tools_visible_to_model=False)

يكون هذا النمط مفيدا عند إصلاح سطح CodeAct ولا تحتاج إلى دورة حياة الموفر في كل عملية تشغيل. على عكس HyperlightCodeActProvider، لا تقوم الأداة المستقلة بإدخال إرشادات فورية تلقائيا، لذلك فأنت مسؤول عن إضافة build_instructions(...) الإخراج إلى إرشادات العامل بنفسك.

تكوين الملفات والوصول الصادر

يمكن أن يعرض الضوء التشعبي شجرة للقراءة فقط /input بالإضافة إلى منطقة قابلة /output للكتابة للبيانات الاصطناعية التي تم إنشاؤها.

  • استخدم workspace_root لجعل مساحة العمل متوفرة ضمن /input/.
  • يستخدم file_mounts لتعيين مسارات مضيف معينة في بيئة الاختبار المعزولة.
  • يستخدم allowed_domains لتمكين الوصول الصادر فقط لأهداف أو أساليب محددة.

file_mounts يقبل سلسلة مختصرة أو زوج صريح (host_path, mount_path) أو مجموعة مسماة FileMount . allowed_domains يقبل هدف سلسلة أو زوج صريح (target, method-or-methods) أو مجموعة مسماة AllowedDomain .

from agent_framework.hyperlight import HyperlightCodeActProvider

codeact = HyperlightCodeActProvider(
    tools=[compute],
    file_mounts=[
        "/host/data",
        ("/host/models", "/sandbox/models"),
    ],
    allowed_domains=[
        "api.github.com",
        ("internal.api.example.com", "GET"),
    ],
)

إرشادات الإخراج

لعرض النص من execute_code، قم بإنهاء التعليمات البرمجية ب print(...)؛ لا يرجع الضوء التشعبي قيمة التعبير الأخير تلقائيا.

عند تمكين الوصول إلى نظام الملفات، اكتب بيانات اصطناعية أكبر إلى /output/<filename> بدلا من ذلك. يتم إرفاق الملفات التي تم إرجاعها بنتيجة الأداة، بينما تتوفر الملفات الموجودة ضمن /input للقراءة داخل بيئة الاختبار المعزولة.

مقارنة CodeAct واستدعاء الأداة المباشرة

المقارنة المفاهيمية هي نفسها بالنسبة لأي خلفية CodeAct: يمكن توصيل نفس العميل والنموذج والأدوات والمطالبة ومخطط الإخراج المنظم إما من خلال استدعاء الأداة التقليدية أو من خلال CodeAct المدعوم من Hyperlight. الفرق الوحيد هو سطح الأداة - الأدوات المباشرة مقابل أداة واحدة execute_code مدعومة ب HyperlightCodeActProvider:

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework.hyperlight import HyperlightCodeActProvider

# Direct tool calling: the model picks one tool at a time per turn.
direct = Agent(
    client=FoundryChatClient(...),
    instructions="...",
    tools=[fetch_data, compute],
)

# Hyperlight-backed CodeAct: the model writes one program per turn that
# orchestrates the same tools through call_tool(...).
codeact = Agent(
    client=FoundryChatClient(...),
    instructions="...",
    context_providers=[
        HyperlightCodeActProvider(
            tools=[fetch_data, compute],
            approval_mode="never_require",
        ),
    ],
)

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

القيود الحالية

هذه الحزمة لا تزال ألفا، وبعض القيود تستحق التخطيط حولها:

  1. يتبع دعم النظام الأساسي حزم الواجهة الخلفية للضوء التشعبي المنشورة. وهذا يعني اليوم بيئات Linux وبيئات Windows المدعومة؛ ستفشل الأنظمة الأساسية غير المدعومة عند إنشاء بيئة الاختبار المعزولة.
  2. ينفذ التكامل الحالي Python التعليمات البرمجية للضيف.
  3. لا تستمر حالة المترجم في الذاكرة عبر مكالمات منفصلة execute_code . استخدم الملفات والبيانات /output الاصطناعية التي تم تحميلها عندما تحتاج البيانات إلى البقاء على قيد الحياة عبر المكالمات.
  4. تنطبق الموافقة execute_code على استدعاء ككل، وليس على كل فرد call_tool(...) داخل كتلة التعليمات البرمجية نفسها.
  5. أوصاف الأداة والتعليقات التوضيحية للمعلمة وإرجاع الأشكال مهمة أكثر هنا لأن النموذج يكتب التعليمات البرمجية مقابل هذا العقد بدلا من اختيار استدعاءات الأدوات المباشرة المعزولة.

Note

سيتوفر الدعم لهذه الميزة قريبا. راجع مستودع Agent Framework Go للحصول على أحدث حالة.

الخطوات التالية