LLM 애플리케이션을 효율적으로 평가하려면 피드백을 수집하고 분석하기 위한 강력한 도구가 필요합니다. Weave는 통합된 피드백 시스템을 제공하여 사용자가 UI를 통해 직접 또는 SDK를 통해 프로그래밍 방식으로 호출 피드백을 제공할 수 있습니다. 이모티콘 반응, 텍스트 댓글 및 구조화된 데이터를 포함한 다양한 피드백 유형이 지원되어 팀이 다음을 수행할 수 있습니다:
  • 성능 모니터링을 위한 평가 데이터셋 구축.
  • LLM 콘텐츠 문제를 효과적으로 식별하고 해결.
  • 미세 조정과 같은 고급 작업을 위한 예제 수집.
이 가이드는 UI와 SDK 모두에서 Weave의 피드백 기능을 사용하는 방법, 피드백을 쿼리하고 관리하는 방법, 그리고 상세한 평가를 위해 인간 주석을 사용하는 방법을 다룹니다.

UI에서 피드백 제공하기

Weave UI에서 피드백을 추가하고 볼 수 있습니다호출 세부 정보 페이지에서 또는 아이콘을 사용하여.

호출 세부 정보 페이지에서

  1. 사이드바에서 Traces로 이동하세요.
  2. 피드백을 추가하려는 호출의 행을 찾으세요.
  3. 호출 세부 정보 페이지를 엽니다.
  4. 호출의 Feedback 열을 선택합니다.
  5. 피드백 추가, 보기 또는 삭제:
Screenshot of Feedback tab in call details

아이콘 사용하기

호출 테이블과 개별 호출 세부 정보 페이지 모두에 위치한 아이콘을 사용하여 반응을 추가하거나 제거하고, 메모를 추가할 수 있습니다.
  • 호출 테이블: Feedback 열의 호출 테이블에서 해당 행에 위치합니다.
  • 호출 세부 정보 페이지: 각 호출 세부 정보 페이지의 오른쪽 상단에 위치합니다.
반응을 추가하려면:
  1. 이모지 아이콘을 클릭합니다.
  2. 엄지 위, 엄지 아래를 추가하거나 + 아이콘을 클릭하여 더 많은 이모지를 선택합니다.
반응을 제거하려면:
  1. 제거하려는 이모지 반응 위에 마우스를 올립니다.
  2. 반응을 클릭하여 제거합니다.
호출 세부 정보 페이지의 Feedback 열에서도 피드백을 삭제할 수 있습니다..
댓글을 추가하려면:
  1. 댓글 버블 아이콘을 클릭합니다.
  2. 텍스트 상자에 메모를 추가합니다.
  3. 메모를 저장하려면 Enter 키를 누릅니다. 추가 메모를 더할 수 있습니다.
피드백 메모의 최대 문자 수는 1024자입니다. 메모가 이 제한을 초과하면 생성되지 않습니다.
Screenshot of calls grid with feedback column

SDK를 통해 피드백 제공하기

호출 세부 정보 페이지의 Use 탭에서 피드백에 대한 SDK 사용 예시를 찾을 수 있습니다.
Weave SDK를 사용하여 프로그래밍 방식으로 호출에 대한 피드백을 추가, 제거 및 쿼리할 수 있습니다.

프로젝트의 피드백 쿼리하기

SDK를 사용하여 Weave 프로젝트의 피드백을 쿼리할 수 있습니다. SDK는 다음과 같은 피드백 쿼리 작업을 지원합니다:
  • client.get_feedback(): 프로젝트의 모든 피드백을 반환합니다.
  • client.get_feedback("<feedback_uuid>"): <feedback_uuid>로 지정된 특정 피드백 객체를 컬렉션으로 반환합니다.
  • client.get_feedback(reaction="<reaction_type>"): 특정 반응 유형에 대한 모든 피드백 객체를 반환합니다.
또한 client.get_feedback()에서 각 피드백 객체에 대한 추가 정보를 얻을 수 있습니다:
  • id: 피드백 객체 ID.
  • created_at: 피드백 객체의 생성 시간 정보.
  • feedback_type: 피드백 유형(반응, 메모, 사용자 정의).
  • payload: 피드백 페이로드
import weave
client = weave.init('intro-example')

