cloudwego/eino
요약
Eino는 Golang 언어의 관례를 따르도록 설계된 LLM 애플리케이션 개발 프레임워크입니다. 재사용 가능한 구성 요소, 에이전트 개발 키트(ADK), 그리고 복잡한 워크플로를 위한 그래프 기반의 조합 기능을 제공합니다.
핵심 포인트
- Golang 기반의 LLM 애플리케이션 개발을 위한 프레임워크
- ChatModel, Tool, Retriever 등 재사용 가능한 빌딩 블록 제공
- 멀티 에이전트 협업 및 인간 참여형(human-in-the-loop) 기능을 지원하는 ADK 포함
- DeepAgent를 통한 단계별 문제 해결 및 하위 에이전트 위임 가능
- 그래프와 워크플로를 활용한 정밀한 실행 흐름 제어 및 결정론적 워크플로우 구축
English | 中文
**Eino['aino]**는 Golang 기반의 LLM (Large Language Model) 애플리케이션 개발 프레임워크입니다. LangChain, Google ADK 및 기타 오픈 소스 프레임워크에서 영감을 받았으며, Golang의 관례(conventions)를 따르도록 설계되었습니다.
Eino는 다음과 같은 기능을 제공합니다:
구성 요소 (Components): ChatModel, Tool, Retriever, ChatTemplate과 같이 재사용 가능한 빌딩 블록을 제공하며, OpenAI, Ollama 등을 위한 공식 구현체가 포함되어 있습니다.
에이전트 개발 키트 (Agent Development Kit, ADK): 도구 사용(tool use), 멀티 에이전트 협업(multi-agent coordination), 컨텍스트 관리(context management), 인간 참여형(human-in-the-loop)을 위한 중단/재개(interrupt/resume) 기능, 그리고 즉시 사용 가능한 에이전트 패턴을 통해 AI 에이전트를 구축할 수 있습니다.
조합 (Composition): 구성 요소들을 그래프(graphs)와 워크플로(workflows)로 연결하여 단독으로 실행하거나 에이전트를 위한 도구로 노출할 수 있습니다.
예제 (Examples): 일반적인 패턴과 실제 사용 사례에 대한 동작 가능한 코드를 제공합니다.
ChatModel을 설정하고 선택적으로 도구를 추가하면 작동하는 에이전트를 만들 수 있습니다:
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
...
도구를 추가하여 에이전트에게 능력을 부여하세요:
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
...
에이전트는 내부적으로 ReAct 루프를 처리합니다. 즉, 언제 도구를 호출하고 언제 응답할지를 스스로 결정합니다.
→ ChatModelAgent 예제 · docs
복잡한 작업에는 DeepAgent를 사용하세요. DeepAgent는 문제를 단계별로 나누고, 하위 에이전트(sub-agents)에게 위임하며, 진행 상황을 추적합니다:
deepAgent, _ := deep.New(ctx, &deep.Config{
ChatModel: chatModel,
SubAgents: []adk.Agent{researchAgent, codeAgent},
...
DeepAgent는 여러 전문 에이전트를 조정하고, 셸 명령을 실행하며, Python 코드를 실행하고, 웹을 검색하도록 구성할 수 있습니다.
실행 흐름을 정밀하게 제어해야 할 때는 compose를 사용하여 그래프와 워크플로를 구축하세요:
graph := compose.NewGraph[*Input, *Output]()
graph.AddLambdaNode("validate", validateFn)
graph.AddChatModelNode("generate", chatModel)
...
Composition(구성)은 에이전트(Agent)를 위한 도구(Tool)로 노출될 수 있으며, 이를 통해 결정론적 워크플로우(Deterministic workflows)와 자율적 행동(Autonomous behavior)을 연결할 수 있습니다.
tool, _ := graphtool.NewInvokableGraphTool(graph, "data_pipeline", "Process and validate data")
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
...
이를 통해 정확한 제어가 가능한 도메인 특화 파이프라인(Domain-specific pipelines)을 구축한 다음, 에이전트가 이를 언제 사용할지 결정하도록 할 수 있습니다.
→ GraphTool 예시 · compose 문서
Eino는 컴포넌트 추상화(ChatModel, Tool, Retriever, Embedding 등)를 정의하며, OpenAI, Claude, Gemini, Ark, Ollama, Elasticsearch 등을 위한 공식 구현체를 제공합니다.
→ eino-ext
Eino는 오케스트레이션(Orchestration) 전반에 걸쳐 스트리밍(Streaming)을 자동으로 처리합니다. 즉, 데이터가 노드(Node) 사이를 흐를 때 스트림을 연결(Concatenating), 박싱(Boxing), 병합(Merging) 및 복사(Copying)합니다. 컴포넌트는 자신에게 적합한 스트리밍 패러다임만 구현하면 되며, 나머지는 프레임워크가 처리합니다.
→ docs
컴포넌트, 그래프(Graph), 에이전트 전반의 고정된 지점(OnStart, OnEnd, OnError, OnStartWithStreamInput, OnEndWithStreamOutput)에 로깅(Logging), 트레이싱(Tracing), 메트릭(Metrics)을 주입할 수 있습니다.
→ docs
모든 에이전트나 도구는 인간의 입력(Human input)을 위해 실행을 일시 중지하고 체크포인트(Checkpoint)에서 재개할 수 있습니다. 프레임워크가 상태 지속성(State persistence)과 라우팅(Routing)을 처리합니다.
Eino 프레임워크는 다음과 같이 구성됩니다:
Eino (본 리포지토리): 타입 정의(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: 예제 애플리케이션 및 베스트 프랙티스(Best practices)
Go 1.18 이상.
이 리포지토리는 golangci-lint를 사용합니다. 로컬에서 다음 명령어로 확인하세요:
golangci-lint run ./...
강제되는 규칙:
- 내보내기(Exported)된 함수, 인터페이스, 패키지 등에는 GoDoc 주석이 있어야 합니다.
- 코드는
gofmt -s로 포맷팅되어야 합니다. - 임포트(Import) 순서는
goimports를 따라야 합니다. (표준 라이브러리(std) -> 제3자 라이브러리(third party) -> 로컬(local))
이 프로젝트에서 잠재적인 보안 문제를 발견하거나, 보안 문제를 발견했다고 생각되는 경우, 당사의 보안 센터 또는 취약점 보고 이메일을 통해 Bytedance Security에 통지해 주시기 바랍니다.
GitHub에 공개 이슈(public GitHub issue)를 생성하지 마십시오.
- 멤버십: COMMUNITY MEMBERSHIP
- 이슈: Issues
- Lark: 아래의 QR 코드를 Feishu로 스캔하여 CloudWeGo/eino 사용자 그룹에 참여하세요.
이 프로젝트는 Apache-2.0 라이선스(Apache-2.0 License) 하에 라이선스가 부여됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Go (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기