使用 LangChain Go 调用 Perplexity API:流式文本补全实战示例详解

使用 LangChain Go 调用 Perplexity API:流式文本补全实战示例详解 使用 LangChain Go 调用 Perplexity API流式文本补全实战示例详解【免费下载链接】langchaingoLangChain for Go, the easiest way to write LLM-based programs in Go项目地址: https://gitcode.com/GitHub_Trending/la/langchaingo本篇技术指南以仓库中的 perplexity-completion-example 示例为主线完整讲解如何通过 LangChain Go 的 OpenAI 兼容客户端接入 Perplexity API完成环境变量加载、模型客户端配置、单提示文本生成与实时流式输出。读完本文你将掌握在 Go 项目中把 Perplexity 托管的开源大模型如 llama-3.1-sonar 系列接入 LangChain Go 的完整可运行方案并理解其底层调用链与关键参数含义。示例概览这个程序做了什么仓库中的示例位于 examples/perplexity-completion-example/ 目录核心程序是 perplexity_completion_example.go其运行流程分为四个环节环境准备程序启动时通过godotenv从.env文件加载环境变量其中保存你的 Perplexity API Key。LLM 客户端配置使用 LangChain Go 的 OpenAI 兼容客户端llms/openai包初始化一个指向 Perplexity API 的大语言模型客户端。文本生成向模型发起一次单轮提示示例中的提问是What is a prime number?什么是质数。流式输出模型逐词生成响应程序将生成的内容实时打印到控制台实现边生成边展示的效果。这实际上验证了 LangChain Go 的核心设计理念Perplexity 的 API 与 OpenAI 接口兼容因此无需单独的驱动包直接复用llms/openai客户端并覆盖 Base URL 即可接入。第一步环境变量与 API Key 配置示例程序首先加载.env文件并读取 API Keyerr : godotenv.Load() if err ! nil { log.Fatalf(Error loading .env file) } apiKey : os.Getenv(PERPLEXITY_API_KEY)godotenv.Load()来自第三方库github.com/joho/godotenv版本见 go.mod它会读取当前工作目录下的.env文件将其中定义的键值对注入进程环境变量。os.Getenv(PERPLEXITY_API_KEY)读取密钥如果.env缺失或未定义该变量apiKey将为空字符串后续请求会因鉴权失败而报错。使用前需要完成两步在 Perplexity 平台获取 API Key申请后复制密钥字符串。在示例目录下创建.env文件内容为PERPLEXITY_API_KEYyour_api_key_here将your_api_key_here替换为真实密钥。注意.env文件通常应加入.gitignore避免密钥泄露到版本库。第二步用 OpenAI 兼容客户端配置 Perplexity LLMPerplexity 的补全 API 兼容 OpenAI 接口因此 LangChain Go 直接复用llms/openai包的openai.New构造函数通过三个选项完成定向接入llm, err : openai.New( // Supported models: https://docs.perplexity.ai/docs/model-cards openai.WithModel(llama-3.1-sonar-large-128k-online), openai.WithBaseURL(https://api.perplexity.ai), openai.WithToken(apiKey), ) if err ! nil { log.Fatal(err) }三个选项的含义与底层实现见 llms/openai/openaillm_option.go选项作用未设置时的默认行为openai.WithModel(model string)指定要使用的模型名称示例为llama-3.1-sonar-large-128k-online回退到OPENAI_MODEL环境变量openai.WithBaseURL(baseURL string)覆盖 API 端点这里指向https://api.perplexity.ai回退到OPENAI_BASE_URL环境变量最终默认https://api.openai.com/v1openai.WithToken(token string)传入 Perplexity 的 API Key 用于鉴权回退到OPENAI_API_KEY环境变量从源码可以看出这三个选项都是函数式选项func(opts *options)在构造客户端时写入内部options结构体后续每次请求都会携带。这意味着即使不写.env你也可以直接通过OPENAI_API_KEY、OPENAI_BASE_URL、OPENAI_MODEL三个环境变量完成同等配置——示例显式传参只是为了更清晰地展示 Perplexity 的接入点。关于模型选择示例选用的模型是llama-3.1-sonar-large-128k-online这是 Perplexity 托管的 Llama 3.1 Sonar 系列模型支持 128k 的上下文窗口适合长文本处理online后缀表示具备在线检索能力的版本回答时可结合实时网络信息具体可用模型清单以 Perplexity 官方模型卡片为准可通过修改WithModel参数切换。第三步单提示文本生成与流式输出完成客户端配置后示例调用llms.GenerateFromSinglePrompt发起生成请求并传入流式回调ctx : context.Background() _, err llms.GenerateFromSinglePrompt(ctx, llm, What is a prime number?, llms.WithStreamingFunc(func(ctx context.Context, chunk []byte) error { fmt.Print(string(chunk)) return nil }), ) fmt.Println() if err ! nil { log.Fatal(err) }底层调用链GenerateFromSinglePrompt 的内部逻辑GenerateFromSinglePrompt定义在 llms/llms.go是 LangChain Go 提供的一个便捷函数适用于单字符串输入、单字符串输出的简单交互。其内部实现为将用户字符串包装为MessageContent角色标记为ChatMessageTypeHuman人类消息调用llm.GenerateContent(ctx, []MessageContent{msg}, options...)进入统一的生成入口从响应中取出第一个Choice返回其Content文本。因此GenerateFromSinglePrompt实际上是GenerateContent的语法糖——如果你需要多轮对话、系统消息、多模态内容等复杂结构可以直接使用更通用的GenerateContent。流式输出WithStreamingFunc 的回调机制llms.WithStreamingFunc定义在 llms/options.go接收一个签名如下的回调func(ctx context.Context, chunk []byte) error模型每生成一小段内容就会以chunk字节切片的形式调用一次该回调示例中回调把chunk直接fmt.Print到控制台于是响应会像打字机一样逐词呈现回调返回nil表示继续接收后续分片返回错误可中断生成流程。在 OpenAI 兼容客户端内部流式请求通过 SSEServer-Sent Events接收增量数据逐块触发该回调相关逻辑见 llms/openai/internal/openaiclient/chat.go 中StreamingFunc的调用处。整个链路的请求路径为GenerateFromSinglePrompt └─ LLM.GenerateContent (llms/openai/openaillm.go) └─ openaiclient Chat 请求 (llms/openai/internal/openaiclient/chat.go) └─ SSE 增量解析 └─ StreamingFunc(ctx, chunk) → fmt.Print(string(chunk))其他可用的生成参数llms包还提供了丰富的CallOption见 llms/options.go你可以与WithStreamingFunc组合使用例如llms.WithMaxTokens(maxTokens int)限制生成的最大 token 数llms.WithTemperature(temperature float64)调节输出的随机性/创造性0 到 1 之间通常效果较好llms.WithStopWords(stopWords []string)命中指定词时停止生成llms.WithTopK(topK int)启用 top-k 采样。这些参数与WithStreamingFunc一样属于CallOption可同时传入GenerateFromSinglePrompt或GenerateContent用于灵活调节 Perplexity 模型的生成行为。第四步运行示例运行前提已安装 Go示例的go.mod声明go 1.24.3已配置好.env文件中的PERPLEXITY_API_KEY。在示例目录下执行go run perplexity_completion_example.go程序会先加载.env随后向 Perplexity 发起请求并在控制台逐词流式打印模型关于质数的回答最终以换行结束。依赖说明示例的依赖声明位于 go.modgithub.com/joho/godotenv v1.5.1负责.env文件加载github.com/tmc/langchaingo v0.1.14-pre.4LangChain Go 主库提供llms与llms/openai包。执行go mod tidy可自动拉齐依赖。整个示例无需引入任何 Perplexity 专属 SDK充分体现了 OpenAI 兼容生态的复用性。进阶方向Perplexity 在 LangChain Go 中的更多用法除了本示例展示的补全能力仓库中还提供了其他与 Perplexity 协作的组件可作为后续扩展参考工具调用仓库的 tools/perplexity/ 目录提供面向 Agent 的 Perplexity 检索工具封装含 perplexity.go 与其测试用例可用于让 Agent 在执行任务时按需调用 Perplexity 检索实时信息Agent 集成结合 agents/ 包的 MRKL、OpenAI Function 等 Agent 实现可将 Perplexity 模型作为推理内核构建检索 推理 工具调用的完整链路多轮对话将示例中的GenerateFromSinglePrompt替换为GenerateContent并维护多轮MessageContent即可扩展为带上下文的聊天应用。小结本示例虽小却完整展示了 LangChain Go 接入 OpenAI 兼容第三方模型的标准范式openai.NewWithBaseURL指向目标服务、WithToken注入密钥、WithModel选择模型再通过GenerateFromSinglePrompt或GenerateContent发起请求、用WithStreamingFunc实现实时输出。掌握这一模式后你可以在不改动业务代码结构的前提下将同一套 LangChain Go 程序平滑切换到 Perplexity、OpenAI 或任意兼容 OpenAI 接口的服务上。【免费下载链接】langchaingoLangChain for Go, the easiest way to write LLM-based programs in Go项目地址: https://gitcode.com/GitHub_Trending/la/langchaingo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考