ChatLab: Local-first анализ чатов через SQL и AI Agent

#local-first#chat-analysis#sql#ai-agent#privacy

TL;DR

ChatLab — это local-first инструмент для анализа чат-логов через SQL-запросы и AI-агентов, сохраняющий приватность данных. Позволяет строить сложные аналитические запросы к истории переписок и получать инсайты через NLP-модели без отправки данных в cloud.

Введение: контекст и актуальность

В эпоху privacy-first решений локальная обработка данных становится must-have фичей для инструментов анализа. ChatLab предлагает hybrid-подход:

Это особенно актуально для:

Основная архитектура

Data Layer

interface ChatStorage {
  init(): Promise<void>;
  query<T = unknown>(sql: string): Promise<T[]>;
  ingest(chatExport: ChatExport): Promise<void>;
}

Реализует паттерн Repository для работы с:

SQL-адаптер

-- Пример запроса для анализа активности
SELECT 
  strftime('%Y-%m-%d', timestamp) AS day,
  sender,
  COUNT(*) AS messages,
  AVG(LENGTH(text)) AS avg_length
FROM messages
GROUP BY day, sender
ORDER BY day DESC;

Особенности:

AI-агенты

class SentimentAgent:
    @cached_model('distilbert-base-uncased')
    def analyze(self, text: str) -> Dict:
        # Локальный inference через ONNX runtime
        return pipeline('sentiment-analysis')(text)

Поддерживает:

Практическое применение

Кейс 1: Анализ рабочих чатов

-- Поиск нерешенных вопросов
SELECT thread_id, COUNT(*) AS unresolved 
FROM messages 
WHERE text LIKE '%?%' 
  AND NOT EXISTS (
    SELECT 1 FROM messages m2 
    WHERE m2.thread_id = messages.thread_id 
      AND m2.timestamp > messages.timestamp 
      AND m2.text LIKE '%решение%'
  )
GROUP BY thread_id;

Кейс 2: Personal CRM

// Получение контактов с низкой вовлеченностью
const inactiveContacts = await db.query(`
  SELECT participant, MAX(timestamp) AS last_contact 
  FROM messages 
  GROUP BY participant 
  HAVING last_contact < DATE('now', '-3 months')
`);

Интеграция с AI

# Построение графа отношений
def build_relationship_graph(chat_db: SQLiteDB):
    conversations = chat_db.query("""
        SELECT sender, GROUP_CONCAT(text) AS dialog 
        FROM messages 
        GROUP BY thread_id
    """)
    
    return RelationshipAgent().analyze(conversations)

Заключение

ChatLab предлагает powerful-комбинацию:

  1. Полный контроль данных (local-first)
  2. Гибкость SQL для произвольных запросов
  3. AI-анализ без cloud-зависимости

Для senior-разработчиков особенно интересны:

Инструмент открывает новые возможности для privacy-preserving аналитики, где традиционные cloud-решения не подходят по compliance-требованиям.


Источник: https://github.com/login?return_to=%2Fhellodigua%2FChatLab