返回首页

AI 编程工具实战教程

面向普通用户的 Claude Code 与 Codex 部署与实战指南

主讲:杨逸

📚 课程目录

1国内外主流 AI 模型简介 2Claude Code 部署 3Claude Code 实战使用 4Claude Code Skills 安装与使用 5Codex 部署 6Codex 实战使用 7个人网页制作 8常见问题 9使用 Drivers AI 中转站(推荐) 10Kiro RS 反代 Claude Code
1

国内外主流 AI 模型简介

2026 年,全球 AI 大模型市场呈现"百花齐放"的格局。本节带你快速了解主流模型的特点和价格。

国外旗舰模型

厂商 模型 输入价($/1M) 输出价($/1M)
OpenAI GPT-5.5 $5 $30
Google Gemini 3.1 Pro $2 $12
Anthropic Claude Opus 4.7 $5 $25

国内主流模型

厂商 模型 输入价(¥/1M) 输出价(¥/1M)
智谱 AI GLM-5.1 ¥1.3 - 6 ¥24 - 28
DeepSeek DeepSeek-V4-Pro ¥1 - 12 ¥24
月之暗面 Kimi K2.6 ¥1.1 - 6.5 ¥27
阿里通义 Qwen3.6-Plus ¥0.2 - 2 ¥12
💡 选型建议:简单任务用低成本版(如 Qwen、Gemini Flash),复杂代码任务用旗舰版(Claude Opus、GPT-5.5)。
2

Claude Code 部署

Claude Code 是 Anthropic 推出的命令行 AI 编程工具,支持读取、编辑、执行代码。

步骤一:安装 Git Bash(仅 Windows)

下载地址:https://git-scm.com/downloads/win,安装时一路点下一步。

步骤二:安装 Claude Code

打开 PowerShell(如有代理先开启),运行:

$env:http_proxy="http://127.0.0.1:10808"
$env:https_proxy="http://127.0.0.1:10808"
& ([scriptblock]::Create((irm https://daheiai.com/cc.ps1))) 2.1.153
⚠️ 装 2.1.153 老版本,新版本与第三方 API 有兼容性问题。

步骤三:配置 PATH 环境变量

C:\Users\你的用户名\.local\bin 加到用户 PATH 中:

  1. 开始菜单搜「环境变量」→ 编辑系统环境变量
  2. 用户变量 → Path → 新建
  3. 填入上述路径

步骤四:接入 GLM 模型

使用智谱官方一键安装助手:

npx @z_ai/coding-helper

按引导依次选择:中国版套餐 → 输入 GLM API Key → 选择 Claude Code配置刷新启动

3

Claude Code 实战使用

常用命令

命令作用
/resume恢复历史会话
/new开启新对话
/context查看上下文用量
/compact压缩对话历史
/config查看修改配置
/skills查看已安装技能

开启最高权限(免确认模式)

在对话框输入:

bypassPermissions

授权后 Claude Code 执行命令不再频繁询问。

⚠️ 最高权限会让 AI 直接读写执行任何命令,请在信任的项目目录下使用。
4

Claude Code Skills 安装与使用

Skills 是 Anthropic 官方提供的技能扩展包,可以让 Claude Code 拥有专业能力,例如生成 PPT、Word、Excel、PDF 等文档。 安装一次,永久可用。

步骤一:克隆官方 Skills 仓库

新建一个文件夹用来存放 skills(这里用 D:\claude-skill 作为示例):

cd D:\
mkdir claude-skill
cd claude-skill
git clone https://github.com/anthropics/skills.git anthropic-skills
💡 如果出现 SSL 网络错误,先给 git 配置代理(此处仅举例,具体要改成http...后你的代理地址,可咨询ai来修改):
git config --global http.proxy http://127.0.0.1:10808
git config --global https.proxy http://127.0.0.1:10808

步骤二:复制到 Claude Code 的 skills 目录

把克隆下来的 skills 复制到 Claude Code 配置文件夹中:

New-Item -Path "C:\Users\你的用户名\.claude\skills" -ItemType Directory -Force
Copy-Item -Path "D:\claude-skill\anthropic-skills\skills\*" -Destination "C:\Users\你的用户名\.claude\skills\" -Recurse -Force

步骤三:验证安装

重启 Claude Code,输入:

/skills

看到 pptx、docx、xlsx 等文件夹就说明安装成功。

常用 Skills 一览

📊 pptx · 生成 PPT 演示文稿,支持自定义页数、配色、布局
📄 docx · 生成 Word 文档,支持目录、标题、表格、页码
📈 xlsx · 生成 Excel 表格,支持公式、图表、数据分析
📕 pdf · 生成 / 填写 / 合并 PDF 文档
🎨 canvas-design · 设计海报、Banner、画板
🖌️ brand-guidelines · 应用品牌色 / 字体规范
💻 frontend-design · 设计前端 UI 界面
🔧 mcp-builder · 创建 MCP 服务扩展能力

实战:一键生成 PPT

在 Claude Code 对话框直接用自然语言描述需求:

请用 pptx skill 帮我生成一份 PPT:

主题:vibe coding 的发展历程
页数:8 页
风格:现代科技感,深蓝主色调

内容大纲:
1. 封面 - 标题 + 副标题
2. 什么是 vibe coding
3. 起源背景(2024 年 AI 编程兴起)
4. 核心特点(自然语言驱动开发)
5. 代表工具(Claude Code、Cursor、Codex)
6. 实际应用场景
7. 优势与挑战
8. 未来展望

要求:每页有清晰标题,重点用项目符号

Claude 会自动调用 pptx skill,先生成每页 HTML 设计,再转换为 .pptx 文件,保存到当前工作目录。

💡 PPT 质量提升技巧:① 给出具体内容而非泛泛主题;② 指定配色和风格;③ 要求图表和图标;④ 生成后可以说"优化第 X 页"进行迭代。
5

Codex 部署

Codex 是 OpenAI 推出的 AI 编程 Agent,兼容 OpenAI 格式 API。

步骤一:下载安装

前往官方仓库:https://github.com/openai/codex

步骤二:填入 API Key

启动时选择「使用 API」,填入 ZCHAT API Key。

步骤三:编辑 config.toml

路径:C:\Users\你的用户名\.codex\config.toml

model_provider = "openai-chat-completions"

[model_providers.openai-chat-completions]
name = "ZCHAT"
wire_api = "responses"
base_url = "https://api.zchat.tech/v1"
⚠️ Codex 对 Windows 支持不完善,强烈建议在 WSL2 或 Linux 下使用。
6

Codex 实战使用

设置最高权限

在输入框左下角点击「默认权限」,选择 完全自动(Full Auto),即可全程无需确认。

典型使用场景

💡 提示:Agent 模式每次对话会多次调用模型,比普通对话消耗额度更多,请关注 API 余额。
8

常见问题(本地部署)

Q: 出现 403 Forbidden 错误怎么办?

可能原因:①上下文过长,输入 /compact 压缩;②AI 生成了无权限执行的命令;③API Key 余额不足。

Q: 下载安装包时网络中断?

设置 PowerShell 代理后重试:

$env:http_proxy="http://127.0.0.1:10808"
$env:https_proxy="http://127.0.0.1:10808"

Q: ZCHAT 接入 Claude Code 失败?

因 ZCHAT 仅支持 OpenAI 格式,而 Claude Code 用 Anthropic 原生格式,两者不兼容。建议 Claude Code 接 GLM,Codex 接 ZCHAT。

Q: 如何卸载 Claude Code?

打开「设置 → 应用 → 已安装的应用」,搜索"Claude Code"卸载即可。

9

使用 Drivers AI 中转站(推荐)

Drivers AIdrivers-ai.com)是杨逸自建的 AI 接口中转平台, 把 Claude Pro、ChatGPT Plus 等订阅打包成 API,朋友拼车共享,国内直连,无需挂梯子。

💡 核心优势:① 国内访问无需翻墙;② 一个 Key 同时调 Claude 和 GPT;③ 朋友拼车,月费分摊;④ 支持 Claude Code、Codex、网页聊天等所有主流客户端。

步骤一:注册账号

浏览器打开 http://drivers-ai.com → 点「注册」→ 填邮箱密码 → 完成。

步骤二:创建 API 密钥

登录后左侧菜单 → API 密钥 → 点「创建」:

字段填什么
名称自定义,如 my-key
分组用 Claude 选 anthropic-default
用 GPT 选 openai-default
其他默认即可

创建成功后会显示 sk-xxx 密钥,立刻复制保存,关闭后看不到完整 Key。

💡 建议同时创建两个密钥:一个绑 anthropic-default(用于 Claude),一个绑 openai-default(用于 GPT),方便在网页版同时切换两个模型。

步骤三:Claude Code 配置(接入 Claude)

打开 PowerShell,运行(替换成你的 sk-xxx):

$env:ANTHROPIC_BASE_URL="http://drivers-ai.com"
$env:ANTHROPIC_AUTH_TOKEN="sk-你的claude-key"
$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1"
claude
⚠️ PowerShell 必须用 $env: 语法,不能用 set(那是 CMD 的语法)。

步骤四:Codex 配置(接入 GPT)

Win + R → 输入 %userprofile%\.codex → 进入配置目录(不存在则手动新建)。

在该目录创建 config.toml 文件:

model_provider = "OpenAI"
model = "gpt-5.5"
review_model = "gpt-5.5"
model_reasoning_effort = "xhigh"
disable_response_storage = true
network_access = "enabled"
windows_wsl_setup_acknowledged = true

[model_providers.OpenAI]
name = "OpenAI"
base_url = "http://drivers-ai.com"
wire_api = "responses"
requires_openai_auth = true

[features]
goals = true

同目录创建 auth.json(替换成你的 GPT 密钥):

{
  "OPENAI_API_KEY": "sk-你的gpt-key"
}

PowerShell 运行:

codex

步骤五:网页直接聊天(最省事)

不想配命令行?打开网页版 AI-Chat

http://chat.drivers-ai.com

这是基于 Open WebUI 的聊天界面,体验类似 ChatGPT 官网,支持 Claude 和 GPT 任意切换。

① 首次注册

填邮箱密码 → 注册
第一次进入会让你创建账号,这是 AI-Chat 自己的账号系统,跟 Drivers AI 中转站后台账号是独立的,重新设一套即可。

② 配置 API 接入(关键步骤)

登录后默认看不到任何模型,需要手动配置:

1. 进入管理员面板
点击左下角你的头像 → 选择「Admin Panel / 管理员面板」。
2. 进入外部连接设置
顶部点「Settings / 设置」→ 左侧菜单点「Connections / 外部连接」。
3. 删除默认连接
如果看到 https://api.openai.com/v1 这条默认连接,先删除它(点旁边的垃圾桶图标),它指向 OpenAI 官方,国内访问不通。
4. 添加 GPT 连接
点「OpenAI API」右侧的 + 号,按下表填写:
字段填什么
URLhttp://drivers-ai.com/v1
AuthBearer
API Key你的 GPT key(openai-default 组)
ProviderDefault
API TypeChat Completions
Model IDs留空(自动获取所有模型)
Save / 保存
5. 添加 Claude 连接
再次点 + 号,再加一条连接,字段同上,只把 API Key 换成你的 Claude key(anthropic-default 组)。
保存后,外部连接列表里应该有 2 条,URL 都是 http://drivers-ai.com/v1,使用的 Key 不同。
6. 强制刷新页面
Ctrl + Shift + R 强制刷新(清缓存)。

③ 开始聊天

选择模型
回到聊天主页,点顶部的「Select a model」下拉框,应该能看到一长串模型: 选一个,开始对话。
💡 提示:可以同时选多个模型,让它们并行回答同一个问题进行对比。点击模型下拉框最右边的 + 即可添加并行模型。

常见问题

Q:注册后看不到任何模型?

需要按步骤②配置 API 连接。普通用户注册后没有管理员权限,看不到 Admin Panel——只有第一个注册的账号是管理员。如果你是普通用户,联系管理员(杨逸)帮你配置。

Q:选了模型聊天报错?

① 检查 API Key 是否在 Drivers AI 后台正确创建;② 检查 Key 对应的分组是否匹配(GPT 类模型必须用 openai-default 组的 Key,Claude 必须用 anthropic-default 组的 Key);③ 试试别的模型。

Q:drivers-ai.com 打开很慢?

服务器在美国弗吉尼亚,国内访问延迟 200-300ms,正常现象。代码调用不影响速度,只是网页慢。

Q:用 Claude 中转站时还要不要梯子?

不需要。中转站服务器替你访问 Claude,你只需访问中转站(国内可直连)。

Q:额度用完了怎么办?

联系管理员(杨逸)协调,或等下一个 5 小时窗口期自动恢复。

7

个人网页制作

本章以本站 yiyang-ai.com 为例,带你从购买域名、用 AI 写前端页面、创建 GitHub 仓库、 用 Git 更新代码,到把阿里云域名连接到 GitHub Pages。主线以 Windows 为例,Linux/macOS 命令放在每一步后面做补充。

最终效果:一个静态个人主页,包含头像、姓名、联系方式、研究方向、教育经历、论文、项目经历、获奖,以及一个课程入口。 这个网站本身就是用 index.htmlcourse.html1.pngCNAME 几个文件组成的。

一、先确定网页风格

个人网页不要一开始就堆技术,先决定“别人打开第一页时看到什么”。本站采用的是学术个人主页风格:左侧固定个人信息,右侧按模块展示履历。

风格方向 适合人群 页面特征 参考入口
学术主页 博士生、教师、科研人员 头像、邮箱、Google Scholar、研究方向、论文、经历 Academic website examples
极简作品集 开发者、设计师、自由职业者 大留白、项目卡片、清晰按钮、移动端友好 Figma personal website examples
单页名片 课程讲师、创业者、内容创作者 一句话介绍、社交链接、课程/服务入口 One Page Love personal sites
视觉型主页 摄影、艺术、视觉方向 大图、作品墙、强烈色彩、少文字 Awwwards portfolio inspiration
本站界面拆解:左栏负责“我是谁”和“怎么联系我”,右栏负责“我做过什么”。如果你是学生或科研人员,可以直接复用这种结构: 个人介绍Currently TeachingResearch InterestsEducationPublicationsExperienceAwards

二、在阿里云创建域名

域名相当于网站地址,例如本站使用 yiyang-ai.com。如果还没有域名,可以在阿里云完成购买和实名认证。

  1. 打开 阿里云域名注册,搜索想要的域名。
  2. 选择后缀,例如 .com.cn.net,优先选择短、好记、和自己名字/品牌相关的域名。
  3. 创建或选择“域名信息模板”,按个人或企业身份填写资料。
  4. 完成邮箱验证和实名认证。国内域名服务通常需要实名后才能稳定解析和使用。
  5. 购买成功后,进入“域名控制台”,确认域名状态正常。
如果域名没有完成实名认证,可能出现解析失败、域名被锁定或暂时无法访问。先把实名认证状态处理成“认证成功”,再继续配置解析。

三、准备 Windows 开发环境

这类静态个人网页不需要服务器,也不需要数据库。你只需要浏览器、代码编辑器和 Git。

Windows 推荐安装

官网下载:

https://git-scm.com/downloads/win
https://code.visualstudio.com/

如果你的 Windows 支持 winget,也可以直接运行:

winget install --id Git.Git -e
winget install --id Microsoft.VisualStudioCode -e

Linux / macOS 补充

Ubuntu / Debian:

sudo apt update
sudo apt install git

macOS 安装 Xcode Command Line Tools:

xcode-select --install

macOS 如果使用 Homebrew:

brew install git

四、用 AI 生成个人主页前端代码

把需求说清楚,比“帮我做一个网站”有效得多。可以先把个人资料整理成清单,再让 AI 输出一个单文件静态页面。

推荐资料清单:姓名、中英文名、头像文件名、邮箱、GitHub、Google Scholar、个人简介、研究方向、教育经历、论文、项目经历、获奖、课程或博客入口。

可以直接复制给 AI 的提示词

请帮我写一个单文件个人主页 index.html,要求:
1. 面向学术/科研个人主页,整体简洁、专业、有一点现代感。
2. 页面左侧固定栏:头像、姓名、中英文名、邮箱、Google Scholar、GitHub、Blog。
3. 页面右侧主内容:个人介绍、Currently Teaching、Research Interests、Education、Publications、Patents、Experience、Awards。
4. 使用纯 HTML + CSS,不使用框架,移动端自适应。
5. 头像文件名为 1.png,和 index.html 放在同一个目录。
6. 请给出完整代码,不要省略。

保存文件时建议采用下面的结构。本站就是这种结构:

my-website/
  index.html
  course.html
  1.png
  CNAME
  README.md

本地预览

最简单的方法是双击 index.html。如果想模拟真实网站访问,可以开一个本地服务。

Windows PowerShell:

cd D:\my-website
python -m http.server 8000

浏览器打开:

http://localhost:8000

Linux / macOS:

cd ~/my-website
python3 -m http.server 8000

五、创建 GitHub 仓库

个人主页推荐使用 GitHub Pages。最省心的命名方式是:

<你的 GitHub 用户名>.github.io

例如本站仓库是:

https://github.com/yiyang-zju/yiyang-zju.github.io.git
  1. 打开 GitHub,右上角点击 +,选择 New repository
  2. Repository name 填 用户名.github.io,例如 yiyang-zju.github.io
  3. 选择 Public。GitHub Pages 免费公开发布通常使用公开仓库最方便。
  4. 先不要勾选 README、.gitignore、License,避免和本地文件产生冲突。
  5. 创建后复制仓库 HTTPS 地址。

六、连接 GitHub 仓库并第一次发布

下面以 Windows PowerShell 为主。如果你已经在 Git Bash 里,也可以直接使用同样的 Git 命令。

cd D:\my-website
git init
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git add .
git commit -m "Initial personal website"
git branch -M main
git remote add origin https://github.com/<用户名>/<用户名>.github.io.git
git push -u origin main

Linux / macOS 命令

cd ~/my-website
git init
git add .
git commit -m "Initial personal website"
git branch -M main
git remote add origin https://github.com/<用户名>/<用户名>.github.io.git
git push -u origin main
以后每次改网页,只需要三步:git add .git commit -m "更新说明"git push

七、开启 GitHub Pages

  1. 进入 GitHub 仓库页面。
  2. 点击 Settings
  3. 左侧进入 Pages
  4. Source 选择 Deploy from a branch
  5. Branch 选择 main,目录选择 /(root),点击保存。

稍等几分钟后,默认网址会是:

https://<用户名>.github.io

八、把阿里云域名连接到 GitHub Pages

这一步分两边做:GitHub 记录你想绑定的域名,阿里云负责把访问请求解析到 GitHub Pages。

1. 在项目里创建 CNAME 文件

在网站根目录创建名为 CNAME 的文件,注意文件名全部大写,里面只写一行域名。

yiyang-ai.com

然后提交:

git add CNAME
git commit -m "Add custom domain"
git push

2. 在 GitHub Pages 填写 Custom domain

  1. 仓库页面进入 SettingsPages
  2. Custom domain 填入你的域名,例如 yiyang-ai.com
  3. 保存后等待 DNS 检查。
  4. 检查通过后,勾选 Enforce HTTPS。如果暂时不能勾选,等 DNS 生效后再回来开。

3. 在阿里云云解析 DNS 添加记录

进入阿里云控制台 → 云解析 DNS → 找到你的域名 → 解析设置 → 添加记录。

目标 记录类型 主机记录 记录值
根域名,例如 yiyang-ai.com A @ 185.199.108.153
根域名,例如 yiyang-ai.com A @ 185.199.109.153
根域名,例如 yiyang-ai.com A @ 185.199.110.153
根域名,例如 yiyang-ai.com A @ 185.199.111.153
www 子域名,例如 www.yiyang-ai.com CNAME www <用户名>.github.io
不要使用 *.example.com 这种通配符解析。GitHub 官方不推荐这样做,因为它会增加子域名被接管的风险。

4. 检查 DNS 是否生效

Windows PowerShell:

nslookup yiyang-ai.com
nslookup www.yiyang-ai.com

Git Bash / Linux / macOS:

dig yiyang-ai.com
dig www.yiyang-ai.com

DNS 生效可能需要几分钟到数小时。等 GitHub Pages 页面显示 DNS check successful 后,就可以通过自己的域名访问网站。

九、以后如何更新网页

例如你修改了 index.html 的论文、经历或照片,只需要:

cd D:\my-website
git status
git add index.html
git commit -m "Update profile page"
git push

如果同时改了课程页和头像:

git add index.html course.html 1.png
git commit -m "Update personal website content"
git push

十、常见问题

Q:浏览器打开还是旧页面?

先强制刷新 Ctrl + F5。GitHub Pages 部署也可能有短暂延迟,等 1-3 分钟再看。

Q:GitHub Pages 显示 404?

确认仓库根目录里有 index.html,Pages 的 branch 是 main,目录是 /(root)

Q:自定义域名无法访问?

检查三件事:CNAME 文件是否存在且只有一行域名;GitHub Pages 的 Custom domain 是否保存成功;阿里云解析记录是否填对。

Q:我已经有仓库了,提示 remote origin already exists?

git remote -v
git remote set-url origin https://github.com/<用户名>/<仓库名>.git
git push -u origin main

Q:要不要备案?

如果只是把域名解析到 GitHub Pages,通常不涉及阿里云国内服务器备案流程。但如果你把网站部署到中国内地服务器,通常需要按服务商要求完成备案。

参考资料

10

Kiro RS 反代 Claude Code

本章记录一次完整的 Kiro RS 反代 Claude Code 实战:用 hank9999/kiro.rs 把 Kiro 的后端能力包装成 Anthropic Messages 兼容接口,再接入 Claude Code 或 ccswitch。

安全提醒:不要把真实账号密码、API Key、refreshToken 或 credentials.json 发到公开网站、GitHub 仓库、群聊或截图里。 本教程中的密钥均用占位符表示,实际部署时请只保存在本机或自己的服务器。

一、先理解技术路线

这套方案不是普通网页反向代理,而是一个 协议转换代理

Claude Code / ccswitch
        ↓
Kiro RS 本地服务
        ↓
Kiro OAuth 凭据池 credentials.json
        ↓
Kiro / AWS 后端
        ↓
返回 Anthropic Messages 格式结果
关键区别:Kiro RS 暴露的是 /v1/messages,属于 Claude / Anthropic 原生协议。 它不是 OpenAI 的 /v1/chat/completions。如果你的中转站只支持 OpenAI 协议,应优先用 AIClient-2-API;如果支持 Claude 协议,Kiro RS 更轻量。

二、准备环境

Windows 推荐使用 Docker Desktop 部署,这样不用手动编译 Rust 项目。

docker version
docker compose version

创建运行目录:

mkdir D:\kiro-rs
cd D:\kiro-rs
mkdir config

三、编写 Docker Compose

D:\kiro-rs 下创建 docker-compose.yml

services:
  kiro-rs:
    image: ghcr.io/hank9999/kiro-rs:latest
    container_name: kiro-rs
    extra_hosts:
      - "host.docker.internal:host-gateway"
    ports:
      - "8990:8990"
    volumes:
      - ./config/:/app/config/
    restart: unless-stopped

四、生成服务 API Key

这个 Key 是客户端访问你本地 Kiro RS 的认证密钥,不是 Kiro 账号密码。

$bytes = New-Object byte[] 24
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rng.GetBytes($bytes)
$rng.Dispose()
$apiKey = "sk-kiro-rs-" + ([System.BitConverter]::ToString($bytes)).Replace("-", "").ToLower()
$apiKey

五、创建 config.json

D:\kiro-rs\config 下创建 config.json。把下面的 YOUR_API_KEY 换成上一步生成的 Key。

{
  "host": "0.0.0.0",
  "port": 8990,
  "apiKey": "YOUR_API_KEY",
  "adminApiKey": "YOUR_ADMIN_KEY",
  "region": "us-east-1",
  "authRegion": "eu-north-1",
  "apiRegion": "us-east-1",
  "tlsBackend": "native-tls",
  "loadBalancingMode": "balanced",
  "defaultEndpoint": "ide",
  "extractThinking": true
}
为什么用 native-tls部分 Windows 环境或代理环境下,Rust 默认 TLS 后端可能刷新 token 失败。 切到 native-tls 通常更稳。

六、准备 Kiro 凭据 credentials.json

Kiro RS 需要 credentials.json。它里面保存的是 OAuth 凭据,例如 refreshToken,不是你的账号密码。

如果你已经通过 Kiro IDE 或 AIClient-2-API 授权过,本机通常会有:

C:\Users\你的用户名\.aws\sso\cache\kiro-auth-token.json

可以用下面的命令把它转换成 Kiro RS 需要的格式:

$src = "$env:USERPROFILE\.aws\sso\cache\kiro-auth-token.json"
$dst = "D:\kiro-rs\config\credentials.json"

$obj = Get-Content -Raw $src | ConvertFrom-Json
$reg = $obj.region
if ([string]::IsNullOrWhiteSpace($reg)) { $reg = "us-east-1" }

$method = $obj.authMethod
if ([string]::IsNullOrWhiteSpace($method)) { $method = "social" }

$cred = [ordered]@{
  accessToken  = $obj.accessToken
  refreshToken = $obj.refreshToken
  expiresAt    = $obj.expiresAt
  authMethod   = $method
  region       = $reg
  authRegion   = $reg
  apiRegion    = "us-east-1"
  priority     = 0
  endpoint     = "ide"
}

$cacheDir = "$env:USERPROFILE\.aws\sso\cache"
$clientCache = Get-ChildItem $cacheDir -Filter "*.json" |
  ForEach-Object {
    try { Get-Content -Raw $_.FullName | ConvertFrom-Json } catch { $null }
  } |
  Where-Object { $_.clientId -and $_.clientSecret } |
  Select-Object -First 1

if ($clientCache) {
  $cred.clientId = $clientCache.clientId
  $cred.clientSecret = $clientCache.clientSecret
  if ($cred.authMethod -eq "IdC") { $cred.authMethod = "idc" }
}

$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($dst, ((@($cred)) | ConvertTo-Json -Depth 5), $utf8NoBom)
不要公开 credentials.json。它等价于你的 Kiro 授权凭据。GitHub Pages、公开仓库、课程网页里都不应该出现真实 token。尤其是 refreshTokenaccessTokenclientSecret 和自己设置的 API Key

七、启动 Kiro RS

cd D:\kiro-rs
docker compose up -d
docker ps --filter name=kiro-rs
docker logs --tail 50 kiro-rs

日志里看到下面这类信息,说明服务已经起来:

已加载 1 个凭据配置
启动 Anthropic API 端点: 0.0.0.0:8990
GET  /v1/models
POST /v1/messages

八、测试接口是否可用

先测模型列表:

$apiKey = "YOUR_API_KEY"

Invoke-RestMethod `
  -Uri "http://127.0.0.1:8990/v1/models" `
  -Headers @{ "x-api-key" = $apiKey }

再测真实对话:

$apiKey = "YOUR_API_KEY"

$body = @{
  model = "claude-sonnet-4-5-20250929"
  max_tokens = 128
  stream = $false
  messages = @(
    @{
      role = "user"
      content = "Say OK in English only."
    }
  )
} | ConvertTo-Json -Depth 8

Invoke-RestMethod `
  -Uri "http://127.0.0.1:8990/v1/messages" `
  -Method Post `
  -Headers @{
    "Content-Type" = "application/json"
    "x-api-key" = $apiKey
  } `
  -Body $body

如果返回类似下面的内容,就说明反代成功:

{
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "OK"
    }
  ]
}

