본문 바로가기
AI 언어 모델

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

by James AI Explorer 2024. 3. 6.

목차

    728x90

    안녕하세요! 오늘은 3월 4일 발표된 앤트로픽의 최신 대형 언어 모델 클로드(Claude) 3에 대해서 알아보겠습니다. 이번에 발표된 클로드 3 모델 패밀리는 Haiku, Sonnet 및 Opus라는 세 가지 최신 모델로 구성되어 있으며, 그중 Opus는 인공지능 시스템의 일반적인 평가 기준에서 GPT-4, Gemini 등 기존 모델들을 능가하는 벤치마크 결과를 공개하였습니다. 이 블로그에서는 클로드 3의 개요와 특징에 대해 알아보고, 클로드 3 API를 활용한 함수 호출 예제에 대해 알아보겠습니다. 

    GPT-4와 제미나이를 능가하는 언어 모델, 클로드(Claude) 3 공개!

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

    클로드 3 개요 및 특징

    클로드 3 모델은 분석 및 예측, 코드 생성 및 스페인어, 일본어 및 프랑스어와 같은 비영어 언어 대화능력을 증가시키고, 실시간 데이터 추출 작업과 같이 즉각적이고 실시간으로 응답해야 하는 작업을 지원할 수 있으며, 이전 모델보다 거부할 확률이 낮고, 더 나은 정확성을 보여준다고 합니다. 클로드 3 모델 패밀리는 성능과 속도에 따라 Haiku, Sonnet 및 Opus 세 가지 모델로 구성되어 있습니다. 

    • Claude 3 Opus: 가장 지능적인 모델로, 대학 수준 전문 지식(MMLU), 대학원 수준 전문 추론(GPQA), 기본 수학(GSM8K) 등 인공지능 시스템의 일반적인 평가 기준에서 다른 모델들을 능가합니다. 복잡한 작업에서 거의 인간 수준의 이해와 유창성을 보여줍니다.
    • Claude 3 Sonnet: 지능과 속도의 이상적인 균형을 제공하여 기업 업무처리에 특히 적합합니다. 효율적인 대규모 AI 배포를 위해 강력한 성능을 제공합니다.
    • Claude 3 Haiku: 빠르고 가장 경제적인 모델로, 거의 즉각적인 응답을 제공합니다. 인간 상호 작용을 모방하는 원활한 AI 경험을 구축할 수 있습니다.

    성능 벤치마크 결과

    아래 벤치마크 결과를 보면, 클로드 3 Opus는 학부 수준 지식, 대학원 수준 추론, 수학 문제 해결, 다국어 작업, 코드 이해, 텍스트에 대한 추론, 종합 평가, 지식 QA, 일반 상식 등의 평가 범주에서 GPT 모델, Gemini 모델 획득한 점수보다 우수한 성능을 보여줍니다. (GPT-4 터보 모델을 능가하지는 못한 것으로 보입니다.) 점수는 일반적으로 백분율이나 특정 메트릭 값으로 표시되며, 각 작업에서 사용된 평가 샷(0-shot, 5-shot, 25-shot)은 모델이 특정 작업을 수행하는 데 필요한 학습 예시의 수를 말합니다.

    클로드 3 벤치마크 결과

    비전 능력

    클로드 3 모델은 다른 주요 모델과 유사한 수준의 정교한 비전 능력을 갖추고 있으며, 사진, 차트, 그래프 및 기술 다이어그램과 같은 다양한 시각적 형식을 처리할 수 있으므로, 기업 고객들에게 PDF, 플로차트 또는 프레젠테이션 슬라이드와 같은 다양한 형식으로 지식 베이스 인코딩을 제공할 수 있다고 합니다. 

     

    비전 분야 벤치마크 결과는 수학 및 추론 작업에서 Claude 3 Opus가 59.4%로 가장 높은 점수를 받았으며, 문서 시각 QA 작업에서는 Gemini 1.0 Ultra가 90.9%로 가장 높은 점수를 받았습니다. 수학 MathVista 테스트에서도 Gemini 1.0 Ultra가 53.0%로 가장 높았습니다. 과학 다이어그램 작업에서는 Claude 3 Sonnet이 88.7%로 가장 높은 점수를 기록했습니다. 마지막으로 차트 QA 작업에서는 Claude 3 Haiku가 81.7%로 가장 높았습니다. 전반적으로 Claude 3 모델들이 대부분의 작업에서 높은 성능을 보였지만, 특정 작업에서는 다른 모델들도 경쟁력 있는 결과를 보여주었습니다.

    Claude 3의 비전 능력

    반응형

    장문 컨텍스트

    클로드 3 모델 패밀리는 초기 출시 시 20만 토큰의 컨텍스트 창을 제공하지만, 세 모델 모두 100만 개를 초과하는 토큰을 입력으로 받아들일 수 있다고 합니다. 모델이 방대한 텍스트 데이터에서 정보를 정확하게 회상하는 능력을 측정하는 NIAH(Needle In A Haystack, 바늘 찾기) 평가에서 클로드 3 Opus는 거의 완벽한 성능을 달성하여 99% 이상의 정확도를 넘어섰으며, 일부 경우에는 평가의 한계를 식별하여 인간에 의해 인위적으로 삽입된 텍스트 오류를 식별했다고 합니다. 

     

    아래 그림에서 y축은 '바늘(모델이 찾아야 할 목표)' 문장의 위치(needle position)를 나타내며, x축은 문서의 컨텍스트 길이를 나타냅니다. 녹색 영역은 Claude 3 Opus 모델이 해당 컨텍스트 길이에서 '바늘' 문장을 성공적으로 찾아낸 경우를 의미합니다. 그래프를 보면 컨텍스트 길이가 200k 토큰 이하의 범위에서 높은 정확도로 '바늘' 문장을 찾아낸다는 것을 시각적으로 보여줍니다.

    NIAH(Needle In A Haystack, 바늘 찾기) 평가

    모델 세부사항

    Claude 3 모델 중 Opus와 Sonnet은 바로 사용 가능하며, 사용자들이 즉시 이 모델들을 사용할 수 있도록 일반적으로 사용 가능한 API를 지원한다고 합니다. Haiku 모델은 곧 사용 가능할 예정이며, Sonnet은 claude.ai에서 무료로 사용할 수 있고, Opus는 Claude Pro 구독자에게 제공됩니다. 또한 Sonnet은 바로 Amazon 클라우드 플랫폼인 Bedrock과 Google Cloud의 Vertex AI Model Garden의 프리뷰를 통해 사용할 수 있으며, Opus와 Haiku도 곧 이용할 수 있게 될 것이라고 합니다. 

    모델 입력
    ($/백만 토큰)
    출력
    ($/백만 토큰)
    컨텍스트 창 잠재적 용도 차별화
    클로드 3
    오퍼스
    $15 $75 200K~1M 작업 자동화, 연구 및 개발, 전략 다른 모든 모델보다 높은 지능
    클로드 3
    소네트
    $3 $15 200K 데이터 처리, 판매, 시간 절약 작업 유사한 지능을 가진 다른 모델보다 더 저렴하고 확장 가능
    클로드 3
    하이쿠
    $0.25 $1.25 200K 고객 상호 작용, 콘텐츠 관리, 비용 절감 작업 다른 모델보다 더 똑똑하고 빠르며 경제적임

    클로드 3 API 활용예제

    다음은 클로드 3 API 활용예제입니다. 이 코드의 출처는 유튜브 "Claude 3 Function Calling: What is Unique in Claude Opus?"이며, 원래 코드에서 함수호출 전후비교를 위한 코드는 삭제하였습니다. 

    가입 및 무료 크레디트 충전

    먼저 클로드 웹사이트에 접속하여 가입한 후, API Key를 발급받아야 하는데요. 아래 이미지와 같이 처음 가입하면 본인의 전화번호를 입력하고 전송받은 확인코드를 입력하면 평가를 위한 크레디트 5달러를 무료로 받을 수 있습니다. 무료 크레디트를 받지 않고 API Key를 사용하면 아래와 같이 잔여 크레디트 부족 에러가 발생하므로, 코드 실행 전에 받아야 합니다. 

    https://console.anthropic.com/settings/keys

    평가용 무료 크레디트를 받을수 있는 확인코드 입력
    평가용 무료 크레디트 5달러 충전 화면

    API Key 발급은 아래 링크에 접속해서 "Get API Keys"를 클릭하고 "Create API Key"를 선택하면 됩니다. 

    https://console.anthropic.com/dashboard

    클로드 API Key를 발급할 수 있는 대시보드 화면

    환경설정 및 의존성 설치

    다음은 파이썬 환경설정 단계입니다. 윈도우 운영체제의 아나콘다 환경을 기준으로 가상환경 생성은 "conda create -n myenv python=3.11", 활성화는 "conda activate myenv" 명령어를 입력해서, 가상환경을 활성화한 후, 명령어 프롬프트 상태에서 아래 코드를 입력하여, 필요한 라이브러리를 설치합니다. 

    pip install anthropic yfinance rich

    의존성 라이브러리 설치

    위 명령어를 통해 설치하는 라이브러리는 다음과 같습니다. 

    • anthropic: Anthropic의 클로드 API를 사용하기 위한 것으로, 자연어 처리 및 인공 지능 작업에 사용될 수 있습니다.
    • yfinance: Yahoo Finance API로 주식 가격 및 금융 데이터를 가져오고 처리하기 위해 사용됩니다.
    • rich: 터미널 및 콘솔에서 텍스트를 보기 좋게 서식 지정하는 데 사용됩니다. 테이블, 텍스트 스타일링, 색상 등을 포함하여 풍부한 텍스트 출력을 생성하는 데 유용합니다.

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

    예제코드 실행

    다음은 코드 실행단계입니다. 이 코드는 사용자가 Claude opus 모델을 통해 Apple 주식의 현재 가격을 조회하는 기능을 구현합니다. 사용자는 주식 이름을 메시지로 보내면, 코드는 이를 분석하여 Yahoo Finance API를 사용하여 해당 주식의 현재 가격을 가져오고, Claude를 통해 사용자에게 현재 주식 가격을 반환합니다.

     

    이 코드는 다음과 같은 작업을 수행합니다:

    • `anthropic`, `rich`, `re`, `yfinance`, `requests` 모듈을 임포트 합니다.
    • API 키를 설정하고, `Anthropic` 클라이언트를 생성합니다.
    • `stock_message` 변수에 사용자의 요청을 설정합니다. 여기서는 Apple 주식의 현재 가격을 찾는 것입니다.
    • `get_stock_price` 함수를 정의하여 주식의 현재 가격을 가져오는 기능을 구현합니다.
    • 도구(tool)에 대한 설명을 작성합니다. 이 도구는 주식의 현재 가격을 찾는 기능입니다.
    • 사용자에게 Claude에게 질문을 할 수 있는 표준 텍스트를 생성합니다.
    • Claude에게 메시지를 전송해서 사용자의 질문과 함께 도구를 사용할 수 있는 환경을 설정합니다.
    • Claude의 응답에서 파라미터를 추출하고 해당 함수를 호출하여 주식의 현재 가격을 가져옵니다.
    • 함수 실행 결과를 생성하여 Claude에게 보내면 Claude가 최종 응답을 받아서 출력합니다.

    이 코드는 사용자의 질문에 따라 API를 통해 클로드 3 opus 모델을 사용하여 기능을 호출하고, 해당 기능을 수행하여 결과를 반환하는 작업을 수행합니다.

    from anthropic import Anthropic
    from rich import print
    import re
    import yfinance as yf
    import requests
    
    # API 키 설정
    api_key = "발급받은 본인 API Key"
    
    # Anthropic 클라이언트 생성 시에 API 키 설정
    client = Anthropic(api_key=api_key)
    
    MODEL_NAME = "claude-3-opus-20240229"
    
    stock_message = {
        "role": "user", 
        "content": "Find the current price of Apple stock"
    }
    
    # 1. Define the stock price finding function
    def get_stock_price(ticker_symbol):
        stock = yf.Ticker(ticker_symbol)
        hist = stock.history(period="1d")
        current_price = hist['Close'].iloc[0]
        return current_price
    
    # 2. Construct Tool description
    tool_description = """
    <tool_description>
        <tool_name>get_stock_price</tool_name>
        <description>
            Function for finding the current price of a stock using its ticker symbol.
        </description>
        <parameters>
            <parameter>
                <name>ticker_symbol</name>
                <type>str</type>
                <description>Ticker symbol of the stock</description>
            </parameter>
        </parameters>
    </tool_description>
    """
    
    # 3. Ask Claude
    system_prompt = f"""
    In this environment you have access to a set of tools you can use to answer the 
    user's question.
    
    You may call them like this:
    <function_calls>
        <invoke>
            <tool_name>$TOOL_NAME</tool_name>
            <parameters>
                <$PARAMETER_NAME>$PARAMETER_VALUE</$PARAMETER_NAME>
                ...
            </parameters>
        </invoke>
    </function_calls>
    
    Here are the tools available:
    <tools>{tool_description}</tools>
    """
    
    function_calling_message = client.messages.create(
        model=MODEL_NAME,
        max_tokens=1024,
        messages=[stock_message],
        system=system_prompt
    ).content[0].text
    
    # print(function_calling_message)
    
    # 4. Extract parameters from response & call the function
    def extract_between_tags(tag, string, strip=False):
        ext_list = re.findall(f"<{tag}>(.+?)</{tag}>", string, re.DOTALL)
        return [e.strip() for e in ext_list] if strip else ext_list
    
    function_params = {"ticker_symbol": extract_between_tags("ticker_symbol", function_calling_message)[0]}
    function_name = extract_between_tags("tool_name", function_calling_message)[0]
    names_to_functions = {
        'get_stock_price': get_stock_price,
    }
    price = names_to_functions[function_name](**function_params)
    
    # Construct function results
    function_results = f"""
    <function_results>
      <result>
        <tool_name>get_stock_price</tool_name>
        <stdout>{price}</stdout>
      </result>
    </function_results>"""
    
    # 5. Send all messages back to Claude
    partial_assistant_message = function_calling_message + function_results
    
    response = client.messages.create(
        model=MODEL_NAME,
        max_tokens=1024,
        messages=[
            stock_message,
            {
                "role": "assistant",
                "content": partial_assistant_message
            }
        ],
        system=system_prompt
    )
    
    if response:
        final_message = response.content[0].text
    else:
        final_message = "No message received from Claude."
    print(final_message)

     

    위 코드를 실행하면 Apple의 현재 주식가격을 가져오는 함수를 호출한 결과가 클로드로부터 출력됩니다. 

    예제코드 실행 결과

    마치며

    이 블로그에서는 앤트로픽의 최신 대형 언어 모델인 클로드 3에 대해 알아보았습니다. 클로드 3 모델 패밀리는 Haiku, Sonnet, Opus라는 세 가지 모델로 구성되어 있으며, 이 중 Opus는 기존의 GPT-4 및 Gemini 모델을 능가하는 벤치마크 결과를 보여주고 있습니다. 클로드 3 모델 패밀리 중 Opus 모델은 다양한 벤치마크 결과에서 우수한 성능을 보였으며, 특히 문서 시각 QA 작업에서 높은 점수를 기록했습니다. 또한 클로드 3 모델은 긴 텍스트 데이터에서 정보를 정확하게 회상하는 능력을 측정한 NIAH(Needle In A Haystack, 바늘 찾기) 평가에서도 뛰어난 성능을 보여주었습니다.

     

    마지막으로 클로드 API를 통해서 opus 모델로 Apple 주식의 현재 가격을 조회하는 예제코드를 실행해 보았는데요. 사용자는 주식 이름을 메시지로 보내면, Yahoo Finance API를 사용하여 해당 주식의 현재 가격을 가져오고, Claude를 통해 사용자에게 현재 주식 가격을 반환하는 기능을 확인해 보았습니다. 

     

    오늘 내용은 여기까지입니다. 갈수록 치열해지는 대형 언어 모델의 경쟁은 과연 어디가 끝인지 알 수가 없습니다. 저는 그럼 다음 시간에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

     

    ttps://fornewchallenge.tistory.com

    2024.03.05 - [분류 전체보기] - [Ollama 활용] 허깅페이스 Solar를 나만의 커스텀 언어 모델로 바꾸기

     

    [Ollama 활용] 허깅페이스 Solar를 나만의 커스텀 언어 모델로 바꾸기

    안녕하세요! 오늘은 대형 언어 모델 도구 Ollama를 이용해서 커스텀 언어 모델을 만들어 보겠습니다. 커스텀 언어 모델은 시스템 프롬프트 등을 변경하여 사용자가 원하는 방식으로 동작하도록

    fornewchallenge.tistory.com

     

    반응형