1. 개요
최종 업데이트: 2023년 8월 7일
빌드할 항목
이 Codelab에서는 Dialogflow CX에서 간단한 가상 에이전트를 빌드, 배포, 구성하여 스쿠버 다이버 여행자의 단체 예약 및 전세 교통편 예약을 지원합니다. 가상 에이전트는 생성형 AI와 Google의 최신 생성형 대규모 언어 모델 (LLM)을 사용하여 가상 에이전트 응답을 생성합니다.
학습할 내용
- 관련 API를 사용 설정하는 방법
- Dialogflow가 인텐트 파라미터에서 페이지 양식 파라미터 값을 자동으로 미리 채우는 방법
- Dialogflow에서 이벤트 핸들러를 구성하는 방법
- 흐름 및 파라미터 채우기 중에 사용되는 no-match 이벤트 핸들러에서 대체 대답 생성 기능을 사용 설정하는 방법
- 자체 텍스트 프롬프트를 구성하여 기본 대화 상황은 물론 에이전트별 대화 상황을 처리하는 방법
- 인텐트와 파라미터 설명을 잘 작성하여 필수 파라미터에 대한 리프롬프트 핸들러를 생성하는 방법 (사용자 정의 리프롬프트 외)
- 에이전트를 테스트하고 대체 대답 생성을 트리거하는 고객 질문을 시뮬레이션하는 방법
필요한 항목
- Google Cloud 프로젝트
- 브라우저(예: Chrome)
2. 설정
Dialogflow CX에서 생성형 폴백 기능을 사용하려면 먼저 Dialogflow API를 사용 설정해야 합니다.
Cloud 콘솔을 사용하여 Dialogflow API 사용 설정하기
- 브라우저에서 Google Cloud 콘솔을 엽니다.
- Google Cloud 콘솔에서 API 라이브러리로 이동하여 사용 설정할 수 있는 API 및 서비스를 탐색합니다.
- API 라이브러리 페이지 상단의 검색창을 사용하여
Dialogflow API를 검색한 후 검색 결과로 표시되는 서비스를 클릭합니다. - 사용 설정 버튼을 클릭하여 Google Cloud 프로젝트에서 Dialogflow API를 사용 설정합니다.
gcloud CLI 사용 (대안)
또는 다음 gcloud 명령어를 사용하여 API를 사용 설정할 수 있습니다.
gcloud services enable dialogflow.googleapis.com
API가 사용 설정되면 다음과 비슷한 메시지가 표시됩니다.
Operation "operations/..." finished successfully.
코드 가져오기
가상 에이전트를 처음부터 만들지 않습니다. Dialogflow CX 콘솔에서 복원한 후 개선해야 하는 에이전트가 제공됩니다.
소스 코드를 다운로드하려면 다음 안내를 따르세요.
- 새 브라우저 탭을 열고 에이전트 저장소로 이동하여 명령줄에서 클론합니다.
- 초기 에이전트가 JSON 패키지로 내보내졌습니다. 파일의 압축을 풀고, 에이전트 설정을 검사하고, 흐름 정의
Liveaboards.json를 살펴본 다음 마지막으로 흐름 페이지, 인텐트, 항목을 살펴봅니다.
3. 새 에이전트 만들기
Dialogflow 콘솔 열기
이 Codelab의 나머지 단계를 수행하려면 Google Cloud 프로젝트와 함께 Dialogflow CX 콘솔을 사용합니다.
- 브라우저에서 Dialogflow CX 콘솔로 이동합니다.
- 사용할 Google Cloud 프로젝트를 선택하거나 사용할 새 프로젝트를 만듭니다.
- Dialogflow CX 콘솔에 에이전트 목록이 표시됩니다.
Dialogflow CX를 처음 사용하는 경우 필요에 따라 프로젝트 및 설정을 구성하는 방법에 관한 자세한 내용은 Dialogflow CX 문서를 참고하세요.
새 Dialogflow CX 에이전트 만들기
- GitHub 저장소에서 다운로드한 에이전트를 복원하려면 새 에이전트를 만들어야 합니다. Dialogflow CX 콘솔에서 페이지 오른쪽 상단에 있는 새 에이전트 만들기를 클릭합니다.

