Início Rápido

Use as etapas a seguir para começar a criar agentes de IA empresarial com a OCI Generative AI. Este guia orienta você na configuração inicial, com contexto ao longo do caminho, para que você entenda não apenas o que fazer, mas por que isso é importante.

Pré-requisito: Configurar Permissões do Serviço IAM

Antes de criar um projeto, certifique-se de que os grupos de usuários apropriados tenham acesso aos recursos do OCI Generative AI. Sem essas permissões, você não poderá criar ou gerenciar projetos e ativos relacionados.

O OCI fornece um tipo de recurso agregado, generative-ai-family, que concede acesso a todos os tipos de recursos do serviço Generative AI por meio de uma única política.

Dica

Conceda acesso amplo somente a administradores ou usuários que trabalham em ambientes de sandbox ou desenvolvimento. Para uso em produção, considere a aplicação de políticas mais restritivas.

Conceder Acesso no Nível da Tenancy

Para permitir que um grupo de usuários gerencie todos os recursos do serviço Generative AI na tenancy:

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

Conceder Acesso no Nível do Compartimento

Para definir o escopo do acesso a um compartimento específico:

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

Depois que essas permissões estiverem em vigor, você estará pronto para criar o primeiro projeto.

1. Criar um Projeto

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

Depois de criar um projeto, você pode gerenciá-lo por meio da Console, por exemplo, atualizando seus detalhes, movendo-o para outro compartimento, gerenciando tags ou excluindo-o. 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 um sublinhado, seguido por letras, números, hifens ou sublinhados (1–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 no qual o projeto residirá. Por padrão, esse é o compartimento atual, mas você pode escolher qualquer compartimento no qual tenha as permissões necessárias.

Retenção de Dados

Configure por quanto tempo os dados gerados são armazenados. Isso ajuda a equilibrar a usabilidade com os requisitos de ciclo de vida dos dados:

  • 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:

    Determina 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).

Compactação de Memória de Curto Prazo

Esse recurso melhora a eficiência ao resumir 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 ativado, selecione um modelo de compactação. Os modelos disponíveis variam de acordo com a região.

Importante

  • O modelo de compactação é selecionado no momento da criação e não pode ser alterado posteriormente.
  • Uma vez habilitado, esse recurso não pode ser desabilitado sem excluir o projeto.
  1. (Opcional) Ative a compactação de memória de curto prazo para resumir o histórico de bate-papo anterior e manter o contexto leve.
  2. Se você ativar o recurso de compactação de memória de curto prazo, selecione um modelo na lista para compactação.
    A lista de modelos varia de acordo com a região. Para obter os modelos disponíveis, consulte Modelos e Regiões de IA Generativa para API Agentic.

Memória de Longo Prazo

A memória de longo prazo permite que o sistema extraia e persista 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:
    • 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

  • Esses modelos devem ser selecionados durante a criação do projeto e não podem ser alterados posteriormente.
  • Depois de ativada, 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 resposta e a retenção da conversa para a duração máxima (720 horas) ao usar a memória de longo prazo.

Tags

As tags ajudam a organizar e gerenciar recursos.

  • (Opcional) Selecione Adicionar tag para designar metadados ao seu projeto.

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

Por fim, selecione Criar para criar o projeto.

2. Criar uma Chave de API

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.

As chaves de API são usadas para autenticar solicitações para o OCI Generative AI. Nesta etapa, você criará uma chave que os aplicativos ou ferramentas podem usar para acessar o serviço com segurança.

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

Importante

