# Lumen AI

> Master AI-powered natural language data exploration with Lumen AI. Use this skill when building conversational data analysis interfaces, enabling natural language queries to databases, creating custom AI agents for domain-specific analytics, implementing RAG with document context, or deploying self-service analytics with LLM-generated SQL and visualizations.

- Skill: `uw-ssec/lumen-ai` (Agent Skill)
- Install (CLI): `npx skillmds add uw-ssec/lumen-ai`
- Raw SKILL.md: https://api.skillmd.com/api/skills/uw-ssec/lumen-ai/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: uw-ssec (https://skillmd.com/u/uw-ssec)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/uw-ssec/lumen-ai

---


# Lumen AI Skill

## Overview

Lumen AI is an open-source, agent-based framework for conversational data exploration. Users ask questions in plain English and receive visualizations, SQL queries, and insights automatically generated by large language models.

### Key Features

- **Natural Language Interface**: Ask questions in plain English
- **Multi-LLM Support**: OpenAI, Anthropic, Google, Mistral, local models
- **Agent Architecture**: Specialized agents for SQL, charts, analyses
- **Extensible**: Custom agents, tools, and analyses
- **Privacy-Focused**: Full local deployment option

### When to Use Lumen AI

| Feature | Lumen AI | Lumen Dashboards |
|---------|----------|------------------|
| **Interface** | Conversational | Declarative YAML |
| **Use Case** | Ad-hoc exploration | Fixed dashboards |
| **Users** | Non-technical | Developers |

**Use Lumen AI when**: Users need ad-hoc exploration, questions vary unpredictably, enabling self-service analytics.

**Use Lumen Dashboards when**: Dashboard structure is fixed, no LLM costs desired.

## Quick Start

### Installation

```bash
pip install lumen[ai]
pip install openai  # or anthropic for Claude
```

### Launch Built-in Interface

```bash
export OPENAI_API_KEY="sk-..."
lumen-ai serve data/sales.csv
# Or with database
lumen-ai serve "postgresql://user:pass@localhost/mydb"
```

### Python API

```python
import lumen.ai as lmai
import panel as pn
from lumen.sources.duckdb import DuckDBSource

pn.extension()

# Configure LLM
lmai.llm.llm_type = "anthropic"
lmai.llm.model = "claude-3-5-sonnet-20241022"

# Load data
source = DuckDBSource(tables=["./data/sales.csv"])

# Create UI
ui = lmai.ExplorerUI(source=source, title="Sales Analytics AI")
ui.servable()
```

### Example Queries

- "What tables are available?"
- "Show me total sales by region"
- "Create a scatter plot of price vs quantity"
- "What were the top 10 products last month?"

## Core Concepts

### 1. Agents

Specialized components that handle specific tasks:

- **TableListAgent**: Shows available tables and schemas
- **ChatAgent**: General conversation and summaries
- **SQLAgent**: Generates and executes SQL queries
- **hvPlotAgent**: Creates interactive visualizations
- **VegaLiteAgent**: Publication-quality charts
- **AnalysisAgent**: Custom domain-specific analyses

**See**: [Built-in Agents Reference](../../references/lumen-ai/agents-reference.md)

### 2. LLM Providers

| Use Case | Provider | Model |
|----------|----------|-------|
| Production | OpenAI | gpt-4o |
| Complex SQL | Anthropic | claude-3-5-sonnet |
| High volume | OpenAI | gpt-4o-mini |
| Sensitive data | Ollama | llama3.1 |

**See**: [LLM Provider Configuration](../../references/lumen-ai/llm-providers.md)

### 3. Memory and Tools

Agents share a memory system for context persistence. Extend capabilities with tools:
- **DocumentLookup**: RAG for document context
- **TableLookup**: Schema and metadata access

## Common Patterns

### Pattern 1: Basic Analytics Interface

```python
import lumen.ai as lmai
from lumen.sources.duckdb import DuckDBSource

lmai.llm.llm_type = "openai"
lmai.llm.model = "gpt-4o"

source = DuckDBSource(tables=["sales.csv"])
ui = lmai.ExplorerUI(source=source, title="Business Analytics")
ui.servable()
```

### Pattern 2: With Document Context (RAG)

```python
source = DuckDBSource(
    tables=["sales.csv", "products.parquet"],
    documents=["./docs/data_dictionary.pdf", "./docs/business_rules.md"]
)

ui = lmai.ExplorerUI(source=source, tools=[lmai.tools.DocumentLookup])
```

### Pattern 3: Custom Agent

```python
from lumen.ai.agents import Agent
import param

class SentimentAgent(Agent):
    """Analyze sentiment in text data."""
    requires = param.List(default=["current_source"])
    provides = param.List(default=["sentiment_analysis"])

    purpose = """
    Analyzes sentiment in text columns.
    Keywords: sentiment, emotion, positive, negative, tone
    """

    async def respond(self, query: str):
        source = self.memory["current_source"]
        yield "Sentiment analysis results..."

ui = lmai.ExplorerUI(source=source, agents=[SentimentAgent, lmai.agents.ChatAgent])
```

