Gemini AI 채팅 앱의 채팅 대화를 기반으로 질문에 답변하기

이 튜토리얼에서는 Gemini가 포함된 Vertex AI 기반의 생성형 AI를 사용하여 Chat 공간의 대화를 기반으로 질문에 답하는 Google Chat 앱을 만드는 방법을 보여줍니다. Chat 앱은 Google Workspace Events API와 Pub/Sub를 사용하여, 멘션되지 않더라도 Chat 스페이스에 게시된 질문을 실시간으로 인식하고 대답합니다.

채팅 앱은 스페이스에서 전송된 모든 메시지를 데이터 소스 및 기술 자료로 사용합니다. 누군가 질문을 하면 Chat 앱이 이전에 공유된 답변을 확인한 후 공유합니다. 답변이 없으면 답변할 수 없다고 표시됩니다. 사용자는 각 답변에서 액세서리 작업 버튼을 클릭하여 스페이스 관리자를 @멘션하고 답변을 요청할 수 있습니다. Google Chat 앱은 Gemini AI를 사용하여 추가된 공간의 대화를 지속적으로 학습하면서 기술 자료를 조정하고 확장합니다.

직원 온보딩 및 지원 스페이스에서 Chat 앱이 작동하는 방식은 다음과 같습니다.

  • AI 지식 어시스턴트 앱을 언급하면 앱이 스페이스에 추가됩니다.
    그림 1. 찰리는 Chat 스페이스에 AI 지식 어시스턴트 Chat 앱을 추가합니다.
  • 진아가 질문합니다.
    그림 2. 다나가 회사에서 강연 교육을 제공하는지 묻습니다.
  • AI 지식 어시스턴트 채팅 앱이 질문에 답합니다.
    그림 3. AI 지식 어시스턴트 Chat 앱이 Gemini가 포함된 Vertex AI에 Chat 스페이스의 대화 기록을 기반으로 다나의 질문에 답변하도록 요청한 후 답변을 공유합니다.

기본 요건

목표

  • 생성형 AI를 사용하여 Chat 스페이스 대화에서 공유된 지식을 바탕으로 질문에 답하는 Chat 앱을 빌드합니다.
  • 생성형 AI를 사용하면 다음과 같은 이점이 있습니다.
    • 직원 질문을 감지하고 답변합니다.
    • Chat 스페이스에서 진행 중인 대화를 통해 지속적으로 학습합니다.
  • 채팅 앱에 직접 메시지가 전송되지 않는 경우에도 Chat 스페이스에서 실시간으로 메시지를 듣고 응답하세요.
  • Firestore 데이터베이스에 쓰고 읽어서 메시지를 유지합니다.
  • 질문에 대한 답변을 찾을 수 없는 경우 스페이스 관리자를 언급하여 Chat 스페이스에서 공동작업을 용이하게 합니다.

아키텍처

다음 다이어그램은 AI 지식 어시스턴트 채팅 앱에서 사용하는 Google Workspace 및 Google Cloud 리소스의 아키텍처를 보여줍니다.

AI 지식 어시스턴트 채팅 앱의 아키텍처 다이어그램

AI 지식 어시스턴트 채팅 앱은 다음과 같이 작동합니다.

  • 사용자가 Chat 스페이스에 AI 지식 어시스턴트 채팅 앱을 추가합니다.

    1. Chat 앱은 Chat 스페이스에 앱을 추가한 사용자에게 인증 및 승인을 구성하라는 메시지를 표시합니다.

    2. Chat 앱은 Chat API에서 spaces.messages.list 메서드를 호출하여 스페이스의 메시지를 가져온 다음 가져온 메시지를 Firestore 데이터베이스에 저장합니다.

    3. Chat 앱은 Google Workspace Events API의 subscriptions.create 메서드를 호출하여 스페이스의 메시지와 같은 이벤트를 리슨하기 시작합니다. 구독의 알림 엔드포인트는 Eventarc를 사용하여 이벤트를 Chat 앱으로 전달하는 Pub/Sub 주제입니다.

    4. Chat 앱이 스페이스에 소개 메시지를 게시합니다.

  • Chat 스페이스의 사용자가 다음 메시지를 게시합니다.

    1. Chat 앱은 Pub/Sub 주제에서 메시지를 실시간으로 수신합니다.

    2. 채팅 앱이 Firestore 데이터베이스에 메시지를 추가합니다.

      나중에 사용자가 메시지를 수정하거나 삭제하면 Chat 앱은 업데이트되거나 삭제된 이벤트를 실시간으로 수신한 후 Firestore 데이터베이스에서 메시지를 업데이트하거나 삭제합니다.

    3. 채팅 앱은 Gemini를 사용하여 Vertex AI에 메시지를 전송합니다

      1. 프롬프트는 Gemini with Vertex AI에 메시지에 질문이 포함되어 있는지 확인하라고 지시합니다. 일치하는 경우 Gemini는 Firestore에 저장된 Chat 스페이스의 메시지 기록을 기반으로 질문에 답변하고 Google Chat 앱은 메시지를 Chat 스페이스로 전송합니다. 응답이 없는 경우 응답하지 않습니다.

      2. Gemini가 포함된 Vertex AI가 질문에 답변하면 Chat 앱은 앱 인증을 사용하여 Chat API에서 spaces.messages.create 메서드를 호출하여 답변을 게시합니다.

        Gemini를 지원하는 Vertex AI가 질문에 답변할 수 없는 경우 Chat 앱은 Chat 스페이스 기록에서 해당 질문에 대한 답변을 찾을 수 없다는 메시지를 게시합니다.

        메시지에는 항상 사용자가 클릭할 수 있는 액세서리 작업 버튼이 포함됩니다. 이 버튼을 통해 채팅 앱은 스페이스 관리자를 @멘션하여 응답을 요청합니다.

  • 채팅 앱이 Google Workspace Events API에서 Chat 스페이스 구독이 곧 만료된다는 수명 주기 알림을 수신합니다.

    1. Chat 앱은 Google Workspace Events API에서 subscriptions.patch 메서드를 호출하여 정기 결제 갱신 요청을 보냅니다.
  • Chat 앱이 Chat 스페이스에서 삭제되는 경우:

    1. Chat 앱은 Google Workspace Events API에서 subscriptions.delete 메서드를 호출하여 구독을 삭제합니다.

    2. Chat 앱이 Firestore에서 Chat 스페이스의 데이터를 삭제합니다.

