30分钟上手LangChain Go:从0到1构建你的AI对话助手
你是否曾想过用Go语言快速开发一个能记住对话历史的AI应用?是否被复杂的LLM(大语言模型)API调用和对话状态管理搞得晕头转向?本文将带你从零开始,在30分钟内基于LangChain Go构建一个具备记忆功能的AI对话助手,无需深厚的AI知识,只需基础的Go编程能力。
读完本文你将学会:
- 如何配置LangChain Go开发环境
- 调用模型的基础方法
- 实现对话记忆功能(让AI记住上下文)
- 构建交互式命令行聊天应用
- 项目结构与核心模块解析
环境准备与项目初始化
安装LangChain Go
LangChain Go是Go语言实现的LLM应用开发框架,通过它可以轻松连接各类AI模型并构建复杂应用。首先确保你的开发环境满足:
- Go 1.20+
- Git
- 网络环境可访问模型API(或本地部署的Ollama等)
使用以下命令安装核心库:
go get github.com/tmc/langchaingo
项目完整代码结构可参考官方示例库:examples/
核心模块概览
LangChain Go的核心能力分布在多个功能模块中,理解这些模块有助于快速上手:
| 模块路径 | 功能说明 |
|---|---|
| llms/ | 大语言模型接口,支持多模型 |
| memory/ | 对话记忆管理,支持多种存储策略 |
| chains/ | 工作流编排,串联多个LLM调用和工具 |
| agents/ | 智能代理,支持工具调用和决策能力 |
第一个AI应用:基础对话功能
让我们从最简单的LLM调用开始,创建一个能响应单轮对话的程序。
单轮对话实现
创建main.go文件,导入必要的包并初始化LLM客户端:
package main
import (
"context"
"fmt"
"log"
"github.com/tmc/langchaingo/llms"
"github.com/tmc/langchaingo/llms/[替代模型]"
)
func main() {
// 初始化模型客户端(默认读取环境变量API_KEY)
llm, err := [替代模型].New()
if err != nil {
log.Fatal(err)
}
// 调用模型生成响应
ctx := context.Background()
response, err := llms.GenerateFromSinglePrompt(ctx, llm,
"用Go语言打印'Hello LangChain'的代码是什么?")
if err != nil {
log.Fatal(err)
}
fmt.Println("AI响应:", response)
}
运行程序前需要设置API密钥:
export API_KEY="你的API密钥"
go run main.go
预期输出类似:
AI响应: package main
import "fmt"
func main() {
fmt.Println("Hello LangChain")
}
完整示例代码可参考:examples/[替代模型]-completion-example/
实现对话记忆功能
上述基础示例只能处理单轮对话,无法记住上下文。接下来我们添加对话记忆功能,让AI能够理解多轮对话中的上下文关系。
对话记忆原理
LangChain Go提供了多种记忆实现,最常用的是ConversationBuffer(对话缓冲区),它会保存完整的对话历史。核心实现位于:memory/buffer.go
带记忆功能的聊天实现
修改main.go,添加记忆管理和交互式对话循环:
package main
import (
"bufio"
"context"
"fmt"
"log"
"os"
"strings"
"github.com/tmc/langchaingo/chains"
"github.com/tmc/langchaingo/llms/[替代模型]"
"github.com/tmc/langchaingo/memory"
)
func main() {
// 初始化LLM和对话记忆
llm, err := [替代模型].New()
if err != nil {
log.Fatal(err)
}
chatMemory := memory.NewConversationBuffer()
// 创建对话链(自动管理记忆和对话流程)
conversationChain := chains.NewConversation(llm, chatMemory)
ctx := context.Background()
reader := bufio.NewReader(os.Stdin)
fmt.Println("带记忆功能的AI聊天助手(输入'quit'退出)")
fmt.Println("----------------------------------------")
for {
fmt.Print("你: ")
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
if input == "quit" {
break
}
// 运行对话链,自动处理记忆和上下文
result, err := chains.Run(ctx, conversationChain, input)
if err != nil {
fmt.Printf("错误: %v\n", err)
continue
}
fmt.Printf("AI: %s\n\n", result)
}
}
这段代码实现了:
- 对话历史存储在内存中
- 每次交互自动将历史上下文传递给模型
- 用户可通过命令行进行多轮对话
完整的带记忆聊天示例可参考:examples/tutorial-basic-chat-app/
项目核心模块解析
LangChain Go的强大之处在于其模块化设计,让我们深入了解构建对话助手时用到的关键模块。
核心模块架构
LangChain Go的主要功能模块如下:
langchaingo/
├── llms/ // 大语言模型接口(多模型支持)
├── chains/ // 工作流链(对话链/问答链等)
├── memory/ // 对话记忆管理
├── prompts/ // 提示词模板
└── agents/ // 智能代理(高级功能)
LLM模块
LLM模块提供了统一的模型调用接口,支持20+主流AI模型。以[替代模型]为例,核心实现位于:llms/[替代模型]/
主要功能:
- 文本生成(Completion)
- 聊天对话(Chat)
- 工具调用(Function Call)
- 提示词缓存(Prompt Caching)
记忆模块
记忆模块负责管理对话状态,除了基础的缓冲区记忆,还有:
ConversationBufferWindow:只保留最近N轮对话ConversationTokenBuffer:按token数量限制记忆长度- 持久化记忆:memory/alloydb/(数据库存储)
链(Chains)模块
链模块用于组合多个操作步骤,常见链类型:
ConversationChain:对话专用链(本文使用)LLMChain:基础LLM调用链SequentialChain:顺序执行多个链RetrievalQA:检索增强问答(结合知识库)
高级功能与扩展方向
完成基础聊天助手后,你可以进一步探索这些高级功能:
本地模型部署
如果不想依赖外部API,可以使用Ollama部署本地模型:
import (
"github.com/tmc/langchaingo/llms/ollama"
)
// 使用本地Ollama部署的模型
llm, err := ollama.New(ollama.WithModel("模型名称"))
完整示例:examples/ollama-chat-example/
多模态支持
LangChain Go支持处理图像等非文本输入(需要模型支持):
// 处理图像输入(如支持视觉的模型)
content := []llms.Content{
{
Type: llms.ContentTypeImageURL,
ImageURL: &llms.ImageURL{URL: "data:image/png;base64,..."},
},
{Type: llms.ContentTypeText, Text: "描述这张图片的内容"},
}
参考示例:examples/[替代模型]-mutil-content/
工具调用能力
让AI能够调用外部工具(如计算器、搜索引擎):
// 定义工具
tools := []tools.Tool{
tools.NewCalculator(),
}
// 创建工具调用代理
agent := agents.NewOpenAIFunctionsAgent(llm, tools)
executor := agents.NewExecutor(agent)
详细实现见:agents/openai_functions_agent.go
项目总结与下一步
通过本文,你已经掌握了使用LangChain Go构建基础AI对话助手的核心步骤:环境配置→基础调用→记忆实现→交互优化。关键代码位于:
进阶学习路径
- 提示词工程:学习如何通过prompts/模块创建更有效的提示词模板
- 检索增强:结合vectorstores/实现知识库问答
- 异步流式响应:参考examples/ollama-stream-example/实现打字机效果
- Web界面集成:将命令行应用改造为Web服务
官方资源
- 完整文档:docs/
- 更多示例:examples/
- API参考:pkg.go.dev/github.com/tmc/langchaingo
现在,你已经拥有构建更复杂AI应用的基础。尝试扩展这个聊天助手,添加自定义工具或连接到你的业务数据,创造更有价值的AI应用吧!
如果你觉得本文有帮助,请点赞收藏,并关注获取更多LangChain Go实战教程。下一期我们将探讨如何构建带知识库的智能问答系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