Certifique-se de Adicionar Permissão de Chave de API depois de criar a chave.
  • Na página da lista Chaves de API, selecione Criar chave de API. Se precisar de ajuda para localizar a página de lista, consulte Listando Chaves de API.

    Informações básicas

    1. Digite um Nome para a chave de API (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. (Opcional) Para salvar a chave de API em um compartimento diferente do listado, selecione outro Compartimento.
      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 chaves e tempos de expiração

    1. Informe um nome para a primeira chave: 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 a Data de expiração da chave um e a 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: Nome da chave dois.
    4. (Opcional) Defina a Data de expiração da segunda chave e a Hora de expiração da segunda chave (UTC).
      O valor padrão é três meses a partir da data de criação.
    5. Selecione Criar.
    Certifique-se de Adicionar Permissão de Chave de API após criar a chave.
  • 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 (UTC).

3. Adicionar Permissão à Chave de API

Localizar o OCID da Chave de API

Para definir o escopo das permissões para uma chave de API específica, você precisa do seu OCID.

Na Console:

  1. Navegue até 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

Crie uma política do serviço IAM para permitir que a chave da API chame a API de Respostas:

allow group <your-group-name> 
to manage generative-ai-response in tenancy where ALL 
{request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}

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

4. Chamar a API de Respostas do OCI

A API de Respostas da OCI é a principal interface para criar aplicações agênticas de IA empresarial na OCI Generative AI. Ele oferece uma maneira flexível de combinar os principais recursos, como orquestração, raciocínio, ferramentas e estado de conversa, em uma única solicitação.

Com essa API, você pode:

  • Execute inferência simples em uma única etapa ou crie fluxos de trabalho de agentes em várias etapas
  • Ativar ou desativar o argumento, dependendo do caso de uso
  • Integrar ferramentas (gerenciadas pela plataforma ou pelo cliente)
  • Gerenciar o estado da conversa no serviço ou no cliente

Essa abordagem unificada permite que você comece a criar agentes simples e progressivamente mais avançados, mantendo o controle sobre custo, latência e comportamento.

URL Base 🔗

Use o seguinte URL base para acessar a API de Respostas do OCI:

https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1

Substitua <region> pelo identificador de região apropriado (por exemplo, us-chicago-1).

Suporte a SDK 🔗

A API de Respostas do OCI é compatível com o OpenAI SDK, que é recomendado para interagir com o serviço. Ele é suportado em muitas linguagens, incluindo Python, Java, TypeScript, Go e .NET.

Você também pode usá-lo com frameworks de agentes populares, como LangChain, LlamaIndex e OpenAI Agents SDK.

Instalar o OpenAI SDK (Python) Oficial

Python

pip install openai
Observação

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

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

Faça sua Primeira Solicitação 🔗

O exemplo a seguir mostra como chamar a API de Respostas usando Python:

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)

Se a resposta retornar uma explicação, a API de Respostas do OCI estará funcionando corretamente.

Noções Básicas dos Pontos Finais da API de Respostas do OCI

A API do OCI Responses usa uma interface compatível com OpenAI, mas todas as solicitações são roteadas por meio do ponto final de inferência do OCI Generative AI:

https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1

Isso significa que você pode usar APIs familiares no estilo OpenAI (como /responses ou /containers), enquanto todas as solicitações são executadas no OCI.

Embora as APIs sigam o formato OpenAI, elas são totalmente integradas à OCI:

  • A autenticação usa chaves de API do OCI Generative AI ou acesso baseado no IAM, não credenciais do OpenAI
  • Recursos (como contêineres, armazenamentos de vetores ou arquivos) são criados e gerenciados no OCI, não em um ambiente OpenAI
  • A execução e o processamento de dados permanecem inteiramente na OCI

Por exemplo, quando você chama:

/openai/v1/containers

o contêiner é criado e gerenciado no OCI Generative AI.

Somente os seguintes pontos finais listados são suportados. Outros endpoints do OpenAI não são compatíveis com a OCI Generative AI.

O restante desse início rápido fornece exemplos de como usar esses pontos finais.

Pontos Finais Disponíveis

