SDK로 사용자 피드백 기록하기
SDK로 사용자 피드백 기록하기
LangSmith를 쓰면 피드백을 트레이스에 아주 쉽게 붙일 수 있어요. 이 피드백은 사용자, 어노테이터, 자동 평가기(evaluator) 등에서 나올 수 있는데, 애플리케이션을 모니터링하고 평가하는 데 핵심적인 역할을 합니다.
출처: 문서
본문
LangSmith를 사용하면 피드백을 트레이스에 쉽게 연결할 수 있습니다. 이 피드백은 사용자, 어노테이터, 자동 평가기 등에서 나올 수 있으며, 애플리케이션을 모니터링하고 평가하는 데 중요합니다.
이 페이지에서는 SDK를 사용해 피드백을 기록하는 방법을 자세히 설명합니다. 피드백 객체의 구조는 피드백 데이터 형식을 참고하세요.
create_feedback() / createFeedback 사용하기
참고: 자식 런 (Child runs) 사용자 피드백은 트레이스(루트 런) 자체뿐만 아니라 트레이스의 어떤 자식 런 에도 연결할 수 있습니다. 이는 RAG 파이프라인의 검색 단계나 생성 단계처럼 LLM 애플리케이션의 특정 단계를 비판적으로 평가할 때 유용합니다.
팁: 비차단(non-blocking) 생성 (Python 전용) Python 클라이언트는
create_feedback()에trace_id=를 전달하면 피드백 생성을 자동으로 백그라운드로 처리합니다. 이는 애플리케이션이 피드백 생성으로 인해 블로킹되지 않도록 하려는 저지연 환경에서 중요합니다.
다음 예제는 두 개의 자식 런을 가진 트레이스를 만들고, 루트 런과 그중 하나의 자식 런에 대해 피드백을 기록합니다. TypeScript 스니펫은 애플리케이션에서 runId가 이미 사용 가능하다고 가정했을 때 동등한 createFeedback 호출 형태를 보여줍니다.
from langsmith import Client, trace, traceable
@traceable
def foo(x):
return {"y": x * 2}
@traceable
def bar(y):
return {"z": y - 1}
client = Client()
inputs = {"x": 1}
with trace(name="foobar", inputs=inputs) as root_run:
result = foo(**inputs)
result = bar(**result)
root_run.outputs = result
trace_id = root_run.id
child_runs = root_run.child_runs
# Resolve the UUID of the project that owns the trace
session_id = client.create_project(project_name=root_run.session_name, upsert=True).id
# Provide feedback for a trace (a.k.a. a root run)
client.create_feedback(
key="user_feedback",
score=1,
trace_id=trace_id,
session_id=session_id,
comment="the user said that ..."
)
# Provide feedback for a child run
foo_run_id = [run for run in child_runs if run.name == "foo"][0].id
client.create_feedback(
key="correctness",
score=0,
run_id=foo_run_id,
# trace_id= is optional but recommended to enable batched and backgrounded
# feedback ingestion.
trace_id=trace_id,
session_id=session_id,
)
import { Client } from "langsmith";
const client = new Client();
// ... Run your application and get the run_id...
// This information can be the result of a user-facing feedback form
// Resolve the UUID of the project that owns the trace
const { id: sessionId } = await client.createProject({ projectName: "default", upsert: true });
await client.createFeedback({
runId,
sessionId,
key: "feedback-key",
score: 1.0,
comment: "comment",
});
create_feedback() / createFeedback를 사용해 진행 중인 런에 대해서도 피드백을 기록할 수 있습니다. 진행 중인 런의 런 ID를 얻는 방법은 추적된 함수 내에서 현재 런(span)에 접근하기를 참고하세요.
클라이언트 측 애플리케이션에서 피드백 수집
브라우저나 기타 클라이언트 측 환경에서 API 키를 노출하지 않고 피드백을 수집해야 한다면, 사전 서명된 피드백 토큰(presigned feedback tokens) 을 사용하세요. 이는 특정 런과 피드백 키에 범위가 지정된 URL을 생성하며, 클라이언트가 직접 호출할 수 있습니다.
전체 가이드는 사전 서명된 URL로 피드백 수집하기를 참고하세요.
사용자 피드백을 포함한 다양한 속성에 따라 트레이스를 필터링하는 방법은 트레이스 필터링을 참고하세요.
더 알아보기
- 피드백 객체의 구조는 Feedback data format 문서를 확인해 보세요.
- 진행 중인 런의 런 ID를 얻는 방법은 Access the current run (span) 문서를 참고하세요.