AI 지식 어시스턴트 채팅 앱에서 사용하는 제품 검토

AI 지식 어시스턴트 채팅 앱은 다음 Google Workspace 및 Google Cloud 제품을 사용합니다.

  • Gemini를 사용한 Vertex AI API: Gemini를 기반으로 하는 생성형 AI 플랫폼입니다. AI 지식 어시스턴트 채팅 앱은 Gemini와 Vertex AI API를 함께 사용하여 직원의 질문을 인식하고, 이해하고, 답변합니다.
  • Chat API: 메시지와 같은 채팅 상호작용 이벤트를 수신하고 응답하는 Google Chat 앱을 개발하기 위한 API입니다. AI 지식 어시스턴트 채팅 앱은 Chat API를 사용하여 다음을 수행합니다.
    • Chat에서 전송한 상호작용 이벤트를 수신하고 응답합니다.
    • 스페이스에서 전송된 메시지를 나열합니다.
    • 스페이스에 사용자 질문에 대한 답변을 게시합니다.
    • Chat에 표시되는 방식을 결정하는 속성(예: 이름, 아바타 이미지)을 구성합니다.
  • Google Workspace Events API: 이 API를 사용하면 Google Workspace 애플리케이션 전반에서 이벤트를 구독하고 변경 알림을 관리할 수 있습니다. AI 지식 어시스턴트 Chat 앱은 Google Workspace Events API를 사용하여 Chat 스페이스에 게시된 메시지를 리슨합니다. 따라서 메시지가 언급되지 않은 경우에도 질문을 감지하고 답변할 수 있습니다.
  • Firestore: 서버리스 문서 데이터베이스입니다. AI 지식 어시스턴트 채팅 앱은 Firestore를 사용하여 Chat 스페이스에서 보낸 메시지에 대한 데이터를 저장합니다.
  • Pub/Sub: 메시지를 생성하는 서비스를 해당 메시지를 처리하는 서비스에서 분리하는 확장 가능한 비동기 메시징 서비스입니다. AI 지식 어시스턴트 채팅 앱은 Pub/Sub를 사용하여 Chat 공간의 구독 이벤트를 수신합니다.
  • Eventarc: Eventarc를 사용하면 기본 인프라를 구현, 맞춤설정 또는 유지관리할 필요 없이 이벤트 기반 아키텍처를 빌드할 수 있습니다. AI 지식 어시스턴트 채팅 앱은 Eventarc를 사용하여 Pub/Sub에서 Chat 스페이스 및 구독 이벤트를 수신 및 처리하는 Cloud 함수로 이벤트를 라우팅합니다.
  • Cloud Functions: 서버 또는 런타임 환경을 관리할 필요 없이 Chat 상호작용 및 구독 이벤트에 대응하는 단일 목적의 독립형 함수를 만들 수 있게 해주는 경량 서버리스 컴퓨팅 서비스입니다. AI 지식 어시스턴트 채팅 앱은 다음과 같은 두 가지 Cloud Functions를 사용합니다.
    • app: Chat에서 상호작용 이벤트를 전송하는 HTTP 엔드포인트를 호스팅하고 이러한 이벤트를 처리하고 응답하는 로직을 실행하는 컴퓨팅 플랫폼으로 사용합니다.
    • eventsApp: Pub/Sub 구독의 메시지와 같은 Chat 스페이스 이벤트를 수신하고 처리합니다.
    Cloud Functions는 다음 Google Cloud 제품을 사용하여 컴퓨팅 리소스를 빌드하고 호스팅합니다.
    • Cloud Build: 자동화된 빌드를 실행하는 완전 관리형 지속적 통합, 전송, 배포 플랫폼입니다.
    • Cloud Run: 컨테이너화된 앱을 실행하기 위한 완전 관리형 환경입니다.

환경 준비

이 섹션에서는 Chat 앱의 Google Cloud 프로젝트를 만들고 구성하는 방법을 보여줍니다.

