Gemini API를 사용한 함수 호출 소개

Gemini API 함수 호출 기능을 사용하여 모델에 커스텀 함수 정의를 제공할 수 있습니다. 모델은 이러한 함수를 직접 호출하지 않지만 대신 함수 이름과 추천 인수를 지정하는 구조화된 출력을 생성합니다. 그런 다음 함수 이름과 인수를 사용하여 외부 API를 호출하고, 결과 API 출력을 모델에 대한 추가 쿼리에 통합하여 모델이 더 포괄적인 응답을 제공하고 추가 작업을 실행할 수 있도록 할 수 있습니다.

함수 호출을 통해 사용자는 실시간 정보 및 데이터베이스, 고객 관계 관리 시스템, 문서 저장소와 같은 서비스와 상호작용할 수 있습니다. 또한 이 기능은 관련성 있고 문맥에 맞는 답변을 제공하는 모델의 기능을 향상시킵니다. 함수 호출은 외부 시스템과 상호작용하는 데 가장 적합합니다. 모델이 계산을 실행해야 하지만 외부 시스템이나 API가 포함되지 않는 사용 사례인 경우 대신 코드 실행을 사용하는 것이 좋습니다.

함수 호출의 작동 예시는 'light bot' 노트북을 참고하세요.

함수 호출의 작동 방식

함수 선언이라고 하는 프로그래밍 인터페이스를 설명하는 구조화된 쿼리 데이터를 모델 프롬프트에 추가하여 함수 호출 기능을 사용합니다. 함수 선언은 API 함수의 이름을 제공하고, 목적, 지원하는 매개변수, 이러한 매개변수에 관한 설명을 설명합니다. 쿼리의 함수 선언 목록을 모델에 전달하면 모델은 함수 선언과 나머지 쿼리를 분석하여 요청에 대한 응답으로 선언된 API를 사용하는 방법을 결정합니다.

그러면 모델은 사용자의 질문에 응답하기 위해 선언된 함수 중 하나 이상을 호출하는 방법을 지정하는 OpenAPI 호환 스키마의 객체를 반환합니다. 그런 다음 권장되는 함수 호출 매개변수를 사용하여 실제 API를 호출하고 응답을 가져와 사용자에게 응답을 제공하거나 추가 조치를 취할 수 있습니다. 모델은 선언된 함수를 실제로 호출하지 않습니다. 대신 반환된 스키마 객체 매개변수를 사용하여 함수를 호출합니다. Gemini API는 모델이 단일 요청을 기반으로 여러 API 함수 호출을 추천하는 병렬 함수 호출도 지원합니다.

함수 선언

프롬프트에서 함수 호출을 구현하면 하나 이상의 function declarations가 포함된 tools 객체를 만듭니다. JSON을 사용하여 함수를 정의합니다. 특히 OpenAPI 스키마 형식의 선택된 하위 집합을 사용합니다. 단일 함수 선언에는 다음 매개변수가 포함될 수 있습니다.

  • name (문자열): API 호출 내 함수의 고유 식별자입니다.
  • description (문자열): 함수의 목적과 기능에 관한 포괄적인 설명입니다.
  • parameters (객체): 함수에 필요한 입력 데이터를 정의합니다.
    • type(문자열): 전체 데이터 유형(예: object)을 지정합니다.
    • properties (객체): 개별 매개변수를 나열하며 각 매개변수에는 다음이 포함됩니다.
      • type (문자열): string, integer, boolean와 같은 매개변수의 데이터 유형입니다.
      • description (문자열): 매개변수의 목적과 예상 형식을 명확하게 설명합니다.
    • required (배열): 함수가 작동하는 데 필수인 매개변수 이름을 나열하는 문자열 배열입니다.

cURL 명령어를 사용하는 함수 선언의 코드 예시는 함수 호출 예를 참고하세요. Gemini API SDK를 사용하여 함수 선언을 만드는 예시는 함수 호출 튜토리얼을 참고하세요.

함수 선언 권장사항

