Neste blog, vamos explorar algumas diferenças-chave entre os modelos de conclusão de chat (como os fornecidos através do endpoint de Conclusões de Chat) e a API de Assistentes da OpenAI, que é mais avançada. Vamos detalhar como essas duas abordagens lidam com mensagens, histórico de conversa, documentos grandes, tarefas de codificação, limites de janelas de contexto e mais. Também vamos ver como a API de Assistentes fornece ferramentas adicionais — como interpretadores de código, recuperação de documentos e chamada de funções — que superam muitas limitações das conclusões de chat.
Entendendo os Modelos de Conclusão de Chat
- Você envia uma lista de mensagens para o modelo.
- O modelo gera uma resposta.
- Você recebe a resposta como saída.
Exemplo de Fluxo de Conclusões de Chat
Você pergunta: “Qual é a capital do Japão?”
- O modelo responde: “A capital do Japão é Tóquio.”
Então, você pergunta: “Me conte algo sobre a cidade.”
- O modelo diz que não tem contexto e não sabe de qual cidade você está falando, pois não mantém inherentemente um registro do histórico de mensagens no mesmo estado de conversa.
Limitações dos Modelos de Conclusão de Chat
1. Sem Histórico de Mensagens Persistente
Uma desvantagem é a falta de histórico de mensagens. Nas conclusões de chat, o modelo não lembra automaticamente mensagens anteriores. Por exemplo, se você perguntar primeiro, “Qual é a capital do Japão?” e depois simplesmente dizer, “Me diga algo sobre a cidade”, o modelo muitas vezes não consegue fazer referência ao nome da cidade a menos que você forneça manualmente novamente.
2. Sem Manipulação Direta de Documentos
Os modelos de conclusão de chat também não oferecem suporte direto para manipulação de grandes documentos. Se você tiver um PDF de 500 páginas e quiser consultar algo como, “Quanto de margem de lucro minha empresa teve no primeiro trimestre de 2023?”, você precisaria de um processo chamado geração aumentada por recuperação (RAG). Isso envolve:
- Converter o documento em texto
- Dividi-lo em partes menores
- Converter essas partes em embeddings
- Armazená-los em um banco de dados vetorial
- Recuperar as partes relevantes no momento da consulta e passá-las como contexto para o modelo
3. Desafios Com Tarefas de Codificação
Outro problema é lidar com tarefas computacionais. Se você pedir para as conclusões de chat fazerem algo como inverter uma string, o modelo pode gerar uma resposta errada ou incompleta. Por exemplo:
# Example question to a Chat Completion model
reverse("Subscribetotalib")
# Hypothetical incorrect output
# "bilattoebircsubs"
Também pode fornecer informações incorretas ou desatualizadas sobre a data atual, pois carece de capacidades computacionais em tempo real.
4. Janela de Contexto Limitada
Os modelos de conclusão de chat têm um limite máximo de tokens fixo. Se exceder esse limite, não poderá passar todas as informações necessárias em uma única solicitação. Essa limitação pode interromper o fluxo de conversas em larga escala ou tarefas com muito contexto.
5. Processamento Síncrono
Por fim, os modelos de conclusão de chat são síncronos. Uma vez que você faz uma pergunta, deve esperar por uma única resposta. Não é possível enviar várias solicitações em paralelo e depois combinar os resultados sem uma orquestração cuidadosa.
Apresentando a API de Assistentes
A API de Assistentes OpenAI aborda os desafios acima, permitindo que você construa assistentes de IA com capacidades adicionais. Ela fornece:

