File size: 8,343 Bytes
a686b1b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
# Caso de Uso: Chatbot de Documentacao Tecnica

Guia completo para criar um chatbot que responde perguntas sobre documentacao tecnica.

**Nivel**: Intermediario
**Tempo**: 30-45 minutos
**Exemplo**: Chatbot para documentacao de API

---

## Cenario

Voce tem documentacao tecnica extensa (manuais, API docs, guias) e quer:
- Responder perguntas dos desenvolvedores rapidamente
- Reduzir tempo de onboarding
- Liberar time de suporte tecnico
- Garantir respostas precisas com citacao de fontes

---

## Passo 1: Preparar Documentacao

### 1.1 Organizar Documentos

Estrutura recomendada:
```
docs/
β”œβ”€β”€ api/
β”‚   β”œβ”€β”€ authentication.md
β”‚   β”œβ”€β”€ endpoints.md
β”‚   └── errors.md
β”œβ”€β”€ guides/
β”‚   β”œβ”€β”€ getting_started.md
β”‚   β”œβ”€β”€ best_practices.md
β”‚   └── deployment.md
└── reference/
    β”œβ”€β”€ cli.md
    └── configuration.md
```

### 1.2 Converter para Formato Suportado

O RAG Template suporta:
- TXT (texto plano)
- PDF (via pypdf)

**Se sua documentacao esta em**:
- **Markdown**: Converta para TXT ou use como esta
- **HTML**: Extraia texto com BeautifulSoup
- **DOCX**: Converta para PDF ou TXT

**Exemplo de conversao MD para TXT**:
```bash
for file in docs/**/*.md; do
    pandoc "$file" -t plain -o "${file%.md}.txt"
done
```

---

## Passo 2: Otimizar Chunking para Docs Tecnicas

Documentacao tecnica tem caracteristicas especiais:
- Codigo embutido
- Listas de parametros
- Exemplos de uso
- Referencias cruzadas

### 2.1 Estrategia Recomendada

Use **chunking recursivo** com separadores customizados:

```python
# Em src/chunking.py (ja implementado)
SEPARATORS = [
    "\n## ",  # Secoes Markdown
    "\n### ", # Subsecoes
    "\n\n",   # Paragrafos
    "\n",     # Linhas
    " "       # Palavras
]
```

### 2.2 Tamanho de Chunk

Para docs tecnicas:
- **Chunk size**: 800-1000 caracteres
- **Overlap**: 150-200 caracteres

**Razao**: Preservar contexto de exemplos de codigo completos.

### 2.3 Teste de Chunking

Use a aba "Comparacao de Chunking":
1. Cole exemplo de doc tecnica
2. Compare 4 estrategias
3. Veja qual mantem codigo/listas intactos

---

## Passo 3: Configurar Embeddings para Dominio Tecnico

### 3.1 Modelo Recomendado

Para docs tecnicas em ingles:
```env
EMBEDDING_MODEL_ID=sentence-transformers/all-MiniLM-L6-v2
```

Alternativas:
- `BAAI/bge-small-en-v1.5` (melhor para docs tecnicos)
- `sentence-transformers/all-mpnet-base-v2` (mais qualidade, 768d)

Para multilingu e (PT-BR + EN):
```env
EMBEDDING_MODEL_ID=sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
```

### 3.2 Ingerir Documentacao

```bash
# Inicie a aplicacao
python app.py

# Aba: Ingestao de Documentos
# 1. Upload de todos os arquivos (batch)
# 2. Estrategia: Recursivo
# 3. Chunk Size: 900
# 4. Overlap: 200
# 5. Iniciar Ingestao
```

**Tempo estimado**: ~5-10min para 100 docs

---

## Passo 4: Configurar Retrieval Otimizado

### 4.1 Hybrid Search

Documentacao tecnica se beneficia de hybrid search:
- **BM25**: Para termos tecnicos exatos (nomes de funcoes, parametros)
- **Vetorial**: Para busca semantica (conceitos)

Configure:
```env
USE_HYBRID_SEARCH=true
HYBRID_ALPHA=0.4  # Enfase em BM25 para termos exatos
```

### 4.2 Reranking

Ative reranking para melhor precisao:
```env
USE_RERANKING=true
RERANKING_TOP_K=5
```

**Pipeline**:
1. Hybrid search recupera 20 documentos
2. Reranker seleciona top 5 mais relevantes
3. LLM usa apenas os 5 melhores

---

## Passo 5: Configurar LLM para Docs Tecnicas

### 5.1 Escolher LLM

Para docs tecnicas, recomendamos:
- **GPT-4** (melhor, mas caro): Entende codigo perfeitamente
- **GPT-3.5-turbo** (bom custo-beneficio): Adequado para maioria
- **Claude 3** (excelente para textos longos)

```env
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-...
```

### 5.2 Ajustar Parametros

```env
TOP_K=5              # Contextos recuperados
TEMPERATURE=0.2      # Baixa = mais preciso
MAX_TOKENS=512       # Respostas concisas
```

### 5.3 Customizar Prompt

Edite `src/generation.py` para prompt especifico:

