Skip to content
English

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 }));

策略与实现 ​

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