- 에이전트 Build your own(직접 빌드) 옵션을 선택합니다.

- 아래의 에이전트 설정으로 양식을 작성하고 만들기를 클릭하여 에이전트를 만듭니다.
- 표시 이름으로
Divebooker를 선택합니다. - 위치로
us-central1을 선택합니다. - 원하는 시간대를 선택합니다.
en - English를 기본 언어로 선택
- Dialogflow에서 에이전트가 자동으로 열립니다. 아직 끝나지 않았습니다.
Divebooker 에이전트 복원
- 에이전트 목록 페이지로 돌아가서 방금 만든 에이전트를 식별합니다.
옵션을 클릭한 다음 복원 버튼을 클릭합니다. - 업로드 옵션을 선택한 다음 GitHub 저장소에서 이전에 다운로드한 ZIP 파일을 드롭하거나 선택합니다.
- 복원 버튼을 클릭하여 제공된 에이전트를 가져옵니다.

잘하셨습니다. 고객을 지원할 준비가 된 다이빙 예약 가상 에이전트 빌드를 완료했습니다. 다음 섹션에서는 이를 테스트하고, 사용자 질문에 답하고 예약 요청을 지원하는 데 얼마나 효과적인지 확인합니다.
4. 에이전트 테스트
Dialogflow는 에이전트와 채팅하고 버그를 발견할 수 있는 기본 제공 시뮬레이터를 제공합니다. 매 차례마다 트리거된 인텐트, 에이전트 응답, 활성 페이지, 세션 파라미터 값이 올바른지 확인할 수 있습니다.
몇 가지 시나리오를 테스트하고 각 시나리오에서 에이전트가 특정 응답을 제공하는 이유를 살펴보겠습니다. 첫 번째부터 살펴보겠습니다.
해결되지 않은 인텐트
- Dialogflow 콘솔에서 에이전트 내에서 에이전트 테스트를 클릭하여 시뮬레이터를 엽니다.

Hello과 같은 인사말을 에이전트에 입력하고what is a liveaboard?라고 질문합니다. 질문이 인텐트와 일치하지 않아 '죄송합니다. 잘 모르겠습니다'와 같은 일반적인 프롬프트가 표시됩니다. 시뮬레이터에서 원래 응답을 검사하여 sys.no-match-default 기본 제공 이벤트가 호출되었는지 확인할 수 있습니다.

JSON 응답의 거의 끝까지 아래로 스크롤합니다. 일치하는 인텐트를 검색할 때 Dialogflow가 NO_MATCH를 발견하고 일치 항목 없음(no-match) 이벤트를 발생시킵니다.

- 빌드 탭으로 전환하고 Liveaboards(리브어보드) 흐름의 Start Page(시작 페이지)를 엽니다.

기본적으로 모든 흐름에는 일치 항목 없음(no-match) 및 입력 없음(no-input) 기본 제공 이벤트의 이벤트 핸들러가 있습니다. 이러한 이벤트 핸들러는 흐름을 만들 때 자동으로 생성되며 삭제할 수 없습니다.
- sys.no-match-default 이벤트 핸들러를 클릭하고 Agent responses(에이전트 응답) 섹션까지 아래로 스크롤합니다. Dialogflow는 대체 응답 목록을 제공하지만, 다양한 유형의 응답 메시지를 정의하여 최종 사용자에게 텍스트 응답 이상의 경험을 제공할 수도 있습니다.

이제 해피 패스로 넘어가 보겠습니다.
해피 패스
두 번째 경우에는 내년 7월에 갈라파고스 제도로 12명 단체 다이빙 크루즈를 예약하려는 다이버라고 가정해 보세요.
- 시뮬레이터 패널에서 재설정 아이콘을 클릭하여 에이전트와 새 대화를 시작합니다.


- 갈라파고스 제도로 가는 전세 크루즈를 예약하고 싶다고 말하고 여행 세부정보를 제공합니다. 아래와 똑같은 프롬프트를 사용할 필요는 없습니다. 자유롭게 실험해 보세요.

- Start Page(시작 페이지)를 열고 head.send.group.request 경로를 클릭합니다. 이 인텐트가 일치할 때 전환할 페이지를 Dialogflow에 알려주는 전환 섹션까지 아래로 스크롤합니다.

