跳到主要内容

面向每个 TypeScript LLM 堆栈的 AI 可观测性

·阅读时长 6 分钟
MLflow maintainers
MLflow 维护者
Vercel AI SDK tracing demo in MLflow

TypeScript 和 JavaScript 继续主导全栈 AI 开发,MLflow 3.6 加强了对这一现实的承诺。除了今年早些时候推出的 OpenAI SDK 钩子外,我们现在为 Vercel AI SDKLangChain.jsLangGraph.jsMastraAnthropicGemini 提供了自动跟踪集成。

在实际操作中,来自现代 JS LLM 栈的任何跟踪信息都将与您的 Python 服务一样,以相同的 MLflow 实验 UI 显示,包括提示/响应有效载荷、Token 使用量、工具结果和错误元数据。

Vercel AI SDK tracing demo in MLflow

设置 MLflow

让 MLflow 与 JS 栈并行运行不再需要 Python 环境

  • Docker Compose 捆绑包 – 对于最简单的本地或小型团队部署,强烈推荐使用 MLflow 的官方 Docker Compose 设置。要开始使用,只需克隆 GitHub 仓库,然后导航到仓库中提供的 docker-compose 目录。运行 docker compose up -d 即可启动整个 MLflow 跟踪堆栈:这将自动启动 MLflow 跟踪服务器以及预配置的 SQL 后端(如 PostgreSQL),两者都已预先连接,以便无缝摄取 OpenTelemetry 协议 (OTLP) 跟踪。

  • 托管解决方案 – MLflow 在许多云提供商上均可用,例如 Databricks、AWS SageMaker Experiments、Azure ML、Nebius 等。您可以将 MLFLOW_TRACKING_URI 指向 Databricks 的免费版本或其他托管的 MLflow 服务,开始发出跟踪信息,而无需自己托管任何内容。

Vercel AI SDK / Next.js

Vercel AI SDK 跟踪建立在 OpenTelemetry 之上,并设计为最大限度地减少仪器化工作。由于 MLflow 跟踪服务器与 OpenTelemetry 兼容,您只需最少的配置即可直接将 Vercel AI SDK 跟踪发送到 MLflow 跟踪服务器。

以下代码片段展示了如何使用 Vercel AI SDK 和 Next.js 为 LLM 应用程序设置跟踪。

.env.local
OTEL_EXPORTER_OTLP_ENDPOINT=<your-mlflow-tracking-server-endpoint>
OTEL_EXPORTER_OTLP_TRACES_HEADERS=x-mlflow-experiment-id=<your-experiment-id>
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
instrumentation.ts
import { registerOTel } from "@vercel/otel";

export async function register() {
registerOTel({ serviceName: "next-app" });
}
route.ts
import { openai } from "@ai-sdk/openai";
import { generateText } from "ai";

export async function POST(req: Request) {
const { prompt } = await req.json();

const { text } = await generateText({
model: openai("gpt-4o-mini"),
maxOutputTokens: 100,
prompt,
experimental_telemetry: { isEnabled: true },
});

return new Response(JSON.stringify({ text }), {
headers: { "Content-Type": "application/json" },
});
}

有关更多详细信息,请参阅 Vercel AI SDK 跟踪

Mastra

Mastra 包含一个内置的 OpenTelemetry 导出器,可以轻松地将跟踪数据直接发送到 MLflow 跟踪服务器。要启用跟踪,只需在 Mastra 设置中添加一个 observability 配置块。通过提供一个指向您的 MLflow 服务器的 OpenTelemetry 导出器实例,您的所有 Mastra 工作流——包括链和工具的完整层次结构——都将在 MLflow 中自动跟踪和可视化。此设置保留了工作流组件之间的结构和关系,因此您可以在 MLflow UI 中直接查看端到端工作流执行的详细跟踪。

import { OtelExporter } from "@mastra/otel-exporter";

export const mastra = new Mastra({
workflows: { weatherWorkflow },
...

// Add the following observability configuration to enable OpenTelemetry tracing.
observability: {
configs: {
otel: {
serviceName: "mastra-app",
exporters: [new OtelExporter({
provider: {
custom: {
// Specify tracking server URI with the `/v1/traces` path.
endpoint: "https://:5000/v1/traces",
// Set the MLflow experiment ID in the header.
headers: { "x-mlflow-experiment-id": "<your-experiment-id>"},
// MLflow supports HTTP/Protobuf protocol.
protocol: "http/protobuf"
}
}
})]
}
}
},
});

启动 npm run dev,与 Playground 交互,然后刷新 MLflow UI 以查看跟踪。

有关更多详细信息,请参阅 Mastra 跟踪

LangChain.js / LangGraph.js

LangChain.js 仪器化基于 OpenTelemetry。配置一次跟踪器,MLflow 就会通过 OTLP /v1/traces 端点摄取所有跟踪(链、代理、检索器、工具调用和异步流)。

import {
NodeTracerProvider,
SimpleSpanProcessor,
} from "@opentelemetry/sdk-trace-node";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
import { LangChainInstrumentation } from "@arizeai/openinference-instrumentation-langchain";
import * as CallbackManagerModule from "@langchain/core/callbacks/manager";

const exporter = new OTLPTraceExporter({
url: "https://:5000/v1/traces",
headers: { "x-mlflow-experiment-id": "123" },
});

const provider = new NodeTracerProvider();
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();

new LangChainInstrumentation().manuallyInstrument(CallbackManagerModule);

有关更多详细信息,请参阅 LangChain 跟踪LangGraph 跟踪

OpenAI SDK

mlflow-openai 包装了官方的 OpenAI SDK,因此您可以跟踪对 OpenAI 的每一次调用,并捕获消息、工具调用、Token 使用量和错误。

import { OpenAI } from "openai";
import { tracedOpenAI } from "mlflow-openai";
import * as mlflow from "mlflow-tracing";

mlflow.init({ trackingUri: "https://:5000", experimentId: "openai" });

const client = tracedOpenAI(new OpenAI({ apiKey: process.env.OPENAI_API_KEY }));

const response = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "What's the weather like?" }],
});

有关更多详细信息,请参阅 OpenAI 跟踪

Anthropic SDK

mlflow-anthropic 包装了官方 SDK,因此您只需一行代码即可跟踪 Claude 调用(同步或异步)。

import Anthropic from "@anthropic-ai/sdk";
import { tracedAnthropic } from "mlflow-anthropic";
import * as mlflow from "mlflow-tracing";

mlflow.init({
trackingUri: "https://:5000",
experimentId: "anthropic",
});

const client = tracedAnthropic(new Anthropic());
const message = await client.messages.create({
model: "claude-sonnet-4-5-20250929",
max_tokens: 1024,
messages: [
{ role: "user", content: "Summarize the new TypeScript release." },
],
});

有关更多详细信息,请参阅 Anthropic 跟踪

Gemini SDK

通过 mlflow-gemini 支持 Google 的 GenAI SDK,涵盖 models.generateContent() 以及函数调用元数据。

import { GoogleGenAI } from "@google/genai";
import { tracedGemini } from "mlflow-gemini";

const client = tracedGemini(
new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY }),
);
const response = await client.models.generateContent({
model: "gemini-2.5-flash",
contents: "List three GenAI observability KPIs.",
});

有关更多详细信息,请参阅 Gemini 跟踪

后续步骤

通过打开一个 Issue 告诉我们您接下来想要哪个 JavaScript 框架!