ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CLI 动作 endpoint 落在哪?TaoToken 这样改 Qwen-UI-Agent 的 Base URL

CLI 动作 endpoint 落在哪?TaoToken 这样改 Qwen-UI-Agent 的 Base URL 1. 先定位 CLI 动作 endpointQwen-UI-Agent 的 Base URL 不在 prompt 里排查 Qwen-UI-Agent 的 CLI 动作时最容易误判的一层是看到 GUI 截图正常、模型也能输出动作就以为 CLI 动作的 endpoint 在 shell adapter 里。TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_cli_intro可以完成注册、创建 Key 和控制台管理但真正决定 CLI 动作请求发到哪里的是模型推理客户端的 Base URL。Qwen-UI-Agent 把图形界面动作和命令行动作放在同一个决策循环里模型先读取屏幕状态、任务历史和可用动作空间再返回结构化 action其中 GUI 动作可能是点击、输入、滚动、长按CLI 动作可能是列目录、下载文件、运行分析脚本、生成表格或批量检查输出。很多接入问题不是模型不会做而是请求还没有到达正确的推理 endpoint。把链路拆开看会更清楚Qwen-UI-Agent 运行时收集屏幕状态、任务历史和工具描述。运行时把上下文发给 OpenAI 兼容的模型 endpoint。模型返回 JSON 动作里面可能同时包含 GUI action 和 CLI action。动作路由器再决定哪些交给图形执行器哪些交给本地 shell 执行器。CLI 执行器在沙箱或工作目录中执行命令并把 stdout、stderr、exit code 写回轨迹。所以本文的视角不是改 prompt而是从 CLI 动作 endpoint 反推到 Base URL 层。你需要把推理请求统一指到https://taotoken.net/apiKey 统一使用占位符YOUR_API_KEY这样.env、curl 验证、Qwen-UI-Agent runner、Claude Code、Codex、CC Switch 才不会各写一套地址。最常见的错误是GUI 动作偶尔能跑CLI 动作频繁失败日志里却只看到“动作解析失败”或“命令未执行”。实际根因可能是 Base URL 仍指向旧供应商或者路径被拼成了错误的/v1层级。先定位 endpoint再谈动作空间排障速度会快很多。2. Qwen-UI-Agent 的 GUICLI 混合动作空间endpoint 实际发生在模型推理层Qwen-UI-Agent 这类 GUI Agent 的关键变化是把“看屏幕”和“敲命令”放进同一套动作表示里。屏幕负责处理没有开放 API 的页面、应用和弹窗CLI 负责处理可脚本化、可复现、可批量执行的部分。例如一个桌面调研任务里GUI 可能负责打开浏览器、定位财报页面、翻页、截图核对CLI 可能负责下载文件、解压、跑 Python 分析、生成 Excel/PPT/Word再让 GUI 检查版式是否异常。这个混合动作空间有一个容易忽略的事实CLI 动作不是模型直接连 shell。模型本身不执行命令它只输出动作意图。真正执行命令的是本地或受控环境里的 runner。也就是说CLI 动作 endpoint 的第一跳是模型推理 API第二跳才是本地命令执行器。第一跳写错后面全部白搭。可以用一个简化日志理解[agent] taskdesktop_research [agent] observationscreenhistory [agent] inference.base_urlhttps://taotoken.net/api [agent] inference.endpointhttps://taotoken.net/api/v1/chat/completions [agent] modelYOUR_MODEL_ID [agent] response.actions3 [agent] action[0].typegui [agent] action[1].typecli [agent] action[2].typecli [cli] workdir/tmp/qwen-ui-agent-workspace [cli] dry_runtrue如果inference.base_url不是https://taotoken.net/api那么response.actions很可能为空或者返回的是自然语言说明而不是可路由动作。此时你去改 CLI 执行器没有意义。正确顺序是先确认 OpenAI 兼容客户端的base_url。再确认 API Key 是否能通过鉴权。再确认模型 ID 是否可用。再确认动作 schema 是否被约束为 JSON。最后才开启 CLI 执行并优先使用 dry run。很多长程任务会输出批量动作例如一次决策里同时给出“列目录、读取 CSV 前几行、统计行数、生成中间文件”。批量动作能减少往返次数但也放大了 Base URL 错误的影响一旦推理 endpoint 不对整批 CLI 动作都不会进入执行器。因此本文后面会用 curl 请求和 CLI 动作日志做对照让每一层都可验证。3. 去 TaoToken 创建 Key把控制台步骤收敛成 .env 片段上一节确认了 Base URL 层的重要性。接下来把 Key 和地址写进项目配置。TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_key_console提供控制台入口注册、登录、创建 API Key 都在官网完成。建议不要把 Key 写进脚本、Notebook 或 Git 仓库而是放进项目根目录的.env并确认.gitignore已忽略它。创建 Key 的流程可以收敛为打开 TaoToken 官网完成账号登录。进入控制台创建 API Key。Key 只在创建时完整显示复制后保存到密码管理器。在模型对话或模型列表里确认可用模型 ID不要凭记忆猜模型名。回到 Qwen-UI-Agent 项目根目录写入.env。下面是一个可复制的.env片段。不同 runner 的变量名可能不同请把左侧变量映射到你实际读取的环境变量名但地址和 Key 的值保持统一# Qwen-UI-Agent 推理侧OpenAI 兼容变量 OPENAI_API_KEYYOUR_API_KEY OPENAI_BASE_URLhttps://taotoken.net/api OPENAI_MODELYOUR_MODEL_ID # 如果 runner 使用自定义前缀可同步维护这一组 TAOTOKEN_API_KEYYOUR_API_KEY TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_MODELYOUR_MODEL_ID # CLI 动作执行侧先 dry run避免误操作 AGENT_CLI_ENABLEDtrue AGENT_CLI_DRY_RUNtrue AGENT_CLI_TIMEOUT_SECONDS60 AGENT_CLI_WORKDIR/tmp/qwen-ui-agent-workspace这里有两个原则。第一Base URL 写https://taotoken.net/api不要带 UTM 参数。UTM 只用于官网页面归因不用于 API 请求。第二CLI 动作默认dry_runtrue先看日志里准备执行什么命令再决定是否放开真实执行。对于支付、删除、隐私授权、生产数据库写入等敏感动作模型侧和 runner 侧都应该要求人工确认。本文里的 SQL 和命令都建议由读者在本地或隔离环境执行不要让 Agent 在无人监督下直连生产库。如果项目使用 Python OpenAI SDK映射方式如下import os from openai import OpenAI client OpenAI( api_keyos.environ[OPENAI_API_KEY], base_urlos.environ[OPENAI_BASE_URL], ) resp client.chat.completions.create( modelos.environ[OPENAI_MODEL], messages[ {role: system, content: 只输出 JSON 动作不要输出 Markdown。}, {role: user, content: 返回一个安全的 cli 动作列出当前工作目录。}, ], temperature0, response_format{type: json_object}, ) print(resp.choices[0].message.content)如果 SDK 报 404不要先改模型名。先检查OPENAI_BASE_URL是否被写成了带/v1的地址以及 OpenAI SDK 自己会拼接什么路径。对于手写 curl使用完整的 OpenAI 兼容路径对于 SDKBase URL 层保持https://taotoken.net/api。两者不是一回事但来源必须一致。4. 用 curl 验证 CLI 动作 endpoint请求体与动作日志一一对照在启动 Qwen-UI-Agent 之前先用 curl 做一次最小推理请求。这个请求不执行任何 CLI 命令只验证模型 endpoint 是否能返回结构化动作。把YOUR_API_KEY和YOUR_MODEL_ID替换成真实值后在本地终端执行curl -sS https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer YOUR_API_KEY \ -H Content-Type: application/json \ -d { model: YOUR_MODEL_ID, temperature: 0, messages: [ { role: system, content: 你是 Qwen-UI-Agent 的推理侧。只输出 JSON不要 Markdown。动作字段 type 只能是 gui 或 cli。cli 动作必须包含 cmd并且不得包含删除、支付、生产库写入。 }, { role: user, content: 在桌面 Google Growth Analysis 文件夹中检查是否有 CSV读取前 3 行并返回一个 batched cli 动作。不要真正执行写操作。 } ], response_format: {type: json_object} }期望返回的content是一段 JSON 字符串而不是解释性 Markdown。示例{ actions: [ { type: cli, cmd: ls -la \$HOME/Desktop/Google Growth Analysis\, batch: true }, { type: cli, cmd: head -n 3 \$HOME/Desktop/Google Growth Analysis\/*.csv, batch: true } ] }拿到这个响应后再启动 Qwen-UI-Agent观察日志里是否出现同一批动作。对照关系如下# 请求侧 POST https://taotoken.net/api/v1/chat/completions Authorization: Bearer YOUR_API_KEY modelYOUR_MODEL_ID response_formatjson_object # 日志侧 [agent] inference.base_urlhttps://taotoken.net/api [agent] inference.endpointhttps://taotoken.net/api/v1/chat/completions [agent] modelYOUR_MODEL_ID [agent] action_plan.count2 [agent] action[0].typecli [agent] action[0].cmdls -la \$HOME/Desktop/Google Growth Analysis\ [agent] action[0].batchtrue [agent] action[1].typecli [agent] action[1].cmdhead -n 3 \$HOME/Desktop/Google Growth Analysis\/*.csv [agent] action[1].batchtrue [cli] dry_runtrue [cli] exit_code0如果 curl 能返回动作但 Qwen-UI-Agent 日志里没有action_plan说明 runner 读取的不是同一套环境变量或者它的配置文件覆盖了.env。如果 curl 返回 401检查Authorization头、Key 是否复制完整、是否有多余空格。如果 curl 返回 404检查路径是不是/v1/chat/completions以及 Base URL 是否写成https://taotoken.net/api。如果 curl 返回自然语言而不是 JSON先把 system prompt 收紧再检查response_format。5. 报错对照401、404、timeout、动作空、命令被拦截分别改哪里把常见报错按“先改 endpoint再改动作再改安全策略”的顺序排查可以避免乱改配置。现象优先检查处理方式401 UnauthorizedKey 是否有效、Header 是否完整到 TaoToken 官网控制台重新创建 Key不要复用旧值404 Not FoundBase URL 与请求路径Base URL 用https://taotoken.net/apicurl 用/v1/chat/completions403 或安全拒绝是否触发敏感操作检查命令是否涉及支付、删除、隐私、生产库写入timeout长程任务上下文过大、截图过多拆分任务、减少历史、提高超时、批量动作分批执行响应不是 JSONsystem prompt 约束不足明确“只输出 JSON”加response_formataction_plan 为空runner 读取了旧环境变量打印运行时环境确认没有旧供应商配置覆盖CLI 动作不执行dry run 开启或安全策略拦截先看[cli] dry_run和[security]日志再决定是否放开批量动作部分失败工作目录、权限、路径不存在检查AGENT_CLI_WORKDIR让命令使用绝对路径或受控变量其中 401 和 404 最值得先说。401 通常不是模型问题而是 Key 或鉴权头问题。404 通常不是模型没有能力而是 endpoint 拼接错误。TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_error_map里可以重新进入控制台核对 Key 和模型信息。记住API 请求不要带utm_source、utm_content这类参数Base URL 保持干净。另外长程任务里经常出现“GUI 正常、CLI 超时”。这往往是因为 CLI 动作输出被完整塞回上下文导致下一轮推理过长。可以限制 stdout 行数、把大文件写入工作目录、只把摘要和文件路径返回给模型。批量动作也不要无限扩张一次返回过多命令会增加误执行风险。对于数据库类命令建议在本地只读副本执行SQL 由读者手动运行不要让 Agent 直连生产库。6. Claude Code、Codex、CC Switch 分别怎么填不要串环境变量很多读者会在同一台机器上同时用 Claude Code、Codex 和 CC Switch结果把 Claude Code 的ANTHROPIC_*环境变量复制到 Codex 配置里导致 Codex 读不到 Key。这里要明确分开。Claude Code 使用settings.json和ANTHROPIC_*变量。示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_ID } }如果你的 Claude Code 版本还读取ANTHROPIC_API_KEY可以单独映射但不要同时写入多个互相冲突的值。Claude Code 的配置只服务 Claude Code不要把这一组变量直接塞给 Codex。Codex 使用config.toml不要用ANTHROPIC_*。示例model YOUR_MODEL_ID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat然后在 shell 中导出export TAOTOKEN_API_KEYYOUR_API_KEYCodex 读取的是TAOTOKEN_API_KEY不是ANTHROPIC_AUTH_TOKEN。如果你把ANTHROPIC_*写进 Codex 的 provider配置看起来有值实际鉴权仍然失败。CC Switch 可以理解为多套配置的切换器。它维护的核心三件套是供应商标识例如taotokenBase URLhttps://taotoken.net/apiAPI KeyYOUR_API_KEYCC Switch 负责切换配置不负责 Qwen-UI-Agent 的动作路由也不负责 CLI 安全策略。切换完成后仍然要回到 Qwen-UI-Agent 的.env里确认OPENAI_BASE_URL或TAOTOKEN_BASE_URL没有被旧配置覆盖。一个实用做法是启动前打印非敏感变量env | grep -E OPENAI_BASE_URL|TAOTOKEN_BASE_URL|ANTHROPIC_BASE_URL | sort只打印地址不要打印 Key。确认 Qwen-UI-Agent 读到的 Base URL 是https://taotoken.net/api。7. 把 Base URL 固化到 Qwen-UI-Agent 启动链路本地命令与日志检查前面把 Key、Base URL、curl、CLI 动作日志和不同工具配置都拆开了。最后一节把流程固化成可重复的启动检查。TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_checklist可以作为控制台入口但每次启动前建议按下面顺序执行。第一进入项目根目录加载.envset -a source .env set a第二做一次无副作用连通性检查。把YOUR_API_KEY和YOUR_MODEL_ID替换后执行curl -sS https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer YOUR_API_KEY \ -H Content-Type: application/json \ -d { model: YOUR_MODEL_ID, messages: [ {role: user, content: 只回复 ok} ], max_tokens: 8 }如果这一步失败不要继续启动 Qwen-UI-Agent。先修 Key、Base URL 或模型 ID。第三以 dry run 方式启动 Qwen-UI-Agent。下面命令中的入口名称请替换成你本地仓库实际使用的入口# your_entrypoint 换成你的 Qwen-UI-Agent 启动入口 your_entrypoint --config ./configs/runtime.yaml --dry-run-cli 21 | tee logs/agent_runtime.log第四另开终端检查日志grep -E inference\.(base_url|endpoint)|action\[[0-9]\]\.typecli|cli\.dry_run|security logs/agent_runtime.log期望看到[agent] inference.base_urlhttps://taotoken.net/api [agent] inference.endpointhttps://taotoken.net/api/v1/chat/completions [agent] action[0].typecli [agent] action[0].batchtrue [cli] dry_runtrue如果你看到的是api.openai.com、旧供应商域名或空 endpoint说明环境变量被覆盖。检查顺序是shell 当前环境、项目.env、runner 配置文件、CC Switch 当前配置。不要一次改五个地方一次只改一层改完重新跑 grep。第五确认 CLI 动作安全边界。开启真实执行前先问三个问题命令是否只读是否影响生产数据是否需要人工确认支付、删除、隐私授权、数据库写入这类动作必须停在确认环节。Qwen-UI-Agent 的价值是 GUI 与 CLI 协同但协同的前提是可控。把 Base URL 固定到https://taotoken.net/api把 Key 放进YOUR_API_KEY占位环境把 CLI 动作先跑 dry run然后再逐步放开权限。8. 按顺序完成 TaoToken 链路再跑 Qwen-UI-Agent如果你已经跟着把.env、curl 和 CLI 动作日志对齐最后只需要按推荐路径完成 TaoToken 链路先用模型对话验证模型 ID 和 endpoint 是否可用https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_model_chat需要稳定跑 CLI 动作、长程任务或批量动作时查看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_coding_plan创建并管理 API Key确认 Key 不泄露、不进 Githttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_api_keys如果你同时使用 Claude Code按官方文档配置settings.json与ANTHROPIC_*https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentqwen_ui_agent_claude_code_doc回到本文的主线Qwen-UI-Agent 的 CLI 动作 endpoint 不在 prompt 里也不在 shell adapter 的第一行而在模型推理客户端的 Base URL。把 Base URL 写成https://taotoken.net/apiKey 用YOUR_API_KEY先用 curl 验证/v1/chat/completions再用 CLI 动作日志对照inference.base_url、inference.endpoint、action_plan和dry_run。这条链路对齐后GUICLI 混合动作空间才真正可复现、可排障、可安全扩展。
返回列表