- Instruções. Semelhante a uma mensagem de sistema, estas definem o que seu assistente deve fazer.
- Threads. Todas as mensagens anteriores são armazenadas em threads, para que o assistente possa manter o contexto ao longo de várias interações.
- Ferramentas. Estas incluem recursos como um interpretador de código, recuperação de documentos e chamada de funções.
- Modelos. Atualmente suporta o GPT-4 (prévia 1106) e suportará modelos personalizados ajustados no futuro.
Ferramentas na API de Assistentes
- Intérprete de código. Quando uma tarefa computacional é solicitada — como inverter uma string ou encontrar a data de hoje — o assistente pode usar uma ferramenta de intérprete de código para executar código Python. O assistente então retorna o resultado correto, em vez de depender apenas de previsões de tokens.
- Recuperação. Com a recuperação, você pode enviar até 20 arquivos (cada um com até 52 MB e até 2 milhões de tokens por arquivo). Quando você faz uma consulta, o assistente pode referenciar esses arquivos diretamente, tornando o manuseio de grandes documentos muito mais simples.
- Chamada de função. Você pode definir uma função que consulta seu banco de dados interno (para tarefas como verificar números de vendas). O assistente solicitará a chamada dessa função com os argumentos necessários, e você então retornará os resultados ao assistente. Dessa forma, o modelo pode utilizar dados atualizados que normalmente não teria.
- Manipulação de janelas de contexto maiores. As threads na API dos Assistentes selecionam dinamicamente quais mensagens incluir como contexto, ajudando a lidar com maiores quantidades de conversa. Isso significa que você não está mais rigidamente atado a uma pequena janela de contexto.
Exemplo de Implementação
Abaixo está um trecho de código Python mostrando como criar um assistente, definir instruções, habilitar ferramentas e então executar consultas usando threads. Este código ilustra o fluxo de trabalho assíncrono e o uso de recursos como interpretação de código.
Criando o Assistente
# Step 1: Create the Assistant
from openai import OpenAI
client = OpenAI()
my_assistant = client.beta.assistants.create(
instructions="You are a personal math tutor. When asked a question, write and run Python code to answer the question.",
name="Math Tutor",
tools=[{"type": "code_interpreter"}],
model="gpt-4-1106-preview",
)
print(my_assistant)
Criando uma Thread
# Step 2: Create a Thread
thread = client.beta.threads.create()
print(f"Thread ID: {thread.id}")
'''
Response
{
"id": "thread_abc123",
"object": "thread",
"created_at": 1699012949,
"metadata": {},
"tool_resources": {}
}
'''
print(json.dumps(run.model_dump(), indent =4))
Fazendo uma Pergunta
# Step 3: Ask a Question
question_1 = "Reverse the string 'openaichatgpt'."
message_1 = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=question_1
)
Executando a Consulta Assincronamente
# Run the Query Asynchronously
run_1 = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
# Check the run status
current_run = client.beta.threads.runs.retrieve(run_id=run_1.id)
print(f"Initial Run Status: {current_run.status}")
# Once completed, retrieve the messages
messages = client.beta.threads.messages.list(thread_id=thread.id)
print(json.dumps(messages.model_dumps(), indent=4))
Saída:

Ao fazer outra pergunta no mesmo tópico
# Ask Another Question in the Same Thread
question_2 = "Make the previous input uppercase and tell me the length of the string."
message_2 = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=question_2
)
# Run the second query
run_2 = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
# Check the new run status
current_run_2 = client.beta.threads.runs.retrieve(run_id=run_2.id)
print(f"Second Run Status: {current_run_2.status}")
# Retrieve the new messages
messages_2 = client.beta.threads.messages.list(thread_id=thread.id)
for msg in messages_2:
print(msg.content)
Resultado:

Neste exemplo, você pode ver como o tópico mantém o contexto. Quando pedimos ao assistente para inverter a string, ele utiliza a ferramenta de interpretação de código. Em seguida, pedimos a versão em maiúsculas da entrada anterior e obtemos o comprimento. O assistente lembra da nossa pergunta anterior devido às mensagens armazenadas no tópico.
A API de Assistentes da OpenAI fornece um conjunto robusto de recursos que vão além dos modelos típicos de conclusão de chat. Ela mantém o histórico de mensagens, suporta a recuperação de grandes documentos, executa código Python para cálculos, gerencia contextos maiores e permite a chamada de funções para integrações avançadas. Se você precisa de cálculos em tempo real, Q&A baseado em documentos ou interações mais dinâmicas em suas aplicações de IA, a API de Assistentes oferece soluções que abordam as limitações principais das conclusões de chat padrão.
Usando essas instruções, tópicos, ferramentas (como o intérprete de código e recuperação) e chamada de funções, você pode criar assistentes de IA sofisticados que lidam perfeitamente com tudo, desde a inversão de strings até a consulta de bancos de dados internos. Esta nova abordagem pode transformar a forma como construímos e usamos sistemas orientados por IA em cenários do mundo real.
Obrigado por ler!
Vamos nos conectar no LinkedIn!
Source:
https://dzone.com/articles/chat-completion-models-vs-openai-assitance-api