API URL Base Autenticação Caminho do ponto final
API de Respostas https://inference.generativeai.${region}.oci.oraclecloud.com Chave de API ou sessão do IAM /openai/v1/responses
API de Conversas https://inference.generativeai.${region}.oci.oraclecloud.com Chave de API ou sessão do IAM /openai/v1/conversations
API de Arquivos https://inference.generativeai.${region}.oci.oraclecloud.com Chave de API ou sessão do IAM /openai/v1/files
API de Arquivos do Vector Store https://inference.generativeai.${region}.oci.oraclecloud.com Chave de API ou sessão do IAM /openai/v1/vector_stores/{id}/files
Pesquisa de loja de vetores https://inference.generativeai.${region}.oci.oraclecloud.com Chave de API ou sessão do IAM /openai/v1/vector_stores/{id}/search
API de Contêineres https://inference.generativeai.${region}.oci.oraclecloud.com Chave de API ou sessão do IAM /openai/v1/containers
CRUD do Projeto https://generativeai.${region}.oci.oraclecloud.com Somente sessão do IAM /20231130/generativeAiProjects
Chave de API CRUD https://generativeai.${region}.oci.oraclecloud.com Somente sessão do IAM /20231130/apikeys
CRUD da Loja Semântica https://generativeai.${region}.oci.oraclecloud.com Somente sessão do IAM /20231130/semanticStores
Loja de vetores CRUD https://generativeai.${region}.oci.oraclecloud.com Somente sessão do IAM /20231130/openai/v1/vector_stores

Autenticação do OCI IAM

Nas etapas anteriores, você usou uma chave de API de IA generativa para autenticar solicitações na API de Respostas do OCI. As chaves de API são uma opção conveniente para testes rápidos e desenvolvimento antecipado. No entanto, para cargas de trabalho de produção, muitas equipes preferem a autenticação baseada no OCI IAM para maior segurança e controle de acesso centralizado.

A API de Respostas do OCI suporta totalmente a autenticação do OCI IAM. Esta seção mostra como usar a autenticação baseada no IAM em vez de chaves de API.

Quando Usar a Autenticação do IAM

Considere o uso da autenticação IAM quando:

  • Executando aplicativos em serviços do OCI (por exemplo, Functions ou OKE)
  • Evitando credenciais de longa duração, como chaves de API
  • Impondo controle de acesso refinado por meio de políticas do IAM

Instalar a Biblioteca de Autenticação do OCI IAM

Instale a biblioteca oci-genai-auth, que fornece utilitários auxiliares para integrar a autenticação do OCI IAM com o OpenAI SDK:

pip install oci-genai-auth

Esta biblioteca inclui os seguintes ajudantes de autenticação:

  • OciSessionAuth (para desenvolvimento local)
  • OciUserPrincipalAuth
  • OciInstancePrincipalAuth
  • OciResourcePrincipalAuth (para ambientes gerenciados pelo OCI)

Configurar o cliente OpenAI

Ao usar a autenticação do IAM, inicialize o cliente OpenAI com um cliente HTTP personalizado e um handler de autenticação. O valor api_key é "not used" nesse caso.

Exemplo: Desenvolvimento Local (OciSessionAuth)

Use essa abordagem ao executar código localmente (por exemplo, em um laptop usando um perfil da CLI do OCI):

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: Ambientes Gerenciados do OCI (OciResourcePrincipalAuth)

Use essa abordagem ao executar em serviços do OCI, 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()),
)

O uso da autenticação do OCI IAM permite que o aplicativo acesse com segurança o OCI Generative AI sem gerenciar chaves de API, ao mesmo tempo em que se alinha às práticas padrão de segurança do OCI.

Garantir Permissões Necessárias

Antes de chamar a API de Respostas do OCI, verifique se as políticas apropriadas do IAM estão em vigor. As políticas necessárias dependem do método de autenticação usado.

Se estiver Usando a Autenticação do OCI IAM

Se você tiver adicionado as políticas em Pré-requisito: Configurar Permissões do Serviço IAM, ignore esta etapa.

Para permitir que um grupo de usuários chame a API de Respostas, adicione a seguinte política:

allow group <your-group-name> 
to manage generative-ai-response in tenancy