함수를 요청에 통합할 때는 함수를 정확하게 정의하는 것이 중요합니다. 각 함수는 동작과 모델과의 상호작용을 안내하는 특정 매개변수를 사용합니다. 다음 목록은 functions_declarations 배열에서 개별 함수의 매개변수를 정의하는 방법을 안내합니다.

  • name: 공백, 마침표(.) 또는 대시 (-) 문자가 없는 명확하고 설명적인 이름을 사용하세요. 대신 밑줄 (_) 문자 또는 카멜 케이스를 사용하세요.

  • description: 상세하고 명확하며 구체적인 함수 설명을 제공하고 필요한 경우 예시를 제공합니다. 예를 들어 find theaters 대신 find theaters based on location and optionally movie title that is currently playing in theaters.을 사용하세요. 지나치게 광범위하거나 모호한 설명은 피하세요.

  • properties > type: 강력하게 유형화된 매개변수를 사용하여 모델 할루시네이션을 줄입니다. 예를 들어 매개변수 값이 유한한 집합에서 파생된 경우 설명에 값을 나열하는 대신 enum 필드를 사용합니다(예: "type": "enum", "values": ["now_playing", "upcoming"]). 매개변수 값이 항상 정수이면 유형을 number 대신 integer로 설정합니다.

  • properties > description: 구체적인 예시와 제약 조건을 제공합니다. 예를 들어 the location to search 대신 The city and state, e.g. San Francisco, CA or a zip code e.g. 95616를 사용합니다.

함수 호출을 사용할 때의 권장사항은 권장사항 섹션을 참고하세요.

함수 호출 모드

mode 매개변수를 호출하는 함수를 사용하여 기능의 실행 동작을 수정할 수 있습니다. 다음과 같은 세 가지 모드를 사용할 수 있습니다.

  • AUTO: 기본 모델 동작입니다. 모델이 함수 호출 또는 자연어 응답 중 무엇을 예측할지 결정합니다.
  • ANY: 모델이 항상 함수 호출을 예측하도록 제한됩니다. allowed_function_names가 제공되지 않으면 모델은 사용 가능한 모든 함수 선언 중에서 선택합니다. allowed_function_names가 제공되면 모델은 허용된 함수 집합에서 선택합니다.
  • NONE: 모델에서 함수 호출을 예측하지 않습니다. 이 경우 모델 동작은 함수 선언을 전달하지 않는 것과 동일합니다.

ANY 모드 ('강제 함수 호출')의 사용은 Gemini 1.5 ProGemini 1.5 Flash 모델에서만 지원됩니다.

제공된 경우 모델이 호출할 함수를 제한하는 allowed_function_names 세트를 전달할 수도 있습니다. 모드가 ANY인 경우에만 allowed_function_names를 포함해야 합니다. 함수 이름은 함수 선언 이름과 일치해야 합니다. 모드를 ANY로 설정하고 allowed_function_names를 설정하면 모델이 제공된 함수 이름 세트에서 함수 호출을 예측합니다.

요청 예의 다음 코드 스니펫은 modeANY로 설정하고 허용된 함수 목록을 지정하는 방법을 보여줍니다.

"tool_config": {
  "function_calling_config": {
    "mode": "ANY",
    "allowed_function_names": ["find_theaters", "get_showtimes"]
  },
}

함수 호출 예시

이 섹션에서는 cURL 명령어를 사용하여 함수를 호출할 때 표시되는 메시지의 예를 제공합니다. 예시에는 단일 턴 및 다중 턴 시나리오와 다양한 함수 호출 모드를 사용 설정하는 것이 포함됩니다.

이 기능과 함께 cURL 명령어를 사용하면 함수 및 매개변수 정보가 tools 요소에 포함됩니다. tools 요소의 각 함수 선언에는 함수 이름이 포함되며 OpenAPI 호환 스키마 및 함수 설명을 사용하여 매개변수를 지정합니다.

싱글턴 예

싱글턴은 언어 모델을 한 번 호출하는 경우입니다. 함수 호출의 경우 싱글턴 사용 사례는 모델에 자연어 쿼리와 함수 목록을 제공하는 것일 수 있습니다. 이 경우 모델은 함수 이름, 매개변수, 설명이 포함된 함수 선언을 사용하여 호출할 함수와 이를 호출할 인수를 예측합니다.

다음 curl 샘플은 영화가 재생되는 위치에 관한 정보를 반환하는 함수의 설명을 전달하는 예입니다. 요청에는 find_moviesfind_theaters와 같은 여러 함수 선언이 포함됩니다.

싱글턴 함수 호출 예시 요청

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "Which theaters in Mountain View show Barbie movie?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ]
}'
    

이 curl 예시에 대한 응답은 다음과 유사할 수 있습니다.

싱글턴 함수 호출 curl 예시 응답

[{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_theaters",
              "args": {
                "movie": "Barbie",
                "location": "Mountain View, CA"
              }
            }
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 9,
    "totalTokenCount": 9
  }
}]
    

ANY 모드를 사용하는 싱글턴 예시

다음 curl 예시는 단일 회전 예시와 유사하지만 모드ANY로 설정합니다.

"tool_config": {
  "function_calling_config": {
    "mode": "ANY"
  },
}

ANY 모드를 사용한 싱글턴 함수 호출 (요청)

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "What movies are showing in North Seattle tonight?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ],
  "tool_config": {
    "function_calling_config": {
      "mode": "ANY"
    },
  }
}'
    

응답은 다음과 비슷합니다.

ANY 모드를 사용하는 싱글턴 함수 호출 (응답)

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_movies",
              "args": {
                "description": "",
                "location": "North Seattle, WA"
              }
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
}
    

ANY 모드 및 허용된 함수를 사용하는 싱글턴 예시

다음 curl 예시는 단일 회전 예와 유사하지만 모드ANY로 설정하고 허용되는 함수 목록을 포함합니다.

"tool_config": {
  "function_calling_config": {
    "mode": "ANY",
    "allowed_function_names": ["find_theaters", "get_showtimes"]
  },
}

ANY 모드 및 허용된 함수를 사용하는 싱글턴 함수 호출 (요청)

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "What movies are showing in North Seattle tonight?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ],
  "tool_config": {
    "function_calling_config": {
      "mode": "ANY",
      "allowed_function_names": ["find_theaters", "get_showtimes"]
    },
  }
}'
    

허용된 함수 목록에 없으므로 모델은 find_movies 함수를 예측할 수 없으므로 대신 다른 함수를 예측합니다. 응답은 다음과 유사합니다.

ANY 모드 및 허용된 함수를 사용하는 싱글턴 함수 호출 (응답)

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_theaters",
              "args": {
                "location": "North Seattle, WA",
                "movie": null
              }
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
}
    

멀티턴 예시

다음을 수행하여 멀티턴 함수 호출 시나리오를 구현할 수 있습니다.

  1. 언어 모델을 호출하여 함수 호출 응답을 가져옵니다. 첫 번째 차례입니다.
  2. 첫 번째 차례에서 함수 호출 응답과 해당 함수 호출에서 가져온 함수 응답을 사용하여 언어 모델을 호출합니다. 두 번째 차례입니다.

두 번째 차례의 응답은 첫 번째 차례의 쿼리에 대한 답변을 요약하거나 쿼리에 관한 추가 정보를 가져오는 데 사용할 수 있는 두 번째 함수 호출을 포함합니다.

이 주제에는 다음과 같은 두 가지 멀티턴 curl 예시가 포함됩니다.

이전 차례의 응답 사용

다음 curl 샘플은 이전 싱글턴 예시에서 반환된 함수와 인수를 호출하여 응답을 가져옵니다. 단일 턴 예시에서 반환된 메서드와 매개변수가 이 JSON에 있습니다.

"functionCall": {
  "name": "find_theaters",
  "args": {
    "movie": "Barbie",
    "location": "Mountain View, CA"
  }
}

멀티턴 함수 호출 curl 예시 요청

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Which theaters in Mountain View show Barbie movie?"
    }]
  }, {
    "role": "model",
    "parts": [{
      "functionCall": {
        "name": "find_theaters",
        "args": {
          "location": "Mountain View, CA",
          "movie": "Barbie"
        }
      }
    }]
  }, {
    "role": "user",
    "parts": [{
      "functionResponse": {
        "name": "find_theaters",
        "response": {
          "name": "find_theaters",
          "content": {
            "movie": "Barbie",
            "theaters": [{
              "name": "AMC Mountain View 16",
              "address": "2000 W El Camino Real, Mountain View, CA 94040"
            }, {
              "name": "Regal Edwards 14",
              "address": "245 Castro St, Mountain View, CA 94040"
            }]
          }
        }
      }
    }]
  }],
  "tools": [{
    "functionDeclarations": [{
      "name": "find_movies",
      "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "description": {
            "type": "STRING",
            "description": "Any kind of description including category or genre, title words, attributes, etc."
          }
        },
        "required": ["description"]
      }
    }, {
      "name": "find_theaters",
      "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          }
        },
        "required": ["location"]
      }
    }, {
      "name": "get_showtimes",
      "description": "Find the start times for movies playing in a specific theater",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          },
          "theater": {
            "type": "STRING",
            "description": "Name of the theater"
          },
          "date": {
            "type": "STRING",
            "description": "Date for requested showtime"
          }
        },
        "required": ["location", "movie", "theater", "date"]
      }
    }]
  }]
}'
    

이 curl 예시에 대한 응답에는 find_theaters 메서드 호출의 결과가 포함됩니다. 응답은 다음과 비슷합니다.

멀티턴 함수 호출 curl 예시 응답

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": " OK. Barbie is showing in two theaters in Mountain View, CA: AMC Mountain View 16 and Regal Edwards 14."
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 9,
    "candidatesTokenCount": 27,
    "totalTokenCount": 36
  }
}
    

모델을 여러 번 호출

다음 cURL 예에서는 생성형 AI 모델을 여러 번 호출하여 함수를 호출합니다. 모델이 함수를 호출할 때마다 다른 함수를 사용하여 요청 시 다른 사용자 쿼리에 응답할 수 있습니다.

멀티턴 함수 호출 curl 예시 요청

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Which theaters in Mountain View show Barbie movie?"
    }]
  }, {
    "role": "model",
    "parts": [{
      "functionCall": {
        "name": "find_theaters",
        "args": {
          "location": "Mountain View, CA",
          "movie": "Barbie"
        }
      }
    }]
  }, {
    "role": "user",
    "parts": [{
      "functionResponse": {
        "name": "find_theaters",
        "response": {
          "name": "find_theaters",
          "content": {
            "movie": "Barbie",
            "theaters": [{
              "name": "AMC Mountain View 16",
              "address": "2000 W El Camino Real, Mountain View, CA 94040"
            }, {
              "name": "Regal Edwards 14",
              "address": "245 Castro St, Mountain View, CA 94040"
            }]
          }
        }
      }
    }]
  },
  {
    "role": "model",
    "parts": [{
      "text": " OK. Barbie is showing in two theaters in Mountain View, CA: AMC Mountain View 16 and Regal Edwards 14."
    }]
  },{
    "role": "user",
    "parts": [{
      "text": "Can we recommend some comedy movies on show in Mountain View?"
    }]
  }],
  "tools": [{
    "functionDeclarations": [{
      "name": "find_movies",
      "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "description": {
            "type": "STRING",
            "description": "Any kind of description including category or genre, title words, attributes, etc."
          }
        },
        "required": ["description"]
      }
    }, {
      "name": "find_theaters",
      "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          }
        },
        "required": ["location"]
      }
    }, {
      "name": "get_showtimes",
      "description": "Find the start times for movies playing in a specific theater",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          },
          "theater": {
            "type": "STRING",
            "description": "Name of the theater"
          },
          "date": {
            "type": "STRING",
            "description": "Date for requested showtime"
          }
        },
        "required": ["location", "movie", "theater", "date"]
      }
    }]
  }]
}'
    

멀티턴 함수 호출 curl 예시 응답

[{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_movies",
              "args": {
                "description": "comedy",
                "location": "Mountain View, CA"
              }
            }
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 48,
    "totalTokenCount": 48
  }
}
]
    

권장사항

함수 호출의 정확성과 안정성을 개선하려면 다음 권장사항을 따르세요.

사용자 프롬프트

최상의 결과를 얻으려면 사용자 쿼리 앞에 다음 세부정보를 추가합니다.

  • 모델의 추가 컨텍스트입니다. 예: You are a movie API assistant to help users find movies and showtimes based on their preferences.
  • 함수 사용 방법과 시기에 대한 세부정보나 안내 예를 들면 Don't make assumptions on showtimes. Always use a future date for showtimes.입니다.
  • 사용자 쿼리가 모호한 경우 명확하게 질문하기 위한 안내 예를 들면 Ask clarifying questions if not enough information is available to complete the request.입니다.

샘플링 매개변수

강도 매개변수에는 0 또는 다른 낮은 값을 사용합니다. 이렇게 하면 모델이 보다 신뢰할 수 있는 결과를 생성하도록 할 수 있고 할루시네이션을 줄일 수 있습니다.

API 호출

모델이 주문을 전송하거나, 데이터베이스를 업데이트하거나, 그 밖의 이유로 중대한 결과가 발생할 수 있는 함수의 호출을 제안하는 경우에는 이를 실행하기 전에 사용자와 함께 함수 호출 유효성을 검사합니다.