본문 바로가기
AI 언어 모델

LiteLLM으로 Mistral 7B와 대화하는 웹 챗봇 만들기

by James AI Explorer 2023. 12. 28.
    728x90

    안녕하세요! 오늘은 저번 시간 살펴본 제미나이 웹 챗봇에 이어서 Gradio 웹 인터페이스 2편으로  LiteLLM이라는 도구를 이용해서 허깅페이스의 인기 모델인 Mistral 7B와 대화하는 웹 챗봇 만들기에 도전해 보겠습니다. LiteLLM은 다양한 허깅페이스 모델을 손쉽게 활용할 수 있게 해주는 파이썬 라이브러리입니다. 이 블로그에서는 LiteLLM과 허깅페이스 API를 활용하여 Mistral 7B 웹 챗봇을 만드는 방법에 대해 살펴보겠습니다. 그럼 함께 시작하실까요?

    LiteLLM으로 Mistral 7B와 대화하는 웹 챗봇 만들기

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    가상환경 만들기

    먼저 아나콘다 파워쉘 프롬프트에서 "conda create -n 가상환경 이름 python=3.11" 명령어로 새로운 가상환경을 만듭니다. 저는 가상환경 이름을 litellm으로 정하였습니다. 

    litellm 가상환경 만들기

    다음은 아래 화면과 같이 "conda activate litellm" 명령어로 가상환경을 활성화한 다음, (litellm) 프롬프트를 확인합니다.

    가상환경 활성화

    728x90

    LiteLLM 및 종속성 설치

    다음은 코드 실행을 위한 LiteLLM 및 종속성 설치 단계입니다. 아래에 텍스트 내용을 복사해서 원하는 폴더에 requirements.txt라는 이름으로 파일을 만든 다음 가상환경이 활성화된 아나콘다 파워쉘 프롬프트에서 "pip install -r requirements.txt" 명령어로 종속성을 설치해 줍니다. 각 라이브러리에 대한 설명은 다음과 같습니다. 

     

    Gradio는 제미나이 웹 챗봇에서 사용했던 라이브러리로, 파이썬에서 웹 기반의 대화형 인터페이스를 개발할 때 유용한 라이브러리입니다. Sniffio는 비동기 입출력을 처리하기 위한 도우미 라이브러리입니다. 네트워크 통신이나 파일 입출력과 같은 비동기 작업을 간편하게 처리할 수 있도록 도와줍니다. H11은 HTTP/1.1 프로토콜을 구현하기 위한 라이브러리입니다. HTTP 클라이언트와 서버 모두에서 사용할 수 있으며, 요청과 응답의 파싱 및 생성을 처리하는 기능을 제공합니다. 

     

    다음 단계인 코드 실행단계에서 개인 컴퓨터 환경에 따라 requirements.txt에 없는 라이브러리 중에 특정 모듈을 찾을 수 없다는 메시지가 나오면, 추가적으로 "pip install 모듈명" 명령으로 설치할 수 있습니다.

    gradio==4.12.0
    sniffio>=1.3.0
    h11>=0.14.0
    litellm==1.15.10

    LiteLLM 및 종속성 설치 화면

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    파이썬 코드 실행하기

    다음은 파이썬 코드를 실행하는 단계입니다. 이 코드는 Gradio와 LiteLLM 라이브러리를 사용하여 Mistral-7B 언어 모델과 상호 작용할 수 있는 웹 기반 채팅 인터페이스를 만들어 사용자가 질문을 하고 즉각적인 응답을 받을 수 있도록 합니다.

    • 1. 라이브러리 임포트:  `gradio`, `os`, `webbrowser`, `litellm` 라이브러리를 import 합니다. gradio: 간단한 UI를 생성하기 위한 Gradio 라이브러리입니다.  os: 운영체제와 상호작용하기 위한 라이브러리입니다. webbrowser: 새 브라우저 탭을 열기 위해 사용됩니다.  Sniffio는 네트워크 통신이나 파일 입출력과 같은 비동기 작업을 간편하게 처리하기 위한 도우미 라이브러리입니다. H11은 HTTP/1.1 프로토콜을 구현하기 위한 라이브러리입니다.
    • 2. 환경 설정: Hugging Face API 키를 환경 변수로 설정합니다. 이는 Hugging Face 모델 API에 대한 요청을 인증하는 데 사용됩니다. os.environ은 환경 변수에 접근하는 파이썬의 기본 모듈인 os의 environ 속성을 의미합니다. 환경 변수는 운영 체제에서 제공하는 변수로, 시스템 전역에서 사용할 수 있습니다.
    • 3. 함수 정의: generate_response라는 함수를 정의합니다. 이 함수는 사용자의 질문을 입력으로 받아서, litellm의 completion 함수를 호출하여 Mistral 7B 모델을 사용하여 응답을 생성합니다. messages 리스트에는 사용자의 질문을 포함하고, completion 함수는 이 메시지들을 모델에 전달하여 응답을 생성합니다. 그리고 응답 내용을 추출하여 반환합니다. 
    • 4. Gradio 인터페이스 생성: gr.Interface를 사용하여 Gradio 인터페이스를 생성합니다. generate_response 함수를 호출하고, 입력으로는 gr.Textbox를 사용하여 "Enter Your Message"라벨이 있는 텍스트 상자를 생성하고, 출력으로는 "Chatbot Response"라벨이 있는 텍스트 상자를 생성합니다. 또한, 인터페이스의 제목과 설명을 설정하고, 예제 질문들을 제공합니다. allow_flagging은 사용자가 응답을 신고할 수 있는지 설정하는 옵션입니다. 
    • 5. 웹 브라우저 실행: webbrowser.open_new_tab을 사용하여 인터페이스를 새 브라우저 탭에서 엽니다. 
    • 6. Gradio 인터페이스 실행: iface.launch(): Gradio 인터페이스를 실행합니다. 사용자는 텍스트 상자에 메시지를 입력하고, 응답을 확인할 수 있습니다.

    이 스크립트는 간단한 챗봇을 만들기 위한 기본적인 구조를 제공하며, 사용자와의 상호작용을 통해 다양한 질문에 대한 응답을 생성합니다. 허깅페이스 API Key는 우측 상단 프로필 아이콘을 클릭해서 Settings를 선택한 후, 좌측 메뉴에서 Access Tokens를 클릭하면 New Token 버튼을 통해 발급가능 합니다. 

    허깅페이스 API Key 발급 화면

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    아래 코드를 복사하여 litellmhugging.py 이름으로 저장하고 가상환경이 활성화된 아나콘다 파워쉘 프롬프트에서 "python litellmhugging .py"  명령으로 코드를 실행합니다. 

    import gradio as gr
    import os
    import webbrowser
    from litellm import completion
    
    # [OPTIONAL] set env var
    os.environ["HUGGINGFACE_API_KEY"] = "허깅페이스 API Key"
    
    def generate_response(question):
        messages = [
            {"role": "user", "content": question}
        ]
    
        # Call the completion function
        response = completion(
            model="huggingface/mistralai/Mistral-7B-Instruct-v0.1",
            messages=messages,
            api_base="https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.1",
            max_tokens=1000
        )
    
        # Extract the response content
        response_content = response.choices[0].message.content
    
        return response_content
    
    # Create a Gradio interface
    iface = gr.Interface(
        fn=generate_response,
        inputs=gr.Textbox(label="Enter Your Message"),
        outputs=gr.Textbox(label="Chatbot Response"),
        title="Mistral 7B와의 채팅에 오신걸 환영합니다.",
        description="Ask any question and get instant responses!",
        examples=["Tell me who you are.", "Tell me how to ski."],
        allow_flagging="never"
    )
    
    # Launch the interface in a new browser tab
    webbrowser.open_new_tab('http://127.0.0.1:7860')
    
    # Run the interface
    iface.launch()

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    코드를 실행하면 자동으로 브라우저가 실행되면서 http://127.0.0.1:7860 주소로 접속되고 Gradio 웹 인터페이스가 열립니다. 종료 시에는 아나콘다 파워쉘 프롬프트에서 Ctrl+C 를 누르면 웹 인터페이스가 종료됩니다. 

    파이썬 코드 실행 화면
    Mistral 7B와 대화하는 웹 챗봇 화면

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    마치며

    이 블로그에서는 Gradio와 LiteLLM 라이브러리를 사용하여 Hugging Face의 Mistral 7B 모델과 상호 작용하는 웹 챗봇을 만드는 방법을 살펴보았습니다. 블로그에서 제공한 코드는 사용자가 질문을 입력하면 Mistral 7B 모델이 해당 질문에 대한 응답을 생성하고, Gradio를 통해 이를 사용자에게 보여주는 간단한 챗봇을 만드는 기본 구조를 제시합니다.

     

    작업내용을 정리하면 다음과 같습니다.  

    1. 가상환경 설정: 먼저, litellm이라는 가상환경을 생성하고 활성화합니다.

    2. 라이브러리 설치: Gradio, Sniffio, H11, LiteLLM 등의 필요한 라이브러리를 설치합니다.

    3. 허깅페이스 API Key 설정: Hugging Face API Key를 설정하여 모델에 접근할 수 있도록 합니다.

    4. 코드 실행: Gradio와 LiteLLM을 사용하여 챗봇을 만드는 파이썬 코드를 실행합니다.

    5. 인터페이스 확인: http://127.0.0.1:7860 주소로 접속하여 Gradio 웹 인터페이스를 확인합니다. 코드 실행 후, 사용자는 텍스트 상자에 질문을 입력하면 모델이 해당 질문에 대한 응답을 생성하여 보여줍니다.

     

    이 블로그를 통해서 허깅페이스 언어모델을 활용하여 자연어 처리 작업을 수행할 때, 허깅페이스 API와 Gradio, LiteLLM을 사용하는 방법을 참고하시면 좋을것 같습니다. 그럼 저는 다음에 더 유익한 정보로 다시 찾아뵙겠습니다. 감사합니다.

     

     

    2023.12.26 - [대규모 언어모델] - 제미나이 웹 챗봇 만들기 : 주식 정보 검색도 쌉가능

     

    제미나이 웹 챗봇 만들기 : 주식 정보 검색도 쌉가능

    안녕하세요. 오늘은 구글의 대규모 언어 모델 제미나이와 웹에서 대화하는 Gradio 인터페이스 만들기에 도전해 보겠습니다. Gradio는 쉽게 웹 기반 사용자 인터페이스(UI)를 만들 수 있는 라이브러

    fornewchallenge.tistory.com

     

     

    728x90