Documentation Index
Fetch the complete documentation index at: https://ai.aidalinfo.fr/llms.txt
Use this file to discover all available pages before exploring further.
AI Kit s’intègre avec Langfuse pour tracer les appels generate/stream. Cette page couvre l’installation des dépendances, l’initialisation du processeur et l’activation côté agents.
Dépendances
pnpm add @langfuse/otel @opentelemetry/sdk-trace-node
# ou
npm install @langfuse/otel @opentelemetry/sdk-trace-node
Variables d’environnement
LANGFUSE_PUBLIC_KEY=pk-lf-...
LANGFUSE_SECRET_KEY=sk-lf-...
# optionnel
# LANGFUSE_BASE_URL=https://us.cloud.langfuse.com
Initialiser Langfuse
// instrumentation.ts
import { ensureLangfuseTelemetry } from "@ai_kit/core";
const telemetry = await ensureLangfuseTelemetry({
shouldExportSpan: ({ otelSpan }) =>
otelSpan?.instrumentationScope?.name !== "next.js",
});
export const flushLangfuse = () => telemetry.flush();
ensureLangfuseTelemetry charge dynamiquement @langfuse/otel, enregistre un NodeTracerProvider et renvoie un handle.
- Le mode
autoFlush vaut "process" par défaut : des hooks beforeExit, SIGINT, SIGTERM déclenchent flush()/shutdown().
- Laissez l’initialisation la plus tôt possible (entrée serveur, plugin, etc.).
Exemple Next.js
import { after } from "next/server";
import { ensureLangfuseTelemetry } from "@ai_kit/core";
const telemetry = await ensureLangfuseTelemetry();
export async function POST(req: Request) {
const result = await agent.stream({ /* ... */ });
after(async () => {
await telemetry.flush();
});
return result.toAIStreamResponse();
}
Activer la télémétrie sur un agent
import { Agent } from "@ai_kit/core";
import { openai } from "@ai-sdk/openai";
const supportAgent = new Agent({
name: "support-assistant",
model: openai("gpt-4.1-mini"),
telemetry: true,
});
Vous pouvez ajuster dynamiquement :
supportAgent.withTelemetry(false);
await supportAgent.generate({
prompt: "Crée un ticket d'incident pour l'utilisateur #42",
telemetry: {
functionId: "support-ticket",
metadata: { ticketId: "42", priority: "high" },
recordInputs: false,
},
});
telemetry fusionne ses champs avec experimental_telemetry.
- Les overrides sont ignorés si l’agent n’est pas en mode télémétrie, sauf si vous forcez
experimental_telemetry.isEnabled.
Workflows instrumentés
Les workflows partagent la même pile OTEL. Référez-vous à Télémétrie workflows pour les options dédiées (traceName, metadata, userId, etc.).
Exemple Nitro / Nuxt
// server/plugins/langfuse-telemetry.ts
import { ensureLangfuseTelemetry } from "@ai_kit/core";
type Handle = Awaited<ReturnType<typeof ensureLangfuseTelemetry>>;
let telemetryPromise: Promise<Handle> | undefined;
const getTelemetry = () => {
telemetryPromise ||= ensureLangfuseTelemetry({
shouldExportSpan: ({ otelSpan }) => {
const scope = otelSpan?.instrumentationScope?.name;
return scope !== "nuxt" && scope !== "nitro";
},
});
return telemetryPromise;
};
export const flushLangfuse = async () => {
const telemetry = await getTelemetry();
await telemetry.flush();
};
export default defineNitroPlugin(async nitroApp => {
const telemetry = await getTelemetry();
nitroApp.hooks.hook("close", async () => {
await telemetry.shutdown();
});
});
Ressources utiles