生态概览:LangChain 与 Go

LangChain 是什么

LangChain 是目前最具影响力的 LLM 应用开发框架,它把模型调用之外的"工程脚手架"标准化为若干可组合的组件:

组件职责
Model I/O统一的模型调用接口(对话消息、流式、工具调用)
PromptsPrompt 模板与变量填充
Chains将多个步骤编排为有向流程
Agents让模型自主决策调用哪些工具
Retrieval / RAG文档加载、切分、向量化与检索问答
Memory对话历史管理

官方实现面向 Python 与 JavaScript。langchaingogithub.com/tmc/langchaingo)是社区维护的 Go 语言实现,复刻了上述核心组件,使 Go 服务无需引入 Python 运行时即可构建 LLM 应用。

Go 侧的三种集成路径

路径适用场景特点
langchaingo(本章主线)在 Go 服务内直接编排 LLM 应用单一二进制、类型安全、延迟低
直连模型 REST API只需简单的对话/补全调用零依赖,但缺少链式编排抽象
调用 Python LangChain 服务团队已有 LangChain/LangGraph 服务跨语言:Go 侧通过 REST 客户端或队列集成
Tip

选型经验:业务以 Go 为主时优先 langchaingo,与 goroutine、context、HTTP 服务天然融合;仅当算法团队在 Python 侧维护复杂的 LangGraph 状态机时,才建议跨语言集成——Go 服务只做网关与业务编排。

langchaingo 的模块地图

github.com/tmc/langchaingo
├── llms              # 统一模型接口(llms.Model)
│   ├── openai        # OpenAI 及一切兼容 API
│   ├── anthropic / googleai / cohere ...
│   └── ollama        # 本地模型
├── prompts           # Prompt 模板
├── chains            # 链式编排(LLMChain、QA、顺序链等)
├── agents / tools    # Agent 与工具
├── documentloaders   # 文档加载(文本、HTML、PDF 等)
├── textsplitter      # 文档切分
├── embeddings        # 向量化模型接口
├── vectorstores      # 向量存储(Chroma、pgvector、Milvus 等)
└── memory            # 会话记忆

与 Go 并发模型的结合

langchaingo 的所有阻塞调用均接受 context.Context,因此可以无缝使用 Go 的并发设施:

这是"Go + langchaingo"区别于 Python 生态的最大优势:并发与超时控制是语言原生能力

Warning

langchaingo 社区迭代较快,API 偶有调整。本章示例基于 2025 年的主流接口编写;遇到编译差异时,以 pkg.go.dev 文档examples 目录为准。

小结

  • LangChain 的价值在于标准化的 LLM 工程组件;langchaingo 将其带入 Go 生态。
  • Go 侧集成的首选是 langchaingo,跨语言集成仅适合已有 Python 服务的团队。
  • langchaingo 与 context/goroutine 的结合是其在服务端落地的核心优势。