autogen_ext.code_executors.local#
- class LocalCommandLineCodeExecutor(timeout: int = 60, work_dir: Path | str | None = None, functions: Sequence[FunctionWithRequirements[Any, A] | Callable[[...], Any] | FunctionWithRequirementsStr] = [], functions_module: str = 'functions', virtual_env_context: SimpleNamespace | None = None)[source]#
基类:
CodeExecutor
,Component
[LocalCommandLineCodeExecutorConfig
]一个通过本地命令行环境执行代码的代码执行器类。
危险
这将在本地机器上执行代码。 如果与 LLM 生成的代码一起使用,应谨慎使用。
每个代码块都保存为一个文件,并在工作目录中的单独进程中执行,并且为每个代码块在工作目录中生成并保存一个唯一文件。 代码块按照接收的顺序执行。 命令行代码使用正则表达式针对危险命令列表进行清理,以防止执行可能影响用户环境的自毁命令。 目前仅支持的语言是 Python 和 shell 脚本。 对于 Python 代码,代码块使用语言“python”。 对于 shell 脚本,代码块使用语言“bash”、“shell”、“sh”、“pwsh”、“powershell”或“ps1”。
注意
在 Windows 上,必须将事件循环策略设置为 WindowsProactorEventLoopPolicy,以避免子进程出现问题。
import sys import asyncio if sys.platform == "win32": asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
- 参数:
timeout (int) – 执行任何单个代码块的超时时间。 默认为 60。
work_dir (str) – 代码执行的工作目录。 如果为 None,将使用默认工作目录。 默认工作目录是一个临时目录。
functions (List[Union[FunctionWithRequirements[Any, A], Callable[..., Any]]]) – 可供代码执行器使用的函数列表。 默认为空列表。
functions_module (str, optional) – 将创建用于存储函数的模块的名称。 默认为“functions”。
virtual_env_context (Optional[SimpleNamespace], optional) – 虚拟环境上下文。 默认为 None。
注意
使用当前目录(“.”)作为工作目录已被弃用。 使用它会引发弃用警告。
示例
如何将 LocalCommandLineCodeExecutor 与用于运行 autogen 应用程序的虚拟环境不同的虚拟环境一起使用:使用 venv 模块设置虚拟环境,并将它的上下文传递给 LocalCommandLineCodeExecutor 的初始化程序。 这样,执行器将在新环境中运行代码。
import venv from pathlib import Path import asyncio from autogen_core import CancellationToken from autogen_core.code_executor import CodeBlock from autogen_ext.code_executors.local import LocalCommandLineCodeExecutor async def example(): work_dir = Path("coding") work_dir.mkdir(exist_ok=True) venv_dir = work_dir / ".venv" venv_builder = venv.EnvBuilder(with_pip=True) venv_builder.create(venv_dir) venv_context = venv_builder.ensure_directories(venv_dir) local_executor = LocalCommandLineCodeExecutor(work_dir=work_dir, virtual_env_context=venv_context) await local_executor.execute_code_blocks( code_blocks=[ CodeBlock(language="bash", code="pip install matplotlib"), ], cancellation_token=CancellationToken(), ) asyncio.run(example())
- FUNCTION_PROMPT_TEMPLATE: ClassVar[str] = '你可以访问以下用户定义的函数。可以通过函数名称从名为`$module_name`的模块访问它们。\n\n例如,如果有一个名为`foo`的函数,你可以通过编写`from $module_name import foo`来导入它\n\n$functions'#
- SUPPORTED_LANGUAGES: ClassVar[List[str]] = ['bash', 'shell', 'sh', 'pwsh', 'powershell', 'ps1', 'python']#
- classmethod _from_config(config: LocalCommandLineCodeExecutorConfig) Self [source]#
从配置对象创建一个组件的新实例。
- 参数:
config (T) – 配置对象。
- 返回值:
Self – 组件的新实例。
- component_config_schema#
LocalCommandLineCodeExecutorConfig
的别名
- component_provider_override: ClassVar[str | None] = 'autogen_ext.code_executors.local.LocalCommandLineCodeExecutor'#
覆盖组件的 provider 字符串。这应该用于防止内部模块名称成为模块名称的一部分。
- async execute_code_blocks(code_blocks: List[CodeBlock], cancellation_token: CancellationToken) CommandLineCodeResult [source]#
(实验性)执行代码块并返回结果。
- 参数:
code_blocks (List[CodeBlock]) – 要执行的代码块。
cancellation_token (CancellationToken) – 用于取消操作的令牌
- 返回值:
CommandLineCodeResult – 代码执行的结果。
- format_functions_for_prompt(prompt_template: str = FUNCTION_PROMPT_TEMPLATE) str [source]#
(实验性)格式化提示的函数。
该模板包含两个变量:- $module_name:模块名称。- $functions:函数格式化为存根,每个函数之间有两个换行符。
- 参数:
prompt_template (str) – 提示模板。默认值为类默认值。
- 返回值:
str – 格式化的提示。