Go AI sdk:为下一代AI应用和代理提供动力

解锁AI潜力:MCP官方Go SDK改变了工具和代理-应用程序通信

image.png|300

注:本文核心内容由大语言模型生成,辅以人工事实核查与结构调整。

Go 编程语言因其高性能、并发能力以及强大的标准库而闻名,如今正逐渐成为构建人工智能(AI)应用和智能体的有力选择。随着对 AI 集成需求的增长,Go 开发者越来越需要高效且符合 Go 语言习惯的工具,以便利用大型语言模型(LLM)和其他 AI 服务的能力。本文将探讨当前在这一领域颇具影响力的两个 Go SDK:Jetify 的 Go AI SDKMCP 官方 Go SDK


Jetify 的 Go AI SDK:简化 LLM 集成

Jetify 的 Go AI SDK 是一个开源(Apache 2.0 协议)的 alpha 版本,旨在为开发 AI 应用和智能体提供符合 Go 语言习惯的体验,并支持任意模型或 LLM 提供商。其主要动机是解决开发者在使用现有官方 Go SDK(如 OpenAI 和 Anthropic 提供的 SDK)时面临的常见问题:

  • API 笨重: 官方 SDK 通常由自动生成的代码构成,缺乏直观、符合 Go 风格的开发体验。

  • 厂商锁定: 在不同模型或 LLM 提供商之间切换时,往往需要重写应用的大量代码。

  • 多模态处理复杂: 不同提供商在处理图像、文件和工具调用时方式各异,增加了开发难度。

受 Vercel 的 TypeScript 版 AI SDK 启发,Jetify 提供了一个 统一接口,适配多家 AI 提供商,同时强调 Go-first 设计理念

主要特性与优势:

  • 多提供商支持: 目前支持 OpenAI 和 Anthropic,并计划扩展到更多提供商。

  • 提供商抽象层: 为核心 AI 能力(语言模型、向量嵌入、图像生成等)提供统一接口,屏蔽不同厂商的差异。

  • 多模态输入: 在会话中对文本、图片和文件提供一流支持,确保不同提供商间处理方式一致。

  • 工具调用与结构化输出: 支持函数调用并行执行,以及带有 schema 验证的 JSON 生成。

  • 生产可用特性: 内置完善的错误处理、自动重试、速率限制以及提供商故障转移机制。

  • 可扩展架构: 基于清晰的接口设计,便于集成新的提供商,同时保持向后兼容。

Jetify 的 SDK 自我定位为比 “大而全” 的框架(如 langchain-go)更精简的替代方案。langchain-go 提供了更广泛的功能,例如向量存储、智能体记忆和文档检索,而 Jetify 的 SDK 则专注于 LLM 集成、流式处理和工具使用。这种专注性很好地满足了特定需求,例如对流式输出的强大支持,以及内置的 “computer-use” 工具,这些在其他框架中要么支持不足,要么过于固执于设计理念,不适合 Jetify 的内部智能体开发需求。团队还表示其长期目标是,在 SDK 足够流行后,将其捐赠给开源基金会


示例代码:使用 Jetify Go AI SDK 进行简单文本生成

要开始使用,可以通过以下命令安装 SDK:

1
go get go.jetify.com/ai

下面是一个利用 OpenAI 模型进行文本生成的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import (
"context"
"fmt"
"log"
"go.jetify.com/ai"
"go.jetify.com/ai/provider/openai"
)

func main() {
// 设置模型
model := openai.NewLanguageModel("gpt-4o")

// 生成文本
response, err := ai.GenerateTextStr(
context.Background(),
"用简单的语言解释一下量子计算",
ai.WithModel(model),
ai.WithMaxOutputTokens(200),
)
if err != nil {
log.Fatal(err)
}

// 输出结果
fmt.Println(response)
}

MCP 官方 Go SDK:AI 工具与智能体应用通信的标准

MCP 官方 Go SDKmodelcontextprotocol/go-sdk)是近期发布的重要开源项目,它实现了 **Model Context Protocol (MCP)**。MCP 定义了一套 标准化、与模型无关的通信规范,使得任何应用都能被 LLM 作为“工具”调用。对于 Go AI 生态而言,这一进展意义重大,因为它为社区提供了一个权威且长期维护的实现方案,此前开发者主要依赖第三方库。

该 SDK 的设计高度契合 Go 语言哲学,强调 简洁、高效、强类型以及高并发。它是 Go AI 生态的基础模块,能够支持更复杂、更健壮的 AI 应用、框架和平台的构建。从本质上讲,它是 Go 应用与 AI 模型世界之间的标准化桥梁

核心概念:

  • Server(服务器): 表示一个无状态的 MCP 服务实例,包含工具、提示词和资源的集合。

  • Client(客户端): 表示一个 MCP 客户端。

  • Session(会话): 具体的、有状态的连接(ServerSessionClientSession),所有交互都通过会话进行。

  • Transport(传输层): 抽象层,负责建立底层通信并定义 JSON-RPC 消息的交换方式。

