본문 바로가기
AI 언어 모델

5줄 파이썬 코드로 AI 주식 분석 완료! Hermes 2 Pro의 놀라운 함수 호출 기능

by James AI Explorer 2024. 3. 19.

목차

    728x90

    안녕하세요! 오늘은 최신 대규모 언어 모델 Hermes-2-Pro-Mistral-7B에 대해서 알아보겠습니다. Hermes-2-Pro-Mistral-7B는 NousResearch가 개발한 미스트랄(Mistral) 아키텍처 기반 대규모 언어 모델로, 함수호출과 JSON 출력에서 높은 성능과 다양한 자연어 이해 기능을 제공합니다. 이 블로그에서는 Hermes 2 Pro 개요와 특징, 파이썬 코드 5줄로 완성하는 주식분석 예제코드에 대해서 알아보겠습니다. 

    최신 언어 모델 Hermes 2 Pro를 활용한 함수 호출과 JSON 출력

     

    https://huggingface.co/NousResearch/Hermes-2-Pro-Mistral-7B

     

    NousResearch/Hermes-2-Pro-3 Face

    Hermes 2 Pro - Mistral 7B Model Description Hermes 2 Pro on Mistral 7B is the new flagship 7B Hermes! Hermes 2 Pro is an upgraded, retrained version of Nous Hermes 2, consisting of an updated and cleaned version of the OpenHermes 2.5 Dataset, as well as a

    huggingface.co

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

    Hermes 2 Pro 개요

    NousResearch의 새로운 플래그십 모델인 Hermes 2 Pro Mistral 7B는 Nous Hermes 2의 업그레이드 및 재훈련된 버전으로, 업데이트된 OpenHermes 2.5 데이터셋과 NousResearch가 개발한 새로운 Function CallingJSON Mode 데이터셋으로 구성되어 있습니다. 이 새로운 버전의 Hermes는 일반적인 작업 및 대화 능력을 유지하면서도 함수 호출, JSON 구조화된 출력 등에서 우수한 성능을 발휘합니다.

     

    Hermes 2 Pro는 Fireworks.AI와 함께 구축한 함수 호출 평가에서 91%의 정확도를 기록하였으며, 구조화된 JSON 출력 평가에서는 81%의 점수를 기록했습니다. Hermes Pro는 함수 호출을 신뢰할 수 있고 파싱하기 쉽도록 새로운 챗봇 언어모델 역할을 활용한 특별한 시스템 프롬프트멀티턴 함수 호출 구조를 채택하였습니다. 다음은 Hermes 2 Pro의 주요 특징입니다.

    • 데이터셋 업그레이드: OpenHermes 2.5 데이터셋을 업데이트하고 정리하여 사용하여 성능을 향상시켰습니다. 이는 모델이 사용하는 데이터의 품질을 개선하여 모델의 성능을 향상시키는 데 도움이 되었습니다.
    • 새로운 데이터셋 추가: Nous Research 내에서 개발한 함수 호출 및 JSON Mode 데이터셋을 도입하여 모델의 함수 호출 및 JSON 구조화된 출력 능력을 향상시켰습니다. 이 새로운 데이터셋은 모델이 함수를 호출하고 이에 대한 응답을 JSON 형식으로 구조화하는 방법을 학습하도록 돕는 데 사용되었습니다.
    • 우수한 성능: 이 모델은 일반적인 작업 및 대화 능력에 더해 함수 호출 및 JSON 구조화된 출력에서 우수한 성능을 발휘합니다. 이는 모델이 다양한 유형의 작업을 처리하고 여러 가지 형식의 데이터에 응답하는 능력을 갖추고 있다는 것을 의미합니다.
    • 함수 호출 시스템 프롬프트: 모델은 함수 호출을 신뢰할 수 있고 파싱하기 쉽도록 새로운 챗봇 언어 모델 역할과 특별한 시스템 프롬프트를 도입했습니다. 이는 모델이 함수 호출에 대한 지시를 명확하게 이해하고 적절하게 처리할 수 있도록 돕는 데 사용됩니다.

    Hermes 2 Pro는 함수 호출 시스템을 지원하는 자연어 처리 모델입니다. 이 모델은 주어진 질문 또는 쿼리를 해석하고 필요한 작업을 수행하기 위해 함수 호출을 사용합니다. Hermes 2 Pro의 함수 호출 시스템 프롬프트 구조는 다음과 같습니다. 

    <|im_start|>system
    You are a function calling AI model. You are provided with function signatures within <tools></tools> XML tags. You may call one or more functions to assist with the user query. Don't make assumptions about what values to plug into functions. Here are the available tools: <tools> {"type": "function", "function": {"name": "get_stock_fundamentals", "description": "get_stock_fundamentals(symbol: str) -> dict - Get fundamental data for a given stock symbol using yfinance API.\\n\\n    Args:\\n        symbol (str): The stock symbol.\\n\\n    Returns:\\n        dict: A dictionary containing fundamental data.\\n            Keys:\\n                - \'symbol\': The stock symbol.\\n                - \'company_name\': The long name of the company.\\n                - \'sector\': The sector to which the company belongs.\\n                - \'industry\': The industry to which the company belongs.\\n                - \'market_cap\': The market capitalization of the company.\\n                - \'pe_ratio\': The forward price-to-earnings ratio.\\n                - \'pb_ratio\': The price-to-book ratio.\\n                - \'dividend_yield\': The dividend yield.\\n                - \'eps\': The trailing earnings per share.\\n                - \'beta\': The beta value of the stock.\\n                - \'52_week_high\': The 52-week high price of the stock.\\n                - \'52_week_low\': The 52-week low price of the stock.", "parameters": {"type": "object", "properties": {"symbol": {"type": "string"}}, "required": ["symbol"]}}}  </tools> Use the following pydantic model json schema for each tool call you will make: {"properties": {"arguments": {"title": "Arguments", "type": "object"}, "name": {"title": "Name", "type": "string"}}, "required": ["arguments", "name"], "title": "FunctionCall", "type": "object"} For each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:
    <tool_call>
    {"arguments": <args-dict>, "name": <function-name>}
    </tool_call><|im_end|>

     

    Hermes 2 Pro의 함수 호출 시스템 프롬프트는 AI 모델이 사용자 쿼리를 처리하기 위해 필요한 함수를 호출하는 방법을 정의합니다. 이를 위해 다음과 같은 요소들이 포함됩니다:

    • 함수 시그니처: XML 태그 내에서 제공됩니다. 각 함수에 대한 시그니처는 함수의 이름, 매개변수 및 반환 유형을 설명합니다. 이 정보는 함수를 호출할 때 필요한 매개변수의 유형과 반환되는 데이터 형식을 이해하는 데 사용됩니다.
    • 함수 호출 JSON 스키마: 각 함수 호출에 대한 JSON 스키마가 제공됩니다. 이 스키마는 함수 호출에 필요한 매개변수 및 함수 이름을 정의합니다. 이를 통해 모델은 올바른 형식의 함수 호출을 생성할 수 있습니다.
    • 함수 호출 지시: 모델은 각 함수 호출에 대한 JSON 객체를 반환해야 합니다. 이 객체에는 함수 이름과 해당 함수를 호출하는 데 필요한 인수가 포함됩니다. 이러한 함수 호출은 XML 태그 내에서 표시됩니다.

    이러한 시스템 프롬프트를 따르면 Hermes 2 Pro는 사용자의 쿼리를 이해하고 필요한 데이터를 가져오기 위해 적절한 함수를 호출할 수 있습니다. 이를 통해 모델은 정확하고 유용한 응답을 생성하여 사용자에게 제공할 수 있습니다.

    반응형

    환경설정 및 모델 다운로드

    이 블로그에서 사용한 예제코드의 실행환경은 Windows 11 Pro(23H2),  파이썬 버전 3.11, 코드 에디터는 비주얼 스튜디오 코드(이하 VSC)입니다. VSC를 실행하여, 아래 화면과 같이 "WSL에 연결"을 통해 Windows Subsystem for Linux(WSL)을 사용하여 Linux 환경에 액세스 하도록 구성합니다. 이 작업은 Ollama의 Linux 버전을 사용하기 위해서입니다. 

    비주얼 스튜디오 코드의 WSL 연결 화면

    다음은 VSC 명령 프롬프트에서 "python3.11 -m venv myenv"와 "source myenv/bin/activate" 명령어를 통해 가상환경을 생성 및 활성화 한 다음, 아래 명령어로 의존성(dependency)을 설치해 줍니다. 

    pip install -U ollama phidata duckduckgo-search yfinance

     

    명령어는 파이썬 패키지 관리자인 pip를 사용하여 여러 패키지를 최신 버전으로 업데이트 또는 설치하는 명령어입니다. 각각의 패키지에 대한 간단한 설명은 다음과 같습니다:

    • ollama: Hermes 2 Pro 모델을 불러오기 위한 라이브러리로, 자연어 이해 및 생성 작업을 수행하는 데 사용됩니다.
    • phidata: 데이터 분석 및 데이터 시각화를 위한 파이썬 라이브러리로, 데이터 처리 및 분석 작업에 사용됩니다.
    • duckduckgo-search: DuckDuckGo 검색 엔진과 상호 작용하기 위한 라이브러리로, 웹 스크래핑 및 검색 관련 작업에 사용됩니다.
    • yfinance: Yahoo Finance API와 상호 작용을 위한 라이브러리로, 주식 시장 데이터를 검색하고 다루는 데 사용됩니다.

    위 명령어를 실행하면 위의 네 가지 패키지가 설치되거나 최신 버전으로 업데이트됩니다.

     

    다음은 대형 언어 모델 활용도구인 Ollama를 설치하여 WSL 프롬프트 상에서 "ollama pull adrienbrault/nous-hermes2pro:Q4_0-tools" 명령어로 언어 모델을 사전에 다운로드합니다. 다운로드한 모델은 "ollama list" 명령어로 확인할 수 있으며, "ollama serve"로 서비스를 실행합니다. Ollama의 설치는 아래 포스트를 참고하시기 바랍니다. 

    ollama run adrienbrault/nous-hermes2pro:Q4_0-tools

     

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

     

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

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

    fornewchallenge.tistory.com

     

    예제코드 실행

    VSC의 가상환경이 활성화된 상태에서 새 파일/Python 파일을 선택하고, 아래 파이썬 코드를 복사하여 붙여 넣은 후, finance.py로 저장합니다. 

    from phi.assistant import Assistant
    from phi.tools.yfinance import YFinanceTools
    from phi.llm.ollama import Hermes
    
    assistant = Assistant(llm=Hermes(model="adrienbrault/nous-hermes2pro:Q4_0-tools"), tools=[YFinanceTools(stock_price=True, analyst_recommendations=True, stock_fundamentals=True)], show_tool_calls=True)
    
    assistant.print_response("Provide the stock analyst recommendations for NVDA and summerize them.", markdown=True)

     

    이 코드는 Hermes 2 Pro 모델의 함수호출 기능을 사용하여 주식 분석 관련 정보를 제공합니다. 

    • 1. `from phi.assistant import Assistant`: phi 라이브러리에서 Assistant 클래스를 가져옵니다. 이 클래스는 사용자 쿼리를 처리하고 응답을 생성하는 데 사용됩니다.
    • 2. `from phi.tools.yfinance import YFinanceTools`: phi 라이브러리에서 YFinanceTools 클래스를 가져옵니다. 이 클래스는 Yahoo Finance API를 사용하여 주식 시장 데이터를 가져오는 데 사용됩니다.
    • 3. `from phi.llm.ollama import Hermes`: phi 라이브러리에서 Hermes 클래스를 가져옵니다. 이 클래스는 Hermes 2 Pro 모델을 초기화하고 사용자 쿼리를 처리하는 데 사용됩니다.
    • 4. `assistant = Assistant(...)`: Assistant 클래스의 인스턴스를 생성합니다. 이때, Hermes 2 Pro 모델과 YFinanceTools를 사용하여 Assistant를 초기화합니다. `show_tool_calls=True` 매개변수는 도구 호출에 대한 정보를 표시하도록 Assistant를 구성합니다.
    • 5. `assistant.print_response(...)`: Assistant 객체의 `print_response` 메서드를 사용하여 사용자 쿼리에 대한 응답을 생성하고 출력합니다. 이 코드에서는 "엔비디아(NVDA)" 주식의 분석 추천 정보를 요청하고 이를 요약하여 마크다운 형식으로 출력합니다.

    요약하면, 이 코드는 Hermes 2 Pro 모델을 사용하여 주식 분석 정보를 요청하고 이를 요약하여 출력하는 데 사용됩니다.

    코드를 실행하면 다음 화면과 같이 야후 파이낸스로부터 가져온 주식 분석정보를 기간별로 표시합니다. 엔비디아의 주식 분석정보는 아래 보시는 것처럼 "매수" 또는 "강한 매수"로 나오네요.

     

    "이 데이터를 통해 NVDA에 대한 대부분의 분석가 추천이

    "매수" 및 "강한 매수" 범주에 있으며,

    최근 "보유" 추천이 상당히 증가했다는 것으로 요약할 수 있습니다.

    "매도" 또는 "강한 매도" 등의 추천은 매우 적으며,

    이는 주식에 대한 일반적으로 상승적인 분위기를 나타냅니다."

     

    예제 코드 실행 결과

    이렇게 5줄의 간략한 코드로 함수 호출이 가능한 이유는 Hermes 2 Pro모델이 사용자의 질문을 이해하고 적절한 도구를 호출해야 할 경우, JSON 형식의 메시지를 생성하여 해당 도구를 호출하도록 학습되고 시스템 프롬프트에 입력이 되어있기 때문인데요. 아래 ollama 실행화면을 보면 사용자가 주식정보 분석요청을 하면 시스템 프롬프트에 입력된 내용과 같이 <tool></tool> 구조의 JSON 형식의 메시지를 자동으로 반환하도록 모델이 학습되어 있는 것을 알 수 있습니다. 

    사전에 학습된 JSON 형식 메시지 반환

    이러한 학습과정이 없는 일반적인 'mistral" 모델은 코드를 실행하면 아래 화면과 같이 결과가 나오지 않습니다. 

    mistral 언어모델의 응답결과

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

    맺음말

    오늘은 최신 대규모 언어 모델인 Hermes-2-Pro-Mistral-7B에 대해 알아보았습니다. 이 모델은 미스트랄(Mistral) 아키텍처를 기반으로, 함수 호출과 JSON 출력에서 높은 성능과 다양한 자연어 이해 기능을 제공하며, 이러한 기능을 통해 Hermes 2 Pro는 사용자의 질문을 이해하고 필요한 작업을 수행하기 위해 적절한 함수를 호출할 수 있습니다.

     

    블로그에서 우리는 Hermes 2 Pro의 함수 호출 시스템 프롬프트를 활용한 주식 분석 예제코드를 5줄의 파이썬 코드로 쉽게 작성해 보았으며, 이를 통해 간편하고 빠르게 주식 분석을 수행함으로써, 금융, 주식뿐만 아니라, 의학, 생명과학, 교육 학습 등 다양한 데이터 분석 및 자연어 처리 분야에서 활용할 수 있는 가능성을 확인하였습니다. 

     

    오늘 내용은 여기까지입니다 여러분도 Hermes 2 Pro 모델의 강력한 기능과 사용의 편의성을 직접 느껴보시길 바라면서 저는 다음에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다.

     

    https://fornewchallenge.tistory.com/

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

     

    2024.03.06 - [대규모 언어모델] - 클로드(Claude) 3: GPT-4와 제미나이를 뛰어넘은 언어 모델의 등장!

     

    클로드(Claude) 3: GPT-4와 제미나이를 뛰어넘은 언어 모델의 등장!

    안녕하세요! 오늘은 3월 4일 발표된 앤트로픽의 최신 대형 언어 모델 클로드(Claude) 3에 대해서 알아보겠습니다. 이번에 발표된 클로드 3 모델 패밀리는 Haiku, Sonnet 및 Opus라는 세 가지 최신 모델로

    fornewchallenge.tistory.com

    반응형