A Go-based LLM/AI application development framework open-sourced by CloudWeGo (ByteDance), providing component abstractions, agent orchestration, graph/chain workflows, and streaming capabilities.
Introduction#
Eino (pronounced ['aino]) is a Go-based AI application framework from CloudWeGo (ByteDance's open-source organization). Inspired by LangChain and Google ADK, it follows Go idioms and leverages Go's concurrency model and type system.
- License: Apache-2.0
- Requirements: Go 1.18+
- Maintainer: CloudWeGo / ByteDance
Core Features#
Component Abstraction#
Provides reusable component interfaces: ChatModel, Tool, Retriever, ChatTemplate, Embedding, Document Loader, Lambda, etc. Official implementations cover OpenAI, Claude, Gemini, Ark, Ollama, Elasticsearch, and more.
Agent Development Kit (ADK)#
- ChatModelAgent: Built-in ReAct loop, automatically handles tool calls, conversation state, and reasoning flow
- Preset Patterns: Deep Agent (task orchestration), Supervisor (hierarchical coordination), sequential/parallel/cyclic
- Human-in-the-Loop: Interrupt/resume mechanism with checkpoint persistence
Orchestration Engine#
- Chain: Unidirectional chain flow
- Graph: Directed graph (cycles allowed)
- Workflow: Acyclic graph with field-level data mapping
- Runtime Capabilities: Compile-time type checking, streaming, concurrency management, aspect injection, option dispatching
Streaming#
Framework automatically handles stream concatenation, boxing, merging, and copying; components only implement business-meaningful streaming patterns.
Callback Aspects#
Inject logging, tracing, and metrics at fixed points: OnStart, OnEnd, OnError, OnStartWithStreamInput, OnEndWithStreamOutput.
Code Examples#
Using ChatModelAgent#
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{weatherTool, calculatorTool},
},
},
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "What's the weather in Beijing this weekend?")
Graph Orchestration#
graph := compose.NewGraph[map[string]any, *schema.Message]()
_ = graph.AddChatTemplateNode("node_template", chatTpl)
_ = graph.AddChatModelNode("node_model", chatModel)
_ = graph.AddToolsNode("node_tools", toolsNode)
compiledGraph, _ := graph.Compile(ctx)
out, _ := compiledGraph.Invoke(ctx, map[string]any{"query":"Beijing's weather this weekend"})
Module Structure#
| Repository | Responsibility |
|---|---|
| eino | Core: type definitions, streaming, component interfaces, orchestration, ADK, aspect mechanism |
| eino-ext | Ecosystem: third-party component implementations, callback handlers, evaluators |
| eino-examples | Sample applications and best practices |
| Eino DevOps | Visual development and debugging |
Use Cases#
- Conversational assistants with tool calling
- Complex task decomposition and multi-agent collaboration
- Enterprise data processing and reasoning pipelines (RAG, Workflow)
- Business processes requiring human-in-the-loop (approval, input)