Início Rápido

Use as etapas a seguir para começar a criar Enterprise AI Agents com a API de Respostas do OCI.

Dica

Para obter uma visão geral das etapas e recursos oferecidos neste Início Rápido, mantenha esta página recolhida e revise os títulos. Em seguida, expanda cada seção para obter detalhes.

As seis primeiras etapas configuram seu ambiente para obter uma resposta de modelo usando a API de Respostas. O restante das seções mostra outros recursos para agentes de construção.

Configurar API de Respostas do OCI

Pré-requisitos

Antes de criar um projeto ou chamar a API de Respostas do OCI, certifique-se de que as permissões necessárias do IAM estejam em vigor.

Conceder acesso aos recursos do OCI Generative AI

use um administrador para conceder ao grupo de usuários ao qual você pertence a permissão para gerenciar recursos do OCI Generative AI no compartimento usado para este QuickStart, <QuickStart-compartment-name>.

allow group <your-group-name> 
to manage generative-ai-family
in compartment <QuickStart-compartment-name>

Com essa permissão, você pode criar todos os recursos do serviço Generative AI, incluindo projetos, chaves de API, armazenamentos de vetores e armazenamentos semânticos no <QuickStart-compartment-name>.

Importante

Este QuickStart usa uma configuração de estilo de sandbox para suas permissões. Recomendamos que você conceda acesso amplo apenas a administradores ou usuários que trabalham em ambientes de sandbox. Para uso em produção, aplique políticas mais restritivas.
1. Criar um Projeto

Um projeto é o recurso básico para organizar agentes de IA e ativos relacionados na OCI Generative AI. Você pode criar um projeto usando a Console.

Depois de criar um projeto, você pode gerenciá-lo por meio da Console. Por exemplo, você pode atualizar seus detalhes, movê-los para outro compartimento, gerenciar tags ou excluí-los. Essas ações estão disponíveis no menu Ações (três pontos) na página da lista de projetos.

Para começar, navegue até a página da lista de projetos e selecione Criar projeto.

Informações básicas

Comece definindo os atributos principais do projeto.

  • Nome (opcional):

    Forneça um nome que comece com uma letra ou sublinhado, seguido por letras, números, hifens ou sublinhados. O comprimento pode ser de 1 a 255 caracteres. Se você não especificar um nome, um será gerado automaticamente usando o formato generativeaiproject<timestamp>, por exemplo, generativeaiproject20260316042443. Você pode atualizá-lo posteriormente.

  • Descrição (opcional):

    Adicione uma breve descrição para ajudar a identificar a finalidade do projeto.

  • Compartimento:

    Selecione o compartimento <QuickStart-compartment-name>.

Retenção de dados

Configure por quanto tempo os dados gerados são armazenados.

  • Retenção de respostas:

    Define por quanto tempo as respostas individuais do modelo são armazenadas após a geração.

  • Retenção de conversas:

    Decide por quanto tempo uma conversa inteira é retida após sua atualização mais recente.

Você pode definir ambos os valores em horas, até um máximo de 720 horas (30 dias).

Configuração de compactação de memória de curto prazo

A compactação de memória de curto prazo resume o histórico de conversas recentes em uma representação compacta. Ele ajuda a manter o contexto enquanto reduz o uso e a latência de tokens.

  • Ativar (opcional):

    Ative a compactação de memória de curto prazo para condensar automaticamente as interações anteriores.

  • Seleção de modelo:

    Se você ativar esse recurso, selecione um modelo de compactação. Os modelos disponíveis variam de acordo com a região.

    Para obter os modelos disponíveis, consulte Para Compactação de Memória de Curto Prazo (Histórico de Conversas).

Importante

  • Você só pode selecionar o modelo de compactação no momento da criação e não pode alterar essa opção posteriormente.
  • Se ativado, esse recurso não poderá ser desativado sem a exclusão do projeto.

Configuração de memória de longo prazo

Ao habilitar a memória de longo prazo, o serviço pode extrair e persistir informações importantes de conversas para uso futuro. Esses dados são armazenados como incorporações, tornando-os pesquisáveis e reutilizáveis nas interações.

  • Ativar (opcional):

    Ative a memória de longo prazo para reter os principais insights das conversas.

  • Seleção de modelo:

    Selecione os seguintes modelos:

    • Modelo de extração: Identifica e captura informações importantes.
    • Modelo de incorporação: converte dados armazenados em representações vetoriais para recuperação.
Importante

  • Você deve selecionar esses modelos durante a criação do projeto.
  • Depois de ativada, você não poderá alterar os modelos e a memória de longo prazo não poderá ser desativada, a menos que o projeto seja excluído.
Dica

Para obter melhores resultados, defina a retenção de respostas e a retenção de conversas como a duração máxima de 720 horas quando você usar memória de longo prazo.

Tags

As tags ajudam a organizar e gerenciar recursos.

  • Opcional: Selecione Adicionar tag para designar metadados ao projeto.

    Para obter mais informações, consulte Tags de Recursos

Quando terminar, selecione Criar.

2. Configurar Autenticação

A API de Respostas do OCI suporta dois métodos de autenticação. Você pode usar qualquer uma das opções.

  • Chaves de API do OCI Generative AI

    Autentique e alcance os modelos e pontos finais com chaves de API específicas do serviço Generative AI compatíveis com OpenAI. Use esta opção para teste e desenvolvimento inicial.

  • Autenticação baseada no OCI IAM

    Autentique e alcance os modelos e pontos finais usando solicitações de API assinadas. Recomendamos essa opção para cargas de trabalho de produção e ambientes gerenciados pela OCI. Considere o uso da autenticação IAM quando você:

    • Execute aplicativos em serviços do OCI, como Functions ou Oracle Kubernetes Engine (OKE)
    • Deseja evitar chaves de API de longa duração
    • Precisa de controle de acesso centralizado por meio do OCI IAM
2.1 (a) Criar uma Chave de API

Esta etapa só será necessária se você usar a autenticação de chave da API do OCI Generative AI.

Crie uma chave de API para autenticar solicitações no OCI Generative AI. Você pode nomear a chave e, opcionalmente, configurar até dois nomes de chave com datas e horas de expiração.

Você pode criar e gerenciar chaves de API usando a Console, a CLI ou a API.

  • Na página da lista de chaves de API, selecione Criar chave de API.

    Informações básicas

    1. Digite um Nome para a chave de API. Esse campo é obrigatório. Inicie o nome com uma letra ou sublinhado, seguido de letras, números, hifens ou sublinhados. O comprimento pode ser de 1 a 255 caracteres.
    2. (Opcional) Digite uma Descrição.
    3. Salve a chave de API no compartimento <QuickStart-compartment-name>.
      Você deve ter permissão para trabalhar em um compartimento para ver os recursos nele. Se você não tiver certeza de qual compartimento usar, entre em contato com um administrador. Para obter mais informações consulte Noções Básicas de Compartimentos.
    4. (Opcional) Designe Tags a essa chave de API. Consulte Tags de Recursos.

    Nomes de Chave e Tempos de Expiração

    1. Informe um nome para a primeira chave em Nome da chave um. Inicie o nome com uma letra ou sublinhado, seguido de letras, números, hifens ou sublinhados. O comprimento pode ser de 1 a 255 caracteres.
    2. (Opcional) Defina Data de expiração da chave um e Hora de expiração da chave um (UTC).
      O valor padrão é três meses a partir da data de criação.
    3. Informe um nome para a segunda chave em Nome da chave dois.
    4. (Opcional) Defina a Data de expiração da Chave dois e a Hora de expiração da Chave dois (UTC).
      O valor padrão é três meses a partir da data de criação.
    5. Selecione Criar.
  • Use o comando api-key create e os parâmetros necessários para criar uma chave de API.

    oci generative-ai api-key create [OPTIONS]

    Para obter uma lista completa de parâmetros e valores para comandos da CLI, consulte a Referência de Comandos da CLI.

  • Execute a operação CreateApiKey para criar uma chave de API. Forneça o nome para exibição, a descrição opcional e quaisquer nomes de chave com seus timestamps de expiração em UTC.