Google Cloud 프로젝트 만들기

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 메뉴 > IAM 및 관리자 > 프로젝트 만들기로 이동합니다.

    프로젝트 만들기로 이동

  2. 프로젝트 이름 필드에 프로젝트를 설명하는 이름을 입력합니다.

    선택사항: 프로젝트 ID를 수정하려면 수정을 클릭합니다. 프로젝트를 만든 후에는 프로젝트 ID를 변경할 수 없으므로 프로젝트의 수명 동안 필요에 맞는 ID를 선택하세요.

  3. 위치 필드에서 찾아보기를 클릭하여 프로젝트의 가능한 위치를 표시합니다. 그런 다음 선택을 클릭합니다.
  4. 만들기를 클릭합니다. Google Cloud 콘솔이 대시보드 페이지로 이동하고 몇 분 이내에 프로젝트가 생성됩니다.

gcloud CLI

다음 개발 환경 중 하나에서 Google Cloud CLI(gcloud)에 액세스합니다.

  • Cloud Shell: gcloud CLI가 이미 설정된 온라인 터미널을 사용하려면 Cloud Shell을 활성화하세요.
    Cloud Shell 활성화
  • 로컬 셸: 로컬 개발 환경을 사용하려면 gcloud CLI를 설치하고 초기화합니다.
    Cloud 프로젝트를 만들려면 gcloud projects create 명령어를 사용합니다.
    gcloud projects create PROJECT_ID
    생성하려는 프로젝트의 ID를 설정하여 PROJECT_ID를 바꿉니다.

Cloud 프로젝트에 결제 사용 설정

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 결제로 이동합니다. 메뉴 > 결제 > 내 프로젝트를 클릭합니다.

    내 프로젝트 결제로 이동

  2. 조직 선택에서 Google Cloud 프로젝트와 연결된 조직을 선택합니다.
  3. 프로젝트 행에서 작업 메뉴()를 열고 결제 변경을 클릭한 후 Cloud Billing 계정을 선택합니다.
  4. 계정 설정을 클릭합니다.

gcloud CLI

  1. 사용 가능한 결제 계정을 나열하려면 다음을 실행합니다.
    gcloud billing accounts list
  2. 결제 계정을 Google Cloud 프로젝트에 연결합니다.
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    다음을 바꿉니다.

    • PROJECT_ID는 결제를 사용 설정하려는 Cloud 프로젝트의 프로젝트 ID입니다.
    • BILLING_ACCOUNT_ID는 Google Cloud 프로젝트에 연결할 결제 계정 ID입니다.

API 사용 설정

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 Google Chat API, Vertex AI API, Cloud Functions API, Firestore API, Cloud Build API, Pub/Sub API, Google Workspace Events API, Eventarc API, Cloud Run Admin API를 사용 설정합니다.

    API 사용 설정

  2. 올바른 Cloud 프로젝트에서 API를 사용 설정하고 있는지 확인한 후 다음을 클릭합니다.

  3. 올바른 API를 사용 설정했는지 확인한 다음 사용 설정을 클릭합니다.

gcloud CLI

  1. 필요한 경우 현재 Cloud 프로젝트를 생성한 프로젝트로 설정합니다.

    gcloud config set project PROJECT_ID

    PROJECT_ID를 생성한 Cloud 프로젝트의 프로젝트 ID로 바꿉니다.

  2. Google Chat API, Vertex AI API, Cloud Functions API, Firestore API, Cloud Build API, Pub/Sub API, Google Workspace Events API, Eventarc API, Cloud Run Admin API를 사용 설정합니다.

    gcloud services enable chat.googleapis.com \
    aiplatform.googleapis.com \
    cloudfunctions.googleapis.com \
    firestore.googleapis.com \
    cloudbuild.googleapis.com \
    pubsub.googleapis.com \
    workspaceevents.googleapis.com \
    eventarc.googleapis.com \
    run.googleapis.com

인증 및 승인 설정

채팅 앱에서 인증 및 승인을 통해 Google Workspace 및 Google Cloud의 리소스에 액세스할 수 있습니다.

이 튜토리얼에서는 자리표시자 정보를 사용해도 되도록 Google Chat 앱을 내부적으로 게시합니다. Google Chat 앱을 외부에 게시하기 전에 자리표시자 정보를 동의 화면의 실제 정보로 대체합니다.

  1. Google Cloud 콘솔에서 메뉴 > API 및 서비스 > OAuth 동의 화면으로 이동합니다.

    OAuth 동의 화면으로 이동

  2. 사용자 유형에서 내부를 선택한 다음 만들기를 클릭합니다.

  3. 앱 이름AI knowledge assistant를 입력합니다.

  4. 사용자 지원 이메일에서 이메일 주소 또는 적절한 Google 그룹을 선택합니다.

  5. 개발자 연락처 정보에 이메일 주소를 입력합니다.

  6. 저장하고 계속하기를 클릭합니다.

  7. 범위 추가 또는 삭제를 클릭합니다. Cloud 프로젝트에서 사용 설정한 각 API의 범위 목록이 포함된 패널이 나타납니다.

  8. 수동으로 범위 추가에서 다음 범위를 붙여넣습니다.

    • https://www.googleapis.com/auth/chat.messages
  9. 표에 추가를 클릭합니다.

  10. 업데이트를 클릭합니다.

  11. 저장하고 계속하기를 클릭합니다.

  12. 앱 등록 요약을 검토한 다음 대시보드로 돌아가기를 클릭합니다.

