INTEGRITY Dokumentace

Používání Agents s Workflows

Co jsou Workflows?

Cloudflare Workflows poskytují trvalé, vícekrokové provádění úloh, které musí přežít selhání, automaticky se opakovat a čekat na externí události. Při integraci s Agents se Workflows starají o dlouhotrvající zpracování na pozadí, zatímco Agents zajišťují komunikaci v reálném čase.

Agents oproti Workflows

Agents a Workflows mají vzájemně se doplňující silné stránky:

Možnost Agenti Workflows
Model spuštění Dlouhodobá identita, která se probouzí na základě událostí Spuštění do dokončení
Komunikace v reálném čase WebSockets, HTTP streaming Není podporováno
Perzistence stavu Vestavěná databáze SQL Perzistence na úrovni kroku
Zpracování selhání Definovaný aplikací Automatická opakování a obnovení
Externí události Přímé zpracování Pozastavit a čekat na události
Interakce uživatele Přímý (chat, UI) Prostřednictvím callbacků Agenta

Agents mohou vytvářet smyčky, větvit se a přímo interagovat s uživateli. Workflows provádějí kroky sekvenčně se zaručeným doručením a mohou se na dny pozastavit a čekat na schválení nebo externí data.

Kdy použít co

Používejte Agents samostatně pro:

Používejte Agents spolu s Workflows pro:

Používejte Workflows samostatně pro:

Jak Agenti a Workflows komunikují

AgentWorkflow třída (importovaná z agents/workflows) poskytuje obousměrnou komunikaci mezi Workflow a jejich zdrojovým Agentem.

Workflow to Agent

Workflows mohou s Agents komunikovat několika způsoby:

// Inside a workflow's run() method
await this.agent.updateTaskStatus(taskId, "processing"); // RPC call
await this.reportProgress({ step: "process", percent: 0.5 }); // Progress (non-durable)
this.broadcastToClients({ type: "update", taskId }); // Broadcast (non-durable)
await step.mergeAgentState({ taskProgress: 0.5 }); // State update (durable)
// Inside a workflow's run() method
await this.agent.updateTaskStatus(taskId, "processing"); // RPC call
await this.reportProgress({ step: "process", percent: 0.5 }); // Progress (non-durable)
this.broadcastToClients({ type: "update", taskId }); // Broadcast (non-durable)
await step.mergeAgentState({ taskProgress: 0.5 }); // State update (durable)

Agent do Workflow

Agents mohou s běžícími Workflows interagovat těmito způsoby:

Trvalé vs. netrvalé operace

Pochopení trvanlivosti je klíčové pro efektivní používání workflow:

Netrvalé (může se při opakování zopakovat)

Tyto operace jsou odlehčené a vhodné pro časté aktualizace, ale pokud workflow provede nový pokus, mohou se spustit vícekrát:

Trvalé (idempotentní, nebude se opakovat)

Tyto operace využívají step parametr a je zaručeno, že se provedou přesně jednou:

Záruky trvalosti

Workflows zajišťují odolnost pomocí spouštění po jednotlivých krocích:

  1. Dokončení kroku je trvalé : Jakmile je krok dokončen, znovu se nespustí, ani pokud dojde k restartu workflow
  2. Automatická opakování : Neúspěšné kroky se opakují s nastavitelnou prodlevou mezi pokusy
  3. Perzistence událostí : Workflows mohou čekat na události až jeden rok
  4. Obnovení stavu : Stav workflow přežije selhání infrastruktury

Tento model trvalosti znamená, že workflows se dobře hodí pro úlohy, u kterých je třeba zachovat částečné dokončení, například vícestupňové zpracování dat nebo transakce probíhající napříč více systémy.

Sledování workflow

Když Agent spustí workflow pomocí runWorkflow(), workflow se automaticky sleduje v interní databázi agenta. To umožňuje:

Běžné vzory

Zpracování na pozadí s průběhem

Agent přijme požadavek, spustí Workflow pro náročné zpracování a v průběhu jednotlivých kroků Workflow vysílá aktualizace o průběhu připojeným klientům.

// Workflow reports progress after each item
for (let i = 0; i < items.length; i++) {
	await step.do(`process-${i}`, async () => processItem(items[i]));
	await this.reportProgress({
		step: `process-${i}`,
		percent: (i + 1) / items.length,
		message: `Processed ${i + 1}/${items.length}`,
	});
}
// Workflow reports progress after each item
for (let i = 0; i < items.length; i++) {
	await step.do(`process-${i}`, async () => processItem(items[i]));
	await this.reportProgress({
		step: `process-${i}`,
		percent: (i + 1) / items.length,
		message: `Processed ${i + 1}/${items.length}`,
	});
}

Schválení s lidským zásahem

Workflow připraví požadavek a pozastaví se, aby počkal na schválení pomocí waitForApproval(), a Agent poskytuje uživatelské rozhraní, ve kterém uživatelé mohou schválit nebo zamítnout přes approveWorkflow() / rejectWorkflow(). Workflow pokračuje nebo vyvolá WorkflowRejectedError na základě rozhodnutí.

Odolná volání externích API

Workflow obaluje volání externího API do trvalých kroků s logikou opakování. Pokud API selže nebo se workflow restartuje, dokončená volání se neopakují a neúspěšná volání se opakují automaticky.

const result = await step.do(
	"call-api",
	{
		retries: { limit: 5, delay: "10 seconds", backoff: "exponential" },
		timeout: "5 minutes",
	},
	async () => {
		const response = await fetch("https://api.example.com/process");
		if (!response.ok) throw new Error(`API error: ${response.status}`);
		return response.json();
	},
);
const result = await step.do(
	"call-api",
	{
		retries: { limit: 5, delay: "10 seconds", backoff: "exponential" },
		timeout: "5 minutes",
	},
	async () => {
		const response = await fetch("https://api.example.com/process");
		if (!response.ok) throw new Error(`API error: ${response.status}`);
		return response.json();
	},
);

Synchronizace stavu

Workflow aktualizuje stav Agenta v klíčových milnících pomocí step.updateAgentState() nebo step.mergeAgentState(). Tyto změny stavu se rozešlou všem připojeným klientům, takže se uživatelská rozhraní synchronizují bez nutnosti dotazování (pollingu).

Spouštění Workflows API

Podrobnosti implementace pracovních postupů agentů.

Cloudflare Workflows

Základy workflow a dokumentace.

Lidský zásah

Postupy schvalování a ruční intervence.