우잉's Development

[LLM 기본] 모델 선택 기준 & Function Calling 본문

Deep learning/LLM

[LLM 기본] 모델 선택 기준 & Function Calling

우잉이 2023. 9. 6. 15:36
728x90
반응형

모델 선택 기준

  • 비용
    - 비용은 선택한 모델이 사용하는 토크나이저를 사용해서 계산해야하며 모델에 따라 비용이 다릅니다. 
    - 정확히 계산하고자 한다면 각 모델에서 제공하는 토크나이저로 계산하거나, API 호출로 출력되는 토큰수를
      참고해야함.
  • 속도
  • 정확도 (성능)
    - 정확도에 대한 다양한 벤치마크가 존재하지만, 벤치마크마다 강점이 있는 모델이 따로 있는 경우가 있다.
    - 점수가 높다고 하더라도 실제 사용하는 사례에서는 원하는 성능이 나오지 않을 수 있다.
    - 현재 (2023.07.01)까지는 GPT-4, gpt-3.5-turbo, Claude정도가 실사용이 가능한 수준이다. 
  • 경향성
    - 모델 선택시 정확한 정보 제공이 필요한 것이 아니면 경향성을 보고 판단
    ex) gpt-3.5-turbo: 구어체 의 채팅형에 최적화 하여 튜닝
          GPT-4 : 어느정도 구조화된 리포트 형태로 생성하는 경향이 있음.
    - 모델이 업데이트 될 때 마다 경향성이 약간씩 변경되서 지속적으로 모니터링 할 필요가 있다.
  • 안전성
    - OpenAI의 경우 ModerationsAPI 제공 MS Azure의 경우 기본적으로 컨텐츠 필터링이 적용되어 있으며, 
      해제를 원하면 승인을 받아야함.
  • API 안정성
    - OpenAI 보다 MS가 조금 더 안정성이 높다는 의견이 있지만, 모델이 업데이트 될 때 초반에는 한동안 안정성이
      급격히 떨어지는 경우가 존재
    - 대부분 안정성이 높지 않으므로 실서비스 적용시 Failover등의 정책을 면밀히 고려
  • 보안
    - 악의적인 공격이나 비윤리적인 사용을 방지하기 위해 대부분 30일간 로그를 남겨두지만 API로 들어오는데이터는
      학습에 사용하지 않음.
    - 극도로 민감한 데이터를 사용해 결리된 온프라미스 네트워크 환경이 필요하다면 커스텀 LLM을 사용해야함.
    - 그러나 운영비용이 매우 크거나 비효율적일 것이므로 면밀하게 예상비용을 계산해야한다.
    - 사용처에 따른 비용 효율과 성능에 대한 평가를 많은 시간과 비용을 들여 진행할 필요가 있다.
정확도가 높으며 속도가 빨라야하지만 그만큼 비용이 많이 듭니다.

Function Calling (Tooling)

  1. 정의 : GPT모델에 호출 할 수 있는 함수(기능)를 설정해두면, 사용자의 요청이 해당 기능이 필요한 요청이라면, 해당 함수 호출하는 기능
  2. 특징 :  직접 함수를 호출하는 것은 아니고, 어떤함수와 파라미터가 필요한지 JSON형식으로 응답. 
  3. 기본 사용 예시
{
	"name" : "get_current_weather",
    "description" : "주어진 위치의 현재 날씨를 가져옵니다.",
	
    "parameters" : {
    	"type" : "object",
        "properties":{
        	"location":{
            	"type":"string",
                "description": "도시 또는 지역, 예) 서울",
             },
          	"unit":{ "type": "string", "enum":["celsius", "fahrenheit"]},
        },
        "required": {"location"],
    },
}

     - name : 필요한 기능 확인시 반환할 함수명

     - description : 해당 함수에 대한 설명

     - parameters : 함수 호출에 필요한 파라미터 정의

     - description (파라미터) : 이 설명에 따라 파라미터를 요청하거나 생성

     - required : 함수 호출을 만들기 위해 필요한 필수 정보

 4. SQL Builder 

{
        "name": "ask_database",
        "description": "Use this function to answer user questions about music. Input should be a fully formed SQL query.",
        "parameters": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": f"""
                            SQL query extracting info to answer the user's question.
                            SQL should be written using this database schema:
                            {database_schema_string}
                            The query should be returned in plain text, not in JSON.
                            """,
                }
            },
            "required": ["query"],
        },
    }

5. JSON formatter

주의사항

  1. 프롬프트 인젝션
    - 프롬프트 인젝션을 통해 민감정보를 추출하거나, RCE(Remote Code Execution) 공격을 하는 것을 사전에 고려하여 방어해야 함.
    - 사용자의 아이디나 비밀번호등 민감정보가 필요한 함수의 경우, 파라미터 설정에 넣지 않도록 주의
    - 응답 받은 함수를 바로 실행하지 말고, 보안상 문제 없는지 정상적인 파라미터와 함께 호출하도록 응답되었는지를 확인한 후 실행
    - 응답 받은 함수를 바로 실행하지 말고, 보안상 문제 없는지, 정상적인 파라미터와 함께 호출하도록 응답되었는지를 확인한 후 실행
  2. 호출 오류
    - 모든 요구사항에 대해 항상 정확하게 응답하는 것은 아니여서 원하지 않은 경우에도 호출이 일어날 수 있다.
    - GPT가 설정하지 않은 함수라도 설정내용으로 추측해, 존재하지 않는 함수를 호출하는 경우가 발생할 수 있다. 
    - 요청사항을 잘못 해석해 파라미터를 잘못설정해 응답하는 경우가 발생할 수 있다.
    - 응답 받은 파라미터 값을 항상 확인하고 실행
    - 중요한 동작을 실핼 할 때는 사용자에게 실행할 액션을 보여주고 확인한 뒤 실행 
    - 정밀도가 높아야 하는 경우에는 되도록 gpt-4를 사용 

 

 

 

 

 

 

 

728x90
반응형
Comments