PostHog LLM Analytics
PostHog LLM Analytics
PostHog은 오픈소스 제품 분석 플랫폼이에요. PostHog LLM Analytics 통합을 사용하면 제품 분석과 함께 LLM 사용량을 추적해 AI 기능이 사용자 행동에 어떤 영향을 미치는지 이해할 수 있어요. PostHog는 다음을 제공해요:
출처: 문서
본문
설정
PostHog는 OpenTelemetry를 통해 AI SDK 텔레메트리 데이터를 지원해요. @posthog/ai 패키지의 PostHogTraceExporter는 gen_ai.* span을 PostHog의 OTLP 수집 엔드포인트로 보내고, 거기서 자동으로 $ai_generation 이벤트로 변환돼요.
Next.js
Next.js는 instrumentation hook을 통한 OpenTelemetry 계측을 기본 지원해요.
Step 1. 의존성 설치
npm install @posthog/ai @opentelemetry/sdk-node @opentelemetry/resources @ai-sdk/otel
Step 2. 프로젝트 루트에 instrumentation.ts 파일을 만들고 OTel 설정과 함께 AI SDK 텔레메트리 통합을 등록해요:
import { registerTelemetry } from 'ai';
import { LegacyOpenTelemetry } from '@ai-sdk/otel';
import { NodeSDK } from '@opentelemetry/sdk-node';
import { resourceFromAttributes } from '@opentelemetry/resources';
import { PostHogTraceExporter } from '@posthog/ai/otel';
registerTelemetry(new LegacyOpenTelemetry());
export function register() {
const sdk = new NodeSDK({
resource: resourceFromAttributes({
'service.name': 'my-nextjs-app',
}),
traceExporter: new PostHogTraceExporter({
apiKey: proces...EY!,
host: 'https://us.i.posthog.com', // use https://eu.i.posthog.com for EU
}),
});
sdk.start();
}
Step 3. 라우트 핸들러나 서버 액션에서 텔레메트리가 활성화된 AI SDK를 사용해요
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
const result = await generateText({
model: openai('gpt-6-astra'),
prompt: 'Tell me a fun fact about hedgehogs.',
telemetry: {
functionId: 'my-ai-function',
metadata: {
posthog_distinct_id: 'user_123', // optional: links events to a PostHog user
},
},
});
Node.js
Step 1. 의존성 설치
npm install @posthog/ai @opentelemetry/sdk-node @opentelemetry/resources @ai-sdk/otel
Step 2. PostHog의 trace exporter로 OpenTelemetry SDK 초기화
import { NodeSDK } from '@opentelemetry/sdk-node';
import { resourceFromAttributes } from '@opentelemetry/resources';
import { PostHogTraceExporter } from '@posthog/ai/otel';
import { registerTelemetry } from 'ai';
import { LegacyOpenTelemetry } from '@ai-sdk/otel';
const sdk = new NodeSDK({
resource: resourceFromAttributes({
'service.name': 'my-ai-app',
}),
traceExporter: new PostHogTraceExporter({
apiKey: '<your...y>',
host: 'https://us.i.posthog.com', // use https://eu.i.posthog.com for EU
}),
});
sdk.start();
registerTelemetry(new LegacyOpenTelemetry());
Step 3. AI SDK를 사용해요. 통합이 등록되면 텔레메트리가 자동으로 캡처돼요:
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
const result = await generateText({
model: openai('gpt-6-astra'),
prompt: 'Tell me a fun fact about hedgehogs.',
telemetry: {
functionId: 'my-ai-function',
metadata: {
posthog_distinct_id: 'user_123', // optional: links events to a PostHog user
},
},
});
console.log(result.text);
await sdk.shutdown();
통합은
streamText같은 스트리밍 함수를 지원해요. 스트리밍된 각 호출은 PostHog가 캡처하는ai.streamTextspan을 생성해요.
구성
이벤트를 PostHog 사용자에 연결
metadata 필드에 posthog_distinct_id를 전달해 LLM 이벤트를 PostHog의 특정 사용자와 연관지어요. 생략하면 이벤트가 익명으로 캡처돼요.
const result = await generateText({
model: openai('gpt-6-astra'),
prompt: 'Write a short story about a cat.',
telemetry: {
metadata: {
posthog_distinct_id: 'user_123',
},
},
});
프라이버시 제어
recordInputs와 recordOutputs를 false로 설정해 입력과 출력 기록을 비활성화할 수 있어요:
const result = await generateText({
model: openai('gpt-6-astra'),
prompt: 'Write a short story about a cat.',
telemetry: {
recordInputs: false,
recordOutputs: false,
},
});
자료
더 알아보기 (Learn more)
- 출처 문서: PostHog LLM Analytics