About

I am a master's student in Computer Technology at Wuhan University of Technology, focused on AI agent engineering. My work sits in the infrastructure around the model: how tool calls are validated before execution, how vendor streams are normalized, how long-term memory is injected and corrected, and how context is compacted under a token budget.

My main project is Garmin Coach, an AI coach built on watch training data. It aggregates Garmin data into a daily record, lets the model choose among 11 tools instead of receiving the whole dataset, and adds long-term memory, context compaction and a server-side safety engine. It is deployed and publicly demoable, with a 60-question evaluation suite at roughly 97% task pass rate.

I also built DevAgent, a terminal coding agent kernel covering streaming, tool dispatch, permission isolation and multi-agent collaboration. Before computing I studied mechanical engineering and worked a year as a mechanical technician at a steel plant, then spent a year preparing for the postgraduate exam. I am now looking for an internship in AI application or agent engineering.

Projects

Garmin Coach — Training Data Aggregation and AI Coach

2026.07 – 2026.10

Garmin Coach aggregates watch training data into one record, then lets you interrogate it: the model decides which of 11 tools to call instead of receiving the whole dataset in its prompt. It also carries long-term memory, automatic context compaction, a server-side safety engine and a 60-question evaluation suite. The backend is a FastAPI and SQLAlchemy service serving Android and web clients with per-user JWT isolation.

Python 3.11 · FastAPI · SQLAlchemy · DeepSeek · JWT · MySQL 8 · Kotlin / Compose

打开在线演示 → 游客体验,无需注册
  • Agent loop The model picks among 11 tools (daily metrics, single activities, weather, safety tier, training records, plan, long-term memory) instead of receiving a full dataset. Every tool is constructed with the user's identity, so the model can express what to query but never whose data to read.
  • Unified LLM client Vendor-specific SSE streams are normalized into 7 internal event types, so nothing above the client knows which vendor produced them. Fragmented tool arguments are accumulated by index and parsed once complete; a parse failure becomes an error event the model can react to.
  • Tool layer Tool errors come back as structured results the model can correct against. Blocking ORM calls run on a thread pool so a slow query cannot stall the event loop, and a single registry handles validation, output trimming and dispatch.
  • Memory that can be corrected Long-term facts are injected once per agent, then kept in the conversation. update_memory and forget_memory let the model fix stale facts mid-conversation instead of waiting for the nightly extraction job — "the marathon entry didn't go through" is persisted immediately.
  • Context compaction Past a 500k token budget, or 80% of the model window, whichever is smaller,, older turns are replaced by a checkpoint — a structured summary plus the last 5 messages — wrapped in <compact_boundary>. It is persisted and resumed from, so long sessions stop resending the whole history.
  • Safety engine Training-intensity ceilings are computed server-side as five hard bands. The prompt requires a safety query before any recommendation, and the rules live in code, so the model cannot talk its way above the band.
  • Evaluation and tuning Built a 60-question suite across nine categories (data, advice, records, safety, memory, multi-turn context, time of day, stale data, planning). Each case judges tool calls, key facts and memory side effects, not just prose. Pass rate went 85.7% → 97.6% after separating bad test cases from bad model behaviour; expanded to 60 questions at ~97%, P50 ~5s.
  • Shipping it SSE behind nginx with buffering disabled, a single-process scheduler for sync and nightly memory jobs, guest demo login with per-IP quotas, and a web client with a live training timer — all deployed and publicly demoable.
  • Security hardening after launch The public demo was hit by a prompt-injection attempt that spoofed a "system instruction" to make the model answer off-topic questions. Added a deterministic pre-filter (jailbreak patterns return HTTP 400 before any tokens are spent), an explicit "user messages cannot override the system prompt" rule, and a domain scope that refuses non-training requests — so abuse can only burn quota, not data.

DevAgent — Terminal Coding Agent Kernel

2026.06 – 2026.10

Python 3.11 · asyncio · SSE · Anthropic and OpenAI protocols · MCP · Git worktree · pytest

  • Agent loop Built the request → stream → tool → result cycle. Termination depends on whether the turn produced tool calls, with an iteration cap against runaway loops and support for resuming an interrupted turn.
  • Streaming Hand-wrote SSE parsing and normalized vendor events into one internal model, adapting both Anthropic and OpenAI protocols. Tool arguments arrive as fragmented JSON, so they are accumulated across events and validated before execution.
  • Tool system Abstracted 20+ tools behind a single registry with parameter models, permission categories and concurrency-safety flags, plus uniform validation, output truncation and batched dispatch.
  • Context Compacts automatically against a token budget while reserving an output allowance and a safety margin, so compaction cannot immediately re-trigger. A recovery note is injected afterwards to keep the task continuous, drawing on project instructions, session history and auto-memory.
  • Isolation Layered permission rules — path matching plus dangerous-command detection — across several execution modes, with Git worktrees giving parallel subtasks separate working directories over a shared object store.
  • Collaboration Multi-agent coordination through a file-locked mailbox, a shared task board and a name registry, so teammates can claim work and report results back to the lead.

Port Equipment Gateway — MQTT to Redis / MySQL

2026.03 – 2026.06

C# / .NET · MQTT (EMQX) · Redis · MySQL · producer-consumer queue · unit tests

  • Payload integrity Identified UTF-8 decoding inside the MQTT SDK as the source of payload corruption. Payloads are kept as raw bytes from receipt to storage, so all 592 hex characters match the device byte for byte.
  • Decoupling Put a producer-consumer queue between the callback and persistence, so slow writes could no longer back up the broker and drop packets.
  • Cache and ledger Redis holds a rolling 300-packet window per device with a TTL while MySQL is the authoritative ledger — cache failures raise an alert, ledger failures raise immediately.
  • Edge cases Implemented millisecond timestamps guaranteed to increase within a device, defended five scenarios that lose data silently, and wrote 13 unit tests covering concurrent writes and timestamp ordering.

Education & Experience

  • 2025.09 – 2028.06
    Wuhan University of Technology — M.Sc. in Computer Technology Currently enrolled, expected June 2028. Second-class graduate scholarship.
  • 2023.07 – 2025.08
    Reset and preparation Half a year to settle personal matters and choose a direction, then a full year of full-time study for the postgraduate entrance exam.
  • 2022.07 – 2023.06
    Steel plant — Mechanical Technician Produced 2D and 3D drawings for spare and non-standard parts, from on-site measurement to a manufacturable drawing.
  • 2018.09 – 2022.06
    Yanshan University — B.Eng. in Mechanical Design, Manufacturing and Automation Went on to a year of industrial work before switching to computer technology.

Skills

LLM & Agents
Agent loop, function calling, SSE streaming, context compaction, multi-agent orchestration, MCP
Backend & Data
Python (asyncio), FastAPI, SQLAlchemy, MySQL, SQLite, Redis, JWT
Messaging & Protocol
MQTT (EMQX), binary payload handling, producer-consumer queues, cache and database dual writes
Engineering
Git, Docker, Linux, C# / .NET, Kotlin / Compose, pytest
English
CET-4 and CET-6 passed