1. 개요
최종 업데이트: 2023년 8월 7일
빌드할 항목
이 Codelab에서는 Dialogflow CX에서 간단한 가상 에이전트를 빌드, 배포, 구성하여 여행 중인 스쿠버 다이버가 단체 예약 및 프라이빗 전세 서비스를 이용할 수 있도록 합니다. 가상 에이전트는 생성형 AI와 Google의 최신 생성형 대규모 언어 모델 (LLM)을 사용하여 가상 에이전트 응답을 생성합니다.
학습할 내용
- 관련 API를 사용 설정하는 방법
- Dialogflow가 인텐트 매개변수에서 페이지 양식 매개변수 값을 자동으로 미리 채우는 방법
- Dialogflow에서 이벤트 핸들러를 구성하는 방법
- 매개변수 채우기 중에 흐름에 사용된 일치하지 않는 이벤트 핸들러에서 생성형 대체를 사용 설정하는 방법
- 기본 및 상담사별 대화 상황을 처리하도록 자체 텍스트 프롬프트를 구성하는 방법
- 사용자 정의 재프롬프트 외에 필수 매개변수에 대한 재프롬프트 핸들러를 생성하는 적절한 인텐트 및 매개변수 설명을 작성하는 방법
- 생성형 대체를 트리거하는 에이전트를 테스트하고 고객 질문을 시뮬레이션하는 방법
필요한 항목
- 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 콘솔 열기
Dialogflow CX 콘솔을 Google Cloud 프로젝트와 함께 사용하여 이 Codelab의 나머지 단계를 수행합니다.
- 브라우저에서 Dialogflow CX 콘솔로 이동합니다.
- 사용할 Google Cloud 프로젝트를 선택하거나 사용할 새 프로젝트를 만듭니다.
- Dialogflow CX 콘솔에 에이전트 목록이 표시됩니다.
Dialogflow CX를 처음 사용하는 경우 요구사항에 따라 프로젝트 및 설정을 구성하는 방법에 대한 자세한 내용은 Dialogflow CX 문서를 참고하세요.
새 Dialogflow CX 에이전트 만들기
- GitHub 저장소에서 다운로드한 에이전트를 복원하려면 새 에이전트를 만들어야 합니다. Dialogflow CX 콘솔에서 페이지 오른쪽 상단의 새 에이전트 만들기를 클릭합니다.
- 자체 에이전트 빌드 옵션을 선택합니다.
- 아래 에이전트 설정으로 양식을 작성하고 만들기를 클릭하여 에이전트를 만듭니다.
- 표시 이름으로
Divebooker
을 선택합니다. - 위치로
us-central1
을(를) 선택합니다. - 원하는 시간대를 선택하세요.
- 기본 언어로
en - English
선택
- Dialogflow에서 에이전트가 자동으로 열립니다. 아직 끝나지 않았습니다.
Divebooker 에이전트 복원
- 에이전트 목록 페이지로 돌아가서 방금 만든 에이전트를 식별합니다. 옵션 를 클릭한 다음 복원 버튼을 클릭합니다.
- 업로드 옵션을 선택한 다음 이전에 GitHub 저장소에서 다운로드한 ZIP 파일을 드롭하거나 선택합니다.
- 복원 버튼을 클릭하여 Google에서 제공한 에이전트를 가져옵니다.
잘하셨습니다. 고객을 지원할 준비가 된 다이빙 예약 가상 에이전트 빌드가 완료되었습니다. 다음 섹션에서는 이 메서드를 테스트하여 사용자 질문에 답변하고 예약 요청을 지원하는 데 얼마나 효과적인지 확인합니다.
4. 에이전트 테스트
Dialogflow에서는 상담사와 채팅하고 버그를 발견할 수 있는 시뮬레이터가 기본 제공됩니다. 차례마다 트리거된 인텐트, 에이전트 응답, 활성 페이지, 세션 매개변수의 올바른 값을 확인할 수 있습니다.
몇 가지 시나리오를 테스트하고 각 시나리오에서 상담사가 특정 응답을 제공하는 이유를 살펴봅니다. 첫 번째 항목부터 시작하겠습니다.
해결되지 않은 인텐트
- Dialogflow 콘솔과 에이전트 내에서 테스트 에이전트를 클릭하여 시뮬레이터를 엽니다.
- 에이전트에게 보낼 인사말(예:
Hello
)을 입력하고what is a liveaboard?
에 물어봅니다. 질문은 어떠한 인텐트와도 일치하지 않습니다. 예를 들어 '죄송합니다. 어떻게 도와야 할지 모르겠어요'와 같은 일반적인 프롬프트입니다. 표시됩니다. 시뮬레이터에서 원래 응답을 검사하여 sys.no-match-default 내장 이벤트가 호출되었는지 확인할 수 있습니다.
JSON 응답의 끝부분까지 아래로 스크롤합니다. 일치하는 인텐트를 검색할 때 Dialogflow는 이 인텐트가 NO_MATCH임을 발견하고 일치하지 않는 이벤트를 발생시킵니다.
- Build 탭으로 전환하고 Liveaboards 흐름의 시작 페이지를 엽니다.
기본적으로 모든 흐름에는 일치하지 않음 및 입력이 없는 기본 제공 이벤트에 대한 이벤트 핸들러가 있습니다. 이러한 이벤트 핸들러는 흐름을 만들 때 자동으로 생성되며 삭제할 수 없습니다.
- sys.no-match-default 이벤트 핸들러를 클릭하고 Agent response 섹션까지 아래로 스크롤합니다. Dialogflow는 대체 응답 목록을 제공하지만 다양한 유형의 응답 메시지를 정의하여 최종 사용자에게 텍스트 응답 이상을 제공할 수도 있습니다.
이제 행복한 길로 넘어가 봅시다!
행복한 길
이 두 번째 경우에는 다이버가 되어 내년 7월에 12인을 위한 갈라파고스 제도 다이빙 크루즈를 예약하려는 것으로 가정하겠습니다.
- 시뮬레이터 패널에서 Reset 아이콘을 클릭하여 에이전트와 새 대화를 시작합니다.
- 에이전트에게 갈라파고스 제도 전세를 예약하고 싶다고 말하고 여행 세부정보를 제공합니다. 아래와 정확히 동일한 프롬프트를 사용하지 않아도 됩니다. 실험해 보세요.
- 시작 페이지를 열고 head.send.group.request 경로를 클릭합니다. Transition 섹션까지 아래로 스크롤하여 이 인텐트가 일치될 때 Dialogflow에 페이지를 전환합니다.
- 경로 정의를 닫고 추가 정보 수집 페이지를 펼칩니다. 항목 처리와 매개변수 목록을 확인합니다.
Dialogflow CX의 각 페이지에서 페이지의 최종 사용자로부터 수집해야 하는 매개변수 목록인 양식을 정의할 수 있습니다. 여행 목적지를 초기 입력의 일부로 전달했고 destination도 인텐트 매개변수이므로 에이전트가 여행 목적지를 요청하지 않았습니다. 페이지가 처음 활성화되고 활성 기간 중에 인텐트 매개변수와 이름이 동일한 양식 매개변수가 자동으로 세션 매개변수 값으로 설정되고 이에 상응하는 메시지를 건너뜁니다.
- 관리 탭으로 전환하고 인텐트 섹션 아래에서 head.send group request 인텐트를 클릭합니다. 이 인텐트에 제공된 학습 문구와 학습 문구의 주석 처리된 부분을 살펴보세요.
- '다이버 15명을 위한 코스타리카 여행을 계획하려고 합니다'라는 학습 문구를 가정해 보겠습니다. '코스타리카' destination 및 '15'로 주석이 달립니다. 투숙객 수로 예약할 수 있습니다. 학습 문구의 일부를 주석 처리하면 Dialogflow는 이러한 부분이 런타임에 최종 사용자가 제공하는 실제 값의 예시일 뿐임을 인식합니다. 이것이 초기 입력 '갈라파고스 제도에 전세를 제공합니까?'에 대한 이유입니다. Dialogflow가 '갈라파고스 제도'에서 대상 매개변수를 추출했습니다.
다음으로 양식 매개변수를 작성하라는 요청을 받았을 때 에이전트에 유효한 입력을 제공하지 않으면 어떻게 되는지 살펴보겠습니다.
잘못된 입력
- 시뮬레이터 패널에서 Reset 아이콘을 클릭하여 에이전트와 새 대화를 시작합니다.
- 그룹 예약을 하려는 의도를 표현합니다. 이번에는 상담사에게 가고자 하는 장소를 알려주지 말고 코스타리카, 갈라파고스, 멕시코가 아닌 임의의 값으로 대상 응답을 요청받았을 때 말합니다.
- 관리 탭의 리소스 섹션에서 항목 유형을 클릭합니다. 두 개의 탭을 확인하세요. System(시스템) 탭 아래에서 현재 에이전트에서 사용 중인 시스템 개체를 찾을 수 있습니다. 커스텀 탭에는 이 에이전트와 관련된 데이터를 일치시키기 위해 생성된 커스텀 항목 목록이 표시됩니다.
- 대상 항목을 클릭하여 항목과 일치하는 값을 확인합니다. '유럽' 은 항목 중 하나가 아니며 동의어도 아닙니다.
- 흐름 다이어그램에서 양식 매개변수가 포함된 추가 정보 수집 페이지를 펼칩니다. 목적지 매개변수를 클릭합니다.
- 매개변수 패널에서 Reprompt 이벤트 핸들러 섹션까지 아래로 스크롤한 다음 No-match default 이벤트 핸들러를 클릭합니다.
이 매개변수 수준 이벤트 핸들러는 양식 작성 중에 잘못된 최종 사용자 입력을 처리하기 위한 것입니다. 왜냐하면 '유럽' 가 예상치 못한 입력인 경우 sys.no-match-default 이벤트가 호출되고 이 이벤트에 대해 정의된 해당 reprompt 핸들러가 호출되었습니다. 상담사 메시지 섹션에는 대체 메시지 재요청 메시지 두 개가 표시됩니다.
수고하셨습니다. 이러한 테스트 사례는 상담사가 적절하게 처리해야 하는 일반적인 시나리오를 나타냅니다. 사용자가 봇이 답변할 수 없는 질문을 하거나 봇이 처리할 수 없는 요청을 하는 경우가 매우 많습니다. 롱테일을 위한 디자인은 매우 복잡하므로, 대부분의 사용자가 따라갈 수 있는 잘 갖춰진 경로를 벗어나게 됩니다. 대화에서 문제가 발생할 수 있는 모든 상황과 사용자가 예상하지 못했거나 지원되지 않는 경로를 모두 생각해 보세요.
자동 음성 인식 (ASR)의 발전으로 Google은 사용자가 한 말을 거의 항상 정확하게 알고 있습니다. 하지만 사용자가 무엇을 의미하는지 파악하는 것은 여전히 어렵습니다. 발언을 개별적으로 이해할 수 없는 경우가 많습니다. 문맥을 통해서만 이해할 수 있습니다 이 Codelab의 다음 섹션에서는 Google의 최신 생성형 대규모 언어 모델 (LLM)이 대화를 정상화하고 대화를 진행하는 데 어떻게 도움이 되는지 살펴봅니다.
5. 생성형 대체 사용 설정
생성형 대체 기능이란 무엇인가요?
생성형 대체 기능은 Google의 대규모 언어 모델 (LLM)을 사용하여 가상 에이전트 응답을 생성하는 Dialogflow CX 기능입니다.
어떻게 도움이 되나요?
주요 사용 사례 간에는 사용자가 이해하지 못할 때 상담사가 말한 내용을 반복하고 사용자가 요청할 때 잠시 전화를 끊고 대화를 요약하는 등 다소 일반적인 사용자 요청이 있습니다. 우리가 한 첫 번째 테스트에서 에이전트는 '라이브 보드란 무엇인가요?'라는 질문에 답하지 못했습니다. 아직 이 인텐트에 대한 인텐트를 만들고 스쿠버 다이빙과 리브어보드와 관련된 이러한 유형의 일반적인 질문을 처리하는 흐름을 설계하지 않았기 때문입니다.
강력한 인텐트가 있어도 오류의 여지는 여전히 존재합니다. 사용자는 침묵을 유지하거나 (입력 없음 오류) 예상치 못한 말을 하여 (일치하지 않음 오류) 스크립트를 사용할 수 없습니다. 오류 발생을 방지하는 것이 발생 후에 처리하는 것보다 낫지만 오류를 완전히 피할 수는 없습니다. '죄송합니다. 어떻게 도와야 할지 모르겠어요'와 같은 일반적인 프롬프트 또는 유사한 최소 실행 가능한 솔루션으로는 충분하지 않은 경우가 많습니다. 오류 프롬프트는 협력적 원칙을 바탕으로 해야 합니다. 이 원칙에서는 효율적인 커뮤니케이션을 위해 대화 참여자 간에 저속 협력이 있다는 가정을 기반으로 합니다.
다음 섹션에서는 더 나은 고객 경험을 위해 인텐트 범위를 확대하고 오류 처리를 간소화하도록 생성형 대체 기능을 구성하는 방법을 살펴보겠습니다.
전체 흐름의 일치하지 않는 이벤트에 생성형 대체를 사용 설정합니다.
흐름, 페이지 또는 매개변수 채우기 중에 사용된 일치하지 않는 이벤트 핸들러에서 생성형 대체를 사용 설정할 수 있습니다. 일치하지 않는 이벤트에 생성형 대체가 사용 설정된 경우 이벤트가 트리거될 때마다 Dialogflow는 생성된 응답을 생성하려고 시도하고 사용자에게 이를 답합니다. 응답 생성에 실패하면 일반적인 규정된 에이전트 응답이 대신 발행됩니다.
흐름, 페이지 또는 매개변수 처리에서 사용할 수 있는 일치하지 않는 이벤트 핸들러에서 생성형 대체를 에이전트에서 사용 설정할 수 있습니다.
전체 Liveaboards 흐름과 일치하지 않는 기본 이벤트에 생성형 대체가 사용 설정됩니다.
- 흐름의 시작 페이지를 펼칩니다.
- 이벤트 핸들러에서 sys.no-match-default를 클릭합니다.
- 상담사 응답에서 생성형 대체 사용 설정을 선택한 다음 저장을 클릭합니다.
특정 일치하지 않는 이벤트에 생성형 대체 사용 설정
이제 에이전트가 승객 수를 요청할 때 생성형 대체를 사용 설정하여 잘못된 입력을 처리할 수 있습니다.
- 양식 매개변수가 포함된 추가 정보 수집 페이지를 엽니다. 게스트 수 매개변수를 클릭합니다.
- 대상 No-match 이벤트 핸들러로 이동합니다. Reprompt 이벤트 핸들러 섹션으로 스크롤한 다음 No-match default 이벤트 핸들러를 클릭합니다.
- 에이전트 응답에서 생성적 대체 사용 설정을 선택합니다.
- 마지막으로 저장을 클릭합니다.
- 이제 정확한 단계를 반복하여 destination 및 email-address에 대해 생성형 대체를 사용 설정합니다.
수고하셨습니다. 예상치 못한 인텐트와 잘못된 매개변수 값을 처리하기 위해 생성형 대체를 사용 설정했습니다. 다음으로 LLM에 응답 방법을 알려주는 텍스트 프롬프트로 생성형 대체 기능을 구성하는 방법을 살펴보겠습니다.
6. 생성적 대체 구성
생성형 대체 기능은 요청을 대규모 언어 모델에 전달하여 생성된 응답을 생성합니다. 요청은 자연어와 상담사 및 대화의 현재 상태에 관한 정보가 혼합된 텍스트 프롬프트 형식입니다. 이 기능은 여러 방법으로 구성할 수 있습니다.
- 응답 생성에 사용할 특정 (이미 정의된) 프롬프트를 선택합니다.
- 커스텀 프롬프트를 정의합니다.
이미 정의된 프롬프트 선택
- Dialogflow CX 콘솔에서 에이전트 설정을 클릭합니다.
- ML 탭에서 생성형 AI 하위 탭으로 이동합니다.
이 기능은 기본 템플릿 (표시되지 않음)과 프롬프트 작성을 안내하는 예시 템플릿, 이렇게 두 가지 템플릿 프롬프트로 즉시 제공됩니다.
- Example 템플릿을 선택하고 드롭다운 오른쪽에 있는 Edit 버튼을 클릭하여 검사합니다.
가상 에이전트는 사전 정의된 프롬프트를 통해 기본적인 대화 상황을 처리할 수 있습니다. 예를 들면 다음과 같습니다.
- 사용자에게 인사하고 작별 인사를 건넵니다.
- 사용자가 이해하지 못하는 경우 에이전트가 말한 내용을 반복합니다.
- 사용자가 요청하면 기다립니다.
- 대화를 요약합니다.
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:
- 새 템플릿으로 저장을 선택하여 새 프롬프트를 새 템플릿으로 저장하고 (새 템플릿 이름 선택) 패널 오른쪽 하단에 저장을 클릭합니다.
- 새로 만든 프롬프트를 실제로 활성 프롬프트로 만들려면 설정도 저장해야 합니다.
텍스트 프롬프트를 직접 작성할 때는 명확하고 간결하며 규범적인 방식으로 작성하세요. LLM에 대한 프롬프트가 작성되는 방식은 LLM의 응답 품질에 큰 영향을 미칠 수 있습니다. LLM은 지시를 따르도록 학습되기 때문에 프롬프트가 정확한 안내처럼 보일수록 더 나은 결과를 얻을 수 있습니다. 결과에 따라 프롬프트를 작성한 후 반복하여 개선하세요.
효과적인 프롬프트를 작성하려면 다음 권장사항을 따르세요.
- LLM이 수행할 작업에 대한 명확하고 간결한 설명을 제공합니다. 그 이하도 아닙니다. 최대한 간결하고 간결하게 작성하세요.
- 또한 프롬프트는 구체적이고 잘 정의되어 있어야 하며, 모호하거나 모호한 표현은 피해야 합니다.
- 복잡한 작업을 더 작고 관리하기 쉬운 작업으로 나눕니다. 작업을 더 작은 단계로 나누면 모델이 한 번에 한 가지 항목에 집중하고 오류나 혼동이 발생할 가능성을 줄일 수 있습니다.
- 대답 품질을 개선하려면 프롬프트에 예시를 추가하세요. LLM은 응답 방법에 관한 예시를 통해 컨텍스트에 맞게 학습합니다.
프롬프트를 만들 때 생성해야 하는 컨텍스트 종류에 관한 자연어 설명 외에 다음 자리표시자도 사용할 수 있습니다.
$conversation
에이전트와 사용자 간의 대화(마지막 사용자 발화는 제외) 회전 접두사를 조정할 수 있습니다 (예: '인간', 'AI' 또는 'You', 'Agent')를 입력합니다.$last-user-utterance
: 마지막 사용자 발화.$flow-description
: 활성 흐름의 흐름 설명입니다.$route-descriptions
활성 인텐트의 인텐트 설명입니다.
이제 초기 텍스트 프롬프트가 있으므로 다음 작업은 흐름과 인텐트에 적절한 설명이 포함되도록 하는 것입니다.
8. 흐름 및 인텐트 설명 추가
흐름 설명 추가
- Liveaboards 흐름에 설명을 추가하려면 흐름 섹션의 흐름 위로 마우스를 가져가 흐름 설정에 액세스합니다.
- 옵션 버튼을 클릭합니다.
- 흐름 설정을 선택하고 다음 설명 (또는 유사한 설명)을 추가합니다.
search, find and book liveaboards
- 저장을 클릭합니다.
인텐트 설명 추가
- 이제 head.send.group.request 인텐트에 적절한 설명을 추가해 보겠습니다. Manage(관리) 탭으로 전환하고 Resources(리소스) 섹션 아래에서 Intents(인텐트)를 선택하고 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
설명에는 보트에 허용되는 최소 및 최대 승객 수와 같은 중요한 정보가 포함되어 있습니다. 유의사항
- 저장을 클릭합니다.
관심분야 카테고리 선택이 완료되었습니다. 흐름과 매개변수 처리 모두에 대해 일치하지 않는 이벤트 핸들러에 생성형 대체를 사용 설정했습니다. 또한 생성형 대체 기능이 생성형 응답을 생성하기 위해 대규모 언어 모델에 전달하는 자체 텍스트 프롬프트를 정의했습니다.
다음 섹션에서는 에이전트를 다시 테스트하여 이전과 동일한 어려운 질문에 어떻게 답변할 수 있는지 확인합니다.
9. 에이전트 다시 테스트
가상 에이전트에서 생성형 대체 대체를 구성하고 사용 설정했으므로 이제 비슷하게 어려운 질문을 하고 응답을 처리하는 방식을 확인할 수 있습니다.
테스트 에이전트를 클릭하여 시뮬레이터를 다시 엽니다.
상담사에게 리브어보드 및 리브어보드 다이빙에 관해 다시 질문합니다. 이제부터 모든 대화에서 사용자 정의 메시지와 생성된 응답이 빨간색 상자로 강조표시되어 있음을 주목하세요.
일반적인 질문을 다시 작성하는 대신 유익한 답변을 받았나요? 좋습니다. (텍스트 프롬프트와 흐름 설명에서) 에이전트가 처리해야 할 작업에 대한 명확하고 간결한 설명을 제공하면, 이제 봇이 구체적인 인텐트를 생성하지 않고 상세한 질문에 답변할 때 훨씬 더 스마트해집니다. 고객은 상담사가 조치를 취할 수 없는 응답 대신 보다 자세한 정보를 제공할 수 있다는 점에 만족할 것입니다.
부끄러워하지 말고 상담사에게 도전합니다. 아직 공인 다이빙 전문가가 아니므로 스쿠버 다이빙 코스를 찾는 데 도움이 될 수 있는지 물어봅니다.
맞습니다. 지금으로서는 스쿠버 코스를 지원하도록 에이전트를 설계하지 않았습니다. 상담사는 그 사실을 어떻게 알 수 있나요? 상담사가 지원할 수 있는 것과 도움을 줄 수 없는 것이 텍스트 프롬프트에 명확하게 설명되어 있습니다. "현재 육상 다이빙 및 코스와 관련하여 고객을 지원할 수 없습니다. 현지 다이빙용품점이나 다이빙 리조트는 추천할 수 없습니다.'
이제 행복한 시나리오를 다시 테스트하고 대화를 강화합니다. 사용 환경이 어떻게 바뀌었는지 확인해 보겠습니다.
Dialogflow는 인텐트를 일치시키거나 흐름 설계에 따라 매개변수를 수집하려고 시도할 때 설계 시 정의된 처리를 표시합니다. 사용자가 스크립트에서 여행 세부정보의 요약을 요청하거나 전화번호 제공을 요청하는 경우, 생성형 대체 기능이 작동합니다.
좋은 소식입니다. 만족스러운 시나리오를 다시 테스트했습니다. 실제 상담사와의 경험에 최대한 가깝게 상담사와 즐겁고 자연스러운 대화를 나누셨기를 바랍니다.
안타깝지만 대화 중에 문제가 발생할 수 있습니다. 다른 테스트를 시도해 보겠습니다. 이번에는 참석자 수를 물으면 15보다 큰 숫자를 말하세요.
여기서 몇 가지 유의해야 할 사항이 있습니다.
- 20이 유효한 숫자가 아닌 이유는 무엇인가요? 인텐트 설명의 일부로 허용되는 투숙객 수에 제한이 설정되었기 때문입니다. '상담사가 출발 시간, 목적지, 투숙객 수와 같은 정보를 수집합니다.***(최소 4명 최대 15명)*** *, 연락처 세부정보*' 에서 자세한 내용을 확인하실 수 있습니다. LLM이 '죄송합니다. 최대 투숙객이 15명인 단체 예약만 도와드릴 수 있습니다'라는 생성형 응답입니다. 투숙객 수에 대해 정한 제한 사항과 완벽하게 일치합니다. 이를 추가로 적용하기 위해 4~15 범위에 포함된 숫자만 일치하는 커스텀 RegExp 항목이 게스트 수입니다.
- 사용자가 여전히 다이버 15명을 제안하고 싶어하기 때문에 대화가 계속됩니다. 이런 일은 자연스러운 대화 중에 자주 일어납니다. 꽤 자주 바뀝니다. 에이전트가 어떻게 협조적이면서 사용자를 부드럽게 성공적인 경로로 돌아오게 하는지 살펴보세요.
대화 디자인은 대화의 절반을 스크립트로 작성하여 누구나 개입하여 다른 절반은 실행할 수 있을 만큼 강력하기를 바랍니다. 롱테일을 고려해 설계할 때 개발자는 경로, 핸들러 및 매개변수를 정의하기 위해 대화상자의 모든 단계에서 사용자가 할 수 있는 말에 집중해야 합니다. 이것이 바로 Google에서 Dialogflow CX에 생성형 대체 기능을 추가한 이유입니다. 이를 통해 개발자는 구현 세부정보보다는 대화 설계 원칙에 집중하여 사용자에게 강력한 대화형 환경을 제공할 수 있습니다.
한 번 더 테스트를 해 보겠습니다. 이번에는 몰디브와 같이 사용 가능한 목적지 목록에 없는 장소를 사용하여 봇에 다시 도전합니다. 그런 다음 보이지 않는 곳에서 일어나는 일들을 빠르게 살펴보겠습니다.
destination 매개변수의 no-match
이벤트에 생성형 대체를 사용 설정했으므로 생성된 응답을 생성하기 위해 요청이 대규모 언어 모델로 전송됩니다. 일반적으로 규정된 응답 (상담사의 말 아래)은 무시됩니다.
아래의 텍스트 상자는 대규모 언어 모델로 전송되는 요청을 구성하는 데 자리표시자가 어떻게 도움이 되는지 이해하는 데 도움이 됩니다.
다음은 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 country
Hateful place
Medical assistance
- 저장을 클릭합니다.
- 재설정 아이콘을 클릭하고 마지막 시나리오를 다시 테스트합니다. 전 세계의 아름다운 다이빙 목적지를 제공하는 대신 금지된 문구 중 하나를 입력합니다.
프롬프트와 생성된 대답은 차단된 구문 목록과 대조하여 확인됩니다. 금지된 문구는 생성형 AI에서 차단된 문구입니다. 금지된 문구 또는 안전하지 않은 것으로 간주되는 문구가 입력에 포함된 경우 생성에 실패하고 상담사가 규정된 일반 응답 (상담사가 동일한 처리에서 말함)이 대신 발급됩니다.
훌륭합니다. 생성형 응답이 큰 차이를 가져올 수 있는 다양한 대화 상황을 살펴보았습니다. 자유롭게 테스트해 보세요.
10. 축하합니다
수고하셨습니다. Codelab을 완료했습니다. 휴식 시간
가상 에이전트를 만들고 흐름에 사용되는 no-match
이벤트 핸들러와 매개변수 채우기 중에 생성형 대체를 사용 설정했습니다.
적절한 흐름 및 인텐트 설명과 결합된 생성형 대체 기능은 '죄송합니다. 어떻게 도와야 할지 모르겠어요'와 같은 일반적인 프롬프트와는 달리 에이전트의 구체적이고 협력적인 응답을 제공할 수 있습니다. 또는 '죄송합니다. 잘못된 옵션을 입력했습니다.'와 같은 메시지가 표시될 수 있습니다. 대규모 언어 모델에서 생성되는 오류 프롬프트는 사용자를 성공적인 경로로 안내하거나 가능한 것과 불가능한 것에 대한 기대치를 재설정할 수 있습니다.
다른 대화 상황을 자유롭게 테스트하고 Dialogflow CX 및 생성형 AI와 관련해 제공되는 다른 기능을 살펴보세요.
삭제
이 Codelab에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 다음 정리를 수행할 수 있습니다.
- Dialogflow CX 콘솔로 이동하여 생성한 모든 에이전트를 삭제합니다.
- Google Cloud 콘솔에서 API 및 서비스 페이지로 이동하여 Dialogflow API를 사용 중지합니다.
추가 자료
다음 가이드와 리소스를 통해 대화형 AI와 생성형 AI에 대해 계속 알아보세요.
라이선스
이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.