Compartilhar via


Interpretador de código de serviço do Agente de IA do Azure

O Interpretador de Código permite que os agentes escrevam e executem código Python em um ambiente de execução em área restrita. Com o Interpretador de Código habilitado, seu agente pode executar o código iterativamente para resolver problemas de análise de dados, matemática e código mais desafiadores. Quando o Agente grava o código que não é executado, ele pode iterar nesse código modificando e executando código diferente até que a execução do código seja bem-sucedida.

Importante

O Interpretador de Código tem encargos adicionais além das taxas baseadas em token para uso do OpenAI do Azure. Se o Agente chamar o Interpretador de Código simultaneamente em dois threads diferentes, duas sessões de interpretador de código serão criadas. Cada sessão fica ativa por padrão por uma hora.

Modelos com suporte

A página de modelos contém as informações mais atualizadas sobre regiões/modelos em que há suporte para agentes e interpretador de código.

É recomendável usar agentes com os modelos mais recentes para aproveitar os novos recursos, janelas de contexto maiores e dados de treinamento mais atualizados.

Definir importações e criar um cliente de projeto

Para usar o interpretador de código, primeiro adicione as instruções import mostradas no exemplo e crie um cliente de projeto, que conterá uma cadeia de conexão ao projeto de IA e será usado para autenticar chamadas à API.

import os
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import CodeInterpreterTool
from azure.ai.projects.models import FilePurpose
from azure.identity import DefaultAzureCredential
from pathlib import Path

# Create an Azure AI Client from a connection string, copied from your Azure AI Foundry project.
# At the moment, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
# Customer needs to login to Azure subscription via Azure CLI and set the environment variables
project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(), conn_str=os.environ["PROJECT_CONNECTION_STRING"]
)

Carregar um arquivo

Carregue o arquivo usando a função upload_and_poll(), especificando o caminho do arquivo e a finalidade FilePurpose.AGENTS.

# Upload a file and add it to the client 
file = project_client.agents.upload_file_and_poll(
    file_path="nifty_500_quarterly_results.csv", purpose=FilePurpose.AGENTS
)
print(f"Uploaded file, file ID: {file.id}")

Criar um agente com a ferramenta de interpretador de código

Defina a ferramenta code_interpreter com CodeInterpreterTool() e inclua a ID do arquivo que você carregou. Posteriormente, crie o agente com tools definido como code_interpreter.definitions e tool_resources definido como code_interpreter.resources.


code_interpreter = CodeInterpreterTool(file_ids=[file.id])

# create agent with code interpreter tool and tools_resources
agent = project_client.agents.create_agent(
    model="gpt-4o-mini",
    name="my-agent",
    instructions="You are helpful agent",
    tools=code_interpreter.definitions,
    tool_resources=code_interpreter.resources,
)

Criar um thread, uma mensagem e obter a resposta do agente

Em seguida, crie um thread com create_thread() e anexe uma mensagem a ela usando create_message() que disparará a ferramenta de interpretador de código. Posteriormente, crie e execute uma execução com create_and_process_run(). Depois que a execução for concluída, você poderá excluir o arquivo do agente com delete_file() para liberar espaço no agente. Por fim, imprima as mensagens do agente.

# create a thread
thread = project_client.agents.create_thread()
print(f"Created thread, thread ID: {thread.id}")

# create a message
message = project_client.agents.create_message(
    thread_id=thread.id,
    role="user",
    content="Could you please create bar chart in the TRANSPORTATION sector for the operating profit from the uploaded csv file and provide file to me?",
)
print(f"Created message, message ID: {message.id}")

# create and execute a run
run = project_client.agents.create_and_process_run(thread_id=thread.id, assistant_id=agent.id)
print(f"Run finished with status: {run.status}")

if run.status == "failed":
    # Check if you got "Rate limit is exceeded.", then you want to get more quota
    print(f"Run failed: {run.last_error}")

# delete the original file from the agent to free up space (note: this does not delete your version of the file)
project_client.agents.delete_file(file.id)
print("Deleted file")

# print the messages from the agent
messages = project_client.agents.list_messages(thread_id=thread.id)
print(f"Messages: {messages}")

# get the most recent message from the assistant
last_msg = messages.get_last_text_message_by_sender("assistant")
if last_msg:
    print(f"Last Message: {last_msg.text.value}")

Baixar arquivos gerados pelo interpretador de código

Os arquivos gerados pelo Interpretador de Código podem ser encontrados nas respostas de mensagem do Agente. Você pode baixar o arquivo de imagem gerado pelo interpretador de código, iterando por meio do image_contents da resposta e chamando save_file() com um nome e a ID do arquivo.

# save the newly created file
for image_content in messages.image_contents:
  print(f"Image File ID: {image_content.image_file.file_id}")
  file_name = f"{image_content.image_file.file_id}_image_file.png"
  project_client.agents.save_file(file_id=image_content.image_file.file_id, file_name=file_name)
  print(f"Saved image file to: {Path.cwd() / file_name}") 

Tipos de arquivo compatíveis

Formato de arquivo Tipo MIME
.c text/x-c
.cpp text/x-c++
.csv application/csv
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.html text/html
.java text/x-java
.json application/json
.md text/markdown
.pdf application/pdf
.php text/x-php
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.py text/x-python
.py text/x-script.python
.rb text/x-ruby
.tex text/x-tex
.txt text/plain
.css text/css
.jpeg image/jpeg
.jpg image/jpeg
.js text/javascript
.gif image/gif
.png image/png
.tar application/x-tar
.ts application/typescript
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xml application/xml ou text/xml
.zip application/zip

Confira também