终端里的编码 Agent 已经成了开发者的标配工具,但主流选择各有门槛:要么绑定单一厂商的模型,要么按订阅收费。阿里开源的 Qwen Code(Apache 2.0 协议,基于 Gemini CLI 二次开发、针对 Qwen3-Coder 系列模型做了大量优化)给出了门槛更低的进入方式:Node 20+ 环境一条 npm 命令安装,用 Qwen OAuth 登录就能拿到免费请求额度(官方口径约每天 2,000 次,以官方文档为准);同时保留标准的 OpenAI 兼容接口——你手上不管已有哪家的模型 Key,都能直接接进来。本篇从安装、认证、内置工具体系,到无头模式自动化与 MCP 扩展完整走一遍,全程用免费额度就能复现。
先理解:CLI 里那个「工具循环」是怎么转的
Qwen Code 的核心组件(packages/core)负责一整圈调度:你输入提示词后,core 把提示词、会话历史和可用工具的 schema 清单一起发给模型;模型分析后如果需要动手,就返回一个「执行某工具、带某参数」的请求;core 校验请求、对敏感操作弹出人工确认,然后执行工具、把结果回灌给模型;模型继续推理,直到给出最终回答。你在终端里看到的「正在调用某工具、成功或失败」的提示,就是这圈循环的外显。理解这个循环有两个好处:写指令时你会自然地把「目标 + 约束」说清楚,让模型知道该调哪个工具;排查问题时你能分清是模型选错了工具,还是工具执行本身出了错——两者的修法完全不同。
免费额度是动态政策。Qwen OAuth 的免费请求额度与限流规则(官方口径约每天 2,000 次)可能随版本与运营策略调整,动手前以官方文档与 /stats 实测为准;超出额度或团队共享使用时,切换到 API Key 或商业套餐方案。
Step 1:安装与验证,两条命令的事
# 先确认 Node 版本,低于 20 先升级
node -v
# npm 全局安装(推荐,更新跟着 latest 走)
npm install -g @qwen-code/qwen-code@latest
# macOS / Linux 也可以走 Homebrew
# brew install qwen-code
# 验证安装
qwen --version
安装本身没有更多戏份:npm install -g 拉包、qwen --version 能打印版本号就算就绪。Windows 上如果全局安装报权限错误,两个常见方向任选其一:用管理员身份开终端再装,或者用 npm config set prefix 把全局目录挪到用户可写的位置——这类权限问题与 Qwen Code 本身无关,是 npm 全局安装的通用坑。装完先别急着进项目,跑一下 qwen --help 把参数总览过一遍,后面无头模式要用到的 -p 与输出格式参数都在里面。
Step 2:认证二选一,免费 OAuth 或自带 Key
# 路线一(免费额度):在项目目录启动后输入 /auth
cd your-project
qwen
# 交互界面里输入:
/auth
# 选 Qwen OAuth,浏览器自动打开完成登录,token 自动刷新
# 路线二(自带模型):OpenAI 兼容三件套环境变量
export OPENAI_API_KEY="sk-xxxx"
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
export OPENAI_MODEL="qwen3-coder-plus"
两条路线覆盖两类人群。路线一适合个人尝鲜与轻量使用:OAuth 登录后免费额度直接生效,不需要任何 Key 管理成本。路线二适合已有模型资产的团队:任何 OpenAI 兼容端点都能接,把 OPENAI_BASE_URL 指过去即可——国内用 DashScope 的兼容模式,自建网关、私有化模型端点同理。两种认证并存时以环境变量的配置优先级为准(详见官方认证文档),建议个人机用 OAuth、CI 与共享环境用 Key,职责清楚。
API Key 别写进 shell 配置文件然后提交仓库。环境变量放 .zshrc/.bashrc 属于个人机常规操作,但 CI 与容器里请走密钥管理服务注入;另外 OAuth 免费额度按账号计,多人共用一个账号互相挤额度,团队场景直接上 Key。
Step 3:认识内置工具面,知道它能替你动什么
# 内置工具按官方文档分五大类:
# 1) 文件系统:read_file / write_file / read_many_files
# 2) Shell:run_shell_command(敏感命令会先弹确认)
# 3) 网络:web_fetch(抓 URL)/ web_search(需支持的提供商)
# 4) 任务管理:todo_write(结构性任务清单,opt-in)
# 5) 委派:agent 工具(把复杂子任务交给专门的子 Agent)
这些工具由 core 统一管理:定义与 schema 交给模型、按请求执行、结果回灌。几个值得专门点名的细节——read_many_files 可以按 glob 模式一次读进整批文件(比如 src/**/*.ts),是理解大型代码库的主力;run_shell_command 执行的是真实 shell 命令,官方对这类修改型操作设计了确认机制,弹窗时看清楚命令再放行;todo_write 让模型在多步任务里维护一张结构化清单,长任务的进度可视、可打断。工具是否启用与确认策略可以在配置里调整,团队可以按自己的安全基线收敛默认行为。
Step 4:实战一个真实任务,体验「先读后改」
# 段一:只诊断,不动手
> 读完 src/utils/date.ts,解释这个函数在跨时区场景下为什么会算错
# 段二:让模型列计划再动手
> 给出修复方案和需要补的测试用例清单,列成 todo
> 按清单逐项修复,每改完一项运行 pytest tests/ -x 验证
# 会话管理三件套
/stats # 看当前会话的 token 与上下文占用
/compress # 压缩历史,长会话续命
/clear # 清空历史,切换任务
实战建议按「先读后改」的节奏下指令:让它先读代码、先出方案,你确认方案没问题再放行动手——这比一句「帮我修了这个 bug」可控得多。预期效果:模型会用 read_file 读实现、用 todo_write 列清单、逐项调用写文件与 shell 工具,每步都有确认与输出回显;跑完用 /stats 看这次任务花了多少 token,心里对免费额度能撑多少活就有数了。任务做到一半发现方向不对,/clear 重来比继续纠正更省 token。
Step 5:无头模式与管道,把 Agent 接进脚本
# 一次性任务:不进交互界面,跑完就退出
qwen -p "分析这个代码库的目录结构,输出核心模块清单"
# 机器可读输出,CI 与脚本消费
qwen -p "检查 src/auth.ts 有没有硬编码的密钥" --output-format json
# 接进 shell 管道:用暂存区 diff 生成提交说明
git diff --staged | qwen -p "根据这个 diff 写一条符合 Conventional Commits 规范的提交说明"
无头模式(headless)是 Qwen Code 从「交互工具」变成「自动化组件」的开关:-p 直接执行提示词、--output-format json 给出结构化结果,两者组合就能塞进 CI 流水线、pre-commit 钩子或定时脚本。上面第三行的管道用法是性价比极高的一招——把 git diff 喂给模型生成提交说明,从此提交信息不再靠手编。批处理场景用 xargs 组合即可对一批文件逐个执行同类任务,每个调用相互独立、失败互不影响。
无头模式里「全自动放行」要想清楚再开。部分场景为了不卡确认会启用全自动放行参数(-y/--yolo,以你版本的 qwen --help 为准),这等于把 shell 执行权完整交给模型——只在你完全信任的仓库目录里用,CI 环境配合最小权限的容器跑,绝不在宿主机根目录或含密钥的工作区开。
Step 6:MCP 扩展与安全边界,工具面随业务生长
# 添加一个 MCP server(例:官方 filesystem server,只开放 docs 目录)
qwen mcp add fs -- npx -y @modelcontextprotocol/server-filesystem ./docs
# 查看已注册的 MCP server
qwen mcp list
MCP 是 Qwen Code 工具面的扩展机制:注册的 server 所提供的工具与内置工具同等参与调度,模型按需调用。这条扩展通道让 CLI 的能力随业务生长——接数据库查询、接内部 API、接文档检索,都不需要改 Qwen Code 本身。安全上记三条:目录最小化,filesystem 类 server 只挂载必要目录;密钥走环境变量,不把 Key 写进任何会被提交的配置;第三方 server 先审后用,MCP server 本质是在你机器上跑的进程,来路不明的先放进隔离环境试。
MCP server 是供应链风险面。npx 每次拉取的是 registry 上的包,版本漂移意味着行为可能变化;生产环境锁死版本号、优先走私有镜像,并定期复查 qwen mcp list 里有没有不知来源的注册项。
常见问题速查
| 你遇到的现象 | 大概率原因 和 解决 |
|---|---|
| qwen 命令不存在 | npm 全局 bin 目录不在 PATH。用 npm config get prefix 确认全局目录,把它加进 PATH 后重开终端 |
| OAuth 登录后仍提示无权限 | 登录态过期或网络代理拦截了回调。重新 /auth;代理环境确认本地回环地址可访问 |
| 免费额度用尽 | 等次日额度刷新,或切换 API Key 路线(OPENAI_API_KEY 三件套),团队场景直接上 Key |
| 长会话越跑越慢、输出变差 | 上下文膨胀。用 /compress 压缩历史,或 /clear 后把必要背景重新喂一遍 |
| 沙箱模式下 MCP 工具不可用 | 沙箱镜像里缺 npx 或依赖。预装到镜像内,或临时关沙箱排查 |
| 模型响应不符合 Qwen3-Coder 水准 | 确认 OPENAI_MODEL 指向的是 coder 系列模型;交互模式用 /auth 的 OAuth 时模型由服务端默认分配 |