第一章:Go 语言开发的大模型调用框架 - Eino
·
1. go语言版的Langchain - Eino(字节)
说到LLM应用开发框架,大家第一反应可能是Python圈的LangChain。确实,LangChain是这个领域的先行者,生态也非常成熟。但Eino并不是LangChain的Go翻译版–它借鉴了LangChain、GoogleADK等框架的设计理念,但整个架构是按照Go的惯例从头设计的。比如用接口来抽象组件、用强类型来做编排时的类型检查、用goroutine来实现并行编排–这些都是Go语言本身的优势,而不是硬套Python的设计模式。
用一句话概括Eino的定位:它是一个组件化、可编排、可观测的Go语言LLM应用开发框架。"组件化"意味着你可以像搭积木一样组合各种能力,“可编排"意味着你可以用Chain、Graph、Workflow三种方式把组件串联起来,"可观测"意味着从日志到链路追踪,框架层面就帮你解决了。
2. 一个简单的llm调用示例
package main
import (
"context"
"errors"
"fmt"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/schema"
"io"
"log"
)
/**
* 使用 ModelScope 的 OpenAI 模型
* 一个简单的llm调用示例
*/
func main() {
ctx := context.Background()
model, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{
BaseURL: "https://api-inference.modelscope.cn/v1/",
APIKey: "xxx", // 魔塔社区可创建key,每天有免费额度可用
Model: "Qwen/Qwen3.5-35B-A3B",
})
if err != nil {
log.Fatalf("创建 ChatModel 失败: %v", err)
}
message := []*schema.Message{
schema.SystemMessage("你是一个Go语言专家,擅长深入浅出地讲解技术概念。"),
schema.UserMessage("请用200字左右解释 Go 语言的 channel 是什么,以及它在并发编程中的作用。"),
}
// 获取流式读取器
stream, err := model.Stream(ctx, message)
if err != nil {
log.Fatalf("获取流式读取器失败: %v", err)
}
defer stream.Close()
fmt.Println("模型回复(流式):")
// 循环读取流式数据块
for {
chunk, err := stream.Recv()
if errors.Is(err, io.EOF) {
// 流结束
break
}
if err != nil {
log.Fatalf("读取流数据失败: %v", err)
}
// 每收到一块就立即输出,不换行
fmt.Print(chunk.Content)
}
fmt.Println() // 最后换行
}
更多推荐


所有评论(0)