- 경로 정의를 닫고 Collect Further Info(추가 정보 수집) 페이지를 펼칩니다. 항목 fulfillment와 파라미터 목록을 확인합니다.

Dialogflow CX의 각 페이지마다 최종 사용자로부터 수집해야 하는 파라미터의 목록인 양식을 정의할 수 있습니다. 에이전트가 여행 목적지를 묻지 않은 이유는 초기 입력의 일부로 전달되었고 destination(목적지)이 인텐트 파라미터이기도 하기 때문입니다. 페이지가 처음 활성화되면 활성 기간 동안 인텐트 파라미터와 동일한 이름의 양식 파라미터가 자동으로 세션 파라미터 값으로 설정되고 해당 프롬프트는 건너뜁니다.
- 관리 탭으로 전환하고 인텐트 섹션에서 head.send group request 인텐트를 클릭합니다. 이 인텐트에 제공된 학습 문구와 학습 문구의 주석 처리된 부분을 살펴봅니다.

- '다이버 15명을 위한 코스타리카 여행을 계획해야 해'라는 학습 문구를 생각해 보겠습니다. '코스타리카'는 destination으로, '15'는 number-of-guests로 주석 처리됩니다. 학습 문구의 일부를 주석 처리하면 Dialogflow는 이러한 부분이 런타임에 최종 사용자가 제공하는 실제 값의 예시일 뿐임을 인식합니다. 이러한 이유로 초기 입력 값 '갈라파고스 제도로 가는 전세 교통편을 제공하나요?'에 대해 Dialogflow는 '갈라파고스 제도'에서 목적지 파라미터를 추출했습니다.
다음으로, 양식 파라미터를 입력하라는 메시지가 표시되었을 때 에이전트에 유효한 입력 값을 제공하지 않으면 어떤 일이 발생하는지 살펴보겠습니다.
잘못된 입력
- 시뮬레이터 패널에서 재설정 아이콘을 클릭하여 에이전트와 새 대화를 시작합니다.
- 이번에는 그룹 예약을 하겠다는 의도를 표현하되, 에이전트에게 가고 싶은 곳을 말하지 말고, 목적지를 묻는 질문에 코스타리카, 갈라파고스, 멕시코가 아닌 임의의 값으로 답해야 합니다.

- 관리 탭의 리소스 섹션에서 항목 유형을 클릭합니다. 두 개의 탭이 표시됩니다. 시스템 탭에서는 현재 에이전트에서 사용 중인 시스템 항목을 찾을 수 있습니다. 커스텀 탭에는 이 에이전트와 관련된 데이터와 일치시키기 위해 생성된 커스텀 항목 목록이 표시됩니다.

- destination(목적지) 항목을 클릭하여 항목이 일치하는 값을 확인합니다. '유럽'은 항목 중 하나가 아니며 동의어도 아닙니다.
- 흐름 다이어그램에서 양식 파라미터가 포함된 Collect Further Info(추가 정보 수집) 페이지를 펼칩니다. destination(목적지) 파라미터를 클릭합니다.
- 파라미터 패널에서 Reprompt event handlers section(이벤트 핸들러 리프롬프트 섹션)까지 아래로 스크롤한 다음 No-match default(일치하지 않는 기본값) 이벤트 핸들러를 클릭합니다.
이 파라미터 수준 이벤트 핸들러는 양식 작성 중에 잘못된 최종 사용자 입력을 처리하기 위한 것입니다. '유럽'은 예상치 못한 입력이므로 sys.no-match-default 이벤트가 호출되었고 이 이벤트에 대해 정의된 해당 리프롬프트 핸들러가 호출되었습니다. Agent says(에이전트의 말) 섹션에는 두 가지 리프롬프트 메시지가 나열되어 있습니다.

수고하셨습니다. 이러한 테스트 사례는 에이전트가 적절하게 처리해야 하는 일반적인 시나리오를 나타냅니다. 사용자는 봇이 대답할 수 없는 질문을 하거나 봇이 수행할 수 없는 요청을 하는 경우가 많습니다. 대부분의 사용자가 따르는 잘 알려진 경로에서 벗어난 롱테일(long tail)을 위해 설계하는 것은 매우 복잡합니다. 대화에서 잘못될 수 있는 모든 상황과 사용자가 취할 수 있는 예상치 못한 경로 또는 지원되지 않는 경로를 생각해 보세요.
자동 음성 인식(ASR)의 발전으로 사용자가 말한 내용을 거의 항상 정확하게 파악할 수 있습니다. 하지만 사용자가 말한 내용이 무엇을 의미하는지 파악하는 것은 여전히 어려운 일입니다. 발화는 단독으로는 이해할 수 없는 경우가 많으며, 맥락 속에서만 이해할 수 있습니다. 이 Codelab의 다음 섹션에서는 Google의 최신 생성형 대규모 언어 모델 (LLM)이 대화를 다시 정상 궤도로 되돌리고 진전시키는 데 어떻게 도움이 되는지 살펴봅니다.
5. 생성형 대체 사용 설정
대체 대답 생성 기능이란 무엇인가요?
대체 대답 생성은 Google의 대규모 언어 모델 (LLM)을 사용하여 가상 에이전트 응답을 생성하는 Dialogflow CX 기능입니다.
어떤 도움이 되나요?
주요 사용 사례 사이에는 사용자가 이해하지 못한 경우 에이전트가 말한 내용을 반복하고, 사용자가 요청할 때 기다리고, 대화를 요약하는 등 다소 일반적인 사용자 요청이 많이 있습니다. 첫 번째 테스트에서는 스쿠버 다이빙과 리브어보드에 관한 일반적인 질문을 처리하도록 인텐트를 만들고 흐름을 설계하지 않았기 때문에 에이전트가 '리브어보드가 뭐야?'라는 질문에 답하지 못했습니다.
강력한 인텐트가 있어도 여전히 오류가 발생할 수 있습니다. 사용자가 침묵을 지키거나(입력 없음 오류) 예상치 못한 말을 하는 경우(일치 없음 오류) 스크립트에서 벗어날 수 있습니다. 오류가 발생한 후에 처리하는 것보다 오류가 발생하지 않도록 예방하는 것이 더 좋지만 오류를 완전히 피할 수는 없습니다. '죄송합니다. 잘 모르겠습니다'와 같은 일반적인 프롬프트나 이와 유사한 최소 기능 솔루션으로는 충분하지 않은 경우가 많습니다. 오류 프롬프트는 협력 원칙, 즉 대화 참여자 간에 협력의 기저가 있다는 가정에 따라 효율적인 커뮤니케이션이 이루어진다는 원칙을 바탕으로 해야 합니다.
다음 섹션에서는 대체 대답 생성 기능을 구성하여 인텐트 커버리지를 늘리고 오류 처리를 간소화하여 고객 경험을 개선하는 방법을 살펴봅니다.
전체 흐름의 일치 없음(no-match) 이벤트에 대해 대체 대답 생성 기능 사용 설정
흐름, 페이지 또는 파라미터 채우기 중에 사용되는 no-match 이벤트 핸들러에서 대체 대답 생성을 사용 설정할 수 있습니다. 일치 항목 없음 이벤트에 생성형 대체가 사용 설정된 경우 해당 이벤트가 트리거될 때마다 Dialogflow에서 생성된 응답을 만들어 사용자에게 다시 알립니다. 응답 생성이 실패하면 일반 사전 정의된 에이전트 응답이 대신 제공됩니다.
에이전트의 흐름, 페이지 또는 파라미터 fulfillment에 사용할 수 있는 no-match 이벤트 핸들러에서 대체 대답 생성 기능을 사용 설정할 수 있습니다.
전체 Liveaboards(리브어보드) 흐름의 no-match-default 이벤트에 대해 대체 대답 생성 기능을 사용 설정하기 시작합니다.
- 흐름의 Start Page(시작 페이지)를 펼칩니다.
- 이벤트 핸들러에서 sys.no-match-default를 클릭합니다.
- 에이전트 응답에서 생성적 대체 사용 설정을 선택한 다음 저장을 클릭합니다.


