Hiperfény

A Hyperlight a CodeAct jelenleg dokumentált háttérrendszere az Agent Frameworkben. Egy elkülönített tesztkörnyezeti futtatókörnyezet által támogatott eszközt tesz elérhetővéexecute_code, és meghívhatja a szolgáltató tulajdonában lévő gazdagépeszközöket.call_tool(...)

Ez az integráció a CodeAct-mintát használja: a szolgáltató egy kódvégrehajtási eszközhöz járul hozzá, és minden futtatás körül kezeli a végrehajtási környezetet.

A mintaszintű áttekintésért lásd: CodeAct.

Miért a Hyperlight CodeAct?

A modern ügynököket gyakran inkább az eszközhívási többletterhelés korlátozza, mint maga a modell. Az adatokat beolvasó, könnyű számításokat végző és az eredményt összeállító feladatok könnyen modellláncmá alakíthatók –> eszköz –> modell –> eszköz interakcióivá, még akkor is, ha minden egyes lépés egyszerű.

A Hyperlight által támogatott CodeAct kiküszöböli ezt a hurkot. A modell egy rövid Python-programot ír, a tesztkörnyezet egyszer hajtja végre, és a szolgáltató tulajdonában lévő eszközök a tesztkörnyezeten call_tool(...)belülről érhetők el. Képviselő eszközigényes munkafolyamatokban a váltás nagyjából a felére csökkentheti a késleltetést és több mint 60%-kal a tokenhasználatot, miközben a végrehajtás elkülönítetten és naplózhatóan tartható.

A csomag telepítése

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

Microsoft.Agents.AI.Hyperlight az alapvető absztrakcióktól külön kerül szállításra, így a sandbox futtatókörnyezetet csak akkor kell használnia, amikor valóban szüksége van rá.

Important

A .NET csomag előzetes verzióban érhető el. A(z) Hyperlight.HyperlightSandbox.Api NuGet-csomagtól függ, amely a(z) hyperlight-dev/hyperlight-sandbox forrásból származik; amíg ezt a függőséget nem teszik közzé a nuget.org-on, a projekt visszaállítása nem fog sikerülni. Nyomon követheti a felsőbb rétegbeli tesztkörnyezet-adattárat a rendelkezésre állás érdekében.

Megjegyzés:

A Hyperlight működéséhez hardvervirtualizálás szükséges a gazdagépen: Linuxon a KVM, Windowson pedig a Windows Hypervisor Platform (WHP). A Wasm háttérrendszer emellett egy Hyperlight Python vendégmodult is igényel — futtatás előtt állítsa a HYPERLIGHT_PYTHON_GUEST_PATH értékét annak abszolút elérési útjára.

Használja a HyperlightCodeActProvider-t

HyperlightCodeActProvider az ajánlott belépési pont, ha minden futtatáshoz automatikusan hozzá szeretné adni a CodeAct-et. Ez egy olyan AIContextProvider, amely a futtatáshoz kötött CodeAct-utasításokat, valamint a(z) execute_code eszközt injektálja, miközben a szolgáltatóhoz tartozó eszközöket távol tartja az ügynök közvetlen eszközfelületéről. A szolgáltató futtatásonként pillanatkép-visszaállítást alkalmaz, így a vendég minden egyes futtatáskor egy ismert, tiszta állapotból indul.

A HyperlightCodeActProviderOptions.CreateForWasm(modulePath) gyárral célba veheti a mintákban használt, Wasm-alapú Python vendégkörnyezetet; a JavaScript-háttérhez a CreateForJavaScript() is elérhető.

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?"));

Megjegyzés:

Egy adott ügynökhöz csak egy HyperlightCodeActProvider csatolható. A szolgáltató rögzített állapotkulcsot használ, így ChatClientAgentaz állapotkulcs egyediségének ellenőrzése elutasítja az ismétlődő regisztrációkat. HyperlightCodeActProvider implementálja a(z) IDisposable elemet; használjon egy using deklarációt, hogy az alapul szolgáló sandbox felszabaduljon, amikor az ügynökre már nincs szükség.

