AgenteHelpN8n / app.py
Jeice's picture
Update app.py
255cc2c verified
raw
history blame
3.54 kB
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, ServiceContext
from llama_index.llms.openai import OpenAI
from huggingface_hub import snapshot_download
import gradio as gr
import os
import yaml
import json
# 🔑 Configure sua API da OpenAI (adicione no Hugging Face em Settings > Secrets)
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
# 🔥 Função para extrair conteúdo de YAML, JSON, TXT e MD
def extrair_conteudo_dos_arquivos(pasta):
texto_final = ""
for root, dirs, files in os.walk(pasta):
for file in files:
caminho_arquivo = os.path.join(root, file)
try:
if file.endswith(('.yml', '.yaml')):
with open(caminho_arquivo, 'r', encoding='utf-8') as f:
data = yaml.safe_load(f)
texto = yaml.dump(data, allow_unicode=True)
texto_final += f"\n\n### Arquivo: {file}\n{texto}"
elif file.endswith('.json'):
with open(caminho_arquivo, 'r', encoding='utf-8') as f:
data = json.load(f)
texto = json.dumps(data, indent=2, ensure_ascii=False)
texto_final += f"\n\n### Arquivo: {file}\n{texto}"
elif file.endswith(('.md', '.txt')):
with open(caminho_arquivo, 'r', encoding='utf-8') as f:
texto = f.read()
texto_final += f"\n\n### Arquivo: {file}\n{texto}"
else:
continue
except Exception as e:
print(f"Erro ao ler {file}: {e}")
return texto_final
# 🔧 Função para gerar o arquivo documentacao.txt
def gerar_arquivo_documentacao(pasta_origem, arquivo_destino="documentacao.txt"):
texto = extrair_conteudo_dos_arquivos(pasta_origem)
if texto.strip() == "":
print("⚠️ Nenhum conteúdo encontrado nos arquivos!")
else:
with open(arquivo_destino, 'w', encoding='utf-8') as f:
f.write(texto)
print(f"✅ Arquivo {arquivo_destino} gerado com sucesso.")
# 📥 Baixar a documentação do Hugging Face Dataset
docs_dir = snapshot_download(
repo_id="Jeice/n8n-docs-v2",
repo_type="dataset"
)
# 🔨 Gerar o arquivo de documentação consolidado
gerar_arquivo_documentacao(docs_dir)
# 📚 Carregar o documento gerado
documents = SimpleDirectoryReader(input_files=["documentacao.txt"]).load_data()
# 🔎 Criar o índice vetorial
service_context = ServiceContext.from_defaults(
llm=OpenAI(model="gpt-3.5-turbo")
)
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
# 🚀 Criar engine de consulta
query_engine = index.as_query_engine()
# 💬 Função do chatbot
def chatbot(input_text):
response = query_engine.query(input_text)
return str(response)
# 🎨 Interface Gradio — Bonita e Funcional
interface = gr.Interface(
fn=chatbot,
inputs=gr.Textbox(lines=2, placeholder="Digite sua pergunta sobre o n8n..."),
outputs="text",
title="🤖 Bot de Dúvidas sobre o n8n",
description="Este agente responde dúvidas sobre o n8n, baseado na documentação oficial que você subiu.",
examples=[
["Como criar um workflow no n8n?"],
["Para que serve o node HTTP Request?"],
["Quais são os nodes para integração com Google Sheets?"],
],
theme="default",
allow_flagging="never"
)
# 🚀 Executar
interface.launch()