Langfuse 文档 中文 英文原文 ↗
文档 / 用户反馈

用户反馈

用户反馈衡量你的 AI 是否真正帮助了用户。用它来发现质量问题、构建更好的评估数据集,并基于真实用户体验确定改进的优先级。在 Langfuse 中,反馈以分数的形式捕获,并关联到 traces。

用户反馈示例 反馈分析

反馈类型

显式反馈

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

优点 缺点
关于满意度的清晰信号 响应率低
实现简单 不满意的用户更可能响应
易于采取行动 需要用户操作

隐式反馈

源自用户行为,如阅读所花时间、复制输出、接受建议或重试查询。

优点 缺点
每次交互都有大量数据 实现较难
无需用户付出努力 信号模糊
反映实际使用情况 需要解读

两者在 Langfuse 中都作为分数工作。按分数过滤 traces、构建标注队列,或将反馈用作自动评估的标准答案。

快速开始

本示例展示如何从用 Next.js 和 AI SDK 构建的聊天机器人收集显式用户反馈。你可以在 Langfuse Example 仓库中找到完整实现。

1. 将 trace ID 返回给前端

你的后端发送 trace ID,以便前端将反馈关联到该 trace。

typescript
// 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. 在前端收集反馈

使用 Langfuse Browser SDK 将反馈作为分数发送。浏览器 SDK 只需要你的公钥;切勿在前端代码中暴露 Langfuse 密钥。

typescript
import { LangfuseBrowserClient } from "@langfuse/browser";

const langfuse = new LangfuseBrowserClient({
  publicKey: process.env.NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY!,
  baseUrl: process.env.NEXT_PUBLIC_LANGFUSE_BASE_URL,
});
function FeedbackButtons({ messageId }: { messageId: string }) {
  const handleFeedback = async (value: number, comment?: string) => {
    await langfuse.score({
      traceId: messageId,
      id: `user-feedback-${messageId}`,
      name: "user-feedback",
      value: value, // 1 for positive, 0 for negative
      dataType: "BOOLEAN",
      comment: comment,
    });
  };
  return (
    <div>
      <button onClick={() => handleFeedback(1)}>:+1:</button>
      <button onClick={() => handleFeedback(0)}>:-1:</button>
    </div>
  );
}

3. 在 Langfuse 中查看反馈

反馈以分数形式出现在 traces 上。你可以按 user-feedback < 1 过滤,以找到评分低的响应。

反馈分析

服务端反馈

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

python
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 实现,包含:

相关

关于从选择信号到采取行动的端到端演示,参见关于如何设置用户反馈闭环的指南。

非官方中文翻译 · 图片/视频/代码均链接官方资源 · 版权归 Langfuse GmbH 所有 查看英文原文 ↗