**See**: [Custom Agents Guide](../../references/lumen-ai/custom-agents.md)

### Pattern 4: Custom Analysis

```python
from lumen.ai.analyses import Analysis
from lumen.pipeline import Pipeline
import param

class CohortAnalysis(Analysis):
    """Customer cohort retention analysis."""
    columns = param.List(default=['customer_id', 'signup_date', 'purchase_date'])

    def __call__(self, pipeline: Pipeline):
        df = pipeline.data
        # ... calculate cohorts ...
        return results

ui = lmai.ExplorerUI(
    source=source,
    agents=[lmai.agents.AnalysisAgent(analyses=[CohortAnalysis])]
)
```

### Pattern 5: Multi-Source Data

```python
source = DuckDBSource(
    tables={
        "sales": "./data/sales.parquet",
        "customers": "./data/customers.csv",
        "products": "https://data.company.com/products.csv"
    }
)
ui = lmai.ExplorerUI(source=source)
```

## Configuration

### Agent Selection

```python
agents = [
    lmai.agents.TableListAgent,
    lmai.agents.SQLAgent,
    lmai.agents.hvPlotAgent,
]
ui = lmai.ExplorerUI(source=source, agents=agents)
```

### Coordinator Types

```python
# DependencyResolver (default): Recursively resolves agent dependencies
ui = lmai.ExplorerUI(source=source, coordinator="dependency")

# Planner: Creates execution plan upfront
ui = lmai.ExplorerUI(source=source, coordinator="planner")
```

### UI Customization

```python
ui = lmai.ExplorerUI(
    source=source,
    title="Custom Analytics AI",
    accent_color="#00aa41",
    suggestions=["Show me revenue trends", "What are the top products?"]
)
```

## Best Practices

### 1. Security

```python
import os

# Environment variables for API keys
lmai.llm.api_key = os.getenv("OPENAI_API_KEY")

# Never hardcode secrets
```

### 2. Performance

```python
# Limit table sizes for exploration
source = DuckDBSource(
    tables=["large_table.parquet"],
    table_kwargs={"large_table": {"nrows": 100000}}
)
```

### 3. User Experience

```python
# Provide example queries
ui = lmai.ExplorerUI(
    source=source,
    suggestions=["Show me revenue trends", "Top 10 products by sales"]
)
```

## Deployment

### Development

```bash
lumen-ai serve app.py --autoreload --show
```

### Production

```bash
panel serve app.py \
  --port 80 \
  --num-procs 4 \
  --allow-websocket-origin=analytics.company.com
```

### Docker

```dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py data/ ./
CMD ["panel", "serve", "app.py", "--port", "5006", "--address", "0.0.0.0"]
```

**See**: [Deployment Guide](../../references/lumen-ai/deployment.md)

## Troubleshooting

### LLM Not Responding

```bash
# Test API connection
curl https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"
```

### Agent Not Selected

```python
# Debug which agent was selected
print(ui.agent_manager.last_selected_agent)

# View agent purposes
for agent in ui.agents:
    print(f"{agent.__class__.__name__}: {agent.purpose}")
```

### SQL Generation Errors

- Add data dictionary as document for context
- Provide example queries in agent prompts
- Check table schemas match query expectations

## Resources

### Reference Documentation

- **[LLM Provider Configuration](../../references/lumen-ai/llm-providers.md)** - Setup for all providers
- **[Built-in Agents Reference](../../references/lumen-ai/agents-reference.md)** - Complete agent documentation
- **[Custom Agents Guide](../../references/lumen-ai/custom-agents.md)** - Build specialized agents
- **[Deployment Guide](../../references/lumen-ai/deployment.md)** - Production deployment

### External Links

- [Lumen AI Documentation](https://lumen.holoviz.org/lumen_ai/)
- [GitHub Repository](https://github.com/holoviz/lumen)
- [Community Discourse](https://discourse.holoviz.org)

## Summary

Lumen AI transforms data exploration through natural language interfaces powered by LLMs.

**Strengths**: No SQL required for users, flexible LLM support, extensible architecture, privacy-focused options.

**Ideal for**: Ad-hoc exploration, non-technical users, rapid insights, self-service analytics.

**Consider alternatives when**:
- Fixed dashboards needed → [Lumen Dashboards](../lumen-dashboards/SKILL.md)
- No LLM budget → Traditional BI tools
- Highly custom logic → [Panel Dashboards](../panel-dashboards/SKILL.md)

## Related Skills

- **[Lumen Dashboards](../lumen-dashboards/SKILL.md)** - Declarative YAML dashboards
- **[Panel Dashboards](../panel-dashboards/SKILL.md)** - Interactive dashboard development
- **[Plotting Fundamentals](../plotting-fundamentals/SKILL.md)** - Quick plotting with hvPlot

