Вызов функций OpenAI
Функциональный вызов OpenAI V2 Особенности
Основная цель Function calling V2 - дать моделям OpenAI возможность взаимодействовать с внешним миром, что отражено в следующих двух основных функциях:
- Получение данных - реализация вызова функций в RAG.
- По сути, это RAG (Retrieval Augmented Generation). Вызов функций предоставляет мощный механизм для реализации генерации улучшений при поиске (RAG). Модель может получать актуальную и релевантную информацию из внешних источников данных (например, баз знаний, API и т. д.), вызывая предопределенные функции и включая ее в свои собственные генерируемые ответы.
- Устранение информационного отставания и ограниченности знаний. Традиционные знания больших языковых моделей статичны; вызов функций устраняет этот пробел, позволяя моделям получать доступ к информации в реальном времени или знаниям, специфичным для конкретной области, чтобы генерировать более точные и полные ответы.
- Пример использования.
- Запрос информации в режиме реального времени. Например, получить данные о текущей погоде, последние новости, цены на акции и т.д.
- Поиск по базе знаний. Например, запрос к внутренней базе знаний компании, документации по продуктам, FAQ и т. д., чтобы предоставить пользователям более профессиональные ответы.
- Интеграция данных по API. Например, получить информацию о продукте, динамике полета, геолокационной информации и т. д. из внешних API, чтобы обогатить содержание диалога.
- Реализация. Определяемые разработчиком функции для поиска данных (например.
get_weather
,search_knowledge_base
), и вtools
предоставленные модели в параметрах. Когда модель определяет, что требуется внешняя информация, она вызывает эти функции и получает результаты, которые затем интегрируются в окончательный ответ.
- Действия - автоматизация, управляемая моделями.
- Не только предоставление информации, но и практика "вождения руками". Вызов функций не ограничивается поиском информации, а идет дальше, позволяя модели управлять внешними системами для выполнения реальных операций, обеспечивая более глубокую автоматизацию и сценарии применения.
- Повышение полезности и эффективности применения моделей. Это позволяет моделям быть не просто партнерами по диалогу, но и интеллектуальными ассистентами, помогающими пользователям решать самые разные задачи.
- Пример использования.
- Автоматизированные рабочие процессы. Например, отправка форм, создание событий в календаре, отправка электронных писем, бронирование авиабилетов и отелей и так далее.
- Контроль за применением. Например, изменение состояния приложения (UI/фронт-энд или бэк-энд), управление устройствами "умного дома" и многое другое.
- Агентский рабочий процесс. Например, в зависимости от содержания разговора он может быть передан в более специализированную систему обслуживания клиентов или запустить более сложные автоматизированные процессы.
- Реализация. Определяемые разработчиком функции для выполнения определенных операций (например.
send_email
,create_calendar_event
), и вtools
предоставленные модели в параметрах. Модель может вызывать эти функции, основываясь на намерениях пользователя, и передавать соответствующие параметры для запуска действия.
Другие ключевые особенности Function calling V2 (поддержка сбора данных и действий по выполнению).
tools
Параметры и схема функции. Обеспечивает структурированный способ определения и управления функциями, которые может вызывать модель, включая имена функций, описания и определения параметров, гарантируя, что модель точно понимает и вызывает функции.- Строгий режим. Повышение надежности и точности вызовов функций за счет того, что модель выводит вызовы функций, строго соответствующие заданным шаблонам.
- Выбор инструмента и управление параллельными вызовами функций. Обеспечивает более тонкий контроль, позволяя разработчикам адаптировать поведение вызываемых моделей функций к сценариям приложения, например, принудительно вызывать определенные функции или ограничивать количество параллельных вызовов.
- Потоковое вещание. Улучшение пользовательского опыта, вы можете показать процесс заполнения параметров функции в реальном времени, так что пользователи могут понять мыслительный процесс модели более интуитивно.
Резюме.
Основная ценность Function calling V2 заключается в том, что по Сбор данных (реализация RAG) ответить пением выполнить действие Эти две функции значительно расширяют границы применения больших языковых моделей. Они не только позволяют модели получать доступ к внешней информации и использовать ее для генерации более разумных и практичных ответов, но и управляют внешними системами для выполнения операций и достижения более высокого уровня автоматизации, закладывая основу для создания более мощных приложений ИИ. Сбор данных как реализация RAG - ключевая возможность Function calling V2 в наукоемких приложениях.
Вот официальная версия OpenAI вызов функции(Вызов функции) Новая версия описания, позволяющая модели получать данные и выполнять операции.
вызов функции предоставляет мощный и гибкий способ взаимодействия моделей OpenAI с вашим кодом или внешними сервисами и имеет два основных варианта использования:
Получение данных | Получение последней информации и ее интеграция в ответы модели (RAG). Это полезно для поиска в базе знаний и получения конкретных данных (например, текущих данных о погоде) из API. |
исполняемая операция | Выполняйте такие действия, как отправка форм, вызов API, изменение состояния приложения (UI/фронт-энд или бэк-энд) или выполнение прокси-действий рабочего процесса, например, передача диалогов. |
Если вы хотите сделать толькоСоздание модели JSONОбратитесь к документации OpenAI по структурированным выходным данным, чтобы убедиться, что модель всегда генерирует выходные данные, которые соответствуют предоставленным вами. Схема JSON Ответ.
Узнать погоду
Пример вызова функции с использованием функции get_weather
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定位置的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
}
},
"required": [
"location"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
экспорт
[{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
}]
почта
Пример вызова функции с использованием функции send_email
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "send_email",
"description": "向给定的收件人发送包含主题和消息的电子邮件。",
"parameters": {
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "收件人的电子邮件地址。"
},
"subject": {
"type": "string",
"description": "电子邮件主题行。"
},
"body": {
"type": "string",
"description": "电子邮件消息正文。"
}
},
"required": [
"to",
"subject",
"body"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你能给 ilan@example.com 和 katia@example.com 发送邮件说“hi”吗?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
экспорт
[
{
"id": "call_9876abc",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"ilan@example.com\",\"subject\":\"Hello!\",\"body\":\"Just wanted to say hi\"}"
}
},
{
"id": "call_9876abc",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"katia@example.com\",\"subject\":\"Hello!\",\"body\":\"Just wanted to say hi\"}"
}
}
]
Поиск в базе знаний
Пример вызова функции с использованием функции search_knowledge_base
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "search_knowledge_base",
"description": "查询知识库以检索关于某个主题的相关信息。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "用户问题或搜索查询。"
},
"options": {
"type": "object",
"properties": {
"num_results": {
"type": "number",
"description": "要返回的排名靠前的结果数量。"
},
"domain_filter": {
"type": [
"string",
"null"
],
"description": "可选的域,用于缩小搜索范围(例如,“finance”,“medical”)。 如果不需要,则传递 null。"
},
"sort_by": {
"type": [
"string",
"null"
],
"enum": [
"relevance",
"date",
"popularity",
"alphabetical"
],
"description": "如何对结果进行排序。 如果不需要,则传递 null。"
}
},
"required": [
"num_results",
"domain_filter",
"sort_by"
],
"additionalProperties": False
}
},
"required": [
"query",
"options"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你能在 AI 知识库中找到关于 ChatGPT 的信息吗?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
экспорт
[{
"id": "call_4567xyz",
"type": "function",
"function": {
"name": "search_knowledge_base",
"arguments": "{\"query\":\"What is ChatGPT?\",\"options\":{\"num_results\":3,\"domain_filter\":null,\"sort_by\":\"relevance\"}}"
}
}]
в общих чертах
Вы можете сделать модель OpenAI доступной, предоставив ей доступ к инструменты чтобы расширить его функциональность.инструменты Она может принимать две формы:
вызов функции | Код, определяемый разработчиком. |
Инструменты для хостинга | Инструменты, созданные OpenAI. (например, поиск файлов, интерпретатор кода) доступны только в API Assistants. |
В этом руководстве вы узнаете, как получить максимальную отдачу от вызов функции Предоставьте модели доступ к собственным функциям. Основываясь на подсказках и сообщениях системы, модель может принять решение о вызове этих функций -Вместо (или в дополнение к) генерации текста или звука.
После этого нужно выполнить код функции, отправить результаты, и модель интегрирует их в свой окончательный ответ.

функция выборки (вычисления)
Давайте рассмотрим возможность разрешить модели использовать следующее определенное вещественное получить_погоду Шаги функции:
Пример функции get_weather, реализованной в вашей кодовой базе
import requests
def get_weather(latitude, longitude):
response = requests.get(f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m")
data = response.json()
return data['current']['temperature_2m']
В отличие от предыдущей схемы, эта функция требует точного широта ответить пением долготаи не общий местоположение Параметры. (Однако наша модель может автоматически определять координаты многих мест!)
шаг вызова функции
Используйте определенную модель вызова функций - вместе с вашими системными и пользовательскими сообщениями.
Шаг 1: Вызовите модель с помощью определенного инструмента get_weather
from openai import OpenAI
import json
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定坐标的当前温度,单位为摄氏度。",
"parameters": {
"type": "object",
"properties": {
"latitude": {"type": "number"},
"longitude": {"type": "number"}
},
"required": ["latitude", "longitude"],
"additionalProperties": False
},
"strict": True
}
}]
messages = [{"role": "user", "content": "今天巴黎的天气怎么样?"}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
Шаг 2: Модель решает, какую функцию вызвать - модель возвращает имя и входные параметры.
completion.choices[0].message.tool_calls
[{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"latitude\":48.8566,\"longitude\":2.3522}"
}
}]
Шаг 3: Выполнение кода функции - разбор ответа модели и обработка вызова функции
Выполните функцию get_weather
tool_call = completion.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
result = get_weather(args["latitude"], args["longitude"])
Шаг 4: Предоставьте результаты модели - чтобы модель могла интегрировать их в свой окончательный ответ.
Предоставьте результаты и вызовите модель снова
messages.append(completion.choices[0].message) # append model's function call message
messages.append({ # append result message
"role": "tool",
"tool_call_id": tool_call.id,
"content": str(result)
})
completion_2 = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
Шаг 4: Реакция модели - интегрируйте результаты в ее выходной сигнал.
completion_2.choices[0].message.content
"巴黎当前温度为 14°C (57.2°F)。"
Определение функций
функция может быть добавлена к каждому API-запросу инструменты параметр в функция Объект устанавливается в виде предмета.
Функция определяется схемой, которая информирует модель о том, что делает функция и какие входные параметры ожидаются. Она содержит следующие поля:
поле | описания |
---|---|
имя | Имя функции (например, get_weather) |
описание | Подробная информация о том, когда и как использовать функции |
параметры | Определите JSON-схему входных параметров функции |
Образцы функций
{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
],
"description": "温度将以什么单位返回。"
}
},
"required": [
"location",
"units"
],
"additionalProperties": False
},
"strict": True
}
}
по причине параметры определена схемой JSON, поэтому вы можете воспользоваться множеством ее богатых возможностей, таких как типы свойств, перечисления, описания, вложенные объекты и рекурсивные объекты.
(Необязательно) Вызовы функций с помощью pydantic и zod
Хотя мы поощряем вас определять режимы функций напрямую, наш SDK предоставляет вспомогательные средства, которые можно использовать для преобразования pydantic ответить пением zod Объекты преобразуются в узоры. Не все pydantic ответить пением zod Поддерживаются функции.
Определение объектов для представления моделей функций
from openai import OpenAI, pydantic_function_tool
from pydantic import BaseModel, Field
client = OpenAI()
class GetWeather(BaseModel):
location: str = Field(
...,
description="城市和国家,例如 Bogotá, Colombia"
)
tools = [pydantic_function_tool(GetWeather)]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
Лучшие практики определения функций
Напишите четкие и подробные названия функций, описания параметров и инструкции.
- Четко опишите, для чего используется функция и каждый параметр (и его формат), а также что представляет собой выход.
- Используйте системные подсказки, чтобы описать, когда (и когда не) использовать каждую функцию. Как правило, следует указать модели, что именно нужно делать.
- Содержит примеры и крайние случаи, особенно при исправлении повторяющихся сбоев. (Внимание: Добавление примеров может ухудшить производительность модели вывода).
Применять передовые методы разработки программного обеспечения.- Сделайте функции понятными и интуитивно понятными. (Принцип наименьшего удивления)
- Используйте перечисления и объектные структуры, чтобы сделать недействительные состояния непредставимыми. (Например.toggle_light(on: bool, off: bool) (Разрешены недействительные звонки)
- Пройдите тест на стажера. Может ли стажер/человек правильно использовать функцию, используя только то, что вы дали модели? (Если нет, какие вопросы они вам зададут? Добавьте ответ к подсказке).
Минимизируйте нагрузку на модель и используйте код везде, где это возможно.
- Не позволяйте модели заполнять параметры, которые вам уже известны. Например, если вы уже получили меню на основе предыдущего идентификатор заказаЕсли вы не хотите устанавливать идентификатор заказа Параметры - вместо установки параметров submit_refund()и передал код идентификатор заказа.
- Объедините функции, которые всегда вызываются последовательно. Например, если вы всегда вызываете функции в query_location() после чего следует вызов mark_location()Просто перенесите логику маркировки в вызов функции запроса.Для большей точности сохраняйте небольшое количество функций.
- Оцените свою работу, используя разное количество функций.
- Цель состоит в том, чтобы одновременно выполнять не более 20 функций, но это лишь мягкая рекомендация.
Использование ресурсов OpenAI.
- существовать Игровая площадка Генерация и итерация шаблонов функций в
- Рассмотрите возможность тонкой настройки для повышения точности вызова функций для большого количества функций или сложных задач.
Использование токенов
На нижнем уровне функции внедряются в системные сообщения в том синтаксисе, которому обучена модель. Это означает, что функции учитываются в контекстных ограничениях модели и используются в качестве входных данных Токен Заряды. Если вы столкнулись с проблемой лимита токенов, мы рекомендуем ограничить количество функций или длину описания, которое вы предоставляете для аргументов функции.
Если в спецификации инструмента определено много функций, вы также можете использовать тонкую настройку, чтобы уменьшить количество используемых Token.
Обработка вызовов функций
Когда модель вызывает функцию, вы должны выполнить ее и вернуть результат. Поскольку ответ модели может содержать ноль, один или несколько вызовов, лучше всего предположить, что вызовов несколько.
Ответ содержит вызовы_инструментов массивы, каждый из которых имеет id(будет использоваться позже для отправки результатов функции) и один, содержащий имя и JSON-кодировка аргументы (используется в форме номинального выражения) функция.
Пример ответа с несколькими вызовами функций
[
{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
},
{
"id": "call_67890abc",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Bogotá, Colombia\"}"
}
},
{
"id": "call_99999def",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"bob@email.com\",\"body\":\"Hi bob\"}"
}
}
]
Выполните вызов функции и добавьте результат
for tool_call in completion.choices[0].message.tool_calls:
name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
result = call_function(name, args)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
В приведенном выше примере у нас есть гипотетическая функция call_function для маршрутизации каждого вызова. Это одна из возможных реализаций:
Выполнение вызовов функций и добавление результатов
def call_function(name, args):
if name == "get_weather":
return get_weather(**args)
if name == "send_email":
return send_email(**args)
Форматирование результатов
Результат должен быть строкой, но формат зависит от вас (JSON, код ошибки, обычный текст и т. д.). Модель интерпретирует строку так, как нужно.
Если ваша функция не имеет возвращаемого значения (например. send_email), просто верните строку, указывающую на успех или неудачу. (Например "успех")
Интегрируйте результаты в ответные меры
Добавьте результаты к вашему сообщения После этого вы можете отправить их обратно модели для окончательного ответа.
Отправьте результаты обратно в модель
completion = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
окончательный ответ
"巴黎大约 15°C,Bogotá 大约 18°C,并且我已经向 Bob 发送了那封邮件。"
Дополнительные конфигурации
Выбор инструмента
По умолчанию модель сама определяет, когда и сколько инструментов использовать. Вы можете использовать выбор инструмента Параметр обеспечивает определенное поведение.
- Авто: (по умолчанию (настройка)) вызывает ноль, одну или несколько функций. выбор_инструмента: "авто"
- Требуется: вызов одной или нескольких функций. tool_choice: "required"
- Принудительная функция: точный вызов определенной функции. tool_choice: { "type": "function", "function": { "name": "get_weather"}}

