Agent:先运行,再逐步绑定 Tool 与依赖
Engine 执行有界循环;绑定 Workflow 后,每次只传状态中变化的数据。
无 Workflow 时,run 接受 CoreStep,步骤返回明确的 continue 或 complete。绑定 Workflow 后,run 接受该 Workflow 的 State,返回业务 Result;不是新的结果信封。模型和工具调用另外返回带 invocation 的统一结果。
构造时可省略 Workflow,稍后 bindWorkflow 一次;两种装配方式使用同一个 run。一个 Engine 只绑定一个 Workflow,不提供运行时切换 Workflow。稳定依赖属于实例,本次输入、取消信号属于请求。默认最多 8 轮,maxRounds 是轮次预算,不是节点数;同轮多个阶段不多扣一轮。
节点 run 仅返回变化字段。Core 在取消及字段检查后提交;requires/provides 是运行时合同,不能把未得到的数据伪造成已完成。自编排 CoreStep 与显式 Workflow 都保留。
由简到繁的同业务示例
一个普通步骤即可运行
入门 · Node.js
ts
import { AgentCoreEngine } from '@jangts/agent-core/engine';
const agent = new AgentCoreEngine<string>();
const answer = await agent.run(() => ({ type: 'complete', value: '你好,Core' }));
console.log(answer);js
import { AgentCoreEngine } from '@jangts/agent-core/engine';
const agent = new AgentCoreEngine();
const answer = await agent.run(() => ({ type: 'complete', value: '你好,Core' }));
console.log(answer);增加显式 Workflow,仍然调用 run
配置 · 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 agent = new AgentCoreEngine({ workflow });
console.log(await agent.run({ name: 'Ivan' }));
console.log(await agent.run({ name: '访客' }));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 agent = new AgentCoreEngine({ workflow });
console.log(await agent.run({ name: 'Ivan' }));
console.log(await agent.run({ name: '访客' }));依赖稍后就绪时绑定一次
扩展 · Node.js
没有重新传 Workflow。传入的信号与实例信号合并;取消不会让迟到结果成为成功提交。
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 agent = new AgentCoreEngine<string>({ maxRounds: 2 }).bindWorkflow(workflow);
const controller = new AbortController();
console.log(await agent.run({ name: 'Ivan' }, { signal: controller.signal }));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 agent = new AgentCoreEngine({ maxRounds: 2 }).bindWorkflow(workflow);
const controller = new AbortController();
console.log(await agent.run({ name: 'Ivan' }, { signal: controller.signal }));