Az eszközök, fájlcsatolások és kimenő engedélyezőlista-bejegyzések előzetesen megadhatók a(z) HyperlightCodeActProviderOptions (Tools, FileMounts, AllowedDomains, HostInputDirectory) használatával, vagy futásidőben kezelhetők a szolgáltató AddTools(...), RemoveTools(...), ClearTools(), AddFileMounts(...), AddAllowedDomains(...) metódusain, valamint a megfelelő Get* hozzáférési metódusokon keresztül.

A jóváhagyások és a hoszt eszközök működése

Az Ügynök-keretrendszer eszközei olyan jóváhagyási metaadatokat hordoznak, amelyek azt vezérli, hogy automatikusan meghívhatók-e, vagy szüneteltetni kell őket a felhasználói jóváhagyáshoz. A .NET-ben a jóváhagyás engedélyezése explicit módon történik: a AIFunction elemet egy ApprovalRequiredAIFunction elembe kell ágyazni.

Az eszköz HyperlightCodeActProvider regisztrálása és közvetlenül az ügynökön történő regisztrálása között a fő különbség az, hogyan történik az eszköz meghívása, nem pedig az, hogy a függvény végül hol fut:

  • A regisztrált HyperlightCodeActProviderOptions.Tools eszközök közvetlen eszközökként vannak elrejtve a modell elől. A modell úgy éri el őket, hogy kódot ír, amely meghívja a(z) call_tool("name", ...)-t a(z) execute_code-en belül.
  • A közvetlenül az ügynökön (például keresztül AsAIAgent(tools: [...])) regisztrált eszközök első osztályú eszközökként jelennek meg a modellben, és minden közvetlen hívás az eszköz saját jóváhagyási metaadatait jeleníti meg.

call_tool(...) a visszahívások állomásaihoz való visszahívások hídja; ez nem az eszköz tesztkörnyezeten belüli újratelepítése. Ez azt jelenti, hogy a szolgáltató által birtokolt eszközök továbbra is a gazdafolyamatban futnak, azzal a fájlrendszerrel, hálózattal és hitelesítő adatokkal, amelyeket a gazdafolyamat maga is elérhet.

Az CodeActApprovalMode enumerálás szabályozza, hogy maga az execute_code eszköz hogyan legyen jóváhagyva:

  • CodeActApprovalMode.NeverRequire (alapértelmezett): a jóváhagyás a regisztrált eszközökről öröklődik. Ha a beállításjegyzék bármely eszköze be van csomagolva ApprovalRequiredAIFunction, execute_code jóváhagyást is igényel, ellenkező esetben nem.
  • CodeActApprovalMode.AlwaysRequire: execute_code a meghívás előtt mindig felhasználói jóváhagyásra van szükség.

Ökölszabályként:

  • Helyezzen olcsó, determinisztikus, láncolható eszközöket a szolgáltatóra, hogy a modell több hívást is összeállíthasson egy execute_code fordulón belül.
  • A mellékhatással járó vagy érzékeny műveleteket foglalja ApprovalRequiredAIFunction elembe (és fontolja meg azt is, hogy inkább közvetlen agenteszközökként tartja meg őket), hogy minden egyes meghívás külön is látható és jóváhagyható maradjon.

A következő minta két biztonságos eszközt (fetch_docs, query_data), valamint egy send_email-ba csomagolt érzékeny ApprovalRequiredAIFunction eszközt regisztrál. Mivel legalább egy regisztrált eszköz jóváhagyást igényel, az alapértelmezett NeverRequire mód a execute_code meghíváskor jóváhagyást igényel.

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],
    });

Mivel a gazdagépeszközök a sandboxon kívül futnak, FileMounts és AllowedDomains magát a sandboxban futó kódot korlátozzák, nem pedig a gazdagép visszahívását a call_tool(...) mögött. Ha szabályozott hozzáférésre van szüksége egy bizalmas erőforráshoz, inkább egy keskeny gazdagépeszközt válasszon a tesztkörnyezeti engedélyek kibővítése helyett.

Közvetlen vezetékezéshez használható HyperlightExecuteCodeFunction

Ha a execute_code-t közvetlenül használható eszközökkel kell együtt használnia ugyanazon az ügynökön, vagy a sandbox-konfiguráció az ügynök teljes élettartama alatt rögzített, a szolgáltató helyett használja a(z) HyperlightExecuteCodeFunction-t. Ez egy önálló AIFunction , amely egyetlen pillanatképet készít a megadott lehetőségekről az építkezés során, és minden meghíváshoz újra felhasználja.