OAuth 클라이언트 ID 사용자 인증 정보 만들기

  1. Google Cloud 콘솔에서 메뉴 > API 및 서비스 > 사용자 인증 정보로 이동합니다.

    사용자 인증 정보로 이동

  2. 사용자 인증 정보 만들기 > OAuth 클라이언트 ID를 클릭합니다.

  3. 애플리케이션 유형 > 웹 애플리케이션을 클릭합니다.

  4. 이름 입력란에 사용자 인증 정보의 이름을 입력합니다. 이 이름은 Google Cloud 콘솔에만 표시됩니다.

  5. 승인된 리디렉션 URI에서 URI 추가를 클릭합니다.

  6. URI 1에 다음을 입력합니다.

    https://REGION-PROJECT_ID.cloudfunctions.net/app/oauth2
    

    다음을 바꿉니다.

    • REGION: Cloud 함수의 리전입니다(예: us-central1). 나중에 두 개의 Cloud 함수를 만들 때 리전을 이 값으로 설정해야 합니다.
    • PROJECT_ID: 만든 Cloud 프로젝트의 프로젝트 ID입니다.
  7. 만들기를 클릭합니다.

  8. OAuth 클라이언트가 생성됨 창에서 JSON 다운로드를 클릭합니다.

  9. 다운로드한 파일을 client_secrets.json로 저장합니다. 나중에 두 개의 Cloud 함수를 만들 때 각 배포에 client_secrets.json 파일을 포함합니다.

  10. 확인을 클릭합니다.

Pub/Sub 주제 만들기

Pub/Sub 주제는 Google Workspace Events API와 함께 작동하여 메시지와 같은 Chat 공간의 이벤트를 구독하고 채팅 앱에 실시간으로 알립니다.

Pub/Sub 주제를 만드는 방법은 다음과 같습니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 메뉴 > Pub/Sub으로 이동합니다.

    Pub/Sub로 이동

  2. 주제 만들기를 클릭합니다.

  3. 주제 IDevents-api를 입력합니다.

  4. 기본 구독 추가를 선택 해제합니다.

  5. 암호화에서 Google 관리 암호화 키를 선택합니다.

  6. 만들기를 클릭합니다. Pub/Sub 주제가 표시됩니다.

  7. 이 Pub/Sub 주제와 Google Workspace Events API가 함께 작동하려면 Chat IAM 사용자에게 Pub/Sub 주제에 게시할 수 있는 권한을 부여합니다.

    1. events-api 패널의 PERMISSIONS에서 Add Principal(주 구성원 추가)을 클릭합니다.

    2. 주 구성원 추가새 주 구성원chat-api-push@system.gserviceaccount.com을 입력합니다.

    3. 역할 할당역할 선택에서 Pub/Sub > Pub/Sub 게시자를 선택합니다.

    4. 저장을 클릭합니다.

gcloud CLI

  1. 주제 ID가 events-api인 Pub/Sub 주제를 만듭니다.

    gcloud pubsub topics create events-api
  2. Chat IAM 사용자에게 Pub/Sub 주제에 게시할 권한을 부여합니다.

    gcloud pubsub topics add-iam-policy-binding events-api \
    --member='serviceAccount:chat-api-push@system.gserviceaccount.com' \
    --role='roles/pubsub.publisher'

Firestore 데이터베이스 만들기

Firestore 데이터베이스는 메시지와 같은 Chat 스페이스의 데이터를 유지하고 검색합니다. 데이터 모델은 정의하지 않습니다. 샘플 코드에서 model/message.jsservices/firestore-service.js 파일로 암시적으로 설정됩니다.

AI 지식 어시스턴트 채팅 앱 데이터베이스는 컬렉션으로 구성된 문서를 기반으로 하는 NoSQL 데이터 모델을 사용합니다. 자세한 내용은 Firestore 데이터 모델을 참고하세요.

다음 다이어그램은 AI 지식 어시스턴트 채팅 앱의 데이터 모델을 간략히 보여줍니다.

Firestore 데이터베이스의 데이터 모델입니다.

루트에는 두 개의 컬렉션이 있습니다.

  1. spaces: 각 문서는 Chat 앱이 추가된 Chat 스페이스를 나타냅니다. 각 메시지는 messages 하위 컬렉션의 문서로 표시됩니다.

  2. users - 각 문서는 Chat 스페이스에 Chat 앱을 추가한 사용자를 나타냅니다.

컬렉션, 문서, 필드 정의 보기

spaces

AI 지식 어시스턴트 채팅 앱이 포함된 Chat 스페이스

필드
Document IDString
특정 스페이스의 고유 ID입니다. Chat API에서 스페이스의 리소스 이름 중 일부입니다.
messagesSubcollection of Documents (messages)
Chat 스페이스에서 전송된 메시지입니다. Firebase에서 messageDocument ID에 해당합니다.
spaceNameString
Chat API의 스페이스 고유 이름입니다. Chat API의 스페이스 리소스 이름에 해당합니다.

messages

Chat 스페이스에서 전송된 메시지

