ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LangChainGo 快速上手:4 个可运行案例,从一句 LLM 输出到 RAG 问答

LangChainGo 快速上手:4 个可运行案例,从一句 LLM 输出到 RAG 问答 LangChainGo 快速上手4 个可运行案例从一句 LLM 输出到 RAG 问答【免费下载链接】langchaingoLangChain for Go, the easiest way to write LLM-based programs in Go项目地址: https://gitcode.com/GitHub_Trending/la/langchaingoLangChainGo 是 LangChain 的 Go 语言实现让你在自己的 Go 服务里接入 OpenAI、Ollama 等模型并复用对话记忆、RAG 文档问答、Agent 工具调用这些现成组件。对 Go 开发者来说它最大的价值是不用离开熟悉的语言和工程体系就能把 LLM 能力写进 API、CLI 或后台任务里。先认识它LangChainGo 解决什么问题直接裸调模型 API每次都要自己拼 prompt、管对话历史、处理文档切分和向量检索。LangChainGo 把这些抽象成可组合的组件你只做三件事选模型、选组件、把它们串起来。最常碰到的核心模块llms各模型的统一客户端OpenAI、Ollama、Mistral 等都在 llms/ 下chains把加载 prompt → 调模型 → 解析输出串成工作流见 chains/memory对话记忆支持缓冲区、窗口、Token 限额等策略见 memory/agents能自主决定调用工具的 Agent 与执行器见 agents/documentloadersPDF、HTML、CSV 等文档读取器见 documentloaders/拿到项目三分钟装好环境前置条件Go 1.21仓库 go.mod 要求 1.24OpenAI API Key或本地已安装 Ollama二选一即可开始安装git clone https://gitcode.com/GitHub_Trending/la/langchaingo cd langchaingo go mod download在自己的项目里则直接go get github.com/tmc/langchaingo第一个能跑的程序让模型输出一句话用 OpenAI 生成文本新建main.go全程只有三步建客户端、发 prompt、打印结果package main import ( context fmt log github.com/tmc/langchaingo/llms github.com/tmc/langchaingo/llms/openai ) func main() { // openai.New() 会自动读取 OPENAI_API_KEY 环境变量 llm, err : openai.New() if err ! nil { log.Fatal(err) } out, err : llms.GenerateFromSinglePrompt( context.Background(), llm, 给一家生产彩色袜子的公司起 5 个创意名称, ) if err ! nil { log.Fatal(err) } fmt.Println(out) }运行与预期输出export OPENAI_API_KEYyour-api-key go run main.go跑起来之后你会看到类似这样的内容1. 彩虹袜语 2. 色阶织造 3. 缤纷足界 4. 袜彩工坊 5. 色谱袜仓。关键在第 18 行的GenerateFromSinglePrompt——所有模型客户端都实现同一个llms.Model接口换供应商时只换第一行的构造后面的调用方式不变。本地跑模型换 Ollama 并开启流式输出不想花钱调用 API或者数据不能出内网就把客户端换成 Ollama。先拉一个模型ollama pull llama3代码改动只有两处换构造函数加上WithStreamingFuncpackage main import ( context fmt log github.com/tmc/langchaingo/llms github.com/tmc/langchaingo/llms/ollama ) func main() { // 连接本机 Ollama 服务默认 localhost:11434指定模型 llm, err : ollama.New(ollama.WithModel(llama3)) if err ! nil { log.Fatal(err) } _, err llms.GenerateFromSinglePrompt( context.Background(), llm, 用一句话说明 Go 语言的优势, // 关键在这里每收到一个分片就立刻打印不用等整段生成完 llms.WithStreamingFunc(func(ctx context.Context, chunk []byte) error { fmt.Print(string(chunk)) return nil }), ) if err ! nil { log.Fatal(err) } }WithStreamingFunc接收的回调是流式输出的核心模型每吐出一小段文字就触发一次长文本首字延迟会明显下降。完整可运行版本参考 examples/ollama-completion-example/。两个高频场景让对话有记忆、用自己的文档做问答5 分钟让模型记住上下文默认情况下模型是无状态的用户问它是什么时模型并不知道它指什么。加一个ConversationBuffer和一个对话链就解决了package main import ( bufio context fmt log os strings github.com/tmc/langchaingo/chains github.com/tmc/langchaingo/llms/openai github.com/tmc/langchaingo/memory ) func main() { llm, _ : openai.New() // 记住完整对话历史想省 Token 可换成窗口缓冲或 Token 缓冲 mem : memory.NewConversationBuffer() // 对话链会自动把历史拼进每次的 prompt conv : chains.NewConversation(llm, mem) scanner : bufio.NewScanner(os.Stdin) fmt.Println(输入消息quit 退出) for scanner.Scan() { if strings.TrimSpace(scanner.Text()) quit { break } out, err : chains.Run(context.Background(), conv, scanner.Text()) if err ! nil { log.Fatal(err) } fmt.Println(AI:, out, \n) } }流程拆解ConversationBuffer存历史 →NewConversation把历史 当前输入渲染进模板 →chains.Run发起调用。想换记忆策略只保留最近 N 轮、按 Token 数截断memory/ 下还有WindowBuffer、TokenBuffer可以直接替换。用 PDF 文档做 RAG 问答文档问答RAG是四步流水线读文档 → 切块 → 向量化入库 → 检索后让模型作答// 1. 读取 PDF 并切块块大小和重叠度是调优重点 f, _ : os.Open(guide.pdf) fi, _ : f.Stat() splitter : textsplitter.NewRecursiveCharacterTextSplitter( textsplitter.WithChunkSize(1000), textsplitter.WithChunkOverlap(200), ) docs, _ : documentloaders.NewPDF(f, fi.Size()).LoadAndSplit(ctx, splitter) // 2. 用 OpenAI Embedding 向量化写入 Chroma 向量库 embedder, _ : openai.NewEmbedder() store, _ : chroma.New(chroma.WithEmbedder(embedder), chroma.WithCollectionName(guide)) _ store.AddDocuments(ctx, docs) // 3. 检索 生成向量库自带 AsRetriever() qa : chains.NewRetrievalQAFromLLM(llm, store.AsRetriever()) out, _ : chains.Run(ctx, qa, LangChainGo 支持哪些文档格式) fmt.Println(out)关键点在第 3 步store.AsRetriever()把向量库变成检索器NewRetrievalQAFromLLM就负责先检索相似片段、再把片段塞进 prompt这一整套动作。完整的 Chroma 文档问答可运行示例在 examples/chroma-vectorstore-example/ 和 examples/document-qa-example/。有想象空间的方向会自己调工具的 Agent普通链是你规定流程Agent 是模型决定流程把若干工具计算器、搜索、查数据库交给模型它自己判断什么时候该调哪个。执行器与 Agent 的组装只有两行llm, _ : openai.New(openai.WithModel(gpt-4o-mini)) // tools 是 Agent 可调用的工具集合如 tools 包内置的计算器、Wikipedia 搜索 agent : agents.NewOpenAIFunctionsAgent(llm, tools) executor : agents.NewExecutor(agent) // Call 内部是模型请求调用 → 执行工具 → 结果回传的循环 result, err : executor.Call(ctx, 北京今天适合跑步吗) if err nil { fmt.Println(result[output]) }这个骨架成立之后扩展路径很直接往tools里加你自己的业务函数查订单、跑 SQL、调内部 APIAgent 就能覆盖更多场景。想要能直接运行的版本看 examples/mrkl-agent-example/。把代码带进生产的几条实用建议超时与上下文控制给 LLM 调用传带超时的context并用WithMaxCompletionTokens限制输出长度避免单次请求失控错误分类处理llms/errors_mapper.go会把各家 API 的错误归一化网络错误和配额错误可以分别重试或降级长文本走流式对面向用户的场景用WithStreamingFunc边生成边输出体感延迟最低换供应商零成本所有客户端实现同一llms.Model接口OpenAI 和 Ollama 之间切换只改构造函数模块化依赖Go 的模块裁剪机制保证你只引入用到的组件导入llms/openai不会把 Chroma、Milvus 等依赖全拉进来接下来做什么把 examples/tutorial-basic-chat-app/ 跑一遍它是分步骤的交互式聊天应用覆盖基础对话到带记忆版本挑一个自己的文档照着上面 RAG 小节把问答跑通再从块大小参数开始调优需要查 API 细节时直接读 docs/ 下的入门文档以及 CONTRIBUTING.md 了解如何给项目提交文档或新组件【免费下载链接】langchaingoLangChain for Go, the easiest way to write LLM-based programs in Go项目地址: https://gitcode.com/GitHub_Trending/la/langchaingo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表