2.1 (b) Adicionar Permissão à Chave de API

Essa etapa só será necessária se você usar a autenticação de chave da API do OCI Generative AI.

Localizar o OCID da Chave de API

Para definir o escopo das permissões para uma chave de API específica, primeiro obtenha seu OCID.

Na Console:

  1. Abra a página da lista Chaves de API.
  2. Selecione a chave da API criada.
  3. Copie o OCID. Geralmente começa com ocid1.generativeaiapikey....

Conceder Permissão à Chave de API

Para permitir que um grupo específico de usuários chame a API de Respostas com essa chave de API, adicione a seguinte política do serviço IAM:

allow group <agent-builders-with-Responses-API-group>
to manage generative-ai-response 
in compartment <QuickStart-compartment-name> 
where ALL {request.principal.type='generativeaiapikey',
request.principal.id='<api-key-OCID>'}

Esta política permite que solicitações autenticadas com a chave de API especificada acessem a API de Respostas, mantendo o acesso com escopo e controlado.

Para acesso de sandbox mais amplo, você pode usar a seguinte política:

allow any-user to use generative-ai-family 
in compartment <QuickStart-compartment-name> 
where ALL {request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}
2.2 (a) Instalar a Biblioteca de Autenticação do OCI Generative AI IAM

Esta etapa só será necessária se você usar a autenticação de chave da API do OCI Generative AI. Se você estiver usando chaves de API do OCI Generative AI, ignore esta etapa.

Instale o pacote auxiliar de autenticação do OCI Generative AI:

pip install oci-genai-auth

O pacote oci-genai-auth fornece ajudantes de autenticação para integrar a autenticação do OCI IAM com o OpenAI SDK, incluindo:

  • OciSessionAuth para desenvolvimento local
  • OciUserPrincipalAuth para usuários que usam chaves de assinatura da API do OCI IAM
  • OciInstancePrincipalAuth
  • OciResourcePrincipalAuth para ambientes gerenciados pelo OCI

Quando você usa a autenticação do OCI IAM com o cliente OpenAI, defina api_key="not-used" e forneça um http_client autenticado.

Para OciUserPrincipalAuth, configure um arquivo de configuração do OCI para a identidade que assina solicitações. Consulte os seguintes tópicos relacionados:

3. Instalar openai

Instale o OpenAI SDK oficial.

Python

pip install openai
Observação

Para chamar a API de Respostas, use o OpenAI SDK, não o OCI SDK. Certifique-se também de usar a versão mais recente do OpenAI SDK.

Para outros idiomas, consulte a página Bibliotecas OpenAI.

4. Localizar o Ponto Final da API de Respostas do OCI

A API de Respostas da OCI é a principal API para criar aplicações agênticas de IA empresarial na OCI Generative AI. Ele permite que você envie solicitações de modelo, use ferramentas e gerencie o contexto da conversa por meio de uma única API.

Use a API de Respostas para:

  • Execute fluxos de trabalho simples de inferência de etapa única ou de agente de várias etapas
  • Ativar ou desativar argumentos, dependendo do caso de uso
  • Integre ferramentas gerenciadas pela plataforma ou do lado do cliente
  • Gerenciar o estado da conversa no serviço ou no cliente

A API OCI Responses usa uma interface compatível com OpenAI. As solicitações usam a mesma sintaxe no estilo OpenAI, mas são enviadas para o OCI Generative AI e autenticadas com credenciais do OCI, como chaves de API do OCI Generative AI ou autenticação baseada no OCI IAM.

O cliente recomendado é o OpenAI SDK. Suporta linguagens como Python, Java, TypeScript, Go e .NET. Você também pode usá-lo com frameworks como LangChain, LlamaIndex e OpenAI Agents SDK.

Use o seguinte URL base:

URL Base: https://inference.generativeai.${region}.oci.oraclecloud.com/openai/v1

Substitua ${region} pela sua região do OCI, por exemplo, us-chicago-1.

Para a API de Respostas, use o seguinte caminho de ponto final:

/responses
5. Localizar Regiões e IDs de Modelo Suportados

Você pode usar a API de Respostas do OCI para chamar diferentes tipos de modelos disponíveis nas regiões suportadas pelo OCI Generative AI. Para obter uma lista de modelos e regiões suportados, consulte Modelos e Regiões do Agente.

Modo sob Demanda

Os modelos sob demanda são hospedados e gerenciados pela OCI e estão disponíveis sem a necessidade de clusters de IA dedicados. Exemplos:

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    input="Write a one-sentence explanation of what a database is."
)
response = client.responses.create(
    model="google.gemini-2.5-pro",
    input="Write a one-sentence explanation of what a database is."
)

Modo Dedicado

Para cargas de trabalho de produção que exigem isolamento ou desempenho previsível, você pode hospedar modelos em um cluster de IA dedicado. Nesse caso, use o OCID do ponto final do cluster como o identificador do modelo:

response = client.responses.create(
    model="<dedicated-ai-cluster-endpoint-ocid>",
    input="Write a one-sentence explanation of what a database is."
)

Certifique-se de selecionar a mesma região do cluster quando enviar a solicitação.

Selecione um modelo em uma região disponível, com o modo disponível que melhor se adapta às suas necessidades de desempenho, custo e controle.

6. Crie sua primeira resposta

Os exemplos a seguir mostram como chamar a API de Respostas usando Python. Se a solicitação retornar uma explicação, a API de Respostas do OCI estará funcionando corretamente.

Exemplo de Chave de API
from openai import OpenAI

client = OpenAI(
    base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",  # change the region if needed
    api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",  # replace with your Generative AI API key created in Step 2
    project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx"  # replace with your Generative AI project OCID created in Step 1
)

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    input="Write a one-sentence explanation of what a database is."
)

print(response.output_text)
Exemplo de OciUserPrincipalAuth

Use essa abordagem ao usar chaves de assinatura de API do OCI IAM (não chaves de API do OCI Generative AI). Consulte Chaves e OCIDs Obrigatórios.

from openai import OpenAI
from oci_openai import OciUserPrincipalAuth
import httpx

client = OpenAI(
    base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",
    api_key="not-used",
    project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx",
    http_client=httpx.Client(
        auth=OciUserPrincipalAuth(
            config_file="~/.oci/config",
            profile_name="DEFAULT",
        )
    )

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    input="Write a one-sentence explanation of what a database is."
)

print(response.output_text)
Exemplo de OciSessionAuth

Use esta abordagem ao executar o código localmente:

from openai import OpenAI
from oci_openai import OciSessionAuth
import httpx

client = OpenAI(
    base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",  # update region if needed
    api_key="not-used",
    project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx",  # project OCID created earlier
    http_client=httpx.Client(auth=OciSessionAuth(profile_name="DEFAULT"))  # update profile if needed
)

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    input="Write a one-sentence explanation of what a database is."
)

print(response.output_text)
Exemplo de OciResourcePrincipalAuth

Use essa abordagem ao trabalhar com ambientes gerenciados, como OCI Functions ou OCI Container Engine for Kubernetes (OKE):

from openai import OpenAI
from oci_openai import OciResourcePrincipalAuth
import httpx