Se Usando Autenticação de Chave de API do Serviço Generative AI

Ao usar a autenticação de chave de API, outra política é necessária para autorizar solicitações feitas com a chave de API. Se você tiver adicionado as políticas em 3. Adicionar Permissão à Chave de API, ignore esta etapa.

Para conceder acesso a uma chave de API específica:

allow group <your-group-name> 
to manage generative-ai-response in tenancy 
where ALL {request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}

Para acesso mais amplo (por exemplo, durante o teste), você pode usar uma política mais geral:

allow any-user 
to manage generative-ai-family in tenancy 
where ALL {request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}

Essas políticas garantem que as solicitações, autenticadas por meio de chaves de API ou do IAM, sejam autorizadas a acessar recursos do OCI Generative AI.

Ativar Log 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(
    ...
)

Modelos de Chamada

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.

Modelos Hospedados de Terceiros

A OCI Generative AI fornece acesso a modelos de provedores de terceiros. Especifique o modelo usando seu nome totalmente qualificado:

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."
)

Modelos sob Demanda

Os modelos sob demanda são hospedados e gerenciados pela OCI e estão disponíveis sem a necessidade de infraestrutura dedicada:

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Write a one-sentence explanation of what a database is."
)

Clusters de IA Dedicados (Modo Dedicado)

Para cargas de trabalho de produção que exigem isolamento ou desempenho previsível, você pode implantar 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."
)

Essa flexibilidade permite selecionar o modelo de implantação que melhor se adapta às suas necessidades de desempenho, custo e controle.

Respostas do Fluxo

A API de Respostas do OCI suporta streaming, permitindo que você receba saídas de modelo de forma incremental à medida que são geradas. Isso pode melhorar a capacidade de resposta para saídas mais longas.

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 você deseja exibir respostas aos usuários à medida que elas são geradas.

Saída Estruturada

em alguns casos de uso, talvez você queira que o modelo retorne respostas em um formato estruturado em vez de texto de formato livre. 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

class CalendarEvent(BaseModel):
    name: str
    date: str
    participants: list[str]


response = client.responses.parse(
    model="openai.gpt-oss-120b",
    input=[
        {"role": "system", "content": "Extract the event details."},
        {
            "role": "user",
            "content": "The team meeting is scheduled for Monday with Sarah, John, and Priya.",
        },
    ],
    store=False,
    text_format=CalendarEvent,
)

event = response.output_parsed
print(event)

Rastrear Chamadas de API

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
  • web_search_call
  • file_search_call
  • mcp_call
  • mcp_list_tools

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

Integração com Ferramentas de Observabilidade 🔗

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 plataformas de observabilidade.

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

O exemplo a seguir mostra como usar o Langfuse para rastrear e monitorar chamadas de API de Respostas.

Etapa 1: Instalar o Langfuse SDK

pip install langfuse

Etapa 2: 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"

Etapa 3: Instrumentalizar o Cliente OpenAI

Importe o cliente OpenAI do Langfuse SDK. O código existente permanece inalterado, 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.us-ashburn-1.oci.oraclecloud.com/openai/v1",
    api_key=os.getenv("OCI_GENAI_API_KEY"),
    project=os.getenv("OCI_GENAI_PROJECT_ID"),
)

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

print(response.output_text)

Essa integração fornece visibilidade de ponta a ponta das chamadas de API sem exigir alterações significativas no código do aplicativo.

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.

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="openai.gpt-oss-120b",
    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 URL Acessível à Internet

response = client.responses.create(
    model="openai.gpt-oss-120b",
    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 o "image_url" por um URL de imagem válido.

Entrada do Arquivo como ID do Arquivo

Importante

O Id do Arquivo como recurso de entrada 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)

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.

Esforço de raciocínio

import json

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.

import json

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

print(response.output_text)

Ferramentas de Função