특정 일치 없음(no-match) 이벤트에서 대체 대답 생성 사용 설정
이제 에이전트가 승객 수를 묻는 경우 잘못된 입력을 처리하기 위해 대체 대답 생성 기능을 사용 설정하려고 합니다.
- 양식 파라미터가 포함된 Collect Further Info(추가 정보 수집) 페이지를 엽니다. number-of-guests(게스트 수) 파라미터를 클릭합니다.
- 대상 No-match 이벤트 핸들러로 이동합니다(Reprompt event handlers(이벤트 핸들러 리프롬프트) 섹션까지 아래로 스크롤한 다음 No-match default 이벤트 핸들러를 클릭).

- 에이전트 응답에서 생성적 대체 사용 설정을 선택합니다.

- 마지막으로 저장을 클릭합니다.
- 이제 정확히 동일한 단계를 반복하여 destination(목적지) 및 email-address(이메일 주소)에 대해 대체 대답 생성을 사용 설정합니다.
수고하셨습니다. 예상치 못한 인텐트와 잘못된 파라미터 값을 처리하기 위해 대체 대답 생성을 사용 설정했습니다. 다음으로 LLM에 응답 방법을 알려주는 텍스트 프롬프트로 대체 대답 생성 기능을 구성하는 방법을 알아봅니다.
6. 생성적 대체 구성
대체 대답 생성 기능은 생성된 응답을 만들기 위해 대규모 언어 모델로 요청을 전달합니다. 요청은 자연어와 에이전트의 현재 상태 및 대화 정보가 혼합된 텍스트 프롬프트의 형태를 취합니다. 이 기능은 여러 방법으로 구성할 수 있습니다.
- 응답 생성에 사용할 특정 (사전 정의) 프롬프트를 선택합니다.
- 커스텀 프롬프트를 정의합니다.
사전 정의 프롬프트 선택
- Dialogflow CX 콘솔에서 에이전트 설정을 클릭합니다.

- ML 탭으로 이동한 후 생성형 AI 하위 탭으로 이동합니다.

이 기능은 기본 템플릿 (표시되지 않음)과 자신만의 프롬프트를 작성하기 위한 가이드 역할을 할 수 있는 예시 템플릿이라는 두 가지 템플릿 프롬프트를 기본으로 제공합니다.
- 예시 템플릿을 선택하고 드롭다운의 오른쪽에 있는 수정 버튼을 클릭하여 검사합니다.
사전 정의된 프롬프트를 통해 가상 에이전트는 기본적인 대화 상황을 처리할 수 있습니다. 예를 들면 다음과 같습니다.
- 사용자에게 인사하고 작별 인사를 건넵니다.
- 사용자가 이해하지 못하는 경우 에이전트가 말한 내용을 반복합니다.
- 사용자가 요청하면 기다립니다.
- 대화를 요약합니다.
Divebooker 에이전트에 대한 구체적인 텍스트 프롬프트를 정의해 보겠습니다.
7. 자체 프롬프트 정의
- 아래 프롬프트를 복사하여 텍스트 프롬프트 영역에 붙여넣습니다.
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
- Save as a new template(새 템플릿으로 저장)을 선택하여 새 프롬프트를 새 템플릿으로 저장하고(새 템플릿 이름 선택) 패널 오른쪽 하단에서 저장을 클릭합니다.

- 새로 만든 프롬프트를 실제로 활성 프롬프트로 만들려면 설정을 저장해야 합니다.

