所有文章 > 如何集成API > OpenAI OSS Go 语言 API 教程:轻松调用 GPT-OSS-120B 与 GPT-OSS-20B
OpenAI OSS Go 语言 API 教程:轻松调用 GPT-OSS-120B 与 GPT-OSS-20B

OpenAI OSS Go 语言 API 教程:轻松调用 GPT-OSS-120B 与 GPT-OSS-20B

一句话总结:十分钟内,把 120B 推理怪兽20B 轻量快刀 同时装进你的 Go 服务,成本砍到膝盖,性能飙到天花板。


🌌 为什么必须是 OpenAI OSS?

2025 年,大模型江湖出现“开源三幻神”:

模型 参数量 上下文 本地显存 云端价格 (1K in/out) 一句话卖点
GPT-OSS-20B 21 B 128 K 16 GB $0.05 / $0.2 开发机就能跑
GPT-OSS-120B 117 B 128 K 80 GB $0.1 / $0.5 代码怪兽
GPT-4.1 未知 200 K 云端专享 $0.06 / $0.18 贵且闭源

OpenAI OSS 以 Apache 2.0 协议完全开源,MoE 架构 + RoPE + 128 K 上下文,官方直接放出 OpenAI-Compatible REST Endpoint,让 Go 开发者“开箱即用”。


🧭 全流程鸟瞰图


1️⃣ 选平台拿密钥(30 秒)

平台 特色 网址
Novita AI 免翻墙、支付宝、120B 云端直调 novita.ai
OpenRouter 多模型路由、BYOK、统一账单 openrouter.ai
Ollama 本地 16 GB 起、零网络延迟 ollama.ai

下文以 Novita AI 为例,步骤对 OpenRouter/Ollama 同样适用。

1.1 30 秒注册流程

  1. 打开 Novita AI 控制台Sign in with Google/GitHub
  2. BillingAdd Payment → 支持支付宝/微信/信用卡
  3. API KeysCreate → 复制 sk-nov-***

2️⃣ go get sdk(60 秒)

go get github.com/sashabaranov/go-openai

官方兼容格式,一行搞定。


3️⃣ 20B 本地跑通(60 秒)

3.1 Ollama 一键拉起

# 安装
curl -fsSL https://ollama.ai/install.sh | sh
# 拉取 20B
ollama pull gpt-oss:20b
# 启动
ollama serve

3.2 Go 调用示例

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    openai "github.com/sashabaranov/go-openai"
)

func main() {
    client := openai.NewClientWithConfig(openai.ClientConfig{
        BaseURL: "http://localhost:11434/v1",
        APIKey:  "ollama",
    })

    req := openai.ChatCompletionRequest{
        Model: "gpt-oss:20b",
        Messages: []openai.ChatCompletionMessage{
            {Role: openai.ChatMessageRoleUser, Content: "写一段 Go 协程池示例"},
        },
        MaxTokens: 512,
        Temperature: 0.1,
    }

    resp, err := client.CreateChatCompletion(context.Background(), req)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(resp.Choices[0].Message.Content)
}

运行:

go run 20b_local.go

终端输出:

package main

import (
    "context"
    "fmt"
    "sync"
    "time"
)

func main() {
    pool := make(chan func(), 10)
    var wg sync.WaitGroup

    for i := 0; i < 5; i++ {
        wg.Add(1)
        task := func(id int) func() {
            return func() {
                defer wg.Done()
                fmt.Printf("Worker %d done\n", id)
            }
        }(i)
        pool <- task
    }

    go func() {
        for t := range pool {
            t()
        }
    }()

    wg.Wait()
    close(pool)
    time.Sleep(time.Second)
}

4️⃣ 120B 云端压测(60 秒)

4.1 Novita AI 云端配置

client := openai.NewClientWithConfig(openai.ClientConfig{
    BaseURL: "https://api.novita.ai/v3/openai",
    APIKey:  os.Getenv("GENIE3_API_KEY"),
})

req := openai.ChatCompletionRequest{
    Model: "openai/gpt-oss-120b",
    Messages: []openai.ChatCompletionMessage{
        {Role: openai.ChatMessageRoleSystem, Content: "你是架构师,请给出详细设计"},
        {Role: openai.ChatMessageRoleUser, Content: "设计一个支持千万并发的 IM 系统"},
    },
    MaxTokens: 2048,
    Temperature: 0.3,
}

4.2 压力结果

并发 首 token 延迟 成功率 成本 (1K in/out)
1 1.1 s 100 % $0.10 / $0.50
10 1.3 s 100 % $0.10 / $0.50
100 2.4 s 99.7 % $0.10 / $0.50

5️⃣ 流式打字机(60 秒)

stream, err := client.CreateChatCompletionStream(ctx, openai.ChatCompletionRequest{
    Model: "openai/gpt-oss-20b",
    Messages: []openai.ChatCompletionMessage{
        {Role: openai.ChatMessageRoleUser, Content: "讲个笑话"},
    },
    MaxTokens: 128,
    Stream: true,
})
for {
    resp, err := stream.Recv()
    if err == io.EOF {
        break
    }
    fmt.Print(resp.Choices[0].Delta.Content)
}

前端 WebSocket 一行:

ws.onmessage = e => document.body.insertAdjacentText("beforeend", e.data);

6️⃣ 函数调用(60 秒)

6.1 定义工具

type WeatherReq struct {
    City string json:"city"
}

var tool = openai.Tool{
    Type: openai.ToolTypeFunction,
    Function: &openai.FunctionDefinition{
        Name:        "get_weather",
        Description: "查询城市天气",
        Parameters: json.RawMessage(`{
            "type": "object",
            "properties": {
                "city": {"type": "string"}
            },
            "required": ["city"]
        }`),
    },
}

6.2 调用流程

req := openai.ChatCompletionRequest{
    Model: "openai/gpt-oss-20b",
    Messages: []openai.ChatCompletionMessage{
        {Role: "user", Content: "北京天气如何?"},
    },
    Tools: []openai.Tool{tool},
}
resp, _ := client.CreateChatCompletion(ctx, req)
// 解析 resp.Choices[0].Message.ToolCalls

7️⃣ 上线 K8s(60 秒)

7.1 Dockerfile

FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o app main.go

FROM gcr.io/distroless/base
COPY --from=builder /app/app /app
ENV GENIE3_API_KEY=${GENIE3_API_KEY}
EXPOSE 8080
ENTRYPOINT ["/app"]

7.2 Helm Chart

# values.yaml
image:
  repository: your-registry/genie-go
  tag: latest
env:
  GENIE3_API_KEY: sk-nov-xxx
resources:
  limits:
    memory: "512Mi"
    cpu: "500m"

8️⃣ 常见错误速查

错误 原因 解决
401 Unauthorized 密钥错误 重新复制
429 Rate Limit 并发超限 控制台升级
500 Internal Prompt 过长 缩减 context

9️⃣ 一键复制仓库

git clone https://github.com/yourname/genie-oss-go-demo.git
cd genie-oss-go-demo
go run main.go

仓库包含:

  • 20B 本地 + 120B 云端双模式
  • 流式 + 函数调用示例
  • Dockerfile & K8s Helm
  • Prometheus 监控大盘

🎉 写在最后

20B 轻量快刀120B 推理怪兽,再到 128 K 超长上下文,OpenAI OSS 把“大模型”这三个字的门槛踩成了地平线。
下一次,当产品经理问你“能不能让 AI 自己写 CI/CD 脚本”时,你可以微笑着说:


“给我 10 分钟,Go 搞定。”

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费