DeepSeek V3 함수 호출 사용 방법

DeepSeek V3 함수 호출 사용 방법

주요 내용

기능: 함수 호출을 통해 AI 모델이 외부 도구 및 API와 상호작용하고, 특정 작업을 수행하며, 시스템 운영 및 자동화 워크플로를 위해 실시간 데이터에 접근할 수 있습니다.

지원 모델: DeepSeek V3 시리즈, GPT 시리즈, Gemma 2, Mistral Nemo.

**구현 방법 **: Novita AI를 통해 API를 설치하고 ** 문서**에서 학습할 수 있습니다.

함수 호출은 외부 세계와의 상호작용을 가능하게 하여 대규모 언어 모델(LLM)을 향상시킵니다. 텍스트 생성 외에도 LLM은 작업을 실행하고, 실시간 데이터에 접근하며, 복잡한 작업을 수행할 수 있습니다. AI 지식과 실행 가능한 작업 사이의 다리 역할을 하는 함수 호출은 AI 에이전트나 챗봇이 외부 도구 및 서비스와 상호작용할 수 있게 해줍니다. 강력한 오픈소스 모델인 DeepSeek V3는 뛰어난 성능과 효율성으로 두각을 나타냅니다.

함수 호출이란?

함수 호출은 외부 세계와의 상호작용을 가능하게 하여 대규모 언어 모델(LLM)을 향상시킵니다. 텍스트 생성 외에도 LLM은 작업을 실행하고, 실시간 데이터에 접근하며, 복잡한 작업을 수행할 수 있습니다. AI 지식과 실행 가능한 작업 사이의 다리 역할을 하는 함수 호출은 AI 에이전트나 챗봇이 외부 도구 및 서비스와 상호작용할 수 있게 해줍니다. 강력한 오픈소스 모델인 DeepSeek V3는 뛰어난 성능과 효율성으로 두각을 나타냅니다.

함수 호출의 작동 방식

출처: Google Cloud

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

함수 호출로 해결할 수 있는 문제

실시간 정보 접근

  • 주가 업데이트
  • 현재 날씨 데이터 검색
  • 속보 접근

시스템 상호작용

  • 이메일 발송
  • 소셜 미디어 게시
  • 데이터베이스 쿼리 및 쓰기

워크플로 자동화

  • 데이터 스크래핑 및 처리
  • 다단계 작업 실행
  • 복잡한 분석 자동화

데이터 정확성

  • 정보 적시성 보장
  • 정확한 쿼리 결과 제공
  • 오래된 데이터 오류 감소

향상된 AI 역량

  • 동적 API 통합
  • 맥락에 맞는 작업 실행
  • 실제 세계에서의 작업 수행

사용자 경험 개선

  • 개인화된 응답
  • 대화를 떠나지 않고 작업 완료
  • 외부 서비스의 원활한 통합

Novita AI를 통한 DeepSeek V3 함수 호출 사용 방법

이 가이드는 함수 호출을 사용하여 사용자가 지정한 위치의 현재 날씨 정보를 검색하는 방법을 보여줍니다. 완전한 Python 코드 예제를 단계별로 살펴보겠습니다. 함수 호출의 구체적인 API 형식은 API 참조 채팅 완료 생성을 참조하세요.

referral

지금 Novita AI에서 $20 크레딧 받기!

  • 클라이언트 초기화

먼저 Novita API 키로 클라이언트를 초기화해야 합니다.

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    # Novita AI API 키는 https://novita.ai/settings/key-management 에서 가져오세요.
    api_key="<YOUR Novita AI API Key>",
)

model = "deepseek/deepseek_v3"
  • 호출할 함수 정의

다음으로 모델이 호출할 수 있는 Python 함수를 정의합니다. 이 예제에서는 날씨 정보를 가져오는 함수입니다.

# 날씨 데이터 가져오기를 시뮬레이션하는 예제 함수
def get_weather(location):
    """주어진 위치의 현재 날씨를 검색합니다."""
    print("get_weather 함수 호출 중, 위치: ", location)
    # 실제 애플리케이션에서는 여기서 외부 날씨 API를 호출합니다.
    # 이는 하드코딩된 데이터를 반환하는 단순화된 예제입니다.
    return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
  • 도구 및 사용자 메시지로 API 요청 구성

이제 Novita 엔드포인트에 API 요청을 생성합니다. 이 요청에는 모델이 사용할 수 있는 함수를 정의하는 tools 매개변수와 사용자 메시지가 포함됩니다.

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "위치의 날씨를 가져옵니다. 사용자는 먼저 위치를 제공해야 합니다.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "도시와 주, 예: San Francisco, CA"
                    }
                },
                "required": ["location"]
            },
        }
    },
]

messages = [
    {
        "role": "user",
        "content": "샌프란시스코의 날씨는 어떤가요?"
    }
]

# 요청을 보내고 응답을 출력해 봅시다.
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)

# 프로덕션 환경에서는 응답에 도구 호출이 포함되어 있는지 확인하세요.
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
  • 출력
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
  • 함수 호출 결과로 응답하고 최종 답변 받기

다음 단계는 함수 호출을 처리하고 get_weather 함수를 실행한 후 결과를 모델에 다시 보내 사용자에게 최종 응답을 생성하는 것입니다.

# 이전 단계에서 tool_call이 정의되었는지 확인
if tool_call:
    # 어시스턴트의 도구 호출 메시지로 대화 기록 확장
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # 함수를 실행하고 응답 받기
        function_response = get_weather(
            location=function_args.get("location"))
        # 함수 응답을 메시지에 추가
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # 이제 함수 결과를 포함한 모델의 최종 응답 받기
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # 참고: 여기에는 tools 매개변수를 포함하지 마세요.
    )
    print(answer_response.choices[0].message)
  • 출력
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}

함수 호출의 일반적인 문제 및 모범 사례

AI 모델의 함수 호출은 도전 과제와 기회를 함께 제공합니다. 다음은 일반적인 문제와 그에 대응하는 모범 사례를 비교한 것입니다.

  • 부정확한 해석과 명확한 프롬프트

문제: 모델이 사용자의 의도를 부정확하게 해석하여 불필요하거나 잘못된 함수 호출을 유발할 수 있습니다.

모범 사례: 챗봇의 목적과 사용 가능한 함수를 설명하는 명확하고 간결한 시스템 프롬프트를 제공합니다. 직접 응답과 적절한 함수 호출을 모두 보여주는 멀티샷 턴을 사용합니다.

  • 복잡한 워크플로 관리

문제: 여러 상호 의존적 단계가 있는 복잡한 워크플로를 관리하는 데 어려움이 있습니다.

모범 사례: 더 복잡한 방법으로 넘어가기 전에 프롬프트 엔지니어링부터 시작합니다. 파인튜닝 시 양보다 질에 집중하고 소수의 고품질 예제로 시작합니다.

  • 미묘한 의사 결정

문제: 함수 출력과 외부 데이터를 해석하여 미묘한 의사 결정을 내리는 데 어려움이 있습니다.

모범 사례: 필요할 때 검색 증강 생성(RAG)을 사용하여 컨텍스트를 주입합니다. 파인튜닝과 RAG 같은 기술을 결합하여 각각의 강점과 약점을 균형 있게 활용합니다.

  • 데이터 구조 복잡성

문제: 그래프나 중첩 개체와 같이 진화하는 복잡한 데이터 구조를 다루는 데 한계가 있습니다.

모범 사례: 깨끗한 코드와 성능의 균형을 맞추며 적절한 추상화 수준을 선택합니다. 함수를 간결하고 집중적으로 유지하여 효율성과 가독성을 개선합니다.

  • 레거시 시스템 통합

문제: 복잡하고 모호한 레거시 시스템과의 통합에 어려움을 겪습니다.

모범 사례: 프로파일링을 통해 식별된 가장 자주 호출되는 함수나 핫스팟을 최적화합니다. 레거시 시스템을 다룰 때 오버헤드를 줄이기 위해 배치 작업을 고려합니다.

  • 안전 문제

문제: 정교한 판단 없이 권한이 있는 함수를 실행할 때 안전 문제가 발생합니다.

모범 사례: 예상치 못한 API 응답을 관리하기 위해 견고한 오류 처리 메커니즘을 구현합니다. 사용자 신뢰와 민감한 정보를 보호하기 위해 강력한 데이터 보호 조치와 규정 준수를 보장합니다.

  • 확장성 및 성능

문제: 미션 크리티컬 시스템에 필요한 엄격한 확장성, 가용성, 성능 요구 사항을 충족할 수 있는 신뢰성이 입증되지 않았습니다.

모범 사례: 컴파일러 최적화를 활용하고 낮은 온도 설정을 사용하여 더 집중적이고 결정론적인 출력을 얻습니다. 핫스팟을 프로파일링하고 최적화하여 가장 큰 성능 향상을 얻습니다.

  • 함수 호출 과의존

문제: 모델이 필요하지 않은 경우에도 함수를 불필요하거나 부적절하게 호출할 수 있습니다.

모범 사례: 함수 호출이 구현되는 방식을 신중하게 관리합니다. 외부 서비스를 사용할 수 없는 경우에도 시스템 안정성을 유지하기 위해 적절한 오류 처리 및 대체 메커니즘을 마련합니다.

  • 프라이버시 및 투명성 문제

문제: LLM이 사용자를 대신하여 결정을 내리거나 조치를 취할 때 투명성과 사용자 동의에 관한 윤리적 문제가 발생합니다.

모범 사례: 명확한 문서화와 사용자 동의 메커니즘을 구현합니다. 데이터 처리가 책임감 있게 이루어지고 GDPR 또는 HIPAA와 같은 개인정보 보호 규정을 준수하도록 합니다.

결론적으로, 함수 호출은 LLM의 중요한 발전으로, 기업 데이터 및 시스템과의 원활한 상호작용을 가능하게 하고 개발자가 더욱 동적이고 기능적인 애플리케이션을 구축할 수 있도록 합니다. 외부 애플리케이션, 시스템 및 API와 쉽게 통합됨으로써 LLM은 매우 다재다능해지며, 다양한 작업을 효율적으로 처리할 수 있게 됩니다. DeepSeek V3와 같은 모델이 이러한 혁신적인 기술에 대한 간소화된 접근을 제공하며 AI 혁신의 무한한 가능성을 열어가고 있습니다.

자주 묻는 질문

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

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

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

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

Novita AI는 AI 야망을 실현하는 올인원 클라우드 플랫폼입니다. 통합 API, 서버리스, GPU 인스턴스 — 필요한 비용 효율적인 도구를 제공합니다. 인프라 걱정 없이 무료로 시작하고 AI 비전을 현실로 만드세요.

추천 자료