人工智能大模型强化学习AI Agent微调【免费下载链接】OpenClaw-RLOpenClaw-RL: Train any agent simply by talking项目地址https://gitcode.com/gh_mirrors/op/OpenClaw-RL点击查看免费下载本文以 mini-SWE-agent位于本仓库swe-rl/mini-swe-agentAPI 参考文档中LocalEnvironment模块为核心系统讲解本地执行环境的设计定位、配置参数、命令执行语义与测试验证。读完本文你将掌握 LocalEnvironment 的完整 API 用法、如何在 YAML 配置文件与 Python 代码中启用并调优该环境以及它与 Docker、Singularity 等其他执行后端的差异与适用边界。一、LocalEnvironment 是什么mini-SWE-agent 的默认命令执行后端在 mini-SWE-agent 中Agent 通过向模型输出 bash 代码块再由执行环境把命令跑起来、把结果反馈给模型从而完成读代码 → 改代码 → 跑测试的完整闭环。执行环境Environment就是这闭环中的手。官方环境文档 docs/advanced/environments.md 明确指出运行mini时默认使用的就是local环境If you runmini, you will run in thelocalenvironment by default。LocalEnvironment的模块 docstring 只有一句话却道破了它的本质This class executes bash commands directly on the local machine.即LocalEnvironment不做任何隔离直接在宿主机器上通过subprocess.run执行 bash 命令直接工作在你当前的 Python 环境与操作系统里。它是 mini-SWE-agent 环境体系中最简单、最直接、零额外依赖的后端也是理解其他隔离型后端Docker、Singularity 等的最佳起点。核心实现文件src/minisweagent/environments/local.py其中包含两个公开对象LocalEnvironmentConfig配置数据类承载cwd、env、timeout三个字段LocalEnvironment执行环境类提供execute()与get_template_vars()两个核心方法。二、环境抽象与注册机制local是如何被解析的2.1 Environment 协议在 src/minisweagent/init.py 中mini-SWE-agent 用 PythonProtocol定义了执行环境的统一接口LocalEnvironment正是按这个协议实现的class Environment(Protocol): Protocol for execution environments. config: Any def execute(self, command: str, cwd: str ) - dict[str, str]: ... def get_template_vars(self) - dict[str, Any]: ...也就是说任何环境类只要提供config属性、execute()与get_template_vars()两个方法就能被 Agent 透明使用。LocalEnvironment恰好完整满足这三个成员。2.2 环境注册表与简写名src/minisweagent/environments/init.py 维护了一个字符串到类的映射表_ENVIRONMENT_MAPPING { docker: minisweagent.environments.docker.DockerEnvironment, singularity: minisweagent.environments.singularity.SingularityEnvironment, local: minisweagent.environments.local.LocalEnvironment, swerex_docker: minisweagent.environments.extra.swerex_docker.SwerexDockerEnvironment, bubblewrap: minisweagent.environments.extra.bubblewrap.BubblewrapEnvironment, }get_environment_class(spec)接受简写名如local或完整导入路径如minisweagent.environments.local.LocalEnvironment通过importlib.import_module动态解析若解析失败会抛出包含可用环境列表的ValueError。get_environment(config)则从配置字典中弹出environment_class键再以剩余配置项实例化对应环境。测试 tests/environments/test_init.py 验证了三条关键行为简写local与完整路径都能解析到LocalEnvironment非法简写invalid_environment与不存在的模块路径都会抛出ValueErrorUnknown environment type。2.3 与其他执行后端的定位差异同目录下还提供了docker、singularity、bubblewrap实验性仅 Linux、swerex_docker等隔离型后端对应源码见 docker.py、singularity.py 等。它们的定位差异可概括为环境隔离性适用场景local无隔离直接在宿主机执行本地开发、交互式mini、快速原型验证docker容器隔离docker exec执行SWE-bench 等需要可复现环境的评估singularity容器隔离--contain --cleanenvDocker 不可用的 HPC 环境bubblewrap非特权沙箱仅 Linux实验性轻量级命令沙箱swerex_docker通过 SWE-ReX 管理 Docker需要更强沙箱控制与并发管理的场景官方 SWE-bench 配置文件 src/minisweagent/config/extra/swebench.yaml 中environment_class: docker即为评估用隔离环境的典型选择这也反向印证了local更适合开发与交互场景。三、LocalEnvironmentConfig 配置参数详解LocalEnvironmentConfig是一个dataclass字段极少全部可以直接通过关键字传入dataclass class LocalEnvironmentConfig: cwd: str env: dict[str, str] field(default_factorydict) timeout: int 30字段默认值类型含义cwd空字符串str命令执行的起始工作目录为空时回退到os.getcwd()进程当前目录env{}dict[str, str]注入到子进程的额外环境变量覆盖宿主同名变量timeout30int单条命令的超时时间秒超时抛出subprocess.TimeoutExpired单元测试 tests/environments/test_local.py 中的test_local_environment_config_defaults直接断言了这三个默认值cwd 、env {}、timeout 30test_local_environment_custom_timeout则验证了LocalEnvironment(**config.__dict__)这种先建配置、再实例化环境的用法。四、execute() 执行语义一条命令从提交到返回execute()是 LocalEnvironment 的核心方法签名如下def execute(self, command: str, cwd: str , *, timeout: int | None None):4.1 工作目录的三级回退cwd cwd or self.config.cwd or os.getcwd()execute()内的工作目录按调用参数 → 配置cwd→ 进程当前目录三级回退。测试中test_local_environment_custom_cwd配置cwd生效pwd输出目标目录test_local_environment_cwd_parameter_overrideexecute(..., cwdtemp_dir2)的参数优先级高于配置cwdtest_local_environment_default_cwd两者皆空时回退到os.getcwd()。4.2 底层 subprocess.run 的关键参数result subprocess.run( command, shellTrue, textTrue, cwdcwd, envos.environ | self.config.env, timeouttimeout or self.config.timeout, encodingutf-8, errorsreplace, stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, )逐项解读其对 Agent 行为的影响shellTrue命令交给系统 shell 解释因此管道、重定向、命令替换等完整 shell 特性均可用。test_local_environment_shell_features验证了echo hello world | grep world与echo $(echo nested)两种写法都能正确执行。envos.environ | self.config.env宿主机全部环境变量与配置env合并Python 3.9 的 dict 并集运算符配置中的变量优先。test_local_environment_existing_env_variables验证新旧变量共存test_local_environment_env_variable_override验证env{CONFLICT_VAR: override_value}能覆盖宿主同名变量CONFLICT_VARoriginal_value。timeouttimeout or self.config.timeoutexecute()的timeout参数优先否则使用配置超时默认 30 秒。test_local_environment_timeout用timeout1sleep 2验证了超时抛subprocess.TimeoutExpired的行为。stderrsubprocess.STDOUTstderr 与 stdout 合并输出Agent 在单一output字段中即可看到错误信息。test_local_environment_stderr_capture验证了echo error message 2的输出会被捕获到output中。encodingutf-8errorsreplace以 UTF-8 解码遇到非法字节用替换字符兜底避免因个别乱码字节导致整个执行失败。4.3 统一的返回结构return {output: result.stdout, returncode: result.returncode}每次执行都返回一个仅含两个键的字典output合并后的标准输出/错误文本与returncode退出码。这被 Agent 侧的action_observation_template直接消费见 src/minisweagent/config/default.yaml 中的returncode{{output.returncode}}/returncode与output{{output.output}}/output。测试test_local_environment_return_codes参数化验证了退出码 0、1、42 都会被忠实捕获test_local_environment_command_failure验证exit 1返回returncode 1test_local_environment_nonexistent_command验证不存在的命令返回非零码且错误信息出现在output中如 command not found。4.4 状态非持久每次执行都是全新子进程值得特别强调LocalEnvironment 每次execute都通过subprocess.run启动一个全新的子 shell目录切换、环境变量导出等状态改动不会在多次调用之间保留。这与默认配置模板default.yaml 中 instance_template 的说明一致Agent 被告知Directory or environment variable changes are not persistent. Every action is executed in a new subshell如需持久状态应使用MY_ENV_VARMY_VALUE cd /path ...前缀或写入/读取文件。理解这一点是正确使用本地环境的必修课——cd不会跨命令生效所有命令必须以自包含方式书写。五、get_template_vars() 与提示词模板变量def get_template_vars(self) - dict[str, Any]: return asdict(self.config) | platform.uname()._asdict() | os.environ该方法为 Agent 的提示词模板提供变量返回三部分合并配置字典asdict(self.config)即cwd、env、timeout系统信息platform.uname()._asdict()提供system、release、version、machine、processor等字段宿主机全部环境变量os.environ。第三点是local环境独有的能力——官方配置文档 docs/advanced/yaml_configuration.md 明确指出环境变量可作为模板变量仅在LocalEnvironment下可用Environment variables (LocalEnvironmentonly)。这套变量的实际消费路径是Agent 在render_template()中调用self.env.get_template_vars()合并进模板上下文见 src/minisweagent/agents/default.py再交给 Jinja2 渲染。例如 default.yaml 的系统信息占位system_information {{system}} {{release}} {{version}} {{machine}} {{processor}} /system_information渲染后即是当前宿主机的uname信息Agent 由此感知自己运行在什么系统上提示词模板还会据此给出 macOS 下sed -i 之类的平台差异提示。六、在配置文件中启用与调优本地环境6.1 内置配置中的 environment 段mini的默认配置文件 src/minisweagent/config/mini.yaml 与 default.yaml 中均包含如下environment段environment: env: PAGER: cat MANPAGER: cat LESS: -R PIP_PROGRESS_BAR: off TQDM_DISABLE: 1这里没有显式声明environment_class因为运行mini时默认即使用local环境配置的env键会在实例化时传入LocalEnvironment(env{...})见下文 mini.py 的实例化代码把这些环境变量合并进每一次命令执行。6.2 显式指定环境与完整本地配置示例官方环境文档 docs/advanced/environments.md 说明环境类可通过--environment-class命令行标志或配置键environment.environment_class指定。一个完整、可实际运行的本地环境配置示例如下environment: cwd: /path/to/your/repo # 所有命令的起始工作目录 timeout: 60 # 单条命令超时秒默认 30 env: PAGER: cat # 禁用交互式分页器避免卡死 MANPAGER: cat LESS: -R PIP_PROGRESS_BAR: off # 关闭进度条减少输出噪音 TQDM_DISABLE: 1 # 禁用 tqdm保持输出干净 environment_class: local # 显式声明使用本地环境6.3 对照SWE-bench 评估为何改用 docker作为对照官方 SWE-bench 配置 src/minisweagent/config/extra/swebench.yaml 的环境段为environment: cwd: /testbed timeout: 60 env: PAGER: cat MANPAGER: cat LESS: -R PIP_PROGRESS_BAR: off TQDM_DISABLE: 1 environment_class: docker同样是cwd、timeout、env三个键的形态但environment_class换成了docker且cwd指向容器内的/testbed。这说明配置结构在各环境间完全统一切换后端只需改environment_class与对应专有字段如 docker 的image这也是理解整套环境体系的关键。七、在 Python 代码中直接使用 LocalEnvironment7.1 mini 入口中的实例化方式mini命令的入口 src/minisweagent/run/mini.py 展示了官方实例化姿势model get_model(model_name, config.get(model, {})) env LocalEnvironment(**config.get(env, {})) agent agent_class(model, env, **config.get(agent, {}))配置文件的environment段以关键字参数形式展开进LocalEnvironment再与 Model 一起注入 Agent。这就是运行mini默认在本地环境执行的代码级证据。7.2 独立使用示例你也可以脱离 Agent直接像测试那样使用该环境from minisweagent.environments.local import LocalEnvironment # 指定工作目录、注入环境变量、放宽超时 env LocalEnvironment( cwd/path/to/your/repo, env{MY_FLAG: 1, PYTHONUNBUFFERED: 1}, timeout120, ) # 单条命令执行 result env.execute(pwd ls -la) print(returncode:, result[returncode]) print(output:, result[output]) # 命令失败时 returncode 非零错误文本在 output 中 result env.execute(nonexistent_command_12345) assert result[returncode] ! 0 print(result[output]) # 包含 command not found 等错误信息该代码模式与测试 tests/environments/test_local.py 中的多条用例完全一致可直接照搬验证。八、测试体系行为契约一览tests/environments/test_local.py 是 LocalEnvironment 的行为契约文档共 15 个测试用例覆盖维度如下测试验证的行为test_local_environment_config_defaults配置默认值cwd、env{}、timeout30test_local_environment_basic_execution基础命令执行与输出捕获test_local_environment_set_env_variables配置env注入的变量在命令中可见test_local_environment_existing_env_variables宿主变量与注入变量共存test_local_environment_env_variable_override注入变量覆盖宿主同名变量test_local_environment_custom_cwd/cwd_parameter_override/default_cwd工作目录三级回退优先级test_local_environment_command_failureexit 1返回码捕获test_local_environment_nonexistent_command不存在的命令非零码 错误文本test_local_environment_stderr_capturestderr 合并进outputtest_local_environment_timeout/custom_timeout超时抛subprocess.TimeoutExpiredtest_local_environment_return_codes参数化验证返回码 0/1/42test_local_environment_multiline_output多行输出逐行保留test_local_environment_file_operations命令在cwd中的文件创建/读取真实落盘test_local_environment_shell_features管道、命令替换等 shell 特性配合 tests/environments/test_init.py 对注册机制的验证整套测试从类解析 → 配置默认值 → 执行语义 → 边界行为四个层面锁定了本地环境的所有关键行为。九、适用场景与注意事项适用场景本地交互式开发运行mini/mini -v时让 Agent 直接在你的代码仓库里工作零额外依赖、零镜像拉取启动最快快速原型与脚本化调用通过LocalEnvironment在 Python 中批量执行命令并解析output/returncode作为理解隔离型环境的基础local 的execute/get_template_vars协议与 docker、singularity 完全同构先掌握 local 再看容器后端事半功倍。注意事项与风险提示无隔离、无沙箱命令以当前用户身份直接在宿主机执行Agent 的任何输出都会被真实运行。对不可信任务或需要可复现环境的研究评估请改用docker官方 SWE-bench 配置即如此或singularity、bubblewrap状态不持久每次执行都是新子进程cd、export不跨命令生效命令需写成自包含形式超时纪律默认 30 秒长时间运行的命令会抛subprocess.TimeoutExpired请按需调大timeout输出体积模板对超过 10000 字符的输出会进行截断提示见 default.yaml 的action_observation_template本地执行时应引导 Agent 用head、tail、grep控制输出量。综上LocalEnvironment以极简的 38 行实现local.py通过统一的 Environment 协议接入 mini-SWE-agent 的 Agent 循环是理解整个环境抽象体系、快速上手本地 Agent 实验的最佳入口。赞分享人工智能大模型强化学习AI Agent微调【免费下载链接】OpenClaw-RLOpenClaw-RL: Train any agent simply by talking项目地址https://gitcode.com/gh_mirrors/op/OpenClaw-RL点击查看免费下载相关推荐Sherpa-onnx Zipformer ONNX 推理实操一次跑通流式识别Sherpa onnx Zipformer ONNX 推理实操一次跑通流式识别 刚把 Sherpa onnx 装好第一次用 Zipformer ONNX 模人工智能语音音频本地部署res-downloader 资源嗅探与视频下载上手指南从装好代理到存下第一个文件res downloader 资源嗅探与视频下载上手指南从装好代理到存下第一个文件 想把微信视频号里的视频、网页上的图片和音频存到本地又不想逐条复制链接r桌面应用系统编程mini-swe-agent ConTree 环境指南基于 ConTree 沙箱执行 SWE-bench 任务mini swe agent ConTree 环境指南基于 ConTree 沙箱执行 SWE bench 任务 导读 本文围绕 ConTree 环境参考文档人工智能大模型AI Agent代码智能体创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考