atendentepro 0.5.2__tar.gz → 0.5.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {atendentepro-0.5.2 → atendentepro-0.5.5}/CHANGELOG.md +18 -0
- atendentepro-0.5.5/PKG-INFO +608 -0
- atendentepro-0.5.5/README.md +552 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/pyproject.toml +1 -1
- atendentepro-0.5.2/PKG-INFO +0 -320
- atendentepro-0.5.2/README.md +0 -264
- {atendentepro-0.5.2 → atendentepro-0.5.5}/LICENSE +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/MANIFEST.in +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/README.md +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/answer.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/confirmation.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/escalation.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/feedback.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/flow.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/interview.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/knowledge.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/onboarding.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/triage.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/agents/usage.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/config/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/config/settings.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/guardrails/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/guardrails/manager.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/license.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/models/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/models/context.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/models/outputs.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/network.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/answer.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/confirmation.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/escalation.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/feedback.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/flow.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/interview.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/knowledge.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/onboarding.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/prompts/triage.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/templates/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/templates/manager.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/utils/__init__.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/utils/openai_client.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro/utils/tracing.py +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/atendentepro.egg-info/SOURCES.txt +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/requirements.txt +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/setup.cfg +0 -0
- {atendentepro-0.5.2 → atendentepro-0.5.5}/setup.py +0 -0
|
@@ -5,6 +5,24 @@ All notable changes to AtendentePro will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.5] - 2025-01-06
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- GitHub Actions workflow now only triggers PyPI publish on version tags
|
|
12
|
+
|
|
13
|
+
## [0.5.4] - 2025-01-06
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Complete standalone documentation in README.md for PyPI
|
|
17
|
+
- All documentation now visible directly on PyPI page
|
|
18
|
+
- No external links to private repository
|
|
19
|
+
|
|
20
|
+
## [0.5.3] - 2025-01-06
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- Documentation links now use absolute GitHub URLs for PyPI compatibility
|
|
24
|
+
- Removed reference to private `examples/` folder
|
|
25
|
+
|
|
8
26
|
## [0.5.2] - 2025-01-06
|
|
9
27
|
|
|
10
28
|
### Changed
|
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: atendentepro
|
|
3
|
+
Version: 0.5.5
|
|
4
|
+
Summary: Sistema de Atendimento Inteligente com Múltiplos Agentes IA - Biblioteca independente e modular baseada no OpenAI Agents SDK
|
|
5
|
+
Author-email: BeMonkAI <contato@monkai.com.br>
|
|
6
|
+
Maintainer-email: BeMonkAI <contato@monkai.com.br>
|
|
7
|
+
License: Proprietary
|
|
8
|
+
Project-URL: Homepage, https://github.com/BeMonkAI/atendentepro
|
|
9
|
+
Project-URL: Documentation, https://github.com/BeMonkAI/atendentepro#readme
|
|
10
|
+
Project-URL: Repository, https://github.com/BeMonkAI/atendentepro
|
|
11
|
+
Project-URL: Issues, https://github.com/BeMonkAI/atendentepro/issues
|
|
12
|
+
Project-URL: Changelog, https://github.com/BeMonkAI/atendentepro/blob/main/CHANGELOG.md
|
|
13
|
+
Keywords: ai,agents,customer-service,chatbot,openai,multi-agent,atendimento,openai-agents,conversational-ai,rag
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: Other/Proprietary License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Communications :: Chat
|
|
24
|
+
Classifier: Operating System :: OS Independent
|
|
25
|
+
Requires-Python: >=3.9
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: openai-agents>=0.3.3
|
|
29
|
+
Requires-Dist: openai>=1.107.1
|
|
30
|
+
Requires-Dist: pydantic>=2.0.0
|
|
31
|
+
Requires-Dist: PyYAML>=6.0
|
|
32
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
33
|
+
Requires-Dist: httpx>=0.27.0
|
|
34
|
+
Requires-Dist: numpy>=1.24.0
|
|
35
|
+
Requires-Dist: scikit-learn>=1.3.0
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
39
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
41
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
42
|
+
Provides-Extra: docs
|
|
43
|
+
Requires-Dist: mkdocs>=1.5.0; extra == "docs"
|
|
44
|
+
Requires-Dist: mkdocs-material>=9.0.0; extra == "docs"
|
|
45
|
+
Provides-Extra: rag
|
|
46
|
+
Requires-Dist: PyPDF2>=3.0.0; extra == "rag"
|
|
47
|
+
Requires-Dist: python-docx>=0.8.11; extra == "rag"
|
|
48
|
+
Requires-Dist: python-pptx>=0.6.21; extra == "rag"
|
|
49
|
+
Requires-Dist: PyMuPDF>=1.23.0; extra == "rag"
|
|
50
|
+
Provides-Extra: tracing
|
|
51
|
+
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == "tracing"
|
|
52
|
+
Requires-Dist: azure-monitor-opentelemetry-exporter>=1.0.0; extra == "tracing"
|
|
53
|
+
Provides-Extra: all
|
|
54
|
+
Requires-Dist: atendentepro[dev,docs,rag,tracing]; extra == "all"
|
|
55
|
+
Dynamic: license-file
|
|
56
|
+
|
|
57
|
+
# AtendentePro 🤖
|
|
58
|
+
|
|
59
|
+
[](https://www.python.org/downloads/)
|
|
60
|
+
[](https://pypi.org/project/atendentepro/)
|
|
61
|
+
[](LICENSE)
|
|
62
|
+
|
|
63
|
+
**Sistema de Atendimento Inteligente com Múltiplos Agentes IA**
|
|
64
|
+
|
|
65
|
+
Uma biblioteca Python modular para criar sistemas de atendimento automatizado usando múltiplos agentes de IA especializados baseados no [OpenAI Agents SDK](https://github.com/openai/openai-agents-python).
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 📋 Índice
|
|
70
|
+
|
|
71
|
+
- [Instalação](#-instalação)
|
|
72
|
+
- [Ativação (Licença)](#-ativação-licença)
|
|
73
|
+
- [Configurar API Key](#-configurar-api-key)
|
|
74
|
+
- [Início Rápido](#-início-rápido)
|
|
75
|
+
- [Arquitetura](#-arquitetura)
|
|
76
|
+
- [Agentes Disponíveis](#-agentes-disponíveis)
|
|
77
|
+
- [Criar Templates Customizados](#-criar-templates-customizados)
|
|
78
|
+
- [Configurações YAML](#-configurações-yaml)
|
|
79
|
+
- [Escalation Agent](#-escalation-agent)
|
|
80
|
+
- [Feedback Agent](#-feedback-agent)
|
|
81
|
+
- [Fluxo de Handoffs](#-fluxo-de-handoffs)
|
|
82
|
+
- [Suporte](#-suporte)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 📦 Instalação
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Via PyPI
|
|
90
|
+
pip install atendentepro
|
|
91
|
+
|
|
92
|
+
# Ou via pip com versão específica
|
|
93
|
+
pip install atendentepro==0.5.3
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 🔑 Ativação (Licença)
|
|
99
|
+
|
|
100
|
+
A biblioteca **requer um token de licença** para funcionar.
|
|
101
|
+
|
|
102
|
+
### Opção 1: Variável de Ambiente (Recomendado)
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
export ATENDENTEPRO_LICENSE_KEY="ATP_seu-token-aqui"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Opção 2: Via Código
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
from atendentepro import activate
|
|
112
|
+
|
|
113
|
+
activate("ATP_seu-token-aqui")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Opção 3: Arquivo .env
|
|
117
|
+
|
|
118
|
+
```env
|
|
119
|
+
ATENDENTEPRO_LICENSE_KEY=ATP_seu-token-aqui
|
|
120
|
+
OPENAI_API_KEY=sk-sua-chave-openai
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Obter um Token
|
|
124
|
+
|
|
125
|
+
Entre em contato para obter seu token:
|
|
126
|
+
- 📧 **Email:** contato@monkai.com.br
|
|
127
|
+
- 🌐 **Site:** https://www.monkai.com.br
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 🔐 Configurar API Key
|
|
132
|
+
|
|
133
|
+
### OpenAI
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# .env
|
|
137
|
+
OPENAI_API_KEY=sk-sua-chave-openai
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Azure OpenAI
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# .env
|
|
144
|
+
OPENAI_PROVIDER=azure
|
|
145
|
+
AZURE_API_KEY=sua-chave-azure
|
|
146
|
+
AZURE_API_ENDPOINT=https://seu-recurso.openai.azure.com
|
|
147
|
+
AZURE_API_VERSION=2024-02-15-preview
|
|
148
|
+
AZURE_DEPLOYMENT_NAME=gpt-4o
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Via Código
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
from atendentepro import activate, configure
|
|
155
|
+
|
|
156
|
+
activate("ATP_seu-token")
|
|
157
|
+
|
|
158
|
+
configure(
|
|
159
|
+
openai_api_key="sk-sua-chave-openai",
|
|
160
|
+
default_model="gpt-4o-mini"
|
|
161
|
+
)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## ⚡ Início Rápido
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
import asyncio
|
|
170
|
+
from pathlib import Path
|
|
171
|
+
from atendentepro import activate, create_standard_network
|
|
172
|
+
from agents import Runner
|
|
173
|
+
|
|
174
|
+
# 1. Ativar
|
|
175
|
+
activate("ATP_seu-token")
|
|
176
|
+
|
|
177
|
+
async def main():
|
|
178
|
+
# 2. Criar rede de agentes
|
|
179
|
+
network = create_standard_network(
|
|
180
|
+
templates_root=Path("./meu_cliente"),
|
|
181
|
+
client="config"
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# 3. Executar conversa
|
|
185
|
+
result = await Runner.run(
|
|
186
|
+
network.triage,
|
|
187
|
+
[{"role": "user", "content": "Olá, preciso de ajuda"}]
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
print(result.final_output)
|
|
191
|
+
|
|
192
|
+
asyncio.run(main())
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 🏗️ Arquitetura
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
┌────────────────────────────────────────────────────────────────────────────┐
|
|
201
|
+
│ ATENDENTEPRO │
|
|
202
|
+
├────────────────────────────────────────────────────────────────────────────┤
|
|
203
|
+
│ │
|
|
204
|
+
│ 👤 Usuário │
|
|
205
|
+
│ │ │
|
|
206
|
+
│ ▼ │
|
|
207
|
+
│ ┌─────────────┐ │
|
|
208
|
+
│ │ Triage │──► Classifica intenção do usuário │
|
|
209
|
+
│ └─────────────┘ │
|
|
210
|
+
│ │ │
|
|
211
|
+
│ ┌────┴────┬─────────┬─────────┬─────────┬─────────┬─────────┐ │
|
|
212
|
+
│ ▼ ▼ ▼ ▼ ▼ ▼ ▼ │
|
|
213
|
+
│ ┌──────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │
|
|
214
|
+
│ │ Flow │ │Knowl. │ │Confirm│ │ Usage │ │Onboard│ │Escala.│ │Feedbk.│ │
|
|
215
|
+
│ └──────┘ └───────┘ └───────┘ └───────┘ └───────┘ └───────┘ └───────┘ │
|
|
216
|
+
│ │ │
|
|
217
|
+
│ ▼ │
|
|
218
|
+
│ ┌─────────────┐ │
|
|
219
|
+
│ │ Interview │──► Coleta informações estruturadas │
|
|
220
|
+
│ └─────────────┘ │
|
|
221
|
+
│ │ │
|
|
222
|
+
│ ▼ │
|
|
223
|
+
│ ┌─────────────┐ │
|
|
224
|
+
│ │ Answer │──► Sintetiza resposta final │
|
|
225
|
+
│ └─────────────┘ │
|
|
226
|
+
│ │
|
|
227
|
+
│ ══════════════════════════════════════════════════════════════════════ │
|
|
228
|
+
│ 📞 Escalation → Transfere para atendimento humano IMEDIATO │
|
|
229
|
+
│ 📝 Feedback → Registra tickets para resposta POSTERIOR │
|
|
230
|
+
│ │
|
|
231
|
+
└────────────────────────────────────────────────────────────────────────────┘
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 🤖 Agentes Disponíveis
|
|
237
|
+
|
|
238
|
+
| Agente | Descrição | Quando Usar |
|
|
239
|
+
|--------|-----------|-------------|
|
|
240
|
+
| **Triage** | Classifica intenção e direciona | Sempre (ponto de entrada) |
|
|
241
|
+
| **Flow** | Apresenta opções/menu ao usuário | Múltiplas opções disponíveis |
|
|
242
|
+
| **Interview** | Coleta informações através de perguntas | Precisa de dados do usuário |
|
|
243
|
+
| **Answer** | Sintetiza resposta final | Após coletar informações |
|
|
244
|
+
| **Knowledge** | Consulta RAG e dados estruturados | Perguntas sobre documentos/dados |
|
|
245
|
+
| **Confirmation** | Valida com respostas sim/não | Confirmar ações |
|
|
246
|
+
| **Usage** | Responde dúvidas sobre o sistema | "Como funciona?" |
|
|
247
|
+
| **Onboarding** | Cadastro de novos usuários | Novos usuários |
|
|
248
|
+
| **Escalation** | Transfere para humano | Urgente/não resolvido |
|
|
249
|
+
| **Feedback** | Registra tickets | Dúvidas/reclamações/sugestões |
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 📁 Criar Templates Customizados
|
|
254
|
+
|
|
255
|
+
### Estrutura de Pastas
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
meu_cliente/
|
|
259
|
+
├── triage_config.yaml # ✅ Obrigatório
|
|
260
|
+
├── flow_config.yaml # Recomendado
|
|
261
|
+
├── interview_config.yaml # Recomendado
|
|
262
|
+
├── answer_config.yaml # Opcional
|
|
263
|
+
├── knowledge_config.yaml # Opcional
|
|
264
|
+
├── escalation_config.yaml # Recomendado
|
|
265
|
+
├── feedback_config.yaml # Recomendado
|
|
266
|
+
├── guardrails_config.yaml # Recomendado
|
|
267
|
+
└── data/ # Dados estruturados (CSV, etc.)
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Usar o Template
|
|
271
|
+
|
|
272
|
+
```python
|
|
273
|
+
from pathlib import Path
|
|
274
|
+
from atendentepro import create_standard_network
|
|
275
|
+
|
|
276
|
+
network = create_standard_network(
|
|
277
|
+
templates_root=Path("./"),
|
|
278
|
+
client="meu_cliente",
|
|
279
|
+
include_escalation=True,
|
|
280
|
+
include_feedback=True,
|
|
281
|
+
)
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## ⚙️ Configurações YAML
|
|
287
|
+
|
|
288
|
+
### triage_config.yaml (Obrigatório)
|
|
289
|
+
|
|
290
|
+
Define palavras-chave para classificação:
|
|
291
|
+
|
|
292
|
+
```yaml
|
|
293
|
+
agent_name: "Triage Agent"
|
|
294
|
+
|
|
295
|
+
keywords:
|
|
296
|
+
- agent: "Flow Agent"
|
|
297
|
+
keywords:
|
|
298
|
+
- "produto"
|
|
299
|
+
- "serviço"
|
|
300
|
+
- "preço"
|
|
301
|
+
|
|
302
|
+
- agent: "Knowledge Agent"
|
|
303
|
+
keywords:
|
|
304
|
+
- "documentação"
|
|
305
|
+
- "manual"
|
|
306
|
+
- "como funciona"
|
|
307
|
+
|
|
308
|
+
- agent: "Escalation Agent"
|
|
309
|
+
keywords:
|
|
310
|
+
- "falar com humano"
|
|
311
|
+
- "atendente"
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### flow_config.yaml
|
|
315
|
+
|
|
316
|
+
Define opções/menu:
|
|
317
|
+
|
|
318
|
+
```yaml
|
|
319
|
+
agent_name: "Flow Agent"
|
|
320
|
+
|
|
321
|
+
topics:
|
|
322
|
+
- id: 1
|
|
323
|
+
label: "Vendas"
|
|
324
|
+
keywords: ["comprar", "preço", "orçamento"]
|
|
325
|
+
|
|
326
|
+
- id: 2
|
|
327
|
+
label: "Suporte"
|
|
328
|
+
keywords: ["problema", "erro", "ajuda"]
|
|
329
|
+
|
|
330
|
+
- id: 3
|
|
331
|
+
label: "Financeiro"
|
|
332
|
+
keywords: ["pagamento", "boleto", "fatura"]
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### interview_config.yaml
|
|
336
|
+
|
|
337
|
+
Define perguntas para coleta:
|
|
338
|
+
|
|
339
|
+
```yaml
|
|
340
|
+
agent_name: "Interview Agent"
|
|
341
|
+
|
|
342
|
+
interview_questions: |
|
|
343
|
+
Para cada tópico, faça as seguintes perguntas:
|
|
344
|
+
|
|
345
|
+
## Vendas
|
|
346
|
+
1. Qual produto você tem interesse?
|
|
347
|
+
2. Qual quantidade desejada?
|
|
348
|
+
3. Qual seu email para contato?
|
|
349
|
+
|
|
350
|
+
## Suporte
|
|
351
|
+
1. Descreva o problema
|
|
352
|
+
2. Quando começou?
|
|
353
|
+
3. Já tentou alguma solução?
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### guardrails_config.yaml
|
|
357
|
+
|
|
358
|
+
Define escopo e restrições:
|
|
359
|
+
|
|
360
|
+
```yaml
|
|
361
|
+
scope: |
|
|
362
|
+
Este assistente pode ajudar com:
|
|
363
|
+
- Informações sobre produtos
|
|
364
|
+
- Suporte técnico
|
|
365
|
+
- Dúvidas sobre serviços
|
|
366
|
+
|
|
367
|
+
forbidden_topics:
|
|
368
|
+
- "política"
|
|
369
|
+
- "religião"
|
|
370
|
+
- "conteúdo adulto"
|
|
371
|
+
|
|
372
|
+
out_of_scope_message: |
|
|
373
|
+
Desculpe, não posso ajudar com esse assunto.
|
|
374
|
+
Posso ajudar com produtos, suporte ou serviços.
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## 📞 Escalation Agent
|
|
380
|
+
|
|
381
|
+
Transfere para atendimento humano quando:
|
|
382
|
+
- Usuário solicita explicitamente
|
|
383
|
+
- Tópico não coberto pelo sistema
|
|
384
|
+
- Usuário demonstra frustração
|
|
385
|
+
- Agente não consegue resolver
|
|
386
|
+
|
|
387
|
+
### escalation_config.yaml
|
|
388
|
+
|
|
389
|
+
```yaml
|
|
390
|
+
name: "Escalation Agent"
|
|
391
|
+
|
|
392
|
+
triggers:
|
|
393
|
+
explicit_request:
|
|
394
|
+
- "quero falar com um humano"
|
|
395
|
+
- "atendente humano"
|
|
396
|
+
- "falar com uma pessoa"
|
|
397
|
+
|
|
398
|
+
frustration:
|
|
399
|
+
- "você não está me ajudando"
|
|
400
|
+
- "isso não resolve"
|
|
401
|
+
|
|
402
|
+
channels:
|
|
403
|
+
phone:
|
|
404
|
+
enabled: true
|
|
405
|
+
number: "0800-123-4567"
|
|
406
|
+
hours: "Seg-Sex 8h-18h"
|
|
407
|
+
|
|
408
|
+
email:
|
|
409
|
+
enabled: true
|
|
410
|
+
address: "atendimento@empresa.com"
|
|
411
|
+
sla: "Resposta em até 24h"
|
|
412
|
+
|
|
413
|
+
whatsapp:
|
|
414
|
+
enabled: true
|
|
415
|
+
number: "(11) 99999-9999"
|
|
416
|
+
|
|
417
|
+
business_hours:
|
|
418
|
+
start: 8
|
|
419
|
+
end: 18
|
|
420
|
+
days: [monday, tuesday, wednesday, thursday, friday]
|
|
421
|
+
|
|
422
|
+
messages:
|
|
423
|
+
greeting: "Entendo que você precisa de um atendimento especializado."
|
|
424
|
+
out_of_hours: "Nosso atendimento funciona de Seg-Sex, 8h-18h."
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Usar Escalation
|
|
428
|
+
|
|
429
|
+
```python
|
|
430
|
+
network = create_standard_network(
|
|
431
|
+
templates_root=Path("./meu_cliente"),
|
|
432
|
+
client="config",
|
|
433
|
+
include_escalation=True,
|
|
434
|
+
escalation_channels="""
|
|
435
|
+
📞 Telefone: 0800-123-4567 (Seg-Sex 8h-18h)
|
|
436
|
+
📧 Email: atendimento@empresa.com
|
|
437
|
+
💬 WhatsApp: (11) 99999-9999
|
|
438
|
+
""",
|
|
439
|
+
)
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## 📝 Feedback Agent
|
|
445
|
+
|
|
446
|
+
Registra tickets para:
|
|
447
|
+
- ❓ **Dúvidas** - Perguntas que precisam de pesquisa
|
|
448
|
+
- 💬 **Feedback** - Opinião sobre produto/serviço
|
|
449
|
+
- 📢 **Reclamação** - Insatisfação formal (prioridade alta)
|
|
450
|
+
- 💡 **Sugestão** - Ideia de melhoria
|
|
451
|
+
- ⭐ **Elogio** - Agradecimento
|
|
452
|
+
- ⚠️ **Problema** - Bug/erro técnico (prioridade alta)
|
|
453
|
+
|
|
454
|
+
### feedback_config.yaml
|
|
455
|
+
|
|
456
|
+
```yaml
|
|
457
|
+
name: "Feedback Agent"
|
|
458
|
+
|
|
459
|
+
protocol_prefix: "SAC" # Formato: SAC-20240106-ABC123
|
|
460
|
+
|
|
461
|
+
ticket_types:
|
|
462
|
+
- name: "duvida"
|
|
463
|
+
label: "Dúvida"
|
|
464
|
+
default_priority: "normal"
|
|
465
|
+
|
|
466
|
+
- name: "reclamacao"
|
|
467
|
+
label: "Reclamação"
|
|
468
|
+
default_priority: "alta"
|
|
469
|
+
|
|
470
|
+
- name: "sugestao"
|
|
471
|
+
label: "Sugestão"
|
|
472
|
+
default_priority: "baixa"
|
|
473
|
+
|
|
474
|
+
email:
|
|
475
|
+
enabled: true
|
|
476
|
+
brand_color: "#660099"
|
|
477
|
+
brand_name: "Minha Empresa"
|
|
478
|
+
sla_message: "Retornaremos em até 24h úteis."
|
|
479
|
+
|
|
480
|
+
priorities:
|
|
481
|
+
- name: "baixa"
|
|
482
|
+
sla_hours: 72
|
|
483
|
+
- name: "normal"
|
|
484
|
+
sla_hours: 24
|
|
485
|
+
- name: "alta"
|
|
486
|
+
sla_hours: 8
|
|
487
|
+
- name: "urgente"
|
|
488
|
+
sla_hours: 2
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
### Usar Feedback
|
|
492
|
+
|
|
493
|
+
```python
|
|
494
|
+
network = create_standard_network(
|
|
495
|
+
templates_root=Path("./meu_cliente"),
|
|
496
|
+
client="config",
|
|
497
|
+
include_feedback=True,
|
|
498
|
+
feedback_protocol_prefix="SAC",
|
|
499
|
+
feedback_brand_color="#660099",
|
|
500
|
+
feedback_brand_name="Minha Empresa",
|
|
501
|
+
)
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### Diferença: Escalation vs Feedback
|
|
505
|
+
|
|
506
|
+
| Aspecto | Escalation | Feedback |
|
|
507
|
+
|---------|------------|----------|
|
|
508
|
+
| **Propósito** | Atendimento IMEDIATO | Registro para DEPOIS |
|
|
509
|
+
| **Urgência** | Alta | Pode aguardar |
|
|
510
|
+
| **Canal** | Telefone, chat | Email, ticket |
|
|
511
|
+
| **Protocolo** | ESC-XXXXXX | SAC-XXXXXX |
|
|
512
|
+
| **Quando usar** | "Quero falar com alguém" | "Tenho uma sugestão" |
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## 🔄 Fluxo de Handoffs
|
|
517
|
+
|
|
518
|
+
```
|
|
519
|
+
Triage ──► Flow, Knowledge, Confirmation, Usage, Onboarding, Escalation, Feedback
|
|
520
|
+
Flow ────► Interview, Triage, Escalation, Feedback
|
|
521
|
+
Interview► Answer, Escalation, Feedback
|
|
522
|
+
Answer ──► Triage, Escalation, Feedback
|
|
523
|
+
Knowledge► Triage, Escalation, Feedback
|
|
524
|
+
Escalation► Triage, Feedback
|
|
525
|
+
Feedback ► Triage, Escalation
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
### Configuração de Handoffs
|
|
529
|
+
|
|
530
|
+
```python
|
|
531
|
+
# Todos os handoffs habilitados (padrão)
|
|
532
|
+
network = create_standard_network(
|
|
533
|
+
templates_root=Path("./meu_cliente"),
|
|
534
|
+
client="config",
|
|
535
|
+
include_escalation=True, # Padrão: True
|
|
536
|
+
include_feedback=True, # Padrão: True
|
|
537
|
+
)
|
|
538
|
+
|
|
539
|
+
# Sem Escalation ou Feedback
|
|
540
|
+
network = create_standard_network(
|
|
541
|
+
templates_root=Path("./meu_cliente"),
|
|
542
|
+
client="config",
|
|
543
|
+
include_escalation=False,
|
|
544
|
+
include_feedback=False,
|
|
545
|
+
)
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
---
|
|
549
|
+
|
|
550
|
+
## 🔧 Dependências
|
|
551
|
+
|
|
552
|
+
- Python 3.9+
|
|
553
|
+
- openai-agents >= 0.3.3
|
|
554
|
+
- openai >= 1.107.1
|
|
555
|
+
- pydantic >= 2.0.0
|
|
556
|
+
- PyYAML >= 6.0
|
|
557
|
+
- python-dotenv >= 1.0.0
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## 📄 Variáveis de Ambiente
|
|
562
|
+
|
|
563
|
+
| Variável | Descrição | Obrigatório |
|
|
564
|
+
|----------|-----------|-------------|
|
|
565
|
+
| `ATENDENTEPRO_LICENSE_KEY` | Token de licença | ✅ Sim |
|
|
566
|
+
| `OPENAI_API_KEY` | Chave API OpenAI | ✅ (se OpenAI) |
|
|
567
|
+
| `OPENAI_PROVIDER` | `openai` ou `azure` | Não |
|
|
568
|
+
| `DEFAULT_MODEL` | Modelo padrão | Não |
|
|
569
|
+
| `AZURE_API_KEY` | Chave API Azure | ✅ (se Azure) |
|
|
570
|
+
| `AZURE_API_ENDPOINT` | Endpoint Azure | ✅ (se Azure) |
|
|
571
|
+
| `SMTP_HOST` | Servidor SMTP | Para emails |
|
|
572
|
+
| `SMTP_USER` | Usuário SMTP | Para emails |
|
|
573
|
+
| `SMTP_PASSWORD` | Senha SMTP | Para emails |
|
|
574
|
+
|
|
575
|
+
---
|
|
576
|
+
|
|
577
|
+
## 🤝 Suporte
|
|
578
|
+
|
|
579
|
+
- 📧 **Email:** contato@monkai.com.br
|
|
580
|
+
- 🌐 **Site:** https://www.monkai.com.br
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
## 📝 Changelog
|
|
585
|
+
|
|
586
|
+
### v0.5.3
|
|
587
|
+
- Documentação completa no README para PyPI
|
|
588
|
+
|
|
589
|
+
### v0.5.2
|
|
590
|
+
- Atualização de contatos (monkai.com.br)
|
|
591
|
+
|
|
592
|
+
### v0.5.1
|
|
593
|
+
- Prompts modulares para Escalation e Feedback
|
|
594
|
+
- Remoção de handoff circular Answer→Interview
|
|
595
|
+
|
|
596
|
+
### v0.5.0
|
|
597
|
+
- Novo: Feedback Agent (tickets/SAC)
|
|
598
|
+
|
|
599
|
+
### v0.4.0
|
|
600
|
+
- Novo: Escalation Agent (transferência humana)
|
|
601
|
+
|
|
602
|
+
### v0.3.0
|
|
603
|
+
- Sistema de licenciamento
|
|
604
|
+
- Publicação inicial no PyPI
|
|
605
|
+
|
|
606
|
+
---
|
|
607
|
+
|
|
608
|
+
**Made with ❤️ by MonkAI**
|