```python
SYSTEM_PROMPT = """
Voce e um assistente especializado em documentacao tecnica.

DIRETRIZES:
1. Responda APENAS com base nos contextos fornecidos
2. Se a resposta nao esta nos contextos, diga "Nao encontrei essa informacao na documentacao"
3. Cite sempre a secao/arquivo de onde veio a informacao
4. Para codigo, use formatacao markdown com ```
5. Seja preciso e tecnico, nao simplifique demais

FORMATO DE RESPOSTA:
- Resposta direta e objetiva
- Exemplo de codigo (se aplicavel)
- Referencia: [Secao X da Documentacao]
"""
```

---

## Passo 6: Testar e Refinar

### 6.1 Casos de Teste

Crie suite de perguntas comuns:

```
1. Como autenticar na API?
2. Quais sao os endpoints disponiveis?
3. Como tratar erro 401?
4. Qual o rate limit da API?
5. Como fazer deploy em producao?
```

### 6.2 Avaliar Qualidade

Para cada pergunta, verifique:
- Resposta esta correta?
- Fonte esta citada?
- Codigo de exemplo esta incluso (se relevante)?
- Resposta e completa mas concisa?

### 6.3 Iterar

Se qualidade nao e satisfatoria:
1. Ajuste chunk_size
2. Teste hybrid_alpha diferente
3. Aumente/diminua top_k
4. Melhore prompt
5. Considere modelo de LLM melhor

---

## Passo 7: Interface Customizada (Opcional)

### 7.1 Adicionar Features Especificas

Exemplo: Botao "Ver na Documentacao":

```python
# ui/chat_tab.py
def chat_tab():
    # ... codigo existente ...

    with gr.Accordion("Contextos Recuperados"):
        for ctx in contexts:
            with gr.Row():
                gr.Markdown(ctx['content'])
                gr.Button(
                    "Ver Doc Original",
                    link=f"/docs/{ctx['source']}"
                )
```

### 7.2 Adicionar Atalhos

Botoes para perguntas comuns:

```python
common_questions = [
    "Como autenticar?",
    "Quais endpoints existem?",
    "Como tratar erros?",
]

for q in common_questions:
    gr.Button(q).click(
        fn=lambda x=q: x,
        outputs=query_input
    )
```

---

## Passo 8: Deploy

### 8.1 Opcoes Recomendadas

Para chatbot de docs tecnicas:
- **Interno**: Docker em VPS privado
- **Publico**: Hugging Face Spaces ou Railway
- **Enterprise**: Kubernetes com autenticacao

### 8.2 Consideracoes de Seguranca

Se docs sao privadas:
1. Nao use Hugging Face Spaces publico
2. Configure autenticacao (Gradio auth)
3. Use VPN/firewall
4. Database privado

```python
# app.py
demo.launch(
    auth=("username", "password"),
    server_name="0.0.0.0",
    server_port=7860,
    share=False  # Nao criar link publico
)
```

---

## Passo 9: Monitoramento

### 9.1 Metricas Importantes

Track:
- **Perguntas mais comuns**: Identifique gaps na doc
- **Taxa de "nao encontrei"**: Indica docs incompletas
- **Tempo de resposta**: Otimize se >5s
- **Feedback dos usuarios**: Thumbs up/down

### 9.2 Melhorias Continuas

Baseado em dados:
1. Adicione docs para perguntas frequentes sem resposta
2. Melhore chunking se contextos estao quebrados
3. Atualize prompt baseado em feedback
4. Considere fine-tuning se volume e alto

---

## Resultados Esperados

### Antes (sem chatbot)
- Tempo medio para resposta: 30min-2h
- Desenvolvedores pesquisando em docs extensas
- Suporte sobrecarregado

### Depois (com RAG chatbot)
- Tempo medio: <30 segundos
- Auto-servico para 70-80% das perguntas
- Suporte focado em problemas complexos
- Onboarding 3x mais rapido

---

## Casos Reais

### Exemplo 1: Startup de API

**Situacao**: 500 paginas de API docs, time pequeno
**Solucao**: RAG chatbot com GPT-3.5
**Resultado**:
- 60% reducao em tickets de suporte
- NPS +15 pontos
- Tempo de onboarding: 2 semanas β†’ 3 dias

### Exemplo 2: Empresa Enterprise

**Situacao**: Docs internas distribuidas, 10k+ paginas
**Solucao**: RAG com hybrid search + reranking
**Resultado**:
- Busca 10x mais rapida que busca nativa
- Encontra informacao cross-docs
- ROI positivo em 2 meses

---

## Proximos Passos

1. **Multi-idioma**: Adicione docs em outros idiomas
2. **Feedback loop**: Implemente thumbs up/down
3. **Analytics**: Track metricas de uso
4. **Integracoes**: Slack bot, VS Code extension

---

## Recursos

- [Tutorial: Otimizando RAG](../02_optimizing_rag.md)
- [Tutorial: Deploy em Producao](../03_production_deployment.md)
- [FAQ](../../FAQ.md)

---

**Tempo total de implementacao**: 2-4 horas
**Manutencao**: ~1h/semana (adicionar novos docs)