As ferramentas de função permitem que o modelo solicite dados ou ações do aplicativo cliente durante um fluxo de resposta. Isso é útil quando o modelo precisa de informações que estejam fora do próprio prompt, como dados de calendário, estado interno do aplicativo 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 sinaliza que uma função deve ser usada, o aplicativo cliente executa esse trabalho e, em seguida, o aplicativo envia o resultado de volta para que o modelo possa continuar e produzir a resposta voltada para o usuário.

O que isso permite

As ferramentas de função são úteis quando o aplicativo precisa manter o controle da execução e, ao mesmo tempo, permitir que o modelo decida quando informações externas são necessárias.

Os casos de uso típicos incluem:

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

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 da ferramenta de função funciona desta forma:

  1. O cliente envia uma solicitação que inclui uma ou mais definições de ferramentas.
  2. O modelo decide se uma dessas ferramentas é necessária.
  3. Se uma ferramenta for necessária, o modelo retornará o nome da ferramenta e os argumentos.
  4. O aplicativo executa a ferramenta 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 Controle 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 precisas e parâmetros bem definidos ajudam o modelo a selecionar a ferramenta certa e gerar argumentos utilizáveis.

Definir uma ferramenta de funções

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 Serviço

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)

Ferramentas de função sã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 de que precisa.

Ferramenta MCP

A ferramenta MCP permite que um modelo use recursos expostos por um servidor MCP remoto durante uma solicitação. Esses recursos podem incluir acesso a serviços externos, origens de dados ou pontos finais de aplicativos.

Na OCI Generative AI, esse recurso está disponível por meio de chamada MCP remota, que permite que o serviço interaja com um servidor MCP como parte do fluxo de trabalho do modelo.

Quando Usar a Ferramenta MCP

Use a ferramenta MCP quando o modelo precisar de acesso a recursos externos hospedados em um servidor MCP.

Essa abordagem é útil quando você deseja:

  • O serviço 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 recursos expostos por meio de um servidor MCP remoto

A ferramenta MCP faz parte do conjunto de ferramentas da OCI Generative AI e pode ser usada junto com outras ferramentas suportadas.

Suporte de Transporte

A chamada MCP remota usa HTTP Streamable.

Definir uma ferramenta MCP

Adicione a definição do servidor MCP no campo tools da solicitação.

response_stream = client.responses.create(
    model="xai.grok-code-fast-1",
    tools=[
        {
            "type": "mcp",
            "server_label": "calendar",
            "server_description": "An MCP server that retrieves calendar events for a specified date.",
            "server_url": "https://example.com/mcp",
            "require_approval": "never",
        },
    ],
    input="What events are scheduled for 2026-04-02?",
    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 pelo Servidor MCP

Se o servidor MCP remoto expor mais ferramentas do que o aplicativo precisa, você poderá restringir o conjunto disponível usando allowed_tools.

response_stream = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=[
        {
            "type": "mcp",
            "server_label": "calendar",
            "server_description": "An MCP server that retrieves calendar events for a specified date.",
            "server_url": "https://example.com/mcp",
            "require_approval": "never",
            "allowed_tools": ["get_events"],
        },
    ],
    input="Show the calendar events for 2026-02-02.",
    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,
    store=False,
)

Informe apenas o valor do token. Não inclua o prefixo Bearer. O OCI envia o token pelo TLS como parte da solicitação e não o decodifica, inspeciona, armazena ou registra.

Hospedagem de Servidor MCP

A OCI Generative AI também fornece hospedagem de servidor MCP para ajudar a implementar e dimensionar servidores MCP.

A ferramenta MCP é uma boa opção quando você deseja que a OCI Generative AI trabalhe diretamente com um servidor MCP remoto durante a execução da solicitação, sem exigir que o aplicativo cliente trate cada etapa da ferramenta em si.

Interpretador de códigos

O Code Interpreter permite que o modelo grave e execute código Python em um contêiner seguro. Isso é útil para tarefas como cálculos, análise de dados e processamento de arquivos.

