Go AI 框架怎么选?Eino vs LangChainGo vs Genkit vs GoAI SDK 横评(附选型决策清单)


引言:为什么需要框架

系列前四篇我们全部用标准库 + 官方 SDK 手写:HTTP 调模型(第 1 篇)、工具调用循环(第 2 篇)、向量检索(第 3 篇)、SSE 流式转发(第 4 篇)。手写的好处是理解底层,但当应用复杂起来——多步工具调用、人机协同中断、多模型路由、RAG 管道——全部自己造轮子成本很高。

本文对当前 Go 生态最主流的四个 LLM 应用框架做一次横评:Eino(字节跳动 CloudWeGo)、LangChainGo(LangChain 的 Go 移植)、Genkit Go(Google)、GoAI SDK(社区新锐,对标 Vercel AI SDK)。所有版本号均为发文当天从 GitHub releases 页面逐一核对,代码示例全部摘自各项目官方 README,可以直接运行。

一、四框架速览

维度 Eino LangChainGo Genkit Go GoAI SDK
出品方 字节跳动 CloudWeGo LangChain 社区(tmc 主导) Google(Firebase 团队) 社区(zendev-sh)
最新版本 v0.9.23 v0.1.15 v1.14.0 v0.11.0
模块路径 github.com/cloudwego/eino github.com/tmc/langchaingo github.com/firebase/genkit/go github.com/zendev-sh/goai
核心抽象 组件 + 图编排 + ADK Agent LLM/Chain/Prompt 组件化 Action/Flow/Prompt/Tool 8 个核心函数 + Provider
编排能力 最强:Chain/Graph/Workflow,分支循环、流式透传 Chain 组合,较简单 Flow(序列入队执行) 无内建编排,靠函数组合
Agent 能力 ADK:ChatModelAgent、DeepAgent、中断恢复 需自行实现 ReAct 循环 Agents(preview):快照、后台运行、子代理委派 自动工具循环(MaxSteps)
模型接入 eino-ext 组件库(OpenAI/Claude/Gemini/Ark/Ollama 等) llms 包(OpenAI/Gemini/Ollama 等) 官方插件:Google/Anthropic/OpenAI/xAI/DeepSeek/Kimi/GLM/Ollama 等 25+ Provider,含国产与 OpenAI 兼容端点
上手曲线 陡(概念多) 平缓 平缓 最平缓
适合场景 复杂编排、生产级 Agent 平台 简单链式调用、跟随 LangChain 生态 Google 技术栈、要观测与评估 快速出活、函数式风格偏好

一句话概括:Eino 像 Spring(全家桶、重编排),LangChainGo 像早期的 LangChain Go 版移植,Genkit 像 Firebase 风格的工程化框架,GoAI 像 Vercel AI SDK 的 Go 原生复刻。

二、最小代码对比:同一个任务四种写法

任务相同:调用 OpenAI 模型回答一个问题。四个框架的「Hello World」差异一目了然。

2.1 GoAI SDK:函数即框架

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/zendev-sh/goai"
	"github.com/zendev-sh/goai/provider/openai"
)

func main() {
	// 自动从环境变量 OPENAI_API_KEY 读取密钥
	model := openai.Chat("gpt-4o")

	result, err := goai.GenerateText(context.Background(), model,
		goai.WithPrompt("What is the capital of France?"),
	)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(result.Text)
}

没有注册中心、没有初始化,一个函数搞定。它还提供 StreamText、GenerateObject[T](泛型结构化输出)、Embed 等 8 个核心函数,自动工具循环用 goai.WithMaxSteps(n) 开启。流式用法是 for text := range stream.TextStream()。

2.2 LangChainGo:经典 Chain 风格

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/tmc/langchaingo/llms"
	"github.com/tmc/langchaingo/llms/openai"
)

func main() {
	ctx := context.Background()
	llm, err := openai.New()
	if err != nil {
		log.Fatal(err)
	}
	completion, err := llms.GenerateFromSinglePrompt(ctx, llm,
		"What would be a good company name for a company that makes colorful socks?")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(completion)
}

llms.LLM 接口 + 各厂商实现,是四个框架里最贴近「Go interface 惯例」的写法。社区生态成熟,示例多,但高级能力(Agent、复杂编排)基本要自己在 llms 之上搭。

2.3 Genkit Go:注册中心 + 插件

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/firebase/genkit/go/ai"
	"github.com/firebase/genkit/go/genkit"
	"github.com/firebase/genkit/go/plugins/googlegenai"
)

func main() {
	ctx := context.Background()
	g := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{}))

	answer, err := genkit.GenerateText(ctx, g,
		ai.WithModelName("googleai/gemini-flash-latest"),
		ai.WithPrompt("Why is Go a great language for AI applications?"),
	)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(answer)
}

genkit.Init 初始化注册中心,模型、Prompt、工具、Flow 都注册在 g 上,Action 抽象统一了生成、嵌入、评估、检索。官方插件覆盖 Gemini、Claude、OpenAI、Kimi、GLM、Ollama 等,国内模型接入是四个框架里最顺的之一。值得一提的是它的错误分类:用 errors.Is(err, ai.ErrMaxTurnsExceeded) 这类哨兵错误判断失败类型,非常 Go 风格。

2.4 Eino:组件 + 图编排 + ADK

