Llama 3.3 70B 함수 호출: 향상된 성능을 위한 원활한 통합

Llama 3.3 70B 함수 호출: 향상된 성능을 위한 원활한 통합

주요 하이라이트

기능: 실시간 데이터 검색, 시스템 작업 및 자동화된 워크플로우를 실행합니다.

지원 모델: Llama 3 시리즈, GPT 시리즈, Gemma 2, Mistral nemo.

구현 방법: Novita AI "Model Library"를 통해 API를 설치한 후 Langchain 프레임워크로 구현합니다.

함수 호출은 대규모 언어 모델(LLM)의 기능을 크게 향상시켜 외부 세계와 상호 작용할 수 있게 하는 기술입니다. 단순히 텍스트를 생성하는 대신 LLM은 함수 호출을 활용하여 특정 작업을 실행하고, 실시간 정보에 접근하며, 복잡한 연산을 수행할 수 있습니다. 이 글에서는 함수 호출의 개념, 실제 적용 사례, 그리고 Llama 3.3 70B와 같은 모델이 어떻게 이를 더욱 접근 가능하게 만드는지 살펴보겠습니다.

함수 호출이 해결할 수 있는 문제는 무엇인가요?

  1. 실시간 정보 접근
  • 최신 주가 확인
  • 현재 날씨 데이터 가져오기
  • 속보 접근
  1. 시스템 상호 작용
  • 이메일 전송
  • 소셜 미디어에 게시
  • 데이터베이스 쿼리 및 쓰기
  1. 워크플로우 자동화
  • 데이터 스크래핑 및 처리
  • 다단계 작업 실행
  • 복잡한 분석 자동화
  1. 데이터 정확성
  • 정보의 적시성 보장
  • 정확한 쿼리 결과 제공
  • 오래된 데이터 오류 감소

함수 호출이란 무엇인가요?

본질적으로 함수 호출은 LLM이 특정 작업에 외부 함수나 도구가 필요함을 인식하고 함수를 실행하기 위한 구조화된 데이터(일반적으로 JSON 형식)를 출력하는 능력입니다. 이 구조화된 데이터에는 함수의 이름과 필요한 인수가 포함됩니다. 즉, 함수 호출은 AI의 방대한 지식과 실제 행동 사이의 다리 역할을 합니다. 이는 AI 에이전트나 챗봇이 특정 작업을 수행하거나 외부 데이터 및 서비스에 접근할 수 있게 해줍니다.

함수 호출을 지원하는 모델

많은 LLM과 플랫폼이 이제 함수 호출을 지원합니다. Novita AI의 “Model Library” 페이지를 통해 API를 설치하고, langchain을 통해 함수 호출을 구현할 수 있습니다.

모델 라이브러리

  • Llama 3.3: 700억 파라미터 버전은 사용자 요청에 따라 언제, 어떤 함수를 호출해야 하는지 성공적으로 식별하여 함수 호출 테스트에서 강력한 성능을 보여주었습니다.
  • Mistral: Mistral-Large-2와 같은 모델은 watsonx.ai 환경 내 함수 호출에서 성공을 보여줍니다.
  • Gemini: Google의 Gemini 모델도 함수 호출을 지원하며 다양한 사용 예시를 제공합니다.

함수 호출은 어떻게 작동하나요?

  1. 함수 선언: 재사용 가능한 코드 블록(함수)과 그 기능, 입력, 출력에 대한 설명을 정의하는 것으로 시작합니다.
  2. 프롬프트 제출: 사용자는 함수 선언 세트와 함께 프롬프트를 LLM에 제출합니다. 이는 모델에게 사용 가능한 도구를 알려줍니다.
  3. 모델 분석: LLM은 프롬프트를 분석하고 요청을 이행하기 위해 제공된 함수 중 하나를 호출해야 하는지 결정합니다.
  4. 구조화된 출력: 함수 호출이 필요한 경우 LLM은 함수 이름과 매개변수 값을 포함하는 JSON 형식의 구조화된 출력을 생성합니다.
  5. 함수 호출: 애플리케이션 또는 시스템이 이 구조화된 출력을 사용하여 매개변수를 전달하면서 지정된 함수를 호출합니다.
  6. 함수 실행: 외부 서비스 또는 API가 제공된 매개변수를 사용하여 함수를 실행합니다.
  7. 출력 응답: 외부 서비스가 확인 또는 결과를 AI로 다시 보냅니다.
  8. 모델 응답: LLM은 이 출력을 사용하여 사용자에게 자연어 응답을 생성하거나 추가 처리를 수행합니다.
  • 모델이 직접 함수를 호출하는 것이 아니라, 외부 프로그램이 모델의 구조화된 출력을 사용하여 함수를 호출한다는 점에 유의하세요.

