AI Skill Hub 推荐使用:AI工作流 是一款优质的Agent工作流。AI 综合评分 7.5 分,在同类工具中表现稳健。如果你正在寻找可靠的Agent工作流解决方案,这是一个值得深入了解的选择。
AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 方式一:npm 全局安装 npm install -g ablo # 方式二:npx 直接运行(无需安装) npx ablo --help # 方式三:项目依赖安装 npm install ablo # 方式四:从源码运行 git clone https://github.com/Abloatai/ablo cd ablo npm install npm start
# 命令行使用
ablo --help
# 基本用法
ablo [options] <input>
# Node.js 代码中使用
const ablo = require('ablo');
const result = await ablo.run(options);
console.log(result);
# ablo 配置说明 # 查看配置选项 ablo --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export ABLO_CONFIG="/path/to/config.yml"
<p align="center"> <a href="https://abloatai.com"><img src="assets/banner.png" alt="Ablo" width="480" /></a> </p>
<p align="center"> <strong>Let people and AI agents work on the same data without overwriting each other.</strong> </p>
<p align="center"> <a href="https://docs.abloatai.com">Docs</a> | <a href="https://docs.abloatai.com/quickstart">Quickstart</a> | <a href="https://docs.abloatai.com/api">API</a> | <a href="https://github.com/Abloatai/ablo">GitHub</a> </p>
<p align="center"> <a href="https://www.npmjs.com/package/@abloatai/ablo"><img src="https://img.shields.io/npm/v/@abloatai/ablo?style=flat-square&color=2563eb" alt="npm" /></a> <a href="https://docs.abloatai.com"><img src="https://img.shields.io/badge/docs-docs.abloatai.com-2563eb?style=flat-square" alt="docs" /></a> <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-2563eb?style=flat-square" alt="license" /></a> <img src="https://img.shields.io/badge/node-%E2%89%A524-22c55e?style=flat-square" alt="node >=24" /> <img src="https://img.shields.io/badge/types-included-2563eb?style=flat-square" alt="types included" /> </p>
---
When an agent and a person change the same thing at once, work gets lost: one edit silently clobbers another, or the agent acts on data that already moved. Ablo gives them one shared, typed write path so people, server actions, and agents can all work on the same rows without working blind.
The core idea is a claim. An agent's work is rarely one instant write; it reads something, thinks, calls an LLM or tool, then writes back. While that is happening, the row can change underneath it. So before slow work starts, the agent claims the row. If someone else is already working on it, claim waits, re-reads the fresh row, then hands it over. No stale overwrite, no separate agent mutation path.
Under the hood, you define your data once with a Zod schema and get the same typed model client for every actor — people, server actions, and agents:
await ablo.task.create({ data }) // create
await ablo.task.retrieve({ id }) // read
await ablo.task.update({ id, data }) // update
await using task = await ablo.task.claim({ id }) // claim for safe, slow agent work
The schema is the public contract. It gives you typed model methods, realtime fanout, React selectors, agent writes, and the HTTP/Data Source shape for non-JavaScript services. Every confirmed change shows up everywhere, and active claims are visible while the work is still in progress.
Get started · point your coding agent at the shipped llms.txt · upgrading? see the Version History & Migration Guide
It works with the auth and database you already have. Your database is the system of record — Ablo never hosts your data. Ablo is the transaction layer on top of it: realtime data is scoped to sync groups from your own identity, and every committed row lives in your Postgres.
Built for collaborative editors, AI agent workflows, and internal tools — anywhere people and agents change shared state and everyone has to see it live.
import Ablo from '@abloatai/ablo';
import { defineSchema, model, z } from '@abloatai/ablo/schema';
Register the schema once (init scaffolds this `ablo.d.ts`), and every type
is one parameter away — no `typeof schema` re-stating, anywhere:
ts // ablo.d.ts — once per project import type { schema } from './ablo/schema'; declare module '@abloatai/ablo' { interface Register { Schema: typeof schema } } export {}; ts import type { Model } from '@abloatai/ablo/schema';
type WeatherReport = Model<'weatherReports'>; // fully typed from YOUR schema
(The same `Register` binding types every hook and client — it's the
TanStack-Router pattern: declare the source of truth once, everything
infers from it.)
const schema = defineSchema({
weatherReports: model({
location: z.string(),
status: z.enum(['pending', 'ready']),
forecast: z.string().optional(),
}),
});
const ablo = Ablo({
schema,
apiKey: process.env.ABLO_API_KEY, // written to .env.local by `npx ablo push`
databaseUrl: process.env.DATABASE_URL, // your Postgres — rows live here, never with Ablo
});
await ablo.ready();
const created = await ablo.weatherReports.create({
data: {
location: 'Stockholm',
status: 'pending',
},
});
// An agent claims the row, does its slow work, then writes back. While the
// claim is held nobody else can overwrite it; anyone else who tries waits in
// line and re-reads the result. This is the whole point of Ablo.
await using claim = await ablo.weatherReports.claim({ id: created.id });
const report = claim.data;
const forecast = await fetchForecast(report.location); // slow: API or LLM call
await ablo.weatherReports.update({ id: report.id, data: { status: 'ready', forecast } });
const ready = ablo.weatherReports.get(created.id);
console.log({ id: ready?.id, status: ready?.status });
await ablo.dispose();
Expected output:
{ id: '...', status: 'ready' }
Ablo({ ... }) takes three things: your schema, your key, and your database — the last either as databaseUrl here or as a signed Data Source endpoint in your app. Every other option has correct defaults:
| Option | Type | Default | Purpose |
|---|---|---|---|
schema | Schema | — (required) | Typed model proxies (ablo.<model>.*) |
apiKey | string \| ApiKeySetter \| null | process.env.ABLO_API_KEY | Server key — a string, or an async function for rotation |
databaseUrl | string \| null | process.env.DATABASE_URL | Your Postgres, registered as the data plane. Server runtimes only — the SDK throws if it sees this in a browser. Omit it when your app exposes a signed [Data Source endpoint](./docs/data-sources.md) instead. |
Keep apiKey in trusted server runtimes. In the browser, <AbloProvider> authenticates with the signed-in user's session; the raw-key path is gated behind dangerouslyAllowBrowser for server-proxy setups only. Advanced hooks (custom fetch, logging, observability, transport overrides) live in Client Behavior.
<AbloProvider>, useAblo, presence, status, and bootstrap gating.claim / claim.state / claim.queue / claim.release reference: hold a row across slow agent work, and observe the line waiting behind it.databaseUrl) or signed endpoint; your database is the system of record either way.ablo是一个有潜力的开源AI工作流项目
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ Apache 2.0 — 宽松开源协议,可商用,需保留版权声明和 NOTICE 文件,含专利授权条款。
总体来看,AI工作流 是一款质量良好的Agent工作流,在同类工具中具备一定竞争力。AI Skill Hub 将持续追踪其更新动态,建议收藏备用,结合自身场景选择合适时机引入使用。
| 原始名称 | ablo |
| Topics | aiai-agentstypescript |
| GitHub | https://github.com/Abloatai/ablo |
| License | Apache-2.0 |
| 语言 | TypeScript |
收录时间:2026-06-12 · 更新时间:2026-06-12 · License:Apache-2.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端