AlloyDB 및 Vertex AI Agent Builder로 스마트 쇼핑 어시스턴트 빌드 - 2부

1. 개요

급변하는 오늘날의 소매 환경에서 탁월한 고객 서비스를 제공하는 동시에 개인화된 쇼핑 경험을 제공하는 것이 무엇보다 중요합니다. 고객 질문에 답변하고, 제품 탐색을 안내하고, 검색결과를 맞춤설정할 수 있도록 설계된 지식 중심의 채팅 애플리케이션을 만드는 과정을 기술적으로 안내합니다. 이 혁신적인 솔루션은 데이터 스토리지를 위한 AlloyDB, 문맥에 대한 이해를 위한 사내 분석 엔진, 관련성 검증을 위한 Gemini (대규모 언어 모델), 지능형 대화형 어시스턴트를 신속하게 부트스트랩하기 위한 Google Agent Builder의 강력한 기능을 결합합니다.

과제: 오늘날의 소매업 고객은 고유한 선호도에 맞는 즉각적인 답변과 제품 추천을 기대합니다. 기존의 검색 방법으로는 이러한 수준의 맞춤설정을 제공하지 못하는 경우가 많습니다.

해결 방법: Google의 지식 기반 채팅 애플리케이션은 이 문제를 정면으로 해결합니다. 소매 데이터에서 얻은 풍부한 기술 자료를 활용하여 고객 의도를 이해하고, 지능적으로 대응하며, 관련성이 매우 높은 결과를 제공합니다.

빌드할 항목

이 실습 (2부)에서 학습할 내용은 다음과 같습니다.

  1. Vertex AI Agent Builder 에이전트 빌드
  2. AlloyDB 도구를 에이전트와 통합

요구사항

  • 브라우저(Chrome 또는 Firefox 등)
  • 결제가 사용 설정된 Google Cloud 프로젝트.

2. 아키텍처

데이터 흐름: 데이터가 시스템에서 어떻게 이동하는지 자세히 살펴보겠습니다.

수집:

소매 데이터 (인벤토리, 제품 설명, 고객 상호작용)가 지속적으로 AlloyDB에 로드됩니다.

애널리틱스 엔진:

AlloyDB를 분석 엔진으로 사용하여 다음을 수행합니다.

  1. 컨텍스트 추출: 엔진은 AlloyDB 내에 저장된 데이터를 분석하여 제품, 카테고리, 고객 행동 등(해당하는 경우) 간의 관계를 파악합니다.
  2. 임베딩 생성: 사용자의 쿼리와 AlloyDB에 저장된 정보 모두에 대해 임베딩 (텍스트의 수학적 표현)이 생성됩니다.
  3. 벡터 검색: 엔진이 유사성 검색을 수행하여 쿼리 임베딩을 제품 설명, 리뷰 및 기타 관련 데이터의 임베딩과 비교합니다. 이를 통해 가장 관련성이 높은 25개의 '최근접 이웃'을 식별합니다.

Gemini 검증:

이러한 잠재적 대답은 평가를 위해 Gemini로 전송됩니다. Gemini는 정말 관련이 있고 사용자와 공유하기에 안전한지 판단합니다.

응답 생성:

검증된 응답은 JSON 배열로 구조화되고 전체 엔진이 Agent Builder에서 호출되는 서버리스 Cloud Run 함수로 패키징됩니다.

위 단계는 실습 1부 에서 이미 다뤘습니다.

저희는 스마트 쇼핑 도우미의 기반이 되는 지식 기반 분석 엔진을 만드는 방법에 대한 기술적인 세부사항에 대해서도 논의했습니다. 이제 Agent Builder의 마법을 활용하여 대화형 인터페이스에서 이 엔진을 생생하게 구현하는 방법을 살펴보겠습니다. 2부를 시작하기 전에 엔드포인트 URL을 준비해야 합니다. 이 실습에서 다룰 다음 단계는 다음과 같습니다.

대화형 상호작용:

