Skip to content
Go
概述与安装

概述与安装

Eino(发音 [aino],近似 “I know”)是字节跳动开源的 Go 语言大模型应用开发框架。它从 LangChain、LlamaIndex、Google ADK 等框架汲取灵感,遵循 Go 语言编程惯例,强调类型安全、简洁性、可扩展性与可靠性

内部已大规模应用于字节跳动数百个业务线,支撑 抖音、豆包、Coze 等核心产品。

架构全景

┌────────────────────────────────────────────────────┐
│                    ADK(Agent 开发套件)              │
│  ChatModelAgent │ DeepAgent │ Supervisor │ PlanExecute │
│               Runner / TurnLoop / Checkpoint          │
├────────────────────────────────────────────────────┤
│            编排框架(compose)                         │
│       Graph API  │  Chain API  │  Workflow API        │
│   流式处理  │  并发管理  │  类型检查  │  切面注入      │
├────────────────────────────────────────────────────┤
│               组件抽象(components)                   │
│  ChatModel │ Tool │ Retriever │ Embedding │ Indexer  │
│  ChatTemplate │ Loader │ Transformer │ Lambda        │
├────────────────────────────────────────────────────┤
│           schema — Message / StreamReader / Document  │
├────────────────────────────────────────────────────┤
│       callbacks — 可观测性(tracing / logging)        │
└────────────────────────────────────────────────────┘

核心价值

维度 说明
组件抽象 精心整理的 Component 接口与实现,可复用与组合
ADK 高级 Agent 抽象,支持多智能体编排、人机协作中断
编排框架 自动类型检查、流式处理、并发管理、切面注入
类型安全 编译期类型校验,泛型贯穿始终
DevOps 可视化开发调试、在线追踪与评估(Eino Devops)

仓库体系

仓库 职责
github.com/cloudwego/eino 核心框架:类型、组件抽象、编排引擎、ADK
github.com/cloudwego/eino-ext 组件实现(OpenAI / Claude / Gemini / Ark / Ollama 等)、Callback、评估器
EinoExamples 示例应用与最佳实践
Eino Devops 可视化开发与调试工具

安装

go get github.com/cloudwego/eino@latest

按需引入扩展组件:

go get github.com/cloudwego/eino-ext/components/model/openai@latest

最小示例

package main

import (
    "context"
    "fmt"
    "io"

    "github.com/cloudwego/eino-ext/components/model/openai"
    "github.com/cloudwego/eino/schema"
)

func main() {
    ctx := context.Background()
    model, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
        APIKey: os.Getenv("OPENAI_API_KEY"),
        Model:  "gpt-4o",
    })

    stream, _ := model.Stream(ctx, []*schema.Message{
        schema.SystemMessage("You are a helpful assistant."),
        schema.UserMessage("Hello, what is Go?"),
    })
    defer stream.Close()

    for {
        chunk, err := stream.Recv()
        if err == io.EOF {
            break
        }
        fmt.Print(chunk.Content)
    }
}

💡 学习路线:组件接口 → 编排框架 → ADK → 多 Agent 协作 → Callback 可观测性