장고에서 PubNub 웹훅으로 ChatGPT 구현하기
Published: 2024-03-20 11:55:38

끊임없이 확장되는 오늘날의 디지털 환경에서 우리는 디지털 완벽을 추구하기 위해 끊임없이 새로운 업데이트와 미세한 조정을 추구해야 합니다. 이러한 발전과 함께 항상 해결해야 했던 한 가지 격차는 [챗봇을](https://www.pubnub.com/blog/building-a-chatbot-with-openai-gpt3-and-pubnub/) 통한 대화에서 사용자에게 더 나은 경험을 제공해야 한다는 것이었습니다. 챗봇의 목표는 사용자가 만족감을 느끼고 제품이나 브랜드에 감정적으로 연결될 수 있도록 기업과 개인 간의 지능적인 상호작용을 설계하는 것이었습니다. 따라서 챗봇은 디지털 세계와 현실 세계 사이의 간극을 최소화하고 웹 앱, Android 및 Apple 디바이스, 웹 브라우저를 통한 온라인 커뮤니케이션 방식을 변화시키는 다목적 수단으로 부상했습니다.

챗봇은 모든 사용자가 기대하는 실시간 커뮤니케이션과 지원에 대한 증가하는 수요를 충족시키고 있습니다. 기업이 선택할 수 있는 옵션이 다양하기 때문에 강력한 챗봇이 없다면 잠재 고객과 리드를 놓치기 쉽습니다. 따라서 사용자의 기대치가 급증함에 따라 디지털 제품에 챗봇을 통합하여 사용자에게 편리함을 제공하고 만족스러운 경험을 제공하기 위한 적응 경쟁이 치열해지고 있습니다.

급하게 필요한 식료품을 주문했는데 주문이 지연되고 있다고 상상해 보세요. 웹 앱을 열었는데 추적 시스템에서 아무런 움직임이 보이지 않습니다. 업데이트를 받아야 합니다. 두 가지 가능한 시나리오가 있습니다:

**첫 번째 시나리오:** 고객 지원 번호로 전화를 걸었지만 통화량이 많아 계속 기다립니다. 불만이 커집니다.

**두 번째 시나리오:** [실시간 채팅](https://www.pubnub.com/solutions/chat/) 옵션이 있고 거의 즉시 도움을 받을 수 있습니다. 배송 기사가 오는 중이며 몇 분 후에 집에 도착할 예정이라는 업데이트가 표시됩니다. 자세한 업데이트를 원할 경우 온라인으로 담당자와 연결할 수 있는 옵션도 제공됩니다.

_어떤 경험을 선호하시나요?_

모든 사용자는 온라인 활동에서 일정 수준의 편리함을 기대합니다. 쇼핑, 문의, 교육, 게임 등 어떤 분야에서든 즉각적인 정보 공유와 문의 해결은 긍정적인 온라인 경험과 상호작용을 유도하는 가장 큰 요인 중 하나이므로 반드시 필요합니다.

챗봇의 중요성 증대
----------

의 최근 연구 보고서에 따르면 챗봇 시장 규모는 향후 몇 년 동안 크게 증가할 것이며, 2030년에는 약 [2030년까지 약 273억 달러](https://www.grandviewresearch.com/press-release/global-chatbot-market). 이는 올해부터 2030년까지 연평균 23.3%의 성장률을 기록할 것으로 예상됩니다. 놀라운 성장률이라고 해도 과언이 아닙니다! 이 전망은 챗봇이 기술과 사용자 간의 격차를 해소하면서 디지털 커뮤니케이션의 미래를 구축하는 데 중요한 역할을 할 것임을 강조합니다.

기존의 커뮤니케이션 방식은 즉각적이고 즉각적인 지원을 제공하는 데 어려움을 겪는 반면, 지능형 챗봇은 장고, PubNub 웹훅, ChatGPT 언어 모델 등의 기술을 기반으로 사용자를 의미 있는 상호작용에 참여시키는 데 탁월한 능력을 발휘합니다.

기업은 다양한 방식으로 지능형 챗봇의 이점을 누릴 수 있습니다. 챗봇은 응답 속도를 자동화하고, 예측 가능한 쿼리에 대해 신속한 고객 지원을 제공하며, 복잡한 문제가 발생하면 대화를 인간 담당자에게 전달하면서 사용자의 편의를 보장할 수 있습니다. 챗봇은 렌더링 지원 외에도 판매를 촉진하고 리드를 생성하며 브랜드의 온라인 평판을 유지합니다. 또한 자동화 챗봇은 기업의 비용을 절감하고 프로세스를 간소화합니다. 특히 이커머스에서는 다음과 같은 이점이 있습니다. [고객 경험 향상](https://www.pubnub.com/blog/4-ways-ecommerce-chatbots-enrich-customer-experiences/) 쇼핑 제안, 맞춤형 추천, 이력 및 빈도를 기반으로 한 반복 목록 등 다양한 기능을 통해 고객 경험을 향상시킬 수 있습니다.

지능형 챗봇을 설계하는 것은 복잡한 작업입니다. 혁신과 온라인에서의 인간 행동에 대한 이해가 필요합니다. 장고와 같은 강력한 프레임워크, PubNub과 같은 실시간 메시징 플랫폼, ChatGPT와 같은 정교한 AI 언어 모델을 함께 사용하면 맥락, 의미, 자극을 모두 갖춘 반응적이고 역동적인 사용자 경험을 생성하기 위한 포괄적인 전략을 설계할 수 있습니다.

### 장고 프레임워크와 PubNub 웹훅

장고 프레임워크는 [최고의 파이썬 프레임워크 중 하나](https://www.browserstack.com/guide/top-python-web-development-frameworks)중 하나로 챗봇 소프트웨어 개발의 토대를 형성합니다. 또한 지속적인 커뮤니케이션과 참여를 수용하는 프레임워크의 필수 로직을 제공합니다. 개발자는 툴킷 내에서 복잡한 기능을 통합하여 풍부한 생태계를 제공할 수 있는 몰입형 애플리케이션을 만들 수 있습니다. 장고는 쉽게 유지 관리할 수 있는 웹 애플리케이션을 만들기 위한 체계적이고 조직화된 접근 방식을 통해 개발 프로세스를 간소화합니다. 이는 주로 내장된 URL 라우팅, 강력한 보안 메커니즘, 모델-뷰-컨트롤러(MVC) 아키텍처와 같은 강력한 기능에 기인합니다.

그러나 PubNub 웹후크는 장고 백엔드와 PubNub의 메시징 구조 사이의 통로 역할을 함으로써 상호 작용 수준을 한 단계 더 끌어올립니다. Pubnub의 웹후크는 메시지를 수신하면 즉시 기능이 트리거되므로 사용자 메시지에 실시간으로 응답할 수 있습니다. 따라서 추적 가능한 지연 없이 쿼리에 응답하고, 추천을 제안하고, 사용자를 지원하고, 대화에 참여할 수 있습니다. 이러한 즉각적인 응답은 백엔드에서 자동화되어 있지만 모든 사용자에게 자연스럽게 보이는 대화의 흐름으로 이어집니다. 이번 블로그에서는 PubNet을 사용하여 챗봇을 구축하는 방법에 대해 [챗봇을 구축하는 방법에 대해 자세히 논의할 예정입니다.](https://www.pubnub.com/blog/build-a-chatbot-with-pubnub-and-chatgpt-openai/) 를 사용하여 챗봇을 구축하면 개발자가 매력적인 AI 기반 챗봇을 만드는 데 어떻게 우위를 점할 수 있는지 자세히 설명합니다.

챗봇의 지능은 기록을 검색하고 과거 상호 작용에서 참조하여 의미 있고 일관된 대화의 생태계를 만드는 능력으로 측정됩니다. [PubNub의 fetch\_messages](https://www.pubnub.com/docs/chat/sdks/messages/message-history) 를 사용하면 챗봇이 채팅 기록을 검색하여 모든 상호 작용의 맥락을 추론할 수 있습니다. 이 기능은 사용자가 가치 있고 이해받고 있다고 느낄 수 있도록 개인화되고 일관된 대화를 가능하게 합니다.

PubNub의 [ChatGPT](https://www.pubnub.com/integrations/openai/) 통합으로 사용자 경험이 더욱 향상됩니다. ChatGPT는 딥러닝 알고리즘을 사용하여 쿼리의 맥락을 이해하여 응답을 생성하는 AI 기반 머신러닝 언어 모델입니다. ChatGPT와 PubNub의 실시간 프레임워크의 통합은 즉각적인 응답을 보장하고 대화의 자연스러운 흐름을 유지합니다.

장고와 PubNub은 모두 증가하는 사용자 비율을 수용하면서 높은 트래픽 부하를 처리하는 데 탁월합니다. 장고의 프레임워크와 PubNub의 인프라가 협력하여 개인화, 도메인별 언어 이해, 정확한 응답 생성을 가능하게 합니다. ChatGPT의 응답을 정기적으로 업데이트하고 수정하면 챗봇이 도메인별 언어를 이해하고 사용자 선호도를 명확하고 정확하게 충족할 수 있습니다.

장고 튜토리얼의 PubNub 웹훅 통합
---------------------

이제 PubNub 웹훅을 장고 애플리케이션에 통합할 수 있는 템플릿을 제공하겠습니다.

### 환경 설정하기

기술적인 실행에 들어가기 전에 개발 환경이 정확하게 설정되어 있는지 확인해 보겠습니다.

**필수 종속 요소를 설치합니다:** 첫 번째 단계는 필수 소프트웨어와 라이브러리를 설치하는 것입니다. 백엔드에는 Python과 Django가 필수이며, 각 프로젝트에 필요한 추가 패키지나 플러그인도 설치해야 합니다. 가상 환경을 만들면 종속성을 관리하는 데 도움이 됩니다. PubNub는 크로스 플랫폼으로 Java부터 React까지, REST API부터 JavaScript/Node.js까지 다른 SDK를 지원하지만 이 튜토리얼에서는 Python을 사용합니다.

**장고 프로젝트를 생성합니다:** 필요한 패키지가 모두 설치되면 새 Django 프로젝트를 만듭니다. 이 프로젝트는 챗봇 앱의 핵심 기반이 될 것입니다.

**API 키를 얻습니다:** API 키는 PubNub 및 ChatGPT와 같은 주변 서비스와 상호 작용하는 데 중요합니다. 이러한 플랫폼에 가입하고 계정을 만들어 요청을 인증하는 데 필요한 키를 얻으세요.

### Django 웹훅 엔드포인트 만들기

장고 프로젝트에서 PubNub 이벤트를 수신할 웹훅 엔드포인트를 정의하세요. 이 엔드포인트는 HTTP POST 요청을 처리하고 들어오는 이벤트 페이로드를 처리하도록 구성해야 합니다.

### PubNub 웹후크 구성

PubNub 계정에서 웹훅 설정을 구성하여 관련 이벤트를 Django 웹훅 엔드포인트의 URL로 전송합니다. 채널에 게시되는 새 메시지와 같이 캡처하려는 이벤트를 지정합니다.

### 수신 이벤트 처리하기

장고 웹훅 엔드포인트 보기에서 수신된 이벤트 페이로드에서 필요한 정보를 추출합니다. 여기에는 메시지 콘텐츠, 모든 관련 메타데이터 및 ChatGPT로 처리하는 데 필요한 추가 컨텍스트 구문 분석이 포함됩니다.

```js
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

      
 class PubNubOpenAIView(APIView):


def post(self, request):
        try:
            payload = request.data
            question = payload["event"]["eventPayload"]["message"]
            sender = payload["event"]["senderId"]
            channel = payload["event"]["channel"]

            pubnub_history = get_pubnub_history(channel)
            history_messages = [message.message for message in history.result.channels[channel]]  
            openai_response = get_openai_response(message, history_messages)
            pubnub_response = publish_message(
                channel, openai_response
            )

            if pubnub_response.status.status_code == status.HTTP_200_OK:
                return Response({"status": "success"}, status=status.HTTP_200_OK)
            else:
                return Response(
                    data={"error": "Error while sending back to pubnub"},
                    status=pubnub_response,
                )

        except Exception as pubnub_open_ai_error:
            return Response(
                {"message": pubnub_open_ai_error.args[0]},
                status=status.HTTP_400_BAD_REQUEST,
            )
```

### 컨텍스트 대화 구현하기

PubNub는 특정 채널의 채팅 기록을 검색할 수 있는 fetch\_messages라는 강력한 기능을 제공합니다. 이 기능은 보다 의미 있고 매력적인 상호작용을 만드는 데 중추적인 역할을 하며, 이전 커뮤니케이션을 참조하여 기록을 기억하고 대화를 개인화하는 챗봇의 능력을 보여줍니다.

채팅 기록은 보다 의미 있고 매력적인 상호작용을 만드는 데 중요한 역할을 합니다. 이는 챗봇의 뛰어난 기억력을 보여줌으로써 챗봇의 기억력을 더욱 공고히 해줍니다. 또한 이전 커뮤니케이션을 참조하여 대화를 개인화할 수 있습니다. 이러한 역동적인 접근 방식은 사용자 입장에서 챗봇이 자연스러운 대화를 하고 있다는 인식을 심어줍니다.

이 단계는 챗봇 환경 전체에서 의미 있는 커뮤니케이션을 유지하기 위한 구현 프로세스의 중요한 부분입니다.

다음은 fetch\_messages를 사용하여 문맥 대화를 구현하는 방법에 대한 Python 튜토리얼입니다.

```js
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub


pnconfig = PNConfiguration()

pnconfig.subscribe_key = os.environ["PUBNUB_SUBSCRIBE_KEY"]
pnconfig.publish_key = os.environ["PUBNUB_PUBLISH_KEY"]
pubnub = PubNub(pnconfig)
history_count = 5         
    
 def get_pubnub_history(channel):
    envelope = pubnub.fetch_messages() \
        .channels([channel]) \
        .count(int(history_count)) \
        .include_meta(True) \
        .sync()
    return envelope
```

### 응답 생성을 위해 ChatGPT 활용하기

응답 생성을 위해 추출된 메시지 콘텐츠를 ChatGPT 모델에 전달하세요. ChatGPT의 강력한 기능을 활용하여 입력에 따라 일관되고 문맥에 적합한 응답을 생성하세요.

```js
import openai


def get_openai_response(message: str, history: list):
 """
 This function connects to the OpenAI API and fetches a response for the given user request.
 """
 try:
     messages = []
     messages.extend(history) # adding previous context
     messages.append({"role": "system", "content": message})
     response = openai.ChatCompletion.create(
         model="gpt-3.5-turbo", messages=messages
     )
     return response["choices"][0].message.content

 except Exception as e:
     raise Exception(e)
```

### PubNub을 통해 응답 보내기

응답이 생성되면 PubNub을 사용하여 원하는 채널이나 수신자에게 응답을 다시 전송하여 실시간 전달을 보장합니다.

```js
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub


pnconfig = PNConfiguration()

pnconfig.subscribe_key = os.environ["PUBNUB_SUBSCRIBE_KEY"]
pnconfig.publish_key = os.environ["PUBNUB_PUBLISH_KEY"]
pubnub = PubNub(pnconfig)
         
            
 def publish_message(channel, message):
    """
        This function is used to send a message to PubNub.
        channel: Channel name where the message needs to be sent
        message: message that is to be sent back to user
    """
    response = pubnub.publish().\
        channel(channel).\
        message(message).\
        meta({'from': 'chatbot'}).\
        sync()
    return response
```

웹 개발: 응답을 받으면 PubNub 구독 호출에서 반환된 JSON을 파싱할 수 있는 프론트엔드 HTML/CSS를 만들어야 합니다.

### 도메인별 프롬프트 제공

도메인별 프롬프트로 대화를 개인화하면 챗봇의 기능이 향상됩니다. ChatGPT의 도움으로 도메인별 프롬프트의 도움으로 응답 전략을 세울 수 있습니다. 또한 사용자 생성 메시지에 대한 의존도를 줄일 수 있습니다. 아래 튜토리얼은 도메인 기반 프롬프트의 통합 프로세스와 후속 ChatGPT 실행에 도움이 될 수 있습니다:

#### 프롬프트 준비하기

사용자 메시지를 ChatGPT에 직접 보내는 대신 도메인별 프롬프트를 추가하여 컨텍스트를 설정하여 원하는 결과에 맞는 응답을 유도하세요. 이렇게 하면 도메인별 프롬프트를 기반으로 응답을 구성하고 타겟팅된 응답을 제공하기 위한 ChatGPT에 대한 깊은 이해를 구축하는 데 도움이 됩니다. 몇 가지 예를 살펴보겠습니다:

-   저녁 식사 예약 챗봇의 경우: "안주인: \[사용자 메시지\]"
    
-   고객 지원 시나리오: "지원 상담원: \[사용자 메시지\]"
    
-   호텔 예약 도우미의 경우: "호텔 전문가: \[사용자 메시지\]"
    

#### 맞춤형 응답 생성

도메인 기반 프롬프트를 포함하면 원하는 결과와 완벽하게 일치하는 응답을 생성하도록 ChatGPT에 지시할 수 있습니다. 이 방법은 몰입형 커뮤니케이션을 가능하게 하고 챗봇이 맞춤형 솔루션을 제공할 수 있는 일관된 에코시스템을 만듭니다.

다음은 몇 가지 사례입니다:

-   보험 상담 챗봇은 메시지 앞에 "보험 상담원: \[사용자 메시지\]"를 메시지에 추가하여 보험 관련 문의에 대한 메시지와 관련된 답변을 유지할 수 있습니다.
    
-   영양 코치 챗봇은 "Coach: 코치: \[사용자 메시지\]"를 사용하여 개인화된 식단 조언과 계획을 제공할 수 있습니다.
    

#### 프롬프트 변형 및 실험

도메인별 프롬프트를 활용하면 맥락을 설정할 수 있을 뿐만 아니라 학습과 실험도 가능합니다. 다양한 프롬프트로 쿼리를 반복하여 ChatGPT 응답을 최적화할 수 있습니다. 다음은 실험하는 방법입니다:

-   어조를 조정합니다: 공식적인 환경에서는 "안녕하세요, 도와드리기 위해 왔습니다: \[사용자 메시지\]"를 사용하고, 비공식적인 분위기에서는 "안녕하세요! 얘기 좀 합시다: \[사용자 메시지\]"를 사용할 수 있습니다.
    
-   전문성을 강조하세요: 의료 상담 챗봇의 경우, 업계에서 다루는 응급 상황에 따라 "의사 선생님: \[사용자 메시지\]"로 프롬프트를 시작하여 응답의 권위를 강조할 수 있습니다.
    

도메인 기반 프롬프트를 통합하면 챗봇이 사용자와 효율적으로 상호 작용하고 자연스러운 경험으로 집중적인 지원을 제공할 수 있습니다.

결론
--

장고, PubNub 웹훅, OpenAI의 ChatGPT의 조합은 지능적이고 완전한 대화형 챗봇 앱을 만들기 위한 최고의 툴킷을 제공합니다. 개발자는 디지털 세계와 실제 세계 사이의 격차를 해소하여 커뮤니케이션 자동화에 대한 의존성을 강화할 수 있습니다.

장고는 의미 있는 여러 기능을 갖춘 확장 가능한 챗봇 경험을 위한 강력한 기반을 마련할 수 있는 강력한 웹 애플리케이션 프레임워크를 제공합니다. 한편 PubNub의 실시간 응답 능력은 대화의 흐름을 원활하게 유지하여 사용자에게 자연스럽고 진정한 경험을 제공하는 연속성을 보장합니다. 또한 ChatGPT는 사용자가 깊이 이해받고 있다는 느낌을 주는 상황 중심 응답을 가능하게 합니다.

개발자는 장고의 잠재력, PubNub의 실시간 응답성, ChatGPT의 언어 전문성을 완벽하게 구현하여 독특하고 혁신적인 챗봇 애플리케이션의 형태로 놀라운 결과를 제공할 수 있습니다. 이러한 디지털 인터페이스는 지원, 렌더링 지원, 프롬프트 제안 등 모든 상호작용을 간소화합니다. 이 세 가지 모두 사용자가 AI 기반 대화형 챗봇과 상호작용하는 방식을 완전히 바꿔놓습니다.

PubNub의 [실시간 기능이](https://www.pubnub.com/solutions/data-streaming/) 연결되는 다양한 방법과 앱의 확장성을 강화하는 데 있어 그 중요성에 대해 자세히 알아보세요.

#### 콘텐츠

[챗봇의 중요성이 커지는](#h-0)[이유장고 프레임워크와 PubNub 웹후크장고](#h-1)[튜토리얼에서](#h-2)[PubNub](#h-1)[웹후크](#h-2)[통합환경](#h-3)[](#h-2)[설정하기장고 웹](#h-4)후크[엔드포인트](#h-4)[만들기PubNub 웹](#h-5)후크[구성하기수신 이벤트](#h-6)[처리하기상황별 대화](#h-7)[구현하기응답 생성에 ChatGPT](#h-8)[활용하기PubNub를 통해 응답](#h-9)[보내기](#h-8)[도메인별 프롬프트](#h-10)[제공하기맞춤형](#h-11)[응답 생성프롬프트](#h-12)[변형 및](#h-13)[실험하기결론](#h-14)

PubNub이 어떤 도움을 줄 수 있을까요?
========================

이 문서는 원래 [PubNub.com에](https://www.pubnub.com/blog/implementing-chatgpt-with-pubnub-in-django/) 게시되었습니다.

저희 플랫폼은 개발자가 웹 앱, 모바일 앱 및 IoT 디바이스를 위한 실시간 인터랙티브를 구축, 제공 및 관리할 수 있도록 지원합니다.

저희 플랫폼의 기반은 업계에서 가장 크고 확장성이 뛰어난 실시간 에지 메시징 네트워크입니다. 전 세계 15개 이상의 PoP가 월간 8억 명의 활성 사용자를 지원하고 99.999%의 안정성을 제공하므로 중단, 동시 접속자 수 제한 또는 트래픽 폭증으로 인한 지연 문제를 걱정할 필요가 없습니다.

PubNub 체험하기
-----------

[라이브 투어를](https://www.pubnub.com/tour/introduction/) 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.

설정하기
----

PubNub [계정에](https://admin.pubnub.com/signup/) 가입하여 PubNub 키에 무료로 즉시 액세스하세요.

시작하기
----

사용 사례나 [SDK에](https://www.pubnub.com/docs) 관계없이 [PubNub 문서를](https://www.pubnub.com/docs) 통해 바로 시작하고 실행할 수 있습니다.