Поделиться через


Вызов функции Azure OpenAI Assistants

API помощников поддерживает вызов функций, что позволяет описывать структуру функций помощнику, а затем возвращать функции, которые необходимо вызвать, вместе с их аргументами.

Примечание.

  • Поиск по файлам может получать до 10 000 файлов на помощника — 500 раз больше, чем раньше. Это быстрый процесс, который поддерживает параллельные многопоточные поисковые запросы, а также функции расширенного повторного ранжирования и перезаписи запросов.
    • Векторное хранилище — это новый объект в API. После добавления файла в векторное хранилище он автоматически анализируется, делится на блоки и кодируется в векторном представлении, чтобы подготовить к поиску по содержимому. Векторные хранилища можно использовать между разными помощниками и потоками, упрощая управление файлами и выставление счетов.
  • Мы добавили поддержку tool_choice параметра, который можно использовать для принудительного использования определенного средства (например, поиска файлов, интерпретатора кода или функции) в определенном запуске.

Поддержка вызовов функций

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

Страница моделей содержит самые актуальные сведения о регионах и моделях, где поддерживаются помощники.

Чтобы использовать все функции вызова функций, включая параллельные функции, необходимо использовать модель, выпущенную после 6 ноября 2023 года.

Версии API

Версии API, начиная с 2024-02-15-preview.

Пример определения функции

Примечание.

  • Мы добавили поддержку tool_choice параметра, который можно использовать для принудительного использования определенного средства (например file_search, code_interpreterили а function) в определенном запуске.
  • Срок действия истекает десять минут после создания. Не забудьте отправить выходные данные средства до истечения этого срока действия.
  • Вы также можете выполнять вызов функций с помощью приложений логики Azure
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-07-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
    )

assistant = client.beta.assistants.create(
  name="Weather Bot",
  instructions="You are a weather bot. Use the provided functions to answer questions.",
  model="gpt-4", #Replace with model deployment name
  tools=[{
      "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Get the weather in location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {"type": "string", "description": "The city name, for example San Francisco"}
        },
        "required": ["location"]
      }
    }
  }]
)

Чтение функций

При запуске запуска с пользовательским сообщением, которое активирует функцию, запуск введет состояние ожидания. После обработки выполнение введет состояние requires_action, которое можно проверить, извлекая запуск.

{
  "id": "run_abc123",
  "object": "thread.run",
  "assistant_id": "asst_abc123",
  "thread_id": "thread_abc123",
  "status": "requires_action",
  "required_action": {
    "type": "submit_tool_outputs",
    "submit_tool_outputs": {
      "tool_calls": [
        {
          "id": "call_abc123",
          "type": "function",
          "function": {
            "name": "get_weather",
            "arguments": "{\"location\":\"Seattle\"}"
          }
        },
      ]
    }
  },
...

Отправка выходных данных функции

Затем можно завершить запуск , отправив выходные данные средства из вызываемых функций. tool_call_id Передайте ссылку required_action на объект, чтобы сопоставить выходные данные с каждым вызовом функции.


# Example function
def get_weather():
    return "It's 80 degrees F and slightly cloudy."

# Define the list to store tool outputs
tool_outputs = []
 
# Loop through each tool in the required action section
for tool in run.required_action.submit_tool_outputs.tool_calls:
  # get data from the weather function
  if tool.function.name == "get_weather":
    weather = get_weather()
    tool_outputs.append({
      "tool_call_id": tool.id,
      "output": weather
    })
 
# Submit all tool outputs at once after collecting them in a list
if tool_outputs:
  try:
    run = client.beta.threads.runs.submit_tool_outputs_and_poll(
      thread_id=thread.id,
      run_id=run.id,
      tool_outputs=tool_outputs
    )
    print("Tool outputs submitted successfully.")
  except Exception as e:
    print("Failed to submit tool outputs:", e)
else:
  print("No tool outputs to submit.")
 
if run.status == 'completed':
  print("run status: ", run.status)
  messages = client.beta.threads.messages.list(thread_id=thread.id)
  print(messages.to_json(indent=2))

else:
  print("run status: ", run.status)
  print (run.last_error.message)

После отправки выходных данных средства выполнение введет queued состояние перед продолжением выполнения.

См. также