Jihoon Lee
Production AI Systems Engineer · since 2022.04
AI Infrastructure · Agent Systems · LLMOps · Production ML
Contact · lijihoon1206@gmail.com
Summary
I design, deploy and operate AI systems that actually run in production — from sensor signal pipelines to LLM agents. I decide technical choices on measurable evidence, and I treat finding the failures after shipping as half the job.
Selected Impact
- 3.3× faster end-to-end on a production inference pipeline (65.8 s → 19.9 s, 24h of real-animal data)
- Designed and run an internal natural-language data agent solo — chose its architecture by A/B measurement and recorded the cost of what I adopted
- Found and closed silent failures — after a 4 h 41 min outage with no symptoms, moved health checks to real calls and added outage alerts
- 1 SCI(E) journal paper · 1 IMU behavior-classification paper under review at Sensors (90% feature reduction, under 1pp accuracy loss) → Research
Skills
| Area | Detail |
|---|---|
| AI / LLM | Claude API (tool-use), LangGraph, RAG (pgvector), MCP, eval design, de-identification |
| ML | LightGBM, PyTorch, MLflow, time-series & IMU signal processing, feature-extraction optimization |
| Language / Data | Python, TypeScript, SQL · PostgreSQL, MySQL, ClickHouse, OpenSearch, Parquet |
| Backend / Web | FastAPI, REST API · SvelteKit 2 (Svelte 5), Drizzle ORM |
| Infra | AWS (IoT·S3·RDS·Lambda·ECR·OpenSearch), Docker, Cloudflare Access, Linux, cron operations |
Experience
Bodit Inc. — Data Analysis Part, Engineering
2024.12 – present · Livestock IMU behavior analysis (6-axis 25Hz → ML pipeline → farmer app)
Responsible for both analysis models and the internal data/AI infrastructure.
Internal LLM agent platform 2026.04 – · designed, built & operated solo — an assistant that answers questions about internal data in natural language. Started as an MVP and moved to a tool-calling agent.
- RAG knowledge base over 3-tier data routing (MySQL / PostgreSQL / ClickHouse with fallback) — started at MVP with 730 schema documents (95 tables · 635 columns) and grew with more sources, plus an auto-promotion loop from real query logs
- Decided the architecture shift by A/B measurement. A single-label LLM router regressed table-jaccard (0.86 → 0.69) and was discarded. Exposing each capability as a tool tied on execution success (47/47), passed 5/5 compound queries — impossible under the old structure — and asked back on about 5/6 ambiguous questions (previously 0/6)
- Fixed the rationale as capability expansion, not accuracy, and recorded the adopted approach’s −5 to −7pp single-query table-jaccard cost
- Fail-closed de-identification — transmission to an external LLM is blocked outright when masking has not been applied. Row-level pre-masking plus a regex backstop catches identifiers that column context alone would miss
- Four surfaces: remote MCP gateway (SSO) · Slack bot · REST API · app API. Active anomaly detection (30-minute scan + root-cause analysis → Slack) ran live and is paused while thresholds are revisited
- Silent-failure response — when the API credit ran out, the health check only verified a key existed and returned
200 okfor 4 h 41 min. The exhaustion signal arrived as400, not what the docs implied, so the backup-key failover never fired → deleted that unverified path, switched health to a real call (300 s TTL), added a 5-minute outage alert
Behavior classification inference pipeline — 3.3× end-to-end 2026.02 · led the rework — reworked the production core package that extracts 903 features from 6-axis IMU raw signal and classifies behavior.
- Measured the bottleneck first — one cough feature set took 48.6% of runtime. Selectively vectorized 61 of 63 features into NumPy batch operations (9.8× on that stage); 2 stayed per-row
- Replaced six third-party (tsfresh) calls with a NumPy reimplementation — 37% faster on that stage, one dependency removed
- Checked every swap numerically against the original per-row functions (within 1e-6). One statistic that shifted at a threshold (53 → 40) was recorded, not hidden
- Moved model management from a local-file fallback to a single MLflow registry path
| Metric | Before | After | Gain |
|---|---|---|---|
| End-to-end time | 65.8 s | 19.9 s | 3.3× faster |
| Throughput (end-to-end) | 131 win/sec | 433 win/sec | 3.3× |
Measured on 24h of real-animal raw data — 2.16M rows / 8,640 windows · full suite 208 passed / 0 failed
Company-wide knowledge base — privacy-safe compilation pipeline 2026.07 – · designed, built & operated solo — internal conversations compiled and maintained by an LLM. Answers come from compiled documents, not from retrieval over raw text.
- Pipeline: 12-channel ingest → two de-identification layers (regex + GPU NER) → LLM compilation → wiki → agent queries
- Tuned de-identification precision in both directions — plaintext ID numbers 181 → 0, farm names replaced with one-way hash codes; loosened over-masking of public institutions and documented the rules (20 regression asserts)
- Found that manual compilation had stalled for two weeks, leaving answers grounded in unverified raw text → automated it as a weekly batch. First backlog compile: 12 min · $7.34, 5 → 13 pages
- Final review and merge stay human — NER accuracy sits at 90–95%, so the last gate on personal data is not automated. Review found 0/6 personal-data leaks
Also
- Real-time livestock accident detection — IMU anomaly signals, shadow deployment
- Business management system — requirements to deploy in 4 days, 1,090 tests, session layer built on the standard library alone
- Analytics dashboard — SvelteKit 2, Role × Group ACL + audit log
- Gateway on-device inference — full model rejected on flash limits; porting a measured (CPU 3–6%) lightweight hybrid (~193 KB)
- Alert threshold analysis — showed the two-tier rule was effectively a single threshold
SecuLetter Inc. — Threat Intelligence Team, Research Institute · Researcher
2022.04 – 2024.12 (2 yrs 9 mos) · Team of 3
Threat-intelligence AI research and TI service platform development/operations.
- Built the MARS-TI data lake and ETL — extracted visualization data from AWS-crawled raw data and OpenSearch, transforming it into mail/URL/file relationship structures. Built the monitoring UI in Svelte
- Implemented MARS AI for malicious mail classification (70% contribution) — mail preprocessing, BERT-CNN header feature extraction and classification, served via FastAPI + AWS Lambda·ECS·ECR
- Built the training-data crawler (50%) and the internal data inspection platform
ConTI(80%) — Svelte/Tailwind + FastAPI/Lambda/OpenSearch - Improved MARS-TI platform ↔ AI service integration (60%) — connected FastAPI to AWS Lambda over VPC, strengthened API Gateway·ECS·ECR·OpenSearch wiring
Ingest → clean → store → API → UI, run by a small team. → Threat Intelligence Data Platform
Education
Hoseo University Graduate School, Computer Engineering (M.S.) · 2020.03 – 2022.02 · GPA 4.09 / 4.5
Thesis: Design and Implementation of a Graph Neural Network-based Behavior Classification Model — wearable 6-axis sensor → LSTM features → GAT node classification, 91.1% test accuracy across 5 behaviors
Hoseo University, Computer Software (B.S.) · 2014.03 – 2020.02
Awards
- Best Graduate Thesis Award — Hoseo University Graduate School, 2022
- Encouragement Award — Korean Institute of Broadcast and Media Engineers, 2019
Research Projects
- 5 funded research projects — NRF ×2, industry-academic foundation ×1, local government ×1, university ×1 (2019–2022)
The full list of papers and talks is on the Research page.