Skip to content
English

MockGPT:直接生成与 Provider 注入 ​

直接取得字符串或 JSON;需要检验模型通信时,将同一个实例注入 Provider。

从 @jangts/agent-core/mock 导入,不需要单独安装模拟器。new MockGPT({rules,fallback?,seed?,clock?,recordLimit?,maxBodyBytes?,maxOutputChars?,stream?,selectPrompt?}) 固定配置。规则依次匹配 prompt、model、同步 when,times 限制命中次数;字符串精确匹配,RegExp 可捕获分组。函数生成器收到冻结的 request、prompt、match、signal、callIndex、ruleIndex、random、clock 和 report。

await mock.generate({model,messages,...fields},{signal?}) 返回字符串、原生 JSON 或显式 ResponseDescription 的独立冻结快照。直接调用不创建 HTTP 对象,也不执行描述的延迟、SSE 或 HTTP 故障;描述由调用方解释。输入可选对象字段 undefined 会省略,数组空槽、数组 undefined、循环引用与非 JSON 数据拒绝;输出 undefined 不省略。JSON 快照最多64层、100000个值节点,请求超限为 MOCK_REQUEST(400),生成结果超限为 MOCK_GENERATION;字段只读取一次,不执行隐藏 toJSON,原型名称作为普通自有数据字段保留。失败或取消不归还已分配的规则次数。

mock.fetch 是已绑定的标准 fetch 适配,可注入 Support.CompatibleModelProvider。routes 声明 /v1/chat/completions 与 /chat/completions;只接受 POST,支持 JSON 与 stream=true SSE、一个 choice。它不全局拦截请求,也不转发真实模型。

records 是有界内存元数据快照,默认100条,recordLimit=0关闭;counts 是规则命中数,activeRequests 包括未消费的 SSE。活动请求存在时 reset 拒绝,空闲时清空记录、计数及 seed,不重置自定义闭包。固定 seed 与 clock 适合确定性测试,不代表真实模型质量、延迟或容量。错误以 MockGPTError.code 和 details 区分:配置、请求、未匹配、输出、取消和传输边界。

由简到繁的同业务示例 ​

直接生成原生 JSON ​

入门 · Node.js

ts
import { MockGPT } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: { online: true, source: 'fixture' } }] });
const value = await mock.generate({ model: 'demo', messages: [{ role: 'user', content: '服务状态' }] });
console.log(value); // { online: true, source: 'fixture' }
console.log(mock.counts, mock.records);
js
import { MockGPT } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: { online: true, source: 'fixture' } }] });
const value = await mock.generate({ model: 'demo', messages: [{ role: 'user', content: '服务状态' }] });
console.log(value); // { online: true, source: 'fixture' }
console.log(mock.counts, mock.records);

同一实例注入真实 Core 模型边界 ​

配置 · Node.js

ts
import { ModelRunner, Support } from '@jangts/agent-core';
import { MockGPT, responses } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: responses.text('服务在线。', { chunkSize: 2, wireChunkSize: 3 }) }] });
const provider = new Support.CompatibleModelProvider({
  config: { baseUrl: 'https://mock.local/v1', apiKey: 'offline-example', model: 'demo' },
  ports: { request: mock.fetch },
});
const result = await new ModelRunner({ provider, maxCalls: 1 }).invoke('服务状态');
console.log(result.value, result.invocation.status);
js
import { ModelRunner, Support } from '@jangts/agent-core';
import { MockGPT, responses } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: responses.text('服务在线。', { chunkSize: 2, wireChunkSize: 3 }) }] });
const provider = new Support.CompatibleModelProvider({
    config: { baseUrl: 'https://mock.local/v1', apiKey: 'offline-example', model: 'demo' },
    ports: { request: mock.fetch },
});
const result = await new ModelRunner({ provider, maxCalls: 1 }).invoke('服务状态');
console.log(result.value, result.invocation.status);

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