全程依旧Go原生开发,无复杂框架,代码简洁可直接运行,完美贴合Go后端开发习惯。
一、本篇核心升级:纯云端LLM,零本地依赖
本地模型方案:
- • 需要本地装 Ollama、拉模型,门槛高、耗资源;
- • 推理速度受本地硬件限制。
本篇云端Agent方案:
- • 无任何本地模型部署,仅需一个第三方大模型API Key;
- • 推理全在云端完成,速度快、稳定性高;
- • 兼容所有OpenAI接口规范的第三方大模型(通用无门槛);
- • 保留完整ReAct范式:自然语言理解→云端推理→工具调用→记忆闭环。
这才是企业级生产环境最常用的Agent方案!
二、3步准备:零门槛,拿Key就能用
1. 安装Go OpenAI兼容SDK
所有第三方云端模型都兼容这个SDK,一行命令安装:
go get github.com/sashabaranov/go-openai2. 获取第三方大模型API Key
任选一个支持OpenAI接口的平台,申请API Key:
- • OpenAI(官方)
- • DeepSeek(深度求索)
- • 通义千问(阿里云)
- • Kimi(月之暗面)
- • 智谱AI
所有平台获取的API Key,都能直接用在我们的代码里,无需修改逻辑。
3. 安全配置:环境变量传入API Key
绝对不要把API Key硬编码在代码里!用环境变量安全传入:
- • Mac/Linux终端执行:
export OPENAI_API_KEY="你的第三方API Key" - • Windows终端执行:
set OPENAI_API_KEY=你的第三方API Key比如:我使用 Mac 开发环境,使用 DeepSeek API KEY
export DEEPSEEK_API_KEY="sk-我的第三方API Key"
三、核心代码:纯云端API版ReAct Agent
仅靠API Key调用云端LLM,逻辑更简洁、更贴近生产环境,注释拉满,一看就懂:
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"strings"
"github.com/sashabaranov/go-openai"
)
// ==================== 1. Agent 核心结构体:状态 + 记忆 ====================
// Agent 保存 Agent 运行时的状态与记忆(工业级标准)。
type Agent struct {
UserPrompt string // 用户自然语言指令(如:帮我算150加250)
Memory string // 工具执行结果记忆
FinalAnswer string // 最终输出答案
}
// ==================== 2. 核心工具:四则运算 ====================
// parseCalculation 从文本解析「数字1 运算符 数字2」。
func parseCalculation(text string) (num1 float64, op rune, num2 float64, err error) {
_, err = fmt.Sscanf(strings.TrimSpace(text), "%f %c %f", &num1, &op, &num2)
return num1, op, num2, err
}
// calculator 执行加减乘除四则运算,返回可读的计算结果字符串。
func calculator(expression string) string {
num1, op, num2, err := parseCalculation(expression)
if err != nil {
return fmt.Sprintf("解析失败:%v", err)
}
var res float64
switch op {
case '+':
res = num1 + num2
case '-':
res = num1 - num2
case '*':
res = num1 * num2
case '/':
if num2 == 0 {
return "错误:除数不能为0"
}
res = num1 / num2
default:
return fmt.Sprintf("不支持运算符:%c", op)
}
return fmt.Sprintf("%.2f %c %.2f = %.2f", num1, op, num2, res)
}
// ==================== 3. 工具定义:给云端 LLM 看的工具清单 ====================
// agentTools 声明 Agent 可用的工具,云端 LLM 据此自主决策调用。
var agentTools = []openai.Tool{
{
Type: openai.ToolTypeFunction,
Function: &openai.FunctionDefinition{
Name: "calculator", // 工具名(LLM 通过这个名调用)
Description: "四则运算计算器,支持加减乘除计算",
Parameters: map[string]interface{}{
"type": "object",
"properties": map[string]interface{}{
"expression": map[string]interface{}{
"type": "string",
"description": "数学计算表达式,例如:100 + 200、500 - 100、10 * 20、100 / 2",
},
},
"required": []string{"expression"}, // 必传参数
},
},
},
}
// ==================== 4. 云端 LLM 调用(Agent 的真正大脑) ====================
// callCloudLLM 调用云端大模型,返回推理结果。
func (a *Agent) callCloudLLM() (openai.ChatCompletionResponse, error) {
// 初始化云端 LLM 客户端(仅用 API Key,无本地配置)
apikey := os.Getenv("DEEPSEEK_API_KEY")
if apikey == "" {
return openai.ChatCompletionResponse{}, fmt.Errorf("DEEPSEEK_API_KEY 环境变量未设置")
}
cfg := openai.DefaultConfig(apikey)
cfg.BaseURL = "https://api.deepseek.com"
client := openai.NewClientWithConfig(cfg)
messages := []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleSystem,
Content: "你是一个专业的四则运算计算器,只能处理加减乘除计算,不能处理其他类型的任务",
},
{
Role: openai.ChatMessageRoleUser,
Content: a.UserPrompt,
},
}
return client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "deepseek-v4-flash", // DeepSeek 官方模型名,第三方模型替换对应名称
Messages: messages,
Tools: agentTools, // 把工具清单传给云端 LLM
Temperature: 0.1, // 低温度,保证推理精准
},
)
}
// ==================== 5. ReAct 核心循环:云端推理 → 工具调用 → 记忆闭环 ====================
// Run 运行 ReAct 循环:云端推理 → 工具调用 → 记忆闭环。
func (a *Agent) Run() {
fmt.Println("===== 纯云端 API 版 ReAct Agent 启动 =====")
fmt.Printf("用户指令:%s\n", a.UserPrompt)
// 1. 推理:云端 LLM 分析任务
fmt.Println("\n【1. 推理】云端大模型分析任务...")
llmResp, err := a.callCloudLLM()
if err != nil {
a.FinalAnswer = fmt.Sprintf("云端 LLM 调用失败:%v", err)
return
}
if len(llmResp.Choices) == 0 {
a.FinalAnswer = "云端 LLM 未返回任何结果"
return
}
msg := llmResp.Choices[0].Message
// 2. 行动:执行 LLM 决策的工具调用
if len(msg.ToolCalls) == 0 {
// 未触发工具调用,直接使用 LLM 返回的内容
if msg.Content != "" {
a.Memory = msg.Content
} else {
a.Memory = "未触发工具调用,且无返回内容"
}
} else {
for _, toolCall := range msg.ToolCalls {
fmt.Printf("【2. 行动】云端 LLM 决策:调用【%s】工具\n", toolCall.Function.Name)
if toolCall.Function.Name != "calculator" {
fmt.Printf("未知工具:%s\n", toolCall.Function.Name)
continue
}
// 解析 LLM 返回的计算表达式:{"expression": "150 + 250"}
var cal struct {
Expression string `json:"expression"`
}
if err = json.Unmarshal([]byte(toolCall.Function.Arguments), &cal); err != nil {
a.Memory = fmt.Sprintf("解析失败:%v", err)
continue
}
fmt.Printf("计算表达式:%s\n", cal.Expression)
a.Memory = calculator(cal.Expression)
fmt.Printf("工具执行结果:%s\n", a.Memory)
}
}
// 3. 完成:生成最终答案
fmt.Println("\n【3. 完成】Agent 生成最终答案")
a.FinalAnswer = "✅ " + a.Memory
}
// ==================== 主函数:测试云端 Agent ====================
func main() {
// 传入自然语言指令,云端 LLM 自主理解
agent := &Agent{UserPrompt: "帮我算150加250等于多少"}
agent.Run()
fmt.Println("\n===== Agent 最终输出 =====")
fmt.Println(agent.FinalAnswer)
}四、代码核心关键点
1. 纯云端LLM客户端
// 仅用环境变量的API Key初始化客户端,零本地配置
client := openai.NewClient(os.Getenv("OPENAI_API_KEY"))- • 没有任何本地模型地址、端口配置;
- • 完全依赖第三方云端API,开箱即用。
2. 工具定义:LLM的「操作手册」
agentTools是Agent的核心:
- • 告诉云端大模型有什么工具、怎么用、传什么参数;
- • 大模型根据这个描述,自主生成工具调用指令,不用我们写死逻辑。
3. ReAct闭环(真正的智能体逻辑)
- 1. 推理:用户发自然语言指令 → 云端LLM理解并决策;
- 2. 行动:LLM返回工具调用参数 → Go执行工具函数;
- 3. 记忆:存储工具结果 → 生成最终答案。
五、运行说明(100%可跑通)
- 1. 先在终端配置你的第三方API Key;
- 2. 直接运行代码;
- 3. 支持任意自然语言计算指令:
- • 「帮我算300乘以15」
- • 「500减120等于几」
- • 「1000除以8是多少」
运行效果演示
===== 纯云端 API 版 ReAct Agent 启动 =====
用户指令:帮我算150加250等于多少
【1. 推理】云端大模型分析任务...
【2. 行动】云端 LLM 决策:调用【calculator】工具
计算表达式:150 + 250
工具执行结果:150.00 + 250.00 = 400.00
【3. 完成】Agent 生成最终答案
===== Agent 最终输出 =====
✅ 150.00 + 250.00 = 400.00
六、第三方模型切换
如果不用OpenAI,想用其他第三方模型,只改模型名即可:
// DeepSeek模型
Model: "deepseek-v4"
// 通义千问模型
Model: "qwen3.8-max"
// Kimi模型
Model: "Kimi-K3"SDK和逻辑完全不用动,兼容所有OpenAI规范接口。
七、本篇核心总结
- 1. 生产级标准:纯云端API Key方案,无本地依赖,是企业Agent开发的首选;
- 2. 核心逻辑:Go负责工具执行、状态管理、工程逻辑,云端LLM负责自然语言理解、推理决策;
- 3. ReAct落地:真正实现「自主思考→自主调用工具→自主完成任务」的智能体;
- 4. 通用性强:一行代码切换任意第三方大模型,无适配成本。
到这里,你已经掌握了企业级真实LLM Agent的核心开发能力!
MiaoAll