🐍 Exemplos de Código•2 min de leitura
Chatbot com Streaming usando OpenAI API
Crie um chatbot interativo no terminal com respostas em tempo real usando a API da OpenAI com streaming.
#openai#chatbot#streaming#python
O que vamos construir
Um chatbot no terminal que:
- Mantém histórico da conversa
- Mostra respostas em tempo real (streaming)
- Tem personalidade configurável via system prompt
Código Completo
"""
Chatbot com Streaming - OpenAI API
Respostas aparecem em tempo real no terminal.
"""
import os
from openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
SYSTEM_PROMPT = """Você é um assistente especializado em Inteligência Artificial.
Responda sempre em português brasileiro, de forma clara e técnica.
Quando relevante, inclua exemplos de código Python."""
def chat(messages: list[dict]) -> str:
"""Envia mensagem com streaming e retorna resposta completa."""
stream = client.chat.completions.create(
model="gpt-4",
messages=messages,
stream=True,
temperature=0.7,
max_tokens=2000,
)
full_response = ""
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
full_response += content
print() # nova linha após streaming
return full_response
def main():
print("🧠 Chatbot IA — digite 'sair' para encerrar")
print("=" * 50)
messages = [{"role": "system", "content": SYSTEM_PROMPT}]
while True:
try:
user_input = input("\n👤 Você: ").strip()
except (KeyboardInterrupt, EOFError):
break
if not user_input:
continue
if user_input.lower() in ("sair", "exit", "quit"):
print("👋 Até mais!")
break
messages.append({"role": "user", "content": user_input})
print("\n🤖 IA: ", end="")
response = chat(messages)
messages.append({"role": "assistant", "content": response})
if __name__ == "__main__":
main()
Como rodar
# Instalar
pip install openai
# Configurar API key
export OPENAI_API_KEY="sk-..."
# Executar
python chatbot.py
Variação: Com Histórico Salvo
import json
from pathlib import Path
HISTORY_FILE = Path("chat_history.json")
def save_history(messages):
HISTORY_FILE.write_text(json.dumps(messages, ensure_ascii=False, indent=2))
def load_history():
if HISTORY_FILE.exists():
return json.loads(HISTORY_FILE.read_text())
return [{"role": "system", "content": SYSTEM_PROMPT}]
Adicione save_history(messages) após cada resposta para persistir o contexto entre sessões!