WebMCP 평가
게시일: 2026년 5월 19일
WebMCP는 생성형 AI 모델을 사용하는 에이전트를 지원합니다. 생성형 AI를 사용하는 시스템을 테스트하려면 테스트에서 확률적 결과를 지원해야 합니다. 하나의 입력으로 정확도가 다양한 수천 개의 대답이 나올 수 있습니다. 이 테스트 기법을 평가라고 합니다.
도구를 프로덕션에 출시하기 전에 상담사가 도구를 호출해야 하는 시점, 도구를 실행하는 방법, 허용되는 답변을 이해하는지 확인해야 합니다. 실패가 발생하기 전에 실패 가능성을 해결하세요.
대규모 언어 모델(LLM)과의 시스템 터치 포인트를 테스트하기 위한 평가를 작성합니다.
- 모델이 설명과 스키마를 기반으로 도구의 목적을 이해하는지 확인합니다.
- 모델이 사용자 의도를 지원하기 위해 올바른 매개변수로 적절한 도구를 선택하는지 확인합니다.
- 모델이 수신한 정보를 기반으로 작업을 수행하는지 확인합니다(예: 정보를 사용하여 다른 도구를 호출).
- 성공적인 사용자 여정을 확인합니다. 사용자의 의도를 고려할 때 에이전트가 제공된 도구를 사용하여 내 웹사이트에서 사용자 여정을 성공적으로 수행할 수 있나요?
모델과 통신하지 않는 시스템 상호작용에 대해서는 기존의 결정적 테스트를 계속 작성해야 합니다.
오류 모드
개발자는 장애가 발생하기 전에 시스템을 테스트하여 장애를 방지해야 합니다. 이를 위해서는 시스템이 자체적으로 실패할 수 있는 경우와 외부 요인과 상호작용할 때 실패할 수 있는 경우를 모두 이해해야 합니다. WebMCP의 경우 도구 자체가 실패할 수 있으며 상담사가 도구를 예상대로 사용하지 못할 수 있습니다.
WebMCP 도구가 실패할 수 있는 경우와 에이전트가 WebMCP 도구와 함께 실패할 수 있는 경우 예를 들어 사용자가 티셔츠를 장바구니에 추가하려고 한다고 가정해 보겠습니다.
| 실패 | 예 | 문제 해결 |
|---|---|---|
| 에이전트가 올바른 도구를 선택하지 못하거나 잘못된 도구를 직접 호출합니다. |
에이전트는
|
|
| 에이전트가 잘못된 순서로 도구를 호출합니다. |
에이전트가
|
|
| 상담사가 잘못된 인수로 도구를 호출함 |
상담사가
|
|
사용자가 장바구니에 있는 상품을 확인하고 싶다면 어떻게 해야 할까요?
| 실패 | 예 | 문제 해결 |
|---|---|---|
| 도구 출력이 잘못되었거나 도구에서 누락된 부분이 있습니다. | 사용자가
|
|
마지막으로 JavaScript가 실패하는 방식으로 도구가 실패할 수 있습니다. 문제를 해결하려면 다음을 조사하세요.
- 도구 코드가 모든 잠재적인 런타임 오류와 예외를 적절하게 처리하나요?
- 오류가 에이전트와 모델에 적절하게 보고되나요?
- 도구가 사용하는 외부 API 또는 서비스가 정상인가요?
- 모델이 일시적인 문제 (재시도)와 심각한 실패를 구분할 수 있을 만큼 오류 구조가 명확한가요?
격리된 테스트 도구
에이전트가 '작은 피자를 주문하고 싶어'와 같은 요청에 대해 어떤 도구를 호출해야 하는지 파악할 수 없다면 복잡한 사용자 여정에서 성공할 수 없습니다.
도구를 개별적으로 테스트하면 브라우저 시뮬레이션을 실행하기 전에 스키마와 설명을 최적화할 수 있습니다.
도움말: WebMCP 도구 호출 using navigator.modelContext.executeTool(...)를 트리거할 수 있습니다.
통화 정확도 측정
데모인 WebMCP zaMaker를 살펴보세요.
사용자가 '작은 피자를 주문하고 싶어'라고 프롬프트를 입력하면 모델이 "size":"Small" 인수를 사용하여 set_pizza_size 호출을 실행하려는 의도를 나타내는 대답을 반환할 수 있습니다.
expectedCall 함수는 예상되는 함수와 인수를 정의합니다. 이 접근 방식을 사용하면 제공된 스키마를 기반으로 에이전트가 사용자 의도를 지원하는 올바른 도구를 선택할 수 있습니다.
{
"messages": [
{
"role": "user",
"content": "I'd like a small pizza."
}
],
"expectedCall": [
{
"functionName": "set_pizza_size",
"arguments": { "size": "Small" }
}
]
}
expectedCall는 규칙 기반의 결정론적 테스트를 실행하는 데 사용됩니다.
WebMCP 도구를 구성요소의 수명 주기에 연결할 수 있습니다. 즉, 애플리케이션 상태가 WebMCP에서 예상하는 상태와 일치할 때 테스트해야 합니다. 이를 관리하려면 평가하려는 상태와 관련된 전체 도구 목록을 제공하세요. 예를 들어 사용자가 상담사와 공동 탐색을 하고 WebMCP zaMaker를 엽니다.
애플리케이션 상태
[
...
{
"name": "add_topping",
"description": "Add one or more toppings to the pizza",
...
},
{
"name": "set_pizza_size",
"description": "Set the pizza size directly.",
"inputSchema": {
"type": "object",
"properties": {
"size": {
"type": "string",
"enum": [
"Small",
"Medium",
"Large",
"Extra Large"
],
"description": "The specific size name."
},
}
}
},
{
"name": "set_pizza_style",
"description": "Set the style of the pizza (colors/theme)",
...
},
...
]
예상 통화
...
"expectedCall": [
{
"functionName": "set_pizza_size",
"arguments": { "size": "Small" }
}
]
...
WebMCP를 열면 add_topping, set_pizza_size, set_pizza_style 도구가 표시됩니다. 이러한 개별 도구를 정확하게 테스트하려면 모든 도구를 포함하여 시뮬레이션된 완전한 상태를 만들어야 합니다.
참고: 에이전트가 추가 도구에 액세스할 수 있지만, 제공한 도구를 평가하는 것이 가장 좋습니다.
이제 에이전트가 필요에 따라 올바른 도구를 호출한다는 것을 알았으므로 도구 호출에 올바른 파라미터가 있고 결과가 예상대로인지 테스트할 수 있습니다. 결정적 테스트와 확률적 테스트의 두 단계가 있습니다.
결정적 테스트 실행
WebMCP 도구는 JavaScript 또는 HTML 주석으로 빌드되므로 결정적인 테스트를 작성하여 다음 작업을 실행할 수 있습니다.
- 도구 로직을 확인합니다.
- 종속 항목이 올바르게 호출되었는지 확인합니다.
- 사용자 인터페이스가 예상대로 업데이트되었는지, 의도한 부작용이 있는지 확인합니다.
- 반환된 정보가 예상 값과 일치하는지 확인합니다.
- 테스트 매개변수를 검증합니다.
예를 들어 도구에서 SearchComponent 함수를 사용하는 경우 SearchComponent의 모의 객체를 전달하여 테스트할 수 있습니다. 최상의 결과를 얻으려면 도구가 작동하는 환경을 시뮬레이션해야 합니다. 이는 다른 애플리케이션 통합 테스트를 작성할 때 사용하는 것과 동일한 기법입니다.
확률 테스트 실행
모델 출력이 다음 도구를 올바르게 호출해야 하는 경우 평가를 작성해야 합니다.
사용자가 도구의 기능을 구체적으로 묻는 직접적인 질문이나 도구를 사용해야 함을 암시하는 모호한 질문을 모델에 할 수 있습니다. 예를 들어 '피자에 페퍼로니를 추가해 줘'는 직접적인 질문입니다. '피자에 고기를 모두 넣어 줘'는 더 모호하며 모델이 add_topping 도구가 필요하고 토핑 중 어떤 것이 고기로 정의될 수 있는지 이해해야 합니다.
평가를 위한 데이터 세트를 만들 때는 기준 도구 실행을 테스트하는 직접 쿼리와 모델 추론 및 도구 선택 로직을 테스트하는 개방형 쿼리를 모두 포함하세요.
커피숍을 운영하는 경우 에이전트에게 지난달에 주문한 것과 동일한 커피를 다시 주문해 달라고 요청하는 사용자를 지원할 수 있습니다. 이전 주문을 검색하는 도구(OrderHistoryService)와 커피를 주문하는 도구를 작성합니다. 주문 내역 서비스를 테스트하려면 커피 제품 ID를 반환하는 모의를 전송하면 됩니다.
이 예에서는 모델이 질문의 의도를 이해하고 올바른 도구를 선택하는지, 그리고 해당 도구가 조치를 취하는 데 필요한 올바른 정보를 제공하는지 평가합니다.
모델이 get_order_history를 호출하지 않으면 order_product에 사용할 item_id를 알 수 없습니다.
엔드 투 엔드 테스트
사용자와 상담사가 여정을 성공적으로 완료할 수 있다는 확신을 주기 위해 엔드 투 엔드 테스트를 작성합니다. 개별 도구를 테스트하는 것 외에도 다단계 작업이 올바른 순서로 실행되는지 테스트합니다.
예를 들어 온라인 의류 매장을 운영하는 경우 사용자가 에이전트에게 다음과 같이 묻습니다. "검은색 재킷과 청바지를 구매하고 싶어. 사용된 재료의 세부정보를 제공해 주시겠어요?'
성공적인 에이전트 여정은 다음과 같을 수 있습니다.
- 의류 카테고리로 이동합니다.
- 요청된 의류 중 하나를 찾습니다 (순서는 중요하지 않음).
- 특정 항목 찾기 (
search_clothes) - 재료 목록 (
get_product_details)이 포함된 제품 세부정보를 가져옵니다. - 요청된 각 항목에 대해 2~4단계를 반복합니다.
상담사가 2단계에 도달하면 검은색을 먼저 검색하거나 청바지를 먼저 검색할 수 있습니다. 순서는 중요하지 않습니다. 하지만 나머지 단계는 순서대로 따라야 합니다.
에이전트가 예상되는 순서로 도구를 호출하는지 확인하는 엔드 투 엔드 평가를 작성합니다.
{
"messages": [
{
"role": "user",
"content": "I am looking to buy a black jacket and a pair of jeans.
Could you provide a breakdown of the materials used ?"
}
],
"expectedCall": [
{
"functionName": "navigate_to_category",
"arguments": { "category": "clothes" }
},
{
"unordered": [
{
"ordered": [
{
"functionName": "search_clothes",
"arguments": { "query": "black jacket" }
},
{
"functionName": "get_product_details",
"arguments": { "productId": "JACKET002" }
}
]
},
{
"ordered": [
{
"functionName": "search_clothes",
"arguments": { "query": "jeans" }
},
{
"functionName": "get_product_details",
"arguments": { "productId": "JEANS001" }
}
]
}
]
}
]
}
미드체인 실패 평가
start_pizza_creator, set_pizza_style, set_pizza_size, start_checkout, add_discount_coupon, complete_checkout 도구 체인이 순차적으로 호출됩니다. add_discount_coupon가 실패했지만 프로세스를 완료할 수 있었으므로 사용자에게 할인이 적용되지 않았습니다.에이전트가 여러 도구를 순차적으로 호출해야 하는 경우가 있을 수 있습니다. 이 프로세스 중에 도구가 실패하면 어떻게 되나요? 예를 들어 사용자가 쿠폰 코드로 피자를 주문하려고 합니다.
'작은 페스토 피자를 주문하고 싶어. 내 프로모션 코드 FreePizza를 사용해 줘'라고 말합니다.
에이전트가 add_discount_coupon에서 실패하고 정가 피자 결제로 진행할 수 있습니다. add_discount_coupon 도구를 테스트하려면 모델과 상호작용하지 않고 이 시나리오를 시뮬레이션하기 위해 이 도구 호출 시퀀스를 수동으로 실행하면 됩니다. 도구가 실패할 것으로 예상되는 상태로 애플리케이션을 가져옵니다. 이 경우 start_checkout 도구 뒤에 있습니다. 그런 다음 add_discount_coupon를 격리된 상태로 평가할 수 있습니다.
WebMCP 실험
도구 평가를 격리된 상태로 실험하고 WebMCP 호환 에이전트로 WebMCP 지원 사이트를 평가합니다.
- GitHub에서 실험적 평가 도구를 다운로드하세요.
- AI 평가 만들기 강의를 검토하세요.