Eino
English | δΈζ
Overview
Eino['aino] is an LLM application development framework in Golang. It draws from LangChain, Google ADK, and other open-source frameworks, and is designed to follow Golang conventions.
Eino provides:
- Components: reusable building blocks like
ChatModel,Tool,Retriever, andChatTemplate, with official implementations for OpenAI, Ollama, and more. - Agent Development Kit (ADK): build AI agents with tool use, multi-agent coordination, context management, interrupt/resume for human-in-the-loop, and ready-to-use agent patterns.
- Composition: connect components into graphs and workflows that can run standalone or be exposed as tools for agents.
- Examples: working code for common patterns and real-world use cases.

Quick Start
ChatModelAgent
Configure a ChatModel, optionally add tools, and you have a working agent:
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "Hello, who are you?")
for {
event, ok := iter.Next()
if !ok {
break
}
fmt.Println(event.Message.Content)
}
Add tools to give the agent capabilities:
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{weatherTool, calculatorTool},
},
},
})
The agent handles the ReAct loop internally β it decides when to call tools and when to respond.
β ChatModelAgent examples Β· docs
DeepAgent
For complex tasks, use DeepAgent. It breaks down problems into steps, delegates to sub-agents, and tracks progress:
deepAgent, _ := deep.New(ctx, &deep.Config{
ChatModel: chatModel,
SubAgents: []adk.Agent{researchAgent, codeAgent},
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{shellTool, pythonTool, webSearchTool},
},
},
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})
iter := runner.Query(ctx, "Analyze the sales data in report.csv and generate a summary chart")
DeepAgent can be configured to coordinate multiple specialized agents, run shell commands, execute Python code, and search the web.
β DeepAgent example Β· docs
Composition
When you need precise control over execution flow, use compose to build graphs and workflows:
graph := compose.NewGraph[*Input, *Output]()
graph.AddLambdaNode("validate", validateFn)
graph.AddChatModelNode("generate", chatModel)
graph.AddLambdaNode("format", formatFn)
graph.AddEdge(compose.START, "validate")
graph.AddEdge("validate", "generate")
graph.AddEdge("generate", "format")
graph.AddEdge("format", compose.END)
runnable, _ := graph.Compile(ctx)
result, _ := runnable.Invoke(ctx, input)
Compositions can be exposed as tools for agents, bridging deterministic workflows with autonomous behavior:
tool, _ := graphtool.NewInvokableGraphTool(graph, "data_pipeline", "Process and validate data")
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{tool},
},
},
})
This lets you build domain-specific pipelines with exact control, then let agents decide when to use them.
β GraphTool examples Β· compose docs
Key Features
Component Ecosystem
Eino defines component abstractions (ChatModel, Tool, Retriever, Embedding, etc.) with official implementations for OpenAI, Claude, Gemini, Ark, Ollama, Elasticsearch, and more.
β eino-ext
Stream Processing
Eino automatically handles streaming throughout orchestration: concatenating, boxing, merging, and copying streams as data flows between nodes. Components only implement the streaming paradigms that make sense for them; the framework handles the rest.
β docs
Callback Aspects
Inject logging, tracing, and metrics at fixed points (OnStart, OnEnd, OnError, OnStartWithStreamInput, OnEndWithStreamOutput) across components, graphs, and agents.
β docs
Interrupt/Resume
Any agent or tool can pause execution for human input and resume from checkpoint. The framework handles state persistence and routing.
Framework Structure

The Eino framework consists of:
-
Eino (this repo): Type definitions, streaming mechanism, component abstractions, orchestration, agent implementations, aspect mechanisms
-
EinoExt: Component implementations, callback handlers, usage examples, evaluators, prompt optimizers
-
Eino Devops: Visualized development and debugging
-
EinoExamples: Example applications and best practices
Documentation
Dependencies
- Go 1.18 and above.
Code Style
This repo uses golangci-lint. Check locally with:
golangci-lint run ./...
Rules enforced:
- Exported functions, interfaces, packages, etc. should have GoDoc comments
- Code should be formatted with
gofmt -s - Import order should follow
goimports(std -> third party -> local)
Security
If you discover a potential security issue, notify Bytedance Security via the security center or vulnerability reporting email.
Do not create a public GitHub issue.
Contact
- Membership: COMMUNITY MEMBERSHIP
- Issues: Issues
- Lark: Scan the QR code below with Feishu to join the CloudWeGo/eino user group.
βββ 
License
This project is licensed under the Apache-2.0 License.