eino README

The project's README from github.com/cloudwego/eino. As one markdown file: README.md.

Eino

coverage Release WebSite License Go Report Card OpenIssue ClosedIssue Stars Forks

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:

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.

→ docs · examples

Framework Structure

The Eino framework consists of:

Documentation

Dependencies

Code Style

This repo uses golangci-lint. Check locally with:

golangci-lint run ./...

Rules enforced:

Security

If you discover a potential security issue in this project, or think you may have discovered a security issue, we ask that you notify Bytedance Security via our security center or vulnerability reporting email.

Do not create a public GitHub issue.

Contact

    LarkGroup

License

This project is licensed under the Apache-2.0 License.

eino (cloudwego/eino)

Searching Database…

13.3K ·GitHub
Что это?Eino — это фреймворк для разработки приложений на основе LLM и ИИ на Go, который заимствует архитектурные идеи у LangChain и Google ADK. Он предоставляет готовые переиспользуемые компоненты (ChatModel, Tool, Retriever, ChatTemplate), набор для разработки агентов (Agent Development Kit, ADK) и движок композиции для построения графов и рабочих процессов для ИИ-приложений.
Это полноценный фреймворк или просто библиотека компонентов?Это полноценный фреймворк: в него входят абстракции компонентов, Agent Development Kit (ADK) для создания агентов и слой композиции, который соединяет компоненты в графы и рабочие процессы, а также отдельный репозиторий EinoExt с конкретными реализациями.
Как с его помощью создать агента?Настройте ChatModel (при необходимости с инструментами), чтобы создать ChatModelAgent, который автоматически запускает цикл ReAct, или используйте compose, чтобы строить графы и рабочие процессы с точным контролем потока выполнения; композиции также можно предоставлять агентам как инструменты.
Какая версия Go и какие дополнительные пакеты нужны?Нужен Go версии 1.18 или выше; конкретные реализации компонентов (OpenAI, Claude, Gemini, Ark, Ollama, Elasticsearch и др.) находятся в отдельном репозитории eino-ext.
Включены ли в него готовые интеграции с моделями и инструментами или только интерфейсы?Этот репозиторий в основном определяет абстракции и логику оркестрации; реальные интеграции с провайдерами (OpenAI, Claude, Gemini, Ollama, Elasticsearch и др.) реализованы отдельно в EinoExt, так что, скорее всего, понадобится и этот сопутствующий модуль.
Для чего нужен DeepAgent?DeepAgent предназначен для сложных задач: он разбивает проблемы на шаги, передаёт работу субагентам и отслеживает прогресс; его можно настроить так, чтобы он координировал несколько специализированных агентов, выполнял команды командной строки, запускал код на Python и искал информацию в интернете.
Как Eino обрабатывает потоковые данные между компонентами?Eino автоматически управляет потоками на уровне оркестрации: склеивает, оборачивает, объединяет и копирует потоки по мере передачи данных между узлами, поэтому компонентам нужно реализовывать только те потоковые режимы, которые им важны.
Можно ли приостановить долго работающего агента для ввода от человека?Да, любой агент или инструмент может приостановить выполнение для ввода от человека через interrupt/resume и позже продолжить с сохранённой контрольной точки; фреймворк сам занимается сохранением состояния и маршрутизацией.
Как мне отслеживать, что делают мои агенты и графы?Eino позволяет встраивать логирование, трассировку и метрики в фиксированные точки обратных вызовов (OnStart, OnEnd, OnError и их потоковые варианты) для компонентов, графов и агентов; также есть отдельный инструмент Eino Devops для визуальной разработки и отладки.
Creator
cloudwego
Size
15.3 MB
Stars
13.3K
Age
1y
Commits · 90 Days