자체 텍스트 프롬프트를 작성할 때는 명확하고 간결하며 규칙을 전달하는 방식으로 작성하세요. LLM에 대한 프롬프트가 작성되는 방식은 LLM의 응답 품질에 큰 영향을 미칠 수 있습니다. LLM은 지시사항을 따르도록 학습되므로 프롬프트가 정확한 지시사항처럼 보일수록 더 나은 결과를 얻을 가능성이 높습니다. 프롬프트를 작성하고 결과를 바탕으로 반복하여 개선합니다.
효과적인 프롬프트를 작성하려면 다음 권장사항을 따르세요.
- LLM에 원하는 작업에 관한 명확하고 간결한 설명을 제공합니다. 더도 말고 덜도 말고 딱 그만큼만 제공하세요. 완전하면서도 짧게 작성하세요.
- 또한 프롬프트가 모호하거나 애매하지 않도록 구체적이고 잘 정의되어야 합니다.
- 복잡한 작업을 더 작고 관리하기 쉬운 작업으로 나눕니다. 작업을 더 작은 단계로 나누면 모델이 한 번에 하나의 작업에 집중하도록 도와 오류나 혼동의 가능성을 줄일 수 있습니다.
- 프롬프트에 예시를 추가하여 대답 품질을 개선할 수 있습니다. 대답 방법에 대한 예를 통해 LLM이 컨텍스트 내에서 학습합니다.
프롬프트를 만들 때 생성해야 할 컨텍스트에 대한 자연어 설명 외에 다음 자리표시자를 사용할 수도 있습니다.
$conversation마지막 사용자 발화를 제외한 에이전트와 사용자 간의 대화입니다. 텍스트 프롬프트에서 발화자 프리픽스(예: '사람', 'AI' 또는 '사용자', '에이전트')를 조정할 수 있습니다.$last-user-utterance마지막 사용자 발화입니다.$flow-description활성 흐름의 흐름 설명입니다.$route-descriptions활성 인텐트의 인텐트 설명입니다.
이제 초기 텍스트 프롬프트가 있으므로 다음 작업은 흐름과 인텐트에 대한 설명이 적절한지 확인하는 것입니다.
8. 흐름 및 인텐트 설명 추가
흐름 설명 추가
- Liveaboards(리브어보드) 흐름에 설명을 추가하려면 Flows(흐름) 섹션의 흐름 위로 마우스를 가져가 흐름 설정에 액세스합니다.

- 옵션
버튼을 클릭합니다. - 흐름 설정을 선택하고 다음 설명 (또는 유사한 설명)을 추가합니다.
search, find and book liveaboards

- 저장을 클릭합니다.
인텐트 설명 추가
- 이제 head.send.group.request 인텐트에 적절한 설명을 추가합니다. 관리 탭으로 전환하고 리소스 섹션에서 인텐트를 선택한 다음 head.send.group.request 인텐트를 선택합니다.
- 다음 설명을 추가합니다.
assist users with group or full charter reservations. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands
설명에는 보트에 탑승할 수 있는 최소 및 최대 승객 수와 같은 중요한 정보가 포함되어 있습니다. 이 점을 염두에 두세요.
- 저장을 클릭합니다.
이제 완료되었습니다. 흐름 및 파라미터 fulfillment 모두에 대해 no-match 이벤트 핸들러에서 대체 대답 생성을 사용 설정했습니다. 또한 대체 대답 생성 기능이 대규모 언어 모델에 전달하여 생성형 응답을 생성하는 자체 텍스트 프롬프트를 정의했습니다.
다음 섹션에서는 에이전트를 다시 테스트하여 이전과 동일한 까다로운 질문에 어떻게 답할 수 있는지 확인합니다.
9. 에이전트 재테스트
이제 가상 에이전트에서 대체 대답 생성을 구성하고 사용 설정했으므로 비슷한 어려운 질문을 하고 응답을 어떻게 처리하는지 확인할 수 있습니다.
Test Agent(에이전트 테스트)를 클릭하여 시뮬레이터를 다시 엽니다.

에이전트에게 리브어보드와 리브어보드 다이빙에 대해 다시 한번 물어보세요. 이제부터 모든 대화에는 사용자 정의 메시지와 빨간색 상자로 강조 표시된 생성된 응답이 포함됩니다.

일반적인 리프롬프트 대신 유용한 정보가 담긴 답변을 얻으셨나요? 좋습니다. 에이전트가 수행해야 할 작업에 대한 명확하고 간결한 설명을 텍스트 프롬프트와 흐름 설명에 제공하면 봇이 이제 구체적인 인텐트를 생성하지 않고도 상세한 질문에 훨씬 더 스마트하게 대답할 수 있습니다. 고객은 에이전트가 실행할 수 없는 응답 대신 더 많은 정보를 바탕으로 한 응답을 제공할 수 있다는 점을 높이 평가할 것입니다.
주저하지 말고 에이전트를 테스트해 보세요. 공인된 다이버가 아닌 사람이 이용할 수 있는 스쿠버 다이빙 강좌를 찾아달라고 요청해 보세요.

