ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

OpenSandbox × Qwen Code:在沙箱容器中运行 Qwen Code CLI 的 OpenAI 兼容端点实战指南

OpenSandbox × Qwen Code:在沙箱容器中运行 Qwen Code CLI 的 OpenAI 兼容端点实战指南 OpenSandbox × Qwen Code在沙箱容器中运行 Qwen Code CLI 的 OpenAI 兼容端点实战指南【免费下载链接】OpenSandboxSecure, Fast, and Extensible Sandbox runtime for AI agents.项目地址: https://gitcode.com/GitHub_Trending/ope/OpenSandbox本文基于 OpenSandbox 仓库中的官方示例文档与配套源码讲解如何在 OpenSandbox 容器中通过 OpenAI 兼容端点运行 Qwen Code阿里 Qwen 系列的编码 CLI 工具。读完本文你将掌握如何启动本地 OpenSandbox server、如何配置模型提供方BASE_URL / MODEL_NAME / API_KEY以及示例脚本examples/qwen-code/main.py是如何完成沙箱创建、写入 Qwen Code 项目配置、安装 CLI 并以 headless 模式执行推理任务的完整链路。一、场景说明Qwen Code 是一个命令行编码智能体。本示例把 Qwen Code 放进 OpenSandbox 容器内运行CLI 本身运行在隔离的沙箱里而模型推理走外部的 OpenAI 兼容 API示例默认指向 DashScope 的compatible-mode端点模型为qwen3-coder-plus。这样既让 LLM 的手脚终端命令、文件操作被限制在沙箱内又保留了自定义模型接入的灵活性——API Key 只通过环境变量注入不落盘、不进仓库。对应的官方文档为 docs/examples/qwen-code.md示例代码位于 examples/qwen-code/main.py入口说明见 examples/qwen-code/README.md。二、第一步启动本地 OpenSandbox ServerDocker 运行时1. 预拉取 code-interpreter 镜像code-interpreter 镜像自带 Node.js 运行环境Qwen Code 是 Node 编写的 CLI因此可以直接在容器内用npm安装docker pull sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:v1.1.0 # use docker hub # docker pull opensandbox/code-interpreter:v1.1.02. 安装并启动 serveruv pip install opensandbox-server opensandbox-server init-config ~/.sandbox.toml --example docker opensandbox-serverinit-config子命令用于从打包的示例配置生成一份 TOML 配置文件。查看 server/opensandbox_server/cli.py 中init-config的参数定义可知第一个可选参数是目标路径默认为~/.sandbox.toml--example支持docker、docker-zh、k8s、k8s-zh四种打包示例分别对应 Docker / Kubernetes 运行时的中英文配置不带--example时会渲染一份带占位符的完整骨架所有字段都需用户显式填写--force允许覆盖已存在的配置文件文件已存在且未加--force时会抛出FileExistsError。打包示例配置模板位于 server/opensandbox_server/examples/ 目录init-config通过 Python 资源加载机制复制该模板。执行opensandbox-server不带子命令即启动服务标准输出日志会直接打印在终端便于本地观察沙箱创建、命令执行等生命周期事件。三、第二步创建并访问 Qwen 沙箱在另外的终端中准备 Python 环境与模型提供方变量# Install OpenSandbox package uv pip install opensandbox # Export provider settings export API_KEYyour-api-key export BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 export MODEL_NAMEqwen3-coder-plus # Run the example uv run python examples/qwen-code/main.py脚本的运行行为与 examples/qwen-code/README.md 及文档描述一致创建沙箱时通过env{API_KEY: qwen_api_key}把模型 API Key 注入容器环境变量在沙箱内写入项目级配置/tmp/qwen-code-example/.qwen/settings.json运行时执行npm install -g qwen-code/qwen-codelatest安装 Qwen Code CLI以 headless 模式运行qwen -p Compute 11 and reply with only the final number.打印执行日志后调用sandbox.kill()销毁沙箱。整个流程中 API Key 仅经由API_KEY环境变量传递不会写入仓库或配置文件。四、示例脚本源码解读一次完整的沙箱编排examples/qwen-code/main.py 只有百余行但它完整演示了 OpenSandbox Python SDK 的核心编排模式值得逐段拆解。1. 读取环境变量并构建连接配置domain os.getenv(SANDBOX_DOMAIN, localhost:8080) api_key os.getenv(SANDBOX_API_KEY) qwen_api_key _required_env(API_KEY) # API_KEY 必填缺失直接抛 RuntimeError qwen_base_url os.getenv(BASE_URL, https://dashscope.aliyuncs.com/compatible-mode/v1) qwen_model_name os.getenv(MODEL_NAME, qwen3-coder-plus) image os.getenv( SANDBOX_IMAGE, sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:v1.1.0, ) config ConnectionConfig( domaindomain, api_keyapi_key, request_timeouttimedelta(seconds60), )ConnectionConfig是 SDK 中管理 API 连接的配置模型定义在 sdks/sandbox/python/src/opensandbox/config/connection.py结合源码可以看清楚示例中各参数的含义与默认行为字段示例取值 / SDK 默认值说明domainlocalhost:8080沙箱管理服务地址未设置时回退读环境变量OPEN_SANDBOX_DOMAIN再回退到localhost:8080见 connection.py#L122api_key示例中可为None本地 server 不强制鉴权也可从环境变量OPEN_SANDBOX_API_KEY兜底读取见 connection.py#L190-L198request_timeout示例设为 60sSDK 默认 30s管理 API 的 HTTP 请求超时必须为正值有 validator 校验见 connection.py#L183-L188protocolhttp只接受http/httpsdomain若自带 scheme 则覆盖该字段retry_policy默认RetryPolicy()非流式请求默认走重试包装的RetryAsyncTransport如需快速失败可传RetryPolicy.disabled()use_server_proxyFalse当客户端无法直连沙箱内的 execd 时可让 sandbox server 代为转发进程级请求从源码结构看get_base_url()最终拼出形如http://localhost:8080/v1的管理 API 地址说明客户端与 server 之间走的是统一的v1REST 接口层见 connection.py#L204-L212。2. 创建沙箱并注入 API Keysandbox await Sandbox.create( image, connection_configconfig, env{API_KEY: qwen_api_key}, ) async with sandbox: ... await sandbox.kill()Sandbox.create见 sdks/sandbox/python/src/opensandbox/sandbox.py以镜像名 连接配置创建沙箱env参数把API_KEY直接注入容器环境——这就是密钥只走环境变量的实现点async with sandbox提供上下文管理退出时资源可被安全清理示例末尾显式await sandbox.kill()销毁沙箱保证不留驻。3. 写入 Qwen Code 项目配置await sandbox.files.create_directories( [ WriteEntry(pathQWEN_PROJECT_DIR, mode755), WriteEntry(pathQWEN_SETTINGS_DIR, mode755), ] ) await sandbox.files.write_file(QWEN_SETTINGS_PATH, _build_qwen_settings(...), mode644)脚本先在沙箱内创建/tmp/qwen-code-example及其下的.qwen目录权限 755再写入settings.json权限 644。WriteEntry是 SDK 的文件系统写入模型定义于 sdks/sandbox/python/src/opensandbox/models/filesystem.py。_build_qwen_settings()main.py#L37-L59生成的配置结构如下它把BASE_URL与MODEL_NAME两个环境变量翻译成了 Qwen Code 的模型提供方声明{ modelProviders: { openai: [ { id: MODEL_NAME, name: MODEL_NAME, baseUrl: BASE_URL, description: Qwen Code via OpenAI-compatible API in OpenSandbox, envKey: API_KEY } ] }, security: { auth: { selectedType: openai } }, model: { name: MODEL_NAME } }几个关键设计点baseUrl指向 OpenAI 兼容端点默认https://dashscope.aliyuncs.com/compatible-mode/v1因此任何提供 OpenAI 兼容接口的服务自建 vLLM、其他厂商网关等都可以通过修改BASE_URL接入无需改动脚本逻辑envKey字段声明该提供方从环境变量API_KEY读取密钥与前面Sandbox.create(env...)的注入一一对应security.auth.selectedType openai选择 OpenAI 兼容认证通道model.name指定最终使用的模型默认qwen3-coder-plus。4. 安装并 headless 运行 Qwen Codeinstall_exec await sandbox.commands.run( npm install -g qwen-code/qwen-codelatest ) await _print_execution_logs(install_exec) run_exec await sandbox.commands.run( cd /tmp/qwen-code-example qwen -p Compute 11 and reply with only the final number. ) await _print_execution_logs(run_exec)沙箱内的 execd 组件负责命令执行sandbox.commands.run返回的执行结果对象带有logs.stdout/logs.stderr/error字段_print_execution_logsmain.py#L62-L68逐行打印便于在本地终端直接观察沙箱内 CLI 的输出qwen -p prompt是 Qwen Code 的 headless无交互模式给定一次性提示词完成推理后直接返回最终答复适合脚本化编排——这正是LLM Agent 跑在沙箱里、由 SDK 从外部驱动的典型形态。五、环境变量速查表以下变量表完整继承自官方文档并与 examples/qwen-code/main.py 中的读取逻辑一一对应变量默认值说明SANDBOX_DOMAINlocalhost:8080沙箱服务地址SANDBOX_API_KEY本地可留空若 server 开启了鉴权则必填SDK 侧还会回退读取OPEN_SANDBOX_API_KEYSANDBOX_IMAGEsandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:v1.1.0使用的沙箱镜像API_KEY必填无默认Qwen Code 所用的 OpenAI 兼容模型提供方的 API KeyBASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1OpenAI 兼容端点地址MODEL_NAMEqwen3-coder-plusQwen Code 使用的模型名注意API_KEY与SANDBOX_API_KEY是两个不同维度的密钥前者是模型提供方DashScope 等的 Key注入到沙箱内部后者是 OpenSandbox server 自身的访问凭证作用于宿主机侧 SDK 与管理 API 的通信。本地运行 docker 示例时后者通常不需要但接入启用鉴权的部署时两者要分别配置。六、可验证的实现依据与延伸阅读本文所有结论均可在仓库中直接对照源码核验官方文档docs/examples/qwen-code.md示例脚本examples/qwen-code/main.py连接配置L82-L86、沙箱创建L88-L92、写配置L95-L105、安装与运行L107-L117Python SDK 连接配置模型sdks/sandbox/python/src/opensandbox/config/connection.pySandbox.create入口sdks/sandbox/python/src/opensandbox/sandbox.py文件系统写入模型WriteEntrysdks/sandbox/python/src/opensandbox/models/filesystem.pyserver 侧init-config子命令实现server/opensandbox_server/cli.py适用前提与限制示例面向 Docker 运行时的本地 serverlocalhost:8080code-interpreter:v1.1.0镜像需可访问对应镜像仓库Qwen Code 的npm install -g与模型请求发生在沙箱内部因此沙箱需要可达 npm registry 与BASE_URL所指端点的网络。若你的部署启用了出站策略或凭据注入可参考 docs/examples/index.md 中列出的其他 Agent 类示例Claude Code、Gemini CLI、Codex CLI 等了解同类编排模式。【免费下载链接】OpenSandboxSecure, Fast, and Extensible Sandbox runtime for AI agents.项目地址: https://gitcode.com/GitHub_Trending/ope/OpenSandbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表