Skip to main content
本教程将向您展示如何为 Agent Server 运行收集用户反馈,并自动将其关联到 LangSmith 中的 追踪记录。创建运行时,在请求体的 feedback_keys 字段中包含相应的键。响应将为每个键返回一个预签名 URL,您的客户端可以使用这些 URL 来收集 Agent Server 运行的用户反馈。 LangSmith 利用反馈持续改进您智能体的实现。要了解更多关于 LangSmith 中反馈的工作原理,请参阅 LangSmith 反馈

工作原理

  1. 创建运行时,在请求体中包含 feedback_keys。例如,调用 POST /threads/{thread_id}/runs/stream 时,将请求体中的 feedback_keys 设置为:
    ["user_liked", "user_disliked"]
    
  2. 响应中的 feedback 对象包含每个键对应的预签名 URL。例如,feedback 对象为:
    {
        "user_liked": "https://api.smith.langchain.com/api/v1/feedback/tokens/ef19fedf-dcac-4cbb-a59c-00661efd6425",
        "user_disliked": "https://api.smith.langchain.com/api/v1/feedback/tokens/e952734e-c0a0-417b-a04d-fc2209691ed5"
    }
    
  3. 请求返回的 URL(例如 POST /api/v1/feedback/tokens/{token_id}),以将反馈键与 Agent Server 运行生成的追踪记录关联起来。更多详情,请参阅 LangSmith API 参考
  4. LangSmith 使用选定的反馈键(例如 user_likeduser_disliked)将提交的反馈与该运行关联起来。

调用带有 feedback_keys 的流式运行 API

创建一个运行,并从响应中解析 feedback 对象。
from langgraph_sdk import get_client

client = get_client(url="<DEPLOYMENT_URL>", api_key="<API_KEY>")

thread = await client.threads.create()
thread_id = thread["thread_id"]

feedback_urls = {}

async for event in client.runs.stream(
    thread_id,
    "agent",
    input={
        "messages": [
            {"role": "user", "content": "Tell me a joke about databases."}
        ]
    },
    stream_mode="updates",
    feedback_keys=["user_liked", "user_disliked"],
):
    if event.event == "feedback":
        # 示例: {"user_liked": ".../feedback/tokens/<id>", "user_disliked": "..."}
        feedback_urls = event.data
        print("Feedback URLs:", feedback_urls)
    elif event.event == "updates":
        print(event.data)

处理流式 feedback 事件

流会发出类似以下的 feedback 事件:
event: feedback
data: {"user_liked":"https://api.smith.langchain.com/api/v1/feedback/tokens/ef19fedf-dcac-4cbb-a59c-00661efd6425", "user_disliked": "https://api.smith.langchain.com/api/v1/feedback/tokens/e952734e-c0a0-417b-a04d-fc2209691ed5"}
data 中的每个键都对应您传入 feedback_keys 的一个值。每个值都是一个生成的 URL,您的客户端可以调用该 URL 来提交该运行的反馈。

使用生成的 URL 提交反馈

当用户选择一个反馈选项时,向相应的 URL 发送 POST 请求。也支持 GET 请求。更多详情,请参阅 LangSmith API 参考 例如,如果用户点击了”踩”按钮,则调用 user_disliked URL:
curl --request POST \
  --url "https://api.smith.langchain.com/api/v1/feedback/tokens/e952734e-c0a0-417b-a04d-fc2209691ed5" \
  --header "Content-Type: application/json" \
  --data '{
    "score": 1,
    "value": 0,
    "comment": "I didn't like this joke because it didn't make me laugh.",
    "correction": {},
    "metadata": {}
  }'
此请求成功后,LangSmith 将使用键 user_disliked 在追踪记录上记录反馈。

优化反馈数据模型

user_likeduser_disliked 键也可以建模在单个键下,例如 user_score 例如:
  • 对于 user_liked,使用 key="user_score"score=1
  • 对于 user_disliked,使用 key="user_score"score=-1
这可以简化分析,因为所有用户偏好信号都分组在一个反馈键下。 反馈数据模型是灵活的,应根据您的用例进行设计。例如,某些应用程序可能更喜欢单独的布尔式键(user_likeduser_disliked),而其他应用程序可能更喜欢单个数字分数(user_score)或具有多个反馈键的更丰富的评估标准。

在客户端 UI 中实现生产化

生产化的解决方案将通过您的前端暴露生成的反馈 URL,而不是手动调用它们。 示例高级实现:
  1. 从您的后端或前端创建运行。
  2. 捕获 feedback 对象并存储返回的 URL。
  3. 渲染反馈控件,例如”赞/踩”按钮和反馈表单。
  4. 提交反馈时,根据用户的反馈意图,向相应的反馈 URL 发送 POSTGET 请求。
  5. 提交后,可选择禁用反馈控件并向用户显示确认信息。