Agent Builder는 자연어 형식으로 사용자에게 응답을 제공하여 대화를 용이하게 합니다.

3. 시작하기 전에

프로젝트 만들기

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  2. Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요 .
  3. bq가 미리 로드되어 제공되는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. Google Cloud 콘솔 상단에서 Cloud Shell 활성화를 클릭합니다.

Cloud Shell 활성화 버튼 이미지

  1. Cloud Shell에 연결되면 다음 명령어를 사용하여 인증이 완료되었는지, 프로젝트가 내 프로젝트 ID로 설정되어 있는지 확인합니다.
gcloud auth list
  1. Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
  1. 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
gcloud config set project <YOUR_PROJECT_ID>
  1. 필요한 API를 사용 설정합니다. gcloud 명령어 대신 각 제품을 검색하거나 이 링크를 사용하여 콘솔을 통해 사용할 수 있습니다.

누락된 API가 있으면 구현 과정에서 언제든지 사용 설정할 수 있습니다.

gcloud 명령어 및 사용법은 문서를 참조하세요.

중요 사항: 또한 이 과정을 완료하려면 실습 1부를 완료해야 합니다.

4. 에이전트 생성

Agent Builder 소개

Agent Builder는 빠르고 효율적으로 대화형 에이전트를 만들 수 있는 강력한 로우 코드 도구입니다. 대화 흐름을 설계하고 기술 자료를 통합하며 외부 API에 연결하는 프로세스를 간소화합니다. 여기서는 Agent Builder를 사용하여 1부에서 빌드한 Cloud 함수 엔드포인트와 원활하게 연결하여 쇼핑 어시스턴트가 소매 기술 자료에 액세스하고 고객 쿼리에 지능적으로 응답할 수 있도록 지원합니다.

에이전트 빌드

의류 제품에 대한 사용자 질문에 답변하기 위한 새 에이전트를 만들어 보겠습니다.

  1. 먼저 Agent Builder 플랫폼에 로그인합니다. API를 활성화하라는 메시지가 표시되면 계속 진행하여 API 활성화를 클릭합니다.
  2. '앱 만들기'를 클릭합니다. 에이전트에 설명이 포함된 이름 (예: 'Retail Shopping Assistant').
  3. 앱 유형 '에이전트'를 클릭합니다.

462bb48664e9a14e.png

  1. 에서 자세한 내용을 확인하실 수 있습니다. 에이전트에 'Retail Shopping Assistant'와 같이 설명이 포함된 이름을 지정합니다. 리전을 us-central1로 설정

10eceef44b1600d1.png

  1. 상담사의 세부정보를 입력합니다.
  2. 에이전트 이름을 '소매 쇼핑 에이전트'로 변경합니다.
  3. 아래의 '목표'를 추가합니다.
You are a shopping assistant agent! Your job is to help the customer search for their ideal apparels, allow them to add items to their cart, remove items from their cart, and review items in their cart. Once a user is done searching, open the search results in a user friendly html page.

537a87a842aae897.png

  1. 이 시점에서 저장하고 지금은 안내를 비워 둡니다.
  2. 그런 다음 탐색 메뉴에서 '도구'를 클릭하고 '만들기'를 클릭합니다.

2ffae953bbad38e5.png

도구 이름 입력: 소매 쇼핑 도구

도구 설명을 입력합니다.

This tool refers to the dataset in the backend as the context information for product inventory. It takes as input the user's search text summarized by the agent and matches with the most appropriate list of items and returns as an array of items.

스키마 입력 - YAML 형식의 OpenAPI:

백엔드 엔드포인트를 사용하여 에이전트를 구동하는 부분입니다. 아래 OpenAPI 사양을 복사하고 Cloud 함수 엔드포인트로 URL 자리표시자를 꺾쇠괄호로 묶어 바꿉니다.

openapi: 3.0.0
info:
 title: AlloyDB Product Matcher
 description: A Cloud Function to query AlloyDB for product matches based on user search text.
 version: 1.0.0
