Entrar ou criar conta

Laboratório: Chatbot de Atendimento Empresarial com Claude e GPT via Python SDK

Você vai implementar um chatbot de atendimento que responde perguntas de clientes usando Claude (Anthropic) e GPT (OpenAI) via API, com Python e FastAPI, rodando localmente. Em cerca de 2 horas, terá um endpoint HTTP que recebe perguntas e retorna respostas dos dois modelos, pronto para integração com sistemas internos.

Geração de conteúdo com Claude + GPT
Ligado ao treinamento Geração de conteúdo com Claude + GPT

Roteiro para estudo em ambiente de laboratório ou de teste. Execute apenas em equipamentos, redes e contas que você tenha autorização para usar, com backup e homologação próprios. Comandos podem causar indisponibilidade ou perda de dados. Software e marcas citados pertencem aos seus titulares. Termos de Uso.

Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
Duração estimada
120 min
Passos
13
Validações
5
Versões da documentação consultada
Python a versão estável atual · FastAPI a versão estável atual · Uvicorn a versão estável atual · Anthropic SDK Python a versão estável atual · OpenAI SDK Python a versão estável atual
Objetivo

Demonstrar, na prática, como conectar aplicações empresariais a modelos de linguagem generativa de última geração usando apenas software de código aberto. O laboratório mostra como estruturar prompts, proteger segredos, registrar logs e validar respostas, simulando um cenário real de atendimento automatizado em uma empresa.

Topologia

Uma máquina local (192.168.56.10) roda o backend Python com FastAPI. O backend se conecta à API do Claude (api.anthropic.com) e à API do OpenAI (api.openai.com) via internet. Usuários internos acessam o endpoint HTTP local para enviar perguntas e receber respostas.


Usuário HTTP      Claude API         OpenAI API
     |                |                  |
     |                |                  |
 [FastAPI Backend]----+------------------+
     |
192.168.56.10

Equipamentos e software

ItemRequisito, licença ou versão
PC ou VM2 vCPU, 4GB RAM, 1 porta aberta (8000/tcp), sistema operacional Linux ou Windows 10+
PythonPSF · a versão estável atual
FastAPIMIT · a versão estável atual
UvicornBSD · a versão estável atual
Anthropic SDK PythonApache-2.0 · a versão estável atual
OpenAI SDK PythonMIT · a versão estável atual

Roteiro

  1. Preparar ambiente Python isolado

    Evite conflitos criando um ambiente virtual para dependências.

    python3 -m venv chatbot-env
    source chatbot-env/bin/activate

    O que você deve ver: Prompt do terminal alterado para (chatbot-env)

  2. Instalar dependências

    Instale FastAPI, Uvicorn, e os SDKs oficiais da Anthropic e OpenAI.

    pip install fastapi uvicorn anthropic openai

    O que você deve ver: Mensagem de sucesso do pip para cada pacote

  3. Configurar variáveis de ambiente para segredos

    Nunca exponha chaves de API no código. Use variáveis de ambiente.

    export ANTHROPIC_API_KEY='sua-chave-clique-na-dashboard'
    export OPENAI_API_KEY='sua-chave-clique-na-dashboard'

    O que você deve ver: Variáveis setadas (sem saída, mas disponíveis para o Python)

  4. Criar arquivo main.py

    Implemente o backend FastAPI com endpoints para perguntas e integração com Claude e GPT.

    nano main.py

    O que você deve ver: Arquivo main.py criado para edição

  5. Escrever código do endpoint

    No main.py, crie um endpoint POST /ask que recebe pergunta e retorna respostas dos dois modelos.

    Veja abaixo o exemplo de código.

    O que você deve ver: Código salvo sem erros de sintaxe

  6. Exemplo de código main.py

    Cole o seguinte código no main.py (ajuste as chaves conforme necessário):

    import os
    from fastapi import FastAPI, HTTPException
    from pydantic import BaseModel
    import anthropic
    import openai
    
    app = FastAPI()
    
    class Question(BaseModel):
        question: str
    
    @app.post('/ask')
    async def ask_bot(q: Question):
        # Claude
        try:
            client_claude = anthropic.Anthropic(api_key=os.environ['ANTHROPIC_API_KEY'])
            claude_response = client_claude.messages.create(
                model="claude-sonnet-5",
                max_tokens=512,
                messages=[{"role": "user", "content": q.question}]
            )
            claude_answer = claude_response.content[0].text
        except Exception as e:
            claude_answer = f"Erro Claude: {str(e)}"
        # GPT
        try:
            client_openai = openai.OpenAI(api_key=os.environ['OPENAI_API_KEY'])
            gpt_response = client_openai.chat.completions.create(
                model="gpt-5.6-terra",
                messages=[{"role": "user", "content": q.question}],
                max_tokens=512
            )
            gpt_answer = gpt_response.choices[0].message.content
        except Exception as e:
            gpt_answer = f"Erro GPT: {str(e)}"
        return {"claude": claude_answer, "gpt": gpt_answer}
    

    O que você deve ver: Arquivo main.py com código pronto

  7. Rodar o backend localmente

    Inicie o servidor FastAPI usando Uvicorn.

    uvicorn main:app --host 0.0.0.0 --port 8000

    O que você deve ver: Mensagem 'Uvicorn running on http://0.0.0.0:8000'

  8. Testar endpoint com curl

    Simule uma pergunta de cliente para o chatbot.

    curl -X POST http://localhost:8000/ask -H "Content-Type: application/json" -d '{"question": "Como faço para atualizar minha fatura?"}'

    O que você deve ver: Resposta JSON com campos 'claude' e 'gpt' preenchidos

  9. Registrar logs das respostas

    Adicione prints ou logging para registrar perguntas e respostas em main.py.

    # Exemplo: print(f"Pergunta: {q.question} | Claude: {claude_answer} | GPT: {gpt_answer}")

    O que você deve ver: Logs impressos no terminal a cada requisição

  10. Adicionar validação de entrada

    Garanta que a pergunta não esteja vazia e não exceda 500 caracteres.

    # Adicione antes de chamar as APIs:
    if not q.question or len(q.question) > 500:
        raise HTTPException(status_code=400, detail="Pergunta inválida")

    O que você deve ver: Requisições inválidas retornam erro HTTP 400

  11. Testar com perguntas inválidas

    Envie perguntas vazias ou muito longas para validar o guardrail.

    curl -X POST http://localhost:8000/ask -H "Content-Type: application/json" -d '{"question": ""}'

    O que você deve ver: Resposta HTTP 400 com mensagem de erro

  12. Simular múltiplos acessos simultâneos

    Envie várias requisições em paralelo para testar concorrência.

    for i in {1..5}; do curl -X POST http://localhost:8000/ask -H "Content-Type: application/json" -d '{"question": "Qual o prazo de entrega?"}' & done

    O que você deve ver: Respostas recebidas para todas as requisições

  13. Desligar o backend e limpar variáveis

    Finalize o servidor e remova variáveis de ambiente.

    Ctrl+C
    unset ANTHROPIC_API_KEY
    unset OPENAI_API_KEY

    O que você deve ver: Servidor parado e segredos não mais disponíveis

Como saber que funcionou

TesteComandoCritério
Pergunta simples retorna respostas dos dois modeloscurl -X POST http://localhost:8000/ask -H "Content-Type: application/json" -d '{"question": "Quais os canais de atendimento?"}'Campos 'claude' e 'gpt' com respostas textuais coerentes
Pergunta vazia retorna errocurl -X POST http://localhost:8000/ask -H "Content-Type: application/json" -d '{"question": ""}'HTTP 400 e mensagem 'Pergunta inválida'
Pergunta longa retorna errocurl -X POST http://localhost:8000/ask -H "Content-Type: application/json" -d '{"question": "a"*600}'HTTP 400 e mensagem 'Pergunta inválida'
Logs mostram perguntas e respostasVerifique o terminalLinha de log para cada requisição
Respostas diferentes para perguntas diferentesEnvie duas perguntas distintasRespostas coerentes e diferentes nos campos 'claude' e 'gpt'

Troubleshooting

SintomaCausa provávelCorreção
Erro 'ModuleNotFoundError' ao rodar main.pyDependência não instalada no ambiente virtualAtive o ambiente e rode 'pip install' novamente
Erro 'KeyError' para ANTHROPIC_API_KEY ou OPENAI_API_KEYVariável de ambiente não definidaExporte a variável antes de rodar o servidor
Resposta HTTP 500 ao chamar /askChave de API inválida ou limite excedidoConfirme a chave na dashboard do fornecedor e consulte a documentação
Timeout ou lentidão nas respostasConexão lenta com as APIs externasTeste conectividade com 'curl' direto para as APIs; tente novamente mais tarde
Respostas vazias ou incoerentesPrompt mal formatado ou modelo indisponívelRevise o prompt e consulte a documentação dos modelos

Segurança e hardening

  • Nunca exponha chaves de API em código fonte ou logs públicos
  • Restrinja o acesso ao endpoint HTTP para a rede interna
  • Implemente limites de requisições por IP se for expor para mais usuários
  • Não registre perguntas sensíveis sem anonimização
  • Desative e remova variáveis de ambiente ao finalizar

Checklist final

Referências

  1. Anthropic Python SDK · GitHub (repositório oficial do projeto) (github.com)
  2. Anthropic API Reference · Platform.claude (platform.claude.com)
  3. OpenAI Python SDK · GitHub (repositório oficial do projeto) (github.com)
  4. OpenAI API Reference · Developers.openai (developers.openai.com)
  5. FastAPI Documentation · FastAPI (fastapi.tiangolo.com)
  6. Python Documentation · Python Software Foundation (docs.python.org)
Verificação editorial
Publicado
13/09/2026
Última revisão
13/09/2026
Versão do conteúdo
1.0
Referências
6 oficiais
Revisão técnica
redação e revisão por IA, URLs conferidas na publicação
Status
Atual
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.