目标:在 Windows 上安装 Claude Desktop,并通过本地代理使用 Loomy 的 API 通道调用大模型。
适用场景:没有 Anthropic 官方 API Key,但有 Loomy 订阅/额度,希望在 Claude Code Desktop 中使用。
目录h2
第一章:Claude Desktop 安装h2
1.1 方法一:winget 安装(推荐作为第一步)h3
winget install Anthropic.Claude✅ 结果:安装成功,应用可以正常启动。
❌ 问题:Cowork 功能报错 — Reinstall required - Cowork requires Claude Desktop to be installed via a modern installer。
原因:Cowork 功能会校验 Claude Desktop 是否通过 MSIX(现代安装程序)部署。winget 安装的记录在 Windows 侧不完整,Cowork 认为安装来源不合法。
1.2 方法二:直接安装 MSIXh3
下载 MSIX 安装包:
Invoke-WebRequest -Uri "https://claude.ai/api/desktop/win32/x64/msix/latest/redirect" -OutFile "Claude.msix"为当前用户安装:
Add-AppxPackage -Path "Claude.msix"❌ 问题:安装成功,但应用无法启动。点击图标无反应。
原因:MSIX 包本身缺少某些运行时依赖或签名上下文。单独安装 MSIX 时,Windows 没有正确解析其依赖链。
1.3 最终方案:winget + MSIX 组合安装 ✅h3
先通过 winget 安装基础版本(确保依赖齐全、应用可启动),再用 MSIX 覆盖安装(修正安装器签名记录)。
完整命令:
# 第 1 步:winget 安装(使应用可运行,依赖完整)winget install Anthropic.Claude
# 第 2 步:下载 MSIX 安装包Invoke-WebRequest -Uri "https://claude.ai/api/desktop/win32/x64/msix/latest/redirect" -OutFile "Claude.msix"
# 第 3 步:MSIX 覆盖安装(修正安装来源,Cowork 可识别)Add-AppxPackage -Path "Claude.msix"最终效果:
| 检查项 | 结果 |
|---|---|
| 应用启动 | ✅ 正常启动 |
| Cowork 校验 | ✅ 不再报错 |
| 程序签名 | ✅ 完整 |
第二章:理解你的代理工具h2
你的 Loomy Workspace 目录下有三个文件,分工如下:
2.1 文件总览h3
Loomy Workspace/├── 代理使用教程.md # 配置指南(DNS 劫持方案,供参考)├── get-session.cjs # Session Token 提取器└── anthropic-proxy.mjs # 协议转换代理(主力方案)2.2 get-session.cjs — Session Token 自动提取h3
作用:从 Loomy 桌面端的本地数据库中提取登录会话密钥。
原理:
- Loomy 桌面端使用 Electron 的 Local Storage,底层是 LevelDB
- LevelDB 的数据存储在
%APPDATA%/loomy/Local Storage/leveldb/目录下,以.log和.ldb文件存在 - 该工具扫描这些文件,在二进制数据中查找
loggedInAt关键字 - 在
loggedInAt附近寻找 32 位十六进制字符串(即loomy-session-key) - 同时提取手机号做脱敏显示
用法:
# 仅输出最新 session keynode get-session.cjs
# 列出所有历史 sessionnode get-session.cjs --all
# 输出 SESSION_TOKEN=xxx 格式(适合管道)node get-session.cjs --env
# 实时监听 session 变化(每 5 秒轮询)node get-session.cjs --watch前置条件:Loomy 桌面端必须已登录运行。
2.3 anthropic-proxy.mjs — 协议转换代理(核心)h3
这是整套方案的核心组件。它解决的问题是:
Claude Code Desktop 只认 Anthropic Messages API 格式,而 Loomy/iModel 只提供 OpenAI Chat Completions API 格式。两者协议不兼容。
架构图h4
Claude Code Desktop anthropic-proxy.mjs upstream(ANTHROPIC_BASE_URL=:8080) (localhost:8080) (loomyad.xunfei.cn)┌─────────────────┐ POST /v1/messages ┌─────────────────────┐ POST /api/v1/chat/completions ┌──────────────┐│ Anthropic 格式 │ ───────────────────→ │ 协议转换 + 模型映射 │ ───────────────────────────────→ │ OpenAI 格式 ││ 请求 │ │ │ │ 请求 ││ │ ←─────────────────── │ │ ←─────────────────────────────── │ │└─────────────────┘ Anthropic 格式响应 └─────────────────────┘ OpenAI 格式响应 └──────────────┘核心功能 1:协议转换h4
| 项目 | Anthropic Messages API | OpenAI Chat Completions API |
|---|---|---|
| System Prompt | system 顶层字段 | role: "system" 作为第一条消息 |
| 用户消息 | role: "user", content 为对象数组 | role: "user", content 为字符串或数组 |
| 图片输入 | type: "image", source: {data, media_type} | type: "image_url", image_url.url (base64 data URI) |
| 工具调用 | type: "tool_use", input 是对象 | tool_calls, function.arguments 是 JSON 字符串 |
| 工具结果 | role: "user", type: "tool_result" | role: "tool", tool_call_id |
| 流式事件 | content_block_start/delta/stop + message_start/delta/stop | SSE data: {...}, 每行一个 delta chunk |
核心功能 2:模型映射h4
代理将 Claude 模型名映射到上游 iModel 的模型:
| Claude 模型名 | 映射到上游模型 | 说明 |
|---|---|---|
claude-sonnet-4-6 系列 | deepseek-v4-flash | 主力模型 |
claude-opus-4 系列 | qwen3.5-plus | 高级模型,支持图片 |
claude-sonnet-4-6-lite 系列 | qwen3.5-flash | 轻量模型 |
claude-3-opus-4-video | doubao-seed-2.0-pro | 视频理解 |
核心功能 3:API 端点h4
| 路径 | 方法 | 说明 |
|---|---|---|
/ 或 /health | GET | 健康检查,返回代理状态和模型列表 |
/v1/models | GET | 返回映射表中的所有 Claude 模型(Claude Code 启动时会调用) |
/v1/messages | POST | 主要端点:接收 Anthropic 请求,转换后转发到上游 |
/v1/messages/:id | GET | 返回假响应(防止 Claude Code 因 404 报错) |
核心功能 4:流式支持h4
完整的流式转换。上游 OpenAI SSE 流中的每个 delta 被实时转换为 Anthropic 的 content_block_delta 事件。支持:
- 文本 delta →
content_block_delta(text_delta) - Tool calls delta →
content_block_delta(input_json_delta) - Usage 信息 →
message_delta中的 usage - Finish reason 映射
Session Token 获取h4
优先级:
- 环境变量
SESSION_TOKEN(最高优先级) - 自动提取 — 调用
get-session.cjs从 Loomy 桌面端 LevelDB 读取
第三章:配置与启动代理h2
3.1 确认前置条件h3
- Loomy 桌面端已安装并登录
- Node.js 已安装(建议 v18+)
- Claude Desktop 已正确安装(按第一章流程)
3.2 验证 Session 可获取h3
cd "C:\Users\Administrator\Documents\Loomy Workspace"
# 确保 Loomy 桌面端正在运行且已登录node get-session.cjs预期输出:一串 32 位十六进制字符串,如 a1b2c3d4e5f6...。
如果报错 未找到 session,请确认 Loomy 桌面端已登录。
3.3 启动代理h3
# 方式一:自动提取 sessionnode anthropic-proxy.mjs
# 方式二:手动指定 session(优先级更高)set SESSION_TOKEN=你的32位hex字符串node anthropic-proxy.mjs
# 方式三:启用调试日志set DEBUG_PROXY=truenode anthropic-proxy.mjs
# 方式四:指定其他端口(默认 8080)set PROXY_PORT=9090node anthropic-proxy.mjs启动成功应看到如下输出:
╔════════════════════════════════════════════════════════╗║ Anthropic → iModel API 代理 ║╠════════════════════════════════════════════════════════╣║ 代理地址: http://127.0.0.1:8080 ║║ 上游 API: https://loomyad.xunfei.cn ║║ Session: a1b2c3d4e5f6... ║╚════════════════════════════════════════════════════════╝3.4 验证代理运行正常h3
# 测试健康检查curl http://127.0.0.1:8080/health
# 测试模型列表curl http://127.0.0.1:8080/v1/models第四章:配置 Claude Code Desktoph2
4.1 设置环境变量h3
在 Claude Code Desktop 的配置中(claude_desktop_config.json),添加:
{ "projectSettings": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:8080", "ANTHROPIC_API_KEY": "sk-session-token" }}说明:
ANTHROPIC_BASE_URL指向本地代理地址。Claude Code 的所有 API 请求都会发到这里。ANTHROPIC_API_KEY代理不校验其真实性,填任意值即可。- 不要在全局设置中配置,只在项目级别配置,避免影响其他使用场景。
4.2 验证连通性h3
在 Claude Code Desktop 中发送一条消息,确认能正常返回。
4.3 日志排查h3
如果遇到问题,启用调试日志再次启动代理:
set DEBUG_PROXY=truenode anthropic-proxy.mjs查看日志中的关键信息:
- 模型映射是否匹配:
Model mapping: claude-sonnet-4-6 → deepseek-v4-flash - 上游返回状态码:非 200 说明上游有问题
- 请求体中的消息数量和工具数量
第五章:常见安装故障修复 — 卸载 OneDrive 后 Claude 无法启动h2
问题现象h3
卸载 OneDrive 之后,Claude Desktop(或其他应用)点击图标无反应,无法启动。
根因h3
Windows 的 User Shell Folders 注册表中,Desktop、Documents 等路径仍然指向 C:\Users\xxx\OneDrive\Desktop 这类目录。OneDrive 被卸载后这些目录已不存在,Claude Desktop 启动时找不到标准文件夹路径,直接崩溃。
此外,旧版本 Claude 的残留文件也可能干扰新安装。
修复脚本h3
以下脚本会自动完成全部修复流程。将代码保存为 Fix-ClaudeDesktop-OneDrivePath.ps1,然后以管理员身份运行:
# ============================================================# 用途:修复卸载 OneDrive 后 Claude Desktop 无法启动的问题# 原理:清理 User Shell Folders 中残留的 OneDrive 路径 + 清理 Claude 残留# 运行:以管理员身份运行 PowerShell,然后执行本脚本# ============================================================
# 0. 检查管理员权限if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { Write-Host "请以管理员身份运行 PowerShell 后再执行本脚本。" -ForegroundColor Red exit 1}
$ErrorActionPreference = "Stop"$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"$backupDir = "$env:USERPROFILE\Desktop\ClaudeFix-Backup-$timestamp"New-Item -ItemType Directory -Path $backupDir | Out-NullWrite-Host "备份目录:$backupDir" -ForegroundColor Cyan
# 1. 备份注册表 User Shell Folders / Shell FoldersWrite-Host "`n[1/5] 备份注册表 ..." -ForegroundColor Yellowreg export "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" "$backupDir\UserShellFolders.reg" /y | Out-Nullreg export "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "$backupDir\ShellFolders.reg" /y | Out-NullWrite-Host " 注册表已备份。"
# 2. 修正 User Shell Folders 中含 OneDrive 的路径Write-Host "`n[2/5] 扫描并修正 User Shell Folders 中的 OneDrive 路径 ..." -ForegroundColor Yellow$keys = @( "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")foreach ($key in $keys) { $props = Get-ItemProperty -Path $key foreach ($name in $props.PSObject.Properties.Name) { if ($name -like "PS*") { continue } $value = $props.$name if ($value -is [string] -and $value -match "OneDrive") { $newValue = $value -replace "([A-Za-z]:\\Users\$\^$\$+|%USERPROFILE%)\\OneDrive(?:\s-\s[^\\]+)?\\", "%USERPROFILE%\" if ($newValue -ne $value) { Write-Host " [$key] $name" -ForegroundColor Green Write-Host " 旧: $value" Write-Host " 新: $newValue" Set-ItemProperty -Path $key -Name $name -Value $newValue } } }}
# 3. 确保本地默认文件夹存在Write-Host "`n[3/5] 确保本地默认文件夹存在 ..." -ForegroundColor Yellow$folders = @("Desktop","Documents","Downloads","Pictures","Music","Videos","Favorites")foreach ($f in $folders) { $p = Join-Path $env:USERPROFILE $f if (-not (Test-Path $p)) { New-Item -ItemType Directory -Path $p | Out-Null Write-Host " 已创建: $p" }}
# 4. 卸载 Claude Desktop(若存在)并清理残留目录Write-Host "`n[4/5] 卸载 Claude Desktop 并清理残留 ..." -ForegroundColor Yellowtry { $pkg = Get-AppxPackage -Name "*Claude*" -ErrorAction SilentlyContinue if ($pkg) { $pkg | Remove-AppxPackage Write-Host " 已卸载 MSIX 包: $($pkg.Name)" } else { Write-Host " 未检测到 MSIX 形式的 Claude(可能是 exe 安装,请手动到'已安装的应用'中卸载)。" }} catch { Write-Host " 卸载 MSIX 包失败: $_" -ForegroundColor Red}
$residue = @( "$env:LOCALAPPDATA\AnthropicClaude", "$env:LOCALAPPDATA\Claude", "$env:APPDATA\Claude", "$env:APPDATA\AnthropicClaude")foreach ($d in $residue) { if (Test-Path $d) { Copy-Item $d "$backupDir\" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item $d -Recurse -Force -ErrorAction SilentlyContinue Write-Host " 已清理: $d (已备份到 $backupDir)" }}
# 5. 完成提示Write-Host "`n[5/5] 完成!" -ForegroundColor GreenWrite-Host "请执行以下两步:" -ForegroundColor CyanWrite-Host " 1) 重启电脑(必须,让 Explorer 重新加载 Shell Folders)"Write-Host " 2) 从 https://claude.ai/download 重新下载并以管理员身份安装 Claude Desktop"Write-Host "`n如出现异常,可双击 $backupDir 下的 .reg 文件恢复注册表。" -ForegroundColor Cyan脚本执行流程h3
| 步骤 | 操作 | 说明 |
|---|---|---|
| 0 | 检查管理员权限 | 非管理员直接退出 |
| 1 | 备份注册表 | 导出 User Shell Folders 和 Shell Folders 到桌面备份目录 |
| 2 | 修正 OneDrive 路径 | 扫描注册表中所有含 OneDrive 的路径,替换为 %USERPROFILE%\XXX |
| 3 | 创建缺失文件夹 | 确保 Desktop、Documents 等标准文件夹存在 |
| 4 | 清理 Claude 残留 | 卸载 MSIX 包,删除 %LOCALAPPDATA% 和 %APPDATA% 下的残留目录 |
| 5 | 完成提示 | 提示重启电脑并重新安装 Claude Desktop |
恢复方法h3
如果修复后出现异常,双击桌面备份目录中的 .reg 文件即可恢复注册表到修复前的状态。
与第一章的配合h3
如果遇到了 OneDrive 卸载导致的问题,正确的完整流程是:
# 第 1 步:运行本修复脚本(清理注册表 + 卸载旧版 Claude)# (以管理员身份运行 Fix-ClaudeDesktop-OneDrivePath.ps1)
# 第 2 步:重启电脑
# 第 3 步:重新安装 Claude Desktopwinget install Anthropic.Claude
# 第 4 步:MSIX 覆盖安装(修正 Cowork 安装来源)Invoke-WebRequest -Uri "https://claude.ai/api/desktop/win32/x64/msix/latest/redirect" -OutFile "Claude.msix"Add-AppxPackage -Path "Claude.msix"之后再按后续章节配置代理即可。
常见问题排查h2
Q1:Claude Code 启动时报 “No available models”h3
原因:代理未启动或 ANTHROPIC_BASE_URL 配置错误。
解决:
# 确认代理正在运行curl http://127.0.0.1:8080/v1/models
# 确认配置的 URL 可访问curl http://127.0.0.1:8080/healthQ2:请求返回 401 Unauthorizedh3
原因:Session Token 过期或无效。
解决:重新运行 get-session.cjs 获取最新 token,或用 --watch 模式监控变化。
Q3:请求返回 502 Bad Gatewayh3
原因:上游 loomyad.xunfei.cn 不可达。
解决:
# 测试网络连通性ping loomyad.xunfei.cn
# 检查是否需要代理上网Q4:端口被占用h3
原因:8080 端口已被其他程序占用。
解决:
set PROXY_PORT=9090node anthropic-proxy.mjs同时在 Claude Code Desktop 配置中将 ANTHROPIC_BASE_URL 改为 http://127.0.0.1:9090。
Q5:工具调用(Tool Use)失败h3
原因:上游模型不支持某些工具调用格式。
解决:检查 get-session.cjs --env 输出的 session 是否有效,以及上游 iModel 是否支持 function calling。
附录h2
完整启动流程速查h3
# 1. 确保 Loomy 桌面端已登录
# 2. 启动代理cd "C:\Users\Administrator\Documents\Loomy Workspace"node anthropic-proxy.mjs
# 3. 保持终端窗口打开,另开一个窗口启动 Claude Code Desktop# 4. 确保 claude_desktop_config.json 中已配置:# ANTHROPIC_BASE_URL=http://127.0.0.1:8080# ANTHROPIC_API_KEY=sk-session-token文件清单h3
| 文件 | 说明 | 是否需要修改 |
|---|---|---|
get-session.cjs | Session Token 提取器 | 不需要,直接使用 |
anthropic-proxy.mjs | 协议转换代理 | 不需要,直接使用 |
Claude Desktop + Loomy 代理完整安装与配置教程.md | 本文档 | — |
Comments