文档 / 用户反馈
用户反馈
用户反馈衡量你的 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 评估器。
示例应用
user-feedback 示例展示了一个完整的 Next.js 实现,包含:
- OpenTelemetry 追踪
- 带可选评论的点赞/点踩
- 跨对话的 session 追踪
相关
关于从选择信号到采取行动的端到端演示,参见关于如何设置用户反馈闭环的指南。