MCP 协议支持灵活的通信模式,适应不同的部署场景,而 Go SDK 对这些模式均有出色支持:

  • 标准输入/输出 (Stdio): 最简单的模式,适用于本地工具、CLI 插件或 Sidecar 模型,客户端通过 stdin/stdout 使用 JSON-RPC 与子进程 MCP 服务通信。

  • HTTP Streamable(可流式 HTTP): 最新且推荐的 HTTP 模式,提供可恢复、无状态的会话管理机制,适合构建可扩展、高可用的网络服务。

  • 服务端推送事件 (SSE): 早期的 HTTP 模式,SDK 仍通过 SSEHandler 提供支持,但功能更强大的 StreamableHTTPHandler 代表未来方向。

MCP 官方 Go SDK 的一大优势在于,它允许 Go 智能体程序直接引入 SDK 并作为原生 MCP 客户端运行。相比执行外部 CLI 工具,这种方式具备显著优势:

  • 高性能: 避免了不必要的进程创建与数据序列化开销,使工具调用和响应链更短、更高效。

  • 强类型与健壮性: 整个通信过程在 Go 类型系统内运行,错误处理更清晰,维护和调试更容易。

  • 简洁工程实践: 有助于形成更优雅、更符合 Go 习惯的智能体工程模式。


示例代码:使用 MCP 官方 Go SDK 构建基础工具服务(Greeter)

下面是一个简化示例,展示如何用 MCP 官方 Go SDK 定义一个通过标准输入/输出运行的基本工具服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package main

import (
"context"
"fmt"
"log"
"github.com/modelcontextprotocol/go-sdk/mcp"
)

// HiParams 定义工具的输入参数
type HiParams struct {
Name string `json:"name"`
}

// SayHi 工具的实际实现
func SayHi(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[HiParams]) (*mcp.CallToolResultFor[any], error) {
resultText := fmt.Sprintf("Hi %s, welcome to the Go MCP world!", params.Arguments.Name)
return &mcp.CallToolResultFor[any]{
Content: []mcp.Content{
&mcp.TextContent{Text: resultText},
},
}, nil
}

func main() {
// 1. 创建一个 Server 实例
server := mcp.NewServer("greeter-server", "1.0.0", nil)

// 2. 将工具添加到服务中
server.AddTools(
mcp.NewServerTool("greet", "Say hi to someone", SayHi),
)

// 3. 使用 StdioTransport 启动服务,监听 stdin/stdout
log.Println("Greeter server running over stdio...")
if err := server.Run(context.Background(), mcp.NewStdioTransport()); err != nil {
log.Fatalf("Server run failed: %v", err)
}
}

如何选择适合的 Go AI SDK:对比概览

在 Jetify 的 Go AI SDK 和 MCP 官方 Go SDK 之间进行选择时,可以根据它们的主要关注点来判断:

  • Jetify 的 Go AI SDK:适合需要 无缝集成不同 LLM 提供商(如 OpenAI、Anthropic) 的场景,同时屏蔽厂商差异。它旨在为 消费 AI 模型 提供符合 Go 习惯的体验,适用于文本生成、向量嵌入、图像生成、工具调用等任务。对于需要在不同 LLM 间灵活切换,或利用多模态能力构建智能体的开发者,它是理想选择。

  • MCP 官方 Go SDK:适合需要 标准化方式将 Go 应用的功能暴露为 LLM 可调用工具 的场景。其核心价值在于定义健壮、与模型无关的通信协议,使 AI 智能体能够发现并与外部服务交互。如果你要构建模块化 AI 系统,让不同 Go 服务作为工具协同一个 LLM 智能体,或需要确保长期兼容性与交互标准化,MCP SDK 是关键桥梁。它尤其适合让 Go 应用融入更大、更互操作的 AI 生态系统。


总结

无论是 Jetify 的 Go AI SDK 还是 MCP 官方 Go SDK,都代表了 Go 在 AI 领域的重要进展。Jetify 的 SDK 简化了对多样化 LLM 服务的使用,为 Go 开发者提供统一、惯用的接口;与此同时,MCP 官方 Go SDK 则为 LLM 与外部应用之间的通信建立了关键标准,使 Go 程序能够作为高性能、强类型的工具融入更广泛的智能体架构。两者结合,将赋能 Go 开发者构建更复杂、高效、可扩展的 AI 应用与智能体,进一步巩固 Go 作为未来 AI 领域强大语言的地位。


引用文章:

更多内容

最近文章:

随机文章:


更多该系列文章,参考medium链接:

https://wesley-wei.medium.com/list/you-should-know-in-golang-e9491363cd9a

English post: https://programmerscareer.com/go-ai-sdks/
作者:微信公众号,Medium,LinkedIn,Twitter
发表日期:原文在 2025-08-17 15:45 时创作于 https://programmerscareer.com/zh-cn/go-ai-sdks/
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证

SIMD in Go:深度探索 Go 1.25发布:功能和创新

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×