Вы также можете установить выбор инструмента установленный на "нет"для моделирования поведения не проходящей функции.
параллельный вызов функции
Модель может выбрать вызов нескольких функций в одном раунде. Вы можете сделать это, установив параметр параллельные_инструменты_вызовов установленный на ложь для предотвращения этого, что обеспечит вызов ровно нуля или одного инструмента.
Внимание: В настоящее время, если модель вызывает более одной функции в раунде, строгий modev отключает эти вызовы.
строгая модель
главнокомандующий (военный) строго установленный на правда будет гарантировать, что вызовы функций будут надежно придерживаться шаблона функции, а не делать все возможное. Мы рекомендуем всегда включать строгий режим.
В нижней части строгий режим реализуется с помощью нашей функции структурированных выводов, что вводит несколько требований:
- в отношении параметры для каждого объекта вadditionalProperties должен быть установлен на ложь.
- Все поля в свойствах должны быть обозначены как требуется.
Вы можете сделать это, добавив null действовать как тип для указания необязательных полей (см. пример ниже).
Включить строгий режим
{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": ["string", "null"],
"enum": ["celsius", "fahrenheit"],
"description": "温度将以什么单位返回。"
}
},
"required": ["location", "units"],
"additionalProperties": False
}
}
}
Отключить строгий режим
{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度将以什么单位返回。"
}
},
"required": ["location"],
}
}
}
Для всех паттернов, созданных в playground, включен строгий режим.
Хотя мы рекомендуем включать строгий режим, он имеет некоторые ограничения:
- Некоторые возможности схемы JSON не поддерживаются. (См. раздел "Поддерживаемые схемы").
- Шаблоны подвергаются дополнительной обработке при первом запросе (и затем кэшируются). Если ваш шаблон меняется от запроса к запросу, это может привести к увеличению задержки.
- Шаблоны кэшируются для повышения производительности и не имеют права на нулевое хранение данных.
потоковое вещание
Потоковую передачу можно использовать для отображения прогресса, показывая функции, которые вызываются по мере заполнения моделью своих параметров, или даже отображая параметры в реальном времени.
Потоковая передача вызова функции очень похожа на потоковую передачу обычного ответа: вы должны поток установленный на правда и получить данные с помощью дельта Блок объектов.
Потоковые вызовы функций
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定位置的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
}
},
"required": ["location"],
"additionalProperties": False
},
"strict": True
}
}]
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools,
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta
print(delta.tool_calls)
Вывод delta.tool_calls
[{"index": 0, "id": "call_DdmO9pD3xa9XTPNJ32zg2hcA", "function": {"arguments": "", "name": "get_weather"}, "type": "function"}]
[{"index": 0, "id": null, "function": {"arguments": "{\"", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "location", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "\":\"", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "Paris", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": ",", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": " France", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "\"}", "name": null}, "type": null}]
null
Однако вместо того, чтобы объединять блоки в один содержание строку, а вместо этого объединяет блоки в кодированную аргументы Объект JSON.
Когда модель вызывает одну или несколько функций, каждая из них дельта (используется в форме номинального выражения) вызовы_инструментов поля будут заполнены. Каждый вызов_инструмента Содержит следующие поля:
поле | описания |
---|---|
индекс | Идентифицирует вызов функции, соответствующей дельте |
id | Идентификатор вызова инструмента. |
функция | Дельта вызова функции (имя и аргументы) |
тип | тип вызова_инструмента (всегда функция для вызовов функций) |
Многие из этих полей доступны только при первом вызове каждого инструмента дельта Установить в, например. id, ифункция.имя ответить пением тип.
Вот фрагмент кода, который демонстрирует, как дельта Агрегат для окончательного вызовы_инструментов в объекте.
Инструмент накопления_колл дельта
final_tool_calls = {}
for chunk in stream:
for tool_call in chunk.choices[0].delta.tool_calls or []:
index = tool_call.index
if index not in final_tool_calls:
final_tool_calls[index] = tool_call
final_tool_calls[index].function.arguments += tool_call.function.arguments
Накопленные final_tool_calls[0]
{
"index": 0,
"id": "call_RzfkBpJgzeR0S242qfvjadNe",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
}
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...