Skip to content
English

子执行:隔离记录,共享祖先额度 ​

子 Runner 不继承对话和输出接收器,但不能绕过父级预算、取消和期限。

children 配置请求共享的 maxDepth、maxConcurrentCalls 和 maxChildren,缺省为单层、串行执行。同一个 Runner 的调用不能重叠;多个子 Runner 的模型调用共享根容量。transports 显式指定子执行可用集合,不自动继承父级的全部模型可见能力。

maxCalls 是子执行局部上限,reserveCalls 为父级保留后续收尾额度;没有可用额度时拒绝。父级 totalCallCount 包含后代消耗,父级 callCount、journal 与子级各自隔离。子执行属于父请求的生命周期,业务授权由 App 提供。

由简到繁的同业务示例 ​

为子执行配置一次调用额度 ​

入门 · Node.js

ts
import { ModelRunner } from '@jangts/agent-core/model';
const provider = {
  async *stream(messages: readonly { content: string }[]) {
    yield '收到:' + messages.at(-1)!.content;
  },
};
const parent = new ModelRunner({ provider, maxCalls: 3 });
const child = parent.createChild({ id: 'service-review', maxCalls: 1, reserveCalls: 1,
  timeoutMs: 10000, transports: [] });
const report = await child.invoke('独立核对服务状态');
console.log(report.value, parent.totalCallCount, child.callCount);
js
import { ModelRunner } from '@jangts/agent-core/model';
const provider = {
    async *stream(messages) {
        yield '收到:' + messages.at(-1).content;
    },
};
const parent = new ModelRunner({ provider, maxCalls: 3 });
const child = parent.createChild({ id: 'service-review', maxCalls: 1, reserveCalls: 1,
    timeoutMs: 10000, transports: [] });
const report = await child.invoke('独立核对服务状态');
console.log(report.value, parent.totalCallCount, child.callCount);

子报告返回后再由父级完成回答 ​

配置 · Node.js

子任务完成后再调用父模型,没有 Promise.all。父级仍负责核对报告来源和业务完成性。

ts
import { ModelRunner } from '@jangts/agent-core/model';
const provider = {
  async *stream(messages: readonly { content: string }[]) {
    yield '收到:' + messages.at(-1)!.content;
  },
};
const parent = new ModelRunner({ provider, maxCalls: 3 });
const child = parent.createChild({ id: 'service-review', maxCalls: 1, reserveCalls: 1,
  timeoutMs: 10000, transports: [] });
const report = await child.invoke('核对状态证据');
const answer = await parent.invoke('根据已核对报告回答:' + report.value);
console.log(answer.value);
js
import { ModelRunner } from '@jangts/agent-core/model';
const provider = {
    async *stream(messages) {
        yield '收到:' + messages.at(-1).content;
    },
};
const parent = new ModelRunner({ provider, maxCalls: 3 });
const child = parent.createChild({ id: 'service-review', maxCalls: 1, reserveCalls: 1,
    timeoutMs: 10000, transports: [] });
const report = await child.invoke('核对状态证据');
const answer = await parent.invoke('根据已核对报告回答:' + report.value);
console.log(answer.value);

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