맞습니다. 현재 에이전트는 스쿠버 다이빙 강좌를 지원하도록 설계되어 있지 않습니다. 에이전트는 어떻게 알까요? 텍스트 프롬프트에서 에이전트가 지원할 수 있는 것과 없는 것을 명확하게 설명했습니다. '지금은 육상 다이빙 및 강좌와 관련한 고객의 문의에는 답할 수 없어. 지역 다이빙 숍과 다이빙 리조트를 추천할 수 없어'
이제 해피 시나리오를 다시 테스트하고 대화를 풍부하게 만들어 보세요. 경험이 어떻게 바뀌었는지 살펴보겠습니다.


Dialogflow가 인텐트와 일치하는 항목을 찾거나 흐름 설계에 따라 파라미터를 수집하려고 시도하면 설계 시 정의된 fulfillment가 표시됩니다. 사용자가 여행 세부정보 요약을 요청하거나 전화번호를 제공하겠다고 제안하는 등 스크립트에서 벗어난 요청을 하면 대체 대답 생성 기능이 작동합니다.
좋은 소식입니다. 해피 시나리오를 다시 테스트해 보셨을 텐데요. 실제 상담사와 대화하는 것과 최대한 유사한 경험을 통해 에이전트와 즐겁고 자연스러운 대화를 나누셨기를 바랍니다.
안타깝게도 대화 중에 문제가 발생할 수 있습니다. 이번에는 게스트 수를 묻는 메시지가 표시되면 15보다 큰 숫자를 입력합니다.


여기서 몇 가지 주목할 점이 있습니다.
- 20이 유효한 숫자가 아닌 이유는 무엇인가요? 인텐트 설명에서 허용되는 게스트 수에 제한을 설정했기 때문입니다. "에이전트는 출발 시간, 목적지, 게스트 수 ***(최소 4명, 최대 15명)****, 연락처 세부정보*와 같은 정보를 수집합니다." LLM이 반환한 생성형 대답인 '죄송합니다. 최대 15명까지의 단체 예약만 도와드릴 수 있습니다.'는 게스트 수에 대해 지정한 제한사항과 완벽하게 일치합니다. 이를 더욱 강화하기 위해 number-of-guests는 4~15 범위에 포함된 숫자만 일치시키는 커스텀 정규 표현식 항목입니다.
- 결국 사용자는 15명의 다이버를 위한 제안을 받고 싶어 하기 때문에 대화가 계속됩니다. 자연스러운 대화 중에 자주 일어나는 일입니다. 우리는 꽤 자주 마음을 바꿉니다. 에이전트가 협조적으로 작업을 처리하고 사용자를 성공적인 경로로 부드럽게 안내하는 방식을 확인하세요.
대화를 설계할 때는 대화의 절반을 스크립팅하고 나머지 절반에 대해서는 누구나 개입하여 연기할 수 있을 만큼 강력하기를 바랍니다. 롱테일용으로 설계할 때는 개발자가 대화의 모든 단계에서 사용자가 말할 수 있는 내용을 파악하여 경로, 핸들러, 파라미터를 정의해야 합니다. 이러한 이유로 Google은 Dialogflow CX에 대체 대답 생성 기능을 추가했습니다. 개발자가 대화 설계 원칙에 집중하고 구현 세부정보에 덜 신경 써도 사용자에게 강력한 대화형 환경을 제공할 수 있도록 하기 위해서입니다.
이번에는 몰디브처럼 사용 가능한 목적지 목록에 없는 장소로 봇에 다시 질문해 보세요. 그런 다음 이면에서 어떤 일이 일어나는지 간단히 살펴보겠습니다.