# Get all feedback in a project
all_feedback = client.get_feedback()

# Fetch a specific feedback object by id.
# The API returns a collection, which is expected to contain at most one item.
one_feedback = client.get_feedback("<feedback_uuid>")[0]

# Find all feedback objects with a specific reaction. You can specify offset and limit.
thumbs_up = client.get_feedback(reaction="👍", limit=10)

# After retrieval, view the details of individual feedback objects.
for f in client.get_feedback():
    print(f.id)
    print(f.created_at)
    print(f.feedback_type)
    print(f.payload)

호출에 피드백 추가하기

호출의 UUID를 사용하여 호출에 피드백을 추가할 수 있습니다. UUID를 사용하여 특정 호출을 가져오려면 호출 실행 중 또는 후에 UUID를 검색하세요. SDK는 호출에 피드백을 추가하기 위한 다음 작업을 지원합니다:
  • call.feedback.add_reaction("<reaction_type>"): 지원되는 <reaction_types> (이모지) 중 하나를 추가합니다(예: 👍).
  • call.feedback.add_note("<note>"): 메모를 추가합니다.
  • call.feedback.add("<label>", <object>): 사용자 정의 피드백 <object><label>로 지정하여 추가합니다.
피드백 메모의 최대 문자 수는 1024자입니다. 메모가 이 제한을 초과하면 생성되지 않습니다.
import weave
client = weave.init('intro-example')

call = client.get_call("<call_uuid>")

# Adding an emoji reaction
call.feedback.add_reaction("👍")

# Adding a note
call.feedback.add_note("this is a note")

# Adding custom key/value pairs.
# The first argument is a user-defined "type" string.
# Feedback must be JSON serializable and less than 1 KB when serialized.
call.feedback.add("correctness", { "value": 5 })

호출 UUID 검색하기

호출 직후 피드백을 추가해야 하는 시나리오의 경우, 호출 실행 중 또는 후에 프로그래밍 방식으로 호출 UUID를 검색할 수 있습니다.
호출 실행 중
호출 실행 중에 UUID를 검색하려면 현재 호출을 가져와 ID를 반환합니다.

import weave
weave.init("uuid")

@weave.op()
def simple_operation(input_value):
    # Perform some simple operation
    output = f"Processed {input_value}"
    # Get the current call ID
    current_call = weave.require_current_call()
    call_id = current_call.id
    return output, call_id
호출 실행 후
또는 call() 메서드를 사용하여 작업을 실행하고 호출 실행 후 ID를 검색할 수 있습니다:
import weave
weave.init("uuid")

@weave.op()
def simple_operation(input_value):
    return f"Processed {input_value}"

# Execute the operation and retrieve the result and call ID
result, call = simple_operation.call("example input")
call_id = call.id

호출에서 피드백 삭제하기

UUID를 지정하여 특정 호출에서 피드백을 삭제할 수 있습니다.
call.feedback.purge("<feedback_uuid>")

인간 주석 추가하기

인간 주석은 Weave UI에서 지원됩니다. 인간 주석을 만들려면 먼저 UI 또는 API를 사용하여 인간 주석 평가자를 생성해야 합니다. 그런 다음 UI에서 평가자를 사용하여 주석을 만들고, API를 사용하여 주석 평가자를 수정할 수 있습니다.

UI에서 인간 주석 평가자 생성하기

UI에서 인간 주석 평가자를 생성하려면 다음을 수행하세요:
  1. 사이드바에서 Scorers로 이동합니다.
  2. 오른쪽 상단 모서리에서 + Create scorer를 클릭합니다.
  3. 구성 페이지에서 설정:
    • Scorer typeHuman annotation
    • Name
    • Description
    • Type로 설정합니다. 이는 boolean 또는 integer와 같이 수집될 피드백 유형을 결정합니다.
  4. Create scorer를 클릭합니다. 이제 평가자를 사용하여 주석을 만들 수 있습니다.
다음 예시에서는 인간 주석자에게 LLM이 어떤 유형의 문서를 수집했는지 선택하도록 요청합니다. 따라서 점수 구성에 대해 선택된 Type은 가능한 문서 유형을 포함하는 enum입니다. Human Annotation scorer form

UI에서 인간 주석 평가자 사용하기

