본문 바로가기
AI 도구

🔍 Llama-3-Groq 최신 AI 모델로 브라우저 사이드바 웹 검색 구현하기

by James AI Explorer 2024. 7. 23.
    728x90

    안녕하세요! 오늘은 Groq의 최신 오픈소스 대형 언어 모델,  Llama-3-Groq-Tool-Use(이하, Llama-3-Groq)에 대해 알아보겠습니다. Llama-3-Groq 모델은 Groq의 고성능 AI 하드웨어 가속기를 활용하여 빠르고 효율적인 추론을 지원하며, 복잡한 자연어 처리 작업, 수학적 계산, 웹 검색 등의 도구 사용 및 함수 호출 기능에서 탁월한 성능을 자랑합니다. 이 블로그에서는 Llama-3-Groq 모델의 개요, 주요 기능, 벤치마크 결과를 살펴보고, 이 모델을 이용한 인터넷 검색 기능을 네이버 웨일 브라우저의 사이드바에 구현해 보겠습니다.

    Llama-3-Groq-Tool-Use 모델을 이용한 브라우저 사이드바 웹 검색

    https://www.aitimes.com/news/articleView.html?idxno=161746

     

    그로크, AI 에이전트용 오픈 소스 모델 공개…"함수 호출 리더보드서 1위" - AI타임스

    인공지능(AI) 스타트업 그로크가 AI 에이전트의 핵심 구성 요소인 \'API 함수 호출\' 작업에 특화된 경량 AI 모델을 공개했다. 함수 호출 부문 벤치마크에서 오픈AI나 구글, 앤트로픽 등의 첨단 대형

    www.aitimes.com

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

    Llama-3-Groq-Tool-Use 모델

    Llama-3-Groq-Tool-Use 모델은 Llama-3-Groq-70B-Tool-UseLlama-3-Groq-8B-Tool-Use 두 가지 버전으로 제공되며, 특히 도구 사용 및 함수 호출 작업에서 뛰어난 성능을 보입니다. 다음은 이 모델의 주요 특징과 기능입니다.  

    • 오픈 소스: Llama-3-Groq-Tool-Use 모델은 오픈 소스 모델로 제공되어 누구나 사용할 수 있습니다. 이는 연구자와 개발자가 모델을 자유롭게 활용하고 확장할 수 있도록 합니다.
    • 고성능: Llama-3-Groq-70B-Tool-Use 모델은 Berkeley Function Calling Leaderboard (BFCL)에서 1위를 차지하며, 가장 높은 성능을 보이고 있습니다. Llama-3-Groq-8B-Tool-Use 모델 또한 상위권에 위치해 있습니다.
    • 윤리적 데이터 사용: 이 모델들은 윤리적으로 생성된 데이터만을 사용하여 훈련되었으며, 사용자 데이터는 사용되지 않았습니다. 이는 데이터의 안전성과 윤리적 사용을 보장합니다.
    • 라이센스: 이 모델들은 원본 Llama-3 모델과 동일한 관대한 스타일의 라이센스로 제공됩니다.
    • 도구 사용 최적화: Llama-3-Groq-Tool-Use 모델은 함수 호출 및 API 상호작용과 같은 도구 사용 작업에 최적화되어 있습니다. 이는 복잡한 데이터 처리 및 분석 작업을 자동화하는 데 유용합니다.
    • 직접 선호 최적화(Direct Preference Optimization, DPO): 이 모델들은 완전한 미세 조정과 사용자 선호도에 기반해서 성능을 최적화하는 DPO 방식으로 훈련되었으며, 이를 통해 우수한 도구 사용 성능을 달성하였습니다.

    Llama-3-Groq-Tool-Use 모델 소개 웹 사이트

    Llama-3-Groq-Tool-Use 모델과 같이 전문화된 모델과 Llama-3 70B와 같은 범용 언어 모델 중 적합한 모델을 선택해서 연결하는 라우팅 전략을 구현하면, 각 쿼리가 가장 적합한 모델에 의해 처리되므로 AI 시스템의 전체 성능과 능력을 최대화할 수 있으며, Llama-3 Groq 모델의 전문화된 도구 사용 능력을 활용하는 동시에 범용 모델의 유연성과 광범위한 지식 기반을 유지할 수 있습니다.

    • 전문화된 모델: Llama-3-Groq-Tool-Use 모델은 함수 호출과 도구 사용 작업에서 뛰어난 성능을 보이며, 이러한 모델은 특정 기능을 효율적으로 수행하는 데 최적화되어 있습니다.
    • 범용 언어 모델: Llama-3 70B와 같은 범용 언어 모델은 일반 지식, 개방형 대화, 도구 사용과 관련 없는 작업에서 뛰어난 성능을 발휘합니다.

    https://wow.groq.com/introducing-llama-3-groq-tool-use-models/

     

    Introducing Llama-3-Groq-Tool-Use Models - Groq is Fast AI Inference

    We are excited to announce the release of two new open-source models specifically designed for tool use: Llama-3-Groq-70B-Tool-Use

    wow.groq.com

     

    Llama-3-Groq 벤치마크 결과

    Llama-3-Groq-Tool-Use 모델은 함수 호출과 관련된 다양한 인공지능 모델들의 성능을 비교하고 평가하는 Berkeley Function Calling Leaderboard (BFCL) 대부분의 평가지표에서 최고의 성능을 발휘하며 전반적으로 뛰어난 성능을 보여주며, 특히 "JavaScript Simple Function AST", "Multiple Functions AST", "Parallel Functions AST" 및 "REST Simple Function Exec"와 같은 하위 범주에서 특히 우수합니다. Llama 3 Groq 8B Tool Use는 70B 버전보다 성능이 낮지만 여전히 대부분의 범주에서 상당히 좋은 성능을 보여줍니다. 

    위 벤치마크 결과에서 Llama-3-Groq-70B-Tool-Use 모델은 90.76%의 전체 정확도로 BFCL에서 1위를 기록했으며, Llama-3-Groq-8B-Tool-Use 모델은 89.06%의 전체 정확도로 BFCL에서 3위를 기록했습니다. 이 벤치마크 결과는 Llama-3-Groq 모델이 함수 호출 및 도구 사용 작업에서 매우 높은 정확도와 효율성을 제공함을 나타냅니다.

     

    또한 Llama-3-Groq 모델은 LMSYS 방법을 사용하여 오염 분석을 수행한 결과, 훈련에 사용된 합성 데이터의 오염률은 SFT 데이터의 경우 5.6%, DPO 데이터의 경우 1.3%로 매우 낮게 나타났으며, 이는 훈련에 사용된 데이터가 매우 깨끗하고, 특정 데이터에 과적합하지 않음을 의미하므로, 모델은 다양한 실제 상황에서 일관된 성능을 발휘할 수 있습니다.

    728x90

    Llama-3-Groq 활용 인터넷 검색

    다음은 Llama-3-Groq 모델의 함수 호출 기능을 활용해서 인터넷 검색 기능을 만들어보겠습니다. 이 프로그램은 DuckDuckGo 검색 API를 통해 사용자의 질문을 검색하고, Llama-3-Groq-Tool-Use 모델을 사용하여 검색 결과를 처리하는 웹 애플리케이션입니다. 사용자는 Gradio 인터페이스에서 질문을 입력하면, AI가 DuckDuckGo에서 결과를 가져와 상세한 답변을 한국어로 제공합니다. Groq AI의 도구 호출 기능을 활용하여 검색과 응답을 자동으로 처리합니다.

    Llama-3-Groq 기반 DuckDuckGo 검색

    이 블로그의 작업 환경은 Windows 11 Pro(23H2), WSL2, 파이썬 버전 3.11, 비주얼 스튜디오 코드(이하 VSC) 1.90.2이며, VSC를 실행하여 "WSL 연결"을 통해 Windows Subsystem for Linux(WSL) Linux 환경에 액세스 하도록 구성하였습니다. 작업순서는 다음과 같습니다.

    1. 가상환경 생성 및 활성화: VSC 프롬프트 메인 디렉토리에서 다음 명령어를 통해 가상환경을 만들고 활성화합니다.

    python3.11 -m venv myenv
    source myenv/bin/activate

    2. 의존성 설치: 가상환경이 활성화된 상태에서 아래 명령어로 의존성을 설치합니다.

    pip install groq duckduckgo_search gradio
    pip install deep-translator

    가상환경 활성화 및 의존성 설치 화면

    의존성 설치에 포함된 각 라이브러리의 역할은 다음과 같습니다.

    • groq: Groq AI 모델에 접근하고 그 기능을 사용할 수 있도록 해주는 라이브러리입니다.
    • duckduckgo_search: DuckDuckGo 인터넷 검색 엔진의 API를 사용하는 Python 패키지입니다. 이 패키지를 통해 프로그래밍 방식으로 DuckDuckGo 검색을 수행하고, 텍스트 및 이미지 검색과 같은 기능에 접근할 수 있습니다. 사용자로부터 입력된 검색 쿼리를 바탕으로 검색 결과를 쉽게 가져올 수 있어, 웹 애플리케이션 내에서 정보 검색을 수행할 수 있습니다.
    • gradio: 머신러닝 모델 및 데이터 과학 앱을 위한 간단하고 직관적인 웹 인터페이스를 구축하는 라이브러리입니다. Gradio를 사용하면 개발자가 몇 줄의 코드로 사용자와 상호작용하는 웹 애플리케이션을 쉽게 만들 수 있습니다. 다양한 입력 및 출력 형식을 지원하며, 빠른 프로토타이핑과 모델 시연을 가능하게 합니다.

    3. 코드 작성: VSC에서 새 파이썬 파일을 만들고 아래 코드를 복사해서 붙여 넣고 app.py로 저장합니다. 코드의 출처는  https://console.groq.com/docs/tool-use 사이트의 예제를 참고하여 제가 작성하였습니다. 

    import os
    import gradio as gr
    import json
    from groq import Groq
    from deep_translator import GoogleTranslator  # Deep Translator 라이브러리 임포트
    
    # Groq 클라이언트 초기화
    client = Groq()
    MODEL = 'llama3-groq-70b-8192-tool-use-preview'
    
    # DuckDuckGo 검색 함수
    def duckduckgo_search(query: str, max_results: int = 5):
        """Perform a DuckDuckGo search and return results."""
        from duckduckgo_search import DDGS
        params = {
            "keywords": query,
            "max_results": max_results,
        }
        
        results = []
        with DDGS() as ddg:
            for result in ddg.text(**params):
                results.append(str(result))
        
        return results
    
    # 영어 답변을 한국어로 번역하는 함수
    def translate_to_korean(text: str) -> str:
        """Translate English text to Korean using deep-translator."""
        translated = GoogleTranslator(source='en', target='ko').translate(text)
        return translated
    
    # 대화를 실행하는 함수
    def run_conversation(user_prompt: str) -> str:
        messages = [
            {
                "role": "system",
                "content": "You are a DuckDuckGo search assistant. Use the DuckDuckGo search function to provide answers. Please provide a comprehensive answer in English."
            },
            {
                "role": "user",
                "content": user_prompt,
            }
        ]
    
        tools = [
            {
                "type": "function",
                "function": {
                    "name": "duckduckgo_search",
                    "description": "Perform a DuckDuckGo search",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "query": {
                                "type": "string",
                                "description": "The search query to execute.",
                            },
                            "max_results": {
                                "type": "integer",
                                "description": "The maximum number of search results to return.",
                                "default": 5,
                            },
                        },
                        "required": ["query"],
                    },
                },
            }
        ]
    
        response = client.chat.completions.create(
            model=MODEL,
            messages=messages,
            tools=tools,
            tool_choice="auto",  # Automatically choose the tool to use
            max_tokens=4096
        )
    
        response_message = response.choices[0].message
        tool_calls = response_message.tool_calls
    
        if tool_calls:
            available_functions = {
                "duckduckgo_search": lambda query, max_results=5: duckduckgo_search(query, max_results),
            }
    
            for tool_call in tool_calls:
                function_name = tool_call.function.name
                function_to_call = available_functions[function_name]
                function_args = json.loads(tool_call.function.arguments)
                search_results = function_to_call(
                    query=function_args.get("query"),
                    max_results=function_args.get("max_results", 5)
                )
                messages.append(
                    {
                        "tool_call_id": tool_call.id,
                        "role": "tool",
                        "name": function_name,
                        "content": "\n".join(search_results),  # Return search results as a string
                    }
                )
    
        # Send messages with the search results to generate a final response
        second_response = client.chat.completions.create(
            model=MODEL,
            messages=messages
        )
    
        english_answer = second_response.choices[0].message.content
        korean_answer = translate_to_korean(english_answer)  # 영어 답변을 한국어로 번역
    
        return korean_answer  # 번역된 답변 반환
    
    # Gradio 인터페이스 정의
    def process_query(query: str) -> str:
        return run_conversation(query)
    
    iface = gr.Interface(
        fn=process_query,
        inputs=gr.Textbox(label="Search Query"),
        outputs=gr.Textbox(label="Response"),
        title="Llama-3-Groq-Tool-Use 모델을 이용한 DuckDuckGo 인터넷 검색",
        description="질문을 입력하면 Groq AI가 DuckDuckGo 인터넷 검색 Tool을 실행하고 결과를 한국어로 응답합니다."
    )
    
    # 인터페이스 실행
    iface.launch(server_name="127.0.0.1", server_port=7860)

    이 코드는 DuckDuckGo 인터넷 검색 결과를 Llama-3-Groq-70B-Tool-Use 모델을 사용하여 처리하는 웹 애플리케이션을 구현합니다. 각 주요 부분의 동작 과정을 아래와 같이 설명할 수 있습니다. 

    • 모듈 임포트 - os: 운영 체제와 상호작용하기 위한 내장 모듈. - gradio: 머신러닝 모델을 위한 웹 인터페이스를 구축하는 라이브러리. - json: JSON 데이터 형식을 처리하기 위한 라이브러리. - groq: Groq AI 모델과 상호작용하는 클라이언트 라이브러리.
    • Groq 클라이언트 초기화 - `client = Groq()`: Groq AI에 대한 클라이언트를 초기화하며, 사용자가 쿼리를 전달할 준비를 합니다. - `MODEL = 'llama3-groq-70b-8192-tool-use-preview'`: 사용할 Groq 모델의 이름을 저장합니다. 
    • DuckDuckGo 검색 함수 정의 - 이 함수는 DuckDuckGo에서 검색을 수행하며, 사용자가 입력한 `query`를 기준으로 결과를 가져옵니다. 최대 결과 수는 `max_results`로 설정합니다. - 검색 요청: `duckduckgo_search` 함수에서 `DDGS`를 사용해 DuckDuckGo API를 통해 검색 요청을 수행하고, 검색 결과를 리스트 형식으로 반환합니다. 
    • 대화 처리 함수 (run_conversation) - 입력 메시지 구성: `messages` 리스트에 시스템과 사용자 역할의 메시지를 추가합니다. 시스템 메시지에서는 Groq 모델이 DuckDuckGo의 검색 기능을 사용할 것이라고 지시합니다. - 도구 정의: `tools` 리스트에 검색 도구를 정의합니다. 이 도구는 유저가 입력한 쿼리로 DuckDuckGo에서 검색할 수 있게 설정되어 있습니다. - 메시지 및 도구 전송: Groq 모델에 메시지와 도구를 전송하여 검색 요청을 수행합니다. `tool_choice="auto"`는 모델이 어떤 도구를 사용할지 자동으로 선택할 수 있게 합니다. - 도구 호출 처리: Groq의 응답에서 도구 호출이 포함되면, 각각의 도구 호출에 대해 검색 함수를 실행하고, 해당 결과를 메시지로 추가합니다.
    • 최종 응답 생성 - 두 번째 API 호출: 최종적으로 사용자의 요청과 검색 결과를 기반으로 Groq 모델에 다시 요청하여 세부적인 응답을 생성합니다. 이를 통해 사용자 질문에 대한 답변을 도출합니다. 
    • Gradio 인터페이스 구성 - `process_query(query: str)` 함수는 사용자가 입력한 쿼리를 받아 `run_conversation` 함수를 호출하여 결과를 생성합니다. - 마지막으로, Gradio 라이브러리를 사용하여 웹 UI를 정의합니다. 사용자는 쿼리를 입력하고, 그에 대한 응답을 텍스트 상자로 확인할 수 있습니다.
    • 애플리케이션 실행 - `iface.launch()`: Gradio 인터페이스를 실행하여 사용자가 웹에서 입력할 수 있도록 합니다.

    이 코드는 DuckDuckGo에서 검색을 수행하고, Groq AI가 그 결과를 바탕으로 응답을 생성하는 웹 애플리케이션입니다. 사용자는 입력한 쿼리에 대한 검색 결과를 AI를 통해 쉽게 얻을 수 있습니다.

     

    4.  파이썬 코드 실행: 코드 작성이 완료되면 아래와 같이 GROQ API KEY를 설정하고 코드를 실행합니다. 

    export GROQ_API_KEY="발급받은 API KEY"
    python3 app.py

    코드를 실행하면 다음 화면과 같이 http://127.0.0.1:7860/ 주소에서 웹 애플리케이션이 열립니다. 

    Llama-3-Groq-Tool-Use 모델을 이용한 DuckDuckGo 인터넷 검색 초기화면

    5. 웨일 브라우저 사이드바 등록: 브라우저 상에서 언제나 편리하게 사용할 수 있도록 사이드바에 등록합니다. 웨일 브라우저의 오른쪽 툴바에서 맨 하단의 + 버튼을 클릭하고 아래 화면과 같이 http://127.0.0.1:7860/ 를 입력하면 됩니다. 

    웨일 브라우저 사이드바 등록화면
    Llama-3-Groq 모델에게 픽셀 9시리즈 검색을 요청하고 질문하는 화면
    Llama-3-Groq 모델에게 MSI의 IPC 검색을 요청하고 질문하는 화면
    Llama-3-Groq 모델에게 아이폰17 검색을 요청하고 질문하는 화면

    위 화면과 같이 사이드 바에 등록해 놓으면 웹 서핑 중에 바로바로 궁금한 사항을 Llama-3-Groq 모델에게 인터넷 검색을 요청하고, 질문해서 답변을 확인할 수 있습니다. 

     

    맺음말

    오늘은 Groq의 최신 오픈소스 대형 언어 모델인 Llama-3-Groq-Tool-Use에 대해 알아보았습니다. Llama-3-Groq 모델은 Groq의 고성능 AI 하드웨어 가속기를 활용하여 빠르고 효율적인 추론을 지원하며, 다양한 도구 사용 및 함수 호출 작업에서 탁월한 성능을 자랑합니다. Llama-3-Groq-70B-Tool-Use와 Llama-3-Groq-8B-Tool-Use 두 가지 버전으로 제공되는 이 모델은, 오픈 소스로 제공되기 때문에 누구나 자유롭게 사용할 수 있으며, Berkeley Function Calling Leaderboard (BFCL)에서 뛰어난 성능을 보여주는 벤치마크 결과는 이 모델의 우수성을 증명합니다.

     

    블로그에서 소개한 바와 같이, Llama-3-Groq 모델을 활용하여 DuckDuckGo 인터넷 검색 기능을 네이버 웨일 브라우저의 사이드바에 구현하면, 언제든지 손쉽게 검색 기능을 사용할 수 있습니다. 이를 통해 사용자들은 더욱 효율적이고 빠르게 필요한 정보를 얻을 수 있습니다.

     

    여러분도 Llama-3-Groq 모델을 이용한 이 간단한 웹 애플리케이션으로 최신 AI 기술을 체험해 보시면 좋을 것 같습니다. 오늘 블로그는 여기까지입니다. 저는 그럼 다음 시간에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다!

     

    https://fornewchallenge.tistory.com/

     

     

    2024.03.16 - [AI 도구] - 🚀Groq API와 Streamlit으로 만드는 슈퍼 패스트 웹사이트 URL 채팅봇!

     

    🚀Groq API와 Streamlit으로 만드는 슈퍼 패스트 웹사이트 URL 채팅봇!

    안녕하세요! 오늘은 초당 500 토큰 이상의 추론 가속성능을 가진 Groq API와 파이썬 라이브러리 Streamlit을 활용해서 웹사이트 URL입력으로 내용을 빠르게 파악하고 대화하는 웹 페이지를 만들어보겠

    fornewchallenge.tistory.com

     

     

    728x90