필드
Document IDString
특정 메시지의 고유 ID입니다.
nameString
Chat API 메시지의 고유한 이름입니다. Chat API의 메시지 리소스 이름에 해당합니다.
textString
메시지의 텍스트 본문입니다.
timeString (Timestamp format)
메시지가 생성된 시간입니다.

users

Chat 스페이스에 AI 지식 어시스턴트 Chat 앱을 추가한 사용자

필드
Document IDString
특정 사용자의 고유 ID입니다.
accessTokenString
Google Workspace API를 호출하는 데 사용되는 OAuth 2.0 사용자 승인 중에 부여된 액세스 토큰입니다.
refreshTokenString
OAuth 2.0 사용자 승인 중에 부여되는 갱신 토큰입니다.

Firestore 데이터베이스를 만드는 방법은 다음과 같습니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 메뉴 > Firestore로 이동합니다.

    Firestore로 이동

  2. 데이터베이스 만들기를 클릭합니다.

  3. Firestore 모드 선택에서 Native 모드를 클릭합니다.

  4. 계속을 클릭합니다.

  5. 데이터베이스를 구성합니다.

    1. 데이터베이스 이름 지정에서 데이터베이스 ID(default)로 둡니다.

    2. 위치 유형에서 리전을 선택합니다.

    3. 리전에서 데이터베이스의 리전(예: us-central1)을 지정합니다. 최상의 성능을 위해 채팅 앱의 Cloud Functions와 동일하거나 가까운 위치를 선택하세요.

  6. 데이터베이스 만들기를 클릭합니다.

gcloud CLI

  • 기본 모드로 Firestore 데이터베이스를 만듭니다.

    gcloud firestore databases create \
    --location=LOCATION \
    --type=firestore-native

    LOCATIONFirestore 리전의 이름(예: us-central1)으로 바꿉니다. 최상의 성능을 위해 Chat 앱의 Cloud Functions와 동일하거나 가까운 위치를 선택합니다.

채팅 앱 만들기 및 배포

이제 Google Cloud 프로젝트가 생성되고 구성되었으므로 Chat 앱을 빌드하고 배포할 수 있습니다. 이 섹션에서는 다음을 실행합니다.

  1. Cloud 함수 2개를 만들고 배포합니다. 하나는 Chat 상호작용 이벤트에 응답하고 하나는 Pub/Sub 이벤트에 응답합니다.
  2. Google Chat API 구성 페이지에서 채팅 앱을 만들고 배포합니다.

Cloud Functions 만들기 및 배포

이 섹션에서는 이름이 다음과 같은 두 개의 Cloud Functions를 만들고 배포합니다.

  • app: Chat에서 수신된 이벤트에 HTTP 요청으로 응답하는 채팅 앱의 코드를 호스팅하고 실행합니다.
  • eventsApp: Pub/Sub의 메시지와 같은 Chat 스페이스 이벤트를 수신하고 처리합니다.

이러한 Cloud Functions는 함께 AI 지식 어시스턴트 Chat 앱의 애플리케이션 로직을 구성합니다.

원하는 경우 Cloud Functions를 만들기 전에 GitHub에 호스팅된 샘플 코드를 검토하고 숙지하세요.

GitHub에서 보기

app 만들기 및 배포

Google Cloud 콘솔

  1. GitHub에서 코드를 ZIP 파일로 다운로드합니다.

    zip 파일 다운로드

  2. 다운로드한 zip 파일의 압축을 풉니다.

    추출된 폴더에는 전체 Google Workspace 샘플 저장소가 포함됩니다.

  3. 추출된 폴더에서 google-chat-samples-main/node/ai-knowledge-assistant 디렉터리로 이동합니다.

  4. google-chat-samples/node/ai-knowledge-assistant 디렉터리에 인증 및 승인을 위해 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 다운로드한 client_secrets.json 파일을 추가합니다.

  5. ai-knowledge-assistant 폴더의 콘텐츠를 ZIP 파일로 압축합니다.

    ZIP 파일의 루트 디렉터리에는 다음 파일과 폴더가 포함되어 있어야 합니다.

    • .gcloudignore
    • .gitignore
    • README.md
    • deploy.sh
    • env.js
    • events_index.js
    • http_index.js
    • index.js
    • client_secrets.json
    • package-lock.json
    • package.json
    • controllers/
    • model/
    • services/
    • test/
  6. Google Cloud 콘솔에서 메뉴 > Cloud Functions로 이동합니다.

    Cloud Functions로 이동

    채팅 앱의 Google Cloud 프로젝트가 선택되어 있는지 확인합니다.

  7. 함수 만들기를 클릭합니다.

  8. 함수 만들기 페이지에서 함수를 설정합니다.

    1. 환경에서 Cloud Run 함수를 선택합니다.
    2. 함수 이름app를 입력합니다.
    3. 리전에서 리전(예: us-central1)을 선택합니다. 이 리전은 인증 및 승인을 위해 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 승인된 리디렉션 URI에 설정한 리전과 일치해야 합니다.
    4. 트리거 유형에서 HTTPS를 선택합니다.
    5. 인증에서 인증되지 않은 호출 허용을 선택합니다.
    6. 다음을 클릭합니다.
  9. 런타임에서 Node.js 20을 선택합니다.

  10. 진입점에서 기본 텍스트를 삭제하고 app를 입력합니다.

  11. 소스 코드에서 Zip 업로드를 선택합니다.

  12. 대상 버킷에서 버킷을 만들거나 선택합니다.

    1. 탐색을 클릭합니다.
    2. 버킷을 선택합니다.
    3. 선택을 클릭합니다.

    Google Cloud가 ZIP 파일을 이 버킷에 업로드하고 이 버킷의 구성요소 파일을 추출합니다. 그러면 Cloud Functions가 구성요소 파일을 Cloud 함수에 복사합니다.

  13. Zip 파일에서 GitHub에서 다운로드하여 추출하고 다시 압축한 ZIP 파일을 업로드합니다.

    1. 탐색을 클릭합니다.
    2. ZIP 파일로 이동하여 선택합니다.
    3. 열기를 클릭합니다.
  14. 배포를 클릭합니다.

    Cloud Functions 세부정보 페이지가 열리고 함수가 빌드 진행률 표시기와 서비스에 대한 진행률 표시기와 함께 표시됩니다. 두 진행률 표시기가 모두 사라지고 체크표시로 바뀌면 함수가 배포되고 준비된 것입니다.

  15. 샘플 코드를 수정하여 상수를 설정합니다.

    1. Cloud 함수 세부정보 페이지에서 수정을 클릭합니다.
    2. 다음을 클릭합니다.
    3. 소스 코드에서 인라인 편집기를 선택합니다.
    4. 인라인 편집기에서 env.js 파일을 열고 수정합니다.
      1. project 값을 Cloud 프로젝트 ID로 설정합니다.
      2. location 값을 Cloud Functions의 리전(예: us-central1)으로 설정합니다.
  16. 배포를 클릭합니다.

