1. 为什么要在个人微信里跑 Qwen
Qwen 通过 cc-connect 接入个人微信,本质上是把「微信聊天窗口」当成一个远程终端,让跑在电脑上的 Qwen Code 通过 ACP 协议接收消息、执行任务、再把结果发回微信。适合谁?适合手头有一台常开的 Windows 机器、想在外面用手机微信给电脑上的 Qwen 派活的人,比如让它读项目文件、跑命令、整理日志。核心链路是:微信消息 → cc-connect 平台层 → ACP 引擎 → Qwen Code → 回传微信。
这条链路里有两个容易卡住的点:一是 Node.js 运行环境和 cc-connect 的 beta 版本要求,二是 Qwen Code 的 API Key 与 ACP 启动参数。我这次把模型通道统一走 TaoToken 的 Key,好处是 Qwen Code 和后面可能接的其他工具共用一套凭证,不用每个工具单独配一遍。下面按「环境 → 配置 → 启动 → 验证 → 排障」的顺序走,配置片段可以直接复制改路径。
2. TaoToken 前置:统一 Key 与 API 通道
TaoToken 在这里的角色是给 Qwen Code 提供模型调用通道。Qwen Code 走 ACP 模式时,底层还是要请求模型接口,所以需要 base_url 和 api_key。统一用 TaoToken 的 Key,意味着你后面换模型、加工具,凭证不用来回改。
先去控制台建一个 API Key:
- 控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
- Key 管理页:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
建好之后你会拿到一串sk-开头的 Key。API 基础地址用https://taotoken.net/api,注意这个地址不带任何查询参数,配置里直接写死即可。如果你不确定该用哪个模型名,可以先去模型对话页试一下:
- 模型对话:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
注意:API Key 只显示一次,建完立刻复制到本地配置文件或环境变量里。不要写进会提交到 git 的仓库。
Qwen Code 读取凭证的方式通常是环境变量或它自己的 settings 文件。我建议用环境变量,因为 cc-connect 启动子进程时会继承当前 shell 的环境,配置最省事。Windows 下可以在系统环境变量里加,也可以在每个项目目录的.env里写。下面配置片段里我会同时给出两种写法。
3. 可复制配置:Node.js、cc-connect 与 config.toml
3.1 Node.js 与 cc-connect 安装
Node.js 建议 v20 以上,低版本在 cc-connect 的依赖解析上会报错。装完确认:
node -v npm -v然后全局装 cc-connect。个人微信接入目前只有 beta 版支持,所以必须带@beta:
npm install -g cc-connect@beta cc-connect --version如果cc-connect --version报「不是内部或外部命令」,说明 npm 全局 bin 目录没进 PATH。用npm config get prefix看路径,把它加到系统 PATH 再开新终端。
3.2 生成默认配置
首次直接运行cc-connect,它会在用户目录下生成默认配置:
cc-connectWindows 路径是C:\Users\你的用户名\.cc-connect\config.toml。这个文件是后面所有配置的核心。
3.3 config.toml 项目配置
把下面这段贴进 config.toml,按注释改掉路径和项目名:
[[projects]] name = "my-qwen" [projects.agent] type = "acp" [projects.agent.options] work_dir = "D:\\code\\my-project" command = "qwen" args = ["--acp", "--approval-mode", "yolo"] display_name = "Qwen Code" [[projects.platforms]] type = "weixin" [projects.platforms.options] token = "" base_url = "" account_id = "" allow_from = "*"几个关键参数对照:
| 参数 | 作用 | 建议值 |
|---|---|---|
| work_dir | Qwen Code 的工作目录 | 你的项目绝对路径,Windows 用双反斜杠 |
| command | 启动的 AI 命令 | qwen |
| args | 启动参数 | --acp必带,--approval-mode yolo可选 |
| allow_from | 允许访问的用户 | 调试期*,稳定后改成自己的 ID |
--approval-mode yolo是自动批准所有操作,省去交互确认。但微信里没法弹确认框,所以要么开 yolo,要么在 Qwen 的 settings 里配权限白名单。我一开始没开 yolo,结果 Qwen 每次写文件都卡在等待确认,微信端只看到「正在处理」不动。后来改成白名单方式,更可控。
3.4 Qwen Code 权限配置
在项目目录下建.qwen/settings.json:
{ "permissions": { "allow": [ "Read(D:\\code\\my-project/**)", "Write(D:\\code\\my-project/**)", "Bash(*)" ], "yoloMode": false }, "telemetry": { "enabled": false }, "$version": 4 }这里yoloMode设 false,靠 allow 列表放行读写和 Bash。Bash(*)范围很大,如果你只让它跑特定命令,把*换成具体命令前缀,比如Bash(git *)、Bash(npm *)。
3.5 模型通道指向 TaoToken
Qwen Code 的模型凭证走环境变量最稳。在启动 cc-connect 的同一个终端里设置:
set TAOTOKEN_API_KEY=sk-你的key set OPENAI_BASE_URL=https://taotoken.net/api set OPENAI_API_KEY=%TAOTOKEN_API_KEY%如果你用的是 PowerShell:
$env:TAOTOKEN_API_KEY="sk-你的key" $env:OPENAI_BASE_URL="https://taotoken.net/api" $env:OPENAI_API_KEY=$env:TAOTOKEN_API_KEYQwen Code 具体读哪个变量名,以它当前版本的文档为准。有的版本读OPENAI_API_KEY+OPENAI_BASE_URL,有的读自己的QWEN_API_KEY。你可以两个都设上,避免来回试。设完在同一个终端里echo %OPENAI_BASE_URL%确认生效,再启动 cc-connect,这样子进程才能继承到。
4. 启动与验证:扫码、日志与消息收发
4.1 微信连接
cc-connect weixin setup --project my-qwen--project后面跟 config.toml 里的项目名。运行后会弹出一个二维码,用微信小号扫。扫完显示「已建立连接」,此时 config.toml 里的token、base_url、account_id会被自动回填。你可以打开文件确认这三个字段不再是空的。
4.2 前台启动看日志
cc-connect正常日志长这样:
level=INFO msg="cc-connect is running" projects=1 level=INFO msg="platform ready" project=my-qwen platform=weixin level=INFO msg="engine started" project=my-qwen agent=acp platforms=1看到engine started且agent=acp,说明 ACP 链路起来了。如果卡在platform ready之后没有engine started,多半是command = "qwen"找不到,或者 qwen 启动参数不对。
4.3 发消息验证
在微信里给这个 bot 发一句:
/list如果返回会话列表,说明消息收发通了。再发一句让它读文件:
读一下 README.md 的前 20 行电脑端 cc-connect 日志会打印 ACP 请求和 Qwen 的响应,微信端会收到结果。两边都对上,链路就算跑通了。
4.4 后台守护
调试没问题后转后台:
cc-connect daemon install cc-connect daemon start cc-connect daemon status cc-connect daemon logs -fdaemon logs -f是排障时最常用的,实时看日志比翻文件快。
5. 本篇常见错排查
5.1 会话切换卡住
现象是 cc-connect 自动建了新会话 s2,新会话 history 为空,Qwen 触发首次运行引导,微信端没法显示交互界面,于是卡死。处理办法是停掉服务,编辑C:\Users\你的用户名\.cc-connect\sessions\下对应的会话文件,把活跃会话指回有历史的那个:
"active_session": { "weixin:dm:user@im.wechat": "s1" }然后把空的 s2 段删掉,重启 cc-connect。预防手段是在配置里加reset_on_idle_mins = 0禁用空闲自动建会话,另外少用/switch。
5.2 qwen 命令找不到
日志报exec: "qwen": executable file not found。原因是 cc-connect 启动子进程时的 PATH 和你手动开终端不一样。解决办法是用 qwen 的绝对路径,比如command = "C:\\Users\\你\\AppData\\Roaming\\npm\\qwen.cmd"。Windows 下 npm 全局装的命令是.cmd文件,写全路径最稳。
5.3 模型请求 401
微信端收到「认证失败」或日志里出现 401,先查环境变量有没有被 cc-connect 继承。如果你是在 A 终端设的变量,却在 B 终端启动 cc-connect,子进程读不到。统一在同一个终端里设变量再启动。另外确认OPENAI_BASE_URL写的是https://taotoken.net/api,结尾不要多加/v1或斜杠,具体以接入文档为准:
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
5.4 微信端无响应但日志正常
日志显示 ACP 请求已发出,但微信收不到回复。这种情况多半是 Qwen 在等权限确认。检查.qwen/settings.json的 allow 列表是否覆盖了当前操作,或者临时把--approval-mode yolo加上试一次。确认是权限问题后再改回白名单方式。
5.5 进程残留
反复重启后端口或会话文件被占用,用下面命令清理:
tasklist /v | findstr /C:"node" /C:"qwen" taskkill /F /PID <进程ID>taskkill /IM node.exe /F会杀掉所有 node 进程,慎用,别把别的服务一起带走。
6. 长期编码与 Agent 场景的 Key 规划
如果你不只是想在微信里偶尔派个活,而是打算把 Qwen 当长期编码助手、甚至接多个 Agent 工具,那 Key 的管理方式要提前想好。我现在的做法是:TaoToken 控制台里按用途建不同的 Key,一个给 Qwen Code 走 ACP,一个给其他编码工具,互不影响,哪个泄露了单独吊销。
长期跑编码任务的话,Coding Plan 比按量更划算,适合每天都有大量请求的场景:
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
如果你用的是 Claude Code 那套 Anthropic 协议的工具,接入方式略有不同,参考这个页面:
- ClaudeCodeAnthropic:https://taotoken.net/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
回到微信这条链路,最后提醒一个实操细节:cc-connect 的会话文件会随使用不断增长,定期清理sessions目录下的空会话,能避免前面说的切换卡死。另外allow_from = "*"只适合调试,稳定后一定改成你自己的微信 ID,否则任何扫到二维码的人都能操作你电脑上的 Qwen。