Overview

What is Eino ADK?

Eino ADK is a Go-based Agent development framework, providing:

  • ChatModelAgent: A ReAct Agent with LLM as the decision-maker, supporting tool calls, autonomous reasoning, and runtime enhancement (Middleware)
  • Workflow Agents: Deterministic orchestration primitives (Sequential / Loop / Parallel)
  • Runner / TurnLoop: Agent execution entry, supporting event streams, checkpoint/resume, and multi-turn preemption
  • Multi-Agent Collaboration: AgentAsTool (recommended), Workflow composition

Widely applicable, model-agnostic, and deployment-agnostic.

ADK Architecture

Agent Interface

All ADK functionality revolves around the Agent interface:

type Agent interface {
    Name(ctx context.Context) string
    Description(ctx context.Context) string
    Run(ctx context.Context, input *AgentInput, options ...AgentRunOption) *AsyncIterator[*AgentEvent]
}

Semantics of Run:

  1. Get task information from AgentInput and Context
  2. Execute the task asynchronously, writing produced events to AsyncIterator
  3. Return the Iterator immediately after starting the async task (Future pattern)

ChatModelAgent

The core implementation of ADK. Uses a ChatModel as the decision-maker and autonomously drives problem-solving through a ReAct Loop.

ChatModelAgent = ChatModel + Tools + ReAct Loop + Middleware

For detailed introduction, see: Eino ADK: ChatModelAgent Introduction

Multi-Agent Collaboration

💡 Recommended approach: AgentAsTool — Convert a sub-Agent to a Tool, and the parent Agent calls it via ToolCall and obtains the result. This is the most flexible and composable collaboration pattern.

Collaboration ApproachMechanismApplicable Scenarios
AgentAsTool (Recommended)Sub-Agent wrapped as Tool, parent Agent autonomously decides whether to callDelegating subtasks, capability composition
WorkflowSequential / Loop / Parallel deterministic orchestrationMulti-step tasks with fixed processes

See: Agent Collaboration

Runner

Runner is the execution entry for Agents. The following features are only available when running through Runner:

  • Event stream output: Query/Run → AsyncIterator[AgentEvent]
  • Checkpoint / Resume: Persist running state, support interrupt recovery
  • TurnLoop: Multi-turn runtime, Push/Preempt/Stop
runner := adk.NewRunner(ctx, adk.RunnerConfig{
    Agent:           agent,
    EnableStreaming: true,
    CheckPointStore: store, // Optional
})

iter := runner.Query(ctx, "Your question")

See: Agent Runner and Extension | Agent Cancel and TurnLoop