servers:
 - url: <<https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/alloy-gem>>
paths:
 /:
   post:
     summary: Find matching products based on search text.
     operationId: apparelSearch
     requestBody:
       description: JSON object containing the search text.
       required: true
       content:
         application/json:
           schema:
             type: object
             properties:
               search:
                 type: string
                 description: The user's search query for product matching.
     responses:
       '200':
         description: Successful response with a JSON array of matching products.
         content:
           application/json:
             schema:
               type: array
               items:
                 type: object
                 properties:
                   id:
                     type: string
                     description: Product ID.
                   category:
                     type: string
                     description: Product category.
                   sub_category:
                     type: string
                     description: Product sub-category.
                   uri:
                     type: string
                     description: Product URI or URL.
                   description:
                     type: string
                     description: Product description.
                   literature:
                     type: object
                     description: JSON object containing match information from the ML model.
                     properties:
                       MATCH:
                         type: string
                         description: Whether the product matches the search query (YES/NO).
                       PERCENTAGE:
                         type: string
                         description: Percentage of match.
                       DIFFERENCE:
                         type: string
                         description: Description of differences between the search and product.
       '500':
         description: Internal server error.

다른 구성은 기본값으로 두고 '저장'을 클릭합니다.

  1. '도구'를 추가하려고 하므로 이 시점에서 상담사로 돌아갑니다. 구성을 에이전트의 '지침'으로 변경합니다. 다음을 안내 자리표시자에 추가합니다 (들여쓰기는 흐름을 정의하는 데 중요함).
- Greet the user and answer their question to the best of your knowledge.
- Summarize the user's request and ask them to confirm that you understood correctly.
   - Check if the request has details like gender, color, material, style and other key apparel details already.
   - If not, seek clarifying details.
   - If the search request is very broad, then ask the user to narrow down the request with specific details that you believe could be personal preferences.
   - Once all the necessary details are met, summarize your final understanding of the request with the user.
- Use ${TOOL: Retail Shopping Tool} to help the user with their task.
- If the request has unrelated input text, gracefully convey that you don't have information on that topic.
- Do not give product availability information outside the source that is provided to you in ${TOOL: Retail Shopping Tool}.
- Do not assist with any information unless you are certain that you know the answer and it is grounded in the source of truth.
- Thank the user for their business and say goodbye.

'소매 쇼핑 도구'를 선택합니다. '사용 가능한 도구'에서 섹션을 클릭한 다음 에이전트를 다시 저장합니다.

5. 에이전트 테스트

오른쪽 창에 에이전트를 테스트할 수 있는 미리보기 에이전트 섹션이 표시됩니다.

아래 스크린샷에서 볼 수 있듯이 파란색 프린트가 있는 흰색 셔츠를 요청하는 사용자로서 채팅을 시작했습니다.

63ac3ef6d1f0f614.png

다음은 JSON 응답입니다.

acf3cb0e2be2ed91.png

AlloyDB 유사성 검색을 처리하는 Cloud 함수의 원시 JSON 결과입니다. 작업이 끝났습니다. 이제 상담사의 준비가 모두 끝났습니다.

6. 샘플 대화 흐름

이 시점에서 대화상자 (대화) 에이전트의 흐름을 테스트하고 반복할 수 있습니다.

User: I'm looking for women's boots for winter. 

Agent: (OpenAPI call to Cloud Function that works with AlloyDB Similarity Search) 

Cloud Function: (Processes query, returns JSON array) 

Agent: Based on your preferences, here are some options: [Product 1, Product 2, Product 3]. Would you like to see more details about any of these?

User: No, That is all. Bye!

Agent: Have a good day!

퓨샷 프롬프트

이제 대화형 에이전트에서 사진과 링크를 포함한 특정 그래픽 형식으로 결과를 보고 싶다고 가정해 보겠습니다. 이를 위해 퓨샷 프롬프팅이라고도 하는 대화의 예시를 사용합니다.

