Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Hyperlight — это задокументированная серверная часть для CodeAct в Agent Framework. Он предоставляет execute_code средство, поддерживаемое изолированной средой выполнения песочницы, и может вызывать средства call_tool(...) узла, принадлежащие поставщику.
Общие сведения о уровне шаблона см. в разделе CodeAct.
Почему Hyperlight CodeAct
Современные агенты часто ограничены больше накладными расходами на вызов инструментов, чем самой моделью. Задача, которая считывает данные, выполняет легкие вычисления и собирает результат, может легко превратиться в цепочку взаимодействий модели -> инструмента -> модели -> инструмента, даже если каждый отдельный шаг прост.
Hyperlight поддерживаемый CodeAct оптимизирует этот цикл. Модель записывает одну короткую программу на Python, песочница выполняет её один раз, и инструменты, принадлежащие поставщику, доступны из песочницы с помощью call_tool(...). В репрезентативных нагрузках с преобладанием инструментов этот сдвиг может сократить задержку примерно вдвое и использование токенов более чем на 60%, сохраняя при этом изоляцию выполнения и возможность аудита.
Get started
Скоро.
Установите пакет
pip install agent-framework-hyperlight --pre
agent-framework-hyperlight поставляется отдельно от agent-framework-core, поэтому вы используете только песочницу, когда это необходимо.
Note
Пакет зависит от компонентов песочницы Hyperlight. Если серверная часть еще не опубликована для вашей текущей платформы, execute_code попытается создать песочницу, но это завершится ошибкой.
Используйте HyperlightCodeActProvider
HyperlightCodeActProvider — это рекомендуемая точка входа, когда требуется автоматически добавить CodeAct для каждого запуска. Он внедряет инструкции CodeAct, выполняемые в ограниченной области, а также инструмент execute_code, удерживая инструменты, принадлежащие поставщику, в стороне от непосредственного использования агентом.
Инструменты, зарегистрированные у поставщика, доступны внутри песочницы через call_tool(...), но они не предоставляются как прямые инструменты агента. Поставщик также предоставляет управление в стиле CRUD для инструментов, подключений файлов и исходящих записей списка разрешений с помощью таких методов, как add_tools(...), remove_tool(...), add_file_mounts(...) и add_allowed_domains(...).
Как работают утверждения и инструменты хоста
Средства Agent Framework содержат 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).
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(...); Hyperlight не возвращает значение последнего выражения автоматически.
Если доступ к файловой системе включен, записывайте более крупные артефакты в /output/<filename> вместо этого. Возвращенные файлы присоединяются к результату средства, тогда как файлы под /input доступны для чтения в песочнице.
Сравнение CodeAct и прямой вызов инструментов
Пример теста выполняет ту же задачу с тем же клиентом, моделью, инструментами, подсказками и структурированной выходной схемой один раз через вызов традиционного средства и один раз через Hyperlight-backed CodeAct. Единственное различие заключается в проводке: прямые инструменты по сравнению с одним инструментом execute_code, поддерживаемым HyperlightCodeActProvider.
В этом примере агент вычисляет большие итоги по набору данных пользователей и заказов, многократно просматривая данные и выполняя легкие вычисления. Это именно такой рабочий процесс с небольшими шагами, в котором CodeAct может снизить нагрузку на обеспечение оркестрации. Полный пример выводит информацию о затраченном времени и использовании токенов для обеих прогонов, чтобы сравнить профиль выполнения в собственной среде.
Текущие ограничения
Этот пакет по-прежнему находится на стадии альфа-версии, и стоит учитывать некоторые ограничения:
- Поддержка платформы согласуется с опубликованными пакетами бэкенда Hyperlight. Сегодня это означает поддерживаемые среды Linux и Windows, а создание песочницы на неподдерживаемых платформах не удастся.
- Текущая интеграция выполняет гостевой код Python. Документация по .NET по-прежнему ожидается в ближайшее время.
- Состояние интерпретатора в памяти не сохраняется в разных вызовах
execute_code. Используйте подключенные файлы и/outputартефакты, когда данные должны сохраняться между вызовами. - Утверждение применяется к
execute_codeвызову в целом, а не к каждомуcall_tool(...)внутри одного блока кода. - Описания инструментов, аннотации параметров и формы возвращаемых значений имеют большее значение здесь, так как модель пишет код в соответствии с этим контрактом, а не использует изолированные прямые вызовы инструментов.