Como Construir uma Interface LLM White-Label com DeepSeek, Qwen e Python
Muitas empresas buscam adotar Inteligência Artificial Generativa para atender clientes internos ou externos, mas esbarram em dois obstáculos críticos: a dependência de plataformas SaaS de terceiros (com interfaces genéricas e sem identidade visual própria) e a privacidade de dados sensíveis.
A criação de uma solução white-label baseada em modelos de código aberto de alto desempenho, como Qwen (Alibaba Cloud) ou DeepSeek, resolve esses gargalos. Este artigo explica como estruturar a arquitetura técnica dessa interface web utilizando Python, garantindo personalização de marca, isolamento de dados e alta vazão de inferência.
1. O Desafio da Personalização e Controle em LLMs
Interfaces proprietárias como ChatGPT Enterprise ou Claude Team limitam o controle sobre a experiência do usuário e não permitem revenda sob marcas distintas (multi-tenancy). Para empresas de tecnologia ou consultorias que precisam oferecer uma ferramenta de IA com a identidade visual do cliente final, a arquitetura deve contemplar:
- Desacoplamento de Branding: Suporte a múltiplos tenants com logotipos, paletas de cores, domínios e termos de uso distintos.
- Orquestração Flexível de Modelos: Compatibilidade com pesos abertos eficientes, como DeepSeek-R1/V3 ou Qwen-2.5, que entregam paridade de qualidade a custos computacionais muito inferiores.
- Segurança e Isolamento: Armazenamento individualizado de histórico de conversas e parâmetros de prompt de sistema.
2. Arquitetura da Solução Técnica
Para garantir escalabilidade e baixa latência no envio de tokens via Server-Sent Events (SSE), a arquitetura típica divide-se em três camadas:
[Cliente Web (White-Label UI)]│ (HTTPS / SSE)
▼
[FastAPI Gateway (Python)] ───► [Banco de Dados (Tenants / Histórico)] │ (OpenAI-Compatible API)
▼
[Servidor de Inferência (vLLM / Ollama com Qwen ou DeepSeek)]
Motor de Inferência: vLLM
Como especialista em IA, recomendo a utilização do vLLM para servir modelos como Qwen e DeepSeek em produção. O vLLM implementa o algoritmo PagedAttention, otimizando a alocação de memória na GPU e permitindo concorrência massiva de usuários sem degradação severa de latência.
3. Implementação do Backend em Python (FastAPI)
O gateway de aplicação em Python atua como intermediário, validando a organização (tenant), injetando o system prompt personalizado e transmitindo a resposta do modelo via streaming.
Abaixo, um exemplo prático de implementação usando FastAPI e a biblioteca assíncrona openai apontando para a instância local do vLLM:
python
import os
from fastapi import FastAPI, Header, HTTPException
from fastapi.responses import StreamingResponse
from openai import AsyncOpenAI
from pydantic import BaseModel
app = FastAPI(title=”White-Label LLM Gateway”)
Cliente apontando para o servidor vLLM interno
llmclient = AsyncOpenAI(
baseurl=os.getenv(“VLLMAPIBASE”, “http://localhost:8000/v1”),
api_key=”none”
)
Configuração simulada de tenants (substituir por banco relacional)
TENANTSDB = {
“tenantalpha”: {
“model”: “deepseek-ai/DeepSeek-V3”,
“systemprompt”: “Você é o assistente virtual corporativo da Empresa Alpha. Seja direto e técnico.”
},
“tenantbeta”: {
“model”: “Qwen/Qwen2.5-72B-Instruct”,
“system_prompt”: “Você é o assistente amigável da Loja Beta. Responda com linguagem acessível.”
}
}
class ChatRequest(BaseModel):
prompt: str
async def streamgenerator(tenantconfig: dict, userprompt: str):
response = await llmclient.chat.completions.create(
model=tenantconfig[“model”],
messages=[
{“role”: “system”, “content”: tenantconfig[“systemprompt”]},
{“role”: “user”, “content”: userprompt}
],
stream=True,
temperature=0.7
)
async for chunk in response:
content = chunk.choices[0].delta.content or ""
if content:
yield f"data: {content}nn"
@app.post(“/api/v1/chat”)
async def chatendpoint(payload: ChatRequest, xtenantid: str = Header(…)):
tenant = TENANTSDB.get(xtenantid)
if not tenant:
raise HTTPException(status_code=403, detail=”Tenant não autorizado.”)
return StreamingResponse(
stream_generator(tenant, payload.prompt),
media_type="text/event-stream"
)
4. Frontend White-Label: Customização em Tempo de Execução
A interface web (desenvolvida em React/Next.js ou frameworks leves em Python como NiceGUI/Streamlit para protótipos internos) deve carregar os temas dinamicamente:
- Variáveis CSS Injetadas: Cores primárias, fontes e bordas definidas via tokens JSON vindos do backend com base no subdomínio acessado (ex:
cliente.seusistema.com). - Assets Isolados: Logotipos e ícones armazenados em buckets S3 sob prefixos isolados por tenant.
- Controle de Parâmetros de Inferência: Clientes mais técnicos podem ter acesso a sliders de temperatura e limites de contexto, enquanto usuários corporativos recebem interfaces minimalistas.
5. Próximos Passos e Otimizações
Para levar esta solução a um ambiente corporativo robusto, considere:
- Integração com RAG (Retrieval-Augmented Generation): Adicionar um banco vetorial (como Qdrant ou pgvector) particionado por tenant para que o DeepSeek ou Qwen responda com base nos documentos de cada empresa.
- Rate Limiting e Faturamento: Medição exata do consumo de tokens de entrada e saída por organização.
- Quantização de Modelos: Utilização de formatos como AWQ ou GPTQ para rodar o Qwen-72B em GPUs corporativas com menor custo de infraestrutura.
Se a sua empresa precisa de uma arquitetura personalizada de Inteligência Artificial, com interfaces proprietárias e controle absoluto de dados, entre em contato para estruturarmos uma consultoria técnica sob medida.