client = OpenAI(
    base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",  # update region if needed
    api_key="not-used",
    project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx",  # project OCID created earlier
    http_client=httpx.Client(auth=OciResourcePrincipalAuth()),
)

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    input="Write a one-sentence explanation of what a database is."
)

print(response.output_text)

Adicionar Mais Recursos

Ativar Registro de Depuração

Se você encontrar problemas ao chamar a API, ativar o registro em log de depuração pode ajudar na solução de problemas. Os logs de depuração exibem as solicitações e respostas HTTP brutas, incluindo o opc-request-id, que é útil ao trabalhar com o suporte da Oracle.

Você pode fazer referência a esse ID de solicitação ao relatar problemas para ajudar a identificar e diagnosticar problemas mais rapidamente.

from openai import OpenAI
import logging

logger = logging.getLogger("openai")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())

# Create and use the OpenAI client as usual
client = OpenAI(
    ...
)
Respostas do Fluxo

A API de Respostas do OCI suporta streaming, onde você pode receber saídas de modelo de forma incremental à medida que os tokens são gerados.

Transmitir Todos os Eventos

response_stream = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Explain the difference between structured and unstructured data.",
    stream=True
)

for event in response_stream:
    print(event)

Saída de Texto Somente de Fluxo (Tokens Delta)

response_stream = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Explain the difference between structured and unstructured data.",
    stream=True
)

for event in response_stream:
    if event.type == "response.output_text.delta":
        print(event.delta, end="", flush=True)

O streaming é especialmente útil para aplicativos interativos nos quais os usuários podem ler as respostas à medida que são geradas.

Adicionar Motivo

Os controles de raciocínio permitem ajustar quanto esforço o modelo usa antes de produzir uma resposta. Isso é útil quando você quer priorizar velocidade, profundidade ou um equilíbrio de ambos.

Dica

Revise os principais recursos na página de detalhes do modelo para garantir que o modelo que você está chamando tenha um raciocínio. Consulte Modelos de Chat Disponíveis.

Esforço de raciocínio

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Solve 18 * (4 + 2).",
    reasoning={"effort": "medium"},
    store=False,
)

print(response.output_text)

Saída do Resumo do Motivo

Se você estiver criando um chatbot, habilitar resumos de raciocínio pode ajudar os usuários a entender melhor como o modelo chegou a um resultado. Durante o streaming, os usuários também podem ver tokens de raciocínio enquanto o modelo está pensando.

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Solve 18 * (4 + 2).",
    reasoning={"summary": "auto"},
    store=False,
)

print(response.output_text)
Obter Saídas Estruturadas

Use saídas estruturadas quando quiser que o modelo retorne dados em um formato previsível, em vez de texto de formato livre. Isso é útil para extrair campos de entrada não estruturada, transmitir resultados para outros sistemas ou mostrar valores específicos em uma IU. Na API de Respostas do OCI, você define um esquema e faz parsing da resposta em relação a ele, o que torna a saída mais consistente e fácil para os aplicativos usarem. Saídas estruturadas correspondem a um esquema fornecido, enquanto um modo JSON só garante JSON válido.

Objeto fortemente digitado é um objeto cujos campos e tipos de dados são definidos com antecedência. Por exemplo, se um esquema disser que customer_name deve ser uma string e priority deve ser um dos seguintes "low", "medium" ou "high", o resultado analisado seguirá essa estrutura. Isso facilita o trabalho do código com a resposta de forma segura e previsível. A API de Respostas do OCI suporta isso, permitindo que você defina um esquema e faça parsing da saída do modelo em objetos fortemente digitados.

Essa abordagem é útil na integração com sistemas downstream, na aplicação da consistência ou na extração de campos específicos da entrada de linguagem natural.

from pydantic import BaseModel
from typing import Literal

class SupportRequest(BaseModel):
    customer_name: str
    product: str
    issue_summary: str
    priority: Literal["low", "medium", "high"]
    requested_action: str

response = client.responses.parse(
    model="<supported-model-id>",
    input=[
        {"role": "system", "content": "Extract the support request into the schema."},
        {
            "role": "user",
            "content": (
                "Sarah Johnson from Example Company says the mobile inventory app "
                "crashes whenever she scans more than 20 items in one session. "
                "This is delaying warehouse processing, and she wants a fix as soon as possible."
            ),
        },
    ],
    text_format=SupportRequest,
)

support_request = response.output_parsed
print(support_request)

Exemplo de saída:

SupportRequest(
customer_name='Sarah Johnson', 
product='mobile inventory app', 
issue_summary='App crashes whenever she scans more than 20 items in one session.', 
priority='high', 
requested_action='Provide a fix as soon as possible'
)
Enviar Entradas Multimodais

A API de Respostas do OCI suporta modelos que aceitam entradas multimodais. Você pode combinar texto com imagens, arquivos e controles de raciocínio para oferecer suporte a fluxos de trabalho mais ricos, como análise de documentos, compreensão de imagens e respostas de modelos mais deliberadas.

Dica

Revise os principais recursos na página de detalhes do modelo para garantir que o modelo que você está chamando aceite entradas multimodais. Consulte Modelos de Chat Disponíveis.

Entrada de imagem como URL de dados codificados em Base64

import base64

def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

base64_image = encode_image("/path/to/image.png")

response = client.responses.create(
    model="google.gemini-2.5-pro",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "Describe the main objects in this image."},
                {
                    "type": "input_image",
                    "image_url": f"data:image/jpeg;base64,{base64_image}",
                    "detail": "high",
                },
            ],
        }
    ],
)

print(response.output_text)

Entrada de Imagem como um URL da Internet

response = client.responses.create(
    model="google.gemini-2.5-pro",
    store=False,
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "Describe the scene shown in this image."},
                {
                    "type": "input_image",
                    "image_url": "https://example.photos/id/123",
                },
            ],
        }
    ],
)

print(response.output_text)

Substitua image_url por um URL de imagem válido.

Entrada do Arquivo como ID do Arquivo

Importante

O recurso de entrada de ID de arquivo só é suportado com modelos do Google Gemini. Para cada solicitação, o tamanho combinado de todos os arquivos PDF carregados deve estar abaixo de 50 MB e você pode fornecer no máximo 10 IDs de arquivo na solicitação. Consulte modelos Gemini suportados.
file = client.files.create(
    file=open("<path-to-file>", "rb"),
    purpose="user_data"
)

response = client.responses.create(
    model="google.gemini-2.5-pro",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_file",
                    "file_id": file.id,
                },
                {
                    "type": "input_text",
                    "text": "Summarize this document.",
                },
            ]
        }
    ]
)

print(response.output_text)

Entrada de Arquivo como URL Acessível à Internet

response = client.responses.create(
    model="google.gemini-2.5-flash",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "Summarize this file."},
                {
                    "type": "input_file",
                    "file_url": "https://www.example.com/letters/example-letter.pdf",
                },
            ],
        }
    ],
)

print(response.output_text)

Ferramentas

Adicionar Ferramentas OpenAI à API de Respostas do OCI

Dica

Expanda as seções a seguir para modelos, regiões e exemplos suportados sobre como usar essas ferramentas.

Sobre as ferramentas compatíveis com o OCI OpenAI

A OCI Generative AI oferece suporte a ferramentas com a API de Respostas, permitindo que os modelos suportados usem ferramentas integradas durante a geração de respostas. Adicione definições de ferramenta na propriedade tools de uma solicitação de API de Respostas para que o modelo possa recuperar conteúdo relevante dos dados, executar código Python, chamar funções definidas pelo aplicativo ou usar ferramentas expostas por um servidor MCP remoto.