destination 파라미터의 no-match 이벤트에 대체 대답 생성도 사용 설정했으므로 생성형 응답을 생성하기 위해 대규모 언어 모델로 요청이 전송됩니다. Agent says(에이전트의 말) 아래에 표시된 일반적인 사전 정의된 응답은 무시됩니다.
아래의 텍스트 상자를 통해 자리표시자가 대규모 언어 모델로 전송되는 요청을 어떻게 형성하는지 더 잘 이해할 수 있습니다.
다음은 Dialogflow에서 구성한 맞춤 텍스트 프롬프트로, 자리표시자가 굵게 강조 표시되어 있습니다.
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
아래 텍스트 상자에는 대규모 언어 모델이 수신한 입력 값과 사용자에게 다시 전달될 생성된 응답이 포함된 출력 값이 있습니다.
llm_input: You are a friendly agent that likes helping traveling divers. You are under development and you can only help search, find and book liveaboards. At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts. Currently you can assist users who are looking for a group reservation or a full charter. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands. The conversation between the human and you so far was: Human: Hi, my name's Alessia AI Hi Alessia, what can I help you with today? Human: Can you help me find a nice boat for myself and my family? AI To assist you with that I need to collect the details of your travel and then we'll get back to you with an offer shortly. Where would you like to go? We can organize a charter in Costa Rica, Galapagos Islands and several locations around Mexico Then the human asked: The kids want to go to the Maldives llm_output: You say: I'm sorry Alessia, we can only help you with liveaboards in Costa Rica, Galapagos Islands and several locations around Mexico.
이전 테스트와 마찬가지로 사용자에게 다시 전송된 응답은 모델에 의해 생성되며 인텐트 설명의 일부로 제공된 정보인 "목적지는 코스타리카, 멕시코, 갈라파고스 제도 중 하나여야 해."에 의존합니다.
차단된 문구 목록 수정
대체 대답 생성 기능은 여러 방법으로 구성할 수 있습니다.
- 응답 생성에 사용할 특정 (사전 정의) 프롬프트를 선택합니다.
- 커스텀 프롬프트를 정의합니다.
- 차단된 문구 목록을 변경합니다.
지금까지 처음 두 가지 방법을 살펴봤습니다. 세 번째를 살펴보겠습니다.
- 에이전트 설정에서 ML 탭으로 이동한 후 생성형 AI 하위 탭으로 이동합니다.
- 차단된 문구 섹션에서 다음 문장을 목록에 추가합니다.
Dangerous countryHateful placeMedical assistance- 저장을 클릭합니다.
- 재설정 아이콘을 클릭하고 마지막 시나리오를 다시 테스트합니다. 전 세계의 아름다운 다이빙 명소 대신 차단된 문구 중 하나를 입력해 보세요.

프롬프트 및 생성된 응답은 차단된 문구 목록과 대조하여 확인됩니다. 차단된 문구는 생성형 AI에서 금지된 문구입니다. 입력 값에 차단된 문구 또는 안전하지 않은 것으로 간주되는 문구가 포함되어 있는 경우 생성에 실패하고, 일반 사전 정의된 응답(동일한 fulfilment의 Agent says(에이전트의 말) 아래에 표시됨)이 대신 제공됩니다.
훌륭합니다. 생성형 응답이 큰 차이를 만들어 낼 수 있는 다양한 대화 상황을 다루었습니다. 계속해서 테스트해 보세요.
10. 축하합니다
Codelab을 완료했습니다. 이제 휴식을 취할 시간입니다.

가상 에이전트를 성공적으로 만들고 흐름 및 파라미터 채우기 중에 사용되는 no-match 이벤트 핸들러에서 대체 대답 생성 기능을 사용 설정했습니다.
대체 대답 생성 기능을 사용하면 좋은 대화 흐름 및 인텐트 설명과 결합하여 '죄송합니다. 잘 모르겠습니다' 또는 '죄송합니다. 잘못된 옵션을 입력하셨습니다'와 같은 일반적인 프롬프트와 달리, 구체적이고 협조적인 응답을 에이전트에서 제공할 수 있습니다. 대규모 언어 모델이 생성한 오류 프롬프트는 사용자를 성공적인 경로로 부드럽게 안내하거나 가능한 것과 불가능한 것에 대한 사용자의 기대를 재설정할 수 있습니다.
다른 대화 상황을 자유롭게 테스트하고 Dialogflow CX 및 생성형 AI와 관련된 다른 기능을 살펴보세요.
삭제
다음과 같이 정리하면 이 Codelab에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않습니다.
- Dialogflow CX 콘솔로 이동하여 만든 모든 에이전트를 삭제합니다.
- Google Cloud 콘솔에서 API 및 서비스 페이지로 이동하여 Dialogflow API를 사용 중지합니다.
추가 자료
다음 가이드와 리소스를 통해 대화형 AI와 생성형 AI에 대해 계속 알아보세요.
라이선스
이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.
