feat: 灵眸 AI 一键部署支持
- .env.example: 新增 ANTHROPIC_AUTH_TOKEN / ANTHROPIC_BASE_URL 灵眸配置
默认 provider 改为灵眸 AI(国内直连,无需代理)
保留 Anthropic 官方 / DeepSeek 注释备选配置
- deploy.ps1:
· 加载 ANTHROPIC_AUTH_TOKEN,自动判断灵眸/官方模式(UseLmuAuth)
· 灵眸模式:settings.json 写入 env.ANTHROPIC_AUTH_TOKEN + env.ANTHROPIC_BASE_URL
含 API_TIMEOUT_MS=3000000 + CLAUDE_CODE_ATTRIBUTION_HEADER=0
· 旧 ANTHROPIC_API_KEY/ANTHROPIC_BASE_URL/CLAUDE_MODEL 从 ~/.bashrc 自动清除(避免冲突)
· 官方模式:回退为原 ANTHROPIC_API_KEY env var 注入
· 灵眸模式自动跳过代理检测(国内直连)
· 默认模型改为 claude-opus-4-7
- README.md: 完整更新配置说明,灵眸 / 官方双配置路径文档
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -3,19 +3,23 @@
|
|||||||
# 复制为 .env 并按需填写
|
# 复制为 .env 并按需填写
|
||||||
# =============================================================
|
# =============================================================
|
||||||
|
|
||||||
# ── Claude / Anthropic API ──────────────────────────────────
|
# ── Claude / API 配置 ────────────────────────────────────────
|
||||||
# Anthropic 官方 API Key(从 https://console.anthropic.com 获取)
|
# 推荐:灵眸 AI(国内直连,无需代理)https://docs.lmuai.com/docs/tools/claude-code
|
||||||
ANTHROPIC_API_KEY=
|
ANTHROPIC_AUTH_TOKEN=sk-你的灵眸API密钥
|
||||||
|
ANTHROPIC_BASE_URL=https://api.lmuai.com
|
||||||
|
|
||||||
# API Base URL(默认使用 Anthropic 官方;若使用中转代理请修改)
|
# 备选:Anthropic 官方 API Key(海外直连)
|
||||||
# 示例(DeepSeek 兼容接口):
|
# ANTHROPIC_API_KEY=
|
||||||
# ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
|
# ANTHROPIC_BASE_URL=https://api.anthropic.com
|
||||||
ANTHROPIC_BASE_URL=https://api.anthropic.com
|
|
||||||
|
# 备选:DeepSeek 兼容接口
|
||||||
|
# ANTHROPIC_API_KEY=
|
||||||
|
# ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
|
||||||
|
|
||||||
# 默认使用的模型
|
# 默认使用的模型
|
||||||
# 可选:claude-opus-4-5 | claude-sonnet-4-5 | claude-haiku-4-5
|
# 灵眸可选:claude-opus-4-7 | claude-sonnet-4-5 | claude-haiku-4-5
|
||||||
# deepseek-v3-0324(配合 DeepSeek 接口使用)
|
# DeepSeek可选:deepseek-v4-pro
|
||||||
CLAUDE_MODEL=claude-opus-4-5
|
CLAUDE_MODEL=claude-opus-4-7
|
||||||
|
|
||||||
# ── WSL2 ────────────────────────────────────────────────────
|
# ── WSL2 ────────────────────────────────────────────────────
|
||||||
# WSL2 发行版名称(wsl --list 查看已安装发行版)
|
# WSL2 发行版名称(wsl --list 查看已安装发行版)
|
||||||
|
|||||||
@@ -43,14 +43,14 @@ WSL2 Ubuntu 首次启动若弹出用户创建提示,可直接跳过或按提
|
|||||||
# 1. 以管理员身份运行 PowerShell
|
# 1. 以管理员身份运行 PowerShell
|
||||||
cd path\to\claude-dev-stack
|
cd path\to\claude-dev-stack
|
||||||
|
|
||||||
# 2. 复制配置文件,填写 ANTHROPIC_API_KEY
|
# 2. 复制配置文件,填写灵眸 API Key(推荐)或 Anthropic API Key
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
notepad .env
|
notepad .env
|
||||||
|
|
||||||
# 3. 运行部署脚本(自动检测 v2rayN 代理)
|
# 3. 运行部署脚本(灵眸模式自动跳过代理检测)
|
||||||
pwsh .\deploy.ps1
|
pwsh .\deploy.ps1
|
||||||
|
|
||||||
# 手动指定代理端口
|
# 手动指定代理端口(使用官方 Anthropic API 时需要)
|
||||||
pwsh .\deploy.ps1 -ProxyPort 10809
|
pwsh .\deploy.ps1 -ProxyPort 10809
|
||||||
|
|
||||||
# 不使用代理(直连)
|
# 不使用代理(直连)
|
||||||
@@ -115,11 +115,29 @@ WSL2 Ubuntu
|
|||||||
|
|
||||||
## 配置说明(`.env`)
|
## 配置说明(`.env`)
|
||||||
|
|
||||||
|
### 推荐:灵眸 AI(国内直连,无需代理)
|
||||||
|
|
||||||
|
| 变量 | 默认值 | 说明 |
|
||||||
|
|------|--------|------|
|
||||||
|
| `ANTHROPIC_AUTH_TOKEN` | _(必填)_ | 灵眸 API Key,从 [lmuai.com](https://lmuai.com) 获取 |
|
||||||
|
| `ANTHROPIC_BASE_URL` | `https://api.lmuai.com` | 灵眸 API 基础 URL |
|
||||||
|
| `CLAUDE_MODEL` | `claude-opus-4-7` | 可选:`claude-opus-4-7` / `claude-sonnet-4-5` / `claude-haiku-4-5` |
|
||||||
|
|
||||||
|
> **灵眸模式行为**:
|
||||||
|
> - API Token 自动写入 `~/.claude/settings.json` 的 `env` 块(不写入 `~/.bashrc`,避免冲突)
|
||||||
|
> - 部署脚本自动跳过代理检测(国内直连无需代理)
|
||||||
|
> - 旧 `ANTHROPIC_API_KEY` / `ANTHROPIC_BASE_URL` 变量从 `~/.bashrc` 清除
|
||||||
|
|
||||||
|
### 备选:Anthropic 官方 API
|
||||||
|
|
||||||
| 变量 | 默认值 | 说明 |
|
| 变量 | 默认值 | 说明 |
|
||||||
|------|--------|------|
|
|------|--------|------|
|
||||||
| `ANTHROPIC_API_KEY` | _(空)_ | Anthropic API Key,从 [console.anthropic.com](https://console.anthropic.com) 获取 |
|
| `ANTHROPIC_API_KEY` | _(空)_ | Anthropic API Key,从 [console.anthropic.com](https://console.anthropic.com) 获取 |
|
||||||
| `ANTHROPIC_BASE_URL` | `https://api.anthropic.com` | API 基础 URL;中转代理可改为 DeepSeek 等兼容接口 |
|
| `ANTHROPIC_BASE_URL` | `https://api.anthropic.com` | API 基础 URL;DeepSeek 等中转可改为对应 URL |
|
||||||
| `CLAUDE_MODEL` | `claude-opus-4-5` | 默认使用的模型 |
|
| `CLAUDE_MODEL` | `claude-opus-4-7` | 默认使用的模型 |
|
||||||
|
|
||||||
|
| 变量 | 默认值 | 说明 |
|
||||||
|
|------|--------|------|
|
||||||
| `WSL_DISTRO` | `Ubuntu` | WSL2 发行版名称 |
|
| `WSL_DISTRO` | `Ubuntu` | WSL2 发行版名称 |
|
||||||
| `SKIP_WSL_INSTALL` | `false` | `true` 跳过 WSL2 安装步骤 |
|
| `SKIP_WSL_INSTALL` | `false` | `true` 跳过 WSL2 安装步骤 |
|
||||||
|
|
||||||
|
|||||||
@@ -78,11 +78,15 @@ if (Test-Path $EnvFile) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ANTHROPIC_API_KEY = if ($Config["ANTHROPIC_API_KEY"]) { $Config["ANTHROPIC_API_KEY"] } else { "" }
|
$ANTHROPIC_API_KEY = if ($Config["ANTHROPIC_API_KEY"]) { $Config["ANTHROPIC_API_KEY"] } else { "" }
|
||||||
$ANTHROPIC_BASE_URL = if ($Config["ANTHROPIC_BASE_URL"]) { $Config["ANTHROPIC_BASE_URL"] } else { "https://api.anthropic.com" }
|
$ANTHROPIC_AUTH_TOKEN = if ($Config["ANTHROPIC_AUTH_TOKEN"]) { $Config["ANTHROPIC_AUTH_TOKEN"] } else { "" }
|
||||||
$CLAUDE_MODEL = if ($Config["CLAUDE_MODEL"]) { $Config["CLAUDE_MODEL"] } else { "claude-opus-4-5" }
|
$ANTHROPIC_BASE_URL = if ($Config["ANTHROPIC_BASE_URL"]) { $Config["ANTHROPIC_BASE_URL"] } else { "https://api.lmuai.com" }
|
||||||
|
$CLAUDE_MODEL = if ($Config["CLAUDE_MODEL"]) { $Config["CLAUDE_MODEL"] } else { "claude-opus-4-7" }
|
||||||
$WSL_DISTRO = if ($Config["WSL_DISTRO"]) { $Config["WSL_DISTRO"] } else { "Ubuntu" }
|
$WSL_DISTRO = if ($Config["WSL_DISTRO"]) { $Config["WSL_DISTRO"] } else { "Ubuntu" }
|
||||||
$SKIP_WSL_INSTALL = if ($Config["SKIP_WSL_INSTALL"]) { $Config["SKIP_WSL_INSTALL"] } else { "false" }
|
$SKIP_WSL_INSTALL = if ($Config["SKIP_WSL_INSTALL"]) { $Config["SKIP_WSL_INSTALL"] } else { "false" }
|
||||||
|
|
||||||
|
# 判断认证方式:灵眸/中转用 AUTH_TOKEN,官方用 API_KEY
|
||||||
|
$UseLmuAuth = ($ANTHROPIC_AUTH_TOKEN -ne "" -and $ANTHROPIC_BASE_URL -ne "https://api.anthropic.com")
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
# Banner
|
# Banner
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
@@ -162,6 +166,13 @@ function Clear-WindowsProxy {
|
|||||||
|
|
||||||
$resolvedProxyPort = 0
|
$resolvedProxyPort = 0
|
||||||
|
|
||||||
|
# 灵眸 AI 国内直连无需代理,主动跳过
|
||||||
|
if ($UseLmuAuth -and $ProxyPort -ne -1) {
|
||||||
|
Write-Info "灵眸 AI 模式:国内直连,自动跳过代理配置"
|
||||||
|
Write-Info "如需为其他服务(git/npm)使用代理,请手动指定 -ProxyPort"
|
||||||
|
$ProxyPort = -1
|
||||||
|
}
|
||||||
|
|
||||||
if ($ProxyPort -eq -1) {
|
if ($ProxyPort -eq -1) {
|
||||||
Write-Warn "已跳过代理配置(-ProxyPort -1)"
|
Write-Warn "已跳过代理配置(-ProxyPort -1)"
|
||||||
} elseif ($ProxyPort -gt 0) {
|
} elseif ($ProxyPort -gt 0) {
|
||||||
@@ -510,8 +521,22 @@ $mcpAllowedTools = @(
|
|||||||
"mcp__unity-mcp__unity_list_instances","mcp__unity-mcp__unity_select_instance",
|
"mcp__unity-mcp__unity_list_instances","mcp__unity-mcp__unity_select_instance",
|
||||||
"mcp__unity-mcp__unity_get_project_context"
|
"mcp__unity-mcp__unity_get_project_context"
|
||||||
)
|
)
|
||||||
$claudeSettingsJson = [ordered]@{ model = $CLAUDE_MODEL; allowedTools = $mcpAllowedTools } |
|
$claudeSettingsJson = if ($UseLmuAuth) {
|
||||||
ConvertTo-Json -Depth 3
|
# 灵眸 / 中转 API:使用 env.ANTHROPIC_AUTH_TOKEN(避免与 ANTHROPIC_API_KEY 冲突)
|
||||||
|
[ordered]@{
|
||||||
|
env = [ordered]@{
|
||||||
|
ANTHROPIC_BASE_URL = $ANTHROPIC_BASE_URL
|
||||||
|
ANTHROPIC_AUTH_TOKEN = $ANTHROPIC_AUTH_TOKEN
|
||||||
|
API_TIMEOUT_MS = "3000000"
|
||||||
|
CLAUDE_CODE_ATTRIBUTION_HEADER = "0"
|
||||||
|
}
|
||||||
|
model = $CLAUDE_MODEL
|
||||||
|
allowedTools = $mcpAllowedTools
|
||||||
|
} | ConvertTo-Json -Depth 4
|
||||||
|
} else {
|
||||||
|
# Anthropic 官方:使用 model + allowedTools,API Key 由环境变量注入
|
||||||
|
[ordered]@{ model = $CLAUDE_MODEL; allowedTools = $mcpAllowedTools } | ConvertTo-Json -Depth 3
|
||||||
|
}
|
||||||
$writeClaudeSettingsCmd = @"
|
$writeClaudeSettingsCmd = @"
|
||||||
mkdir -p ~/.claude
|
mkdir -p ~/.claude
|
||||||
cat > ~/.claude/settings.json << 'SETTINGS'
|
cat > ~/.claude/settings.json << 'SETTINGS'
|
||||||
@@ -522,22 +547,38 @@ true
|
|||||||
Invoke-WSL $writeClaudeSettingsCmd -IgnoreError | Out-Null
|
Invoke-WSL $writeClaudeSettingsCmd -IgnoreError | Out-Null
|
||||||
|
|
||||||
# 写入 bash 环境变量(WSL2 侧)
|
# 写入 bash 环境变量(WSL2 侧)
|
||||||
$profBlock = ""
|
# 灵眸模式:auth token 已在 settings.json env 块中,清理旧 bashrc 变量避免冲突
|
||||||
if ($ANTHROPIC_API_KEY) { $profBlock += "export ANTHROPIC_API_KEY='$ANTHROPIC_API_KEY'\n" }
|
# 官方模式:写入 ANTHROPIC_API_KEY 到 bashrc
|
||||||
if ($ANTHROPIC_BASE_URL) { $profBlock += "export ANTHROPIC_BASE_URL='$ANTHROPIC_BASE_URL'\n" }
|
$cleanOldVarsCmd = @'
|
||||||
$profBlock += "export CLAUDE_MODEL='$CLAUDE_MODEL'\n"
|
sed -i '/ANTHROPIC_API_KEY/d' ~/.bashrc ~/.profile 2>/dev/null || true
|
||||||
$addEnvCmd = @"
|
sed -i '/ANTHROPIC_BASE_URL/d' ~/.bashrc ~/.profile 2>/dev/null || true
|
||||||
if ! grep -q 'ANTHROPIC_API_KEY' ~/.bashrc 2>/dev/null; then
|
sed -i '/CLAUDE_MODEL/d' ~/.bashrc ~/.profile 2>/dev/null || true
|
||||||
printf '\n# Claude Code CLI\n$profBlock' >> ~/.bashrc
|
sed -i '/# Claude Code CLI/d' ~/.bashrc ~/.profile 2>/dev/null || true
|
||||||
fi
|
true
|
||||||
|
'@
|
||||||
|
Invoke-WSL $cleanOldVarsCmd -IgnoreError | Out-Null
|
||||||
|
|
||||||
|
if (-not $UseLmuAuth -and $ANTHROPIC_API_KEY) {
|
||||||
|
$profBlock = "export ANTHROPIC_API_KEY='$ANTHROPIC_API_KEY'\n"
|
||||||
|
$profBlock += "export ANTHROPIC_BASE_URL='$ANTHROPIC_BASE_URL'\n"
|
||||||
|
$profBlock += "export CLAUDE_MODEL='$CLAUDE_MODEL'\n"
|
||||||
|
$addEnvCmd = @"
|
||||||
|
printf '\n# Claude Code CLI\n$profBlock' >> ~/.bashrc
|
||||||
|
true
|
||||||
"@
|
"@
|
||||||
Invoke-WSL $addEnvCmd -IgnoreError | Out-Null
|
Invoke-WSL $addEnvCmd -IgnoreError | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
# Windows 侧 Claude 配置
|
# Windows 侧 Claude 配置
|
||||||
$claudeDir = "$env:USERPROFILE\.claude"
|
$claudeDir = "$env:USERPROFILE\.claude"
|
||||||
if (-not (Test-Path $claudeDir)) { New-Item -ItemType Directory -Path $claudeDir | Out-Null }
|
if (-not (Test-Path $claudeDir)) { New-Item -ItemType Directory -Path $claudeDir | Out-Null }
|
||||||
$claudeSettingsJson | Set-Content "$claudeDir\settings.json" -Encoding UTF8
|
$claudeSettingsJson | Set-Content "$claudeDir\settings.json" -Encoding UTF8
|
||||||
if ($ANTHROPIC_API_KEY) {
|
if ($UseLmuAuth) {
|
||||||
|
# 灵眸:token 已在 settings.json 中,清除可能冲突的 Windows 用户级变量
|
||||||
|
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", $null, "User")
|
||||||
|
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", $null, "User")
|
||||||
|
[System.Environment]::SetEnvironmentVariable("CLAUDE_MODEL", $null, "User")
|
||||||
|
} elseif ($ANTHROPIC_API_KEY) {
|
||||||
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", $ANTHROPIC_API_KEY, "User")
|
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", $ANTHROPIC_API_KEY, "User")
|
||||||
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", $ANTHROPIC_BASE_URL, "User")
|
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", $ANTHROPIC_BASE_URL, "User")
|
||||||
[System.Environment]::SetEnvironmentVariable("CLAUDE_MODEL", $CLAUDE_MODEL, "User")
|
[System.Environment]::SetEnvironmentVariable("CLAUDE_MODEL", $CLAUDE_MODEL, "User")
|
||||||
|
|||||||
Reference in New Issue
Block a user