Chamada de função dos Assistentes OpenAI do Azure
A API de Assistentes suporta a chamada de funções, o que permite descrever a estrutura de funções para um Assistente e, em seguida, devolver as funções que precisam de ser chamadas juntamente com os respetivos argumentos.
Nota
- A pesquisa de arquivos pode ingerir até 10.000 arquivos por assistente - 500 vezes mais do que antes. É rápida, suporta consultas paralelas através de pesquisas multi-thread e apresenta reclassificação e reescrita de consultas melhoradas.
- O arquivo de vetores é um novo objeto da API. Depois de um ficheiro ser adicionado a um arquivo de vetores, é automaticamente analisado, fragmentado e incorporado, ficando pronto para ser pesquisado. Os arquivos de vetores podem ser utilizados entre assistentes e threads, o que simplifica a gestão de ficheiros e a faturação.
- Adicionamos suporte para o
tool_choice
parâmetro que pode ser usado para forçar o uso de uma ferramenta específica (como pesquisa de arquivos, interpretador de código ou uma função) em uma execução específica.
Suporte de chamada de função
Modelos suportados
A página de modelos contém as informações mais atualizadas sobre regiões/modelos onde os Assistentes são suportados.
Para usar todos os recursos de chamada de função, incluindo funções paralelas, você precisa usar um modelo que foi lançado após 6 de novembro de 2023.
Versões da API
Versões de API começando com 2024-02-15-preview
.
Exemplo de definição de função
Nota
- Adicionamos suporte para o
tool_choice
parâmetro que pode ser usado para forçar o uso de uma ferramenta específica (comofile_search
,code_interpreter
, ou afunction
) em uma execução específica. - As execuções expiram dez minutos após a criação. Certifique-se de enviar as saídas da ferramenta antes dessa expiração.
- Você também pode executar chamadas de função com aplicativos Lógicos do 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"]
}
}
}]
)
Leitura das funções
Quando você inicia uma Execução com uma mensagem de usuário que aciona a função, a Execução entrará em um status pendente. Depois de processar, a execução entrará em um estado de requires_action que você pode verificar recuperando a Execução.
{
"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\"}"
}
},
]
}
},
...
Enviando saídas de função
Em seguida, você pode concluir a Execução enviando a saída da ferramenta da(s) função(ões) chamada(s). Passe o tool_call_id
referenciado no objeto para corresponder à required_action
saída para cada chamada de função.
# 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)
Depois de enviar as saídas da ferramenta, a Execução entrará no estado antes de continuar a queued
execução.
Consulte também
- Referência da API de assistentes
- Saiba mais sobre como utilizar os Assistentes com o nosso Guia prático sobre Assistentes.
- Exemplos da API do Azure OpenAI Assistants