九、接入 ccswitch / Claude Code

在 ccswitch 中新增 Claude 供应商时,重点是:请求地址填基地址,不要填到 /v1/messages

配置项 推荐填写
供应商名称 Kiro RS
官网链接 http://127.0.0.1:8990
请求地址 http://127.0.0.1:8990
API 格式 Anthropic Messages(原生)
认证字段 ANTHROPIC_AUTH_TOKEN
API Key 填你自己的 sk-kiro-rs-...

配置 JSON 可以写成:

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:8990"
  }
}

模型映射建议:

映射项 模型名
主模型 claude-sonnet-4-5-20250929
推理模型 Thinking claude-sonnet-4-5-20250929-thinking
Haiku 默认模型 claude-haiku-4-5-20251001
Sonnet 默认模型 claude-sonnet-4-5-20250929
Opus 默认模型 claude-opus-4-5-20251101

十、Claude Code 验证

保存并启用供应商后,打开命令行测试 Claude Code:

claude

进入 Claude Code 后可以输入:

你好
帮我检查一下当前电脑配置

实测成功时,Claude Code 会正常执行命令,例如读取 Windows 系统信息、CPU、内存、磁盘信息,并返回分析结果。

十一、常见问题

Q:ccswitch 启用时报 .claude.json expected value at line 1 column 1

