大模型 API 基础:用 Go 发起你的第一次 LLM 调用(Token、上下文窗口、Temperature、System Prompt)
引言:系列开篇
这是「Go AI 应用开发」系列的第一篇。这个系列只做一件事:用 Go 把 AI 应用真正跑起来——不写 Python,不搬教程里的伪代码,每一篇的示例都能直接 go run。
本文从最小闭环开始:安装 SDK、拿到 API Key、发出第一次调用、拿到第一次回复。在此之前,先花五分钟把四个贯穿全系列的核心概念讲清楚,后面每一篇都会反复用到它们。
一、四个必须理解的核心概念
| 概念 | 一句话解释 | 对开发的影响 |
|---|---|---|
| Token | 模型处理文本的最小单位,约等于 1 个英文单词的 3/4,1 个汉字约 1~2 个 token | 计费的单位,也是下文所有「数量限制」的单位 |
| 上下文窗口 | 一次请求能「看到」的最大 token 数(输入 + 输出合计) | 超限会被拒或截断;长文档处理要以此为设计边界 |
| Temperature | 采样温度,0~2,控制输出随机性 | 0 趋于确定(代码/抽取任务),1 以上越发散(创作类任务) |
| System Prompt | 对话开始前给模型的「角色说明书」,优先级高于用户消息 | 定语气、定格式、定边界,几乎所有应用的第一行配置 |
记住一个经验值:一次 API 调用的成本 ≈(输入 token 数 × 输入单价 + 输出 token 数 × 输出单价),输出通常比输入贵好几倍——所以让模型「少啰嗦」不只是体验问题,也是成本问题。
二、环境准备
- Go 版本:本文使用的 openai-go v3 要求 Go 1.26 或更高版本(官方 README 明确说明:Go 1.25 请固定 SDK v3.74.0,更早版本固定 v3.44.0);
- API Key:到 OpenAI 控制台创建;国内读者可以用 DeepSeek 等兼容 OpenAI 协议的模型,同样适用本文代码;
- 建议把 Key 放进环境变量
OPENAI_API_KEY,SDK 默认会读取它。
三、安装 SDK(带版本号)
go mod init myai
go get 'github.com/openai/openai-go/v3@v3.86.0'
go get 必须带版本号:这个 SDK 更新非常频繁,不带版本号的安装命令无法保证可复现。
四、第一次调用:完整可运行代码
package main
import (
"context"
"fmt"
"os"
"time"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
// 1. 创建客户端;不传 option.WithAPIKey 时默认读 OPENAI_API_KEY 环境变量
client := openai.NewClient(
option.WithAPIKey(os.Getenv("OPENAI_API_KEY")),
)
// 2. 带超时的 context:网络请求必须有时限
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
// 3. 发起对话
chat, err := client.Chat.Completions.New(ctx, openai.ChatCompletionNewParams{
Model: openai.ChatModelGPT5_2, // 模型名以控制台可用列表为准
Messages: []openai.ChatCompletionMessageParamUnion{
openai.DeveloperMessage("你是一位资深的 Go 语言工程师,回答简洁准确。"),
openai.UserMessage("用一句话解释什么是 goroutine"),
},
Temperature: openai.Float(0.3), // 低温度:答案更稳定
})
if err != nil {
fmt.Println("调用失败:", err)
return
}
// 4. 取回复文本
fmt.Println(chat.Choices[0].Message.Content)
// 5. 看用量:这也是计费的依据
fmt.Printf("提示 tokens: %d,补全 tokens: %d\n",
chat.Usage.PromptTokens, chat.Usage.CompletionTokens)
}
跑通这段代码,你就完成了 AI 应用的最小闭环:构造请求 → 模型推理 → 解析响应 → 统计用量。几个细节值得注意:
- 角色:
DeveloperMessage就是新版 System Prompt(开发者指令),UserMessage是用户输入。部分旧模型/第三方兼容接口仍写"system"角色,概念相同; - Temperature:本文给了 0.3——写代码、做抽取类任务建议 0~0.3,头脑风暴才用 1 以上。注意部分推理模型(o 系列、GPT-5 系列)不支持 temperature 参数,传了会报错;
- 超时:SDK 默认没有请求超时,务必像上面一样用
context.WithTimeout兜住; - Usage:每次响应都带回 token 用量,做成本统计就靠它。
五、Responses API:OpenAI 的新主力接口
OpenAI 当前主推的是 Responses API,多轮对话、工具调用、结构化输出都围绕它设计,用法同样简单:
import "github.com/openai/openai-go/v3/responses"
resp, err := client.Responses.New(ctx, responses.ResponseNewParams{
Model: openai.ChatModelGPT5_2,
Input: responses.ResponseNewParamsInputUnion{
OfString: openai.String("用 Go 写一个判断闰年的函数"),
},
})
if err != nil {
panic(err)
}
fmt.Println(resp.OutputText())
多轮对话不需要自己拼接历史,把上一轮的 resp.ID 传给 PreviousResponseID 即可延续上下文——这个字段在第 ② 篇 Function Calling 里还会用到。
六、接入国内模型(DeepSeek 等)
所有兼容 OpenAI 协议的国产模型,只需换一个 BaseURL:
client := openai.NewClient(
option.WithAPIKey(os.Getenv("DEEPSEEK_API_KEY")),
option.WithBaseURL("https://api.deepseek.com/v1"), // 兼容端点
)
模型名换成服务商文档里的名称(如 deepseek-chat),其余代码完全不变。也可以看本站早前用原生 net/http 手写请求 DeepSeek 的 《使用 Golang 请求 DeepSeek API 接口的完整指南》,对照理解 SDK 帮你封装了什么。
七、新手最容易踩的四个坑
- 401 Unauthorized:环境变量没生效(
os.Getenv读到空字符串)或 Key 复制带了空格; - 超时挂死:没设 context 超时,网络抖动时请求会无限等待;
- 模型不存在:模型名写错或账号无权限,错误信息里会带可用模型提示;
- Go 版本不够:v3.86.0 要求 Go 1.26+,老项目请先升级工具链,或按第二节的说明固定旧版 SDK。
八、小结与下一篇
到这里,你已经掌握了:Token 与计费、上下文窗口的边界、Temperature 的取值直觉、System Prompt 的用法,以及用 openai-go v3 发出第一次调用的完整流程。这是后面所有内容的地基。
下一篇(系列第 2 篇):Function Calling / Tool Use 原理与 Go 实现——让模型学会「调用你的函数」。
版本说明
- openai-go/v3 v3.86.0:2026-10-27 核对,安装命令与示例代码均取自官方仓库 README 与 releases 页(github.com/openai/openai-go)。SDK 迭代极快,安装请务必带版本号。
- Go 工具链要求:v3.86.0 要求 Go 1.26+;若项目停留在 Go 1.25,请固定 SDK v3.74.0;Go 1.22~1.24 固定 v3.44.0。
- 官方文档:platform.openai.com/docs(API 参考与概念)、pkg.go.dev/github.com/openai/openai-go/v3(SDK API 索引)。
- 文中模型名(如
openai.ChatModelGPT5_2)与可用性以你的服务商控制台为准。
相关阅读:使用 Golang 请求 DeepSeek API 接口的完整指南 · Go语言面试题总目录 · AI 观察栏目
- 《Go 程序设计语言》(Go 语言圣经,机械工业出版社) —— Go 官方团队出品,公认入门第一书
- 《Go 语言实战》(异步图书,人民邮电出版社) —— 实战导向,面试前巩固工程手感
- 《Go 语言编程之旅:一起用 Go 做项目》(博文视点,电子工业出版社) —— 项目驱动入门,从零写出完整应用
- Keychron K1Max 矮轴机械键盘(Mac/Win 双系统,QMK/VIA 开源改键) —— 轻薄矮轴 + 开源固件,程序员桌面常客
- 罗技 MX Master 3S 无线鼠标(Flow 跨屏,静音电磁滚轮) —— 人体工学设计,写代码一整天手不酸
以上链接含京东联盟推广代码;通过链接购买本站可能获得少量佣金,不影响你的购买价格。