일단 인간 주석 평가자를 생성하면, 자동으로 Feedback 구성된 옵션이 있는 통화 세부 정보 페이지의 사이드바. 스코러를 사용하려면 다음을 수행하세요:
  1. 사이드바에서 다음으로 이동하세요 Traces
  2. 인간 주석을 추가하려는 통화의 행을 찾으세요.
  3. 통화 세부 정보 페이지를 엽니다.
  4. 오른쪽 상단 모서리에서 Show feedback 버튼을 클릭하세요. Marker icon in call header 사용 가능한 인간 주석 스코러가 사이드바에 표시됩니다. Human Annotation scorer feedback sidebar
  5. 주석을 작성하세요.
  6. 클릭 Save.
  7. 통화 세부 정보 페이지에서 Feedback을 클릭하여 통화 테이블을 봅니다. 새 주석이 테이블에 표시됩니다. Annotations 열에서 Traces의 통화 테이블에서도 주석을 볼 수 있습니다.
    가장 최신 정보를 보려면 통화 테이블을 새로 고치세요.
Human Annotation scorer feedback in calls table

API를 사용하여 인간 주석 스코러 만들기

인간 주석 스코러는 API를 통해서도 생성할 수 있습니다. 각 스코러는 독립적으로 생성되고 업데이트되는 자체 객체입니다. 프로그래밍 방식으로 인간 주석 스코러를 만들려면 다음을 수행하세요:
  1. 다음에서 AnnotationSpec 클래스를 가져옵니다 weave.flow.annotation_spec
  2. 다음에서 publish 메서드를 사용합니다 weave 스코러를 만들기 위해.
다음 예제에서는 두 개의 스코러가 생성됩니다. 첫 번째 스코러인 Temperature는 LLM 호출의 인지된 온도를 점수화하는 데 사용됩니다. 두 번째 스코러인 Tone는 LLM 응답의 톤을 점수화하는 데 사용됩니다. 각 스코러는 save를 사용하여 관련 객체 ID(temperature-scorertone-scorer)로 생성됩니다.
import weave
from weave.flow.annotation_spec import AnnotationSpec

client = weave.init("feedback-example")

spec1 = AnnotationSpec(
  name="Temperature",
  description="The perceived temperature of the llm call",
  field_schema={
    "type": "number",
    "minimum": -1,
    "maximum": 1,
  }
)
spec2 = AnnotationSpec(
  name="Tone",
  description="The tone of the llm response",
  field_schema={
    "type": "string",
    "enum": ["Aggressive", "Neutral", "Polite", "N/A"],
  },
)
weave.publish(spec1, "temperature-scorer")
weave.publish(spec2, "tone-scorer")

API를 사용하여 인간 주석 스코러 수정하기

다음을 확장하여 API를 사용하여 인간 주석 스코러 만들기, 다음 예제는 원래 객체 ID(Temperature 스코러의 업데이트된 버전을 만듭니다. temperature-scorer)를 publish에 사용합니다. 결과는 모든 버전의 기록이 있는 업데이트된 객체입니다.
인간 주석 스코러 객체 기록은 Scorers 탭의 Human annotations에서 볼 수 있습니다.
import weave
from weave.flow.annotation_spec import AnnotationSpec

client = weave.init("feedback-example")

# create a new version of the scorer
spec1 = AnnotationSpec(
  name="Temperature",
  description="The perceived temperature of the llm call",
  field_schema={
    "type": "integer",  # <<- change type to integer
    "minimum": -1,
    "maximum": 1,
  }
)
weave.publish(spec1, "temperature-scorer")
Human Annotation scorer history

API를 사용하여 인간 주석 스코러 사용하기

피드백 API를 사용하면 특별히 구성된 이름과 annotation_ref 필드를 지정하여 인간 주석 스코러를 사용할 수 있습니다. 적절한 탭을 선택하거나 annotation_spec_ref를 UI에서 얻을 수 있습니다 AnnotationSpec 생성 중에.
import weave

client = weave.init("feedback-example")

call = client.get_call("<call_id>")
annotation_spec = weave.ref("<annotation_spec_ref_uri>")

call.feedback.add(
  feedback_type="wandb.annotation." + annotation_spec.name,
  payload={"value": 1},
  annotation_ref=annotation_spec.uri(),
)