https://github.com/cloudwego/eino
The ultimate LLM/AI application development framework in Golang.
https://github.com/cloudwego/eino
ai ai-application ai-framework langchain langchain-for-go langchaingo llm-application
Last synced: 27 days ago
JSON representation
The ultimate LLM/AI application development framework in Golang.
- Host: GitHub
- URL: https://github.com/cloudwego/eino
- Owner: cloudwego
- License: apache-2.0
- Created: 2024-12-04T06:47:27.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2026-01-20T13:37:33.000Z (about 2 months ago)
- Last Synced: 2026-01-20T16:43:41.143Z (about 2 months ago)
- Topics: ai, ai-application, ai-framework, langchain, langchain-for-go, langchaingo, llm-application
- Language: Go
- Homepage: https://www.cloudwego.io/docs/eino/
- Size: 9.06 MB
- Stars: 9,268
- Watchers: 66
- Forks: 723
- Open Issues: 100
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- AiTreasureBox - cloudwego/eino - 11-03_7936_0](https://img.shields.io/github/stars/cloudwego/eino.svg)|The ultimate LLM/AI application development framework in Golang.| (Repos)
- StarryDivineSky - cloudwego/eino
- awesome-langchain - Eino
- awesome - cloudwego/eino - The ultimate LLM/AI application development framework in Go. (Go)
- my-awesome - cloudwego/eino - application,ai-framework,langchain,langchain-for-go,langchaingo,llm-application pushed_at:2026-02 star:9.8k fork:0.8k The ultimate LLM/AI application development framework in Go. (Go)
README
# Eino

[](https://github.com/cloudwego/eino/releases)
[](https://www.cloudwego.io/)
[](https://github.com/cloudwego/eino/blob/main/LICENSE)
[](https://goreportcard.com/report/github.com/cloudwego/eino)
[](https://github.com/cloudwego/kitex/eino)
[](https://github.com/cloudwego/eino/issues?q=is%3Aissue+is%3Aclosed)


English | [中文](README.zh_CN.md)
# 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](https://github.com/cloudwego/eino-ext)**: reusable building blocks like `ChatModel`, `Tool`, `Retriever`, and `ChatTemplate`, 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](https://github.com/cloudwego/eino-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:
```Go
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:
```Go
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](https://github.com/cloudwego/eino-examples/tree/main/adk/intro) · [docs](https://www.cloudwego.io/docs/eino/core_modules/eino_adk/agent_implementation/chat_model/)
## DeepAgent
For complex tasks, use DeepAgent. It breaks down problems into steps, delegates to sub-agents, and tracks progress:
```Go
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](https://github.com/cloudwego/eino-examples/tree/main/adk/multiagent/deep) · [docs](https://www.cloudwego.io/docs/eino/core_modules/eino_adk/agent_implementation/deepagents/)
## Composition
When you need precise control over execution flow, use `compose` to build graphs and workflows:
```Go
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:
```Go
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](https://github.com/cloudwego/eino-examples/tree/main/adk/common/tool/graphtool) · [compose docs](https://www.cloudwego.io/docs/eino/core_modules/chain_and_graph_orchestration/)
# 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](https://github.com/cloudwego/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](https://www.cloudwego.io/docs/eino/core_modules/chain_and_graph_orchestration/stream_programming_essentials/)
## Callback Aspects
Inject logging, tracing, and metrics at fixed points (OnStart, OnEnd, OnError, OnStartWithStreamInput, OnEndWithStreamOutput) across components, graphs, and agents.
→ [docs](https://www.cloudwego.io/docs/eino/core_modules/chain_and_graph_orchestration/callback_manual/)
## Interrupt/Resume
Any agent or tool can pause execution for human input and resume from checkpoint. The framework handles state persistence and routing.
→ [docs](https://www.cloudwego.io/docs/eino/core_modules/eino_adk/agent_hitl/) · [examples](https://github.com/cloudwego/eino-examples/tree/main/adk/human-in-the-loop)
# Framework Structure

The Eino framework consists of:
- Eino (this repo): Type definitions, streaming mechanism, component abstractions, orchestration, agent implementations, aspect mechanisms
- [EinoExt](https://github.com/cloudwego/eino-ext): Component implementations, callback handlers, usage examples, evaluators, prompt optimizers
- [Eino Devops](https://github.com/cloudwego/eino-ext/tree/main/devops): Visualized development and debugging
- [EinoExamples](https://github.com/cloudwego/eino-examples): Example applications and best practices
## Documentation
- [Eino User Manual](https://www.cloudwego.io/zh/docs/eino/)
- [Eino: Quick Start](https://www.cloudwego.io/zh/docs/eino/quick_start/)
## Dependencies
- Go 1.18 and above.
## Code Style
This repo uses `golangci-lint`. Check locally with:
```bash
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](https://security.bytedance.com/src) or [vulnerability reporting email](sec@bytedance.com).
Do **not** create a public GitHub issue.
## Contact
- Membership: [COMMUNITY MEMBERSHIP](https://github.com/cloudwego/community/blob/main/COMMUNITY_MEMBERSHIP.md)
- Issues: [Issues](https://github.com/cloudwego/eino/issues)
- Lark: Scan the QR code below with [Feishu](https://www.feishu.cn/en/) to join the CloudWeGo/eino user group.

## License
This project is licensed under the [Apache-2.0 License](LICENSE-APACHE).