A HyperlightCodeActProvider-tól eltérően az önálló függvény nem illeszti be automatikusan a prompt‑útmutatást, ezért önnek kell hozzáadnia a BuildInstructions(...) kimenetét az ügynök utasításaihoz. Adja meg a(z) toolsVisibleToModel: false értéket, ha a regisztrált eszközök csak a(z) call_tool(...) használatával érhetők el, és a(z) true értéket, ha ugyanezek az eszközök közvetlenül a modell számára is hozzáférhetők.

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 is megvalósítja IDisposable. Ha a konfiguráció jóváhagyást igényel (a ApprovalMode szerint, vagy mert egy konfigurált eszköz maga is ApprovalRequiredAIFunction-be van burkolva), a példány egy ApprovalRequiredAIFunction proxyt tesz elérhetővé a AITool.GetService(...) révén; a keretrendszer többi része így észleli, hogy jóváhagyás szükséges.

Fájlok és kimenő hozzáférés konfigurálása

A Hyperlight egy írásvédett /input fát és egy írható /output területet tesz elérhetővé a létrehozott összetevők számára.

  • A HostInputDirectory használatával elérhetővé teheti a gazdagép könyvtárát a(z) /input/ alatt.
  • Adott FileMounts gazdagépútvonalak leképezése a tesztkörnyezetbe a következőn keresztül new FileMount(hostPath, mountPath): .
  • A kimenő hozzáférés csak meghatározott célokhoz vagy módszerekhez való engedélyezéséhez használja a(z) AllowedDomains elemet a(z) new AllowedDomain(target, methods) segítségével.
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);

Ugyanezek a FileMounts és AllowedDomains gyűjtemények, valamint az eszközök is módosíthatók futásidőben a(z) AddFileMounts(...)RemoveFileMounts(...), AddAllowedDomains(...), RemoveAllowedDomains(...) és HyperlightCodeActProvider elemein keresztül.

Kimeneti útmutató

A execute_code származó szöveg kinyeréséhez zárd le a vendégkódot print(...); jellel; a Hyperlight nem adja vissza automatikusan az utolsó kifejezés értékét.

Ha engedélyezett a fájlrendszerhez való hozzáférés, inkább írja a nagyobb fájlokat /output/<filename>-re. A visszaadott fájlok az eszköz eredményéhez vannak csatolva, míg az alatta lévő /input fájlok olvasásra használhatók a tesztkörnyezetben.

Jelenlegi korlátozások

Ez a csomag továbbra is előzetes verzió, és érdemes megfontolni néhány korlátozást:

  1. Ez a csomag a(z) Hyperlight.HyperlightSandbox.Api elemtől függ, amely még nincs közzétéve a nuget.org-on. Amíg ez meg nem történik, a projekt visszaállítása sikertelen lesz.
  2. A platformtámogatás a közzétett Hyperlight háttércsomagokat követi: támogatott Linux-(KVM-) és Windows (WHP-) környezetek. A tesztkörnyezet létrehozásakor a nem támogatott platformok vagy a hiányzó virtualizálási háttérrendszerek sikertelenek lesznek.
  3. Az aktuális Wasm-háttérrendszer végrehajt egy Python HYPERLIGHT_PYTHON_GUEST_PATH által megadott vendégmodult. A JavaScript-háttérrendszer (CreateForJavaScript()) elérhető a JavaScriptben írt vendégkód számára.
  4. A memóriabeli értelmező állapota nem tárolódik különböző execute_code hívások között. Csatlakoztatott fájlokat és /output összetevőket használjon, ha az adatoknak a hívásokon keresztüli túlélésre van szükségük.
  5. A jóváhagyás a execute_code meghívás egészére vonatkozik, nem pedig az ugyanabban a kódblokkban található egyes elemekre call_tool(...).
  6. Az eszközleírások, a paraméterjegyzetek és a visszaadott alakzatok itt sokkal fontosabbak, mert a modell kódokat ír a szerződéshez ahelyett, hogy izolált közvetlen eszközhívásokat választana.
  7. Még nincs .NET megfelelője a Python benchmark-mintának – lásd a közzétett összehasonlító heveder Python lapját.

A csomag telepítése

pip install agent-framework-hyperlight --pre