这通常是 C:\Users\你的用户名\.claude.json 文件开头带 UTF-8 BOM,部分 JSON 解析器不能识别。可以备份后重写为无 BOM UTF-8。

$p = "$env:USERPROFILE\.claude.json"
$bak = "$env:USERPROFILE\.claude.json.bak-$(Get-Date -Format 'yyyyMMdd-HHmmss')"
Copy-Item -LiteralPath $p -Destination $bak

$text = [System.IO.File]::ReadAllText($p, [System.Text.Encoding]::UTF8)
if ($text.Length -gt 0 -and $text[0] -eq [char]0xFEFF) {
  $text = $text.Substring(1)
}

$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($p, $text, $utf8NoBom)

node -e "const fs=require('fs'); JSON.parse(fs.readFileSync(process.env.USERPROFILE+'/.claude.json','utf8')); console.log('JSON OK')"

Q:模型列表能返回,但对话失败?

优先检查 credentials.json 是否加载成功。运行:

docker logs --tail 80 kiro-rs

如果看到 已加载 0 个凭据配置,说明还没有有效 Kiro 凭据;如果看到 已加载 1 个凭据配置,说明凭据池已经识别。

Q:报错 502 上游 API 调用失败:所有凭据均已禁用(0/1) 怎么办?

这个错误通常不是 ccswitch 填错,而是 Kiro RS 的凭据池被自动禁用了。最常见原因是:credentials.json 里只有 accessToken/refreshToken,缺少 IdC 刷新所需的 clientId/clientSecret。刚启动时旧 Token 还没过期,所以能跑;一旦需要刷新 Token,就会连续失败,最后显示 TooManyRefreshFailures

