Skip to content
English

复用基础 Workflow 与 Agent 分支 ​

add 保留旧 Workflow,生成组合后的新 Workflow;fork 继承已有绑定及分支来源。

add 接受节点配置或另一个 Workflow,并用 routes 显式改接原节点。它不会修改旧实例;重复节点、不可达节点及无界环仍会拒绝。仅仅新增一个不可达节点不能成为有效扩展。

fork 必须使用当前分支创建的 checkpoint。未传 workflow 时继承;传入则内部调用 add 组合,不是替换。含 App 依赖时,resume 必须恢复 App 依赖,工具运行时也由 resume 明确提供,避免把请求资源当作可随意复制的纯配置。checkpoint 使用结构化克隆保存 Data;不持久化,不自动恢复业务授权,不是跨请求任务系统。

由简到繁的同业务示例 ​

基础 Workflow 生成一个新版本 ​

入门 · Node.js

ts
import { AgentCoreEngine, defineWorkflow, route } from '@jangts/agent-core/engine';

type State = { name: string; answer?: string };
const workflow = defineWorkflow<State, string>({
  id: 'greeting',
  nodes: [{
    id: 'greet', description: '根据本次姓名生成问候', startsRound: true,
    run: state => ({ answer: '你好,' + state.name }),
    routes: [route.deliver('answer')],
  }],
});
const extended = workflow.add({
  nodes: [{ id: 'format', description: '为现有回答增加结尾',
    run: state => ({ answer: state.answer + '!' }), routes: [route.deliver('answer')] }],
  routes: { greet: [route.to('format')] },
});
console.log(await new AgentCoreEngine({ workflow: extended }).run({ name: 'Ivan' }));
console.log(workflow.ids()); // 基础定义仍然只有 greet
js
import { AgentCoreEngine, defineWorkflow, route } from '@jangts/agent-core/engine';
const workflow = defineWorkflow({
    id: 'greeting',
    nodes: [{
            id: 'greet', description: '根据本次姓名生成问候', startsRound: true,
            run: state => ({ answer: '你好,' + state.name }),
            routes: [route.deliver('answer')],
        }],
});
const extended = workflow.add({
    nodes: [{ id: 'format', description: '为现有回答增加结尾',
            run: state => ({ answer: state.answer + '!' }), routes: [route.deliver('answer')] }],
    routes: { greet: [route.to('format')] },
});
console.log(await new AgentCoreEngine({ workflow: extended }).run({ name: 'Ivan' }));
console.log(workflow.ids()); // 基础定义仍然只有 greet

继承基础 Agent 的绑定与分支来源 ​

配置 · Node.js

ts
import { AgentCoreEngine, defineWorkflow, route } from '@jangts/agent-core/engine';

type State = { name: string; answer?: string };
const workflow = defineWorkflow<State, string>({
  id: 'greeting',
  nodes: [{
    id: 'greet', description: '根据本次姓名生成问候', startsRound: true,
    run: state => ({ answer: '你好,' + state.name }),
    routes: [route.deliver('answer')],
  }],
});
const base = new AgentCoreEngine({ workflow });
const checkpoint = base.checkpoint({ name: 'Ivan' });
const branch = base.fork({ at: checkpoint });
console.log(await branch.run(checkpoint.read()));
console.log(branch.branch.parentBranchId === base.branch.branchId);
js
import { AgentCoreEngine, defineWorkflow, route } from '@jangts/agent-core/engine';
const workflow = defineWorkflow({
    id: 'greeting',
    nodes: [{
            id: 'greet', description: '根据本次姓名生成问候', startsRound: true,
            run: state => ({ answer: '你好,' + state.name }),
            routes: [route.deliver('answer')],
        }],
});
const base = new AgentCoreEngine({ workflow });
const checkpoint = base.checkpoint({ name: 'Ivan' });
const branch = base.fork({ at: checkpoint });
console.log(await branch.run(checkpoint.read()));
console.log(branch.branch.parentBranchId === base.branch.branchId);

分支增添阶段而不是替换 Workflow ​

扩展 · Node.js

基础 Agent 没有自己的业务绑定时,也可以直接用 baseWorkflow.add(...) 构造新的 Agent。

ts
import { AgentCoreEngine, defineWorkflow, route } from '@jangts/agent-core/engine';

type State = { name: string; answer?: string };
const workflow = defineWorkflow<State, string>({
  id: 'greeting',
  nodes: [{
    id: 'greet', description: '根据本次姓名生成问候', startsRound: true,
    run: state => ({ answer: '你好,' + state.name }),
    routes: [route.deliver('answer')],
  }],
});
const base = new AgentCoreEngine({ workflow });
const at = base.checkpoint({ name: 'Ivan' });
const upgraded = base.fork({ at, workflow: {
  nodes: [{ id: 'format', description: '修饰基础回答',
    run: state => ({ answer: state.answer + '!' }), routes: [route.deliver('answer')] }],
  routes: { greet: [route.to('format')] },
} });
console.log(await upgraded.run(at.read()));
js
import { AgentCoreEngine, defineWorkflow, route } from '@jangts/agent-core/engine';
const workflow = defineWorkflow({
    id: 'greeting',
    nodes: [{
            id: 'greet', description: '根据本次姓名生成问候', startsRound: true,
            run: state => ({ answer: '你好,' + state.name }),
            routes: [route.deliver('answer')],
        }],
});
const base = new AgentCoreEngine({ workflow });
const at = base.checkpoint({ name: 'Ivan' });
const upgraded = base.fork({ at, workflow: {
        nodes: [{ id: 'format', description: '修饰基础回答',
                run: state => ({ answer: state.answer + '!' }), routes: [route.deliver('answer')] }],
        routes: { greet: [route.to('format')] },
    } });
console.log(await upgraded.run(at.read()));

策略与实现 ​

接口参考、使用示例与开发指南。