AI个人学习
和实操指南
讯飞绘镜

Eino:字节跳动开源的Golang大模型应用开发框架

综合介绍

Eino 是 CloudWeGo 团队推出的一款基于 Golang 的开源框架,旨在成为大模型(LLM)应用的终极开发工具。它汲取了 LangChain 和 LlamaIndex 等开源框架的优秀设计,结合前沿研究成果和字节跳动内部实践经验,提供了简洁、可扩展、高效的开发体验。Eino 通过精心设计的组件抽象、强大的编排能力、完整的流式处理支持以及类型安全的特性,帮助开发者快速构建可靠的 AI 应用。已在字节跳动内部(如抖音、豆包)广泛应用,现开源至 GitHub,代码覆盖率高,社区活跃,致力于推动 Golang 生态的 AI 开发标准化和效率提升。

blank


 

功能列表

  • 丰富的组件抽象:提供 ChatModel、Tool、ChatTemplate 等可复用组件,支持嵌套和复杂逻辑封装。
  • 强大的编排能力:支持 Chain 和 Graph 两种模式,处理类型检查、并发管理和数据流编排。
  • 完整的流式处理:自动处理流数据的拼接、拆分、合并和复制,适配多种流式范式。
  • 高扩展性切面:内置回调机制,支持日志、追踪等横切关注点的注入。
  • 类型安全:利用 Golang 编译时检查,确保输入输出匹配。
  • 开发工具集:提供可视化调试、评估器等,覆盖开发全周期。
  • 最佳实践示例:内置 ReAct Agent 等流程实现,附带丰富示例代码。

 

使用帮助

安装流程

Eino 是一个 Golang 框架,安装需准备 Go 环境。以下是详细步骤:

  1. 安装 Go
    • 访问 Go 官网 下载 1.18 或以上版本。
    • 安装完成后,运行 go version 检查版本(如 go1.21.0)。
  2. 拉取 Eino 核心库
    • 在终端运行:
      go get github.com/cloudwego/eino@latest
      
    • 若需扩展组件(如 OpenAI 支持),运行:
      go get github.com/cloudwego/eino-ext@latest
      
  3. 验证安装
    • 创建文件 main.go
      package main
      import "github.com/cloudwego/eino"
      func main() {
      println("Eino installed successfully!")
      }
      
    • 执行 go run main.go,输出成功即完成。
  4. 依赖说明
    • Eino 依赖 kin-openapi 的 v0.118.0 版本以兼容 Go 1.18。
    • 可选:EinoExt 提供更多组件实现。
  5. 社区支持
    • 访问 GitHub Issues 提交问题或加入飞书用户群(见官方页面二维码)。

主要功能操作流程

1. 直接使用 ChatModel

ChatModel 是基础组件,用于调用大模型生成内容。

  • 代码示例
    package main
    import (
    "context"
    "github.com/cloudwego/eino-ext/components/model/openai"
    "github.com/cloudwego/eino/schema"
    )
    func main() {
    ctx := context.Background()
    config := &openai.Config{APIKey: "你的OpenAI-API-Key"}
    model, err := openai.NewChatModel(ctx, config)
    if err != nil {
    panic(err)
    }
    messages := []*schema.Message{
    {Role: schema.System, Content: "你是一个助手。"},
    {Role: schema.User, Content: "未来AI应用是什么样?"},
    }
    msg, err := model.Generate(ctx, messages)
    if err != nil {
    panic(err)
    }
    println(msg.Content)
    }
  • 操作说明
    • 用 NewChatModel 初始化模型实例,传入上下文和 API 配置。
    • 调用 Generate 方法生成非流式输出。
    • 可通过扩展组件支持其他模型(如 LLaMA)。

2. 使用 Chain 编排简单流程

Chain 适合线性流程,如模板+模型。

  • 代码示例
    package main
    import (
    "context"
    "github.com/cloudwego/eino"
    "github.com/cloudwego/eino-ext/components/model/openai"
    )
    func main() {
    ctx := context.Background()
    model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "你的API-Key"})
    prompt := eino.NewChatTemplate("你好,我的名字是{{.name}}")
    chain, _ := eino.NewChain[map[string]any, *eino.Message]().
    AppendChatTemplate(prompt).
    AppendChatModel(model).
    Compile(ctx)
    result, _ := chain.Invoke(ctx, map[string]any{"name": "Eino"})
    println(result.Content)
    }
    
  • 操作说明
    • NewChain 定义输入输出类型,Append 添加节点。
    • Compile 编译链条,Invoke 执行并返回结果。
    • 适合简单的前后顺序任务。

3. 使用 Graph 实现复杂编排

Graph 支持循环或非循环的有向图,适合工具调用等场景。

  • 代码示例
    package main
    import (
    "context"
    "github.com/cloudwego/eino"
    "github.com/cloudwego/eino-ext/components/model/openai"
    "github.com/cloudwego/eino/schema"
    )
    func main() {
    ctx := context.Background()
    model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "你的API-Key"})
    graph := eino.NewGraph[map[string]any, *schema.Message]()
    graph.AddChatModelNode("model", model)
    graph.AddEdge(eino.START, "model")
    graph.AddEdge("model", eino.END)
    runnable, _ := graph.Compile(ctx)
    result, _ := runnable.Invoke(ctx, map[string]any{"query": "你好,世界!"})
    println(result.Content)
    }
    
  • 操作说明
    • Add*Node 添加节点,AddEdge 定义数据流向。
    • 支持分支(AddBranch)和工具调用。
    • Stream 可替换 Invoke 获取流式输出。

4. 配置流式处理

Eino 提供四种流式范式:Invoke、Stream、Collect、Transform。

  • 流式输出示例
    stream, _ := runnable.Stream(ctx, map[string]any{"query": "你好,世界!"})
    for chunk := range stream {
    if chunk.Err != nil {
    panic(chunk.Err)
    }
    print(chunk.Value.Content)
    }
    
  • 功能解析
    • Eino 自动处理流的拼接(如给非流节点)和拆分(如分支时复制)。
    • 下游节点无需关心上游流状态,框架透明处理。

5. 添加回调机制

回调用于日志、追踪等扩展。

  • 代码示例
    handler := eino.NewHandlerBuilder().
    OnStartFn(func(ctx context.Context, info *eino.RunInfo, input eino.CallbackInput) context.Context {
    println("开始:", info.NodeID)
    return ctx
    }).Build()
    result, _ := runnable.Invoke(ctx, map[string]any{"query": "测试"}, eino.WithCallbacks(handler))
    
  • 操作要点
    • 支持 OnStartOnEnd 等五种切面。
    • 可通过 WithCallbacks 指定节点或全局生效。

特色功能操作

1. ReAct Agent

  • 功能说明
    ReAct Agent 结合 ChatModel 和工具调用,实现自主决策循环。
  • 操作步骤
    • 参考 react.go
    • 运行示例:配置模型和工具,调用 Invoke 执行。

2. 可视化调试

  • 功能说明
    通过 Eino Devops 提供 UI 调试。
  • 操作步骤
    • 拉取 eino-ext 仓库,运行 devops 模块,查看文档配置。
CDN1
未经允许不得转载:首席AI分享圈 » Eino:字节跳动开源的Golang大模型应用开发框架

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文