본문 바로가기
AI 언어 모델

허깅페이스 1위 Solar 10.7B와 Autogen으로 대화하기 : feat. Mistral 7B

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

    안녕하세요! 오늘은 허깅페이스의 오픈소스 LLM 리더보드에서 당당하게 1위를 차지하고 있는 우리나라 스타트업 "업스테이지"의 대규모 언어 모델 "Solar"와 대화를 해보겠습니다. 이번 프로젝트는 AutoGen이라는 프레임워크를 사용하여 Mistral 7B가 중계자 역할, Solar가 어시스턴트 역할을 담당해서 언어 모델 간에 서로 대화하며 자동화된 작업을 수행하도록 구현합니다. 여기서 다루게 될 대규모 언어 모델 관련 도구들은 다음과 같습니다.

    • Autogen: LLM 애플리케이션을 개발하기 위한 프레임워크로서, 여러 에이전트들이 서로 대화하여 자동화된 작업을 해결할 수 있는 환경을 제공합니다.
    • LiteLLM: 다양한 대규모 언어 모델을 손쉽게 활용할 수 있게 해주는 파이썬 라이브러리입니다.
    • LM Studio: 로컬 환경에서 대규모 언어 모델을 오프라인으로 실행하고 관리할 수 있는 플랫폼입니다.
    • Ollama: 대규모 언어 모델을 웹 애플리케이션에서 손쉽게 활용할 수 있도록 도와주는 도구입니다.

    이 포스트를 통해서 Solar와 Mistral 7B의 자동화된 협업을 위한 Autogen 프레임워크, LiteLLM, LM Studio, Ollama와 같은 대규모 언어 모델 관련 도구의 활용법에 대해서 확인하실 수 있습니다. 그럼 시작해 볼까요?

    허깅페이스 1위 Solar 10.7B
    허깅페이스 1위 Solar와 Autogen으로 대화하기 : feat. Mistral 7B

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

     

    업스테이지 '솔라', 글로벌 LLM 리더보드 1~10위 싹쓸이 - AI타임스

    업스테이지(대표 김성훈)의 소형언어모델(sLM) \'솔라(Solar)\'가 글로벌 오픈 소스 LLM 성능 평가 순위에서 1~10위를 싹쓸이하는 기염을 토했다. 29일 현재 허깅페이스의 오픈 LLM 리더보드 순위에 따

    www.aitimes.com

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

    프로젝트 개요

    이번 프로젝트의 명칭은 "Autogen Solar"이며, 개요와 동작순서는 다음과 같습니다.

    • 1. 사용자는 User-Proxy-Agent (중계자)에게 작업 명령을 내립니다. 
    • 2. User-Proxy-Agent는 사용자의 명령을 받아서 Assistant-Agent (어시스턴트)에게 전달합니다. 
    • 3. Assistant-Agent는 사용자의 명령을 수행하고, 결과를 User-Proxy-Agent에게 전달합니다. 
    • 4. 작업 명령이 완료되면 User-Proxy-Agent는 프로그램을 종료합니다. 

    이 프로젝트에서 User-Proxy-Agent역할은 Mistral 언어 모델이 담당하여, 사용자와 상호작용하고 작업을 지휘하는 기능을 하며, Assistant-Agent역할은 Solar 언어 모델이 담당하여, 실질적인 사용자의 요청이나 작업을 수행합니다. 

    구분 Mistral 7B Solar 10.7B
    역할 중계자, User-Proxy-Agent 어시스턴트, Assistant-Agent
    구동환경 WSL(Windows Subsystem for Linux) 환경에서 Ollama를 통해 구동 윈도우에서 LM Studio를 통해 구동 

     

    직접 언어모델에게 대화하지 않고 Autogen의 User-Proxy-Agent(중계자)를 통해 지시하는 이유는 다음과 같습니다. 

    • 전략적인 작업 분배: User-Proxy-Agent를 사용하여 사용자의 명령을 받으면 이 명령을 실행하기 위한 적절한 Agent 또는 서비스에 전달할 수 있습니다. 이를 통해 에이전트들이 각자의 역할에 특화된 작업을 담당할 수 있습니다.
    • 대화 흐름 유지: User-Proxy-Agent를 통해 대화 흐름을 유지하면서 계속해서 다양한 작업을 수행할 수 있습니다.
    • 사용자와의 자연스러운 상호작용: 사용자 중심의 대화 스타일을 모방하여 보다 자연스러운 대화 경험을 제공합니다.
    • 피드백과 수정 요청 수용: 사용자의 피드백과 수정 요청을 수용하면서 시스템이 유연하게 작업을 조정할 수 있습니다. 

    User-Proxy-Agent를 통해 작업을 지시하는 경우는 사용자 중심의 대화를 중요시하고, 유연성과 상호작용을 강조할 때 유용합니다. 자동화된 작업의 한계와 일관성 부족 등의 단점도 있으므로, 특정한 작업이나 목표를 수행하는 모델이 명확하게 정의되어 있고, 사용자와의 상호작용이 적은 경우에는 직접 작업을 지시하는 것이 효과적일 수 있습니다. 

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

    Autogen, LM Studio, LiteLLM, Ollama설치

    Autogen 설치

    먼저 Autogen을 설치하는 단계입니다. Autogen은 User-Proxy-Agent(중계자)를 통해 에이전트들이 서로 대화하여 사용자가 요청한 자동화 작업을 해결할 수 있는 환경을 제공하는 프레임워크입니다. 아나콘다 파워쉘 프롬프트에서 "conda create -n 가상환경 이름 python=3.11" 명령어로 가상환경을 만들고 "conda activate 가상환경 이름" 명령어로 활성화한 다음, 링크를 참고하여  "pip install pyautogen" 명령어를 통해 Autogen을 설치합니다. 단, 여기서 가상환경 이름을 "autogen"으로 하면 코드 실행 시 에러가 발생하므로 다른 이름으로 설정합니다. 

     

    https://microsoft.github.io/autogen/docs/Getting-Started/

     

    Getting Started | AutoGen

    AutoGen is a framework that enables development of LLM applications using multiple agents that can converse with each other to solve tasks. AutoGen agents are customizable, conversable, and seamlessly allow human participation. They can operate in various

    microsoft.github.io

    LM Studio 설치

    다음은 LM Studio 설치단계입니다. 아래 링크를 통해 간단하게 LM Studio를 설치하실 수 있습니다. 설치가 완료되면, 좌측 메뉴에서 돋보기 모양을 클릭한 후, 검색 창에 Solar를 입력하고 호환 가능한 모델을 다운로드합니다. 저는 "solar-10.7b-instruct-v1.0.Q3_K_M.gguf" 모델이 용량대비 성능이 좋은 것 같습니다. 각자 컴퓨터 성능에 따라 고성능의 양자화 모델을 선택해서 다운로드하실 수 있습니다. LM Studio는 대규모 언어 모델 Solar를 다운로드하고, 로컬 웹 서버 환경과 API를 제공하는 역할을 합니다.

    https://lmstudio.ai/

     

    👾 LM Studio - Discover and run local LLMs

    Find, download, and experiment with local LLMs

    lmstudio.ai

    LM Studio에서 Solar 다운로드 화면

    LiteLLM 설치

    다음은 LiteLLM 설치단계입니다. Autogen의 User-Proxy-Agent(중계자) 기능을 사용하기 위해서는 LiteLLM 설치 링크를 참고하여 WSL 프롬프트에서 "pip install litellm[proxy]" 명령으로 설치하면 됩니다. LiteLLM은 WSL환경에서 Ollama로 구동되는 대규모 언어 모델 Mistral 7B의 Python 웹 서버 환경을 구현하는 역할을 합니다. Ollama가 정식으로 윈도우 운영체제를 지원하지 않기 때문에 로컬 웹 서버 환경과 API 제공을 LiteLLM이 담당하도록 합니다. 

    https://litellm.vercel.app/docs/proxy_server  

     

    [OLD PROXY 👉 [**NEW** proxy here](./simple_proxy)] Local OpenAI Proxy Server | liteLLM

    A fast, and lightweight OpenAI-compatible server to call 100+ LLM APIs.

    litellm.vercel.app

    Ollama 설치

    Ollama를 설치하는 방법은 WSL(Windows Subsystem for Linux)을 설치한 후, WSL 실행 프롬프트 또는 관리자 권한 명령어 프롬프트에서 “wsl --user root -d ubuntu”를 입력한 후,  "curl https://ollama.ai/install.sh | sh"를 입력해서 설치합니다. 여기서 Ollama는 Mistral 7B 언어 모델이 중계자 역할을 수행하도록 LiteLLM에게 엔드포인트를 제공합니다. 자세한 내용은 이전 포스트 내용을 참고하시면 될 것 같습니다.  

    2023.12.15 - [대규모 언어모델] - Ollama를 활용한 대규모 언어 모델 웹 인터페이스 만들기: Mistral 7B와의 대화

     

    Ollama를 활용한 대규모 언어 모델 웹 인터페이스 만들기: Mistral 7B와의 대화

    안녕하세요. 오늘은 내 컴퓨터에서 웹 인터페이스로 최신 언어모델과 대화하는 프로젝트에 도전해 보겠습니다. 이 블로그에서는 Ollama라는 오픈소스 도구를 이용해서 최신 인기 대규모 언어모

    fornewchallenge.tistory.com

    이제 대규모 언어 모델을 Autogen으로 실행하기 위한 라이브러리와 플랫폼, 프레임워크의 설치를 완료하였습니다. 

     

    에이전트 웹 서비스 실행

    다음은 Mistral 7B과 Solar 10.7B 언어모델이 에이전트 역할을 할 수 있도록 웹 서비스를 실행하는 단계입니다. 아래 표에서 보듯이 Mistral 7B는 LiteLLM의 http://localhost:8000를 통해서, Solar는 LM Studio의 http://localhost:1234/v1를 통해서 각각, User-Proxy-Agent역할과 Assistant-Agent역할을 수행하게 됩니다. 

    구분 Mistral 7B Solar 10.7B
    역할 중계자, User-Proxy-Agent 어시스턴트, Assistant-Agent
    웹 서비스 LiteLLM, http://localhost:8000 LM Studio, http://localhost:1234/v1

    Mistral 7B 웹 서비스 실행

    Mistral 7B 웹 서비스는 WSL 프롬프트 상태에서 "litellm --model ollama/mistral" 명령으로 아래 화면과 같이 실행합니다. 명령을 실행하게 되면 http://localhost:8000 주소에서 API가 연동됩니다. 

    Mistral 7B 웹 서비스 실행

    LiteLLM을 통한 웹 서비스 실행 후 http://localhost:8000/ 주소로 접속하면 아래 화면과 같이 정상적으로 서비스가 실행된 것을 확인할 수 있습니다. 

    LiteLLM 웹 서비스 API 화면 http://localhost:8000/

    Solar 10.7B 웹 서비스 실행

    Solar 10.7B 웹 서비스는 LM Studio 좌측 메뉴에서 양방향 화살표를 클릭한 후 Start Server 버튼을 클릭하면 실행됩니다.  명령을 실행하게 되면 http://localhost:1234/v1 주소에서 API가 연동됩니다. 

    Solar 10.7B 웹 서비스 실행

    728x90

     

    파이썬 코드 실행

    Mistral 7B과 Solar 10.7B 에이전트를 위한 웹 서비스가 모두 실행되고 나면, 다음 파이썬 코드를 가상환경이 활성화된 상태에서 실행합니다. 이 코드는 Autogen 프레임워크를 사용하여 Mistral 7B과 Solar 10.7B 언어 모델 간의 자동 생성 대화 기능을 구현하는 예시입니다.

    파이썬 코드 실행 화면

    • 1. 라이브러리 임포트 :`autogen` 모듈을 가져옵니다. 이 모듈은 대화 기능을 자동으로 생성하고 관리하는 데 사용됩니다.
    • 2. 설정 목록 생성 : `config_list_1`과 `config_list_2`라는 두 개의 설정 목록을 만듭니다. 이 설정 목록에는 각각 Solar_ assistant와 Ollama/mistral_user_proxy에 대한 정보가 포함되어 있습니다. 각 설정 목록은 `base_url`과 `api_key`라는 키-값 쌍으로 구성되어 있습니다.
    • 3. 변수 생성 :  `llm_config_1`과 `llm_config_2`라는 두 개의 설정 변수를 만듭니다. 이 변수는 설정 목록을 각각 Solar와 Ollama/mistral에 대한 앞에서 생성한 설정 목록 정보와 함께 저장합니다.
    • 4. 에이전트 생성 : `AssistantAgent`와 `UserProxyAgent`를 생성합니다. `AssistantAgent`는 Solar라는 이름의 대화 상대로 설정 목록 1을 사용하여 생성됩니다. `UserProxyAgent`는 Ollama/mistral_user_proxy라는 이름의 대화 상대로 설정 목록 2를 사용하여 생성됩니다. 이 두 개의 에이전트는 자동 응답 및 사용자 입력을 처리하는 데 사용됩니다.
    • 5. 사용자 질문 생성 : `task`라는 변수에 "Tell me how to ski."라는 대화 작업을 저장합니다.
    • 6. 대화 시작 메서드 호출 : `user_proxy.initiate_chat()` 메서드를 호출하여 Ollama/mistral_user_proxy 에이전트와 Solar_Assistant 에이전트에게 대화 작업을 시작하도록 합니다.

    이 코드는 AutoGen 라이브러리를 사용하여 Assistant-Agent와 User-Proxy-Agent 간에 대화 기반 작업을 시뮬레이션하는 Python 스크립트입니다. 각 에이전트는 다른 서버 또는 엔드포인트에서 동작하는 Large Language Models (LLMs)에 연결될 수 있습니다. 코드의 동작순서는 다음과 같습니다. 

    • 1. 사용자는 User-Proxy-Agent (Mistral)에게 "Tell me how to ski."라는 작업 명령을 내립니다. 
    • 2. User-Proxy-Agent (Mistral)는 사용자의 명령을 받아서 Assistant-Agent (Solar)에게 전달합니다. 
    • 3. Assistant-Agent (Solar)는 사용자의 명령을 수행하고, 결과를 User-Proxy-Agent (Mistral)에게 전달합니다. 
    • 4. 작업 명령이 완료되면 User-Proxy-Agent (Mistral)는 프로그램을 종료합니다. 
    import autogen
    
    config_list_1 = [  #assistant : Solar
    {
    'base_url': "http://localhost:1234/v1", #lmstudio 
    'api_key': "NULL",
    }
    ]
    
    config_list_2 = [  #user_proxy : ollama/mistral
    {
    'base_url': "http://localhost:8000", #litellm 
    'api_key': "NULL",
    }
    ]
    
    llm_config_1={
    "config_list": config_list_1,
    }
    
    llm_config_2={
    "config_list": config_list_2,
    }
    
    assistant = autogen.AssistantAgent(
    name="Solar",
    llm_config=llm_config_1
    )
    
    user_proxy = autogen.UserProxyAgent(
    name="Ollama/mistral_user_proxy",
    human_input_mode="TERMINATE",
    max_consecutive_auto_reply=10,
    is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
    code_execution_config={"work_dir": "web"},
    llm_config=llm_config_2,
    system_message="""Reply TERMINATE if the task has been solved at full satisfaction.
    Otherwise, reply CONTINUE, or the reason why the task is not solved yet."""
    )
    
    task="""
    Tell me how to ski.
    """
    
    user_proxy.initiate_chat(assistant, message=task)

    LM Studio 웹서버에서 확인한 Solar 10.7B 가 응답하는 모습
    Solar 10.7B 답변내용을 전달하는 Mistral 7B의 모습

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

    Solar 10.7B 모델은 허깅페이스 언어모델 1위 답게 "스키 타는 법 알려줘"라는 질문에 대해, 사용자 지역 근처의 스키장비대여소와 스키 리조트 같은 물어보지 않은 정보도 알아서 척척 알려주었습니다. 다음은 Solar의 대답입니다.  

     

    Solar (to Ollama/mistral_user_proxy): 먼저 스포츠로서의 스키에 대한 정보를 수집하고 몇 가지 기본적인 가이드라인을 제시하겠습니다. 학습을 시작하기 위해서는 적절한 장비와 안전하게 연습할 수 있는 환경에 접근하는 것이 중요합니다. 근처에 이용 가능한 스키 리조트가 있다고 가정해 봅시다. 다음과 같은 몇 가지 단계를 수행할 수 있습니다:

    • 1. 스키, 부츠, 폴, 그리고 안전 장비(헬멧)와 같은 적절한 장비를 갖추세요. 여러분의 위치 근처에 있는 최고의 대여 장소 또는 상점에 대한 정보를 찾기 위해 웹 검색을 위한 해시 코드 블록을 사용하세요: '''sh echo "당신 근처에 있는 스키 대여 장소를 검색하는 중..." wget --quiet -O- https://www.google.com/search?q=ski+rental+locations+near+me ```
    • 2. 필요하다면, 레슨을 예약하거나 리조트에 있는 스키 학교를 찾거나 경험이 많은 누군가에게 가르쳐 달라고 하세요. 다시 한번, sh 코딩 블록을 사용해서 검색해 보세요: '''sh echo "스키 레슨이나 학교를 찾아서..." wget --quiet -O- https://www.google.com/search?q=ski+lessons+at+nearest+resort ```
    • 3. 첫날, 강사나 리조트 직원의 기본 기술과 안전 지침을 검토합니다.
    • 4. 완만한 경사로 시작해서 균형 잡기, 회전하기(피봇 회전), 정지하기를 연습한다.
    • 5. 일단 초급 슬로프에서 편안하면 중급 및 고급 런으로 단계적으로 이동합니다.
    • 6. 기본 연습을 계속하고 기술을 향상시키면서 더 발전된 기술을 배우세요. 항상 스키장 규칙을 따르고 다른 스키어를 존중하는 것을 기억하세요.

    마지막으로, 안전하게 지내시고 이 재미있는 겨울 스포츠를 즐겨보세요!

    Solar 10.7B가 찾은 근처 스키 장비 대여소
    Solar 10.7B 답변내용을 전달하는 Mistral 7B의 모습
    Solar 10.7B가 찾은 근처 스키 리조트
    Solar 10.7B 답변내용을 전달하는 Mistral 7B의 모습
    https://fornewchallenge.tistory.com/

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

    마치며

    이번 포스트에서는 허깅페이스 1위 Solar 10.7B와 Autogen을 활용하여 Mistral 7B와의 자동화된 협업에 대해 알아보았습니다. Autogen 프레임워크를 활용하면 다양한 에이전트들이 서로 대화하며 자동화된 작업을 효과적으로 수행할 수 있는 환경을 제공합니다. 대규모 언어 모델을 쉽게 활용할 수 있도록 도와주는 LiteLLM, LM Studio, Ollama와 같은 도구들을 통해 Solar와 Mistral 7B가 원활하게 협업할 수 있었습니다.

     

    자동화된 대화를 통해 사용자의 요청에 효과적으로 응답하고, 정보를 수집하며 다양한 작업을 수행할 수 있는 이러한 환경을 경험하면서 미래의 언어 모델 응용 프로그램 개발에 더 큰 기대를 해볼 수 있었습니다. 계속해서 발전하는 언어 모델과 프레임워크들을 통해 더욱 다양하고 효과적인 자동화된 서비스들이 개발되기를 바라면서 저는 다음 시간에 더욱 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

     

    2023.12.28 - [분류 전체보기] - LiteLLM으로 Mistral 7B와 대화하는 웹 챗봇 만들기

     

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

    안녕하세요! 오늘은 저번 시간 살펴본 제미나이 웹 챗봇에 이어서 Gradio 웹 인터페이스 2편으로 LiteLLM이라는 도구를 이용해서 허깅페이스의 인기 모델인 Mistral 7B와 대화하는 웹 챗봇 만들기에 도

    fornewchallenge.tistory.com

     

    728x90