O suporte à ferramenta está disponível somente por meio da API. Dependendo da solicitação, o modelo pode decidir se deseja usar uma das ferramentas configuradas. Expanda as seções a seguir para as ferramentas suportadas. Exemplo:

"tools": [
        { "type": "function", "name": "get_calendar_events" },
        { "type": "function", "name": "purchase_tickets" }
        { "type": "file_search", "vector_store_ids": ["<vector_store_id>"]
        }
    ]
Interpretador de códigos

Use o Code Interpreter para permitir que o modelo grave e execute código Python em um contêiner seguro e isolado. Esta ferramenta é útil para cálculos, análise de dados, processamento de arquivos e outras tarefas pesadas em computação.

Observação

A ferramenta de interpretador de código do OCI usa o mesmo formato da ferramenta de interpretador de código OpenAI usada com a API Responses com o ponto final compatível com o OCI OpenAI. Para obter detalhes de sintaxe e solicitação, consulte o tópico Code Interpreter na documentação do OpenAI.
Dica

Em prompts, referencie o Interpretador de Código como a ferramenta python. Por exemplo: Use the python tool to solve the problem.

Como o código é executado em um ambiente isolado sem acesso externo à rede, o Code Interpreter é uma boa opção quando o fluxo de trabalho precisa de computação ou processamento de arquivos em uma configuração controlada.

Usando o Interpretador de Códigos

Se você estiver usando esse recurso pela primeira vez, considere o Code Interpreter como um espaço de trabalho temporário do Python para o modelo.

Você pode usá-lo para tarefas como:

  • Resolvendo Problemas de Matemática
  • Analisando arquivos submetidos a upload
  • Limpando ou transformando dados
  • Criando gráficos ou tabelas
  • Geração de arquivos de saída, como logs ou conjuntos de dados processados

Ambiente de Execução

O ambiente Python inclui mais de 420 bibliotecas pré-instaladas, incluindo Pandas, Matplotlib e SciPy, por isso muitas tarefas comuns funcionam sem configuração extra.

O código é executado em um contêiner de sandbox. Esse contêiner é o ambiente de trabalho no qual o Python é executado e onde arquivos carregados, arquivos gerados e dados de trabalho temporário são armazenados durante a sessão.

Limites de memória do contêiner

Os contêineres do Code Interpreter usam um pool de memória compartilhado de 64 GB por tenancy.

Os tamanhos de contêiner suportados são:

  • 1 GB
  • 4 GB
  • 16 GB
  • 64 GB

Esse limite compartilhado pode ser dividido em vários contêineres. Por exemplo, ele pode suportar:

  • Sessenta e quatro contêineres de 1 GB
  • Dezesseis contêineres de 4 GB
  • Quatro contêineres de 16 GB
  • Um contêiner de 64 GB

Se você precisar de mais capacidade, poderá enviar uma solicitação de serviço.

Expiração do Contêiner

Um contêiner expira após 20 minutos de inatividade.

Isso é importante saber quando criar fluxos com várias etapas:

  • Um contêiner expirado não pode ser reutilizado
  • Você deve criar um novo contêiner
  • Os arquivos devem ser carregados novamente, se necessário
  • Estado na memória, como variáveis Python e objetos Python, é perdido

Por isso, é melhor tratar contêineres como ambientes de trabalho temporários.

Exemplo

Para usar o Code Interpreter, adicione uma definição de ferramenta na propriedade tools com "type": "code_interpreter".

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    tools=[
        {
            "type": "code_interpreter",
            "container": {"type": "auto"}
        }
    ],
    instructions="Use the python tool to solve the problem and explain the result.",
    input="Find the value of (18 / 3) + 7 * 2."
)

print(response.output_text)

Neste exemplo, a ferramenta de python é o Interpretador de Código.

Contêineres para o Code Interpreter

A ferramenta Code Interpreter requer um objeto contêiner. O container é o ambiente isolado no qual o modelo executa o código Python.

Um contêiner pode conter:

  • Arquivos obtidos por upload
  • Arquivos criados pelo modelo
  • Dados de trabalho temporários durante a execução

Ao usar o Code Interpreter, você pode usar um dos dois modos de contêiner:

  • automático: a OCI Generative AI provisiona ou reutiliza um contêiner no contexto atual.
  • OCID do contêiner: Você mesmo cria o contêiner, define o tamanho da memória e fornece o OCID.

Para ambas as opções, os contêineres são criados e gerenciados na OCI Generative AI. O código executado nesses contêineres também é executado na tenancy do OCI Generative AI.

Observação

A ferramenta de interpretador de código do OCI usa o mesmo formato que a ferramenta de interpretador de código OpenAI usada com a API Responses com o ponto final compatível com o OCI OpenAI. Para obter detalhes de sintaxe e solicitação, consulte Containers for Code Intepreters e documentação da API do OpenAI Containers.

Modo Automático

No modo automático, o serviço provisiona ou reutiliza o contêiner para você. Esta é a opção mais fácil e um bom ponto de partida para a maioria dos usuários.

Usar o modo automático quando:

  • Você deseja que a OCI Generative AI gerencie o contêiner
  • Você não precisa de controle direto sobre o meio ambiente
  • Você quer uma configuração mais simples

Opcionalmente, você pode especificar memory_limit. Se você não o especificar, o padrão será 1 GB.

response = client.responses.create(
    model="xai.grok-code-fast-1",
    tools=[{
        "type": "code_interpreter",
        "container": {
            "type": "auto",
            "memory_limit": "1g"
        }
    }],
    input="Use the python tool to calculate the average of 12, 18, 24, and 30."
)

Modo Explícito

No modo explícito, você cria o contêiner primeiro e define o tamanho. Em seguida, você informa o ID do contêiner na solicitação.

Use o modo explícito quando quiser mais controle sobre as configurações do contêiner, como tamanho da memória, ou quando quiser manter uma sessão dedicada.

container = client.containers.create(name="test-container", memory_limit="4g")

response = client.responses.create(
    model="xai.grok-code-fast-1",
    tools=[{
        "type": "code_interpreter",
        "container": container.id
    }],
    tool_choice="required",
    input="Use the python tool to calculate the average of 12, 18, 24, and 30."
)

print(response.output_text)

Arquivos no Code Interpreter

O Code Interpreter suporta interação dinâmica de arquivos durante a vida útil do contêiner. O modelo pode ler arquivos que você fornece e também pode criar novos arquivos.

Isso é útil para workflows como:

  • Lendo um CSV ou PDF
  • Gerando um gráfico
  • Salvando saída processada
  • Criando logs ou relatórios

Referência da API: Documentação da API OpenAI Container Files e API Container Files.

Persistência de Arquivo

Os arquivos criados ou atualizados pela ferramenta python persistem durante a execução do código no mesmo contêiner, desde que o contêiner não tenha expirado.

Isso significa que o modelo pode se basear em trabalhos anteriores na mesma sessão. Por exemplo, ele pode:

  • Ler um arquivo
  • Analisá-lo
  • Salvar um gráfico
  • Use esse gráfico posteriormente no mesmo contêiner

Quando o contêiner expirar, esse estado não estará mais disponível.

Fazendo Upload e Gerenciando Arquivos

Você pode gerenciar arquivos de contêiner por meio das APIs de Arquivos de Contêiner.

As operações comuns incluem:

  • Criar Arquivo Contêiner: Adicione um arquivo ao contêiner, seja por upload em várias partes ou fazendo referência a um ID /v1/files existente
  • Listar Arquivos de Contêiner: Exibir arquivos no contêiner
  • Excluir Arquivo Contêiner: Remove um arquivo
  • Recuperar Conteúdo do Arquivo Contêiner: Faça download de um arquivo do contêiner

