核心可观测性功能用户反馈

用户反馈

用户反馈衡量你的 AI 是否真的帮到了用户。借助它你可以发现质量问题、构建更优的评估数据集,并基于真实用户体验来确定改进优先级。在 Litefuse 中,反馈以 scores 的形式被记录并关联到 trace 上。

用户反馈示例
反馈分析

反馈类型

显式反馈

用户通过点赞/点踩、星级或评论直接为响应打分。

优点缺点
满意度信号明确响应率低
实现简单不满意的用户更可能给反馈
易于落地需要用户主动操作

隐式反馈

来自用户行为,例如阅读时长、复制输出、采纳建议或重试查询。

优点缺点
每次交互都能产生大量数据实现更复杂
不需要用户额外操作信号含义模糊
反映真实使用情况需要解读

两者在 Litefuse 中都以 scores 呈现。你可以按分数过滤 trace、构建标注队列,或将反馈作为自动化评估的 ground truth。

快速开始

下面这个示例展示了如何在用 Next.js 和 AI SDK 构建的聊天机器人中收集显式用户反馈。完整实现可在 Litefuse Example 仓库中找到。

1. 将 trace ID 返回给前端

后端把 trace ID 发给前端,便于前端把反馈关联到 trace。

// app/api/chat/route.ts
import { getActiveTraceId } from "@Langfuse/tracing";
 
export const POST = observe(async (req: Request) => {
  const result = streamText({
    model: openai('gpt-4o-mini'),
    messages: convertToModelMessages(messages),
  });
  return result.toUIMessageStreamResponse({
    generateMessageId: () => getActiveTraceId() || "",
  });
});

2. 在前端收集反馈

使用 Litefuse Web SDK 将反馈作为分数发送。

import { LangfuseWeb } from "langfuse";
 
const langfuse = new LangfuseWeb({
  publicKey: process.env.NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY,
  baseUrl: process.env.NEXT_PUBLIC_LANGFUSE_HOST,
});
function FeedbackButtons({ messageId }: { messageId: string }) {
  const handleFeedback = (value: number, comment?: string) => {
    langfuse.score({
      traceId: messageId,
      name: "user-feedback",
      value: value, // 1 for positive, 0 for negative
      comment: comment,
    });
  };
  return (
    <div>
      <button onClick={() => handleFeedback(1)}>:+1:</button>
      <button onClick={() => handleFeedback(0)}>:-1:</button>
    </div>
  );
}

3. 在 Litefuse 中查看反馈

反馈以分数形式出现在 trace 上。你可以用 user-feedback < 1 过滤出评分较低的响应。

反馈分析

服务端反馈

需要时可以从后端记录反馈,例如在用户调研或后续交互之后。你也可以用它来记录隐式反馈信号,比如工单关闭或任务成功完成。

from langfuse import get_client
langfuse = get_client()
 
# Check if customer support ticket was resolved successfully
ticket_status = checkIfTicketClosed(ticket_id="ticket-456")
if ticket_status.is_closed:
    langfuse.create_score(
        trace_id=ticket_status.trace_id,
        name="ticket-resolution",
        value=1,
        comment=f"Ticket closed successfully after {ticket_status.resolution_time}"
    )
else:
    langfuse.create_score(
        trace_id=ticket_status.trace_id,
        name="ticket-resolution",
        value=0,
        comment=f"Ticket escalated to human agent"
    )

借助 LLM-as-a-Judge 的隐式反馈

使用 LLM 作为裁判,为每个响应自动评估用户情感、满意度或参与度等维度。这让你无需用户介入也能获得大规模反馈。

LLM-as-a-Judge 评估语气

实现模式与示例参见 LLM-as-a-Judge 评估器

示例应用

user-feedback 示例 展示了一个完整的 Next.js 实现,包含:

  • OpenTelemetry tracing
  • 带可选评论的点赞/点踩
  • 跨对话的会话追踪
这个页面对你有帮助吗?