?)
如何不改代码覆盖 Computer Use Agent 配置TOML 文件与 CU_ 环境变量分层【免费下载链接】claude-quickstartsA collection of projects designed to help developers quickly get started with building deployable applications using the Claude API项目地址: https://gitcode.com/GitHub_Trending/an/claude-quickstartsclaude-quickstarts 仓库里的computer-use-best-practices是一个 macOS 上的 Computer Use 参考实现 Agent它直接控制你的鼠标、键盘和屏幕README 顶部明确要求在一次性 macOS 虚拟机里运行。这个项目的全部可调参数都收敛在 constants.py 的Configdataclass 上代码统一读取cfg.field。这意味着你不需要改任何代码就能通过两层机制覆盖任意字段一份由CU_CONFIG指向的 TOML 文件以及逐字段的CU_FIELD_NAME环境变量环境变量层叠在 TOML 之上后写生效。本文的任务就是完成安装后用这两种方式调整工具开关、JPEG 质量、图像裁剪策略、额外模型列表等配置并验证覆盖确实生效。前提条件来自 READMEmacOSPython 3.11macOS 自带 3.9 不行需先装 3.11 解释器在computer-use-best-practices目录下创建虚拟环境并安装依赖# 把 python3.13 换成你安装的 3.11 解释器 python3.13 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements.txt # browser 工具需要一次性约 150 MB python -m playwright install chromiumAPI key 放在该目录的.env文件里可cp .env.example .env后编辑或直接export ANTHROPIC_API_KEY...。constants.py在导入时会load_dotenv(REPO_ROOT / .env)所以.env必须和constants.py同级.env.example 本身就注释了CU_CONFIG和CU_*的用法。覆盖顺序先搞清谁压过谁Config.load的加载顺序定义在 constants.py 的模块注释和实现里Configdataclass 的默认值TOML 文件路径来自环境变量CU_CONFIGCU_FIELD_NAME环境变量如CU_JPEG_QUALITY80逐字段覆盖 TOML--set FIELDVALUECLI 覆盖参数。第 4 层需要留意constants.py注释里列了它但 CLI 入口main.py 的 argparse 实际只实现了--model、--thinking、--max-iters、--skip-preflight没有--config/--set。所以日常可用的就是前两层TOML 管一批字段环境变量管个别字段环境变量优先级更高。第一层用 TOML 文件覆盖一组字段config.example.toml 就是官方模板头部注释写明了用法复制一份、只填要改的字段其余保持默认然后用CU_CONFIG指向它。以 README 的示例为准# 在 computer-use-best-practices 目录下复制模板 cp config.example.toml config.tomlconfig.toml里只保留需要覆盖的字段例如 README 给出的这一组enable_advisor_tool true image_prune_strategy none extra_models [some-beta-model]然后把CU_CONFIGconfig.toml写进.env或临时 export 到 shell再正常启动 Agentpython -m computer_use open TextEdit and type hello worldTOML 里的值按原生类型读入image_prune_strategy none是字符串browser_viewport [1024, 768]是数组tests/test_config.py 的test_load_from_toml断言了这类写法extra_models [foo, bar]会被读成元组。只写你要改的字段即可没写的字段全部沿用默认值。第二层用 CU_ 环境变量覆盖单个字段字段名大写后加CU_前缀就是对应环境变量jpeg_quality→CU_JPEG_QUALITYenable_browser_use_tools→CU_ENABLE_BROWSER_USE_TOOLS。两种用法# 一次性禁用 browser 工具并提高 JPEG 质量 CU_ENABLE_BROWSER_USE_TOOLSfalse CU_JPEG_QUALITY85 \ python -m computer_use open Notes and type hello # 用环境变量固定浏览器视口字符串会被强转成元组 CU_BROWSER_VIEWPORT1280x720 python -m computer_use ...也可以把这些变量直接写进.env长期生效。README 明确说明环境变量层叠在 TOML 文件之上所以同一字段两处都设时环境变量赢。仓库测试 tests/test_config.py 的test_env_var_overrides_toml就是这条规则的直接证据TOML 写jpeg_quality 50环境变量CU_JPEG_QUALITY99加载结果断言为99。字符串值会按字段声明类型强转规则以 README 和constants.py的_coerce为准布尔true→True接受1、true、yes、on为真其余为假整数80→80可选整数none→None如advisor_max_uses元组1280x720→(1280, 720)字符串元组如extra_models用逗号分隔a, b, c→(a, b, c)TOML 读入的非字符串值直接透传不做转换。extra_models还兼容旧变量名COMPUTER_USE_EXTRA_MODELS只要CU_EXTRA_MODELS没设旧变量值会被自动接上constants.py中cfg构建处。验证覆盖是否生效不改机器状态的检查。cfg在constants.py导入时构建cfg Config.load(os.environ.get(CU_CONFIG))而整个代码库只读这一个实例所以导入后直接打印字段就是当前生效值。这不会移动鼠标、不会调用 API是验证覆盖最安全的办法CU_JPEG_QUALITY85 python -c import constants; print(constants.cfg.jpeg_quality) # 期望输出 85文档内置的钳位提示。autocompaction_trigger_tokens低于 API 下限 50000 时会被钳回 50000并在 stderr 打印一行说明。利用它能同时验证“覆盖生效”和“保护逻辑”CU_AUTOCOMPACTION_TRIGGER_TOKENS10000 python -c import constants # stderr 输出文档中的提示文本格式 # [config] autocompaction_trigger_tokens10000 is below the API floor; clamping to 50000.看到这行说明环境变量值确实进入了Config并且被下限规则处理。跑一遍仓库测试。配置加载与分层规则本身有测试覆盖TOML 加载、环境变量压过 TOML、类型强转python -m pytest其中tests/test_config.py直接对应本文的两种覆盖方式。在真实运行中观察。启动后 Agent 会先打印安全横幅、做 macOS 权限预检然后进入交互循环思考以灰色流式输出、工具调用以青色→ computer({...})行显示。可观察的覆盖效果包括print_usage默认true每轮打印[usage] in… cache_read… | cache_eff…%一行设CU_PRINT_USAGEfalse后该行消失--max-iters的缺省值取自cfg.default_max_iters改 TOML 里的default_max_iters即改变 CLI 缺省轮数上限。注意真实运行的副作用python -m computer_use会驱动真实鼠标键盘README 强烈建议在一次性 macOS VM 中运行只想验证启动路径时可加--skip-preflight跳过权限检查。一个有明确报错的边界是computer 与 browser 工具全关时启动直接抛ValueError: At least one of cfg.enable_computer_use_tools or cfg.enable_browser_use_tools must be True.见main.py 的build_tools。边界与容易踩的坑拼错的字段名会被静默丢弃。Config.load只保留Config中声明过的键TOML 或环境变量里写错字段名不会报错也不生效——这正是需要上面验证步骤的原因。dict 类型字段不能用字符串设置。thinking_effort是 dict 字段从环境变量或字符串覆盖会得到ValueError: Config field thinking_effort is dict-typed and cannot be set from a string (env var or --set). Use a TOML config file instead.只能写 TOML。advisor 与 autocompaction 是 first-party 专属。provider设为vertex或bedrock时启用任一者启动时抛ValueError并点名冲突字段把它设为False或换回provideranthropic才能继续。cfg只在导入时构建一次。脚本里需要按新来源重建时调用constants.reload(...)注意from constants import cfg的模块持有的是旧绑定reload的文档字符串明确提示需要同时重绑本地名。各字段的默认值与完整清单以constants.py中每个字段的注释为准常用开关的默认值可查 README 的 “Feature toggles at a glance” 表格如jpeg_quality默认 75、image_prune_strategy默认interval、enable_advisor_tool默认false。【免费下载链接】claude-quickstartsA collection of projects designed to help developers quickly get started with building deployable applications using the Claude API项目地址: https://gitcode.com/GitHub_Trending/an/claude-quickstarts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考