AStack
<img src="https://raw.githubusercontent.com/astack-tech/astack/HEAD/assets/brand/readme-banner.svg" alt="AStack: Everything is a component. A composable TypeScript framework for AI applications." width="100%">
Website · Documentation · Examples · MIT license · Contribute
English · 简体中文
Public beta. AStack은 활발하게 개발 중입니다. 베타 버전에는 컴포넌트, 파이프라인, 에이전트(agents), 툴(tools), 모델 통합 기능이 포함되어 있습니다.
개요 (Overview)
AStack은 AI 애플리케이션을 위한 타입스크립트 프레임워크입니다. 이 프레임워크의 설계는 하나의 규칙을 따릅니다: 모든 것이 컴포넌트여야 합니다. 흐름 기반 프로그래밍(Flow-Based Programming, FBP)과 모나딕 합성(monadic composition)은 포트를 통해 모델, 툴, 비즈니스 로직을 연결합니다.
AStack은 자체적인 아키텍처와 패키지를 가지고 있습니다. 컴포넌트 구성 및 반응형 실행을 위해 HLang 런타임을 사용합니다. HLang은 흐름 기반 프로그래밍(FBP)을 사용하는 4세대 언어 (Fourth-generation language, 4GL)입니다. 이 언어는 계산적 모델링과 코드 생성을 지원하는 의미론적 모델을 가지고 있습니다. AStack은 이 모델을 사용하여 적은 설정 코드로 컴포넌트들을 연결합니다.
주요 기능 (Key Features)
- 컴포넌트 기반 아키텍처 (Component-Based Architecture): 간단하고 재사용 가능한 컴포넌트를 조합하여 복잡한 AI 시스템을 구축합니다.
- 흐름 기반 프로그래밍 (Flow-Based Programming, FBP): 모나드적 함수 조합을 가진 선언적 데이터 흐름 패러다임입니다.
- 관찰 가능한 스트림 (Observable Streams): 스트림 처리를 위해 ReactiveX 아키텍처를 기반으로 구축되었습니다.
- 락 프리 동시성 (Lock-Free Concurrency): 모나드 기반 FBP 설계를 통해 자연스러운 동시 실행이 가능합니다.
- 파이프라인 실행 모델 (Pipeline Execution Model): 독립적인 실행 방식과 파이프라인 실행 방식을 모두 지원합니다.
- 확장 가능한 도구 시스템 (Extensible Tool System): 통일된 도구 인터페이스를 통해 새로운 기능을 통합할 수 있습니다.
- 다중 모델 지원 (Multi-Model Support): 다양한 LLM 제공업체와의 통합을 지원합니다.
- 선언적 워크플로우 (Declarative Workflow): 최소한의 코드로 복잡한 AI 워크플로우를 정의할 수 있습니다.
- 미니멀리스트 API 디자인 (Minimalist API Design): 단순성과 표현력에 중점을 둡니다.
설계 철학 (Design Philosophy)
AStack은 다음 원칙들을 기반으로 개발되었습니다.
모든 것은 컴포넌트이다 (Everything is a Component)
도구(Tools), 모델 제공업체(model providers), 에이전트(agents) 모두 컴포넌트 모델을 사용합니다. 각 컴포넌트는 입력 포트와 출력 포트를 가집니다. 개발자는 이 컴포넌트들을 재사용하고, 확장하며, 다양한 애플리케이션에서 연결할 수 있습니다.
에이전트 프레임워크를 위한 데이터 흐름 패러다임 (Data Flow Paradigm for Agent Frameworks)
AStack은 데이터 흐름 아키텍처를 사용합니다. 컴포넌트는 포트 연결을 통해 자신의 데이터 의존성을 선언합니다. 런타임(runtime)은 이 연결들을 통해 데이터를 전송합니다. 에이전트 코드는 모델 출력을 해석하고 도구 결과를 다시 모델로 보냅니다.
모델은 각 요청에 제공된 컨텍스트로부터 출력을 생성합니다. 에이전트는 대화 기록과 도구 결과를 모델 외부(outside the model)에 저장합니다. 이는 모델의 생성 과정과 애플리케이션 상태를 분리하는 역할을 합니다.
이 데이터 흐름 모델은 다음을 지원합니다:
- 자연스러운 정렬(Natural Alignment): LLM의 상태 비저장적(stateless), 생성적 특성과 일치합니다.
- 단순화된 아키텍처(Simplified Architecture): 모델을 '관리'하려는 복잡한 제어 흐름 로직을 제거합니다.
- 향상된 확장성(Better Scalability): 데이터 흐름은 모나딕 조합(monadic composition)을 통해 자연스럽게 동시 처리를 지원합니다.
- 복잡성 감소(Reduced Complexity): 포트 연결이 라우팅을 컴포넌트 동작과 분리하여 유지합니다. 이전 프로젝트 노트에서는 이를 11,000줄 이상의 제어 흐름 파일과 비교했지만, 이는 현재의 기준점은 아닙니다.
AStack의 아키텍처는 HLang의 모나딕 함수형 조합(monadic functional composition)과 ReactiveX의 Observable 스트림을 사용하여 흐름 기반 프로그래밍(Flow-Based Programming, FBP)을 기반으로 구축되었습니다. 이를 통해 다음이 가능해집니다:
- 선언적 구성(Declarative Composition): 컴포넌트는 제어 명령이 아닌 데이터 의존성을 통해 조합됩니다.
- 락 프리 동시성(Lock-Free Concurrency): 모나딕 FBP 설계를 통한 자연스러운 동시 실행이 가능합니다.
- 스트림 처리(Stream Processing): 데이터 흐름 변환을 위한 Observable/Observer 패턴을 사용합니다.
복잡성보다 미니멀리즘(Minimalism Over Complexity)
AStack은 작은 API 표면적(API surface)을 사용합니다. 독립적인 컴포넌트에는 run()을, 반응형 실행에는 _transform()을 사용합니다. 동일한 컴포넌트로 두 가지 모드 모두를 처리할 수 있습니다.
사용 사례 (Use Cases)
AStack을 사용하여 다음을 구축할 수 있습니다:
- AI 에이전트(AI Agents): 도구를 사용하여 추론하고, 계획하며, 작업을 실행할 수 있는 자율 에이전트를 구축합니다.
- 콘텐츠 생성(Content Generation): 콘텐츠를 연구, 분석 및 생성하기 위한 파이프라인을 만듭니다.
- 데이터 처리(Data Processing): 데이터를 추출, 변환 및 분석하기 위한 워크플로우를 구성합니다.
- 멀티모달 애플리케이션(Multi-modal Applications): 텍스트, 이미지 및 기타 모달리티를 결합하는 애플리케이션을 개발합니다.
- 연구 플랫폼(Research Platforms): AI 연구 및 개발을 위한 실험적 플랫폼을 구축합니다.
영감 및 비교 (Inspiration & Comparison)
AStack은 deepset-ai의 Haystack으로부터 API 디자인에 영감을 받았습니다. Haystack 커뮤니티 기여자분들의 오픈 소스 작업에 감사드립니다.
AStack은 자체적인 TypeScript 구현 및 아키텍처를 가지고 있습니다. Haystack은 Python을 사용합니다. 이 연결고리는 API 디자인의 영감일 뿐이며, AStack은 Haystack 코드를 사용하지 않습니다.
AStack 대 Haystack: 기술 비교
프로젝트 문서에 기록된 역사적 비교 자료로, 2026년 1월부 Haystack v2.0 기준입니다. 행들은 당시의 주장들을 설명하며, 현재 시점의 벤치마크가 아닙니다. 구현을 선택하기 전에 각 프레임워크의 출처를 확인하십시오.
| 기능 (Feature) | AStack | Haystack |
|---|
| 핵심 패러다임 (Core Paradigm) | 흐름 기반 프로그래밍(FBP)과 모나드 합성 (monadic composition) | 제어 흐름 - 명령형, while-루프 스케줄링 |
| ... | | |
주요 아키텍처 차이점:
- 데이터 흐름 대 제어 흐름: AStack의 흐름 기반 프로그래밍(FBP)과 모나드 합성은 상태 비저장 생성기(stateless generators)로서 LLM에 자연스럽게 부합하는 반면, Haystack은 while-루프 스케줄링을 사용하는 전통적인 제어 흐름 패턴을 사용합니다.
- 동시성 모델 (Concurrency Model): AStack은 모나드 FBP 설계를 통해 락 프리(lock-free) 동시성을 달성하며; Haystack은 우선순위 큐와 수동 비동기 처리(manual async handling)를 통해 동시성을 관리합니다.
- 성능 최적화: AStack은 토폴로지(topology)를 한 번 구축하고 재사용하는 반면, Haystack은 실행할 때마다 위상 정렬(topological sorting)을 수행합니다.
- 타입 시스템 (Type System): AStack은 TypeScript를 통해 컴파일 타임 안전성(compile-time safety)을 제공하며; Haystack은 선택적 검증(optional validation)과 함께 런타임 검사(runtime checking)를 제공합니다.
Haystack은 RAG 및 문서 처리를 위한 Python 생태계를 제공하며 디버깅 도구를 포함하고 있습니다. AStack은 모나드 FBP 합성을 사용하는 TypeScript 및 JavaScript 애플리케이션을 목표로 합니다. AStack에는 중국어 문서도 포함되어 있습니다. 귀하의 애플리케이션이 필요로 하는 언어, 구성 요소, 그리고 디버깅 지원을 비교하십시오.
아키텍처 (Architecture)
flowchart TB
subgraph "AStack Framework"
Core["Core Module"]
...
시작하기 (Getting Started)
전제 조건 (Prerequisites)
- Node.js (v18 이상)
- npm 또는 pnpm
설치 (Installation)
git clone https://github.com/astack-tech/astack.git
cd astack
...
Examples 디렉터리
examples/ 디렉터리에는 샘플 애플리케이션이 포함되어 있습니다. 각 예제의 README를 참조하여 API 키, 구성 및 실행 명령을 확인하세요.
예제 (Examples)
에이전트는 파일을 읽고 쓰는 데 도구(tools)를 사용합니다. 컴포넌트들은 이벤트 기반 포트 연결을 통해 데이터를 전송합니다.
sequenceDiagram
actor User as User
participant Agent
...
에이전트는 대화 중 도구를 한 번 이상 호출할 수 있습니다. 다음 모델 응답(model response)을 요청하기 전에 각 도구 결과를 컨텍스트(context)에 추가합니다.
리서치 파이프라인 (Research Pipeline)
리서치 파이프라인은 웹을 검색하고, 페이지 내용을 분석하며, 보고서를 생성합니다. 각 컴포넌트는 워크플로우의 한 부분을 처리합니다.
flowchart TB
%% Main components
Gateway["Gateway Component"]
...
이 파이프라인은 웹 검색(web search), 콘텐츠 추출(content extraction), 모델 분석을 연결합니다. 보고서에는 섹션과 출처 인용(source citations)이 포함됩니다.
코드 예제 (Code Examples)
import { Agent } from '@astack-tech/components';
import { readFile } from 'node:fs/promises';
import { createTool } from '@astack-tech/tools';
...
파이프라인 구축 (Building a Pipeline)
파이프라인은 세 가지 실행 모드를 제공합니다:
import { Pipeline } from '@astack-tech/core';
...
파이프라인 기능 (Pipeline Features):
- 토폴로지 재사용 (Topology reuse): 각 라우트는 토폴로지를 한 번 구축하고, 후속 실행에 재사용합니다.
- 세 가지 실행 모드: 자동 추론(Auto-inference), 명시적 엔드포인트(explicit endpoint), 또는 다중 출력 수집(multi-output collection)
- 타입 안전성 다중 출력 (Type-Safe Multi-Output): 수집된 출력에 대한 전체 TypeScript 타입 추론을 제공합니다.
- 동시 실행 (Concurrent Execution): Resolver 큐가 여러 동시 파이프라인 실행을 관리합니다.
Hlang 호환성 (Hlang Compatibility)
AStack은 Flow-Based Programming 런타임으로 HLang을 사용합니다. AStack은 자체적인 AI 컴포넌트와 API를 제공합니다. 다음 섹션에서는 공유 컴포넌트 모델과 통합 지점을 설명합니다.
Hlang의 차별화된 기능
HLang은 다음과 같은 개념을 제공합니다:
- 선언적 프로그래밍 접근법 (Declarative Programming Approach): 전통적인 방식이 요구하는 코드량보다 훨씬 적은 코드로 복잡한 동작을 표현할 수 있습니다.
- 인간 중심 디자인 (Human-Centric Design): 개발자의 학습 곡선을 줄여주는 직관적인 구문입니다.
- 컴포넌트 기반 아키텍처 (Component-Based Architecture): 복잡한 시스템으로 조립될 수 있는 컴포저블 컴포넌트를 중심으로 구축되었습니다.
- 유연성을 갖춘 타입 안전성 (Type Safety with Flexibility): 현대 애플리케이션의 동적 특성을 수용하면서도 강력한 타입 시스템을 제공합니다.
기술 통합
AStack은 Hlang과의 호환성을 제공하면서 완전한 기술적 자율성을 유지합니다:
- 호환 가능한 컴포넌트 모델 (Compatible Component Models): AStack의 컴포넌트 접근 방식은 Hlang의 플로우 기반 프로그래밍 모델과 구조적으로 호환됩니다.
- 독립적인 개발 (Independent Development): AStack은 독립적으로 사용되거나 Hlang의 기능과 결합하여 사용될 수 있습니다.
- 보완적인 강점 (Complementary Strengths): AStack의 세밀한(fine-grained) 컴포넌트 제어와 Hlang의 고수준 추상화를 결합할 수 있습니다.
- 효율적인 실행 (Efficient Execution): AStack의 반응형 데이터 흐름 디자인은 두 프레임워크 중 어느 쪽에서 정의된 워크플로우를 효율적으로 구현할 수 있게 합니다.
AStack 컴포넌트는 HLang 런타임을 통해 연결할 수 있습니다. AI 패키지는 AStack의 일부로 남아 있습니다.
계산 모델 (Computation model)
AStack은 HLang의 모나드(monadic) 합성 모델을 사용합니다. 컴포넌트가 데이터를 변환하고, 파이프라인이 이를 연결하며, 스트림이 이벤트를 전달합니다. 다음 예시들은 네 가지 계산 패턴을 보여줍니다.
네 가지 핵심 계산 패턴 (Four Core Computation Patterns)
AI 애플리케이션을 구축하기 위해 이 네 가지 패턴을 결합하세요:
graph TD
subgraph "AStack Computation Model"
A["Operator Composition"] --> B["Workflow Orchestration"];
...
| 계산 패턴 (Computation Pattern) | 설명 (Description) | 다이어그램 (Diagram) |
|---|
| 연산자 합성 (Operator Composition) | 각 컴포넌트는 순수 함수형 인터페이스를 가진 합성 가능한 변환 연산자입니다. 컴포넌트는 명확한 입력/출력 계약을 유지하며 포트를 통해 연결될 수 있습니다. | <img src="https://raw.githubusercontent.com/astack-tech/astack/HEAD/docs/images/operator-composition.svg" width="400" alt="Operator Composition Diagram"> |
| ... | | |
1. 연산자 합성 (Operator Composition)
AStack의 근본적인 빌딩 블록은 다른 연산자와 합성될 수 있는 변환 연산자인 각 컴포넌트로 이루어진 연산자 합성입니다.
const textProcessor = new TextProcessor();
const sentimentAnalyzer = new SentimentAnalyzer();
...
| 기능 (Feature) | 설명 (Description) |
|---|
| 함수형 순수성 (Functional Purity) | 컴포넌트는 명확한 입력과 출력을 가진 순수한 변환으로 설계되었습니다. |
| ... | |
2. 워크플로우 오케스트레이션 (Workflow Orchestration)
컴포넌트들은 분기(branching), 결합(joining), 조건부 실행 경로를 가진 복잡한 워크플로우로 오케스트레이션될 수 있습니다.