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říkladfile_search
,code_interpreter
nebo afunction
) 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é
- Referenční informace k rozhraní API pro asistenty
- Přečtěte si další informace o tom, jak používat asistenty s našimi návody pro asistenty.
- Ukázky rozhraní API pro asistenty Azure OpenAI