Skip to content
English

Provider 观察与 App 自己的记录目标 ​

稳定 Provider 绑定观察规则,本次请求只关联自己的目标,子作用域继承关联。

ProviderObservation 是 wire 边界的 Support 观察,不是 Core 的执行事件。接受规则可区分 metadata 和 content,未启用时不构造内容 payload 或读取错误正文。它是失败隔离的旁路,不改变模型结果、取消和重试。

createProviderObservationScope 返回 observer 与 attach。observer 可在稳定 Provider 构造时绑定,attach 在本次请求绑定日志目标。App 拥有脱敏、读取/记录权限与保留期,Core 不理解这个目标是不是文件、数据库或消息记录。

由简到繁的同业务示例 ​

只观察元数据 ​

入门 · Node.js

ts
import { Support } from '@jangts/agent-core';
const scope = Support.createProviderObservationScope<{ requestId: string }>({
  accepts(_owner, descriptor) { return descriptor.content === 'metadata'; },
  write(owner, event, spanId) { console.log(owner.requestId, spanId, event.event); },
});
console.log(scope.observer);
js
import { Support } from '@jangts/agent-core';
const scope = Support.createProviderObservationScope({
    accepts(_owner, descriptor) { return descriptor.content === 'metadata'; },
    write(owner, event, spanId) { console.log(owner.requestId, spanId, event.event); },
});
console.log(scope.observer);

按本次请求绑定自己的关联值 ​

配置 · Node.js

此例只装配;实际调用时把该 diagnostics 配入对应请求 execution,不把 App ID 强塞进 Core 身份。

ts
import { Support } from '@jangts/agent-core';
import { createDiagnostics } from '@jangts/agent-core/diagnostics';
const scope = Support.createProviderObservationScope<{ requestId: string }>({
  accepts: (_owner, descriptor) => descriptor.content === 'metadata',
  write(owner, event, spanId) { console.log(owner.requestId, spanId, event.event); },
});
const provider = new Support.CompatibleModelProvider({
  config: { baseUrl: process.env.MODEL_BASE_URL!, apiKey: process.env.MODEL_API_KEY!, model: process.env.MODEL_NAME! },
  observe: { provider: scope.observer },
});
const diagnostics = scope.attach(createDiagnostics(), { requestId: 'app-request-1' });
console.log(provider, diagnostics.identity?.runId);
js
import { Support } from '@jangts/agent-core';
import { createDiagnostics } from '@jangts/agent-core/diagnostics';
const scope = Support.createProviderObservationScope({
    accepts: (_owner, descriptor) => descriptor.content === 'metadata',
    write(owner, event, spanId) { console.log(owner.requestId, spanId, event.event); },
});
const provider = new Support.CompatibleModelProvider({
    config: { baseUrl: process.env.MODEL_BASE_URL, apiKey: process.env.MODEL_API_KEY, model: process.env.MODEL_NAME },
    observe: { provider: scope.observer },
});
const diagnostics = scope.attach(createDiagnostics(), { requestId: 'app-request-1' });
console.log(provider, diagnostics.identity?.runId);

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