import { type TracerProvider } from '@opentelemetry/api'; import type { ManagedReActAgentInterceptor } from '../managed-interceptor'; export type TracingInterceptorOptions = { /** * OTel TracerProvider 实例。 * 不传则使用 @opentelemetry/api 的全局 Provider(可能是 no-op)。 */ tracerProvider?: TracerProvider; /** * Tracer 名称,默认 '@agforge/engine' */ tracerName?: string; /** * GenAI Provider 名称(Required 属性)。 * 应使用规范定义的 well-known 值,如 'openai', 'anthropic', 'deepseek' 等。 * @see https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/ */ providerName: string; /** * Agent 名称(用于 invoke_agent Span 命名)。 * 不传则 Span 名称为 'invoke_agent'。 */ agentName?: string; /** * Agent 唯一标识 */ agentId?: string; /** * Agent 描述(Conditionally Required when available) */ agentDescription?: string; /** * Agent 版本(Conditionally Required when available) */ agentVersion?: string; /** * 会话/对话 ID,用于关联同一会话内的多次 Agent 调用。 */ conversationId?: string; /** * 是否在 Span 属性中记录 LLM 输入/输出消息内容。 * 默认 false(出于隐私/性能考虑),对应规范的 Opt-In 级别。 * 设为 true 时使用 gen_ai.input.messages / gen_ai.output.messages 结构化属性。 */ captureMessageContent?: boolean; /** * 是否记录工具调用的参数和结果。 * 默认 false(对应规范的 Opt-In 级别)。 * 设为 true 时使用 gen_ai.tool.call.arguments / gen_ai.tool.call.result 属性。 */ captureToolData?: boolean; /** * 是否记录可用工具定义列表。 * 默认 false(规范不建议默认记录,因为数据量可能很大)。 */ captureToolDefinitions?: boolean; }; /** * 创建追踪拦截器组。 * * 返回两个拦截器(均定义在同一文件中): * - tracingOuter (SYSTEM):Span 创建与生命周期管理、计时、Token 累计、错误处理 * - tracingInner (SYSTEM_POST):在 llmRequest 最内层,通过 `executeContext.getSharedContext()` * 获取 tracingOuter 创建的活跃 Span,直接记录经过所有拦截器变换后的最终消息内容 * * tracingOuter 与 tracingInner 通过 sharedContext 上的 Symbol key 传递 Span, * 通过 scoped data 传递 parent Span,不依赖 OTel Context 传播。 * @see docs/tracing-design.md §7.3 */ export declare const createTracingInterceptors: (options: TracingInterceptorOptions) => Array;