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:
- Get task information from
AgentInputand Context - Execute the task asynchronously, writing produced events to
AsyncIterator - 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 Approach | Mechanism | Applicable Scenarios |
| AgentAsTool (Recommended) | Sub-Agent wrapped as Tool, parent Agent autonomously decides whether to call | Delegating subtasks, capability composition |
| Workflow | Sequential / Loop / Parallel deterministic orchestration | Multi-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