Skip to content

集成 Langfuse 遥测与离线评测 - #8

Open
hifizz wants to merge 1 commit into
mainfrom
claude/observability-telemetry-research-npn7tp
Open

集成 Langfuse 遥测与离线评测#8
hifizz wants to merge 1 commit into
mainfrom
claude/observability-telemetry-research-npn7tp

Conversation

@hifizz

@hifizz hifizz commented Jul 14, 2026

Copy link
Copy Markdown
Owner

概述

集成 Langfuse 作为可观测与评测后端,实现对话链路的完整追踪、用户反馈打分、以及离线数据集评测能力。遥测为可选降级功能,未配置 LANGFUSE_* 时零开销停用。

关键变更

遥测基础设施

  • instrumentation.ts:Next.js 启动钩子,注册 OTel NodeTracerProvider 与 AI SDK v7 全局遥测集成
  • lib/observability/register.ts:OTel provider 与 Langfuse 集成的注册逻辑(含重复注册防护)
  • lib/observability/langfuse.ts:Langfuse 客户端与 span processor 的全局单例管理、配置检测、traceId 校验
  • constants/observability.ts:trace 名、score 名、functionId 等共享命名的集中定义

聊天链路集成

  • app/api/chat/route.ts

    • 根观测包装(startActiveObservation("chat-turn"))与会话分组(sessionId = threadId
    • 将 traceId 下发为 assistant 消息 id(generateMessageId),实现消息与 trace 的一一对应
    • 流式响应的 onEnd/onError/onAbort 回调收尾根观测
    • after() 冲刷 span 批次(serverless 部署保障)
    • 为各 LLM 调用点标记 functionId(遥测分组)
  • app/api/feedback/route.ts:点赞/点踩 → Langfuse score 回写,幂等 id 防重复计数

  • app/page.tsx:FeedbackAdapter 实现,fire-and-forget POST /api/feedback

离线评测

  • scripts/eval.ts
    • 支持内置样例集或 Langfuse Datasets(LANGFUSE_EVAL_DATASET 环境变量)
    • 规则断言(输出格式检查)+ LLM-as-a-judge(质量评分)两层 evaluator
    • 结果上报为 experiment run,Langfuse UI 可跨 run 对比

代码格式化

  • components/examples/base.tsx:统一改用 Prettier 推荐的行尾无分号风格(与项目 prettier 配置对齐)

依赖与配置

  • package.json:新增 pnpm eval 脚本、Langfuse 相关依赖(@langfuse/vercel-ai-sdk@langfuse/client@opentelemetry/sdk-trace-node
  • .env.example:补充 LANGFUSE_PUBLIC_KEYLANGFUSE_SECRET_KEYLANGFUSE_BASE_URL 配置说明
  • lib/ai/embeddings.tslib/attachments/insights.ts:为 embedding 与 PDF 摘要生成调用标记 functionId

文档

  • docs/observability/01-调研报告.md:AI SDK v7 遥测体系、Langfuse vs LangSmith 对比、选型依据
  • docs/observability/02-设计方案.md:数据

https://claude.ai/code/session_01AQcZQKQtg6kbdRiFTEQJdG

调研结论见 docs/observability/01-调研报告.md(AI SDK v7 遥测重构、
Langfuse vs LangSmith 对比与选型),设计取舍见 02-设计方案.md。

遥测:
- instrumentation.ts 启动注册 NodeTracerProvider + LangfuseSpanProcessor
  + AI SDK v7 全局遥测集成(@langfuse/vercel-ai-sdk)
- chat route 以 chat-turn 根观测包装:sessionId=threadId、
  普通/深度研究 tag、onEnd/onError/onAbort 收尾、after() 冲刷
- PDF 洞察与 RAG embedding 自动追踪并标 functionId
- 未配置 LANGFUSE_* 时整体停用、零开销(与 R2/search 降级惯例一致)

评测:
- assistant 消息 id 即该轮 traceId(服务端 generateMessageId 下发),
  👍/👎 经 /api/feedback 以幂等 score 回写对应 trace
- pnpm eval 离线评测:Langfuse experiment run,规则断言 +
  LLM-as-a-judge,支持内置样例集或远端 dataset

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AQcZQKQtg6kbdRiFTEQJdG
@cr-gpt

cr-gpt Bot commented Jul 14, 2026

Copy link
Copy Markdown

Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information

@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
thread-chatbot Error Error Jul 14, 2026 5:40pm

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants