-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
389 lines (360 loc) · 31.1 KB
/
Copy pathindex.html
File metadata and controls
389 lines (360 loc) · 31.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#f4f1e8">
<meta name="description" content="Max Ma 的个人网站。软件工程师,主要从事 AI Agent 与 LLM 应用开发。">
<meta property="og:title" content="Max Ma — Software Engineer">
<meta property="og:description" content="Personal website of Max Ma, a software engineer working on AI agents and LLM applications.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://xyma2003.github.io/">
<meta name="twitter:card" content="summary">
<title>Max Ma — 软件工程师</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 64 64%22><rect width=%2264%22 height=%2264%22 rx=%2214%22 fill=%22%231b33cc%22/><path d=%22M15 45V19h7l10 14 10-14h7v26h-8V31l-9 12-9-12v14z%22 fill=%22%23f4f1e8%22/></svg>">
<style>
:root {
--paper: #f7f7f5;
--paper-deep: #edede8;
--ink: #181818;
--muted: #6b6b68;
--line: #ddddd7;
--blue: #2456a6;
--blue-dark: #1d478a;
--lime: #2456a6;
--orange: #2456a6;
--white: #ffffff;
--radius: 14px;
--shadow: none;
}
* { box-sizing: border-box; }
html {
scroll-behavior: smooth;
scroll-padding-top: 96px;
}
body {
margin: 0;
color: var(--ink);
background: var(--paper);
font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
-webkit-font-smoothing: antialiased;
}
a { color: inherit; }
button { font: inherit; }
::selection { color: var(--white); background: var(--blue); }
.skip-link {
position: fixed; top: 10px; left: 10px; z-index: 100;
padding: 10px 14px; color: var(--white); background: var(--ink);
border-radius: 10px; transform: translateY(-150%); transition: transform 180ms ease;
}
.skip-link:focus { transform: translateY(0); }
.shell { width: min(1180px, calc(100% - 48px)); margin-inline: auto; }
.site-header {
position: sticky; top: 0; z-index: 50; border-bottom: 1px solid transparent;
background: rgba(247, 247, 245, 0.92); backdrop-filter: blur(14px);
}
.site-header.scrolled { border-bottom-color: var(--line); }
.nav { min-height: 72px; display: flex; align-items: center; justify-content: space-between; gap: 28px; }
.brand {
display: inline-flex; align-items: center; gap: 11px; color: var(--ink);
text-decoration: none; font-weight: 800; letter-spacing: -0.02em;
}
.brand-mark {
width: 32px; height: 32px; display: grid; place-items: center; color: var(--white);
background: var(--ink); border-radius: 8px; font-size: 11px;
}
.nav-center { display: flex; gap: 26px; }
.nav-center a { color: var(--muted); text-decoration: none; font-size: 14px; font-weight: 650; transition: color 160ms ease; }
.nav-center a:hover { color: var(--blue); }
.lang-switcher { display: flex; padding: 3px; border: 1px solid var(--line); border-radius: 999px; background: rgba(255, 254, 250, 0.45); }
.lang-btn { min-width: 38px; padding: 6px 9px; border: 0; border-radius: 999px; color: var(--muted); background: transparent; cursor: pointer; font-size: 12px; font-weight: 700; }
.lang-btn.active { color: var(--white); background: var(--ink); }
.hero { padding: 96px 0 72px; overflow: hidden; }
.hero-grid { display: grid; grid-template-columns: minmax(0, 1fr) 310px; align-items: end; gap: 70px; }
.eyebrow { display: block; margin: 0 0 24px; color: var(--muted); font-size: 12px; font-weight: 750; letter-spacing: 0.1em; text-transform: uppercase; }
.eyebrow::before { display: none; }
h1 { max-width: 850px; margin: 0; font-size: clamp(46px, 5.4vw, 68px); line-height: 1.08; letter-spacing: -0.045em; font-weight: 760; }
h1 span { display: block; }
h1 .accent { color: var(--ink); font-family: inherit; font-style: normal; font-weight: 780; letter-spacing: -0.05em; }
.hero-side { padding-bottom: 8px; }
.hero-side p { margin: 0 0 26px; color: #3f423b; font-size: 17px; line-height: 1.75; }
.actions { display: flex; flex-wrap: wrap; gap: 10px; }
.button { display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-height: 46px; padding: 0 18px; border: 1px solid var(--ink); border-radius: 999px; text-decoration: none; font-size: 14px; font-weight: 750; transition: transform 160ms ease, background 160ms ease, color 160ms ease; }
.button:hover { transform: translateY(-2px); }
.button.primary { color: var(--white); background: var(--ink); }
.button.primary:hover { background: var(--blue); }
.button.secondary:hover { color: var(--white); background: var(--ink); }
.status-strip { margin-top: 64px; border-block: 1px solid var(--line); }
.status-inner { min-height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 24px; color: var(--muted); font-size: 13px; font-weight: 650; }
.status { display: inline-flex; align-items: center; gap: 9px; }
.status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--blue); box-shadow: none; }
.proof { padding: 0 0 118px; }
.metrics { display: grid; grid-template-columns: repeat(3, 1fr); border-block: 1px solid var(--line); background: transparent; overflow: hidden; }
.metric { min-height: 160px; padding: 28px 32px; display: flex; flex-direction: column; justify-content: space-between; }
.metric + .metric { border-left: 1px solid var(--line); }
.metric-value { font-size: clamp(38px, 4vw, 52px); line-height: 1; letter-spacing: -0.045em; font-weight: 760; }
.metric:nth-child(2) .metric-value,
.metric:nth-child(3) .metric-value { color: var(--ink); }
.metric-label { max-width: 220px; margin-top: 26px; color: var(--muted); font-size: 14px; line-height: 1.55; }
.section { padding: 96px 0; border-top: 1px solid var(--line); }
.section-head { display: grid; grid-template-columns: 1fr 1.7fr; gap: 60px; align-items: start; margin-bottom: 54px; }
.section-kicker { margin: 0; color: var(--muted); font-size: 12px; font-weight: 750; letter-spacing: 0.1em; text-transform: uppercase; }
.section-title { margin: 0; max-width: 720px; font-size: clamp(32px, 4vw, 50px); line-height: 1.12; letter-spacing: -0.035em; font-weight: 720; }
.work-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 18px; }
.project-card { min-height: 340px; padding: 28px; display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: var(--radius); text-decoration: none; background: var(--white); overflow: hidden; position: relative; transition: border-color 160ms ease; }
.project-card:hover { border-color: #9b9b96; }
.project-card.featured { grid-column: span 6; min-height: 340px; color: var(--ink); background: var(--white); border-color: var(--line); }
.project-card.tall { grid-column: span 6; min-height: 340px; background: var(--white); }
.project-card.half { grid-column: span 6; }
.card-top { display: flex; align-items: center; justify-content: space-between; gap: 20px; margin-bottom: auto; }
.project-type { font-size: 11px; font-weight: 850; letter-spacing: 0.1em; text-transform: uppercase; }
.project-card:not(.featured) .project-type { color: var(--muted); }
.arrow { width: auto; height: auto; display: block; border: 0; border-radius: 0; color: var(--muted); font-size: 16px; transition: none; }
.project-card:hover .arrow { transform: none; color: var(--ink); }
.project-card h3 { max-width: 600px; margin: 52px 0 14px; font-size: clamp(28px, 3vw, 38px); line-height: 1.08; letter-spacing: -0.035em; }
.project-card.half h3, .project-card.tall h3 { font-size: clamp(28px, 3vw, 38px); }
.project-card p { max-width: 590px; margin: 0; color: inherit; opacity: 0.78; font-size: 15px; line-height: 1.65; }
.project-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 24px; }
.project-meta span { padding: 0; border: 0; border-radius: 0; color: var(--muted); font-size: 11px; font-weight: 650; opacity: 1; }
.project-meta span + span::before { content: "·"; margin-right: 8px; }
.project-number { display: none; }
.experience-grid { display: grid; grid-template-columns: 0.8fr 1.6fr; gap: 80px; }
.experience-intro { position: sticky; top: 112px; align-self: start; }
.experience-intro p { margin: 22px 0 0; color: var(--muted); font-size: 16px; line-height: 1.8; }
.timeline { border-top: 1px solid var(--line); }
.role { display: grid; grid-template-columns: 128px 1fr; gap: 30px; padding: 38px 0 44px; border-bottom: 1px solid var(--line); }
.role-date { color: var(--muted); font-size: 12px; line-height: 1.5; font-weight: 750; }
.role h3 { margin: 0 0 6px; font-size: 25px; letter-spacing: -0.025em; }
.role-company { margin: 0 0 22px; color: var(--blue); font-weight: 750; }
.role ul { margin: 0; padding: 0; list-style: none; }
.role li { position: relative; padding-left: 18px; color: #45483f; font-size: 14px; line-height: 1.75; }
.role li + li { margin-top: 10px; }
.role li::before { content: ""; position: absolute; top: 0.72em; left: 0; width: 6px; height: 6px; border-radius: 50%; background: var(--orange); }
.about-grid { display: block; }
.manifesto { margin: 0; max-width: 760px; font-size: clamp(22px, 2.4vw, 32px); line-height: 1.45; letter-spacing: -0.02em; }
.education { margin-top: 76px; display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.school { padding: 26px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--white); }
.school-year { color: var(--muted); font-size: 12px; font-weight: 700; }
.school h3 { margin: 30px 0 6px; font-size: 24px; letter-spacing: -0.03em; }
.school p { margin: 0; color: var(--muted); font-size: 14px; line-height: 1.65; }
.site-footer { padding: 92px 0 38px; color: var(--white); background: var(--ink); }
.footer-main { display: grid; grid-template-columns: 1.8fr 1fr; gap: 60px; align-items: end; }
.footer-kicker { margin: 0 0 22px; color: rgba(255, 255, 255, 0.55); font-size: 12px; font-weight: 750; letter-spacing: 0.1em; text-transform: uppercase; }
.site-footer h2 { max-width: 800px; margin: 0; font-size: clamp(38px, 5vw, 62px); line-height: 1.05; letter-spacing: -0.04em; }
.footer-links { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 10px; }
.footer-links .button { border-color: rgba(255, 255, 255, 0.55); }
.footer-links .button:hover { color: var(--ink); background: var(--white); border-color: var(--white); }
.footer-bottom { margin-top: 86px; padding-top: 22px; display: flex; justify-content: space-between; gap: 20px; border-top: 1px solid rgba(255, 255, 255, 0.18); color: rgba(255, 255, 255, 0.52); font-size: 12px; }
.reveal { opacity: 1; transform: none; transition: none; }
.reveal.visible { opacity: 1; transform: none; }
:focus-visible { outline: 3px solid var(--orange); outline-offset: 4px; }
@media (max-width: 900px) {
.nav-center { display: none; }
.hero { padding-top: 76px; }
.hero-grid, .section-head, .experience-grid, .about-grid, .footer-main { grid-template-columns: 1fr; }
.hero-grid { gap: 42px; }
.hero-side { max-width: 620px; }
.section-head { gap: 18px; }
.experience-intro { position: static; }
.project-card.featured, .project-card.tall, .project-card.half { grid-column: span 12; }
.footer-links { justify-content: flex-start; }
}
@media (max-width: 640px) {
.shell { width: min(100% - 30px, 1180px); }
.nav { min-height: 68px; }
.brand-text { display: none; }
.hero { padding: 62px 0 56px; }
h1 { font-size: clamp(40px, 11vw, 52px); }
.status-strip { margin-top: 50px; }
.status-inner { align-items: flex-start; flex-direction: column; justify-content: center; padding: 16px 0; }
.metrics { grid-template-columns: 1fr; }
.metric { min-height: 150px; }
.metric + .metric { border-left: 0; border-top: 1px solid var(--line); }
.proof { padding-bottom: 82px; }
.section { padding: 82px 0; }
.project-card, .project-card.featured, .project-card.tall { min-height: 0; padding: 24px; }
.project-card h3 { margin-top: 48px; }
.role { grid-template-columns: 1fr; gap: 12px; }
.education { grid-template-columns: 1fr; }
.education { margin-top: 52px; }
.site-footer { padding-top: 76px; }
.footer-bottom { margin-top: 58px; flex-direction: column; }
}
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
*, *::before, *::after { scroll-behavior: auto !important; transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; }
.reveal { opacity: 1; transform: none; }
}
</style>
</head>
<body>
<a class="skip-link" href="#main" data-zh="跳到主要内容" data-hant="跳到主要內容" data-en="Skip to content">跳到主要内容</a>
<header class="site-header" id="site-header">
<nav class="nav shell" aria-label="Primary">
<a class="brand" href="#top" aria-label="Max Ma home"><span class="brand-mark">MM</span><span class="brand-text">MAX MA / 2026</span></a>
<div class="nav-center">
<a href="#work" data-zh="代表作" data-hant="代表作" data-en="Selected work">代表作</a>
<a href="#experience" data-zh="经历" data-hant="經歷" data-en="Experience">经历</a>
<a href="#about" data-zh="关于" data-hant="關於" data-en="About">关于</a>
<a href="#contact" data-zh="联系" data-hant="聯系" data-en="Contact">联系</a>
</div>
<div class="lang-switcher" aria-label="Language selector">
<button class="lang-btn" type="button" data-lang="zh" aria-label="简体中文">CN</button>
<button class="lang-btn" type="button" data-lang="hant" aria-label="繁體中文">HK</button>
<button class="lang-btn" type="button" data-lang="en" aria-label="English">EN</button>
</div>
</nav>
</header>
<main id="main">
<div id="top"></div>
<section class="hero" aria-labelledby="hero-title">
<div class="shell hero-grid">
<div>
<p class="eyebrow">Personal website</p>
<h1 id="hero-title">
<span data-zh="Max Ma" data-hant="Max Ma" data-en="Max Ma">Max Ma</span>
<span class="accent" data-zh="软件工程师" data-hant="軟件工程師" data-en="Software Engineer">软件工程师</span>
</h1>
</div>
<div class="hero-side">
<p data-zh="香港大学计算机科学与金融科技双主修毕业。目前在美团担任软件工程师,主要从事 AI Agent、LLM 数据流程和开发者工具相关开发。" data-hant="香港大學計算機科學與金融科技雙主修畢業。目前在美團擔任軟件工程師,主要從事 AI Agent、LLM 數據流程和開發者工具相關開發。" data-en="I graduated from the University of Hong Kong with a double major in Computer Science and Financial Technology. I currently work as a software engineer at Meituan on AI agents, LLM data pipelines, and developer tools.">香港大学计算机科学与金融科技双主修毕业。目前在美团担任软件工程师,主要从事 AI Agent、LLM 数据流程和开发者工具相关开发。</p>
<div class="actions">
<a class="button primary" href="#work"><span data-zh="项目" data-hant="項目" data-en="Projects">项目</span> ↓</a>
<a class="button secondary" href="https://github.com/xyma2003" target="_blank" rel="noopener noreferrer">GitHub ↗</a>
</div>
</div>
</div>
<div class="status-strip">
<div class="shell status-inner">
<span class="status"><span class="status-dot"></span><span data-zh="目前:软件工程师 @ 美团" data-hant="目前:軟件工程師 @ 美團" data-en="Currently: Software Engineer @ Meituan">目前:软件工程师 @ 美团</span></span>
<span data-zh="香港大学 · 计算机科学 + 金融科技" data-hant="香港大學 · 計算機科學 + 金融科技" data-en="HKU · Computer Science + Financial Technology">香港大学 · 计算机科学 + 金融科技</span>
</div>
</div>
</section>
<section class="proof" aria-label="Impact metrics">
<div class="shell metrics reveal">
<div class="metric"><strong class="metric-value">2M+</strong><span class="metric-label" data-zh="金融实体知识库记录" data-hant="金融實體知識庫記錄" data-en="financial entity records">金融实体知识库记录</span></div>
<div class="metric"><strong class="metric-value">94.8%</strong><span class="metric-label" data-zh="AI 电话点餐 Agent 准确率" data-hant="AI 電話點餐 Agent 準確率" data-en="AI phone-ordering agent accuracy">AI 电话点餐 Agent 准确率</span></div>
<div class="metric"><strong class="metric-value">85.33%</strong><span class="metric-label" data-zh="金融实体知识库准确率(从 62% 提升)" data-hant="金融實體知識庫準確率(從 62% 提升)" data-en="financial entity knowledge-base accuracy, improved from 62%">金融实体知识库准确率(从 62% 提升)</span></div>
</div>
</section>
<section class="section" id="work" aria-labelledby="work-title">
<div class="shell">
<div class="section-head reveal">
<p class="section-kicker">01 / Projects</p>
<h2 class="section-title" id="work-title" data-zh="项目与工作" data-hant="項目與工作" data-en="Projects and work">项目与工作</h2>
</div>
<div class="work-grid">
<a class="project-card featured reveal" href="#experience">
<div class="card-top"><span class="project-type" data-zh="生产系统 · 美团" data-hant="生產系統 · 美團" data-en="Production systems · Meituan">生产系统 · 美团</span><span class="arrow" aria-hidden="true">↗</span></div>
<h3 data-zh="AI 电话点餐 Agent" data-hant="AI 電話點餐 Agent" data-en="AI Phone-ordering Agent">AI 电话点餐 Agent</h3>
<p data-zh="基于 Pipecat 与 OpenAI Realtime API 构建分层多智能体系统,用 Supervisor 划分任务边界;在真实门店场景中处理约 1,000 笔订单,并将平均通话时长从 5 分钟压缩至 2 分钟。" data-hant="基於 Pipecat 與 OpenAI Realtime API 構建分層多智能體系統,用 Supervisor 劃分任務邊界;在真實門店場景中處理約 1,000 筆訂單,並將平均通話時長從 5 分鐘壓縮至 2 分鐘。" data-en="Built a tiered multi-agent system with Pipecat and OpenAI Realtime API, using supervisors to keep responsibilities explicit. It handled about 1,000 real orders and reduced average call time from five minutes to two.">基于 Pipecat 与 OpenAI Realtime API 构建分层多智能体系统,用 Supervisor 划分任务边界;在真实门店场景中处理约 1,000 笔订单,并将平均通话时长从 5 分钟压缩至 2 分钟。</p>
<div class="project-meta"><span>Realtime</span><span>Multi-agent</span><span>Evaluation</span></div><span class="project-number">01</span>
</a>
<a class="project-card tall reveal" href="https://github.com/xyma2003/kdd-cup" target="_blank" rel="noopener noreferrer">
<div class="card-top"><span class="project-type" data-zh="数据分析 Agent" data-hant="數據分析 Agent" data-en="Data analysis agent">数据分析 Agent</span><span class="arrow" aria-hidden="true">↗</span></div>
<h3>KDD Cup 2026 — DataAgent-Bench</h3>
<p data-zh="面向异构数据分析的 ReAct Agent,包含五层容错 JSON 解析和 SQL 结果自验证。" data-hant="面向異構數據分析的 ReAct Agent,包含五層容錯 JSON 解析和 SQL 結果自驗證。" data-en="A ReAct agent for heterogeneous data analysis with five-layer fault-tolerant JSON parsing and SQL result self-verification.">面向异构数据分析的 ReAct Agent,包含五层容错 JSON 解析和 SQL 结果自验证。</p>
<div class="project-meta"><span>ReAct</span><span>SQL</span><span>Self-verification</span></div><span class="project-number">02</span>
</a>
<a class="project-card half reveal" href="https://github.com/xyma2003/multi-agent-debate" target="_blank" rel="noopener noreferrer">
<div class="card-top"><span class="project-type" data-zh="多智能体研究" data-hant="多智能體研究" data-en="Multi-agent research">多智能体研究</span><span class="arrow" aria-hidden="true">↗</span></div>
<h3>Multi-Agent Debate</h3>
<p data-zh="用 LangGraph 设计反共识架构,加入立场检测、让步跟踪与结构化报告,让结论可追溯,而不是只看最后一句话。" data-hant="用 LangGraph 設計反共識架構,加入立場檢測、讓步追蹤與結構化報告,讓結論可追溯,而不是只看最後一句話。" data-en="An anti-consensus architecture in LangGraph with stance detection, concession tracking, and structured reports—making conclusions traceable instead of trusting only the final answer.">用 LangGraph 设计反共识架构,加入立场检测、让步跟踪与结构化报告,让结论可追溯,而不是只看最后一句话。</p>
<div class="project-meta"><span>LangGraph</span><span>NLI</span><span>Structured output</span></div><span class="project-number">03</span>
</a>
<a class="project-card half reveal" href="https://github.com/xyma2003/workdiary-agent" target="_blank" rel="noopener noreferrer">
<div class="card-top"><span class="project-type" data-zh="开发者工具" data-hant="開發者工具" data-en="Developer tool">开发者工具</span><span class="arrow" aria-hidden="true">↗</span></div>
<h3>WorkDiary Agent</h3>
<p data-zh="用 LangGraph 实现中断 / 恢复的 HITL 工作流与模板路由子图,把零散工作记录整理成可编辑、可确认的日报。" data-hant="用 LangGraph 實現中斷 / 恢復的 HITL 工作流與模板路由子圖,把零散工作記錄整理成可編輯、可確認的日報。" data-en="A LangGraph workflow with interrupt/resume HITL and template-routing subgraphs that turns fragmented work notes into editable, reviewable daily reports.">用 LangGraph 实现中断 / 恢复的 HITL 工作流与模板路由子图,把零散工作记录整理成可编辑、可确认的日报。</p>
<div class="project-meta"><span>HITL</span><span>Streamlit</span><span>SQLite</span></div><span class="project-number">04</span>
</a>
</div>
</div>
</section>
<section class="section" id="experience" aria-labelledby="experience-title">
<div class="shell experience-grid">
<div class="experience-intro reveal">
<p class="section-kicker">02 / Experience</p>
<h2 class="section-title" id="experience-title" data-zh="工作经历" data-hant="工作經歷" data-en="Experience">工作经历</h2>
<p data-zh="主要工作内容包括 AI Agent、LLM 数据处理、数据质量工具和前端开发。" data-hant="主要工作內容包括 AI Agent、LLM 數據處理、數據質量工具和前端開發。" data-en="My work includes AI agents, LLM data processing, data-quality tools, and frontend development.">主要工作内容包括 AI Agent、LLM 数据处理、数据质量工具和前端开发。</p>
</div>
<div class="timeline reveal">
<article class="role">
<div class="role-date" data-zh="2025.09 — 至今" data-hant="2025.09 — 至今" data-en="Sep 2025 — Present">2025.09 — 至今</div>
<div>
<h3 data-zh="软件工程师" data-hant="軟件工程師" data-en="Software Engineer">软件工程师</h3><p class="role-company" data-zh="美团" data-hant="美團" data-en="Meituan">美团</p>
<ul>
<li data-zh="构建分层实时 AI 电话点餐 Agent,服务 9 家门店、约 1,000 笔订单,准确率 94.8%。" data-hant="構建分層實時 AI 電話點餐 Agent,服務 9 家門店、約 1,000 筆訂單,準確率 94.8%。" data-en="Built a tiered real-time phone-ordering agent serving 9 stores and about 1,000 orders at 94.8% accuracy.">构建分层实时 AI 电话点餐 Agent,服务 9 家门店、约 1,000 笔订单,准确率 94.8%。</li>
<li data-zh="主导 200 万+ 金融实体记录的端到端 LLM 流程,包含检索、抽取、幻觉检测与模型蒸馏,准确率从 62% 提升到 85.33%。" data-hant="主導 200 萬+ 金融實體記錄的端到端 LLM 流程,包含檢索、抽取、幻覺檢測與模型蒸餾,準確率從 62% 提升到 85.33%。" data-en="Led an end-to-end LLM pipeline for 2M+ financial entity records, covering retrieval, extraction, hallucination detection, and distillation; improved accuracy from 62% to 85.33%.">主导 200 万+ 金融实体记录的端到端 LLM 流程,包含检索、抽取、幻觉检测与模型蒸馏,准确率从 62% 提升到 85.33%。</li>
<li data-zh="构建数据质量 Agent,自动化错误根因分析,并生成 benchmark、prompt 与数据清洗建议。" data-hant="構建數據質量 Agent,自動化錯誤根因分析,並生成 benchmark、prompt 與數據清洗建議。" data-en="Built a data-quality agent to automate root-cause analysis and generate benchmark, prompt, and data-cleaning recommendations.">构建数据质量 Agent,自动化错误根因分析,并生成 benchmark、prompt 与数据清洗建议。</li>
</ul>
</div>
</article>
<article class="role">
<div class="role-date">2024.05 — 2024.08</div>
<div><h3 data-zh="前端开发实习生" data-hant="前端開發實習生" data-en="Frontend Engineering Intern">前端开发实习生</h3><p class="role-company" data-zh="美团" data-hant="美團" data-en="Meituan">美团</p><ul><li data-zh="交付 C 端小程序功能与动效,主导核心逻辑重构和组件库抽离,修复 5+ 处遗留缺陷。" data-hant="交付 C 端小程序功能與動效,主導核心邏輯重構和組件庫抽離,修復 5+ 處遺留缺陷。" data-en="Shipped consumer mini-program features and motion, led a core-logic refactor and component extraction, and fixed 5+ legacy defects.">交付 C 端小程序功能与动效,主导核心逻辑重构和组件库抽离,修复 5+ 处遗留缺陷。</li></ul></div>
</article>
</div>
</div>
</section>
<section class="section" id="about" aria-labelledby="about-title">
<div class="shell">
<div class="section-head reveal"><p class="section-kicker">03 / About</p><h2 class="section-title" id="about-title" data-zh="关于我" data-hant="關於我" data-en="About">关于我</h2></div>
<div class="about-grid reveal">
<p class="manifesto" data-zh="我是一名软件工程师,喜欢探索和构建 AI Agent。" data-hant="我是一名軟件工程師,喜歡探索和構建 AI Agent。" data-en="I'm a software engineer who enjoys exploring and building AI agents.">我是一名软件工程师,喜欢探索和构建 AI Agent。</p>
</div>
<div class="education reveal">
<article class="school"><span class="school-year">2021 — 2025</span><h3 data-zh="香港大学" data-hant="香港大學" data-en="The University of Hong Kong">香港大学</h3><p data-zh="文理学士,双主修计算机科学与金融科技。连续 4 年全额奖学金,院长荣誉榜。" data-hant="文理學士,雙主修計算機科學與金融科技。連續 4 年全額獎學金,院長榮譽榜。" data-en="BASc, double major in Computer Science and Financial Technology. Four-year full scholarship and Dean's Honor List.">文理学士,双主修计算机科学与金融科技。连续 4 年全额奖学金,院长荣誉榜。</p></article>
<article class="school"><span class="school-year">2024</span><h3 data-zh="英属哥伦比亚大学" data-hant="英屬哥倫比亞大學" data-en="University of British Columbia">英属哥伦比亚大学</h3><p data-zh="香港大学选派交换,在温哥华修读计算机科学相关课程。" data-hant="香港大學選派交換,在溫哥華修讀計算機科學相關課程。" data-en="HKU-nominated exchange in Vancouver, with coursework in Computer Science.">香港大学选派交换,在温哥华修读计算机科学相关课程。</p></article>
</div>
</div>
</section>
</main>
<footer class="site-footer" id="contact">
<div class="shell">
<div class="footer-main">
<div><p class="footer-kicker">04 / Contact</p><h2 data-zh="联系我" data-hant="聯絡我" data-en="Contact">联系我</h2></div>
<div class="footer-links"><a class="button" href="mailto:u3594619@connect.hku.hk">Email ↗</a><a class="button" href="https://github.com/xyma2003" target="_blank" rel="noopener noreferrer">GitHub ↗</a></div>
</div>
<div class="footer-bottom"><span>© <span id="year">2026</span> Max Ma</span><span>xyma2003.github.io</span></div>
</div>
</footer>
<script>
(() => {
const languages = ['zh', 'hant', 'en'];
const htmlLang = { zh: 'zh-CN', hant: 'zh-HK', en: 'en' };
const titles = { zh: 'Max Ma — 软件工程师', hant: 'Max Ma — 軟件工程師', en: 'Max Ma — Software Engineer' };
const descriptions = {
zh: 'Max Ma 的个人网站。软件工程师,主要从事 AI Agent 与 LLM 应用开发。',
hant: 'Max Ma 的個人網站。軟件工程師,主要從事 AI Agent 與 LLM 應用開發。',
en: 'Personal website of Max Ma, a software engineer working on AI agents and LLM applications.'
};
let current = localStorage.getItem('site-lang');
if (!languages.includes(current)) {
const preferred = navigator.language.toLowerCase();
current = preferred.includes('hant') || preferred.includes('hk') || preferred.includes('tw') ? 'hant' : preferred.startsWith('en') ? 'en' : 'zh';
}
function applyLanguage(lang) {
document.documentElement.lang = htmlLang[lang];
document.title = titles[lang];
document.querySelector('meta[name="description"]').content = descriptions[lang];
document.querySelectorAll(`[data-${lang}]`).forEach((element) => { element.textContent = element.dataset[lang]; });
document.querySelectorAll('.lang-btn').forEach((button) => {
const active = button.dataset.lang === lang;
button.classList.toggle('active', active);
button.setAttribute('aria-pressed', String(active));
});
localStorage.setItem('site-lang', lang);
}
document.querySelectorAll('.lang-btn').forEach((button) => { button.addEventListener('click', () => applyLanguage(button.dataset.lang)); });
const header = document.getElementById('site-header');
const updateHeader = () => header.classList.toggle('scrolled', window.scrollY > 10);
window.addEventListener('scroll', updateHeader, { passive: true });
updateHeader();
document.getElementById('year').textContent = new Date().getFullYear();
applyLanguage(current);
})();
</script>
</body>
</html>