agent-framework-hyperlight külön kerül szállításra agent-framework-core-től, így csak akkor kerül az "sandbox" futási környezet telepítésre, ha szüksége van rá.

Megjegyzés:

A csomag a Hyperlight tesztkörnyezet összetevőitől függ. Ha a háttérrendszer még nincs közzétéve az aktuális platformon, execute_code sikertelenül próbálja létrehozni a sandboxot.

Használja a HyperlightCodeActProvider-t

HyperlightCodeActProvider az ajánlott belépési pont, ha minden futtatáshoz automatikusan hozzá szeretné adni a CodeAct-et. A futtatási hatókörű CodeAct-utasításokat és az execute_code eszközt injektálja, miközben a szolgáltató tulajdonában lévő eszközöket távol tartja a közvetlen ügynök eszközfelületétől.

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)

A szolgáltatón regisztrált eszközök a sandboxban call_tool(...) érhetők el, de nem jelennek meg közvetlen ügynökeszközként. A szolgáltató a CRUD-stílusú felügyeletet is elérhetővé teszi az eszközök, a fájlcsatlakozások és a kimenő engedélyezési lista bejegyzései számára olyan metódusokkal, mint a add_tools(...), remove_tool(...), add_file_mounts(...) és add_allowed_domains(...).

A jóváhagyások és a hoszt eszközök működése

Az Ügynök-keretrendszer eszközei olyan vezérlőt approval_mode hordoznak, amely meghatározza, hogy automatikusan meghívhatók-e, vagy szüneteltetni kell őket a felhasználói jóváhagyáshoz.

Az eszköz HyperlightCodeActProvider regisztrálása és közvetlen Agent(tools=...) regisztrálása között a fő különbség az, hogy az eszköz hogyan lesz meghívva, és nem ott, ahol a Python-függvény fut:

  • A regisztrált HyperlightCodeActProvider(tools=...) eszközök közvetlen eszközökként vannak elrejtve a modell elől. A modell úgy éri el őket, hogy kódot ír, amely meghívja a(z) call_tool("name", ...)-t a(z) execute_code-en belül.
  • A regisztrált Agent(tools=...) eszközök első osztályú eszközként vannak kezelve a modellben, és minden közvetlen hívás tiszteletben tartja az eszköz saját approval_mode-jét.

call_tool(...) a visszahívások állomásaihoz való visszahívások hídja; ez nem az eszköz tesztkörnyezeten belüli újratelepítése. Ez azt jelenti, hogy a szolgáltató által birtokolt eszközök továbbra is a gazdafolyamatban futnak, azzal a fájlrendszerrel, hálózattal és hitelesítő adatokkal, amelyeket a gazdafolyamat maga is elérhet.

Ökölszabályként:

  • Helyezzen olcsó, determinisztikus, láncolható eszközöket a szolgáltatóra, hogy a modell több hívást is összeállíthasson egy execute_code fordulón belül.
  • Az oldalbeli hatásokat okozó vagy jóváhagyással korlátozott műveleteket tartsuk meg közvetlen ügynöki eszközként, gyakran approval_mode="always_require"-val, hogy az egyes meghívások egyedileg láthatóak és jóváhagyhatóak maradjanak.

Mivel a gazdagépeszközök a sandboxon kívül futnak, file_mounts és allowed_domains magát a sandboxban futó kódot korlátozzák, nem pedig a gazdagép visszahívását a call_tool(...) mögött. Ha szabályozott hozzáférésre van szüksége egy bizalmas erőforráshoz, inkább egy keskeny gazdagépeszközt válasszon a tesztkörnyezeti engedélyek kibővítése helyett.

Megjegyzés:

A call_tool(...) által meghívott eszközök a natív Python értéket (dict, list, primitív vagy egyéni objektum) közvetlenül a vendégnek adják vissza. Minden result_parser, amely egy FunctionTool-n van konfigurálva, a LLM-felhasználók számára készült, és nem fut a sandbox útvonalon – alkalmazza a formázást magában az eszközfüggvényben, ha szüksége van rá a tesztkörnyezetbeni felhasználók számára.

Közvetlen vezetékezéshez használható HyperlightExecuteCodeTool

