SK ← Sungju Kim · Data & AI Systems Engineer
Career / Selected work / System 01

Vertical AI Pipeline for an Industrial-Security Customer

Slack-triggered workflow from collection to LLM-generated report — designed and operated end-to-end.

Python 3.13Argo WorkflowsFastAPISlack BoltIn-house LLMGoogle Sheets APIKubernetes

Problem

An industrial-security customer needed industrial-leak monitoring across Korean and Chinese corporate sources. Analysts were stitching collection, parsing, LLM field extraction, and report drafting by hand for every keyword.

System

Designed end-to-end as the sole owner. A Slack command starts an Argo Workflow that fans out a site-specific scraper across policy domains, persists raw URLs through an internal API, and an exit handler calls the in-house LLM service to extract fields and draft a report. Progress and the final report link land back in the same Slack thread.

Slack /search Argo Workflow Scraper pods Internal API LLM extract Report → Slack

Impact

Eliminated the manual sequence end-to-end. The same pipeline runs internally and is offered to the customer as Slack self-service — a single keyword input triggers collection, LLM extraction, report drafting, and notification.

Architecture notes

The same architecture pattern shows up on the public lab at https://sungjukim.com/lab: a scheduled agent runs upstream, writes a static JSON artifact, and the consuming surface only ever reads that artifact. No LLM call is on the user's request path. Failures in the upstream collector or LLM stage cannot break the consuming surface — they only delay the next refresh.

The Argo Workflow uses withParam to fan out a scraper Pod per policy, and the LLM step is wired as an Argo exit handler so that collection success and report generation have independent failure domains. Slack thread state (thread_ts) is propagated through the entire workflow so progress, errors, and the final report link all accumulate in the same thread the customer triggered.

The in-house LLM call is the only AI-bearing step, and it lives inside the agent run — not in the user’s request path. The Slack UI only sees the final report URL.

Stack

Python 3.13Argo WorkflowsFastAPISlack BoltIn-house LLMGoogle Sheets APIKubernetes