https://www.youtube.com/watch?v=Qor2VZoBib0

함수 호출 vs JSON 모드

함수 호출 vs JSON 모드

함수 호출의 이점

  • 효율성 증가: 함수를 직접 호출하면 처리 시간이 빨라지고 지연 시간이 줄어들어 즉각적인 조치가 필요한 애플리케이션에 중요합니다.
  • 유연성 향상: 개발자는 전체 애플리케이션을 개편하지 않고도 함수를 쉽게 업데이트하거나 수정할 수 있어 새로운 요구 사항에 더 빠르게 대응할 수 있습니다.
  • 확장성: 기존 인프라를 크게 변경하지 않고도 새로운 함수를 추가하여 확장성을 용이하게 합니다.
  • 개인화된 상호 작용: 예를 들어 사용자의 캘린더에 접근하여 기존 약속과 충돌하지 않는 회의 시간을 제안하는 등 개인화된 사용자 경험을 가능하게 합니다.
  • AI와 실제 작업 연결: AI가 사용자를 대신해 이메일이나 문자 메시지를 보내는 등 실제 작업을 수행할 수 있게 합니다.
  • 복잡한 대화형 에이전트: 관련 응답을 위해 외부 API와 지식 베이스를 사용하여 복잡한 질문에 답변하는 정교한 챗봇을 만들 수 있습니다.

함수 호출의 실제 응용

  • 대화형 에이전트: 최신 정보를 위해 외부 API를 사용하는 고급 챗봇에 사용됩니다.
  • 자연어 이해: 개체 인식 및 감정 분석과 같은 작업을 위해 텍스트에서 구조화된 데이터를 추출합니다.
  • API 통합: LLM이 외부 API와 통합하여 사용자 입력에 따라 데이터를 가져오거나 작업을 수행할 수 있게 합니다.
  • 재정 지원: 실시간 금융 데이터에 접근하고 개인화된 조언을 제공하는 AI 재정 고문을 구축합니다.
  • 지원 티켓 자동화: 상황 인식 규칙을 사용하여 티켓을 처리함으로써 지원 티켓 할당을 자동화합니다.
  • 지식 검색: 학술 문서를 요약하고 질문에 답변하며 인용을 제공하는 함수를 만들어 지식 베이스에서 정보를 검색하는 데 도움을 줍니다.
  • 멀티모달 응용: 이미지, 비디오, 오디오, PDF를 기반으로 함수를 트리거합니다.

Novita AI를 통해 Llama 3.3 70B 함수 호출 사용하기

1단계: API 키 받기 및 설치하기!

“Key Management” 페이지로 들어가면 이미지에 표시된 대로 API key를 복사할 수 있습니다.

API 키

Novita AI의 Model Library 페이지를 찾을 수 있습니다. 프로그래밍 언어에 맞는 패키지 관리자를 사용하여 Novita AI API를 설치하세요.

llama 3.3 70b 코드

가입 시 Novita AI는 시작을 위해 $0.5 크레딧을 제공합니다!

무료 크레딧을 모두 사용하면 비용을 지불하고 계속 사용할 수 있습니다.

2단계: Langchain을 사용하여 함수 호출 구현하기

덧셈과 곱셈 연산을 수행할 수 있는 간단한 수학 애플리케이션을 만들어 보겠습니다.

💡 이 가이드는 편의를 위해 LangChain을 사용하지만, 함수 호출을 구현하는 데 특정 프레임워크가 필요하지는 않습니다. 핵심은 모델이 함수를 이해하고 올바르게 호출하도록 하는 적절한 프롬프트를 설계하는 데 있습니다. LangChain은 구현을 간소화하기 위해 여기서 사용되었습니다.

사전 요구 사항

먼저 필요한 패키지를 설치합니다:

pip install langchain-openai python-dotenv

환경 설정

프로젝트 루트에 .env 파일을 만들고 Novita AI API 키를 추가합니다:

NOVITA_API_KEY=your_api_key_here

구현 단계

