
字节笔记本
2026年10月24日 · 约 10 分钟读完
agents-go 对比 LangChain:两种框架哲学

本文是《从 0 写 Agent》系列第 50 章。这个系列基于开源项目 agents-go(OpenAI Agents SDK 的 Go 移植版),用 Go 从零实现一个生产级 Agent 运行时;本章讲「agents-go vs LangChain:两种 Agent 框架哲学」。
读完这 49 章,你精通了 agents-go。但市场上还有其他 Agent 框架,最出名的是 LangChain(Python)。
这一章对比 agents-go 和 LangChain 的设计哲学差异。理解差异,你才能在不同场景选对工具。
设计哲学的根本差异
| 维度 | agents-go | LangChain |
|---|---|---|
| 语言 | Go | Python |
| 核心理念 | 最小显式(小接口、显式组合) | 最大集成(大量集成、链式组合) |
| Agent 循环 | 一个 runner.loop,看得到 | LCEL/AgentExecutor,较抽象 |
| 抽象层 | 薄(接口少,实现可见) | 厚(Chain/Agent/Tool/Memory 多层) |
| 集成数 | 少(OpenAI/Anthropic/MCP/Sandbox) | 极多(几百个集成) |
| 学习曲线 | 平缓(接口小) | 陡(概念多) |
一句话,agents-go 是"少即是多"(小接口、显式、可读),LangChain 是"大而全"(多集成、多抽象、快速接入)。

核心抽象对比
Agent 定义
agents-go,一个结构体,字段即配置:
agent := &agents.Agent{
Name: "助手",
Instructions: agents.StaticInstructions("..."),
Model: "openai/gpt-4o",
Tools: []agents.Tool{tool1, tool2},
}LangChain,多种方式,概念多:
# 方式一:create_agent
agent = create_agent(model, tools, prompt)
# 方式二:AgentExecutor(旧)
agent = AgentExecutor(agent=..., tools=..., memory=...)
# 方式三:LCEL Chain
chain = prompt | model | output_parseragents-go 只有"一个 Agent 结构体"一种定义方式。LangChain 有多种,新人容易困惑选哪个。
工具定义
agents-go,函数 + 泛型反射 schema(第 3 章):
tool := agents.NewFunctionTool("get_weather", "查天气", getWeather)LangChain,@tool 装饰器或 StructuredTool:
@tool
def get_weather(city: str) -> str:
"""查天气"""
...两者体验类似,LangChain 的 Pydantic 类型推导更顺滑(agents-go 作者承认)。
记忆
agents-go,Session 接口 + 三后端(第 8 章),显式传入:
agents.Run(ctx, agent, input, agents.RunOptions{Session: sess})LangChain,Memory 抽象(ConversationBufferMemory 等),挂在 AgentExecutor 上:
agent = AgentExecutor(agent=..., memory=ConversationBufferMemory(...))agents-go 更显式(Session 是 RunOptions 的参数),LangChain 更隐式(Memory 是 Agent 的属性)。
哲学差异的根源
agents-go(和 OpenAI Agents SDK)的哲学,显式、小接口、可读。
- 接口小(Model 两个方法、Session 四个方法、Tool 一个构造函数)
- 组合显式(
NewFallbackModel(NewRetryModel(...))看得见嵌套) - 代码可读(runner.loop 就是循环,看得到每一步)
LangChain 的哲学,集成丰富、抽象层多、快速接入。
- 几百个集成(文档加载器、向量库、工具、模型)
- 多层抽象(Chain/Runnable/Agent/Memory/Tool)
- 生态最大(你想要的大概率有现成的)
两种哲学各有道理,agents-go 适合"想理解内部、要部署到生产"的团队;LangChain 适合"要快速接入大量服务、在 Python 生态里"的团队。
优劣势对比
agents-go 的优势
- 可读性,循环看得到,调试容易
- 部署,单二进制,运维简单
- 并发,goroutine 天然并发
- 类型安全,编译期检查
- 可控,小接口,行为可预测
LangChain 的优势
- 生态,几百个集成,快速接入
- Python 生态,AI/ML 库大多 Python
- 社区,最大最活跃的 Agent 社区
- 迭代快,新模型/新功能快速跟进
- 文档/教程多,学习资源丰富
各自的劣势
| agents-go 劣势 | LangChain 劣势 |
|---|---|
| 生态小(集成少) | 抽象厚(内部难看清) |
| AI/ML 库少 | 部署重(Python 依赖) |
| 社区小 | 版本变动快(API 常改) |
| 文档少 | 并发要 async 满天飞 |
选型建议
| 你的场景 | 推荐 | 理由 |
|---|---|---|
| Go 团队,做后端 Agent 服务 | agents-go | 语言一致,部署简单 |
| 要快速原型,接大量服务 | LangChain | 生态大,接入快 |
| 要理解 Agent 内部 | agents-go | 代码可读 |
| 数据科学/ML 团队 | LangChain | Python 生态 |
| 生产部署,要求稳定 | agents-go | 单二进制,类型安全 |
| 要用最新模型/最新功能 | LangChain | 跟进快 |
核心判断,你的团队用什么语言、你要"快速接入"还是"可控可部署"。
诚实说明
agents-go 是 OpenAI Agents SDK 的 Go 移植,它本身比较新,生态和社区远不如 LangChain。如果你做严肃的生产项目,LangChain 的成熟度和生态是真实优势。
但 agents-go 的价值在于,它让你"理解 Agent 运行时怎么工作"。 即使你最终用 LangChain,理解了 agents-go 的设计(循环、工具、Session、Handoff),你也能更好地用 LangChain,因为你知道它的抽象底下是什么。
这就是本系列的目的,不是让你必须用 agents-go,而是让你理解 Agent 运行时,从而能用好任何框架。
小结
agents-go 和 LangChain 是两种哲学:
- agents-go,最小显式、小接口、可读、单二进制。适合 Go 团队、生产部署、想理解内部。
- LangChain,大而全、多集成、多抽象、Python 生态。适合快速接入、数据科学团队。
没有绝对好坏,只有"适合"。 理解差异,按场景选。
下一篇
第 51 章,Agent 框架选型指南。除了 agents-go 和 LangChain,还有 CrewAI、AutoGen、agent-native 等。怎么在这么多框架里选?
本文是《从 0 写 Agent》系列第 50 章,案例代码基于开源项目 agents-go(OpenAI Agents SDK 的 Go 移植版)。全系列目录见总览。

