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调用示例
packagemainimport("context""errors""fmt""github.com/cloudwego/eino-ext/components/model/openai""github.com/cloudwego/eino/schema""io""log")/** * 使用 ModelScope 的 OpenAI 模型 * 一个简单的llm调用示例 */funcmain(){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",})iferr!=nil{log.Fatalf("创建 ChatModel 失败: %v",err)}message:=[]*schema.Message{schema.SystemMessage("你是一个Go语言专家,擅长深入浅出地讲解技术概念。"),schema.UserMessage("请用200字左右解释 Go 语言的 channel 是什么,以及它在并发编程中的作用。"),}// 获取流式读取器stream,err:=model.Stream(ctx,message)iferr!=nil{log.Fatalf("获取流式读取器失败: %v",err)}deferstream.Close()fmt.Println("模型回复(流式):")// 循环读取流式数据块for{chunk,err:=stream.Recv()iferrors.Is(err,io.EOF){// 流结束break}iferr!=nil{log.Fatalf("读取流数据失败: %v",err)}// 每收到一块就立即输出,不换行fmt.Print(chunk.Content)}fmt.Println()// 最后换行}