Como Construir uma Interface LLM White-Label com DeepSeek, Qwen e Python

Aprenda a construir uma interface LLM white-label baseada em DeepSeek, Qwen e Python com streaming de tokens, FastAPI e suporte multi-tenancy.

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:

  1. Desacoplamento de Branding: Suporte a múltiplos tenants com logotipos, paletas de cores, domínios e termos de uso distintos.
  2. 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.
  3. 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(
base
url=os.getenv(“VLLMAPIBASE”, “http://localhost:8000/v1”),
api_key=”none”
)

Configuração simulada de tenants (substituir por banco relacional)

TENANTSDB = {
“tenant
alpha”: {
“model”: “deepseek-ai/DeepSeek-V3”,
“systemprompt”: “Você é o assistente virtual corporativo da Empresa Alpha. Seja direto e técnico.”
},
“tenant
beta”: {
“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 llm
client.chat.completions.create(
model=tenantconfig[“model”],
messages=[
{“role”: “system”, “content”: tenant
config[“systemprompt”]},
{“role”: “user”, “content”: user
prompt}
],
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 = TENANTS
DB.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:

  1. 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.
  2. Rate Limiting e Faturamento: Medição exata do consumo de tokens de entrada e saída por organização.
  3. 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.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.