Isso permite que você use o contêiner como um espaço de trabalho temporário para execução de código orientada por modelo.

Arquivos de saída e citações

Quando o modelo cria arquivos, esses arquivos são armazenados no contêiner e podem ser retornados como anotações na resposta.

Essas anotações podem incluir:

  • container_id
  • file_id
  • filename

Você pode usar esses valores para recuperar o conteúdo do arquivo gerado.

A resposta pode incluir um objeto container_file_citation que identifica o arquivo gerado. Use a operação Recuperar Conteúdo do Arquivo Contêiner para fazer download do arquivo.

A API de Respostas do OCI suporta pontos finais compatíveis com OpenAI para recursos como Respostas, Arquivos, Contêineres e Arquivos de Contêiner. É possível usar a documentação relacionada do OpenAI como referência para estrutura de solicitação, formatos de resposta e fluxos de trabalho gerais. Ao usar essas APIs com a OCI, envie solicitações aos pontos finais de inferência da OCI Generative AI, use a autenticação da OCI e observe que os recursos e a execução permanecem na OCI Generative AI, não em uma tenancy OpenAI.

Observação

A API OCI Files usa o mesmo formato que a API OpenAI Files com o ponto final compatível com OCI OpenAI. Para obter detalhes de sintaxe e solicitação, consulte a documentação da API OpenAI Files.
Observação

O interpretador de código do OCI usado como ferramenta para a API Ressponses usa o mesmo formato do interpretador de código OpenAI com o ponto final compatível com o OCI OpenAI. Para obter sintaxe e solicitação, consulte as seguintes referências:

Função de chamada

Use Chamada de Função para permitir que o modelo solicite dados ou ações do seu aplicativo durante um workflow de API de Respostas. Isso é útil quando o modelo precisa de informações ou operações que não estão disponíveis no próprio prompt, como dados de calendário, estado do aplicativo interno ou o resultado de uma operação personalizada.

Com este padrão, o modelo não executa a função diretamente. Em vez disso, ele retorna o nome da função e os argumentos, seu aplicativo executa a função e, em seguida, seu aplicativo envia a saída da função de volta para que o modelo possa continuar e produzir a resposta voltada para o usuário.

O que isso permite

A Chamada de Função é útil quando seu aplicativo precisa permanecer no controle da execução e, ao mesmo tempo, permitir que o modelo decida quando informações externas são necessárias.

Exemplo de casos de uso:

  • Procurando eventos do calendário
  • Recuperando dados da inscrição
  • Chamando API interna ou externa
  • Execução de cálculos ou lógica de negócios

Na sua função, você pode chamar um serviço externo, um banco de dados, uma das suas próprias APIs de biblioteca, uma CLI ou um servidor MCP local.

Essa abordagem oferece flexibilidade ao mesmo tempo em que mantém o caminho de execução dentro do aplicativo.

Fluxo de Execução

Uma interação típica de chamada de função funciona da seguinte forma:

  1. O cliente envia uma solicitação que inclui uma ou mais definições da ferramenta de função.
  2. O modelo decide se uma dessas ferramentas é necessária.
  3. Se uma ferramenta for necessária, o modelo retornará o nome da função e os argumentos.
  4. O aplicativo executa a função e prepara o resultado.
  5. O aplicativo envia esse resultado de volta em uma solicitação de acompanhamento.
  6. O modelo usa esse resultado para concluir a resposta.

Opções de manuseio de estado

Há duas maneiras comuns de gerenciar o estado nessas solicitações:

  • Estado gerenciado pelo serviço

    Recomendado para a maioria dos casos de uso. A solicitação de acompanhamento inclui previous_response_id e o serviço rastreia a troca anterior.

  • Estado gerenciado pelo cliente

    O aplicativo mantém todo o histórico de interações e envia o contexto acumulado com cada solicitação.

Dica

Mantenha as definições de ferramentas precisas. Nomes claros, descrições bem escritas e parâmetros bem definidos ajudam o modelo a selecionar a ferramenta certa e gerar argumentos utilizáveis.

Definir uma ferramenta de funções

Para definir uma ferramenta de função, adicione uma entrada na propriedade tools com "type": "function".

O exemplo a seguir define uma ferramenta que recupera eventos de calendário para uma data especificada:

tools = [
    {
        "type": "function",
        "name": "get_calendar_events",
        "description": "Return calendar events scheduled for a specific date.",
        "parameters": {
            "type": "object",
            "properties": {
                "date": {
                    "type": "string",
                    "description": "Date to query, for example 2026-04-02"
                }
            },
            "required": ["date"],
        },
    },
]

Inclua esse array tools na solicitação client.responses.create().

Exemplo: Estado Gerenciado pelo Serviço

Neste padrão, a primeira solicitação permite que o modelo decida se a ferramenta é necessária. A segunda solicitação envia o resultado da ferramenta de volta e faz referência à resposta anterior.

import json

tools = [
    {
        "type": "function",
        "name": "get_calendar_events",
        "description": "Return calendar events scheduled for a specific date.",
        "parameters": {
            "type": "object",
            "properties": {
                "date": {
                    "type": "string",
                    "description": "Date to query, for example 2026-04-02"
                }
            },
            "required": ["date"],
        },
    },
]

def get_calendar_events(date):
    # Replace this with actual calendar logic or an API call
    return [
        {"time": "09:00", "title": "Team standup"},
        {"time": "13:00", "title": "Design review"},
        {"time": "16:00", "title": "Project check-in"},
    ]

# Initial request
response = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=tools,
    input="Show the calendar events for 2026-04-02.",
)

# Execute the requested function
tool_outputs = []
for item in response.output:
    if item.type == "function_call" and item.name == "get_calendar_events":
        args = json.loads(item.arguments)
        events = get_calendar_events(**args)
        tool_outputs.append({
            "type": "function_call_output",
            "call_id": item.call_id,
            "output": json.dumps({"events": events}),
        })

# Follow-up request
final = client.responses.create(
    model="openai.gpt-oss-120b",
    instructions="Summarize the schedule clearly for the user.",
    tools=tools,
    input=tool_outputs,
    previous_response_id=response.id,
)

print(final.output_text)

Exemplo: Estado Gerenciado pelo Cliente

Nesse padrão, o aplicativo mantém a troca completa e a reenvia com a solicitação de acompanhamento.

import json

tools = [
    {
        "type": "function",
        "name": "get_calendar_events",
        "description": "Return calendar events scheduled for a specific date.",
        "parameters": {
            "type": "object",
            "properties": {
                "date": {
                    "type": "string",
                    "description": "Date to query, for example 2026-04-02"
                }
            },
            "required": ["date"],
        },
    },
]

def get_calendar_events(date):
    # Replace this with actual calendar logic or an API call
    return [
        {"time": "09:00", "title": "Team standup"},
        {"time": "13:00", "title": "Design review"},
        {"time": "16:00", "title": "Project check-in"},
    ]

conversation = [
    {"role": "user", "content": "Show the calendar events for 2026-04-02."}
]

response = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=tools,
    input=conversation,
)

conversation += response.output

for item in response.output:
    if item.type == "function_call" and item.name == "get_calendar_events":
        args = json.loads(item.arguments)
        events = get_calendar_events(**args)
        conversation.append({
            "type": "function_call_output",
            "call_id": item.call_id,
            "output": json.dumps({"events": events}),
        })

final = client.responses.create(
    model="openai.gpt-oss-120b",
    instructions="Summarize the schedule clearly for the user.",
    tools=tools,
    input=conversation,
)

