Перейти к основному содержанию

Сценарии использования

Функция Function Calling позволяет модели взаимодействовать с внешними инструментами, получать информацию в реальном времени или выполнять определенные действия. Эта функция повышает точность данных и расширяет возможности модели: она становится не просто генератором текста, а может поддерживать более динамичные и практичные сценарии применения. Примеры сценариев использования Function Calling:
  • Запрос динамической информации: вызов API для получения динамических данных из внешних систем в реальном времени, таких как погода, новости, котировки акций и т. д. Например, при вызове погодного API для получения текущей погоды, когда пользователь спрашивает о погоде сейчас, модель может сообщить фактические погодные условия на текущий момент, а не предоставить устаревший прогноз.
  • Автоматизация операций с задачами: выполнение определенных действий через вызовы функций, позволяя пользователю запускать автоматизированные операции на стороне бэкенда через диалог. Например, вызов API сайта бронирования билетов для заказа билетов: когда пользователь спрашивает, как купить билет в определенную достопримечательность, модель не просто объясняет, как это сделать, а может помочь пользователю напрямую завершить покупку.

Поддерживаемые модели

Следующие модели поддерживают Function Calling:

Как использовать

  1. Определите функции инструментов, которые должна вызывать модель.
  2. Добавьте в запрос параметр tools, чтобы определить функции, которые должна использовать модель.

Пример использования

Ниже приведен полный пример кода на Python, демонстрирующий использование Function Calling на примере запроса текущей погоды в определенном месте. Подробный формат API для Function Calling см. в API запроса создания чат-диалога.

1. Инициализация клиента

Необходимо инициализировать клиент с помощью вашего API-ключа JieKou AI.
from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "deepseek/deepseek-v3"

2. Определение функции для вызова

Определите функцию, которую должна вызывать модель. Следующий пример Python демонстрирует функцию получения информации о погоде.
# 示例函数,用于模拟获取天气数据。
def get_weather(location):
    """获取指定地点的当前天气"""
    print("调用 get_weather 函数,位置: ", location)
    # 在实际应用中,您需要在这里调用外部天气 API。
    # 这是一个简化示例,返回硬编码数据。
    return json.dumps({"位置": location, "温度": "20 摄氏度"})

3. Создание API-запроса с инструментами и сообщением пользователя

Создайте запрос для вызова API. Этот запрос включает параметр tools, который определяет функцию, используемую моделью, а также сообщение пользователя.
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取一个地点的天气,用户需要首先提供地点",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市信息, 例如:上海",
                    }
                },
                "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": "上海"}', 'name': 'get_weather'}, 'type': 'function'}

4. Ответ на основе результата вызова функции и получение окончательного ответа

Далее обработайте вызов функции, выполните функцию get_weather и отправьте результат обратно модели, чтобы сгенерировать окончательный ответ для пользователя.
# 确保工具调用已从上一步定义
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)
Вывод:
ChatCompletionMessage(content="上海目前的温度是 20 摄氏度。请注意,天气情况可能会随时变化,建议您查看最新的天气预报以获取更准确的信息。", refusal=None, role='assistant', function_call=None, tool_calls=None)

Полный код

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "deepseek/deepseek-v3"

# 示例函数,用于模拟获取天气数据。
def get_weather(location):
    """获取指定地点的当前天气"""
    print("调用 get_weather 函数,位置: ", location)
    # 在实际应用中,您需要在这里调用外部天气 API。
    # 这是一个简化示例,返回硬编码数据。
    return json.dumps({"位置": location, "温度": "20 摄氏度"})

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取一个地点的天气,用户需要首先提供地点",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市信息, 例如:上海",
                    }
                },
                "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())

# 确保工具调用已从上一步定义
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)