1. 도구 정의하기

먼저 LangChain의 @tool 데코레이터를 사용하여 두 가지 간단한 수학 도구를 만들어 보겠습니다:

from langchain_core.tools import tool

@tool
def multiply(x: float, y: float) -> float:
    """Multiply two numbers together."""
    return x * y

@tool
def add(x: int, y: int) -> int:
    """Add two numbers."""
    return x + y

tools = [multiply, add]

2. 도구 실행 함수 만들기

다음으로 도구를 실행하는 함수를 구현합니다:

from typing import Any, Dict, Optional, TypedDict
from langchain_core.runnables import RunnableConfig

class ToolCallRequest(TypedDict):
    name: str
    arguments: Dict[str, Any]

def invoke_tool(
    tool_call_request: ToolCallRequest, 
    config: Optional[RunnableConfig] = None
):
    """Execute the specified tool with given arguments."""
    tool_name_to_tool = {tool.name: tool for tool in tools}
    name = tool_call_request["name"]
    requested_tool = tool_name_to_tool[name]
    return requested_tool.invoke(tool_call_request["arguments"], config=config)

3. LangChain 파이프라인 설정하기

Novita AI의 LLM을 사용하여 도구 호출을 선택하고 준비하는 체인을 만듭니다:

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import render_text_description

def create_chain():
    """Create a chain that uses the specified LLM model to select and prepare tool calls."""
    model = ChatOpenAI(
        model="meta-llama/llama-3.3-70b-instruct",
        api_key=os.getenv("NOVITA_API_KEY"),
        base_url="https://api.novita.ai/v3/openai",
    )
    
    rendered_tools = render_text_description(tools)
    system_prompt = f"""\
    You are an assistant that has access to the following set of tools. 
    Here are the names and descriptions for each tool:

    {rendered_tools}

    Given the user input, return the name and input of the tool to use. 
    Return your response as a JSON blob with 'name' and 'arguments' keys.

    The `arguments` should be a dictionary, with keys corresponding 
    to the argument names and the values corresponding to the requested values.
    """

    prompt = ChatPromptTemplate.from_messages(
        [("system", system_prompt), ("user", "{input}")]
    )

    return prompt | model | JsonOutputParser()

4. 메인 처리 함수 만들기

수학 질의를 처리하는 메인 함수를 구현합니다:

def process_math_query(query: str):
    """Process a mathematical query by using an LLM to select the appropriate tool and execute it."""
    chain = create_chain()
    message = chain.invoke({"input": query})
    result = invoke_tool(message, config=None)
    return message, result

5. 사용 예제

다음은 구현을 사용하는 방법입니다:

if __name__ == "__main__":
    message, result = process_math_query(
        "meta-llama/llama-3.3-70b-instruct", 
        "what's 3 plus 1132"
    )
    print(result)  # Output: 1135

결론적으로, 함수 호출은 AI 시스템이 환경과 상호 작용하는 방식을 빠르게 변화시키고 있으며, 더 실용적이고 효율적이며 사용자 친화적인 애플리케이션을 가능하게 합니다. Llama 3.3 70B와 같은 모델은 이 강력한 기술에 더 쉽게 접근할 수 있는 길을 열어주며, AI 개발에 수많은 가능성을 제시합니다.

자주 묻는 질문

LLM 맥락에서 함수 호출이란 무엇인가요?

함수 호출은 대규모 언어 모델이 특정 작업에 외부 함수나 도구가 필요함을 인식하고 해당 함수를 실행하기 위한 구조화된 데이터를 생성할 수 있게 하는 기술입니다.

함수 호출의 주요 이점은 무엇인가요?

주요 이점으로는 작업 처리 효율성 증가, 개발자가 함수를 쉽게 업데이트할 수 있는 향상된 유연성, 큰 변경 없이 새로운 기능을 추가할 수 있는 확장성, 개인화된 사용자 상호 작용 등이 있습니다.

Llama 3.3은 어떤 언어를 지원하나요?

영어, 프랑스어, 독일어, 힌디어, 이탈리아어, 포르투갈어, 스페인어, 태국어

Novita AI는 개발자가 간단한 API를 사용하여 AI 모델을 쉽게 배포할 수 있도록 하면서, 구축 및 확장을 위한 저렴하고 안정적인 GPU 클라우드를 제공하는 AI 클라우드 플랫폼입니다.

추천 읽을거리