print(final.output_text)

A chamada de função é uma opção forte quando o aplicativo deve permanecer responsável pela execução, controle de acesso e lógica de integração, enquanto ainda permite que o modelo solicite as informações necessárias.

Opção de Ferramenta

Dica

Dependendo da solicitação, o modelo pode decidir se deseja usar uma das ferramentas configuradas. Quando necessário, você também pode orientar o comportamento da ferramenta com a propriedade tool_choice.
"tool_choice": {
    "type": "allowed_tools",
    "mode": "auto",
    "tools": [
        { "type": "function", "name": "get_calendar_events" },
        { "type": "function", "name": "purchase_tickets" }
    ]
  }
}
Chamada MCP

As ferramentas MCP (Model Context Protocol) são funções executáveis ou recursos que os modelos de IA podem usar para interagir com sistemas externos. Use o MCP Calling no OCI Generative AI para permitir que um modelo acesse ferramentas executáveis expostas por um servidor MCP remoto durante uma solicitação de API de Respostas. Essas ferramentas podem fornecer acesso a sistemas externos, como API, bancos de dados, sistemas de arquivos ou pontos finais de aplicativos. A OCI Generative AI se comunica diretamente com servidores MCP remotos como parte do fluxo de trabalho de solicitação.

Observação

A ferramenta de chamada MCP do OCI usa o mesmo formato da chamada MCP do OpenAI para a API de Respostas, com o ponto final compatível com o OCI OpenAI. Para obter detalhes de sintaxe e solicitação, consulte a documentação do OpenAI MCP.

Quando Usar Chamada MCP

Use a Chamada MCP quando o modelo precisar de acesso a ferramentas hospedadas em um servidor MCP remoto. Essa abordagem é útil quando você deseja:

  • A plataforma Enterprise AI Agent para se comunicar diretamente com o servidor MCP
  • Menos etapas de orquestração no lado do cliente
  • Latência menor do que um padrão de ferramenta executado pelo cliente
  • Acesso a ferramentas expostas por meio de um servidor MCP remoto

Principais Recursos

O MCP Calling oferece os seguintes benefícios:

  • Comunicação direta plataforma-servidor: Ao contrário da chamada de função padrão, que retorna o controle ao aplicativo cliente, o MCP Calling permite que o OCI Generative AI se comunique diretamente com o servidor MCP remoto.
  • Baixa latência: Como a solicitação não requer uma ida e volta do cliente extra, o MCP Calling pode reduzir a sobrecarga da orquestração.

  • Suporte de Transporte: Suporta HTTP Streamable (SSE obsoleto e não suportado).

Definir uma ferramenta MCP

Para definir uma ferramenta MCP, adicione uma entrada na propriedade tools com "type": "mcp".

response_stream = client.responses.create(
    model="openai.gpt-5.4",
    tools=[
        {
            "type": "mcp",
            "server_label": "dmcp",
            "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
            "server_url": "https://mcp.deepwiki.com/mcp",
            "require_approval": "never",
        },
    ],
    input="Roll 2d4+1",
    stream=True,
)

for event in response_stream:
    if event.type == "response.output_text.delta":
        print(event.delta, end="", flush=True)

Este exemplo transmite a resposta e imprime o texto à medida que é gerado.

Restringir as Ferramentas Expostas por um Servidor MCP

Um servidor MCP remoto pode expor muitas ferramentas, o que pode aumentar o custo e a latência. Se o aplicativo precisar apenas de um subconjunto dessas ferramentas, use allowed_tools para limitar o conjunto.

response_stream = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=[
        {
            "type": "mcp",
            "server_label": "dmcp",
            "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
            "server_url": "https://mcp.deepwiki.com/mcp",
            "require_approval": "never",
            "allowed_tools": ["roll"],
        },
    ],
    input="Roll 2d4+1",
    stream=True,
    store=False,
)

Fornecer Autenticação ao Servidor MCP

Se o servidor MCP remoto exigir autenticação, informe o token de acesso no campo authorization.

response_stream = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    tools=[
        {
            "type": "mcp",
            "server_label": "calendar",
            "server_url": "https://calendar.example.com/mcp",
            "authorization": "$CALENDAR_OAUTH_ACCESS_TOKEN"
        },
    ],
    input="List my meetings for 2026-02-02.",
    stream=True
)

Informe apenas o valor do token bruto. Não inclua o prefixo Bearer.

O OCI envia o token no corpo da solicitação de API por TLS. O OCI não decodifica, inspeciona, armazena ou registra o token. Recomendamos que você use pontos finais de servidor MCP criptografados por TLS.

Configurar a Ferramenta NL2SQL do OCI

Sobre a Pesquisa SQL com NL2SQL

Use a Pesquisa SQL (NL2SQL) para converter solicitações de linguagem natural em SQL validada para dados empresariais na OCI Generative AI.

O NL2SQL ajuda os Enterprise AI Agents a trabalhar com dados corporativos federados sem mover ou duplicar os dados subjacentes. Ele usa uma camada de enriquecimento semântico para mapear termos de negócios para tabelas de banco de dados, colunas e junções e, em seguida, gera SQL com base na entrada de linguagem natural.

Pré-requisitos

Antes de usar o NL2SQL, você deve ter:

  • Um banco de dados de origem, como o Oracle Autonomous Database
  • Duas conexões DBTools:
    • Conexão de Aprimoramento
    • Conexão de Consulta
  • Permissões do IAM para Armazenamentos Semânticos, NL2SQL, Database Tools e segredos
  • Autenticação do OCI IAM configurada para APIs de serviço do OCI usadas neste início rápido
1. Criar um Banco de Dados e Conexões do DBTools

Antes de criar um Armazenamento Semântico, crie o banco de dados de origem e as conexões DBTools necessárias.

Você precisa das seguintes conexões:

Conexão de Aprimoramento

A Conexão de Aprimoramento é uma conexão de banco de dados com privilégios mais altos usada durante o aprimoramento. Ela precisa de privilégios para:

  • Executar consultas
  • Executar operações DDL
  • Acessar valores de exemplo do banco de dados

A OCI Generative AI usa essa conexão para ler detalhes do esquema e criar os metadados necessários para a geração de SQL.

Conexão de Consulta

A Conexão de Consulta é uma conexão de banco de dados com privilégios mais baixos usada para executar consultas em nome do usuário que está consultando.

Essa separação ajuda a manter as responsabilidades de geração e execução distintas e oferece suporte a controle de acesso mais seguro.

Tópicos Relacionados

2. Configurar Permissões do Serviço IAM para Armazenamentos Semânticos e NL2SQL

Antes de criar um Armazenamento Semântico, configure as políticas do IAM necessárias.

Para Administradores de Armazenamento Semântico

Se você tiver concedido acesso à etapa QuickStart executada para Conceder acesso aos recursos do OCI Generative AI, poderá ignorar essa etapa para os administradores. Eles já têm permissão para gerenciar lojas semânticas.

Administradores de armazenamento semântico são administradores que criam, atualizam, excluem e gerenciam o recurso de armazenamento semântico do OCI Generative AI e suas operações relacionadas ao NL2SQL.

Peça a um administrador para criar um grupo do IAM para os administradores. Neste tópico, o grupo de administradores é representado por:

  • <semantic-store-admin>
allow group <semantic-store-admin> 
to manage generative-ai-semantic-store 
in compartment <QuickStart-compartment-name>
allow group <semantic-store-admin> 
to manage generative-ai-nl2sql 
in compartment <QuickStart-compartment-name>
Tarefas de administração disponíveis com as duas políticas anteriores

Um <semantic-store-admin> pode:

  • criar o armazenamento semântico
  • exibir e atualizá-lo
  • excluir ou movê-lo
  • acionar o enriquecimento
  • inspecionar resultados de enriquecimento
  • gerar SQL com base em linguagem natural para validação/teste
  • gerenciar operações NL2SQL vinculadas ao armazenamento

Para Lojas Semânticas de IA Generativa da OCI

  • Crie um grupo dinâmico para armazenamentos semânticos criados na tenancy ou em um compartimento especificado.
  • Conceda permissão de grupo dinâmico para:
    • Acessar conexões do serviço Database Tools
    • Ler metadados do banco de dados
    • Ler metadados do Autonomous Database
    • Acessar inferência de IA generativa
    • Ler segredos usados por conexões do serviço Database Tools
  1. Crie um grupo dinâmico para armazenamentos em massa na tenancy com a seguinte regra de correspondência:
    all {resource.type='generativeaisemanticstore'}
  2. Para restringir os armazenamentos semânticos a um compartimento específico, atualize a condição anterior para:
    all {resource.type='generativeaisemanticstore',
     resource.compartment.id='<QuickStart-compartment-name>'}
  3. Crie uma política para conceder ao grupo dinâmico permissão para acessar conexões do serviço Database Tools em um compartimento especificado.
    allow dynamic-group <dynamic-group-name> 
    to use database-tools-family in compartment <QuickStart-compartment-name>'}
  4. Adicione uma política para conceder ao grupo dinâmico permissão para ler segredos usados pelas conexões do serviço Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read secret-family in compartment <QuickStart-compartment-name>
  5. Adicione uma política para conceder ao grupo dinâmico permissão para ler metadados do Oracle Database para conexões do serviço Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read database-family in compartment <QuickStart-compartment-name>
  6. Adicione uma política para conceder ao grupo dinâmico permissão para ler metadados do Autonomous Database para conexões e jobs de enriquecimento do serviço Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read autonomous-database-family in compartment <QuickStart-compartment-name>
  7. Adicione uma política para conceder ao grupo dinâmico permissão para acessar os recursos do OCI Generative AI para inferência.
    allow dynamic-group <dynamic-group-name> 
    to use generative-ai-family in compartment <QuickStart-compartment-name>
O que as duas políticas anteriores fornecem

O recurso generativeaisemanticstore pode:

  • invocar inferência de LLM por meio da IA generativa
  • usar conexões do serviço Database Tools para enriquecimento e consulta
  • ler segredos exigidos pelas conexões suportadas pelo Database Tools
  • ler metadados do Oracle Database e do Autonomous Database

Para Usuários de Armazenamento Semântico

Os usuários do armazenamento semântico são usuários finais que têm permissão para acessar um armazenamento semântico existente e usar recursos NL2SQL, mas não precisam administrar o recurso.

Peça a um administrador para criar um grupo do IAM para os usuários. Neste tópico, o grupo de usuários é representado por:

  • <semântica-loja-usuários>
allow group <semantic-store-users> 
to read generative-ai-semantic-store 
in compartment <QuickStart-compartment-name>
allow group <semantic-store-users> 
to manage generative-ai-nl2sql 
in compartment <QuickStart-compartment-name>
Tarefas do Usuário Disponíveis com as Duas Políticas Anteriores

O <semantic-store-users> pode:

  • exibir o armazenamento semântico
  • usar recursos relacionados a NL2SQL associados a ele
  • inspecionar e consultar saídas
  • acessar informações de enriquecimento

Para Acesso do Usuário a Conexões do Serviço Database Tools

Conceda ao grupo acesso aos recursos necessários do Database Tools:

allow group <semantic-store-users>
to use database-tools-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}
allow group <semantic-store-users>
to read database-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}
allow group <semantic-store-users>
to read autonomous-database-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}
3. Configurar Autenticação do OCI IAM

Este QuickStart usa a autenticação do OCI IAM para a API de serviço do OCI que cria Lojas Semânticas, executa jobs de enriquecimento e gera SQL.

Configurar a autenticação do OCI IAM para a identidade que assina solicitações. Os exemplos nesta seção usam o OCI Python SDK e BaseClient.

Você pode autenticar usando:

  • Um arquivo de configuração do OCI e chaves de assinatura de API
  • Um signatário de token de segurança

Os exemplos a seguir usam SecurityTokenSigner, mas você também pode usar um signatário de configuração padrão da OCI se isso se adequar melhor ao seu ambiente.

Tópicos Relacionados

4. Criar um Armazenamento Semântico

Para usar o NL2SQL, crie um recurso de Armazenamento Semântico do OCI.

Um Armazenamento Semântico é suportado por um armazenamento de vetores com dados estruturados e inclui as seguintes conexões do DBTools:

  • Conexão de Aprimoramento
  • Conexão de Consulta

Criar um Armazenamento Semântico na Console

  1. Abra a página da lista de armazenamentos de vetores.
  2. Digite um nome e uma descrição.
  3. Selecione o compartimento <QuickStart-compartment-name>.
  4. Em Tipo de Origem de Dados, selecione Dados estruturados.
  5. Em Configurar conector de sincronização, selecione Ferramenta do OCI Database como o tipo de conexão.
  6. Informe o ID da conexão de aprimoramento e selecione Testar conexão de aprimoramento.
  7. Informe o ID da Conexão de consulta e selecione Testar conexão de consulta.
  8. Em Esquemas, especifique os nomes de esquema do banco de dados a serem ingeridos.
  9. Para Automação, selecione quando o enriquecimento for executado:
    • Nenhum
    • Na criação
  10. Selecione Criar.

Criar um Armazenamento Semântico Usando Python

O exemplo a seguir cria e gerencia um Armazenamento Semântico usando a API de serviço do OCI:

import json
import oci
from oci.base_client import BaseClient
from oci.retry import DEFAULT_RETRY_STRATEGY

API_VERSION = "20231130"
HOST = "https://generativeai.us-ashburn-1.oci.oraclecloud.com"
BASE_PATH = f"/{API_VERSION}"

def get_signer_auth_security_token(profile="DEFAULT"):
    config = oci.config.from_file("~/.oci/config", profile)
    signer = oci.auth.signers.SecurityTokenSigner(config)
    return config, signer

def make_base_client(signer):
    return BaseClient(
        service_endpoint=HOST,
        signer=signer,
        retry_strategy=None,
    )

def create_semantic_store(client, body: dict):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores",
        method="POST",
        header_params={"content-type": "application/json"},
        body=body,
    )

if __name__ == "__main__":
    config, signer = get_signer_auth_security_token(profile="DEFAULT")
    client = make_base_client(signer)

    create_body = {
        "displayName": "TestSemanticStore",
        "description": "Semantic store for the ADMIN schema",
        "freeformTags": {},
        "definedTags": {},
        "dataSource": {
            "queryingConnectionId": "ocid1.databasetoolsconnection.oc1.xxx",
            "enrichmentConnectionId": "ocid1.databasetoolsconnection.oc1.xxx",
            "connectionType": "DATABASE_TOOLS_CONNECTION",
        },
        "refreshSchedule": {"type": "ON_CREATE"},
        "compartmentId": "xxx",
        "schemas": {
            "connectionType": "DATABASE_TOOLS_CONNECTION",
            "schemas": [{"name": "ADMIN"}],
        },
    }

    create_resp = create_semantic_store(client, create_body)
    print("CREATE status:", create_resp.status)

    create_payload = create_resp.data
    if isinstance(create_payload, (bytes, str)):
        create_payload = json.loads(create_payload)

    print("CREATE response:", json.dumps(create_payload, indent=2))
5. Executar Aprimoramento Manualmente

Para Automação, se você tiver selecionado Nenhum em vez de Na criação, poderá executar o enriquecimento após a criação do armazenamento semântico. Execute esta etapa se você tiver ignorado a opção Na criação.

O processo de enriquecimento lê metadados de esquema, como tabelas e colunas, do banco de dados conectado. A OCI Generative AI usa esses metadados para ajudar a gerar o SQL.

Para acionar o enriquecimento manualmente, chame a API GenerateEnrichmentJob.

Você também pode gerenciar jobs de enriquecimento usando a seguinte API:

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • CancelEnrichmentJob
6. Localizar Pontos Finais do OCI para Armazenamento Semântico e GenerateSqlFromNl

O NL2SQL usa APIs de serviço do OCI em vez dos caminhos /openai/v1 compatíveis com o OCI OpenAI.

CRUD da Loja Semântica

Use o seguinte URL base para operações CRUD de armazenamento semântico:

URL Base: https://generativeai.${region}.oci.oraclecloud.com

Use o seguinte caminho de ponto final:

/20231130/semanticStores

Autenticação:

  • Somente sessão do IAM

API do Job de Aprimoramento

Use o seguinte URL base para jobs de enriquecimento de um armazenamento semântico:

URL Base: https://inference.generativeai.${region}.oci.oraclecloud.com

Use o seguinte caminho de ponto final:

/20260325/semanticStores/{semanticStoreId}/

Autenticação:

  • Somente sessão do IAM

Gerar SQL com Linguagem Natural

Use o seguinte URL base para geração de SQL:

URL Base: https://inference.generativeai.${region}.oci.oraclecloud.com

Use o seguinte padrão de ponto final:

/20260325/semanticStores/{semanticStoreId}/actions/generateSqlFromNl

Autenticação:

  • Somente sessão do IAM

APIs NL2SQL e Armazenamento Semântico Disponíveis

Lojas Semânticas

Lojas Semânticas
  • CreateSemanticStore
  • ListSemanticStores
  • GetSemanticStore
  • UpdateSemanticStore
  • ChangeSemanticStoreCompartment
  • DeleteSemanticStore
Cargos de Enriquecimento
  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob
Gerar SQL
GenerateSqlFromNl
Observação

O URL Base difere para a API de armazenamentos semânticos e jobs de enriquecimento.
7. Gerar sua Primeira Instrução SQL

Depois que o Armazenamento Semântico estiver pronto e o enriquecimento tiver sido concluído, chame a API NL2SQL para gerar SQL com base em linguagem natural.

import json
import oci
from oci.base_client import BaseClient

INFERENCE_BASE_URL = "https://inference.generativeai.<region>.oci.oraclecloud.com"
API_VERSION = "20260325"
SEMANTIC_STORE_ID = "ocid1.generativeaisemanticstore.oc1.xxx"

config = oci.config.from_file("~/.oci/config", "oc1")
signer = oci.auth.signers.SecurityTokenSigner(config)

client = BaseClient(
    service_endpoint=INFERENCE_BASE_URL,
    signer=signer,
    retry_strategy=None,
)

resource_path = (
    f"/{API_VERSION}/semanticStores/{SEMANTIC_STORE_ID}/actions/generateSqlFromNl"
)

body = {
    "displayName": "Generate SQL example",
    "description": "Generate SQL from natural language",
    "inputNaturalLanguageQuery": "Give me last week's order details."
}

resp = client.call_api(
    resource_path=resource_path,
    method="POST",
    header_params={"content-type": "application/json"},
    body=body,
)

print("HTTP status:", resp.status)
print("opc-request-id:", resp.headers.get("opc-request-id"))

data = resp.data
if isinstance(data, (bytes, str)):
    data = json.loads(data)

print(json.dumps(data, indent=2))

Observe as Atividades da API de Respostas do OCI

Sobre o rastreamento de chamadas

Use os dados de rastreamento de resposta incorporados na API de Respostas do OCI para entender como uma solicitação foi processada. Para uma observabilidade mais profunda, você também pode integrar a API de Respostas da OCI com plataformas externas de observabilidade, como Langfuse.

Este QuickStart mostra como inspecionar os detalhes da execução retornados pela API de Respostas e como rastrear solicitações usando o Langfuse.

Pré-requisitos

Antes de começar, você deve ter:

  • Um projeto de IA Generativa da OCI
  • Autenticação configurada para a API de Respostas do OCI
  • O OpenAI SDK instalado
  • Um cliente de API do OCI Responses em funcionamento

(Opcional) Para integrar com o Langfuse, você precisa de uma conta e credenciais do Langfuse.

1. Inspecionar a Saída da API de Respostas

Quando você chama a API de Respostas do OCI, a resposta inclui um campo output. Este campo é uma matriz de itens que descreve o que ocorreu durante a solicitação.

Cada item representa uma etapa na execução e pode incluir diferentes tipos, como:

  • message
  • file_search_call
  • mcp_call

Esses itens de saída fornecem visibilidade de como a solicitação foi processada. Você pode usá-los para:

  • Depurar e entender o comportamento do modelo
  • Exibir etapas de execução em uma interface do usuário
  • Crie observabilidade personalizada ou fluxos de trabalho de registro

Por exemplo, depois de enviar uma solicitação, você pode inspecionar o campo output:

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Explain the difference between structured and unstructured data."
)

for item in response.output:
    print(item.type)
2. Instalar o Langfuse SDK

Para obter informações mais detalhadas, como rastreamentos de latência, custo e execução, você pode integrar a API de Respostas da OCI a uma plataforma de observabilidade.

Uma opção é a Langfuse, uma plataforma de engenharia de LLM de código aberto que ajuda os desenvolvedores a depurar, monitorar e melhorar aplicativos LLM. Langfuse fornece observabilidade de ponta a ponta para rastrear ações do agente, suporta controle de versão de prompt e ajuda a avaliar saídas do modelo. Ele se integra a frameworks populares, como OpenAI, LangChain e LlamaIndex.

Instale o Langfuse SDK:

pip install langfuse
3. Configurar Variáveis de Ambiente

Defina as variáveis de ambiente Langfuse e OCI necessárias:

LANGFUSE_SECRET_KEY="sk-lf-xxxxxxxxx"
LANGFUSE_PUBLIC_KEY="pk-lf-xxxxxxxxx"
LANGFUSE_BASE_URL="https://us.cloud.langfuse.com"

# OCI Generative AI credentials
OCI_GENAI_API_KEY="sk-xxxxxxxxx"
OCI_GENAI_PROJECT_ID="ocid1.generativeaiproject.oc1.xxx"
4. Instrumentalize o Cliente OpenAI

Importe o cliente OpenAI do Langfuse SDK. O código de solicitação existente permanece o mesmo, mas as solicitações são rastreadas automaticamente.

import os
from langfuse.openai import OpenAI  # Import from Langfuse

client = OpenAI(
    base_url="https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1",
    api_key=os.getenv("OCI_GENAI_API_KEY"),
    project=os.getenv("OCI_GENAI_PROJECT_ID"),
)
5. Enviar uma Solicitação de API de Respostas Rastreadas

Depois de instrumentar o cliente, envie uma solicitação de API de Respostas como de costume. O Langfuse rastreia automaticamente a solicitação.

Exemplo:

response = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=[
        {
            "type": "mcp",
            "server_label": "dmcp",
            "server_url": "https://mcp.example.com/mcp",
            "require_approval": "never",
        },
    ],
    input="Explain why tracing and observability are important in distributed systems."
)

print(response.output_text)