refactor(config): simplify AI provider configuration with provider selector
Remove StepFun provider support and consolidate AI configuration under DEFAULT_AI_PROVIDER variable supporting openrouter, llamacpp, and openai. Update .env, README.md, and main.py to use the new provider-based structure. Add "Qualidade Total na Empresa" to topics list.
This commit is contained in:
@@ -9,30 +9,19 @@ DAYS_OF_WEEK=1,2,3,4,5,6,7
|
|||||||
INTERVAL_MINUTES=120
|
INTERVAL_MINUTES=120
|
||||||
|
|
||||||
# Assuntos (20 assuntos separados por vírgula)
|
# Assuntos (20 assuntos separados por vírgula)
|
||||||
TOPICS=Marketing,Negócios,Pensamentos de Empresários Famosos,Lei da Atração,Lei do Triunfo (Autor: Napoleon Hill),Administração de Pequenos Negócios,CRM,Vendas,Compras para Empresas,Planejamento Estratégico Empresarial,Recursos Humanos,A Arte de Fazer Amigos,Inteligência Emocional,Produtividade,Liderança,Inovação,Experiência do Cliente,Networking,Marca Pessoal,Storytelling,As 36 Estratégias dos Chineses (Autores: Wee Chow Hou & Lan Luh Luh),Como garantir três vendas extras por dia (Autor: Evaldo Costa), 100 Segredos das Pessoas de Sucesso (Autor: David Niven),Como Fazer Amigos e Influenciar Pessoas(Autor: Dale Carnegie),Economia,Investimentos,Renda Passiva,A Arte de Vender(Autor: Paul W. Ivey),Educação Financeira,Planejamento Financeiro Pessoal,Planejamento Financeiro Empresarial,Fluxo de Caixa,Controle Financeiro Empresarial
|
TOPICS=Marketing,Negócios,Pensamentos de Empresários Famosos,Lei da Atração,Lei do Triunfo (Autor: Napoleon Hill),Administração de Pequenos Negócios,CRM,Vendas,Compras para Empresas,Planejamento Estratégico Empresarial,Recursos Humanos,A Arte de Fazer Amigos,Inteligência Emocional,Produtividade,Liderança,Inovação,Experiência do Cliente,Networking,Marca Pessoal,Storytelling,As 36 Estratégias dos Chineses (Autores: Wee Chow Hou & Lan Luh Luh),Como garantir três vendas extras por dia (Autor: Evaldo Costa), 100 Segredos das Pessoas de Sucesso (Autor: David Niven),Como Fazer Amigos e Influenciar Pessoas(Autor: Dale Carnegie),Economia,Investimentos,Renda Passiva,A Arte de Vender(Autor: Paul W. Ivey),Educação Financeira,Planejamento Financeiro Pessoal,Planejamento Financeiro Empresarial,Fluxo de Caixa,Controle Financeiro Empresarial,Qualidade Total na Empresa
|
||||||
|
|
||||||
# Modelo de IA padrão
|
# Provedor de IA padrão (openrouter | llamacpp | openai)
|
||||||
# DEFAULT_AI_MODEL=inclusionai/ling-3.0-flash
|
DEFAULT_AI_PROVIDER=openrouter
|
||||||
#DEFAULT_AI_MODEL=minimax/minimax-m3:free
|
|
||||||
DEFAULT_AI_MODEL=step-3.5-flash
|
|
||||||
|
|
||||||
# OPENAI_API_KEY=sua_api_key_openai_aqui
|
# Modelo de IA padrão (depende do provedor escolhido)
|
||||||
|
DEFAULT_AI_MODEL=minimax/minimax-m3:free
|
||||||
|
|
||||||
# Provedor OpenRouter
|
# Chave de API do provedor escolhido
|
||||||
OPENROUTER_API_KEY=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
|
OPENROUTER_API_KEY=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
|
||||||
#OPENROUTER_MODEL=poolside/laguna-xs-2.1:free
|
|
||||||
#OPENROUTER_MODEL=inclusionai/ling-3.0-flash
|
|
||||||
OPENROUTER_MODEL=minimax/minimax-m3:free
|
|
||||||
|
|
||||||
# Provedor StepFun
|
|
||||||
STEPFUN_BASE_URL=https://api.stepfun.ai/v1
|
|
||||||
STEPFUN_API_KEY=4RJZ4kHTbMNqWNn7IgahHF1kzcTi8zzUMv7YLQqjChCH5DftV2bSbGif1HllC44nv
|
|
||||||
STEPFUN_MODEL=step-3.5-flash
|
|
||||||
|
|
||||||
# Provedor LlamaCPP local
|
|
||||||
LLAMACPP_BASE_URL=http://localhost:8080/v1/
|
LLAMACPP_BASE_URL=http://localhost:8080/v1/
|
||||||
LLAMACPP_API_KEY=not-needed
|
LLAMACPP_API_KEY=not-needed
|
||||||
LLAMACPP_MODEL=qwen2.5-coder-3b-instruct-q4_k_m.gguf
|
# OPENAI_API_KEY=sua_api_key_openai_aqui
|
||||||
|
|
||||||
# Configuração do Telegram
|
# Configuração do Telegram
|
||||||
TELEGRAM_BOT_TOKEN=8903949501:AAGXMQOS1q3z4_w1tUhBZZbYCZ8F0fkbi7E
|
TELEGRAM_BOT_TOKEN=8903949501:AAGXMQOS1q3z4_w1tUhBZZbYCZ8F0fkbi7E
|
||||||
@@ -41,4 +30,3 @@ TELEGRAM_CHAT_ID=-1003832867367
|
|||||||
# Idioma
|
# Idioma
|
||||||
LANGUAGE=pt-BR
|
LANGUAGE=pt-BR
|
||||||
MIN_LINES=20
|
MIN_LINES=20
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ Sistema automatizado de envio de insights via Telegram, utilizando inteligência
|
|||||||
- Funciona de segunda a domingo (dias configuráveis).
|
- Funciona de segunda a domingo (dias configuráveis).
|
||||||
- Intervalo entre envios configurável.
|
- Intervalo entre envios configurável.
|
||||||
- Seleção aleatória de tópicos cadastrados.
|
- Seleção aleatória de tópicos cadastrados.
|
||||||
- Suporte a múltiplos provedores de IA: OpenAI, OpenRouter, StepFun ou LlamaCPP local.
|
- Suporte a múltiplos provedores de IA: OpenRouter, LlamaCPP local ou OpenAI.
|
||||||
|
|
||||||
## Pré-requisitos
|
## Pré-requisitos
|
||||||
|
|
||||||
- Python 3.10 ou superior
|
- Python 3.10 ou superior
|
||||||
- Chave de API de IA: OpenAI, OpenRouter, StepFun ou LlamaCPP local
|
- Chave de API de IA: OpenRouter, LlamaCPP local ou OpenAI
|
||||||
- Bot criado no Telegram via BotFather
|
- Bot criado no Telegram via BotFather
|
||||||
- Sistema Linux (Debian 12 recomendado)
|
- Sistema Linux (Debian 12 recomendado)
|
||||||
|
|
||||||
@@ -29,26 +29,23 @@ TELEGRAM_CHAT_ID=seu_chat_id
|
|||||||
INTERVAL_MINUTES=60
|
INTERVAL_MINUTES=60
|
||||||
START_HOUR=7
|
START_HOUR=7
|
||||||
END_HOUR=22
|
END_HOUR=22
|
||||||
TOPICS=Marketing,Negócios,Lei da Atração,...
|
TOPICS=Marketing,Negócios,...
|
||||||
|
|
||||||
# Provedor preferencial: OpenRouter
|
# Provedor de IA (openrouter | llamacpp | openai)
|
||||||
|
DEFAULT_AI_PROVIDER=openrouter
|
||||||
|
|
||||||
|
# Modelo de IA (depende do provedor escolhido)
|
||||||
|
DEFAULT_AI_MODEL=minimax/minimax-m3:free
|
||||||
|
|
||||||
|
# Chave de API do provedor escolhido
|
||||||
OPENROUTER_API_KEY=sua_chave_openrouter
|
OPENROUTER_API_KEY=sua_chave_openrouter
|
||||||
OPENROUTER_MODEL=inclusionai/ling-3.0-tiny:free
|
# LLAMACPP_API_KEY=not-needed # se usar LlamaCPP
|
||||||
|
# OPENAI_API_KEY=sua_chave_openai # se usar OpenAI direto
|
||||||
# Alternativa: StepFun
|
|
||||||
STEPFUN_BASE_URL=https://api.stepfun.ai/step_plan/v1/
|
|
||||||
STEPFUN_API_KEY=sua_chave_stepfun
|
|
||||||
STEPFUN_MODEL=step-3.7-flash
|
|
||||||
|
|
||||||
# Alternativa: LlamaCPP local
|
|
||||||
LLAMACPP_BASE_URL=http://localhost:8080/v1/
|
|
||||||
LLAMACPP_API_KEY=not-needed
|
|
||||||
LLAMACPP_MODEL=qwen2.5-coder-3b-instruct-q4_k_m.gguf
|
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Crie um bot no Telegram** via @BotFather e obtenha o token.
|
2. **Crie um bot no Telegram** via @BotFather e obtenha o token.
|
||||||
|
|
||||||
3. **Obtenha o identificador do canal** após adicionar o bot como administrador no canal. Use o username do canal no formato `@nome_do_canal` ou o ID numérico `-100xxxxxxxxxx`. Para descobrir o ID, consulte a seção "Descobrindo o chat ID do canal" abaixo.
|
3. **Obtenha o identificador do canal** após adicionar o bot como administrador no canal. Use o username do canal no formato `@nome_do_canal` ou o ID numérico `-100xxxxxxxxxx`.
|
||||||
|
|
||||||
## Instalação
|
## Instalação
|
||||||
|
|
||||||
@@ -57,11 +54,6 @@ chmod +x iniciar.sh
|
|||||||
./iniciar.sh
|
./iniciar.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
O script irá:
|
|
||||||
- Criar o ambiente virtual Python
|
|
||||||
- Instalar todas as dependências
|
|
||||||
- Preparar o sistema para execução
|
|
||||||
|
|
||||||
## Execução
|
## Execução
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -69,24 +61,18 @@ source venv/bin/activate
|
|||||||
python3 main.py
|
python3 main.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Para rodar como serviço em background no Linux, utilize `systemd` ou `screen`/`tmux`.
|
|
||||||
|
|
||||||
## Variáveis de Ambiente
|
## Variáveis de Ambiente
|
||||||
|
|
||||||
| Variável | Descrição | Padrão |
|
| Variável | Descrição | Padrão |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `OPENAI_API_KEY` | Chave da API da OpenAI | opcional |
|
| `DEFAULT_AI_PROVIDER` | Provedor de IA (`openrouter`, `llamacpp`, `openai`) | `openrouter` |
|
||||||
|
| `DEFAULT_AI_MODEL` | Nome do modelo no provedor escolhido | obrigatório |
|
||||||
| `OPENROUTER_API_KEY` | Chave da API OpenRouter | opcional |
|
| `OPENROUTER_API_KEY` | Chave da API OpenRouter | opcional |
|
||||||
| `OPENROUTER_MODEL` | Modelo no OpenRouter | inclusionai/ling-3.0-tiny:free |
|
| `LLAMACPP_BASE_URL` | URL base da API LlamaCPP local | `http://localhost:8080/v1/` |
|
||||||
| `STEPFUN_BASE_URL` | URL base StepFun | https://api.stepfun.ai/step_plan/v1/ |
|
| `LLAMACPP_API_KEY` | Chave da API LlamaCPP | `not-needed` |
|
||||||
| `STEPFUN_API_KEY` | Chave StepFun | opcional |
|
| `OPENAI_API_KEY` | Chave da API OpenAI | opcional |
|
||||||
| `STEPFUN_MODEL` | Modelo StepFun | step-3.7-flash |
|
|
||||||
| `LLAMACPP_BASE_URL` | URL base LlamaCPP | http://localhost:8080/v1/ |
|
|
||||||
| `LLAMACPP_API_KEY` | Chave LlamaCPP | not-needed |
|
|
||||||
| `LLAMACPP_MODEL` | Modelo LlamaCPP | qwen2.5-coder-3b-instruct-q4_k_m.gguf |
|
|
||||||
| `DEFAULT_AI_MODEL` | Modelo usado quando houver apenas OpenAI | gpt-4o-mini |
|
|
||||||
| `TELEGRAM_BOT_TOKEN` | Token do bot Telegram | obrigatório |
|
| `TELEGRAM_BOT_TOKEN` | Token do bot Telegram | obrigatório |
|
||||||
| `TELEGRAM_CHAT_ID` | Username do canal (ex: `@nome_do_canal`) ou ID numérico (ex: `-100xxxxxxxxxx`) | obrigatório |
|
| `TELEGRAM_CHAT_ID` | Username do canal ou ID numérico | obrigatório |
|
||||||
| `INTERVAL_MINUTES` | Intervalo entre envios (minutos) | 60 |
|
| `INTERVAL_MINUTES` | Intervalo entre envios (minutos) | 60 |
|
||||||
| `START_HOUR` | Hora inicial de funcionamento | 7 |
|
| `START_HOUR` | Hora inicial de funcionamento | 7 |
|
||||||
| `END_HOUR` | Hora final de funcionamento | 22 |
|
| `END_HOUR` | Hora final de funcionamento | 22 |
|
||||||
@@ -94,51 +80,3 @@ Para rodar como serviço em background no Linux, utilize `systemd` ou `screen`/`
|
|||||||
| `TOPICS` | Lista de tópicos separados por vírgula | ver `.env` |
|
| `TOPICS` | Lista de tópicos separados por vírgula | ver `.env` |
|
||||||
| `LANGUAGE` | Idioma dos insights | pt-BR |
|
| `LANGUAGE` | Idioma dos insights | pt-BR |
|
||||||
| `MIN_LINES` | Mínimo de linhas por insight | 20 |
|
| `MIN_LINES` | Mínimo de linhas por insight | 20 |
|
||||||
|
|
||||||
> Prioridade de provedor: OpenRouter > StepFun > LlamaCPP > OpenAI
|
|
||||||
|
|
||||||
## Estrutura do Projeto
|
|
||||||
|
|
||||||
```
|
|
||||||
ThorAgenteIA/
|
|
||||||
├── .env # Configurações sensíveis (não versionar)
|
|
||||||
├── .gitignore
|
|
||||||
├── iniciar.sh # Script de setup automático
|
|
||||||
├── main.py # Código principal
|
|
||||||
├── requirements.txt # Dependências Python
|
|
||||||
├── RULES.md # Regras para IA coder
|
|
||||||
└── README.md # Documentação
|
|
||||||
```
|
|
||||||
|
|
||||||
## Descobrindo o chat ID do canal
|
|
||||||
|
|
||||||
Após adicionar o bot como administrador no canal, use um dos métodos abaixo:
|
|
||||||
|
|
||||||
### Método 1: Usando o username
|
|
||||||
|
|
||||||
Se o canal tiver um username público, basta usar o formato `@nome_do_canal` em `TELEGRAM_CHAT_ID`.
|
|
||||||
|
|
||||||
### Método 2: Usando o ID numérico
|
|
||||||
|
|
||||||
1. Envie qualquer mensagem do canal para o bot ou adicione o bot ao canal.
|
|
||||||
2. Consulte as atualizações com:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python3 -c "
|
|
||||||
import requests, os
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
load_dotenv()
|
|
||||||
token = os.getenv('TELEGRAM_BOT_TOKEN')
|
|
||||||
r = requests.get(f'https://api.telegram.org/bot{token}/getUpdates', timeout=15)
|
|
||||||
print(r.text)
|
|
||||||
"
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Procure por `"chat":{"id":-100xxxxxxxxxx` nas mensagens relacionadas ao canal.
|
|
||||||
|
|
||||||
## Solução de Problemas
|
|
||||||
|
|
||||||
- **Erro de API Key**: Verifique se pelo menos um provedor está configurado no `.env`.
|
|
||||||
- **Mensagem não enviada**: Confira o token do bot e o identificador do canal.
|
|
||||||
- **Horário incorreto**: Verifique o fuso horário do servidor Linux.
|
|
||||||
- **Bot sem permissão no canal**: Certifique-se de que o bot é administrador do canal com permissão para postar mensagens.
|
|
||||||
|
|||||||
@@ -11,16 +11,12 @@ load_dotenv()
|
|||||||
|
|
||||||
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
|
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
|
||||||
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
|
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
|
||||||
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
DEFAULT_AI_PROVIDER = os.getenv("DEFAULT_AI_PROVIDER", "openrouter").lower()
|
||||||
|
DEFAULT_AI_MODEL = os.getenv("DEFAULT_AI_MODEL", "")
|
||||||
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
|
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
|
||||||
OPENROUTER_MODEL = os.getenv("OPENROUTER_MODEL")
|
LLAMACPP_BASE_URL = os.getenv("LLAMACPP_BASE_URL", "http://localhost:8080/v1/")
|
||||||
STEPFUN_BASE_URL = os.getenv("STEPFUN_BASE_URL")
|
LLAMACPP_API_KEY = os.getenv("LLAMACPP_API_KEY", "not-needed")
|
||||||
STEPFUN_API_KEY = os.getenv("STEPFUN_API_KEY")
|
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
||||||
STEPFUN_MODEL = os.getenv("STEPFUN_MODEL")
|
|
||||||
LLAMACPP_BASE_URL = os.getenv("LLAMACPP_BASE_URL")
|
|
||||||
LLAMACPP_API_KEY = os.getenv("LLAMACPP_API_KEY")
|
|
||||||
LLAMACPP_MODEL = os.getenv("LLAMACPP_MODEL")
|
|
||||||
DEFAULT_AI_MODEL = os.getenv("DEFAULT_AI_MODEL", OPENROUTER_MODEL or STEPFUN_MODEL or LLAMACPP_MODEL or "gpt-4o-mini")
|
|
||||||
LANGUAGE = os.getenv("LANGUAGE", "pt-BR")
|
LANGUAGE = os.getenv("LANGUAGE", "pt-BR")
|
||||||
MIN_LINES = int(os.getenv("MIN_LINES", "20"))
|
MIN_LINES = int(os.getenv("MIN_LINES", "20"))
|
||||||
INTERVAL_MINUTES = int(os.getenv("INTERVAL_MINUTES", "60"))
|
INTERVAL_MINUTES = int(os.getenv("INTERVAL_MINUTES", "60"))
|
||||||
@@ -34,10 +30,14 @@ if not TELEGRAM_BOT_TOKEN or TELEGRAM_BOT_TOKEN == "seu_bot_token_aqui":
|
|||||||
if not TELEGRAM_CHAT_ID or TELEGRAM_CHAT_ID == "seu_chat_id_aqui":
|
if not TELEGRAM_CHAT_ID or TELEGRAM_CHAT_ID == "seu_chat_id_aqui":
|
||||||
raise ValueError("TELEGRAM_CHAT_ID não configurado no .env")
|
raise ValueError("TELEGRAM_CHAT_ID não configurado no .env")
|
||||||
|
|
||||||
if OPENROUTER_API_KEY and OPENROUTER_API_KEY != "sk-or-v1-...":
|
if DEFAULT_AI_PROVIDER == "openrouter" and OPENROUTER_API_KEY and OPENROUTER_API_KEY != "sk-or-v1-...":
|
||||||
|
client = openai.OpenAI(base_url="https://openrouter.ai/api/v1", api_key=OPENROUTER_API_KEY)
|
||||||
|
elif DEFAULT_AI_PROVIDER == "llamacpp" and LLAMACPP_API_KEY:
|
||||||
|
client = openai.OpenAI(base_url=LLAMACPP_BASE_URL, api_key=LLAMACPP_API_KEY)
|
||||||
|
elif DEFAULT_AI_PROVIDER == "openai" and OPENAI_API_KEY:
|
||||||
|
client = openai.OpenAI(api_key=OPENAI_API_KEY)
|
||||||
|
elif OPENROUTER_API_KEY and OPENROUTER_API_KEY != "sk-or-v1-...":
|
||||||
client = openai.OpenAI(base_url="https://openrouter.ai/api/v1", api_key=OPENROUTER_API_KEY)
|
client = openai.OpenAI(base_url="https://openrouter.ai/api/v1", api_key=OPENROUTER_API_KEY)
|
||||||
elif STEPFUN_API_KEY:
|
|
||||||
client = openai.OpenAI(base_url=STEPFUN_BASE_URL, api_key=STEPFUN_API_KEY)
|
|
||||||
elif LLAMACPP_API_KEY:
|
elif LLAMACPP_API_KEY:
|
||||||
client = openai.OpenAI(base_url=LLAMACPP_BASE_URL, api_key=LLAMACPP_API_KEY)
|
client = openai.OpenAI(base_url=LLAMACPP_BASE_URL, api_key=LLAMACPP_API_KEY)
|
||||||
elif OPENAI_API_KEY:
|
elif OPENAI_API_KEY:
|
||||||
@@ -94,7 +94,6 @@ def send_telegram_message(text, topic):
|
|||||||
f"🤖 *Syspanel Insights - by ThorAgentIA*\n"
|
f"🤖 *Syspanel Insights - by ThorAgentIA*\n"
|
||||||
f"🤖 *https://syspanel.com.br*\n"
|
f"🤖 *https://syspanel.com.br*\n"
|
||||||
f"🕒 {now.strftime('%d/%m/%Y %H:%M:%S')}\n"
|
f"🕒 {now.strftime('%d/%m/%Y %H:%M:%S')}\n"
|
||||||
# f"🧠 Modelo: `{DEFAULT_AI_MODEL}`\n"
|
|
||||||
f"📌 Assunto: {topic}\n\n"
|
f"📌 Assunto: {topic}\n\n"
|
||||||
)
|
)
|
||||||
message = header + text
|
message = header + text
|
||||||
@@ -154,6 +153,7 @@ def job():
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
print("=== ThorAgentIA iniciado ===")
|
print("=== ThorAgentIA iniciado ===")
|
||||||
|
print(f"Provedor: {DEFAULT_AI_PROVIDER} | Modelo: {DEFAULT_AI_MODEL}")
|
||||||
print(f"Horário permitido: {START_HOUR}h às {END_HOUR}h")
|
print(f"Horário permitido: {START_HOUR}h às {END_HOUR}h")
|
||||||
print(f"Dias permitidos: {DAYS_OF_WEEK}")
|
print(f"Dias permitidos: {DAYS_OF_WEEK}")
|
||||||
print(f"Intervalo: {INTERVAL_MINUTES} minutos")
|
print(f"Intervalo: {INTERVAL_MINUTES} minutos")
|
||||||
|
|||||||
Reference in New Issue
Block a user