# 阿里百炼 Coding Plan 接入指南

本文档说明如何使用阿里百炼 Coding Plan 的一套 API Key 驱动 ARIS 全流程，无需 Claude 或 OpenAI API。

---

## 背景

### Coding Plan 是什么

[阿里百炼 Coding Plan](https://bailian.console.aliyun.com/) 是阿里云推出的 AI 编程套餐，一个专属 API Key 打通四款国产顶级模型，同时兼容 OpenAI 和 Anthropic 两大主流 API 协议。

### 支持的模型

| 模型 | 图像理解 | 推荐用途 | 速度参考 |
|------|---------|---------|---------|
| `qwen3.5-plus` | 是 | 执行器轻量任务 / 读图 | ~94 tokens/s |
| `kimi-k2.5` | 是 | 执行器主力（综合能力强） | ~42 tokens/s |
| `glm-5` | 否 | 审查器主力（推理质量高） | ~51 tokens/s |
| `MiniMax-M3` | 否 | 审查器备选（速度最快） | ~101 tokens/s |

### 为什么不能直接用 Codex MCP

原版 ARIS 的审查器使用 Codex MCP，而 Codex CLI 硬编码调用 OpenAI 专有的 **Responses API** (`/v1/responses`)，第三方 API 提供商（包括 Coding Plan）均不支持该接口。

**解决方案**：使用项目内置的 `llm-chat` MCP 服务器，它调用标准 **Chat Completions API** (`/v1/chat/completions`)，兼容所有 OpenAI 兼容端点，包括 Coding Plan。

相关讨论：[OpenAI Codex GitHub #7782](https://github.com/openai/codex/discussions/7782)

---

## 重要：使用条款限制

> **警告**：阿里百炼官方文档明确规定：
>
> *"仅限在编程工具（如 Claude Code、OpenClaw 等）中使用，禁止以 API 调用的形式用于自动化脚本、自定义应用程序后端或任何非交互式批量调用场景。将套餐 API Key 用于允许范围之外的调用将被视为违规或滥用，可能会导致订阅被暂停或 API Key 被封禁。"*

使用前请了解以下风险评估：

| 使用场景 | 是否符合条款 | 风险 |
|---------|------------|------|
| 交互式使用（手动触发 skill，人在回路） | **符合** | 低 |
| 半自动（每轮需人工确认，`AUTO_PROCEED: false`） | 基本符合 | 低 |
| 过夜全自动循环（`/auto-review-loop` 无人值守） | **违反** | 高，可能封禁 Key |
| llm-chat MCP 作为审查器被 Claude Code 调用 | 存在争议 | 中，取决于阿里方面解释 |

**建议**：如需完全自动化的过夜科研循环，考虑改用按量计费的百炼 API Key，或其他没有此限制的提供商（DeepSeek、MiniMax 直连等）。

---

## 双层架构

Coding Plan 提供两套 API 端点，分别对应 ARIS 的两个角色：

```
┌──────────────────────────────────────────────────────────┐
│                    Claude Code (CLI)                      │
│                                                           │
│  ┌──────────────────┐       ┌─────────────────────────┐  │
│  │     执行器        │──────▶│        审查器            │  │
│  │  (Claude CLI)    │       │   (llm-chat MCP)        │  │
│  │                  │       │                         │  │
│  │  ANTHROPIC_* 变量 │       │  LLM_* 环境变量          │  │
│  │  → Anthropic 端点 │       │  → OpenAI 端点           │  │
│  └──────────────────┘       └─────────────────────────┘  │
└──────────────────────────────────────────────────────────┘
```

| 角色 | 协议 | 端点 |
|------|------|------|
| 执行器（Claude CLI） | Anthropic 兼容 | `https://coding.dashscope.aliyuncs.com/apps/anthropic` |
| 审查器（llm-chat MCP） | OpenAI 兼容 | `https://coding.dashscope.aliyuncs.com/v1` |

两个端点使用**同一个 Coding Plan 专属 API Key**，无需分别申请。

---

## 安装步骤

### 前置条件

- Claude Code CLI 已安装：`npm install -g @anthropic-ai/claude-code`
- Python 3 可用：`python3 --version`（用 `which python3` 确认路径）
- 已购买阿里百炼 Coding Plan 套餐并获取专属 API Key（在套餐页面直接获取，与百炼按量 Key **不互通**）

### Step 1：克隆仓库

```bash
git clone https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep.git
cd Auto-claude-code-research-in-sleep
```

### Step 2：安装 Python 依赖

```bash
pip3 install -r mcp-servers/llm-chat/requirements.txt
```

### Step 3：部署 llm-chat MCP 服务器

```bash
mkdir -p ~/.claude/mcp-servers/llm-chat
cp mcp-servers/llm-chat/server.py ~/.claude/mcp-servers/llm-chat/server.py
```

### Step 4：安装 Skills

```bash
mkdir -p ~/.claude/skills
cp -r skills/* ~/.claude/skills/
```

### Step 5：配置 ~/.claude/settings.json

以下为推荐配置（kimi-k2.5 执行 + glm-5 审查）。用 `which python3` 替换 `command` 中的 python3 路径，用 `echo $HOME` 替换路径中的 `$HOME`：

```json
{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "your-coding-plan-api-key",
    "ANTHROPIC_BASE_URL": "https://coding.dashscope.aliyuncs.com/apps/anthropic",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "kimi-k2.5",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "qwen3.5-plus",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-M3",
    "API_TIMEOUT_MS": "3000000",
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "6000"
  },
  "mcpServers": {
    "llm-chat": {
      "command": "/usr/bin/python3",
      "args": ["$HOME/.claude/mcp-servers/llm-chat/server.py"],
      "env": {
        "LLM_API_KEY": "your-coding-plan-api-key",
        "LLM_BASE_URL": "https://coding.dashscope.aliyuncs.com/v1",
        "LLM_MODEL": "glm-5"
      }
    }
  }
}
```

> **Linux 路径说明**：`$HOME` 通常为 `/root`（root 用户）或 `/home/用户名`。运行 `echo $HOME` 确认，并将配置中 `args` 里的 `$HOME` 替换为实际路径（settings.json 不会自动展开 shell 变量）。同理，用 `which python3` 确认 python3 实际路径。

### Step 6：改写所有使用 Codex MCP 的 Skills

项目中有 **12 个 skill** 调用 `mcp__codex__codex`（依赖 OpenAI Responses API，Coding Plan 不支持）。在启动 Claude Code 后执行以下指令，让它自动完成改写：

```
Read skills/auto-review-loop-llm/SKILL.md as a reference.
It replaces mcp__codex__codex with mcp__llm-chat__chat.
Now rewrite ALL other skills that use mcp__codex__codex / mcp__codex__codex-reply
to use mcp__llm-chat__chat instead, following the same pattern.
```

Claude Code 会自动：
1. 扫描 `~/.claude/skills/` 中所有使用 Codex MCP 的 skill 文件
2. 参考 `auto-review-loop-llm` 的写法（MCP 优先 + curl fallback）
3. 逐个改写为调用 `mcp__llm-chat__chat`

> **注意**：此操作只修改 `~/.claude/skills/` 中的本地副本，不影响仓库原文件。如需恢复，重新执行 Step 4 即可。

---

## 模型选择建议

| 场景 | 执行器（OPUS 位） | 审查器（llm-chat） | 说明 |
|------|-----------------|------------------|------|
| **推荐：能力均衡** | `kimi-k2.5` | `glm-5` | kimi 执行综合能力强，glm-5 推理审查严谨 |
| 备选：速度优先 | `qwen3.5-plus` | `MiniMax-M3` | 两者出词最快，适合快速迭代和调试 |
| 备选：测试阶段 | `qwen3.5-plus` | `glm-5` | 执行轻量省请求次数，审查保持质量 |

> **关于跨模型优势**：ARIS 的核心设计是执行器和审查器使用不同模型，互不审自己的输出，形成真正的反馈循环。如果两端用同一模型（如都用 kimi-k2.5），会部分削弱这一优势。

---

## 使用方法

配置完成后，按如下方式启动 Claude Code 并使用 skill：

```bash
claude
```

### 直接可用（无需改写）

```
/auto-review-loop-llm "你的论文主题"    # 已原生支持 llm-chat MCP
```

### 改写后可用（Step 6 完成后）

```
/idea-discovery "你的研究方向"          # 工作流 1：文献 → idea → 查新 → 实验
/auto-review-loop "你的论文主题"        # 工作流 2：自动 review 循环
/paper-writing "NARRATIVE_REPORT.md"   # 工作流 3：叙事 → LaTeX → PDF
/research-pipeline "你的研究方向"       # 完整流水线：1 → 2 → 3
```

---

## 验证安装

### 1. 验证执行器端点（Anthropic 协议）

```bash
curl -s "https://coding.dashscope.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: your-coding-plan-api-key" \
  -H "anthropic-version: 2023-06-01" \
  -d '{"model":"kimi-k2.5","max_tokens":50,"messages":[{"role":"user","content":"Say hello"}]}'
```

预期：返回包含 `"content"` 字段的 JSON，其中有模型回复文本。

### 2. 验证审查器端点（OpenAI 协议）

```bash
curl -s "https://coding.dashscope.aliyuncs.com/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-coding-plan-api-key" \
  -d '{"model":"glm-5","messages":[{"role":"user","content":"Say hello"}],"max_tokens":50}'
```

预期：返回包含 `"choices"` 字段的 JSON，其中有模型回复文本。

### 3. 验证 llm-chat MCP 服务器

```bash
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | \
  LLM_API_KEY="your-coding-plan-api-key" \
  LLM_BASE_URL="https://coding.dashscope.aliyuncs.com/v1" \
  LLM_MODEL="glm-5" \
  python3 ~/.claude/mcp-servers/llm-chat/server.py
```

预期输出中包含：`"protocolVersion":"2024-11-05"`

### 4. 在 Claude Code 中端到端验证

```bash
claude
> 读一下这个项目，验证 /auto-review-loop-llm skill 是否正常可用，列出可识别的所有 skill
```

---

## 文件结构总览

```
~/.claude/
├── settings.json                        # 包含 Coding Plan 执行器 + llm-chat MCP 配置
├── mcp-servers/
│   └── llm-chat/
│       └── server.py                    # 通用 LLM MCP 服务器（支持任意 OpenAI 兼容 API）
└── skills/
    ├── auto-review-loop-llm/
    │   └── SKILL.md                     # 已原生支持 llm-chat MCP，无需改写
    ├── idea-creator/
    │   └── SKILL.md                     # Step 6 改写后调用 mcp__llm-chat__chat
    ├── research-review/
    │   └── SKILL.md                     # Step 6 改写后调用 mcp__llm-chat__chat
    ├── novelty-check/
    │   └── SKILL.md                     # Step 6 改写后调用 mcp__llm-chat__chat
    └── ...（其余 11 个 skill 类似）

项目目录（运行时生成）/
├── review-stage/AUTO_REVIEW.md                       # 审查日志（自动追加）
└── review-stage/REVIEW_STATE.json                    # 状态持久化，支持断点恢复
```

---

## 与其他方案对比

| | 默认方案 | **本方案（Coding Plan）** | MiniMax 方案 | GLM + DeepSeek |
|---|---|---|---|---|
| 执行器 | Claude Opus/Sonnet | kimi-k2.5 / qwen3.5-plus | GLM-5 (Z.ai) | GLM-5 (Z.ai) |
| 审查器 | GPT-5.5 (Codex MCP) | glm-5 / MiniMax-M3 | MiniMax-M3 | DeepSeek |
| 需要 Claude API | 是 | **否** | 否 | 否 |
| 需要 OpenAI API | 是 | **否** | 否 | 否 |
| API Key 数量 | 2 个 | **1 个** | 2 个 | 2 个 |
| 配置指南 | README 快速开始 | **本文档** | MINIMAX_MCP_GUIDE | LLM_API_MIX_MATCH_GUIDE |

---

## 常见问题

**Q：执行器报错 "401 Unauthorized"？**

Coding Plan 专属 API Key 与百炼平台按量调用 Key 不互通。确认在 [Coding Plan 套餐页面](https://bailian.console.aliyun.com/) 获取的是套餐专属 Key，而非普通百炼 Key。

**Q：llm-chat MCP 工具在 Claude Code 中不出现？**

1. 检查系统临时目录中的 `llm-chat-mcp-debug.log`（可运行 `python3 -c "import tempfile; print(tempfile.gettempdir())"` 查看路径）
2. 确认 `settings.json` 中 `command` 的 python3 路径正确（`which python3`）
3. 确认 `args` 中的路径为绝对路径，不能包含未展开的 `$HOME`（需替换为 `/root` 或实际路径）
4. 重启 Claude Code

**Q：改写后 skill 仍然调用 mcp__codex__codex？**

检查 `~/.claude/skills/` 下对应 SKILL.md 文件内容是否已更新。若未改写，重新执行 Step 6 的指令。

**Q：Linux 上 python3 路径在哪？**

运行 `which python3` 确认。常见路径：`/usr/bin/python3`。若使用 conda/venv 环境，路径会不同（如 `/root/miniconda3/envs/xxx/bin/python3`）。

**Q：过夜自动运行安全吗？**

Coding Plan 明确禁止"非交互式批量调用"，过夜无人值守的自动化循环存在封禁风险。建议改用百炼按量计费 Key 或其他无此限制的提供商。

**Q：如何切换审查器模型（如从 glm-5 改为 MiniMax-M3）？**

修改 `~/.claude/settings.json` 中 `mcpServers.llm-chat.env.LLM_MODEL` 的值，重启 Claude Code 即可生效。

---

## 参考资料

- [阿里百炼 Coding Plan 文档](https://help.aliyun.com/zh/model-studio/other-tools-coding-plan)
- [阿里百炼 Coding Plan 常见问题](https://www.alibabacloud.com/help/zh/model-studio/coding-plan-faq)
- [OpenAI Codex Responses API 讨论 #7782](https://github.com/openai/codex/discussions/7782)
- [LLM API 混搭配置指南](LLM_API_MIX_MATCH_GUIDE.md)
- [MiniMax MCP 集成指南](MINIMAX_MCP_GUIDE.md)
- [Claude Code 文档](https://docs.anthropic.com/claude-code)
