ChatGPT Plugin
Visão Geral
APP PRÓPRIO: Vectora funciona como um Custom GPT Plugin que estende ChatGPT com busca de contexto de codebase. Arquitetura dedicada com OpenAPI schema, ngrok/endpoint público, e publicação na OpenAI plugin store.
Important
ChatGPT Custom GPT Plugin (app próprio) vs MCP Protocol (genérico). Escolha conforme sua IDE/plataforma preferida.
Instalação
Pré-requisitos
- ChatGPT Plus (com acesso a Custom GPTs)
- Servidor Vectora rodando (
vectora mcpouvectora server) - Endpoint público ou ngrok tunnel
Passo 1: Configurar Servidor Vectora Público
Por padrão, Vectora roda em localhost:9090. Para ChatGPT alcançar, você precisa expor:
Opção A: ngrok (Teste)
# Instale ngrok
# https://ngrok.com
# Exponha porta 9090
ngrok http 9090
# Output:
# Forwarding: https://xxxx-xx-xxx-xx-x.ngrok.io -> http://localhost:9090
# Copie o URLOpção B: VPS com IP público (Produção)
# Em seu servidor
vectora server --host 0.0.0.0 --port 9090
# Expose via firewall
# iptables -A INPUT -p tcp --dport 9090 -j ACCEPTOpção C: Managed Vectora (Cloud)
# Registre em https://console.vectora.app
# Obtenha endpoint automático
# https://api.vectora.app/v1/your-project-idPasso 2: Criar Custom GPT no ChatGPT
- Vá para chatgpt.com/gpts/editor
- Clique em “Create a new GPT”
- Nome: “Vectora Codebase Assistant”
- Descrição: “Assistente inteligente para análise de codebase com Vectora”
Passo 3: Configurar Schema OpenAPI
Na aba “Configure” → “Actions”, adicione seu endpoint Vectora:
openapi: 3.0.0
info:
title: Vectora API
version: 1.0.0
servers:
- url: https://xxxx-xx-xxx-xx-x.ngrok.io # Seu endpoint
paths:
/search:
post:
summary: Search codebase context
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
query:
type: string
description: "Search query (semantic)"
namespace:
type: string
description: "Project namespace"
top_k:
type: integer
default: 10
responses:
"200":
description: Search results
content:
application/json:
schema:
type: object
properties:
chunks:
type: array
precision:
type: number
/analyze-dependencies:
post:
summary: Find all usages of a function
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
function_name:
type: string
namespace:
type: string
responses:
"200":
description: Dependency analysis
/file-summary:
post:
summary: Get file structure and summary
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
file_path:
type: string
namespace:
type: string
responses:
"200":
description: File summaryPasso 4: Adicionar Instrução de Sistema
Na aba “Instructions”, copie:
Você é um assistente especializado em análise de código usando Vectora.
Quando o usuário pergunta sobre código:
1. Use a ação "search" para buscar contexto relevante
2. Use "analyze-dependencies" para encontrar relacionados
3. Use "file-summary" para entender estrutura
Sempre cite o arquivo e linha quando referencia código.
Priorize precisão sobre velocidade.
Exemplo bom:
"Encontrei isso em src/auth/jwt.ts:45:
function validateToken(token) { ... }"
Exemplo ruim:
"Acho que a função está em algum lugar"Passo 5: Publicar
Clique em “Publish to Store” e compartilhe com seu time.
Workflows Detalhados
Os workflows abaixo demonstram casos de uso reais do Vectora integrado ao ChatGPT, mostrando conversas práticas e resultados concretos.
Workflow 1: Entender Feature Complexa (Onboarding)
Cenário: Novo dev no time quer entender como funciona autenticação JWT.
Você: "Como funciona o sistema de autenticação JWT aqui?"
ChatGPT (com Vectora):
Encontrei a implementação em 3 arquivos principais:
1. **src/auth/jwt.ts** (definição)
function validateToken(token: string) {
const decoded = jwt.verify(token, SECRET_KEY);
return decoded.payload;
}
2. **src/guards/auth.guard.ts** (aplicação em rotas)
@UseGuards(AuthGuard)
async getProfile(@Req() req) {
// Já está autenticado aqui
}
3. **src/tests/auth.test.ts** (exemplos)
it('should reject expired token', () => {
// Teste mostra comportamento esperado
})
**Fluxo**:
request → AuthGuard.canActivate() → validateToken() → req.user = payload
**Próximos passos**: Adicione sua rota assim...Clique em qualquer arquivo → abre em editor/navegador.
Workflow 2: Debugging Estratégico
Cenário: Você tem um erro e precisa entender causa raiz.
Você: "Teste 'should create user' está falhando com
'Cannot read property id of undefined'.
Onde é o problema?"
ChatGPT (com Vectora):
Procurando o teste e código relacionado...
**Achei o problema!**
Arquivo: src/__tests__/user.service.test.ts:145
it('should create user', () => {
const user = userService.create({ name: 'John' });
expect(user.id).toBeDefined(); // ← Falha aqui
})
Analisando userService.create():
// src/services/user.service.ts:23
create(data: CreateUserInput) {
// Problema: não retorna o user criado
db.insert(users).values(data);
// Deveria ser:
return db.insert(users).values(data).returning();
}
**3 usuários desse padrão no código:**
• src/services/order.service.ts:34
• src/services/product.service.ts:12
• src/services/invoice.service.ts:88
**Sugestão**: Aplicar mesmo fix nos 3 lugares.Workflow 3: Code Review Assistido (PR Complexa)
Cenário: Revisando uma PR que toca múltiplos arquivos de auth.
Você: "Revise essa PR que refactora auth middleware.
[cola 50 linhas de código]"
ChatGPT (com Vectora):
Analisando mudanças...
**Impacto Estimado**: 12 arquivos afetados
- 8 arquivos de rotas (GET /profile, etc)
- 2 testes de auth
- 2 guards
**Problemas detectados**:
1. Comportamento mudou em linha 23
ANTES: guard.canActivate() retorna boolean
AGORA: retorna Promise<boolean>
Isso quebra em 4 lugares:
- src/routes/admin.ts:45
- src/routes/api.ts:78
- src/middleware/verify.ts:12
- src/guards/optional.ts:3
2. Positivo: Novo método isTokenValid() é reutilizado bem
(encontrei 6 usos)
3. Segurança: GuardBlacklist está sendo respeitado
(verifica todos os 4 patterns)
**Testes relacionados que DEVEM passar**:
□ auth.guard.test.ts
□ jwt.validation.test.ts
□ permission.test.ts
□ integration/auth-flow.test.ts
**Conclusão**: Aprove com condições:
1. Corrigir os 4 arquivos (async/await)
2. Rodar full test suite
3. Check: nenhum SECRET_KEY expostoAutenticação & Segurança
Token-based Auth
Se seu servidor requer autenticação:
# Schema OpenAPI
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- bearerAuth: []Configure no GPT:
Vá para "Configure" → "Authentication"
Selecione "API Key"
Cole seu tokenRate Limiting
Proteja seu servidor:
# Em vectora config
server:
rate_limit_per_hour: 1000
max_concurrent: 5Privacidade & Compliance
O que é Enviado para OpenAI
- Sua pergunta (texto)
- Parâmetros de busca (namespace, top_k)
- Chunks NÃO são salvos na OpenAI
O que Permanece Local
- Índices vetoriais (Qdrant)
- Embeddings brutos
- Credenciais de API
Dados Criptografados
# Habilitar criptografia ponta-a-ponta
vectora config set --key "ENCRYPT_TRANSIT" --value "true"
# Certificado SSL/TLS
openssl req -x509 -newkey rsa:4096 -out cert.pem -keyout key.pem
# Usar com HTTPS
vectora server --cert cert.pem --key key.pemTroubleshooting
“Plugin not responding”
Causa: Servidor Vectora offline.
Solução:
# Verificar se está rodando
curl https://seu-endpoint/health
# Se retorna 404, inicie
vectora mcp“Unauthorized”
Causa: Token inválido ou expirado.
Solução:
# Gerar novo token
vectora auth create-token --name "ChatGPT Plugin" --ttl 365d
# Atualizar no Custom GPT settings“Timeout”
Causa: Busca muito lenta.
Solução:
# Reduzir top_k
# Na instrução do GPT, modifique para:
"Use top_k=5 ao invés de 10"
# Ou aumentar timeout
curl -X POST https://seu-endpoint/search \
-H "Timeout: 10000" \
-d "{...}"Performance & Limits
| Recurso | Limite | Upgrade |
|---|---|---|
| Busca/dia | 10,000 | Plano Pro |
| Latência | <2s | SSD + mais CPU |
| Tamanho resposta | 5MB | Compaction |
| Usuários simultâneos | 10 | Managed Vectora |
Exemplos Avançados
Custom GPT para Design Review
Instrução:
"Você é um Design Reviewer baseado em Vectora.
Quando o usuário mostra código:
1. Procure por padrões similares no projeto
2. Avalie consistência
3. Sugira melhorias baseado em style guides existentes
4. Cite exemplos do codebase"Custom GPT para Onboarding
Instrução:
"Você é um Onboarding Assistant.
Novos engenheiros perguntam como o código funciona.
Use Vectora para:
1. Buscar documentação
2. Encontrar exemplos
3. Listar dependências
4. Sugerir arquivos para ler primeiro"Monitoramento
Via console Vectora:
vectora logs --service chatgpt_plugin --level info
# Exemplo output:
# [2026-04-19 10:30:45] POST /search - 200 - 234ms
# [2026-04-19 10:31:12] POST /analyze-dependencies - 200 - 156ms
# [2026-04-19 10:32:00] POST /file-summary - 200 - 89msPróximo: Gemini API
Parte do ecossistema Vectora · Open Source (MIT)