@ backendkit-labs/ 代理服务器
用于跟踪的 OpenTeleometry 导出 @backendkit-labs/agent-core选择符合下列条件的出口商:
如何运行遥测:
| 你有过 | 使用 |
|---|---|
| 一个能说OTLP/HTTP的收藏器或后端(Jaeger, Tempo, Langfuse, Datadog, OpenTeleometry Collector...)和 没有 打开遥测 SDK | otlpHttpSpanExporter |
| 已在此过程中注册的 OpenTeleometry SDK( 自动仪器、 自己的处理器/ 出口器) | otelApiSpanExporter |
import { createBaseEngine } from '@backendkit-labs/agent-core';
import { otlpHttpSpanExporter } from '@backendkit-labs/agent-otel';
const exporter = otlpHttpSpanExporter({ endpoint: 'http://localhost:4318', serviceName: 'support-agent' });
const engine = createBaseEngine({
// ...
observability: { tracing: { exporter } },
});
// on shutdown
await exporter.shutdown();
import { otelApiSpanExporter } from '@backendkit-labs/agent-otel'; // needs @opentelemetry/api
observability: { tracing: { exporter: otelApiSpanExporter() } }
你得到的东西
每张一张 engine.run()数字 :
agent.run
└─ invoke_agent Main
├─ chat deepseek-chat (tokens, model, provider, cost, cache tokens)
├─ execute_tool read_file (success, duration — parallel tools overlap in time)
└─ chat deepseek-chat
属性遵循 OpenTeleometry GenAI 语义公约数字 : gen_ai.operation.name
(单位:千美元)invoke_agent 编号 : chat 编号 : execute_tool, (中文(简体) ), gen_ai.request.model, (中文(简体) ), gen_ai.provider.name, (中文(简体) ),
gen_ai.usage.input_tokens, (中文(简体) ), gen_ai.usage.output_tokens, (中文(简体) ), gen_ai.usage.cache_read.input_tokens, (中文(简体) ),
gen_ai.usage.cache_creation.input_tokens, (中文(简体) ), gen_ai.agent.id/name, (中文(简体) ), gen_ai.tool.name。任何与
代理核心(成本以美元计,原始跟踪识别码、护卫行动、为什么额外发出LLM呼叫)
bk.*,比如说. bk.cost_usd, (中文(简体) ), bk.llm.purpose (单位:千美元)context_summary, (中文(简体) ), structured_output, (中文(简体) ), bk.guardrail.<name>.<action>。 。 。 .
对话内容从不导出 . Spans只携带姓名、期限、记号和身份证:否 提示、答案、工具参数或工具结果.
要求数 @backendkit-labs/agent-core 与 llm_call 编号 : tool_call 宽度(0.28+)。 你只有0.27岁
agent.run 财务报告和审定财务报表 invoke_agent。 。 。 .
otlpHttpSpanExporter(options)
将OTLP/JSON发送给 <endpoint>/v1/traces没有SDK 没有依附关系.
| 选项 | 默认 | |
|---|---|---|
endpoint | OTEL_EXPORTER_OTLP_ENDPOINT 或者说 http://localhost:4318 | /v1/traces 除非已经附上 |
headers | – 说吧 – | 譬如说. { Authorization: 'Basic …' } |
serviceName | agent | service.name 资源属性 |
resourceAttributes | – 说吧 – | deployment.environment, (中文(简体) ), service.version. |
batchSize | 64国道 | 发送前缓冲跨度 |
flushIntervalMs | 联合国 | 此长后发送部分批次( 时间为 unref(d) 国家 |
timeoutMs | 1万个 | 每个请求 |
onError | – 说吧 – | 在此报告一个失败的发送 那批货被丢掉无法到达代理 |
fetch | 全球 fetch | 测试或海关运输 |
返回函数为 flush() 财务报告和审定财务报表 shutdown()。发送是序列化的,从不重叠.
ID从代理-core的ID中衍生出决定性的ID,所以父母/孩子的联系被保留了下来.
otelApiSpanExporter(options)
重建跨度 @opentelemetry/api (单位:千美元)options.tracer默认值
trace.getTracer('@backendkit-labs/agent-core')),所以他们到达任何你的SDK出口.
OpenTeleometry API 无法选择一个跨度的代号,孩子必须从其父母的真实跨度创建.
代理核心出口在结束时(先是孩子),所以这个适配器在根上保持一个跟踪的间隔
agent.run 结尾,然后创建树父母- 首先是原始的起始/结束时间。 后果:
- 当运行完成时,而不是运行时,运行的Spans出现在后端.
- 从未结束( 崩溃) 的跑步会缓冲: 呼叫
exporter.flush()关闭(按 父 从未到达 .maxBufferedSpans(默认 5000) 范围内存 . @opentelemetry/api是一个可选的对等依赖;没有它,出口商就会在创建时投出一个明显的错误.
已验证
单位测试外加一个真正的引擎运行 通过两个出口商。 API 适配器也被检查为真实
@opentelemetry/sdk-trace-base 提供者:一个跟踪,正确的等级,平行工具在时间上重叠.