> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-feature-automate-reference-docs-generation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Feedback

LLM 애플리케이션을 효율적으로 평가하려면 피드백을 수집하고 분석하기 위한 강력한 도구가 필요합니다. Weave는 통합된 피드백 시스템을 제공하여 사용자가 UI를 통해 직접 또는 SDK를 통해 프로그래밍 방식으로 호출 피드백을 제공할 수 있습니다. 이모티콘 반응, 텍스트 댓글 및 구조화된 데이터를 포함한 다양한 피드백 유형이 지원되어 팀이 다음을 수행할 수 있습니다:

* 성능 모니터링을 위한 평가 데이터셋 구축.
* LLM 콘텐츠 문제를 효과적으로 식별하고 해결.
* 미세 조정과 같은 고급 작업을 위한 예제 수집.

이 가이드는 UI와 SDK 모두에서 Weave의 피드백 기능을 사용하는 방법, 피드백을 쿼리하고 관리하는 방법, 그리고 상세한 평가를 위해 인간 주석을 사용하는 방법을 다룹니다.

* [UI에서 피드백 제공하기](#provide-feedback-in-the-ui)
* [SDK를 통해 피드백 제공하기](#provide-feedback-via-the-sdk)
* [인간 주석 추가하기](#add-human-annotations)

## UI에서 피드백 제공하기

Weave UI에서 피드백을 추가하고 볼 수 있습니다[호출 세부 정보 페이지에서](#from-the-call-details-page) 또는 [아이콘을 사용하여](#use-the-icons).

### 호출 세부 정보 페이지에서

1. 사이드바에서 **Traces**로 이동하세요.
2. 피드백을 추가하려는 호출의 행을 찾으세요.
3. 호출 세부 정보 페이지를 엽니다.
4. 호출의 **Feedback** 열을 선택합니다.
5. 피드백 추가, 보기 또는 삭제:
   * *[호출 세부 정보 피드백 보기의 오른쪽 상단에 있는 아이콘을 사용하여 피드백을 추가하고 볼 수 있습니다](#use-the-icons)*.
   * *호출 세부 정보 피드백 테이블에서 피드백을 보고 삭제할 수 있습니다.* 해당 피드백 행의 가장 오른쪽 열에 있는 휴지통 아이콘을 클릭하여 피드백을 삭제합니다.

![Screenshot of Feedback tab in call details](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/tracking/imgs/feedback_tab.png)

### 아이콘 사용하기

호출 테이블과 개별 호출 세부 정보 페이지 모두에 위치한 아이콘을 사용하여 반응을 추가하거나 제거하고, 메모를 추가할 수 있습니다.

* *호출 테이블*: **Feedback** 열의 호출 테이블에서 해당 행에 위치합니다.
* *호출 세부 정보 페이지*: 각 호출 세부 정보 페이지의 오른쪽 상단에 위치합니다.

반응을 추가하려면:

1. 이모지 아이콘을 클릭합니다.
2. 엄지 위, 엄지 아래를 추가하거나 **+** 아이콘을 클릭하여 더 많은 이모지를 선택합니다.

반응을 제거하려면:

1. 제거하려는 이모지 반응 위에 마우스를 올립니다.
2. 반응을 클릭하여 제거합니다.

> 호출 세부 정보 페이지의 [**Feedback** 열에서도 피드백을 삭제할 수 있습니다.](#from-the-call-details-page).

댓글을 추가하려면:

1. 댓글 버블 아이콘을 클릭합니다.
2. 텍스트 상자에 메모를 추가합니다.
3. 메모를 저장하려면 **Enter** 키를 누릅니다. 추가 메모를 더할 수 있습니다.

<Warning>
  피드백 메모의 최대 문자 수는 1024자입니다. 메모가 이 제한을 초과하면 생성되지 않습니다.
</Warning>

![Screenshot of calls grid with feedback column](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/tracking/imgs/feedback_calls.png)

## 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`: 피드백 페이로드

<Tabs>
  <Tab title="Python">
    ```python
    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)
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

### 호출에 피드백 추가하기

호출의 UUID를 사용하여 호출에 피드백을 추가할 수 있습니다. UUID를 사용하여 특정 호출을 가져오려면 [호출 실행 중 또는 후에 UUID를 검색](#retrieve-the-call-uuid)하세요. SDK는 호출에 피드백을 추가하기 위한 다음 작업을 지원합니다:

* `call.feedback.add_reaction("<reaction_type>")`: 지원되는 `<reaction_types>` (이모지) 중 하나를 추가합니다(예: 👍).
* `call.feedback.add_note("<note>")`: 메모를 추가합니다.
* `call.feedback.add("<label>", <object>)`: 사용자 정의 피드백 `<object>`을 `<label>`로 지정하여 추가합니다.

<Warning>
  피드백 메모의 최대 문자 수는 1024자입니다. 메모가 이 제한을 초과하면 생성되지 않습니다.
</Warning>

<Tabs>
  <Tab title="Python">
    ```python
    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 })
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

#### 호출 UUID 검색하기

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

* [호출 실행 중](#during-call-execution)
* [호출 실행 후](#after-call-execution)

##### 호출 실행 중

호출 실행 중에 UUID를 검색하려면 현재 호출을 가져와 ID를 반환합니다.

<Tabs>
  <Tab title="Python">
    ```python

    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
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

##### 호출 실행 후

또는 `call()` 메서드를 사용하여 작업을 실행하고 호출 실행 후 ID를 검색할 수 있습니다:

<Tabs>
  <Tab title="Python">
    ```python
    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
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

### 호출에서 피드백 삭제하기

UUID를 지정하여 특정 호출에서 피드백을 삭제할 수 있습니다.

<Tabs>
  <Tab title="Python">
    ```python
    call.feedback.purge("<feedback_uuid>")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

## 인간 주석 추가하기

인간 주석은 Weave UI에서 지원됩니다. 인간 주석을 만들려면 먼저 [UI](#create-a-human-annotation-scorer-in-the-ui) 또는 [API](#create-a-human-annotation-scorer-using-the-api)를 사용하여 인간 주석 평가자를 생성해야 합니다. 그런 다음 [UI에서 평가자를 사용하여 주석을 만들고](#use-the-human-annotation-scorer-in-the-ui), [API를 사용하여 주석 평가자를 수정](#modify-a-human-annotation-scorer-using-the-api)할 수 있습니다.

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

UI에서 인간 주석 평가자를 생성하려면 다음을 수행하세요:

1. 사이드바에서 **Scorers**로 이동합니다.
2. 오른쪽 상단 모서리에서 **+ Create scorer**를 클릭합니다.
3. 구성 페이지에서 설정:
   * `Scorer type`을 `Human annotation`
   * `Name`
   * `Description`
   * `Type`로 설정합니다. 이는 `boolean` 또는 `integer`와 같이 수집될 피드백 유형을 결정합니다.
4. **Create scorer**를 클릭합니다. 이제 [평가자를 사용하여 주석을 만들 수](#use-the-human-annotation-scorer-in-the-ui) 있습니다.

다음 예시에서는 인간 주석자에게 LLM이 어떤 유형의 문서를 수집했는지 선택하도록 요청합니다. 따라서 점수 구성에 대해 선택된 `Type`은 가능한 문서 유형을 포함하는 `enum`입니다.

![Human Annotation scorer form](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/tracking/imgs/human-annotation-scorer-form.png)

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

일단 [인간 주석 평가자를 생성](#create-a-human-annotation-scorer-in-the-ui)하면, 자동으로 **Feedback** 구성된 옵션이 있는 통화 세부 정보 페이지의 사이드바. 스코러를 사용하려면 다음을 수행하세요:

1. 사이드바에서 다음으로 이동하세요 **Traces**

2. 인간 주석을 추가하려는 통화의 행을 찾으세요.

3. 통화 세부 정보 페이지를 엽니다.

4. 오른쪽 상단 모서리에서 **Show feedback** 버튼을 클릭하세요.

   ![Marker icon in call header](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/tracking/imgs/marker-icon.png)

   사용 가능한 인간 주석 스코러가 사이드바에 표시됩니다.

   ![Human Annotation scorer feedback sidebar](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/tracking/imgs/full-feedback-sidebar.png)

5. 주석을 작성하세요.

6. 클릭 **Save**.

7. 통화 세부 정보 페이지에서 **Feedback**을 클릭하여 통화 테이블을 봅니다. 새 주석이 테이블에 표시됩니다. **Annotations** 열에서 **Traces**의 통화 테이블에서도 주석을 볼 수 있습니다.

   > 가장 최신 정보를 보려면 통화 테이블을 새로 고치세요.

![Human Annotation scorer feedback in calls table](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/tracking/imgs/feedback-in-the-table.png)

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

인간 주석 스코러는 API를 통해서도 생성할 수 있습니다. 각 스코러는 독립적으로 생성되고 업데이트되는 자체 객체입니다. 프로그래밍 방식으로 인간 주석 스코러를 만들려면 다음을 수행하세요:

1. 다음에서 `AnnotationSpec` 클래스를 가져옵니다 `weave.flow.annotation_spec`
2. 다음에서 `publish` 메서드를 사용합니다 `weave` 스코러를 만들기 위해.

다음 예제에서는 두 개의 스코러가 생성됩니다. 첫 번째 스코러인 `Temperature`는 LLM 호출의 인지된 온도를 점수화하는 데 사용됩니다. 두 번째 스코러인 `Tone`는 LLM 응답의 톤을 점수화하는 데 사용됩니다. 각 스코러는 `save`를 사용하여 관련 객체 ID(`temperature-scorer` 및 `tone-scorer`)로 생성됩니다.

<Tabs>
  <Tab title="Python">
    ```python
    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")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

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

다음을 확장하여 [API를 사용하여 인간 주석 스코러 만들기](#create-a-human-annotation-scorer-using-the-api), 다음 예제는 원래 객체 ID(`Temperature` 스코러의 업데이트된 버전을 만듭니다. `temperature-scorer`)를 `publish`에 사용합니다. 결과는 모든 버전의 기록이 있는 업데이트된 객체입니다.

> 인간 주석 스코러 객체 기록은 **Scorers** 탭의 **Human annotations**에서 볼 수 있습니다.

<Tabs>
  <Tab title="Python">
    ```python
    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")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

![Human Annotation scorer history](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/tracking/imgs/human-annotation-scorer-history.png)

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

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

<Tabs>
  <Tab title="Python">
    ```python
    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(),
    )
    ```
  </Tab>
</Tabs>