gcloud CLI

  1. GitHub에서 코드를 클론합니다.

    git clone https://github.com/googleworkspace/google-chat-samples.git
  2. 이 AI 지식 어시스턴트 채팅 앱의 코드가 있는 디렉터리로 전환합니다.

    cd google-chat-samples/node/ai-knowledge-assistant
  3. google-chat-samples/node/ai-knowledge-assistant 디렉터리에 인증 및 승인을 위해 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 다운로드한 client_secrets.json 파일을 추가합니다.

  4. env.js 파일을 수정하여 환경 변수를 설정합니다.

    1. project 값을 Cloud 프로젝트 ID로 설정합니다.
    2. location 값을 Cloud 함수의 리전(예: us-central1)으로 설정합니다.
  5. Google Cloud에 Cloud 함수를 배포합니다.

    gcloud functions deploy app \
    --gen2 \
    --region=REGION \
    --runtime=nodejs20 \
    --source=. \
    --entry-point=app \
    --trigger-http \
    --allow-unauthenticated

    REGIONenv.js 파일에 설정된 Cloud 함수(예: us-central1)의 값과 일치하도록 Cloud 함수의 리전 값으로 바꿉니다.

eventsApp 생성 및 배포

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 메뉴 > Cloud Functions로 이동합니다.

    Cloud Functions로 이동

    채팅 앱의 Google Cloud 프로젝트가 선택되어 있는지 확인합니다.

  2. 함수 만들기를 클릭합니다.

  3. 함수 만들기 페이지에서 함수를 설정합니다.

    1. 환경에서 Cloud Run 함수를 선택합니다.
    2. 함수 이름eventsApp를 입력합니다.
    3. 리전에서 리전(예: us-central1)을 선택합니다. 이 리전은 인증 및 승인을 위해 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 승인된 리디렉션 URI에 설정한 리전과 일치해야 합니다.
    4. 트리거 유형에서 Cloud Pub/Sub를 선택합니다.
    5. Cloud Pub/Sub 주제에서 projects/PROJECT/topics/events-api 형식으로 생성한 Pub/Sub 주제 이름을 선택합니다. 여기서 PROJECT는 Cloud 프로젝트 ID입니다.
    6. Service account(s) might not have enough permissions to deploy the function with the selected trigger.로 시작하는 메시지가 표시되면 모두 부여를 클릭합니다.
    7. 다음을 클릭합니다.
  4. 런타임에서 Node.js 20을 선택합니다.

  5. 진입점에서 기본 텍스트를 삭제하고 eventsApp를 입력합니다.

  6. 소스 코드에서 Cloud Storage의 압축을 선택합니다.

  7. Cloud Storage 위치에서 찾아보기를 클릭합니다.

  8. app Cloud 함수를 만들 때 ZIP 파일을 업로드한 버킷을 선택합니다.

  9. 업로드한 ZIP 파일을 클릭합니다.

  10. 선택을 클릭합니다.

  11. 배포를 클릭합니다.

    Cloud Functions 세부정보 페이지가 열리고 함수가 빌드, 서비스, 트리거의 세 가지 진행률 표시기와 함께 표시됩니다. 세 개의 진행률 표시기가 모두 사라지고 체크표시로 바뀌면 함수가 배포되고 준비된 것입니다.

  12. 샘플 코드를 수정하여 상수를 설정합니다.

    1. Cloud 함수 세부정보 페이지에서 수정을 클릭합니다.
    2. 다음을 클릭합니다.
    3. 소스 코드에서 인라인 편집기를 선택합니다.
    4. 인라인 편집기에서 env.js 파일을 열고 수정합니다.
      1. project 값을 Cloud 프로젝트 ID로 설정합니다.
      2. location 값을 Cloud Functions의 리전(예: us-central1)으로 설정합니다.
  13. 배포를 클릭합니다.

gcloud CLI

  1. gcloud CLI에 있지 않다면 이전에 GitHub에서 클론한 이 AI 지식 어시스턴트 채팅 앱의 코드가 있는 디렉터리로 전환합니다.

    cd google-chat-samples/node/ai-knowledge-assistant
  2. google-chat-samples/node/ai-knowledge-assistant 디렉터리에서 인증 및 승인을 위해 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 다운로드한 client_secrets.json 파일을 추가합니다.

  3. env.js 파일을 수정하여 환경 변수를 설정합니다.

    1. project 값을 Cloud 프로젝트 ID로 설정합니다.
    2. location 값을 Cloud 함수의 리전(예: us-central1)으로 설정합니다.
  4. Google Cloud에 Cloud 함수를 배포합니다.

    gcloud functions deploy eventsApp \
    --gen2 \
    --region=REGION \
    --runtime=nodejs20 \
    --source=. \
    --entry-point=eventsApp \
    --trigger-topic=events-api

    REGION를 Cloud 함수의 지역 값으로 바꿔 env.js 파일(예: us-central1)에 설정된 값과 일치시킵니다.

app Cloud 함수의 트리거 URL 복사

Google Cloud 콘솔에서 Chat 앱을 구성할 때 다음 섹션에 app Cloud 함수의 트리거 URL을 붙여넣습니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 메뉴 > Cloud Functions로 이동합니다.

    Cloud Functions로 이동

  2. Cloud Functions 목록의 이름 열에서 app를 클릭합니다.

  3. 트리거를 클릭합니다.

  4. URL을 복사합니다.

gcloud CLI

  1. app Cloud 함수를 설명합니다.

    gcloud functions describe app
  2. url 속성을 복사합니다.

Google Cloud 콘솔에서 채팅 앱 구성

이 섹션에서는 Google Cloud 콘솔에서 Chat 앱의 이름, Chat 상호작용 이벤트를 전송하는 Chat 앱의 Cloud 함수 트리거 URL 등 Chat 앱에 관한 정보로 Chat API를 구성하는 방법을 보여줍니다.

  1. Google Cloud 콘솔에서 메뉴 > 기타 제품 > Google Workspace > 제품 라이브러리 > Google Chat API > 관리 > 구성을 클릭합니다.

    Chat API 구성으로 이동

  2. 앱 이름AI knowledge assistant를 입력합니다.

  3. 아바타 URLhttps://fonts.gstatic.com/s/i/short-term/release/googlesymbols/live_help/default/24px.svg를 입력합니다.

  4. 설명Answers questions with AI를 입력합니다.

  5. 양방향 기능 사용 설정 전환 버튼을 클릭하여 On(사용)으로 설정합니다.

  6. 기능에서 스페이스 및 그룹 대화 참여를 선택합니다.

  7. 연결 설정에서 HTTP 엔드포인트 URL을 선택합니다.

  8. HTTP 엔드포인트 URLhttps://REGION-PROJECT_ID.cloudfunctions.net/app 형식으로 된 app Cloud 함수의 트리거 URL을 붙여넣습니다. 여기서 REGION은 Cloud 함수의 리전입니다(예: us-central1, PROJECT_ID는 생성한 Cloud 프로젝트의 프로젝트 ID).

  9. 공개 상태에서 Workspace 도메인의 특정 사용자 및 그룹에서 이 Chat 앱을 사용할 수 있도록 설정을 선택하고 이메일 주소를 입력합니다.

  10. 필요한 경우 로그에서 Logging에 오류 로깅을 선택합니다.

  11. 저장을 클릭합니다. 구성이 저장되었다는 메시지가 표시되면 채팅 앱을 테스트할 준비가 된 것입니다.

채팅 앱 테스트

AI 지식 어시스턴트 Chat 앱이 답변할 수 있는 질문을 하여 메시지가 있는 Chat 스페이스에서 AI 지식 어시스턴트 Chat 앱을 테스트합니다.

다음은 AI 지식 어시스턴트 채팅 앱을 테스트하는 몇 가지 방법입니다.

  • 기존 Chat 스페이스에 AI 지식 어시스턴트 Chat 앱을 추가하고 해당 스페이스와 관련된 질문을 합니다.
  • Chat 스페이스를 만들고 데이터 소스로 사용할 메시지를 몇 개 게시합니다. Answer 20 common onboarding questions employees ask their teams.와 같은 프롬프트를 사용하여 Gemini에서 메시지를 가져올 수 있습니다. 또는 Chat으로 개발 개요 가이드에서 몇 문단을 붙여넣은 후 이에 관해 질문할 수도 있습니다.

