问题描述
在Windows桌面端(Tauri WebView2)中,添加自定义AI端点(如火山引擎 https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions)时:
- ❌ 点击"测试连接"按钮 → Failed to fetch 错误
- ❌ 点击"获取模型"按钮 → Failed to fetch 错误
但在以下环境中相同端点可以正常工作:
- ✅ Android应用(Expo/React Native)
- ✅ 主界面的AI对话功能
根本原因
packages/core/src/ 目录下多处代码使用原生浏览器 fetch 发起请求,而大多数自定义服务商(火山引擎、阿里云百炼、本地部署等)没有配置 CORS 响应头,导致 WebView2 的同源策略拦截请求报错。
受影响代码位置:
- packages/core/src/ai/test-endpoint.ts - 测试连接功能
- packages/core/src/stores/settings-store.ts - 获取模型列表功能(fetchOpenAIModels、fetchOllamaModels、fetchLMStudioModels)
对比正常工作的代码:
- packages/core/src/ai/llm-provider.ts - AI对话功能,使用了 getEndpointFetch() 封装,底层走 Tauri HTTP 插件,无跨域限制
修复方案
将 getEndpointFetch 导出,并在测试连接和获取模型列表的代码中使用该函数替换原生 fetch,确保所有 HTTP 请求都走 Tauri HTTP 插件,绕过 WebView2 的 CORS 限制。
复现步骤
- 在Windows桌面端打开ReadAny应用
- 进入设置 → AI设置
- 添加自定义端点:
- Base URL: https://ark.cn-beijing.volces.com/api/coding/v3
- Provider: Custom (OpenAI Compatible)
- 填写API密钥
- 点击"测试连接"或"获取模型列表" → 出现 Failed to fetch 错误
环境信息
- 平台: Windows 11
- 应用版本: v1.1.7.x
- Tauri版本: 2.x
期望行为
在Windows桌面端,自定义AI端点应该能够:
- ✅ 成功测试连接
- ✅ 成功获取模型列表
- ✅ 正常使用AI对话功能
问题描述
在Windows桌面端(Tauri WebView2)中,添加自定义AI端点(如火山引擎 https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions)时:
但在以下环境中相同端点可以正常工作:
根本原因
packages/core/src/ 目录下多处代码使用原生浏览器 fetch 发起请求,而大多数自定义服务商(火山引擎、阿里云百炼、本地部署等)没有配置 CORS 响应头,导致 WebView2 的同源策略拦截请求报错。
受影响代码位置:
对比正常工作的代码:
修复方案
将 getEndpointFetch 导出,并在测试连接和获取模型列表的代码中使用该函数替换原生 fetch,确保所有 HTTP 请求都走 Tauri HTTP 插件,绕过 WebView2 的 CORS 限制。
复现步骤
- Base URL: https://ark.cn-beijing.volces.com/api/coding/v3
- Provider: Custom (OpenAI Compatible)
- 填写API密钥
环境信息
期望行为
在Windows桌面端,自定义AI端点应该能够: