Skip to content

도구 사용 및 function calling 평가

여러 트레이스 형식(OpenAI, Anthropic, ReAct, LangChain)에서 에이전트의 도구 호출과 function calling을 Potato의 턴별 평점으로 어노테이션하고 평가하는 방법입니다.

에이전트가 도구를, 즉 검색, 계산기, API, 데이터베이스를 호출할 때 각 호출은 평가할 수 있는 결정입니다. 이것이 올바른 도구였는가? 인수는 정확했는가? 결과는 제대로 활용되었는가? 도구 사용 평가는 이러한 결정을 에이전트의 트레이스에 대한 단계별 레이블로 바꿉니다.

이는 자동화된 function calling 벤치마크를 사람의 판단으로 보완하는 것입니다. 호출이 구문상으로는 유효하더라도 해당 작업에는 틀릴 수 있기 때문입니다.

각 도구 호출에서 무엇을 판단할 것인가

  • 도구 선택: 적절한 도구였는가, 아니면 다른 도구를 (또는 아무 도구도 쓰지 않았어야) 했는가?
  • 인수: 매개변수가 정확하고 빠짐없었는가?
  • 필요성: 그 호출이 필요했는가, 아니면 불필요했는가?
  • 결과 처리: 에이전트가 출력을 올바르게 해석하고 사용했는가?

어떤 프레임워크의 트레이스든 읽어 들이기

Potato는 13가지 트레이스 형식을 공통 단계 뷰로 변환하므로, 에이전트가 어떻게 만들어졌든 상관없이 도구 사용을 평가할 수 있습니다. OpenAI와 Anthropic의 도구/함수 호출, ReAct의 사고-행동-관찰 트레이스, LangChain, LangFuse 등이 여기 포함됩니다. 에이전트 어노테이션을 참고하시기 바랍니다.

단계별 평점 설정

각 단계(각 도구 호출)에 평점을 부여하고, 실패한 경우에는 조건부 후속 질문을 둡니다.

yaml
annotation_schemes:
  - annotation_type: per_turn_rating
    name: tool_call_correctness
    description: "For each tool call, judge whether it was the right call."
    target: agentic_steps
    rating_type: radio
    labels: ["Correct", "Wrong tool", "Wrong arguments", "Unnecessary"]
  - annotation_type: text
    name: notes
    description: "If not correct, what should it have done?"
    label_requirement:
      required: false

품질 고려 사항

  • 호출만이 아니라 도구의 출력을 보여 주시기 바랍니다. 그렇지 않으면 어노테이터가 결과 처리를 판단할 수 없습니다.
  • 인수와 응답의 JSON을 읽기 쉽도록 정렬해서 표시합니다(Potato는 에이전트 트레이스 표시에서 이를 수행합니다).
  • "도구가 틀림"과 "도구는 맞지만 인수가 틀림"을 구분하시기 바랍니다. 둘은 모델을 고치는 방향이 다릅니다.

더 읽어보기