先看管理接口状态:

$adminKey = "YOUR_ADMIN_API_KEY"

Invoke-RestMethod `
  -Uri "http://127.0.0.1:8990/api/admin/credentials" `
  -Headers @{ "x-api-key" = $adminKey } |
  ConvertTo-Json -Depth 8

如果返回里有 "available": 0"disabled": true"disabledReason": "TooManyRefreshFailures",就按下面命令补齐字段并重启。命令会自动备份旧凭据文件:

$credPath = "D:\kiro-rs\config\credentials.json"
$cacheDir = "$env:USERPROFILE\.aws\sso\cache"
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"

Copy-Item $credPath "$credPath.bak-$stamp"

$cred = Get-Content -Raw $credPath | ConvertFrom-Json
$clientCache = Get-ChildItem $cacheDir -Filter "*.json" |
  ForEach-Object {
    try { Get-Content -Raw $_.FullName | ConvertFrom-Json } catch { $null }
  } |
  Where-Object { $_.clientId -and $_.clientSecret } |
  Select-Object -First 1

if (-not $clientCache) {
  throw "没有找到包含 clientId/clientSecret 的 SSO 缓存,请先重新完成一次 Kiro 登录授权。"
}

$cred.clientId = $clientCache.clientId
$cred.clientSecret = $clientCache.clientSecret
if ($cred.authMethod -eq "IdC") { $cred.authMethod = "idc" }