Em prompts, você pode chamar a ferramenta Code Interpreter como a ferramenta python. Por exemplo: Use a ferramenta python para resolver o problema.

Como o código é executado em um ambiente isolado sem acesso à rede externa, é uma boa opção para tarefas que precisam de computação ou processamento de arquivos em uma configuração controlada.

Para que você pode usá-lo

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

Você pode usá-lo para tarefas como:

  • resolvendo problemas matemáticos
  • analisando arquivos carregados
  • limpando ou transformando dados
  • criando gráficos ou tabelas
  • gerando 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, por isso muitas tarefas comuns funcionam sem configuração extra.

O código é executado dentro de um contêiner. Esse contêiner é o ambiente de trabalho em que o Python é executado e em que os arquivos 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, poderia suportar:

  • sessenta e quatro recipientes 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
  • arquivos devem ser carregados novamente, se necessário
  • estado na memória, como variáveis Python, é perdido

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

Exemplo

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)

Contêineres para o Code Interpreter

O Code Interpreter precisa de um contêiner. O container é o ambiente isolado no qual o modelo executa o código Python.

Um contêiner pode conter:

  • arquivos transferidos por upload
  • arquivos criados pelo modelo
  • dados de trabalho temporário durante a execução

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

  • automático: o OCI Generative AI cria o contêiner para você e atribui automaticamente um tamanho de contêiner.
  • OCID do construtor: Você mesmo cria o contêiner, define o tamanho do contêiner e fornece o OCID.

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

Modo Automático

No modo automático, o serviço cria 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 o OCI Generative AI gerencie o contêiner
  • você não precisa de controle direto sobre o ambiente
  • você quer uma configuração mais simples
response = client.responses.create(
    model="xai.grok-code-fast-1",
    tools=[{
        "type": "code_interpreter",
        "container": {
            "type": "auto"
        }
    }],
    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 especificidades do contêiner, como o tamanho da memória.

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 pode trabalhar com 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

Persistência de Arquivo 🔗

Os arquivos criados ou alterados pela ferramenta python permanecem disponíveis 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:

  1. ler um arquivo
  2. analisá-lo
  3. salvar um gráfico
  4. usar 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 arquivo de contêiner.

As operações comuns incluem:

  • Criar Arquivo Contêiner: Adicione um arquivo ao contêiner
  • 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 referenciados na resposta.

Essas referências incluem:

  • container_id
  • file_id
  • filename

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

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. Por isso, a documentação OpenAI relacionada pode ser usada como referência para estrutura de solicitação, formatos de resposta e fluxos de trabalho gerais. No entanto, ao usar essas APIs com a OCI, envie solicitações para os 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 de Respostas do OCI suporta pontos finais compatíveis com OpenAI para recursos como Respostas, Arquivos, Contêineres e Arquivos de Contêiner. Por isso, a documentação OpenAI relacionada pode ser usada como referência para estrutura de solicitação, formatos de resposta e fluxos de trabalho gerais. No entanto, ao usar essas APIs com o OCI, envie solicitações para os pontos finais de inferência do OCI Generative AI, use a autenticação do OCI e os recursos e a execução permanecerão no OCI Generative AI, não em uma tenancy OpenAI. Consulte Pontos Finais Disponíveis para obter o URL base e os pontos finais suportados.

Referência OpenAI

Ferramenta NL2SQL

A ferramenta NL2SQL ajuda os agentes de IA empresarial a transformar linguagem natural em SQL validado. Ele foi projetado para consultar dados empresariais federados sem mover ou duplicar os dados subjacentes.

O NL2SQL mapeia a linguagem de negócios para campos de banco de dados, tabelas e junções por meio de uma camada de enriquecimento semântico. A ferramenta gera somente SQL. Ele não executa a consulta propriamente dita.

A execução da consulta é tratada separadamente pelo Servidor DBTools MCP. Esse servidor chama o serviço NL2SQL para gerar SQL e, em seguida, autoriza e executa a consulta no banco de dados de origem usando a identidade do usuário final e os guardrails apropriados.

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 duas conexões DBTools:

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

Durante a configuração, você seleciona quando o enriquecimento é executado:

  • Na criação: o enriquecimento é iniciado automaticamente após a criação do armazenamento semântico
  • Manual: o enriquecimento é acionado posteriormente por meio de uma chamada de API

O processo de enriquecimento lê metadados de esquema, como tabelas e colunas do banco de dados conectado. Esses metadados são então usados para gerar SQL mais preciso.

Após a conclusão do enriquecimento, você poderá chamar a API GenerateSqlFromNl para converter a entrada de linguagem natural em SQL.

Pré-requisitos

Antes de usar a ferramenta NL2SQL, primeiro crie um banco de dados e configure as conexões de banco de dados necessárias.

Para obter mais informações, consulte:

Permissões para Lojas Semânticas

Para usar dados estruturados para consultas NL2SQL e com reconhecimento de esquema, configure as políticas do IAM necessárias antes de criar o armazenamento semântico.

Acesso a Segredos

Conceda ao grupo acesso para ler os segredos usados pelo serviço Database Tools:

allow group <your-group-name> 
to read secret-family in compartment <your-compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}

Acesso a Conexões do Serviço Database Tools

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

allow group <your-group-name> 
to use database-tools-family in compartment <compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}
allow group <your-group-name> 
to read database-family in compartment <compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}
allow group <your-group-name> 
to read autonomous-database-family in compartment <compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}

Acesso a recursos de IA generativa

Se a política mais ampla abaixo já estiver em vigor, ela incluirá o acesso aos recursos de armazenamento semântico:

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

Se quiser restringir o acesso, use a seguinte política para permitir que o grupo crie e gerencie armazenamentos semânticos:

allow group <your-group-name> 
to manage generative-ai-semantic-store 
in compartment <your-compartment-name>

Se o grupo só precisar usar um armazenamento semântico existente e chamar NL2SQL, use estas políticas mais específicas:

allow group <your-group-name> 
to use generative-ai-semantic-store 
in compartment <your-compartment-name>
allow group <your-group-name> 
to manage generative-ai-nl2sql 
in compartment <your-compartment-name>

Criando um Armazenamento Semântico

Um armazenamento semântico é um armazenamento de vetores com dados estruturados apontando para um banco de dados. Esta tarefa documenta as etapas para criar um armazenamento de vetores com dados estruturados usando a Console do Oracle Cloud.

Dica

Depois de criar um armazenamento de vetores, você poderá exibir seus detalhes e executar outras tarefas, como atualizá-lo ou excluí-lo. Use o menu Ações (três pontos) na Console para acessar essas tarefas.

Para criar um armazenamento de vetores, na página de lista, selecione Criar armazenamento de vetores. Se precisar de ajuda para localizar a página da lista, consulte Listando Lojas de Vetores.

Informações básicas

  1. Informe um nome para o armazenamento de vetores.
    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 para o armazenamento de vetores.
  3. Selecione um compartimento no qual criar o armazenamento de vetores. O compartimento padrão é o mesmo da página de lista, mas você pode selecionar qualquer compartimento em que tenha permissão para trabalhar.

Tipo de Origem de Dados

Selecione Dados estruturados. Essa opção cria um armazenamento semântico para consultas NL2SQL e com reconhecimento de esquema.

Dados Estruturados

  1. Em Configurar conector de sincronização, selecione um Tipo de conexão.

    Valor permitido: Ferramenta do OCI Database.

  2. Informe o ID da conexão de aprimoramento e selecione Testar conexão de aprimoramento para verificar o acesso.
  3. Informe o ID da conexão de consulta e selecione Testar conexão de consulta para verificar o acesso.
  4. Em Esquemas, especifique os nomes de esquema de banco de dados a serem ingeridos para consultas NL2SQL e com reconhecimento de esquema.

API de Armazenamento Semântico

Você pode gerenciar armazenamentos semânticos usando a seguinte API:

  • ChangeSemanticStoreCompartment
  • CreateSemanticStore
  • DeleteSemanticStore
  • GetSemanticStore
  • UpdateSemanticStore
  • ListSemanticStores

Para o gerenciamento de jobs de enriquecimento, a seguinte API também está disponível:

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob

Exemplo: Criar e Gerenciar um Armazenamento Semântico com Python

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

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


def get_signer_auth_api_key(profile="DEFAULT"):
    config = oci.config.from_file("~/.oci/config", profile)
    signer = oci.signer.Signer(
        tenancy=config["tenancy"],
        user=config["user"],
        fingerprint=config["fingerprint"],
        private_key_file_location=config["key_file"],
        pass_phrase=config.get("pass_phrase"),
    )
    return config, signer


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


def update_semantic_store(client, semantic_store_id: str, body: dict):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
        method="PUT",
        header_params={"content-type": "application/json"},
        body=body,
        retry_strategy=DEFAULT_RETRY_STRATEGY,
    )


def get_semantic_store(client, semantic_store_id: str):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
        method="GET",
        retry_strategy=DEFAULT_RETRY_STRATEGY,
    )


def delete_semantic_store(client, semantic_store_id: str):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
        method="DELETE",
        retry_strategy=DEFAULT_RETRY_STRATEGY,
    )


if __name__ == "__main__":
    # Choose one authentication method
    # config, signer = get_signer_auth_api_key(profile="DEFAULT")
    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": "ocid1.tenancy.oc1..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))

    semantic_store_id = create_payload.get("id") or "<semantic-store-ocid>"

    update_body = {
        "refreshSchedule": {"type": "ON_CREATE"},
        "schemas": {
            "connectionType": "DATABASE_TOOLS_CONNECTION",
            "schemas": [{"name": "ADMIN"}],
        },
    }

    update_resp = update_semantic_store(client, semantic_store_id, update_body)
    print("UPDATE status:", update_resp.status)
    print("UPDATE response:", update_resp.data)

    get_resp = get_semantic_store(client, semantic_store_id)
    print("GET status:", get_resp.status)
    print("GET response:", get_resp.data)

    delete_resp = delete_semantic_store(client, semantic_store_id)
    print("DELETE status:", delete_resp.status)
    print("DELETE response:", delete_resp.data)

Exemplo: Chamar a API NL2SQL

Depois que o armazenamento semântico estiver pronto e o enriquecimento tiver sido concluído, você poderá chamar 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))

Conversas de vários turnos

A OCI Generative AI oferece suporte a interações de várias voltas para que você possa criar aplicações que mantenham o contexto entre as voltas do usuário.

Há duas maneiras comuns de fazer isso:

  • Encadeamento de respostas
  • API de Conversas

Encadeamento de Respostas

Com o encadeamento de respostas, cada nova resposta aponta para a anterior. Esta é uma opção simples quando você deseja levar o contexto adiante sem criar explicitamente um recurso de conversa.

# first turn
response1 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Give me three ideas for a team offsite.",
)
print("Response 1:", response1.output_text)

# second turn
response2 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Make the second idea more budget friendly.",
    previous_response_id=response1.id,
)
print("Response 2:", response2.output_text)

API de Conversas

Com a API Conversas, você cria uma conversa primeiro e depois anexa respostas a essa conversa. Isso é útil quando você deseja um objeto de conversa dedicado que possa ser reutilizado por turnos.
# create a conversation
conversation = client.conversations.create(
    metadata={"topic": "demo"}
)
print("Conversation ID:", conversation.id)

# first turn
response1 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Give me three ideas for a team offsite.",
    conversation=conversation.id,
)
print("Response 1:", response1.output_text)

# second turn
response2 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Make the second idea more budget friendly.",
    conversation=conversation.id,
)
print("Response 2:", response2.output_text)