Skip to content

[Feature] Add OpenCode Go as an AI provider (OpenAI-compatible subscription API) #27

Description

@baoyu0

概述

OpenCode Go 是一个低订阅费(首月 $5,之后 $10/月)的 API 服务,提供经过筛选的开源编程模型,包括 DeepSeek V4 Flash/Pro、Kimi K2.7 Code、Qwen3.7 Max/Plus、GLM-5.1、MiniMax M3 等。

其 API 完全兼容 OpenAI 格式,终点为 https://opencode.ai/zen/go/v1/chat/completions。建议 OpenWiki 将其加入 AI Provider 列表,让订阅了 opencode-go 的用户可以直接在设置中选择使用。

需要改什么

1. 前端 — src/stores/settingsStore.ts

a) AIProvider 类型增加 "opencode-go"

export type AIProvider = "anthropic" | "openai" | "openrouter" | "dashscope" | "google" | "minimax" | "deepseek" | "ollama" | "lmstudio" | "custom" | "opencode-go";

b) 添加 Provider 标签

export const PROVIDER_LABELS: Record<AIProvider, string> = {
  // ... 已有项
  "opencode-go": "OpenCode Go",
};

c) 添加模型列表

opencode-go 目前支持的模型(OpenAI 兼容接口):

"opencode-go": [
  "deepseek-v4-flash",    // 便宜快,$0.14/$0.28 per 1M tokens
  "deepseek-v4-pro",      // 深度思考,$1.74/$3.48
  "kimi-k2.7-code",       // Kimi 编程版
  "kimi-k2.6",            // Kimi 通用版
  "glm-5.1",              // 智谱最新
  "glm-5",                // 智谱
  "qwen3.7-max",          // 通义千问旗舰
  "qwen3.7-plus",         // 通义千问增强
  "qwen3.6-plus",         // 通义千问
  "mimo-v2.5",            // MiniMax 超便宜
  "mimo-v2.5-pro",        // MiniMax 专业版
  "minimax-m3",           // MiniMax 最新(Anthropic 接口)
  "minimax-m2.7",         // MiniMax
],

d) 注意 MiniMax 系列

MiniMax M3 / M2.7 使用 Anthropic 兼容接口(https://opencode.ai/zen/go/v1/messages),其他模型使用 OpenAI 兼容接口。可以在前端按模型名区分 endpoint 路线,或者先只加 OpenAI 路线的模型,把 MiniMax 留到后续。

2. 后端 — src-tauri/src/ai/client.rs

a) AiProvider 增加 OpenCodeGo 变体

#[derive(Debug, Clone)]
pub enum AiProvider {
    Anthropic,
    OpenAi,
    OpenRouter,
    OpenCodeGo,
}

impl AiProvider {
    pub fn from_str(s: &str) -> Self {
        match s.to_lowercase().as_str() {
            "openai" => AiProvider::OpenAi,
            "openrouter" => AiProvider::OpenRouter,
            "opencode-go" => AiProvider::OpenCodeGo,
            _ => AiProvider::Anthropic,
        }
    }
}

b) 实现 call_opencode_go 方法

由于 opencode-go 使用 OpenAI 兼容格式,可以直接复用 call_openai 的请求/响应结构,只需改 URL:

async fn call_opencode_go(&self, system_prompt: &str, user_message: &str) -> Result<AiResponse, String> {
    let url = "https://opencode.ai/zen/go/v1/chat/completions";
    // 请求体与 call_openai 完全相同(OpenAiRequest)
    // 只需修改 base_url 和 headers
}

建议进一步抽象:将 OpenAI 兼容的调用统一为一个方法,传入 base_url 参数,避免代码重复。

3. 后端 — src-tauri/src/ai/attention_analyzer.rs

a) AnalysisProvider 增加 OpenCodeGo 变体

pub enum AnalysisProvider {
    Anthropic,
    OpenAi,
    OpenRouter,
    DashScope,
    MiniMax,
    DeepSeek,
    OpenCodeGo,
    Custom { base_url: String },
    // ...
}

b) API 调用

OpenCodeGo 走 OpenAI 兼容路线,直接使用现有的 call_analysis_api 中 OpenAI 的逻辑,将 endpoint 改为 https://opencode.ai/zen/go/v1/chat/completions。

4. API 密钥格式

opencode-go 的密钥从 OpenCode Zen 获取,格式以 sk- 开头,与现有 OpenAI 密钥的正则匹配范围兼容。

实现参考

  • OpenCode Go 文档
  • 现有 OpenRouter 实现(client.rs)可作为模板,两者都是 OpenAI 兼容 API + 自定义 base_url
  • 现有 DashScope 前端配置(settingsStore.ts)可作为新增 provider 的参考模板

备注

这个改动影响范围小(约 3 个文件),核心逻辑已有现成实现可复用。建议的优先级:① client.rs 加调用 → ② settingsStore.ts 加 UI → ③ attention_analyzer.rs 补全支持。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions