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.
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 tenancyConceder 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 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
-
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.
- 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.
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.
- 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.
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.
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
Nomes de chaves e tempos de expiração
Certifique-se de Adicionar Permissão de Chave de API após criar a chave. Use o comando
api-key createe 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:
- Navegue até a página da lista Chaves de API.
- Selecione a chave da API criada.
- 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/v1Substitua <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 openaiPara 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-authEsta biblioteca inclui os seguintes ajudantes de autenticação:
OciSessionAuth(para desenvolvimento local)OciUserPrincipalAuthOciInstancePrincipalAuthOciResourcePrincipalAuth(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 tenancySe 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:
messageweb_search_callfile_search_callmcp_callmcp_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 langfuseEtapa 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
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:
- O cliente envia uma solicitação que inclui uma ou mais definições de ferramentas.
- O modelo decide se uma dessas ferramentas é necessária.
- Se uma ferramenta for necessária, o modelo retornará o nome da ferramenta e os argumentos.
- O aplicativo executa a ferramenta e prepara o resultado.
- O aplicativo envia esse resultado de volta em uma solicitação de acompanhamento.
- 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_ide 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.
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
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.
Ferramenta de pesquisa de arquivos
A ferramenta File Search permite que o modelo procure conteúdo relevante de arquivos armazenados em um armazenamento de vetores e use esse conteúdo recuperado ao formar uma resposta. Isso é útil quando você deseja que as respostas reflitam os documentos que forneceu, em vez de depender apenas do conhecimento integrado do modelo.
Como a Pesquisa de Arquivo é tratada pelo serviço, o aplicativo não precisa implementar seu próprio pipeline de recuperação.
Prepare uma loja de vetores
Antes de usar a Pesquisa de Arquivos, crie um armazenamento de vetores e adicione os arquivos aos quais você deseja que o modelo faça referência. O OCI Generative AI suporta vários padrões de tratamento de arquivos por meio de APIs que seguem o estilo de API OpenAI Files.
| Conjunto de APIs | Descrição |
|---|---|
| Arquivos | Gerenciamento de arquivos padrão. |
| Arquivos do Vector Store | Arquivos vinculados diretamente às lojas. |
| Lotes de Arquivos de Armazenamento de Vetores | Arquivos para processamento em batch a serem adicionados às lojas. |
| Arquivos Contêiner | Tratamento de arquivos em contêineres. |
Exemplo
Para disponibilizar a Pesquisa de Arquivos em uma solicitação, adicione uma entrada de ferramenta com type: "file_search" e forneça o ID do armazenamento de vetores.
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Summarize the main ideas covered in the documents in this vector store.",
tools=[
{
"type": "file_search",
"vector_store_ids": ["<vector_store_id>"]
}
]
)
print(response)
- O modelo pode usar o conteúdo de armazenamento de vetores durante a geração de resposta.
- A recuperação de arquivos é gerenciada pela plataforma.
- Não há suporte para parâmetros de pesquisa híbrida com a ferramenta Pesquisa de Arquivo.
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:
- ler um arquivo
- analisá-lo
- salvar um gráfico
- 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_idfile_idfilename
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.
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 tenancySe 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.
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 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
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
API de Armazenamento Semântico
Você pode gerenciar armazenamentos semânticos usando a seguinte API:
ChangeSemanticStoreCompartmentCreateSemanticStoreDeleteSemanticStoreGetSemanticStoreUpdateSemanticStoreListSemanticStores
Para o gerenciamento de jobs de enriquecimento, a seguinte API também está disponível:
ListEnrichmentJobsGetEnrichmentJobGenerateEnrichmentJobCancelEnrichmentJob
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
# 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)