Jump to content

[스킬 구축하기 실전] 네이버 지역 검색 API를 하이퍼클로바X AI와 연동하는 법


Recommended Posts

스킬 트레이너는 특화된 지식을 모델에 학습시키는 도구입니다. 특정 서비스에 필요한 여러 스킬을 구성하여 이를 학습시키고 모델의 성능을 높일 수 있습니다. 스킬 트레이너에서는 네이버의 지역 검색 API를 활용한 예제 데이터를 제공하고있습니다. 본 튜토리얼에서는 해당 예제를 통해 스킬 트레이너를 활용하여 서비스를 제작하는 전체 과정을 살펴보고자합니다.

image.png.a779019770ee3cbadd24e4458f092926.png

 

스킬 기반 LLM의 강점과 서비스 예시


스킬 기반의 LLM은 최신성과 신뢰성을 갖춘 답변을 생성하며, 튜닝이 용이하다는 강점을 가지고 있습니다. 자세한 내용은 아래와 같습니다.

최신화되고 신뢰도 있는 답변 생성

스킬은 API 기반의 답변을 생성하여 사용자에게 최신 정보를 제공하며 할루시네이션을 최소화할 수 있습니다.
"판교 포케집 주소 알려줘"라는 동일한 쿼리에 대해 스킬이 적용된 LLM과 그렇지 않은 LLM 답변의 차이를 살펴보겠습니다.

image.png.0defecf0133dea865227c34368c4af57.png

학습을 통한 손쉬운 튜닝

일일이 답변을 수정해야했던 전통적 챗봇 제작 방식의 한계를 넘어, 스킬 트레이너는 스킬셋 단위로 답변 말투나 포맷을 일괄적으로 설정할 수 있습니다. 또한 이렇게 수집된 데이터를 학습시켜 손쉽게 모델을 튜닝할 수 있습니다. 

스킬을 통해 가치를 극대화할 수 있는 서비스 예시

스킬은 이미 존재하는 데이터베이스나 API를 활용하여 시스템에서 특정한 조건에 맞는 정보를 조회할 때 유용하게 사용됩니다. 위에서 언급한 스킬의 강점을 고려할 때 업데이트가 자주 필요한 정보를 다루는 서비스에서 더 큰 시너지를 낼 수 있습니다. 구체적 사례는 아래와 같습니다.

  • 뉴스 에이전트 : 특정 주제나 카테고리(예: 기술, 정치, 스포츠)에 대한 최신 뉴스의 URL을 제공하고 요약할 수 있습니다.
  • 부동산 에이전트 : 특정 지역의 부동산 매물 정보를 조회하고 시장 분석 정보를 제공할 수 있습니다.
  • 주식 에이전트 : 특정 주식의 실시간 가격, 변동 추이, 주요 뉴스 등을 조회하고 시장 분석 정보를 제공할 수 있습니다.
  • 스포츠 에이전트 : 스포츠 종목의 경기 일정과 실시간 순위, 종목 규칙, 선수 정보 등 스포츠와 관련된 다양한 정보를 조회할 수 있습니다.

 

1. 예제 활용을 위한 사전 준비


이제부터 본격적으로 스킬을 제작해보겠습니다. 예제로 제공된 지역 검색 API를 호출하기 위해서는 네이버 개발자 센터에서 애플리케이션을 등록한 후 API 호출에 필요한 인증 정보를 획득해야 합니다. 이 단계는 에서 획득한 인증 정보는 데이터 수집 단계에서 호출 옵션값으로 사용됩니다.

인증정보 획득하기

네이버 오픈 API를 사용하기 위해서는 클라이언트 아이디와 클라이언트 시크릿을 발급받아야 합니다. 이는 인증된 사용자인지를 확인하는 수단이며, 네이버 개발자 센터 내 애플리케이션이 등록되면 발급됩니다. 자세한 방법은 다음과 같습니다.

  1. 네이버 개발자 센터에서 애플리케이션을 등록해 주십시오.
    • 애플리케이션을 등록하는 방법은 애플리케이션 등록을 참조해 주십시오.
    • 애플리케이션 등록 시 사용 API는 검색 API를 선택해 주십시오.
       
  2. API 호출 시 클라이언트 아이디와 클라이언트 시크릿 정보를 확인해 주십시오.

 

2. 스킬셋 생성하기


스킬셋 생성하기

스킬셋은 여러개의 스킬을 묶은 하나의 단위로, 스킬셋을 기준으로 답변 형식이 적용되며 데이터 학습을 진행할 수 있습니다. 따라서 다수의 API에 일관된 답변 스타일과 학습을 적용하기 위해서는 하나의 스킬셋으로 묶어 제작하는 것을 권장합니다.

image.png.37681c0de05e1ea0d8a166b8d91de4c7.png

스킬셋 설명

스킬셋 생성을 클릭하고, 스킬셋 이름과 스킬셋 설명을 작성합니다. 스킬셋 설명은 모델 응답 결과에 직접적으로 영향을 주는 정보는 아니므로, 제작하고자하는 서비스 성격에 적합한 내용으로 작성합니다.

답변 형식 설정

답변에 대한 말투와 포맷 선택할 수 있습니다. 데이터 수집 과정에서 스킬셋 답변 형식에 설정한 값이 실제 최종 답변에 반영되었는지 확인합니다. 최종 답변이 설정한 답변 형식과 상이한 경우, 데이터 수집 화면에서 최종 답변을 형식에 맞게 수정해야합니다.

 

 

3. 스킬 생성하기


스킬을 생성하기 위한 정보로 API Spec와 Manifest가 있습니다. 이 데이터는 CoT 단계에서 주요하게 쓰이는데, API Spec은 Step 2에서 API 호출을 위한 액션 입력을 생성 할때 사용되며, Manifest는 쿼리를 분석하여 API 호출한 후 호출 결과를 취합(step 3 결과 정리)할 때 사용됩니다.

 

 

4. API Spec 작성하기


API Spec 항목에는 모델이 이해할 수 있는 API 스펙을 작성합니다.
본 튜토리얼에서는 지역 검색 스킬의 API Spec 작성 방법을 중심으로 설명합니다.

  • 본 튜토리얼에서는 지역 검색 스킬의 API Spec 작성 방법을 중심으로 설명합니다.
  • API Spec 각 필드에 대한 상세한 설명은 API Spec 작성 가이드에서 확인할 수 있습니다.

 

Version

사용할 OpenAPI 버전 정보입니다. 3.0 버전만 지원하며, 다른 버전을 사용할 경우 오류가 발생할 수 있습니다.

{
  "openapi": "3.0.2"
}

 

Info

제공되는 API에 관한 기본 정보입니다.

{
  "info": {
    "title": "네이버 지역 검색",
    "version": "1.0.0",
    "description": "네이버 지역 서비스에 등록된 업체 및 기관을 검색하기 위한 스킬"
  }
 

 

Servers

API가 제공되는 대상 호스트 정보로 Path들의 baseURL입니다. 네이버 오픈 API의 URL을 입력합니다.

{
 "servers": [
    {
      "url": "https://openapi.naver.com"
    }
  ]
}

 

Paths

제공되는 API의 Path 정보로 필수 입력값입니다. Summary에는 사용할 파라미터와 해당 Path를 통해 얻을 수 있는 정보를 구체적으로 작성하는 것이 좋습니다. 예제예서는 requests get 메소드를 사용하여 작성하였습니다. 각 Path의 하위에는 Parameter Object와 Operation Object가 존재합니다.

{
  "paths": {
    "/v1/search/local.json": {
      "get": {
        "summary": "국내 지역 정보 검색 결과를 나열합니다."
      }
    }
  }
}        

 

Parameter Object

예제에서는 네이버 지역 검색 API 파라미터를 참고하여 주요 파라미터를 작성하였습니다. 파라미터 간 역할이 중복되지 않도록 작성하는 것을 권장 합니다. 만약 역할이 비슷하거나 겹치는 파라미터가 있다면, 스킬의 정확도가 떨어질 수 있습니다. 파라미터 description에는 해당 파라미터가 어떤 의미를 갖고 있는지, 어떤 상황에서 사용되는 것인지, URL 생성 시 어떤 형식으로 들어가야 하는지 등을 구체적으로 작성합니다. 예시를 추가하면 모델이 이를 기반으로 더 정확한 파라미터를 갖춘 URL(스킬호출 Step 2의 액션 입력)을 생성할 수 있습니다. 본 예제에서는 어떠한 쿼리에 대하여 해당 파라미터가 호출되어야하는지를 포함하였습니다. 그 외에도 파라미터가 가져야 하는 값이 한정되어 있다면 구체적인 예시를  수 있습니다. 

 

{
  "parameters": [
    {
      "in": "query",
      "name": "query",
      "schema": {
        "type": "string"
      },
      "required": true,
      "description": "**query**: 사용자가 찾고자 하는 상점의 설명 (e.g. 정자동 근처 맛집, 강남역 근처 분위기 좋은 카페)\\n"
    },
    {
      "in": "query",
      "name": "display",
      "schema": {
        "type": "integer",
        "default": "2"
      },
      "required": true,
      "description": "요청한 쿼리에 대한 검색 결과 수 입니다. 유일한 상점이나 업체일 경우에는 결과를 1개만 보여주세요."
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "type": "string"
      },
      "required": false,
      "description": "검색 결과 정렬 방법\\n- **random**: 정확도순으로 내림차순 정렬(기본값)\\n- **comment**:카페, 블로그의 리뷰 개수순으로 내림차순 정렬이 필요할 때 값을 사용하세요. '맛집'이라는 키워드가 포함되면 무조건 이 값을 사용하세요.(e.g. 리뷰 많은 순으로 정렬해주세요. 유명한 곳을 알려주세요. 인기 많은 곳을 알려주세요.)\\n"
  ]
}

 

▼ 한정된 값을 불러오는 파라미터 작성 예시
 
{
   "parameters": [
      {
         "name": "category",
         "in":"query",
         "description": "장소의 대분류. restaurant, cafe, attraction, accommodation 중에 하나.",
         "required": false,
         "schema": {
            "type": "string"
         }
      }
   ]
}

 

"enum" 필드를 활용하면 파라미터 값을 더 좁게 특정할 수 있습니다.

 
{
  "PlaceCategory": {
    "enum": [
        "RESTAURANT",
        "CAFE",
        "ATTRACTION",
        "ACCOMODATION"
    ],
    "type": "string",
    "title": "- RESTAURANT: 식당\n -CAFE: 카페\n - ATTRACTION : 가볼만한 곳\n - ACCOMODATION : 숙박",
    "default": "RESTAURANT"
  }
}

 

API 설계를 위한 DOs and DON'Ts

API를 설계할 때는 사용자가 주로 사용하는 조건 위주로 parameter를 정의하세요. Parameter를 정의할 때는 아래의 주의사항을 고려해주세요

DOs

  • 파라미터의 값이 특정 포맷으로 입력되어야 한다면, Parameter description에 반드시 적어주세요.
    예: 날짜는 YYYY-MM-DD 형태입니다. 날짜를 2023-12-31형태로 입력하세요.
  • 파라미터의 값이 특정 값들 중에서 선택하는 형태라면, 선택 가능한 값을 description 혹은 enum에 반드시 적어주세요.
    예: 차종은 경형, 소형, 중형, 준중형, 대형 중에서 선택하세요.
  • API 호출 결과값은 600토큰 이내가 적합합니다. API 응답이 긴 경우 토큰 수 초과 오류를 방지하기 위해 페이지네이션 파라미터(예: display, page 등)를 함께 설계해 주실 것을 권장합니다.
  • 필수 파라미터 누락 시에도 스킬이 정상 동작하도록 API를 구성할 수 있습니다. 필수 파라미터가 비어있을 시 API에서 오류코드(400 등)를 내려주지 않고 정상 응답 코드(200)로 반환해야하며, 이때 어떠한 파라미터가 누락되었는지를 답변 내용에 포함할 수 있습니다. 이 방식을 통해 최종 답변 영역에서 모델이 누락된 파라미터를 요청하는 질문을 생성하게 되며, 원하는 형식으로 튜닝 및 학습도 진행할 수 있습니다.

DON'Ts

  • 하나의 값이 여러 개의 파라미터에 매칭 되지 않도록 주의하세요.
    예: 게시판 게시글 검색 API에서 'editor(글작성자)'와 'commenter(댓글작성자)' parameter가 각각 존재한다면, '홍길동이 이번달에 쓴 글 찾아줘'라는 쿼리에 대하여 잘못된 파라미터가 매칭될 수 있습니다.
  • 특별한 경우가 아니면, 수식어는 파라미터의 값으로 적합하지 않습니다. 수식어는 주관적인 판단 요소로 사용자에게 결과의 신뢰성을 떨어뜨릴 수 있습니다. 예시: '따뜻한 색상의 가구 추천해줘'라는 쿼리 중, color의 값으로 '따뜻한'은 적합하지 않습니다. 

 

Operation Object

operationId는 API를 식별하는 고유 문자열입니다. 다수개의 스킬 작성 시 해당 값이 중복되지 않도록 API Spec을 작성해야 합니다.

{
 "paths": {
    "/v1/search/local.json": {
      "get": {
        "responses": {},
        "description": "지역의 업체나 기관을 검색합니다.",
        "operationId": "localSearch"
      }
    }
  }
}

 

Response Object

작업 응답에 대한 설명으로, 지역검색 API의 응답 결괏값을 참고하여 작성하였습니다.

{
 "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "link": {
                            "type": "string"
                          },
                          "mapx": {
                            "type": "string"
                          },
                          "mapy": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "address": {
                            "type": "string"
                          },
                          "category": {
                            "type": "string"
                          },
                          "telephone": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "roadAddress": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "start": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "display": {
                      "type": "integer"
                    },
                    "lastBuildDate": {
                      "type": "string"
                    }
                  }
                }
              }
            },
            "description": "- **title**: 업체명\\n- **address**: 지번 주소(e.g. 서울특별시 중구 을지로3가 229-1)\\n- **roadAddress**: 도로명 주소(e.g. 서울특별시 중구 을지로15길 6-5)\\n- **category**: 카테고리(e.g. 식당, 카페, 병원, 미용실, 기업, 공공 기관)\\n- **description**: 업체에 대한 설명(e.g. 연탄불 한우갈비 전문점, 강남역 근처 분위기 좋은 카페)\\n- **link**: 홈페이지 링크"
          }
 }

 

5. Manifest 작성하기


Manifest는 해당 스킬을 통해 호출할 수 있는 API의 이름, 목적, 사용 방법 등을 입력하는 영역입니다. Manifest의 주요 영역은 Description for human과 Description for model이 있습니다.

image.png.91b32b1e2e7767e92b15386e6d35d74b.png

 

Description for human

API의 목적과 용도를 작성합니다. 유저 쿼리를을 바탕으로 모델이 여러 API 중에서 필요한 API를 선택하는 기준이 됩니다. 모든 API의 역할이 명확하게 작성되어야 합니다.

image.png.78e374d375d2a07d1bd22081f3c1b899.png

 

Description for model

  • 모델이 답변에 사용할 API를 결정하기 위해 사용자의 질문과 ‘decription_for_model’을 모두 참고하여 여러 개의 API 중 적절한 API를 선택합니다.
  • 내용은 가능한 구체적이어야하며, 예시를 포함할 시 모델이 정확한 답변을 생성하는 데 도움이 됩니다.
  • 포함 권장 내용
      내용
      예시
    스킬의 용도 네이버 지역 서비스에 등록된 업체 및 기관을 검색하기 위해서는 LocalSearch 스킬을 사용하세요.
    각 paths의 용도 /v1/search/local.json은 업체나 기관의 이름, 주소 (ex. 도로명 주소, 지번 주소)을 검색어로 입력할 때 동작합니다.
    API를 통해 얻을 수 있는 정보 업체나 기관의 이름, 도로명 주소, 지번 주소를 알 수 있습니다.
    특정 지시 사항
    • 원하는 정렬 방식 (ex.블로그의 리뷰 개수순, 정확도순 등)을 포함하여 검색 결과를 요청할 수 있습니다.
    • 모든 호출 결과를 최종답변에 반드시 포함해주세요.

image.png.b1a405237c2e9bb83f09ea2b5984eb5e.png

 

6. 데이터 수집하기


작성된 API Spec과 Manifest를 토대로 데이터를 수집합니다. 이 단계에서 모델의 사고 과정이나 최종 답변을 수정할 수 있습니다. 수정된 데이터를 모델에 학습시켜 튜닝을 진행하게됩니다.

호출 옵션값 입력

앞서 획득한 클라이언트 아이디와 클라이언트 시크릿 정보를 호출옵션에 저장하여 사용합니다. 아래 포맷을 참고하여 호출옵션 헤더에 각각의 인증값을 입력합니다.
스킬셋 내에 등록된 모든 API에 대해 호출 옵션을 일괄 적용하고자 할 때는 baseOperation 필드를 활용하고, 특정 Operation ID에 한하여 호출 옵션을 적용하고자하면 operations 필드를 활용합니다.

{
  "baseOperation": {
    "header": {
      "X-Naver-Client-Id": "애플리케이션 등록 시 발급받은 클라이언트 아이디 값",
      "X-Naver-Client-Secret": "애플리케이션 등록 시 발급받은 클라이언트 시크릿 값"
    },
    "query": null,
    "requestBody": null
  }
}

 

CoT 과정 살펴보기

데이터 수집에서 [데이터 불러오기]를 통해 미리 수집해둔 예제 데이터를 확인할 수 있습니다. 예제를 통해 상세한 CoT 과정을 살펴봅니다.

CoT는 Chain of Thought의 약자로, 쉽게 말해 LLM 모델이 사용자 쿼리에 대하여 답변을 생성하는 과정에서 단계별로 생각을 정리하고 사고를 펼치는 방법입니다. 데이터 수집 인터페이스에서 각 Step별 모델의 사고 과정(CoT)을 살펴볼 수 있습니다.

 

지역 검색 스킬셋의 예제 쿼리 중 하나를 살펴보겠습니다.

쿼리 데이터
정자동 맛집 찾아줘. 리뷰 많은 순으로 나열해줘.

 

Step 1. 호출 스킬 선택

  • 입력된 쿼리를 통해 적절한 스킬을 선택하였는지 검토합니다. LocalSearch 스킬을 올바르게 선택한 것을 확인할 수 있습니다.
  • 하나의 문장을 모델이 적절히 분리하며, 분리된 쿼리의 수만큼 스킬이 호출됩니다. 예를 들어, "네이버 1784 주소와 근처 카페 추천해 주세요"라는 쿼리에 대해서는 "네이버 1784 주소"와 "네이버 1784 근처 카페"로 쿼리를 분리하여 스킬을 두 번 호출하게 됩니다.

image.png.0b48a188f7d7d953661ee4e3a12043c5.png

 

Step 2. 액션 입력 생성

  • 액션 입력 필드를 통해 API Spec 내 파라미터 Description 및 Manifest에 작성한 내용이 올바르게 호출되었는지 검토 합니다. 앞서 API Spec 내 display 파라미터의 default 값을 2로 설정하였고, 리뷰 순으로 정렬하라는 유저 쿼리를 받아 display=2와 sort=comment를 포함한 URL이 반환되었습니다.
  • 만약 이 단계에서 의도한 대로 모델이 액션 입력을 생성하지 않는다면 API Spec에서 파라미터의 'description'에 예시를 추가해 주십시오.
  • 혹은 액션입력을 의도에 맞게 수정한 뒤 데이터를 저장하면 학습을 통해 모델이 개선됩니다. 데이터를 수정할 때는 사용자 요청과 무관한 키워드를 필드에 포함해서는 안됩니다.

image.png.5d6a284d1f682f610a6ef09da4b39963.png

 

예를 들어, "display" 파라미터의 값을 3으로 고정하고 싶습니다. 이 때 두 가지 방법으로 튜닝을 진행할 수 있습니다.

  • 액션입력 값 수정
    • 액션 입력 파라미터 값을 직접 수정하고 [적용]버튼을 눌러 결과를 다시 호출합니다. 이때 액션 입력 파라미터에 맞게 API 조회 결과 내용도 반드시 수정해야합니다. 이렇게 수정한 데이터를 여러 건 수집하여 학습을 진행합니다.
    • 예 : https://openapi.naver.com/v1/search/local.json?query=정자동 맛집&display=3&sort=comment
  • API Spec 수정
    • 파라미터 description에 요구사항을 명확히 작성합니다. API Spec 수정을 통하면 데이터 수집 단계에서 수정 없이 액션 입력값을 올바르게 수정할 수 있습니다.
    • 예: "검색된 업체 목록 개수. 특정 개수를 요청하지 않을 경우, 검색된 업체는 반드시 세 곳을 보여주세요."라는 description을 추가 합니다.

 

  • query 파라미터에는 간결한 값을 입력해야 잘 작동합니다. 만약 모델이 생성한 파라미터 값이 따르면 '정자동 근처 맛집'이라면 해당 검색 키워드로는 API 검색 결과를 생성하지 못할 수 있습니다. 따라서 액션 입력 항목에서 쿼리를 '정자동 맛집'으로 수정한 후 [적용] 버튼을 클릭하여 API 검색 결과를 다시 생성해 주십시오.
  • 예 : https://openapi.naver.com/v1/search/local.json?query=정자동 근처 맛집&display=2&sort=comment

 

Step 3. 결과 정리

  • 호출 결과를 취합하여 생성한 결과 정리를 생성합니다 .이를 바탕으로 최종 답변이 생성됩니다.

image.png.4355c09ebb04a92d9c26a2ef124a3f10.png

 

최종 답변 수정하기

Step 3의 결과 정리를 토대로 생성된 최종 답변을 검토합니다. 최종 답변을 원하는 형식으로 수정 후 데이터를 학습 시키면 모델을 튜닝할 수 있습니다.
스킬 호출 결과를 바탕으로 최종 답변을 생성하는 과정에서 모델이 일부 정보를 누락하거나 답변의 스타일(양식, 어투 등)을 변경하고자 하는 경우, 이를 의도에 맞게 수정한 뒤 데이터를 저장하면 학습을 통해 모델을 개선할 수 있습니다.

image.png.280b92b4f893356c503b4c847df3e2d9.png

  • 만약 최종 답변을 수정했다면 Step 3 결과 정리도 동일한 내용으로 구성되었는지 검토 후 함께 수정해야합니다.
  • 스킬 호출 결과에 나타나지 않은 정보를 임의로 최종 답변에 포함해서는 안됩니다.

 

예제 데이터의 경우 다음 형식에 맞추어 최종 답변을 수정하였습니다. 

{사용자 요청 내용}을 알려드리겠습니다.
1. {장소1 이름}
- 주소: {장소 1의 주소}
 
2. {장소2 이름}
- 주소: {장소 2의 주소}
 
더 필요하신 지역 정보가 있다면 말씀해주세요.

 

스킬셋의 답변 형식과 최종 답변이 일치하지 않는 경우, 답변 형식을 직접 수정하여 학습을 진행할 수 있습니다.

  • 답변 형식: 답변 포맷에 "JSON" 형식 선택 후 추가적인 설명 란에 "key는 반드시 영문으로 작성해 주세요."라고 입력
  • 반환된 최종 답변: "2023년 8월 9일 기준 모자 쇼핑 구매전환 이용자 수는 다음과 같습니다. 페이지 뷰 수는 1,003,120, 이용자 수는 1,222,334입니다."
  • 수정할 답변 형식의 작성 예시:
    • {
         "20230809":{
            "purchase":[
               {
                  "pv":"1,003,120",
                  "puruser":"1,222,334"
               }
            ]
         }
      }

 

