본문 바로가기
AI 언어 모델

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

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

    안녕하세요. 오늘은 구글의 대규모 언어 모델 제미나이와 웹에서 대화하는 Gradio 인터페이스 만들기에 도전해 보겠습니다. Gradio는 쉽게 웹 기반 사용자 인터페이스(UI)를 만들 수 있는 라이브러리로, 기계 학습 모델, 데이터 처리 파이프라인, 웹 애플리케이션 등을 빠르게 구축하고 공유할 수 있도록 지원합니다. 이 블로그에서는 제미나이 API Vertex AI, Gradio 라이브러리의 사용법에 대해서 확인하실 수 있습니다. 그럼 시작해 보실까요?

    Gradio 웹 인터페이스 화면

     

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

    가상환경 만들기

    먼저 가상환경을 새로 만들어야 하는데요. 아래 화면과 같이 아나콘다 파워쉘 프롬프트에서 "conda create -n 가상환경 이름" 명령어로 새로운 가상환경을 만듭니다. 

    다음은 아래 화면과 같이 "conda activate 가상환경 이름" 명령어로 가상환경을 활성화해 줍니다.

     

    728x90

    requirements.txt 종속성 설치

    다음은 코드 실행을 위한 종속성 설치 단계입니다. 아래에 텍스트 내용을 복사해서 원하는 폴더에 requirements.txt라는 이름으로 파일을 만든 다음 아나콘다 파워쉘 프롬프트에서 "pip install -r requirements.txt" 명령어로 종속성을 설치해 줍니다. 

    google-generativeai==0.3.2
    gradio==4.12.0
    yahooquery==2.3.7
    yfinance==0.2.33
    vertexai==0.0.1
    google-cloud-aiplatform==1.38.1

    requirements.txt 종속성 설치 화면

    파이썬 코드 실행하기

    다음은 파이썬 코드를 실행하는 단계입니다. 이 코드는 Gradio를 사용하여 Gemini Pro 모델과 주식 가격 정보를 통합한 간단한 챗봇을 구현하는 Python 스크립트입니다. 이 코드는 사용자로부터의 입력을 받아 Gemini Pro 모델 또는 Yahoo Finance API를 통해 주식 가격 정보를 가져와 응답을 생성합니다.

    • 1. 라이브러리 임포트: yahooquery: Yahoo Finance API를 사용하여 주식 정보를 가져오는 데 사용됩니다. gradio: 간단한 UI를 생성하기 위한 Gradio 라이브러리입니다. google.generativeai: Google의 Generative AI 서비스를 사용하기 위한 라이브러리입니다. vertexai: Vertex AI 서비스를 사용하기 위한 라이브러리입니다. os: 운영체제와 상호작용하기 위한 라이브러리입니다.
    • 2. 환경 설정: vertexai.init(): Vertex AI를 초기화하고 프로젝트를 설정합니다. os.environ ["GOOGLE APPLICATION CREDENTIALS"]: Google 클라우드 서비스에 연결하기 위한 자격 증명 파일의 경로를 설정합니다.
    • 3. Gemini Pro 모델 설정: generation_config: Gemini Pro 모델의 생성 구성을 설정합니다. genai.configure(api_key): Gemini Pro 모델에 연결하기 위한 API 키를 설정합니다.
    • 4. 함수 정의: get_stock_price(parameters): 사용자로부터 입력받은 회사 이름에 대한 주식 가격을 가져오는 함수입니다. chat_with_gemini_pro(user_input): 사용자 입력에 따라 주식 가격 조회 또는 Gemini Pro 모델과의 대화를 처리하는 함수입니다.
    • 5. Gradio 인터페이스 생성: gr.Interface: Gradio를 사용하여 간단한 사용자 인터페이스를 생성합니다. 사용자로부터 텍스트 입력을 받아 chat_with_gemini_pro 함수에 전달하고, 그 결과를 텍스트로 출력합니다. examples: 사용자에게 표시되는 예제 메시지를 정의합니다.
    • 6. Gradio 인터페이스 실행: iface.launch(): Gradio 인터페이스를 실행합니다. 사용자는 텍스트 상자에 메시지를 입력하고, 모델 또는 주식 가격 조회에 대한 응답을 확인할 수 있습니다.

    이 스크립트는 간단한 챗봇을 만들기 위한 기본적인 구조를 제공하며, 사용자와의 상호작용을 통해 다양한 질문에 대한 응답을 생성합니다.

     

    아래 코드를 복사하여 geminigradio.py 이름으로 저장하고 가상환경이 활성화된 아나콘다 파워쉘 프롬프트에서 "python geminigradio.py"  명령으로 코드를 실행합니다. 단, 프로젝트 id, adc.json 파일경로, 제미나이 API Key는 아래에 이전 블로그를 참고하여 본인의 것으로 입력합니다. 

    2023.12.23 - [분류 전체보기] - 제미나이 API로 실시간 주식정보 가져오기 : 초보 탈출?

     

    제미나이 API로 실시간 주식정보 가져오기 : 초보 탈출?

    안녕하세요. 오늘은 구글 제미나이 API와 함수 호출기능을 활용해서 실시간 주식정보를 가져오는 프로젝트에 도전해 보겠습니다. 제미나이는 실시간 주식정보를 대답할 수 있는 기능이 없지만,

    fornewchallenge.tistory.com

    import yahooquery as yq
    import gradio as gr
    import google.generativeai as genai
    import vertexai
    import os
    
    from vertexai.preview.generative_models import GenerativeModel
    
    vertexai.init(project="프로젝트 id")
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = r"C:\Users...내 컴퓨터 경로...gmail.com\adc.json"
    
    # Set up Gemini Pro model
    generation_config = {
        "temperature": 0.9,
        "top_p": 1,
        "top_k": 1,
        "max_output_tokens": 2048,
    }
    
    # Set your Gemini API key here
    genai.configure(api_key="발급받은 API Key")
    
    # Function to Get Stock Price
    def get_stock_price(parameters):
        company_name = parameters["ticker"]
        
        # Use yahooquery to get the stock information based on the company name
        try:
            data = yq.search(company_name)
            ticker = data['quotes'][0]['symbol']
            
            stock = yq.Ticker(ticker)
            hist = stock.history(start='2023-01-01', end='2023-12-31', interval='1d')
            
            if not hist.empty:
                return {"response": f"The stock price of {company_name} is {hist['close'].iloc[-1]} USD."}
            else:
                return {"response": f"Unable to fetch the stock price for {company_name}."}
        except Exception as e:
            return {"response": f"Error: {str(e)}"}
    
    # Function to interact with Gemini Pro
    def chat_with_gemini_pro(user_input):
        if "stock price" in user_input.lower():
            # If the user's input contains "stock price", extract the company name
            company_name = user_input.split("stock price of")[1].strip()
            parameters = {"ticker": company_name}  # Set the company name as the ticker symbol
            response = get_stock_price(parameters)
        else:
            # If the user's input doesn't contain "stock price", use the Gemini Pro model
            # Create GenerativeModel
            model = GenerativeModel("gemini-pro", generation_config=generation_config)
            # Start a chat session
            function_calling_chat = model.start_chat()
            # Send the user's input as a prompt to the chat
            response = function_calling_chat.send_message(user_input)
            # Extract the response text
            response_text = response.text if response else ""
            response = {"response": response_text}
    
        return response["response"]
    
    # Create Gradio interface
    iface = gr.Interface(
        fn=chat_with_gemini_pro,
        inputs=gr.Textbox(label="Enter Your Message"),
        outputs=gr.Textbox(label="Chatbot Response"),
        title="Gemini Pro Chatbot",
        description="Interact with the Gemini Pro model via this chatbot. Enter a message and get a response.",
        examples=["Tell me a joke.", "Tell me how to ski.", "What is the stock price of Apple?", "What is the stock price of Microsoft?"],
        allow_flagging="never"
    )
    
    # Launch the Gradio interface
    iface.launch()

     

     

     

     

     

     

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

    파이썬 코드 실행 화면

    현재 한국어는 지원하지 않으며, 사용자의 질문에서 "stock price" 단어를 인식하면 yfinance 라이브러리를 불러와서 주식 가격을 표시합니다. 주식정보가 아닌 그 외의 질문은 제미나이의 응답을 표시합니다.

    Gradio 웹 인터페이스 화면 - 주식 가격 질문
    Gradio 웹 인터페이스 화면 - 스키타는 방법 질문
    https://fornewchallenge.tistory.com/

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

    마치며

    이번 블로그 포스트에서는 Google의 대규모 언어 모델인 제미나이와 Gradio를 사용하여 간단한 챗봇을 만드는 방법을 다루었습니다. Gradio는 쉽게 웹 기반 사용자 인터페이스(UI)를 만들 수 있는 라이브러리로, 기계 학습 모델이나 데이터 처리 파이프라인 등을 빠르게 구축하고 공유할 수 있도록 지원합니다.

     

    먼저, 프로젝트를 시작하기 위해 가상 환경을 설정하고 필요한 종속성을 설치한 후, Gradio를 사용하여 사용자의 입력에 따라 제미나이 모델이나 Yahoo Finance API를 통해 주식 가격 정보를 가져오는 간단한 챗봇을 구현했습니다. 코드 실행을 위한 단계들을 자세하게 안내하였으며, 각 부분에 대한 설명을 통해 코드의 동작 방식을 이해할 수 있도록 하였습니다. 마지막으로, Gradio를 통해 만들어진 웹 인터페이스를 통해 사용자가 모델과 상호작용할 수 있도록 하였습니다.

     

    이렇게 함으로써, 제미나이와 Gradio를 활용하여 실제로 동작하는 간단한 챗봇을 만들어보았습니다. 다양한 질문에 대한 응답을 생성하고 주식 가격 정보를 가져와 제공하는 이 프로젝트를 통해 머신러닝 모델과 웹 인터페이스를 함께 다루는 기초적인 방법에 대해 배워보았습니다. 이제 여러분도 Gradio와 제미나이를 이용하여 자신만의 프로젝트를 구현해 보실 수 있습니다. 그럼 저는 다음에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

    2023.12.23 - [분류 전체보기] - 제미나이 API로 실시간 주식정보 가져오기 : 초보 탈출?

     

    제미나이 API로 실시간 주식정보 가져오기 : 초보 탈출?

    안녕하세요. 오늘은 구글 제미나이 API와 함수 호출기능을 활용해서 실시간 주식정보를 가져오는 프로젝트에 도전해 보겠습니다. 제미나이는 실시간 주식정보를 대답할 수 있는 기능이 없지만,

    fornewchallenge.tistory.com

     

     

    728x90