AI Ask
O DataSpoc Lens pode traduzir perguntas em linguagem natural para SQL, executar a query e retornar os resultados. Nenhum conhecimento de SQL necessário.
Configuração
Seção intitulada “Configuração”Opção 1: IA local com Ollama (gratuita, sem API key)
Seção intitulada “Opção 1: IA local com Ollama (gratuita, sem API key)”dataspoc-lens setup-aiIsso instala e configura o Ollama com um modelo local. Completamente gratuito, nenhum dado sai da sua máquina.
Opção 2: Provedores na nuvem
Seção intitulada “Opção 2: Provedores na nuvem”Instale o extra de IA:
pip install dataspoc-lens[ai]Configure via variáveis de ambiente:
# Anthropic (Claude)export DATASPOC_LLM_PROVIDER=anthropicexport DATASPOC_LLM_API_KEY=sk-ant-...
# OpenAI (GPT)export DATASPOC_LLM_PROVIDER=openaiexport DATASPOC_LLM_API_KEY=sk-...Ou adicione ao ~/.dataspoc-lens/config.yaml:
llm: provider: anthropic # ollama, anthropic, or openai api_key: sk-ant-... # not needed for ollama model: "" # optional, uses provider defaultProvedores
Seção intitulada “Provedores”| Provedor | Custo | Privacidade | Modelo |
|---|---|---|---|
ollama | Gratuito | Local (nenhum dado enviado externamente) | Configurável (padrão definido pelo setup-ai) |
anthropic | Pago (por token) | Dados enviados para a API da Anthropic | Claude (mais recente) |
openai | Pago (por token) | Dados enviados para a API da OpenAI | GPT (mais recente) |
Prioridade de configuração
Seção intitulada “Prioridade de configuração”- Variáveis de ambiente (
DATASPOC_LLM_PROVIDER,DATASPOC_LLM_API_KEY,DATASPOC_LLM_MODEL) ~/.dataspoc-lens/config.yaml- Padrão:
ollama
dataspoc-lens ask "What are the top 5 customers by total spending?"SQL: SELECT c.name, SUM(o.total) as total_spent FROM customers c JOIN orders o ON c.id = o.customer_id GROUP BY c.name ORDER BY total_spent DESC LIMIT 5
┌──────────────┬─────────────┐│ name │ total_spent │├──────────────┼─────────────┤│ Alice Smith │ 15420.50 ││ Bob Johnson │ 12300.00 ││ Carol White │ 9870.25 ││ Dave Brown │ 8540.00 ││ Eve Davis │ 7210.75 │└──────────────┴─────────────┘
(5 row(s), 1.230s)Modo debug
Seção intitulada “Modo debug”Use --debug para ver o prompt completo enviado ao LLM:
dataspoc-lens ask "Monthly revenue trend" --debug--- Prompt sent to LLM ---You are a SQL assistant. Given the following table schemas, write a DuckDB SQLquery to answer the user's question.
Tables:- customers (id INTEGER, name VARCHAR, email VARCHAR, ...)- orders (order_id INTEGER, customer_id INTEGER, order_date DATE, total DOUBLE, ...)- products (product_id INTEGER, name VARCHAR, price DOUBLE, ...)
Question: Monthly revenue trend
Return ONLY the SQL query, no explanation.--- End of prompt ---
SQL: SELECT DATE_TRUNC('month', order_date) as month, SUM(total) as revenue FROM orders GROUP BY month ORDER BY month
┌────────────┬──────────┐│ month │ revenue │├────────────┼──────────┤│ 2024-01-01 │ 125400 ││ 2024-02-01 │ 138200 ││ 2024-03-01 │ 152800 │└────────────┴──────────┘
(3 row(s), 1.450s)Como funciona
Seção intitulada “Como funciona”- O Lens lê o schema de todas as tabelas montadas (nomes e tipos de colunas)
- Uma amostra de linhas é incluída como contexto
- O schema, dados de amostra e sua pergunta são enviados para o LLM configurado
- O LLM retorna uma query SQL compatível com DuckDB
- O Lens executa o SQL contra seu data lake
- Os resultados são exibidos (ou exportados com
--export)
Exportar resultados
Seção intitulada “Exportar resultados”dataspoc-lens ask "Revenue by product category" --export revenue.csvdataspoc-lens ask "Customer segments" --export segments.parquetSaída JSON
Seção intitulada “Saída JSON”dataspoc-lens ask "Total orders" --output json{ "sql": "SELECT COUNT(*) as total_orders FROM orders", "columns": ["total_orders"], "rows": [[48680]], "duration": 0.95, "error": null}Exemplos
Seção intitulada “Exemplos”# Aggregationsdataspoc-lens ask "What is the average order value?"
# Joinsdataspoc-lens ask "Which products have never been ordered?"
# Time seriesdataspoc-lens ask "Show weekly order counts for the last 3 months"
# Filteringdataspoc-lens ask "How many orders were cancelled in January?"