astack-tech/astack
astack-tech/astack has 36 GitHub stars and 4 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-10 01:25 UTC. Last push 2026-11-07.
🤖 A composable framework for building AI applications.
实测星标增长
- 24小时
- 0
- 7天
- 正在收集历史
- 15天
- 正在收集历史
- 1个月
- 正在收集历史
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
README.zh-CN.md
原文AStack
English · 简体中文
公开测试版。 测试版之间的 API 可能变化,每次发布的改动见各包的更新日志。
AStack 是用于构建 AI 应用的 TypeScript 框架,只有一条规则:一切皆组件。模型、工具、Agent 和你的业务逻辑都是组件。管道(Pipeline)把组件的端口连接成图,数据沿着连接流动。
import { Pipeline } from '@astack-tech/core';
// Trim and Uppercase are two small components; see examples/pipeline.
const pipeline = new Pipeline();
pipeline.addComponent('trim', new Trim());
pipeline.addComponent('upper', new Uppercase());
pipeline.connect('trim.out', 'upper.in');
await pipeline.run('trim.in', ' hello '); // 'HELLO'
计算模型
| 概念 | 含义 | API |
|---|---|---|
| 组件 | 带有具名输入、输出端口的工作单元 | class X extends Component |
| 端口 | 数据通道,输出端口连接到输入端口 | $i('in').receive()、$o('out').send() |
| 管道 | 组件构成的图,把数据从触发端口运行到终点端口 | addComponent、connect、run |
组件之间从不直接调用。组件只读取自己的输入端口、写入自己的输出端口,数据去向由管道决定。因此每个组件都小而可测,重新连接图时也不需要修改组件。
每个组件都有两种运行方式:像函数一样调用 run(input);或加入管道,由运行时调用 _transform($i, $o)。Agent、多步工作流和路由都是由这些概念组合出的模式,而不是独立的子系统。
运行时是 HLang——基于 RxJS 的流式编程(Flow-Based Programming)运行时,每条连接都是一个可观察流。
与其他框架的对比
AStack 的计算模型是原创的。PocketFlow 独立得出了相近的思路:一个很小的核心,图本身就是框架。PocketFlow 使用 Python,并以 100 行核心为标志性目标;AStack 不追求行数,追求的是 TypeScript 中类型化、响应式的数据流。Haystack 启发了 AStack 的 API 形态,但 AStack 不使用 Haystack 的代码。
| AStack | PocketFlow | Haystack | |
|---|---|---|---|
| 语言 | TypeScript | Python | Python |
| 工作单元 | 带具名端口的组件 | 包含 prep、exec、post 的节点 |
带类型化 socket 的组件 |
| 数据传递 | 沿每条连接从输出端口流向输入端口 | 通过节点共同读写的共享存储(shared store) | 沿 socket 之间的连接 |
| 分支 | 组件选择发送到哪个输出端口 | post 返回 action,流程沿对应标签的边前进 |
路由组件 |
| 执行 | 响应式流;同一路由的并发运行按顺序完成 | 流程逐个运行节点,另有异步与并行变体 | 管道运行循环 |
| 设计目标 | 类型化、响应式的数据流模型 | 约 100 行的极简核心 | 面向搜索与 RAG 的完整框架 |
与 PocketFlow 的主要区别在于状态放在哪里:PocketFlow 的节点共享一个存储;AStack 中每条连接携带这一步的数据,所以每个输入和输出都在图中可见。详见简介。
安装
需要 Node.js 20 或更高版本。
npm install @astack-tech/core@beta @astack-tech/components@beta
# 模型提供方与工具
npm install @astack-tech/integrations@beta @astack-tech/tools@beta
几行代码写一个 Agent
import { Agent } from '@astack-tech/components';
import { ModelProvider } from '@astack-tech/integrations';
import { createTool } from '@astack-tech/tools';
const multiply = createTool(
'multiply',
'Multiply two numbers.',
args => Number(args['a']) * Number(args['b'])
);
// Any model works: see the table below.
const model = new ModelProvider.Deepseek({ apiKey: process.env['DEEPSEEK_API_KEY'] ?? '' });
const agent = new Agent({ model, tools: [multiply] });
const { message, toolCalls } = await agent.run('What is 37 times 43?');
任意模型
Agent 只依赖一个接口 chatCompletion(messages),不绑定任何厂商。OpenAICompatible 可以调用任何兼容 OpenAI chat completions 协议的 API,Deepseek 是它的一个预设。
| 模型 | 写法 |
|---|---|
| OpenAI | new ModelProvider.OpenAICompatible({ apiKey, model: 'gpt-4o-mini' }) |
| DeepSeek | new ModelProvider.Deepseek({ apiKey }) |
| 通义千问、Moonshot 等兼容 OpenAI 的 API | new ModelProvider.OpenAICompatible({ apiKey, baseURL, model }) |
| 通过 Ollama 或 vLLM 运行的本地模型 | new ModelProvider.OpenAICompatible({ apiKey: 'ollama', baseURL: 'http://localhost:11434/v1', model: 'llama3.1' }) |
| 其他任何 API | 一个带 chatCompletion(messages) 的对象,见 custom-model |
示例使用 DeepSeek,以便按原样直接运行;只需修改创建模型的那一行,就能换成其他模型。详见模型提供方。
示例
每个示例只有一个短文件,只讲一个概念。建议按顺序阅读;代码也完整展示在 astack.tech/examples。
| # | 示例 | 内容 | 需要 API Key |
|---|---|---|---|
| 1 | component | 定义组件,并像函数一样运行 | 否 |
| 2 | pipeline | 连接组件,自动推断终点 | 否 |
| 3 | routing | 通过具名输出端口分支 | 否 |
| 4 | text-splitter | 用内置组件切分文档 | 否 |
| 5 | tools | 创建工具并执行工具调用 | 否 |
| 6 | chat | 直接调用模型,以及在管道中调用 | 是 |
| 7 | workflow | 串联大纲、初稿、润色三步 | 是 |
| 8 | agent | 让模型调用工具 | 是 |
| 9 | custom-model | 用你自己的模型驱动 Agent | 否 |
| 10 | streaming-agent | 流式输出文本与工具事件 | 是 |
| 11 | rlm-agent | 对超出单个提示词容量的代码库提问 | 是 |
| 12 | http-server | 通过 Server-Sent Events 提供流式 Agent 服务 | 是 |
pnpm install && pnpm build
pnpm --filter @astack-examples/pipeline start
包
| 包 | 内容 |
|---|---|
@astack-tech/core |
Component、Pipeline、Port |
@astack-tech/components |
Agent、StreamingAgent、RLMAgent、TextSplitter、ToolInvoker |
@astack-tech/tools |
createTool、工具集、组件工具、MCP 工具 |
@astack-tech/integrations |
模型提供方:调用任何兼容 OpenAI 接口的 OpenAICompatible,以及 Deepseek 预设 |
各包的 README 列出了完整 API。
文档
| 页面 | 主题 |
|---|---|
| 简介 | 计算模型与上面的对比 |
| 快速开始 | 安装、第一个组件、第一条管道 |
| 组件、管道、路由 | 核心模型 |
| 工具、模型提供方 | Agent 的构建模块 |
| Agent、流式输出、RLM | Agent 模式 |
| API 参考 | 每个包的全部导出,由源码及其 TSDoc 注释自动生成 |
文档网站目前为英文。
开发
pnpm install
pnpm verify # 格式、lint、类型、测试、包检查、构建
面向贡献者和 AI 编程 Agent 的规则见 AGENTS.md:代码是唯一事实来源;每次改动都从一个失败的测试开始;所有检查都以最严格级别运行且零警告。请向 dev 分支提交 PR,并参阅 CONTRIBUTING.md 与 SECURITY.md。
许可
探索相关项目
affaan-m/ECC
智能体执行与控制框架的性能优化系统。面向 Claude Code、Codex、Opencode、Cursor 等,涵盖技能、本能、记忆、安全与研究优先的开发。
300,265 星标NousResearch/hermes-agent
与你一同成长的智能体
262,096 星标multica-ai/andrej-karpathy-skills
一个用于改进 Claude Code 行为的 CLAUDE.md 文件,源自 Andrej Karpathy 对 LLM 编程陷阱的观察。
231,388 星标firecrawl/firecrawl
借助来自网络及其他来源的数据,强化你的 AI 智能体。正在构建面向超级智能的资料库。🔥
200,178 星标