$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($credPath, ($cred | ConvertTo-Json -Depth 10), $utf8NoBom)

cd D:\kiro-rs
docker compose restart kiro-rs

最后再发一个最小请求验证:

$apiKey = "YOUR_API_KEY"

$body = @{
  model = "claude-sonnet-4-5-20250929"
  max_tokens = 64
  stream = $false
  messages = @(
    @{ role = "user"; content = "Say OK only." }
  )
} | ConvertTo-Json -Depth 8

Invoke-RestMethod `
  -Uri "http://127.0.0.1:8990/v1/messages" `
  -Method Post `
  -Headers @{
    "Content-Type" = "application/json"
    "x-api-key" = $apiKey
  } `
  -Body $body

Q:ccswitch 里请求地址应该填什么?

http://127.0.0.1:8990,不要填 /v1/messagesccswitch 会自己拼接 Claude API 路径。

Q:可以接入 sub2api 吗?

可以,但前提是你的 sub2api 支持 Anthropic / Claude Compatible 上游。Base URL 填 http://127.0.0.1:8990http://127.0.0.1:8990/v1,取决于它是否会自动拼接 /v1/messages

Q:如何停止或重启服务?

停止服务:

cd D:\kiro-rs
docker compose down

重启服务:

cd D:\kiro-rs
docker compose up -d

查看实时日志:

docker logs -f kiro-rs

本教程由 杨逸 整理 · 2026