子执行:隔离记录,共享祖先额度
子 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);