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

이 튜토리얼에서는 Vertex AI 및 Gemini를 기반으로 하는 생성형 AI를 사용하여 Chat 공간의 대화를 기반으로 질문에 답변하는 Google Chat 앱을 만드는 방법을 보여줍니다. 채팅 앱은 Google Workspace Events API와 Pub/Sub를 사용하여, 언급되지 않은 경우에도 Chat 공간에 게시된 질문을 인식하고 실시간으로 답변합니다.

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

직원 온보딩 및 지원 공간에서 채팅 앱이 작동하는 방식은 다음과 같습니다.

  • AI 지식 어시스턴트 앱을 언급하면 공간에 추가됩니다.
    그림 1. 찰리는 AI 지식 어시스턴트 채팅 앱을 Chat 스페이스에 추가합니다.
  • 다나가 질문합니다.
    그림 2. 다나는 회사에 대중 연설 교육을 제공하는지 묻습니다.
  • AI 지식 어시스턴트 채팅 앱이 질문에 답합니다.
    그림 3. AI 지식 어시스턴트 채팅 앱은 Vertex AI와 Gemini에게 Chat 스페이스의 대화 기록을 토대로 다나의 질문에 답변하도록 요청한 다음 답변을 공유합니다.

기본 요건

목표

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

아키텍처

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

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

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

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

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

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

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

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

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

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

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

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

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

      1. 프롬프트는 Gemini를 사용하는 Vertex AI에 메시지에 질문이 포함되어 있는지 확인하도록 지시합니다. 답이 '예'라면 Gemini는 Firestore와 Google Chat 앱에 보관된 Chat 스페이스의 메시지 기록을 기반으로 질문에 답변한 다음 메시지를 Chat 스페이스로 보냅니다. 응답하지 않으면 응답하지 않습니다.

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

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

        메시지에는 항상 사용자가 클릭할 수 있는 액세서리 작업 버튼이 포함되며, 이 버튼을 사용하면 채팅 앱에서 스페이스 관리자를 @멘션하여 답변하도록 요청합니다.

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

    1. 채팅 앱은 Google Workspace Events API에서 subscriptions.patch 메서드를 호출하여 정기 결제 갱신 요청을 전송합니다.
  • 채팅 앱이 채팅 스페이스에서 삭제됩니다.

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

    2. 채팅 앱이 Firestore에서 Chat 공간의 데이터를 삭제합니다.

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

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

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

환경 준비

이 섹션에서는 채팅 앱용 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를 설치하고 initialize합니다.
    Cloud 프로젝트를 만들려면 `gcloud projects create`명령어를 사용합니다.
    gcloud projects create PROJECT_ID
    PROJECT_ID를 만들려는 프로젝트의 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
    

인증 및 승인 설정

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

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

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

    OAuth 동의 화면으로 이동

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

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

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

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

  6. Save and Continue(저장 후 계속)를 클릭합니다.

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

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

    • https://www.googleapis.com/auth/chat.messages
  9. Add to Table(테이블에 추가)을 클릭합니다.

  10. Update를 클릭합니다.

  11. Save and Continue(저장 후 계속)를 클릭합니다.

  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). 나중에 2개의 Cloud Functions를 만들 때 리전을 이 값으로 설정해야 합니다.
    • PROJECT_ID: 생성한 Cloud 프로젝트의 프로젝트 ID입니다.
  7. 만들기를 클릭합니다.

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

  9. 다운로드한 파일을 client_secrets.json로 저장합니다. 나중에 2개의 Cloud Functions를 만들 때 각 배포에 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가 함께 작동하도록 Pub/Sub 주제에 게시할 수 있는 Chat IAM 사용자 권한을 부여합니다.

    1. events-api 패널의 PERMISSIONS에서 주 구성원 추가를 클릭합니다.

    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 스페이스를 나타냅니다. 각 메시지는 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 지식 어시스턴트 채팅 앱을 추가한 사용자입니다.

입력란
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

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

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

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

채팅 앱 만들기 및 배포

