大模型 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 数 × 输出单价),输出通常比输入贵好几倍——所以让模型「少啰嗦」不只是体验问题,也是成本问题。

二、环境准备

  1. Go 版本:本文使用的 openai-go v3 要求 Go 1.26 或更高版本(官方 README 明确说明:Go 1.25 请固定 SDK v3.74.0,更早版本固定 v3.44.0);
  2. API Key:到 OpenAI 控制台创建;国内读者可以用 DeepSeek 等兼容 OpenAI 协议的模型,同样适用本文代码;
  3. 建议把 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 帮你封装了什么。

七、新手最容易踩的四个坑

  1. 401 Unauthorized:环境变量没生效(os.Getenv 读到空字符串)或 Key 复制带了空格;
  2. 超时挂死:没设 context 超时,网络抖动时请求会无限等待;
  3. 模型不存在:模型名写错或账号无权限,错误信息里会带可用模型提示;
  4. 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 观察栏目

🛒 站长推荐(京东联盟)

以上链接含京东联盟推广代码;通过链接购买本站可能获得少量佣金,不影响你的购买价格。

如有疑问关注公众号给我留言
wx

关注公众号

©2017-2026 鲁ICP备17023316号-1 Powered by Hugo · 隐私政策