이 튜토리얼에서는 Chat 스페이스를 만들고 Chat으로 개발 개요 가이드의 몇 가지 단락을 붙여넣습니다.

  1. Google Chat을 엽니다.

    Google Chat으로 이동

  2. Chat 스페이스를 만들려면 다음 안내를 따르세요.

    1. 새 채팅 > 스페이스 만들기를 클릭합니다.

    2. 스페이스 이름Testing AI knowledge assistant app을 입력합니다.

    3. 스페이스의 용도에서 공동작업을 선택합니다.

    4. 액세스 설정에서 스페이스에 액세스할 수 있는 사용자를 선택합니다.

    5. 만들기를 클릭합니다.

  3. 데이터 소스로 사용할 메시지를 추가합니다.

    1. 웹브라우저에서 Chat으로 개발 개요 가이드를 참조하세요.

    2. 가이드의 콘텐츠를 복사하여 만든 Chat 스페이스에 붙여넣습니다.

  4. AI 지식 어시스턴트 채팅 앱을 추가합니다.

    1. 메시지 작성창에 @AI knowledge assistant를 입력하고 표시되는 추천 메뉴에서 AI 지식 어시스턴트 Chat 앱을 선택한 다음 enter 키를 누릅니다.

    2. AI 지식 어시스턴트 채팅 앱을 스페이스에 추가할지 묻는 메시지가 표시됩니다. 스페이스에 추가를 클릭합니다.

    3. 스페이스에 Chat 앱을 처음 추가하는 경우 Chat 앱의 인증 및 승인을 구성해야 합니다.

      1. 구성을 클릭합니다.
      2. Google 계정을 선택하라는 메시지가 표시된 새 브라우저 창 또는 탭이 열립니다. 테스트에 사용할 계정을 선택합니다.
      3. AI 지식 어시스턴트 채팅 앱에서 요청하는 권한을 검토합니다 권한을 부여하려면 허용을 클릭합니다.
      4. You may close this page now.라는 메시지가 표시됩니다. 브라우저 창이나 탭을 닫고 채팅 공간으로 돌아갑니다.
  5. 질문하기:

    1. 메시지 작성창에 다음과 같은 질문을 입력합니다. What are Google Chat apps?

    2. AI 지식 어시스턴트 Chat 앱이 답변합니다.

    3. 필요한 경우 답변이 정확하지 않거나 충분하지 않은 경우 AI의 대화 기록을 개선할 수 있도록 도움말 보기를 클릭합니다. AI 지식 어시스턴트 Chat 앱이 스페이스 관리자를 언급하고 질문에 답변해 달라고 요청합니다. 다음번에는 AI 지식 어시스턴트 Chat 앱이 답을 알고 있을 것입니다.

고려사항, 대체 아키텍처 선택, 다음 단계

이 섹션에서는 AI 지식 어시스턴트 채팅 앱을 빌드하는 다른 방법을 검토합니다.

Firestore, Cloud Storage 또는 Chat API에서 List Messages 호출

이 튜토리얼에서는 Chat 앱이 질문에 답할 때마다 Chat API를 사용하여 Message 리소스의 list 메서드를 호출하는 것보다 성능이 향상되므로 메시지와 같은 Chat 스페이스 데이터를 Firestore 데이터베이스에 저장하는 것이 좋습니다. 또한 list messages를 반복적으로 호출하면 Chat 앱에서 API 할당량 한도가 발생할 수 있습니다.

하지만 Chat 스페이스의 대화 기록이 너무 길어지면 Firestore를 사용하는 데 비용이 많이 들 수 있습니다.

Cloud Storage 는 Firestore의 대안입니다. AI 지식 어시스턴트 앱이 활성 상태인 스페이스마다 자체 객체를 가져오며, 각 객체는 스페이스의 모든 메시지가 포함된 텍스트 파일입니다. 이 접근 방식의 장점은 Gemini를 사용하여 텍스트 파일의 전체 콘텐츠를 Vertex AI에 한 번에 제공할 수 있다는 것입니다. 하지만 Cloud Storage의 객체에 추가할 수 없고 교체하기만 하면 대화 기록을 업데이트하는 데 더 많은 작업이 필요하다는 단점이 있습니다. 이 방법은 메시지 기록을 정기적으로 업데이트하는 경우에는 적절하지 않지만, 메시지 기록을 주기적으로(예: 일주일에 한 번) 일괄 업데이트하는 경우에는 적절합니다.

문제 해결

Google Chat 앱 또는 카드가 오류를 반환하면 Chat 인터페이스에 '문제가 발생했습니다'라는 메시지가 표시됩니다. '요청을 처리할 수 없습니다' 채팅 UI에는 오류 메시지가 표시되지 않지만 채팅 앱 또는 카드에서 예기치 않은 결과가 발생하는 경우가 있습니다. 예를 들어 카드 메시지가 표시되지 않을 수 있습니다.

Chat UI에 오류 메시지가 표시되지 않을 수 있지만 Chat 앱의 오류 로깅이 사용 설정된 경우 오류를 수정하는 데 도움이 되는 설명 오류 메시지와 로그 데이터를 사용할 수 있습니다. 오류를 보고, 디버그하고, 수정하는 방법에 관한 도움말은 Google Chat 오류 문제 해결하기를 참고하세요.

삭제

이 튜토리얼에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 Cloud 프로젝트를 삭제하는 것이 좋습니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다. 메뉴 > IAM 및 관리자 > 리소스 관리를 클릭합니다.

    Resource Manager로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.