이제 Google Cloud 프로젝트를 만들고 구성했으므로 채팅 앱을 빌드하고 배포할 수 있습니다. 이 섹션에서는 다음을 수행합니다.

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

Cloud Functions 만들기 및 배포

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

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

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

필요한 경우 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. 인증 및 승인을 위한 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 다운로드한 client_secrets.json 파일을 google-chat-samples/node/ai-knowledge-assistant 디렉터리에 추가합니다.

  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로 이동

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

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

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

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

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

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

  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 값을 us-central1와 같은 Cloud 함수의 리전으로 설정합니다.
  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. 인증 및 승인을 위한 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 다운로드한 client_secrets.json 파일을 google-chat-samples/node/ai-knowledge-assistant 디렉터리에 추가합니다.

  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
    

    REGIONus-central1와 같이 env.js 파일에 설정된 값과 일치하도록 Cloud 함수의 리전 값으로 바꿉니다.

eventsApp 만들기 및 배포

Google Cloud 콘솔

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

    Cloud Functions로 이동

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

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

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

    1. 환경에서 2세대를 선택합니다.
    2. 함수 이름eventsApp를 입력합니다.
    3. 리전에서 리전(예: us-central1)을 선택합니다. 이 리전은 인증 및 승인을 위해 OAuth 클라이언트 ID 사용자 인증 정보를 만들 때 승인된 리디렉션 URI에 설정한 리전과 일치해야 합니다.
    4. 트리거 유형에서 Cloud Pub/Sub를 선택합니다.
    5. Cloud Pub/Sub 주제에서 생성한 Pub/Sub 주제 이름을 선택합니다. 형식은 projects/PROJECT/topics/events-api이며 여기서 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 값을 us-central1와 같은 Cloud 함수의 리전으로 설정합니다.
  13. 배포를 클릭합니다.

gcloud CLI

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

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

  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
    

    REGIONus-central1와 같이 env.js 파일에 설정된 값과 일치하도록 Cloud 함수의 리전 값으로 바꿉니다.

app Cloud 함수의 트리거 URL 복사

다음 섹션에서 Google Cloud Console에서 채팅 앱을 구성할 때 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 콘솔에서 채팅 앱 구성

이 섹션에서는 채팅 앱 이름 및 채팅 상호작용 이벤트를 전송하는 채팅 앱의 Cloud 함수의 트리거 URL을 포함한 채팅 앱 정보로 Google Cloud 콘솔에서 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. 양방향 기능 사용 설정 전환 버튼을 클릭하여 사용으로 전환합니다.

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

  7. 연결 설정에서 앱 URL을 선택합니다.

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

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

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

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

채팅 앱 테스트

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

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

  • 기존 Chat 스페이스에 AI 지식 어시스턴트 채팅 앱을 추가하고 해당 스페이스와 관련된 질문을 합니다.
  • 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 지식 어시스턴트 채팅 앱을 선택하고 enter를 누릅니다.

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

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

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

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

    2. AI 지식 어시스턴트 채팅 앱이 응답합니다.

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

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

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

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

이 가이드에서는 채팅 앱이 질문에 답변할 때마다 Chat API를 사용하여 Message 리소스에서 list 메서드를 호출하는 것에 비해 성능이 개선되므로 Firestore 데이터베이스에 메시지와 같은 Chat 공간 데이터를 저장하는 것이 좋습니다. 또한 list messages를 반복적으로 호출하면 채팅 앱이 API 할당량 한도에 도달할 수 있습니다.

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

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

문제 해결

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

Chat UI에 오류 메시지가 표시되지 않더라도 채팅 앱에 대한 오류 기록이 사용 설정되어 있을 때 오류를 수정하는 데 도움이 되는 자세한 오류 메시지와 로그 데이터가 제공됩니다. 오류를 확인, 디버깅, 수정하는 데 도움이 필요하면 Google Chat 오류 문제 해결 및 수정하기를 참고하세요.

삭제

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

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

    Resource Manager로 이동

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