Skip to content

自定义AI端点(Custom OpenAI Compatible)在Windows桌面端无法测试连接和获取模型列表 #96

@zsxink

Description

@zsxink

问题描述

在Windows桌面端(Tauri WebView2)中,添加自定义AI端点(如火山引擎 https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions)时:

  1. ❌ 点击"测试连接"按钮 → Failed to fetch 错误
  2. ❌ 点击"获取模型"按钮 → Failed to fetch 错误

但在以下环境中相同端点可以正常工作:

  • ✅ Android应用(Expo/React Native)
  • ✅ 主界面的AI对话功能

根本原因

packages/core/src/ 目录下多处代码使用原生浏览器 fetch 发起请求,而大多数自定义服务商(火山引擎、阿里云百炼、本地部署等)没有配置 CORS 响应头,导致 WebView2 的同源策略拦截请求报错。

受影响代码位置:

  1. packages/core/src/ai/test-endpoint.ts - 测试连接功能
  2. 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 限制。

复现步骤

  1. 在Windows桌面端打开ReadAny应用
  2. 进入设置 → AI设置
  3. 添加自定义端点:
    - Base URL: https://ark.cn-beijing.volces.com/api/coding/v3
    - Provider: Custom (OpenAI Compatible)
    - 填写API密钥
  4. 点击"测试连接"或"获取模型列表" → 出现 Failed to fetch 错误

环境信息

  • 平台: Windows 11
  • 应用版本: v1.1.7.x
  • Tauri版本: 2.x

期望行为

在Windows桌面端,自定义AI端点应该能够:

  1. ✅ 成功测试连接
  2. ✅ 成功获取模型列表
  3. ✅ 正常使用AI对话功能

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions