Sdílet prostřednictvím


Volání funkce Asistenti Azure OpenAI

Rozhraní API Asistenti podporuje volání funkcí, které umožňuje popsat strukturu funkcí asistentovi a pak vrátit funkce, které je potřeba volat spolu s jejich argumenty.

Poznámka:

  • Hledání souborů může ingestovat až 10 000 souborů na asistenta – 500krát více než dříve. Je to rychlý způsob, podporuje paralelní dotazy prostřednictvím vícevláknového vyhledávání a vylepšeného řazení a přepisování dotazů.
    • Vektorové úložiště je nový objekt v rozhraní API. Jakmile se soubor přidá do úložiště vektorů, automaticky se parsuje, zachytá a vloží a připraví k hledání. Vektorová úložiště se dají používat napříč asistenty a vlákny, což zjednodušuje správu souborů a fakturaci.
  • Přidali jsme podporu parametru tool_choice , který se dá použít k vynucení použití konkrétního nástroje (například vyhledávání souborů, interpret kódu nebo funkce) v určitém spuštění.

Podpora volání funkcí

Podporované modely

Stránka modelů obsahuje nejaktuálnější informace o oblastech nebo modelech, ve kterých jsou podporováni asistenti.

Pokud chcete použít všechny funkce volání funkcí, včetně paralelních funkcí, musíte použít model, který byl vydán po 6. listopadu 2023.

Verze rozhraní API

Verze rozhraní API začínající na 2024-02-15-preview.

Příklad definice funkce

Poznámka:

  • Přidali jsme podporu parametru tool_choice , který lze použít k vynucení použití konkrétního nástroje (například file_search, code_interpreternebo a function) v určitém spuštění.
  • Po vytvoření vyprší platnost deseti minut. Před tímto vypršením platnosti nezapomeňte odeslat výstupy vašeho nástroje.
  • Můžete také provádět volání funkcí pomocí Azure Logic Apps.
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"]
      }
    }
  }]
)

Čtení funkcí

Když spustíte spuštění se zprávou uživatele, která funkci aktivuje, zadá spuštění stav čekající na vyřízení. Po zpracování bude spuštění zadávat requires_action stav, který můžete ověřit načtením spuštění.

{
  "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\"}"
          }
        },
      ]
    }
  },
...

Odesílání výstupů funkce

Spuštění pak můžete dokončit odesláním výstupu nástroje z funkcí, které voláte. tool_call_id Předejte odkazovaný v objektu required_action tak, aby odpovídal výstupu každému volání funkce.


# 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)

Po odeslání výstupu nástroje bude spuštění před pokračováním v provádění zadávat queued stav.

Viz také