즉, 에이전트 빌더에 몇 가지 예시를 추가하여 일관된 결과 형식을 유지하려고 합니다.

'에이전트 테스트'의 이전 스크린샷 중 하나에서 섹션에서 에이전트의 응답이 '알겠습니다. 파란색 프린트가 있는 흰색 셔츠를 찾고 있습니다...". 해당 응답으로 이동하거나 에이전트의 오른쪽 창에서 새 테스트 대화를 만듭니다.

  1. '사용자 입력 입력' 입력란에 섹션:

dc8c010c36400e64.png

다음과 같은 응답이 표시됩니다.

e31d9f53bf5564c8.png

API 엔드포인트에서 반환한 JSON 배열도 확인할 수 있습니다.

  1. 이제 미리보기 섹션의 여백에서 Agent Name(상담사 이름)을 클릭합니다(아래 이미지에 빨간색 체크 표시로 강조표시됨). 채팅 미리보기 섹션의 모든 탭이 강조표시됩니다. 이제 '예 저장'을 클릭합니다. 미리보기 섹션의 오른쪽 상단에 있습니다. 그러면 다음과 같이 나타납니다.

1e0a9f6815f63bf9.png

  1. '이미지와 함께 응답'이라는 표시 이름으로 대화를 저장합니다. '만들기'를 클릭합니다.
  2. 이제 위 이미지에서 검은색 체크 표시가 있는 대답 탭으로 이동하여 노란색 샌들을 찾고 있습니다. 맞나요?" 다음과 같이 바꿉니다.
I see you are looking for yellow sandals. Here are a few options for you:
<!DOCTYPE html>
<html>
<body>

<h2>Featured Sandals</h2>

<table style="overflow-x: auto; white-space: nowrap;">
    <tr>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/d27dbd8e9666b9af2d72fbfde315f76d_images.jpg" alt="Yellow sandals from Estd. 1977" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/b7a479fe5f56457e930541a789c5df68_images.jpg" alt="Yellow sandals from Gliders" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/b6c813734b29b89d1055fd000ea50743_images.jpg" alt="Yellow sandals from Rocia" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/ee0e918c229e76e0e7e61712e9d2ecb3_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/5bdd4c9e739205e28ee134ff7849bc60_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
        </td>
    </tr>
</table>

</body>
</html>
  1. '저장'을 클릭합니다. 있습니다.

대화의 다양한 변형과 흐름을 사용하여 원하는 만큼 많은 예시에 대해 프로세스를 반복합니다.

이제 사용자 입력으로 테스트해 보세요.

450166a929645353.png

다른 응답 유형:

be8908c99cd33730.png

이상입니다. 소매업 앱을 위한 대화형 에이전트를 만들고 테스트했습니다.

7. 설치 및 통합

에이전트가 만족스러우면 Agent Builder의 통합을 사용하여 다양한 채널에 간편하게 배포할 수 있습니다. 웹사이트에 삽입하거나, 인기 있는 메시지 플랫폼과 통합하거나, 전용 모바일 앱을 만들 수도 있습니다. 이 블로그에서 다룬 웹 클라이언트 애플리케이션에서 Agent Builder API를 직접 사용할 수도 있습니다.

8. 삭제

이 게시물에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 관리
  2. 리소스 페이지를 참조하세요.
  3. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  4. 대화상자에서 프로젝트 ID를 입력하고 종료를 클릭하여 프로젝트를 삭제합니다.

9. 축하합니다

축하합니다. 맞춤형 분석 엔진의 강력한 기능을 Agent Builder의 직관적인 인터페이스와 통합하여 개인화된 경험을 제공하고 질문에 정확하게 답변하며 궁극적으로 고객 만족도와 판매를 촉진하는 스마트 소매 쇼핑 도우미를 만들었습니다. Google은 AlloyDB, Vertex AI, 벡터 검색의 기능을 결합하여 컨텍스트 및 벡터 검색의 접근성과 효율, 진정한 의미 중심, 에이전트성을 향상하는 데 큰 도약을 마련했습니다.