目录
- 1、什么是langchainGo
- 2、langchainGo的官方地址
- 3、LangChainGo with OpenAI
- 3-1、前置准备
- 3-2、安装依赖库
- 3-3、新建模型客户端
- 3-4、使用模型进行对话
- 4、总结
1、什么是langchainGo
langchaingo是langchain的go语言实现版本
2、langchainGo的官方地址
官网:[https://tmc.github.io/langchaingo/docs/getting-started/guide-openai][https://tmc.github.io/langchaingo/docs/getting-started/guide-openai]
github:[https://github.com/tmc/langchaingo/tree/main][https://github.com/tmc/langchaingo/tree/main]
3、LangChainGo with OpenAI
3-1、前置准备
-
下载并安装好Go [https://go.dev/doc/install][https://go.dev/doc/install]
-
获取到openAi的key(这里可以使用其他大模型提供的能力,如阿里的百炼平台[百炼的apiKey获取方式][https://bailian.console.aliyun.com/?utm_content=se_1021226628&tab=api#/api/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2712195.html&renderType=iframe])
-
创建.env文件
这里以百炼的地址和apiKey为例
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 OPENAI_API_KEY=sk-xxxx //you api key
3-2、安装依赖库
go get github.com/tmc/langchaingo
go get github.com/joho/godotenv
3-3、新建模型客户端
package model
import (
"github.com/joho/godotenv"
"github.com/tmc/langchaingo/llms/openai"
"log"
"os"
)
func GetLlm(model string, embeddingModel string) *openai.LLM {
if embeddingModel == "" {
embeddingModel = "text-embedding-v3"
}
if model == "" {
model = "qwen-max"
}
// 加载 .env 文件
err := godotenv.Load()
if err != nil {
log.Println("Error loading .env file:", err)
}
// 读取环境变量
baseUrl := os.Getenv("OPENAI_BASE_URL")
apiKey := os.Getenv("OPENAI_API_KEY")
llm, err := openai.New(openai.WithBaseURL(baseUrl),
openai.WithToken(apiKey), openai.WithModel(model),
openai.WithEmbeddingModel(embeddingModel))
if err != nil {
log.Fatal(err)
}
return llm
}
配置参数和环境变量,创建一个连接到 OpenAI 或阿里云 Qwen 的语言模型实例。
3-4、使用模型进行对话
package main
import (
"context"
"fmt"
"github.com/tmc/langchaingo/llms"
"langchain-go-demo/model"
"log"
)
// 演示使用langchain-go的llms包,调用qwen-max模型,生成文本
func main() {
llm := model.GetLlm("qwen-max", "")
ctx := context.Background()
completion, err := llms.GenerateFromSinglePrompt(ctx, llm, "Hi qwen, write a poem about golang powered AI systems",
llms.WithTemperature(0.8),
// 流式输出
llms.WithStreamingFunc(func(ctx context.Context, chunk []byte) error {
fmt.Print(string(chunk))
return nil
}),
)
if err != nil {
log.Fatal(err)
}
_ = completion
}
上面的代码通过LangChain-Go 库调用 Qwen-Max 模型 生成诗歌。这里使用了流式输出的,
chunk:每次模型生成的新文本片段。
4、总结
LangChainGo是LangChain的Go语言实现,本文演示如果通过LangChain-Go 与大模型进行交互。