Amikor közvetlen használatú eszközöket kell kevernie execute_code ugyanazon az ügynökön, a szolgáltató helyett használja a HyperlightExecuteCodeTool-t. Rögzített konfigurációk esetén egyszer elkészítheti a CodeAct-utasításokat, és közvetlenül bekötheti az eszközt.

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)

Ez a minta akkor hasznos, ha a CodeAct felület ki van javítva, és nincs szükség a szolgáltatói életciklusra minden futtatáskor. Ellentétben HyperlightCodeActProvidera különálló eszköz nem injektálja automatikusan a parancssori útmutatást, ezért ön a felelős azért, hogy a build_instructions(...) kimenetet saját maga adja hozzá az ügynök utasításaihoz.

Fájlok és kimenő hozzáférés konfigurálása

A Hyperlight egy írásvédett /input fát és egy írható /output területet tesz elérhetővé a létrehozott összetevők számára.

  • A(z) workspace_root használatával tegye elérhetővé a munkaterületet a /input/ alatt.
  • A tesztkörnyezetbe adott gazdagépútvonalak leképezésére használható file_mounts .
  • A allowed_domains kimenő hozzáférés engedélyezése csak meghatározott célokhoz vagy metódusokhoz.

file_mounts egy rövidített karakterláncot, egy explicit (host_path, mount_path) párt, vagy egy elnevezett FileMount tömböt is elfogad. allowed_domains karakterlánc célt, explicit (target, method-or-methods) párt vagy elnevezett párt AllowedDomain fogad el.

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"),
    ],
)

Kimeneti útmutató

A szöveg előhívásához a execute_code-ból/ből fejezd be a kódot a következővel print(...); A Hyperlight nem adja vissza automatikusan az utolsó kifejezés értékét.

Ha engedélyezett a fájlrendszerhez való hozzáférés, inkább írja a nagyobb fájlokat /output/<filename>-re. A visszaadott fájlok az eszköz eredményéhez vannak csatolva, míg az alatta lévő /input fájlok olvasásra használhatók a tesztkörnyezetben.

A CodeAct és a közvetlen eszközhívás összehasonlítása

A fogalmi összehasonlítás ugyanaz, mint bármely CodeAct-háttérrendszer esetében: ugyanaz az ügyfél, modell, eszközök, parancssori és strukturált kimeneti séma hagyományos eszközhívással vagy Hyperlight-alapú CodeAct-kapcsolaton keresztül is leköthető. Az egyetlen különbség az eszközfelület — a közvetlen eszközök, szemben egyetlen, execute_code által támogatott HyperlightCodeActProvider eszközzel:

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",
        ),
    ],
)

Az olyan számítási feladatok esetében, amelyek az adatok ismételt keresése és a könnyű számítások – sok kis, láncolható lépés – végrehajtásával kiszámítják az adathalmazok összesítését, a CodeAct eltávolíthatja a vezénylési többletterhelést. Mérje le mindkét futás idejét stopperórával, és vizsgálja meg a visszaadott ChatResponse.usage elemet, hogy összehasonlíthassa a saját környezetében mért eltelt időt és a tokenhasználatot.

Jelenlegi korlátozások

Ez a csomag még mindig alfa, és néhány korlátozást érdemes megtervezni:

  1. A platformtámogatás a közzétett Hyperlight háttércsomagokat követi. Ez ma azt jelenti, hogy támogatott Linux- és Windows-környezetek; A nem támogatott platformok sikertelenek lesznek a tesztkörnyezet létrehozásakor.
  2. Az aktuális integráció a Python-vendégkódot hajtja végre.
  3. A memóriabeli értelmező állapota nem tárolódik különböző execute_code hívások között. Csatlakoztatott fájlokat és /output összetevőket használjon, ha az adatoknak a hívásokon keresztüli túlélésre van szükségük.
  4. A jóváhagyás a execute_code meghívás egészére vonatkozik, nem pedig az ugyanabban a kódblokkban található egyes elemekre call_tool(...).
  5. Az eszközleírások, a paraméterjegyzetek és a visszaadott alakzatok itt sokkal fontosabbak, mert a modell kódokat ír a szerződéshez ahelyett, hogy izolált közvetlen eszközhívásokat választana.

Megjegyzés:

A funkció Go-támogatása hamarosan érkezik. A legújabb állapotot az Agent Framework Go-adattárában tekinthet meg.

Következő lépések