Eino 有两层用法。简单场景用 ADK 的 ChatModelAgent,内部自带 ReAct 工具循环:

chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
	Model:  "gpt-4o",
	APIKey: os.Getenv("OPENAI_API_KEY"),
})

agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
	Model: chatModel,
})

runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "Hello, who are you?")
for {
	event, ok := iter.Next()
	if !ok {
		break
	}
	fmt.Println(event.Message.Content)
}

复杂场景用 compose 建图,节点可以是 Lambda、ChatModel、ToolNode,支持分支、循环与全链路流式透传:

graph := compose.NewGraph[*Input, *Output]()
graph.AddLambdaNode("validate", validateFn)
graph.AddChatModelNode("generate", chatModel)
graph.AddLambdaNode("format", formatFn)

graph.AddEdge(compose.START, "validate")
graph.AddEdge("validate", "generate")
graph.AddEdge("generate", "format")
graph.AddEdge("format", compose.END)

runnable, _ := graph.Compile(ctx)
result, _ := runnable.Invoke(ctx, input)

编好的图还能包成 GraphTool 喂给 Agent,确定性管道和自主行为各归其位——这是 Eino 独有的设计。

三、选型决策清单

对着下面的问题从上往下走,第一个「是」就是答案:

  1. 只是给现有 Go 服务加一个 LLM 调用点(翻译、摘要、补全)?→ GoAI SDK 或直接官方 SDK。引入框架的收益覆盖不了依赖成本。
  2. 团队已经熟 LangChain 概念,应用是简单链式调用?→ LangChainGo。学习资料最多,但别指望它有强 Agent 能力。
  3. 深度用 Gemini / Google Cloud,需要 Prompt 文件、评估、观测一条龙?→ Genkit Go。v1.x 已经稳定,插件体系对国产模型(Kimi、GLM、DeepSeek、Qwen)支持也好。
  4. 要建复杂的 LLM 流水线(RAG 管道、多分支审批流、人机协同中断恢复),或者要搭生产级多 Agent 系统?→ Eino。概念多、学习曲线陡,但图编排 + ADK 的上限是四个里最高的。
  5. 纠结选哪个 → 先用 GoAI SDK 把原型跑通,业务验证后再按第 4 条迁移到 Genkit 或 Eino。四个框架的抽象(Model/Tool/Prompt)高度同构,迁移成本主要在编排层。

四、几个容易忽略的工程细节

  • 流式语义:LangChainGo 和 GoAI 把流式当作「回调/通道」处理;Eino 和 Genkit 把流式编排在类型系统里(iter.Seq2、StreamValue),全链路流式(模型→编排→HTTP→浏览器)Eino 做得最完整,这也是第 4 篇手写 SSE 时最痛的点。
  • 人机协同:Eino ADK 的 Interrupt/Resume 与 Genkit 的 Tool Interrupt 都支持工具执行到一半暂停等人审批,LangChainGo 和 GoAI 需要自己管理状态。
  • 可观测性:Genkit 有内置评估与 Tracing;Eino 有 Callback Aspects 挂接点;GoAI 内置 Langfuse/OTel 集成。LangChainGo 相对薄弱,需要自己接。
  • 依赖体积:GoAI 宣称核心只依赖 golang.org/x/oauth2 和 github.com/coder/websocket,冷启动比 Vercel AI SDK 快 24 倍(其官方 benchmark,场景为 Node 对照);Eino/Genkit 模块多一些,但都在可接受范围。

版本说明

本文涉及的全部版本号均于 2026-11-10 逐字抄录自各项目官方 releases / pkg.go.dev 页面,安装时请以下列版本为准:

依赖 版本 安装命令
eino v0.9.23(2026-11-09 发布) go get github.com/cloudwego/eino@v0.9.23
eino-ext OpenAI 组件 v0.1.13 go get github.com/cloudwego/eino-ext/components/model/openai@v0.1.13
LangChainGo v0.1.15(2026-10-05 发布) go get github.com/tmc/langchaingo@v0.1.15
Genkit Go v1.14.0(2026-10-19 发布,pkg.go.dev 核实) go get github.com/firebase/genkit/go@v1.14.0
GoAI SDK v0.11.0(2026-10-31 发布) go get github.com/zendev-sh/goai@v0.11.0

官方文档:Eino(cloudwego.io/docs/eino)、LangChainGo(tmc.github.io/langchaingo)、Genkit Go(genkit.dev/docs/overview/?lang=go)、GoAI(goai.sh)。各示例代码均摘自对应版本官方 README。


本文是「Go AI 应用开发」系列第 5 篇(共 18 篇规划),阶段二「Go AI 框架」开篇。上一篇:《SSE 流式输出教程:用 Go 实现大模型打字机效果》;系列前篇:《大模型 API 基础》、《Function Calling 教程》、《Embedding 与语义检索》。下一篇预告:《Eino 入门:构建你的第一个 Chain》。

🛒 站长推荐(京东联盟)

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

📮 关注公众号「GO语言入门之路」
GO语言入门之路 公众号二维码

每周更新 Go + AI 应用开发实战:AI 面试官完整项目、MCP、Agent 工程化,完整源码随文章首发。

微信扫码,或搜索「GO语言入门之路」关注,第一时间获取系列更新与源码,不再错过任何一篇。

wx

关注公众号

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