Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Hyperlight is de momenteel gedocumenteerde back-end voor CodeAct in Agent Framework. Het maakt een execute_code hulpprogramma beschikbaar dat wordt ondersteund door een geïsoleerde sandbox-runtime en kan hosthulpprogramma's in eigendom van de provider aanroepen via call_tool(...).
Zie CodeAct voor het overzicht op patroonniveau.
Waarom Hyperlight CodeAct
Moderne agents worden vaak meer beperkt door overhead bij het oproepen van tools dan door het model zelf. Een taak die gegevens leest, lichte berekeningen uitvoert en een resultaat samenstelt, kan eenvoudig worden omgezet in een keten van model - tool ->> model -> interactie tussen hulpprogramma's, zelfs wanneer elke afzonderlijke stap eenvoudig is.
CodeAct met Hyperlight-ondersteuning vouwt de lus samen. Het model schrijft één kort Python-programma, de sandbox voert het eenmaal uit en hulpprogramma's die eigendom zijn van de provider worden bereikt vanuit de sandbox met call_tool(...). In representatieve werkbelastingen met veel tools kan die verschuiving de latentie ongeveer halveren en het tokengebruik met meer dan 60% verminderen, terwijl de uitvoering geïsoleerd en controleerbaar blijft.
Aan de slag
Binnenkort beschikbaar.
Installeer het pakket
pip install agent-framework-hyperlight --pre
agent-framework-hyperlight wordt afzonderlijk geleverd van agent-framework-core, zodat u alleen de sandbox-runtime opneemt wanneer u deze nodig hebt.
Opmerking
Het pakket is afhankelijk van onderdelen van de Hyperlight-sandbox. Als de back-end nog niet is gepubliceerd voor uw huidige platform, execute_code mislukt bij het maken van de sandbox.
Gebruik HyperlightCodeActProvider
HyperlightCodeActProvider is het aanbevolen toegangspunt wanneer u CodeAct automatisch wilt toevoegen voor elke uitvoering. Het injecteert run-scoped CodeAct-instructies plus execute_code tool, terwijl de provider-eigen tools buiten het directe bereik van de agent houden.
async def main() -> None:
"""Run the provider-owned Hyperlight CodeAct sample."""
# 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],
middleware=[log_function_calls],
)
# 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."
)
print(f"{_CYAN}{'=' * 60}")
print("Hyperlight CodeAct provider sample")
print(f"{'=' * 60}{_RESET}")
print(f"{_CYAN}User: {query}{_RESET}")
result = await agent.run(query)
print(f"{_CYAN}Agent: {result.text}{_RESET}")
Hulpprogramma's geregistreerd op de provider zijn beschikbaar in de sandbox via call_tool(...), maar worden niet weergegeven als direct beschikbare agenthulpprogramma's. De provider maakt ook CRUD-stijlbeheer beschikbaar voor tools, bestandkoppelingen en uitgaande allow-list-vermeldingen via methoden zoals add_tools(...), remove_tool(...), add_file_mounts(...) en add_allowed_domains(...).
Hoe goedkeuringen en hosthulpprogramma's werken
Agent Framework-hulpprogramma's bevatten een approval_mode die bepaalt of ze automatisch kunnen worden aangeroepen of moeten worden onderbroken voor goedkeuring van de gebruiker.
Het belangrijkste verschil tussen het registreren van een hulpprogramma HyperlightCodeActProvider en het rechtstreeks Agent(tools=...) registreren ervan is hoe het hulpprogramma wordt aangeroepen, niet waar de Python-functie uiteindelijk wordt uitgevoerd:
- Geregistreerde hulpprogramma's op
HyperlightCodeActProvider(tools=...)zijn verborgen voor het model als directe tools. Het model bereikt ze door code te schrijven diecall_tool("name", ...)aanroept binnenexecute_code. - Hulpprogramma's die zijn geregistreerd op
Agent(tools=...), worden als eersteklas hulpprogramma's weergegeven aan het model en bij elke directe aanroep wordt de eigenapproval_modegerespecteerd.
call_tool(...) is een brug terug naar host-callbacks; het is geen in-sandbox herimplementatie van het hulpprogramma. Dit betekent dat hulpprogramma's die eigendom zijn van de provider nog steeds worden uitgevoerd in het hostproces, met elk bestandssysteem, netwerk en referenties waartoe het hostproces zelf toegang heeft.
Vuistregel:
- Plaats goedkope, deterministische, veilig te koppelen hulpprogramma's op de provider, zodat het model veel aanroepen binnen één
execute_codecyclus kan samenstellen. - Houd side-effect-inducerende of goedkeuringsgebonden bewerkingen als directe agenttools en vaak met
approval_mode="always_require", zodat elke aanroep afzonderlijk zichtbaar en keurbaar blijft.
Omdat hosthulpprogramma's buiten de sandbox worden uitgevoerd, beperken file_mounts en allowed_domains de code in de sandbox zelf, niet de callback van de host achter call_tool(...). Wanneer u gecontroleerde toegang tot een gevoelige resource nodig hebt, geeft u de voorkeur aan een beperkte hosttool boven het verruimen van sandbox-machtigingen.
Opmerking
Hulpprogramma's die worden aangeroepen via call_tool(...) retourneren hun systeemeigen Python waarde (dict, list, primitief of aangepast object) rechtstreeks aan de gast. Elke result_parser configuratie op een FunctionTool is bedoeld voor LLM-gebruikers en wordt niet uitgevoerd op het sandboxpad. Pas opmaak toe in de functie zelf van het hulpprogramma als u deze nodig hebt voor in-sandbox-consumenten.
Gebruiken HyperlightExecuteCodeTool voor directe bedrading
Gebruik execute_code in plaats van de provider wanneer u HyperlightExecuteCodeTool moet combineren met hulpprogramma's voor direct-only op dezelfde agent. Voor vaste configuraties kunt u de CodeAct-instructies eenmaal compileren en het hulpprogramma rechtstreeks bedraden:
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)
Dit patroon is handig wanneer het CodeAct-oppervlak gefixeerd is en de levenscyclus van de provider niet bij elke uitvoering nodig is. In tegenstelling tot HyperlightCodeActProvider injecteert het zelfstandige hulpprogramma promptrichtlijnen niet automatisch, dus u bent zelf verantwoordelijk voor het toevoegen van de build_instructions(...) uitvoer aan de agentinstructies.
Configureer bestanden en uitgaande toegang
Hyperlight kan een structuur met het kenmerk Alleen-lezen /input weergeven plus een beschrijfbaar /output gebied voor gegenereerde artefacten.
- Gebruik
workspace_rootdit om een werkruimte beschikbaar te maken onder/input/. - Gebruik
file_mountsom specifieke hostpaden naar de sandbox te mappen. - Gebruik
allowed_domainsdit om uitgaande toegang alleen in te schakelen voor specifieke doelen of methoden.
file_mounts accepteert een verkorte notatie, een expliciet (host_path, mount_path) paar of een FileMount genoemde tuple.
allowed_domains accepteert een doelstring, een expliciet (target, method-or-methods) paar of een AllowedDomain tuple met naam.
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"),
],
)
Richtlijnen voor uitvoer
Om tekst uit execute_code weer te geven, beëindig de code met print(...); Hyperlight retourneert de waarde van de laatste expressie niet automatisch.
Wanneer de toegang tot het bestandssysteem is ingeschakeld, sla dan grotere objecten op in /output/<filename>. Geretourneerde bestanden worden gekoppeld aan het resultaat van het hulpprogramma, terwijl bestanden onder /input beschikbaar zijn om te lezen in de sandbox.
CodeAct en directe hulpprogramma-aanroepen vergelijken
In het benchmarkvoorbeeld wordt dezelfde taak uitgevoerd met dezelfde client, model, hulpprogramma's, prompt en gestructureerd uitvoerschema één keer via het traditionele aanroepen van hulpprogramma's en eenmaal via CodeAct met Hyperlight-ondersteuning. Het enige verschil is de bedrading: directe gereedschappen versus één execute_code gereedschap dat ondersteund wordt door HyperlightCodeActProvider.
async def _run_traditional() -> tuple[float, AgentResponse]:
agent = Agent(
client=get_client(),
name="TraditionalAgent",
instructions=INSTRUCTIONS,
tools=TOOLS,
default_options={"response_format": UserGrandTotals},
)
start = time.perf_counter()
result = await agent.run(BENCHMARK_PROMPT)
elapsed = time.perf_counter() - start
return elapsed, result
async def _run_codeact() -> tuple[float, AgentResponse]:
codeact = HyperlightCodeActProvider(
tools=TOOLS,
approval_mode="never_require",
)
agent = Agent(
client=get_client(),
name="CodeActAgent",
instructions=INSTRUCTIONS,
context_providers=[codeact],
default_options={"response_format": UserGrandTotals},
)
start = time.perf_counter()
result = await agent.run(BENCHMARK_PROMPT)
elapsed = time.perf_counter() - start
return elapsed, result
In dat voorbeeld berekent de agent eindtotalen voor een gegevensset van gebruikers en orders door herhaaldelijk gegevens op te zoeken en lichte berekeningen uit te voeren. Dat is precies het soort werkstroom met veel kleine stappen, waarbij CodeAct de orchestration-overhead kan verwijderen. In het volledige voorbeeld worden de verstreken tijd en het tokengebruik voor beide uitvoeringen getoond, zodat u het uitvoeringspatroon in uw eigen omgeving kunt vergelijken.
Huidige beperkingen
Dit pakket bevindt zich nog steeds in de alfafase en het is verstandig om met een paar beperkingen rekening te houden.
- Platformondersteuning volgt de gepubliceerde Hyperlight-back-endpakketten. Tegenwoordig betekent dit ondersteunde Linux- en Windows-omgevingen; niet-ondersteunde platforms mislukken bij het maken van de sandbox.
- De huidige integratie voert Python-gastcode uit. De .NET-documentatie is binnenkort beschikbaar.
- De toestand van de in-memory interpreter blijft niet behouden bij aparte
execute_codeaanroepen. Gebruik gekoppelde bestanden en/outputartefacten wanneer gegevens moeten blijven bestaan tussen aanroepen. - Goedkeuring is van toepassing op de
execute_codeaanroep als geheel, niet op elke persooncall_tool(...)in hetzelfde codeblok. - Beschrijvingen van hulpprogramma's, parameteraantekeningen en de vorm van retourwaarden zijn hier belangrijker omdat het model code schrijft op basis van dat contract in plaats van voor geïsoleerde directe hulpprogramma-oproepen te kiezen.