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 独有的设计。
三、选型决策清单
对着下面的问题从上往下走,第一个「是」就是答案:
- 只是给现有 Go 服务加一个 LLM 调用点(翻译、摘要、补全)?→ GoAI SDK 或直接官方 SDK。引入框架的收益覆盖不了依赖成本。
- 团队已经熟 LangChain 概念,应用是简单链式调用?→ LangChainGo。学习资料最多,但别指望它有强 Agent 能力。
- 深度用 Gemini / Google Cloud,需要 Prompt 文件、评估、观测一条龙?→ Genkit Go。v1.x 已经稳定,插件体系对国产模型(Kimi、GLM、DeepSeek、Qwen)支持也好。
- 要建复杂的 LLM 流水线(RAG 管道、多分支审批流、人机协同中断恢复),或者要搭生产级多 Agent 系统?→ Eino。概念多、学习曲线陡,但图编排 + ADK 的上限是四个里最高的。
- 纠结选哪个 → 先用 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 官方团队出品,公认入门第一书
- 《Go 语言实战》(异步图书,人民邮电出版社) —— 实战导向,面试前巩固工程手感
- 《Go 语言编程之旅:一起用 Go 做项目》(博文视点,电子工业出版社) —— 项目驱动入门,从零写出完整应用
- Keychron K1Max 矮轴机械键盘(Mac/Win 双系统,QMK/VIA 开源改键) —— 轻薄矮轴 + 开源固件,程序员桌面常客
- 罗技 MX Master 3S 无线鼠标(Flow 跨屏,静音电磁滚轮) —— 人体工学设计,写代码一整天手不酸
以上链接含京东联盟推广代码;通过链接购买本站可能获得少量佣金,不影响你的购买价格。
每周更新 Go + AI 应用开发实战:AI 面试官完整项目、MCP、Agent 工程化,完整源码随文章首发。
微信扫码,或搜索「GO语言入门之路」关注,第一时间获取系列更新与源码,不再错过任何一篇。