7. 데이터 학습하기


모델이 더 정확한 답변을 생성할 수 있도록 수집한 데이터를 모델에 학습시킵니다. 수집된 데이터 중 '작업 완료' 상태의 데이터들만 학습에 사용되며, 튜닝 성능을 보장하기 위해서는 1개의 스킬셋 당 50~100개의 데이터를 수집하여 학습을 진행할 것을 권장합니다. 데이터 학습은 스킬 호출 학습과 최종 답변 학습으로 구분되며, 각 영역의 데이터를 수정하여 학습을 진행할 수 있습니다.

  • 스킬 호출 학습 : 사용자 요청을 수행하기 위한 API URL 및 파라미터를 모델이 정확하게 생성하지 못한 경우, 이를 의도에 맞게 수정한 뒤 데이터를 저장하면 학습을 통해 모델이 개선됩니다. 데이터를 수정할 때는 사용자 요청과 무관한 키워드를 필드에 포함해서는 안됩니다.
  • 최종 답변 학습 : 스킬 호출 결과를 바탕으로 최종 답변을 생성하는 과정에서 모델이 일부 정보를 누락하거나 답변의 스타일(양식, 어투 등)을 변경하고자 하는 경우, 이를 의도에 맞게 수정한 뒤 데이터를 저장하면 학습을 통해 모델이 개선됩니다. 이때 스킬 호출 결과에 나타나지 않은 정보를 임의로 최종 답변에 포함해서는 안됩니다.

image.png.9fedec42aef52cf38c9875c6df636b11.png

 

8. 서비스 적용하기


데이터 수집 화면에서 학습된 버전에 대한 테스트를 진행해 볼 수 있습니다. 버전 관리 내 [코드 보기] 버튼을 클릭하여 API 호출 정보를 확인할 수 있으며, API를 호출하는 방법은 스킬셋 답변 생성 API 가이드를 참조해 주십시오.

curl --location --request POST 'https://clovastudio.stream.ntruss.com/testapp/v1/skillsets{skillset-id}/versions/{version}/final-answer' \
--header 'X-NCP-CLOVASTUDIO-API-KEY: \
--header 'X-NCP-APIGW-API-KEY: \
--header 'X-NCP-CLOVASTUDIO-REQUEST-ID: \
--header 'Content-Type: application/json' \
--header 'Accept: text/event-stream' \
--data '{
    "query""리뷰 많은 순으로 나열해줘.",
    "tokenStream": true,
    "chatHistory": [
        {
            "role""user",
            "content""정자동 근처 맛집 찾아줘."
         },
        {
            "role""assistant",
            "content""정자동 근처 맛집을 알려드리겠습니다.\n\n1. 효원식당 분당정자점\n- 주소: 경기도 성남시 분당구 정자동 66-11 1층\n- 카테고리: 한식>육류,고기요리\n\n2. 화로양\n- 주소: 경기도 성남시 분당구 정자동 174-1 더샵스타파크 C-1호\n- 카테고리: 음식점>양갈비\n\n3. 하누비노 정자점\n- 주소: 경기도 성남시 분당구 정자동 166-2 정자역 엠코헤리츠 3단지 101호\n- 카테고리: 한식>소고기구이\n\n더 필요한 지역 정보가 있다면 말씀해주세요."
         }
     ],
     "requestOverride": {
  "baseOperation": {
    "header": {
      "X-Naver-Client-Id""애플리케이션 등록 시 발급받은 클라이언트 아이디 값",
      "X-Naver-Client-Secret""애플리케이션 등록 시 발급받은 클라이언트 시크릿 값"
    },
    "query": null,
    "requestBody": null
  }
}

 

 

image.png.b9da587841f5ad3f1b694d81ce098866.png

 

링크 복사
다른 사이트에 공유하기

  • CLOVA Studio 운영자 changed the title to [스킬 구축하기 실전] 네이버 지역 검색 API를 하이퍼클로바X AI와 연동하는 법

게시글 및 댓글을 작성하려면 로그인 해주세요.



로그인
×
×
  • Create New...