-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
2815 lines (2571 loc) · 192 KB
/
Copy pathindex.html
File metadata and controls
2815 lines (2571 loc) · 192 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
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI 应用 & Agent 开发知识图谱 | Java 工程师进阶</title>
<style>
:root {
--bg: #0f1117;
--bg2: #1a1d27;
--bg3: #252836;
--border: #2d3048;
--accent: #6c63ff;
--accent2: #00d4ff;
--accent3: #ff6b6b;
--accent4: #ffd93d;
--accent5: #6bcb77;
--text: #e2e8f0;
--text2: #94a3b8;
--text3: #64748b;
--tag-bg: #1e2235;
--code-bg: #161925;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body { background: var(--bg); color: var(--text); font-family: 'Segoe UI', system-ui, sans-serif; line-height: 1.7; }
/* ── 顶栏 ── */
.topbar { background: var(--bg2); border-bottom: 1px solid var(--border); padding: 16px 24px; display: flex; align-items: center; gap: 12px; position: sticky; top: 0; z-index: 100; backdrop-filter: blur(8px); }
.topbar h1 { font-size: 1.1rem; background: linear-gradient(135deg, var(--accent), var(--accent2)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
.topbar .sub { color: var(--text3); font-size: 0.8rem; margin-left: auto; }
/* ── 布局 ── */
.layout { display: flex; min-height: 100vh; }
.sidebar { width: 260px; min-width: 260px; background: var(--bg2); border-right: 1px solid var(--border); padding: 20px 0; position: sticky; top: 57px; height: calc(100vh - 57px); overflow-y: auto; }
.main { flex: 1; padding: 32px; max-width: 1000px; }
/* ── 侧边导航 ── */
.nav-section { padding: 0 16px 8px; font-size: 0.7rem; color: var(--text3); text-transform: uppercase; letter-spacing: 1px; margin-top: 16px; }
.nav-item { display: flex; align-items: center; gap: 8px; padding: 8px 16px; cursor: pointer; font-size: 0.88rem; color: var(--text2); transition: all 0.2s; border-left: 2px solid transparent; }
.nav-item:hover { background: var(--bg3); color: var(--text); }
.nav-item.active { background: var(--bg3); color: var(--accent); border-left-color: var(--accent); }
.nav-item .icon { font-size: 1rem; min-width: 20px; }
/* ── 卡片 ── */
.card { background: var(--bg2); border: 1px solid var(--border); border-radius: 12px; padding: 28px; margin-bottom: 24px; transition: border-color 0.2s; }
.card:hover { border-color: var(--accent); }
.card-header { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.card-icon { font-size: 1.8rem; }
.card-title { font-size: 1.25rem; font-weight: 600; }
.card-subtitle { font-size: 0.82rem; color: var(--text3); margin-top: 2px; }
/* ── 三要素块 ── */
.principle-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin: 16px 0; }
.principle-box { background: var(--bg3); border-radius: 8px; padding: 14px; border-left: 3px solid var(--accent); }
.principle-box.p2 { border-left-color: var(--accent2); }
.principle-box.p3 { border-left-color: var(--accent4); }
.principle-box.p4 { border-left-color: var(--accent5); }
.principle-box .label { font-size: 0.7rem; color: var(--text3); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 6px; }
.principle-box .value { font-size: 0.9rem; color: var(--text); }
/* ── 代码块 ── */
pre { background: var(--code-bg); border: 1px solid var(--border); border-radius: 8px; padding: 16px; overflow-x: auto; font-size: 0.82rem; font-family: 'Cascadia Code', 'Fira Code', monospace; margin: 12px 0; }
code { background: var(--code-bg); padding: 2px 6px; border-radius: 4px; font-size: 0.85rem; color: var(--accent2); }
/* ── 标签 ── */
.tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; }
.tag { background: var(--tag-bg); border: 1px solid var(--border); border-radius: 20px; padding: 3px 10px; font-size: 0.75rem; color: var(--text2); }
.tag.hot { border-color: var(--accent3); color: var(--accent3); }
.tag.new { border-color: var(--accent5); color: var(--accent5); }
.tag.java { border-color: var(--accent4); color: var(--accent4); }
/* ── 流程图 ── */
.flow { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; margin: 16px 0; }
.flow-step { background: var(--bg3); border: 1px solid var(--border); border-radius: 6px; padding: 6px 12px; font-size: 0.82rem; }
.flow-arrow { color: var(--accent); font-size: 1.1rem; }
/* ── 对比表 ── */
.compare-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; margin: 16px 0; }
.compare-table th { background: var(--bg3); padding: 10px 14px; text-align: left; font-size: 0.75rem; color: var(--text3); text-transform: uppercase; letter-spacing: 0.5px; }
.compare-table td { padding: 10px 14px; border-bottom: 1px solid var(--border); }
.compare-table tr:last-child td { border-bottom: none; }
.compare-table tr:hover td { background: var(--bg3); }
/* ── 警告/提示块 ── */
.alert { border-radius: 8px; padding: 12px 16px; font-size: 0.88rem; margin: 12px 0; display: flex; gap: 10px; }
.alert.info { background: rgba(108,99,255,0.1); border: 1px solid rgba(108,99,255,0.3); }
.alert.warn { background: rgba(255,107,107,0.1); border: 1px solid rgba(255,107,107,0.3); }
.alert.tip { background: rgba(0,212,255,0.1); border: 1px solid rgba(0,212,255,0.3); }
.alert.success { background: rgba(107,203,119,0.1); border: 1px solid rgba(107,203,119,0.3); }
/* ── 章节标题 ── */
.section-title { font-size: 1.8rem; font-weight: 700; margin-bottom: 8px; }
.section-desc { color: var(--text2); font-size: 0.95rem; margin-bottom: 24px; }
.h2 { font-size: 1.1rem; font-weight: 600; margin: 20px 0 10px; color: var(--accent2); }
.h3 { font-size: 0.95rem; font-weight: 600; margin: 14px 0 8px; color: var(--accent4); }
p { color: var(--text2); margin: 8px 0; font-size: 0.9rem; }
ul, ol { color: var(--text2); font-size: 0.9rem; padding-left: 20px; }
li { margin: 4px 0; }
li strong { color: var(--text); }
/* ── 页面切换 ── */
.page { display: none; }
.page.active { display: block; }
/* ── 进度条 ── */
.skill-bar { margin: 8px 0; }
.skill-label { display: flex; justify-content: space-between; font-size: 0.8rem; color: var(--text2); margin-bottom: 4px; }
.skill-track { background: var(--bg3); border-radius: 4px; height: 6px; }
.skill-fill { height: 6px; border-radius: 4px; background: linear-gradient(90deg, var(--accent), var(--accent2)); transition: width 0.8s ease; }
/* ── 双列 ── */
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
/* ── 高亮框 ── */
.highlight-box { background: linear-gradient(135deg, rgba(108,99,255,0.1), rgba(0,212,255,0.05)); border: 1px solid rgba(108,99,255,0.3); border-radius: 10px; padding: 16px 20px; margin: 14px 0; }
/* ── 移动端 ── */
@media (max-width: 768px) {
.sidebar { display: none; }
.principle-grid, .grid2, .grid3 { grid-template-columns: 1fr; }
}
.badge { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 0.72rem; font-weight: 600; background: var(--accent); color: white; margin-left: 6px; }
.badge.red { background: var(--accent3); }
.badge.green { background: var(--accent5); }
.badge.yellow { background: var(--accent4); color: #000; }
/* ── 知识点块 ── */
.kp-block { background: var(--bg3); border-radius: 8px; padding: 16px; margin: 12px 0; border-left: 3px solid var(--accent); }
.kp-block.kp2 { border-left-color: var(--accent2); }
.kp-block.kp3 { border-left-color: var(--accent4); }
.kp-block.kp4 { border-left-color: var(--accent5); }
.kp-row { display: grid; grid-template-columns: 100px 1fr; gap: 10px; margin: 8px 0; font-size: 0.88rem; align-items: start; }
.kp-label { color: var(--accent2); font-weight: 600; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px; padding-top: 2px; }
.kp-label.warn { color: var(--accent3); }
.kp-label.tip { color: var(--accent5); }
.kp-label.demo { color: var(--accent4); }
.kp-num { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--accent); color: white; font-size: 0.75rem; font-weight: 700; margin-right: 8px; flex-shrink: 0; }
.toc-links { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0; }
.toc-link { background: var(--bg3); border: 1px solid var(--border); border-radius: 6px; padding: 4px 10px; font-size: 0.78rem; color: var(--text2); cursor: pointer; transition: all 0.2s; text-decoration: none; }
.toc-link:hover { border-color: var(--accent); color: var(--accent); }
.project-box { background: rgba(107,203,119,0.08); border: 1px solid rgba(107,203,119,0.35); border-radius: 8px; padding: 14px 16px; margin: 12px 0; }
.project-box .proj-title { font-size: 0.78rem; color: var(--accent5); font-weight: 700; margin-bottom: 8px; letter-spacing: 0.5px; }
.glossary-cat { font-size: 0.95rem; font-weight: 700; color: var(--accent); margin: 20px 0 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border); }
.step-box { background: var(--bg3); border-radius: 8px; padding: 14px; margin: 10px 0; border-left: 3px solid var(--accent5); }
.step-box .step-num { color: var(--accent5); font-weight: 700; font-size: 0.8rem; }
.detail-flow { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; margin: 14px 0; padding: 14px; background: var(--bg3); border-radius: 8px; }
</style>
</head>
<body>
<div class="topbar">
<span style="font-size:1.4rem">🧠</span>
<h1>AI 应用 & Agent 开发知识图谱</h1>
<span class="sub">Java工程师 AI 转型 · 第一性原理 · 2025版</span>
</div>
<div class="layout">
<!-- ══ 侧边栏 ══ -->
<nav class="sidebar">
<div class="nav-section">核心概念</div>
<div class="nav-item" onclick="showPage('job-direction')"><span class="icon">🎯</span>岗位方向选择</div>
<div class="nav-item active" onclick="showPage('overview')"><span class="icon">🗺️</span>全局导图</div>
<div class="nav-item" onclick="showPage('llm')"><span class="icon">🤖</span>LLM 基础原理</div>
<div class="nav-item" onclick="showPage('prompt')"><span class="icon">✍️</span>Prompt 工程</div>
<div class="nav-item" onclick="showPage('rag')"><span class="icon">📚</span>RAG 检索增强</div>
<div class="nav-item" onclick="showPage('tools')"><span class="icon">🔧</span>Tool Calling</div>
<div class="nav-item" onclick="showPage('memory')"><span class="icon">🧠</span>记忆系统</div>
<div class="nav-section">Java AI 框架</div>
<div class="nav-item" onclick="showPage('springai')"><span class="icon">☕</span>Spring AI</div>
<div class="nav-item" onclick="showPage('springai-alibaba')"><span class="icon">☁️</span>Spring AI Alibaba</div>
<div class="nav-item" onclick="showPage('langchain4j')"><span class="icon">⛓️</span>LangChain4j</div>
<div class="nav-section">Agent 开发</div>
<div class="nav-item" onclick="showPage('agent-intro')"><span class="icon">🤖</span>Agent 是什么</div>
<div class="nav-item" onclick="showPage('react')"><span class="icon">🔄</span>ReAct Agent</div>
<div class="nav-item" onclick="showPage('multi-agent')"><span class="icon">👥</span>Multi-Agent</div>
<div class="nav-item" onclick="showPage('agent-pattern')"><span class="icon">🏗️</span>Agent 设计模式</div>
<div class="nav-section">Vibe Coding</div>
<div class="nav-item" onclick="showPage('cursor')"><span class="icon">🖱️</span>Cursor</div>
<div class="nav-item" onclick="showPage('claude-code')"><span class="icon">⚡</span>Claude Code</div>
<div class="nav-item" onclick="showPage('vibe-flow')"><span class="icon">🌊</span>AI 驱动开发流程</div>
<div class="nav-section">企业级能力</div>
<div class="nav-item" onclick="showPage('skills')"><span class="icon">🎯</span>Skills 技能系统</div>
<div class="nav-item" onclick="showPage('harness')"><span class="icon">🏋️</span>Harness 执行框架</div>
<div class="nav-item" onclick="showPage('mcp')"><span class="icon">🔌</span>MCP 协议</div>
<div class="nav-item" onclick="showPage('rag-enterprise')"><span class="icon">🏢</span>企业级 RAG · 咔咔快</div>
<div class="nav-section">实战场景</div>
<div class="nav-item" onclick="showPage('customer-service')"><span class="icon">💬</span>智能客服系统</div>
<div class="nav-item" onclick="showPage('interview')"><span class="icon">🎤</span>面试知识点</div>
</nav>
<!-- ══ 主内容 ══ -->
<main class="main">
<!-- ==================== 岗位方向选择 ==================== -->
<div id="page-job-direction" class="page">
<div class="section-title">🎯 岗位方向选择</div>
<div class="section-desc">Java 工程师转型 AI — 三大核心方向全景对比</div>
<div class="card">
<div class="card-header">
<span class="card-icon">🧭</span>
<div><div class="card-title">三大 AI 岗位方向对比</div><div class="card-subtitle">基于你的 10 年 Java 背景,三个方向均高度适配</div></div>
</div>
<div class="alert success">✅ <strong>核心结论:</strong>你的 Java 微服务 + 支付 + RAG 实战经验,在 AI 岗位中属于稀缺组合。大模型应用开发是最快落地方向,Agent 是最高薪资方向,RAG 工程师是最容易切入方向。</div>
<div style="overflow-x:auto;margin-top:16px">
<table class="compare-table" style="min-width:900px">
<tr>
<th style="min-width:130px">岗位方向</th>
<th style="min-width:160px">核心做什么</th>
<th style="min-width:150px">典型业务场景</th>
<th style="min-width:200px">核心技术要求</th>
<th>岗位门槛</th>
<th>市场机会</th>
<th style="min-width:100px">Java 适配度</th>
<th style="min-width:160px">转型核心抓手</th>
</tr>
<tr>
<td><strong style="color:var(--accent)">大模型应用开发工程师</strong><br><span style="font-size:0.78rem;color:var(--text3)">(AI 应用开发)</span><span class="badge">需求最大</span></td>
<td>基于大模型 API / 开源模型,开发企业级 AI 业务应用</td>
<td>智能客服、代码助手、智能文档分析、AI 业务流程自动化</td>
<td>Spring AI、LangChain4j、RAG 技术、向量数据库 (Milvus/FAISS)、大模型 API 对接、微服务架构</td>
<td><span style="color:var(--accent5)">一般</span></td>
<td><span style="color:var(--accent5)">⭐⭐⭐⭐⭐ 极高</span></td>
<td>⭐⭐⭐⭐⭐<br><span style="font-size:0.75rem;color:var(--accent5)">核心适配</span></td>
<td>100% 匹配 Java 技术栈,Spring AI 是核心竞争力,直接对接企业 AI 落地需求</td>
</tr>
<tr>
<td><strong style="color:var(--accent2)">AI Agent 研发工程师</strong><br><span style="font-size:0.78rem;color:var(--text3)">(智能体)</span><span class="badge red">最高薪</span></td>
<td>开发能自主思考、任务拆解、工具调用的 AI 智能系统</td>
<td>自动化办公智能体、代码生成智能体、运维自动化、多智能体协作</td>
<td>Agent 核心架构 (规划/记忆/工具调用/反馈循环)、LangChain4j/Spring AI Agent、RAG、Function Calling</td>
<td><span style="color:var(--accent4)">较高</span></td>
<td><span style="color:var(--accent2)">⭐⭐⭐⭐⭐ 高</span></td>
<td>⭐⭐⭐⭐⭐<br><span style="font-size:0.75rem;color:var(--accent2)">极高适配</span></td>
<td>完全适配 Java 后端架构经验,Spring AI Agent 是 Java 专属核心工具,可复用微服务/分布式能力</td>
</tr>
<tr>
<td><strong style="color:var(--accent4)">私有知识库 / RAG 工程师</strong><br><span style="font-size:0.78rem;color:var(--text3)">(知识系统)</span><span class="badge green">最易切入</span></td>
<td>搭建企业专属 AI 知识系统,将内部文档转化为精准知识库</td>
<td>企业内部智能问答、员工培训助手、行业知识库、智能客服</td>
<td>RAG 全流程 (数据处理/Embedding/检索/生成优化)、向量数据库、Prompt 工程、Spring AI 向量存储</td>
<td><span style="color:var(--accent5)">一般</span></td>
<td><span style="color:var(--accent5)">⭐⭐⭐⭐⭐ 极高</span></td>
<td>⭐⭐⭐⭐<br><span style="font-size:0.75rem;color:var(--accent4)">高适配</span></td>
<td>Java 后端经验可快速对接企业系统,补充 RAG 流程和向量库实操即可,落地周期短</td>
</tr>
</table>
</div>
</div>
<div class="grid3">
<div class="card">
<div class="card-header"><span class="card-icon">🚀</span><div><div class="card-title" style="color:var(--accent)">大模型应用开发</div><div class="card-subtitle">推荐优先级 ★★★★★</div></div></div>
<div class="h3">核心技术栈</div>
<div class="tags">
<span class="tag java">Spring AI</span><span class="tag java">LangChain4j</span><span class="tag hot">RAG</span>
<span class="tag">向量数据库</span><span class="tag">Prompt Engineering</span><span class="tag new">Tool Calling</span>
</div>
<div class="h3">你的差距</div>
<div class="alert success" style="margin:8px 0;font-size:0.82rem">✅ 差距最小,你已有 RAG 实战项目</div>
<div class="h3">薪资范围</div>
<p>15K-35K,一线城市 20K-45K</p>
<div class="h3">面试重点</div>
<ul>
<li>RAG 全流程实现与优化</li>
<li>Spring AI ChatClient + Advisor 使用</li>
<li>Prompt 模板设计</li>
<li>向量检索精度调优</li>
</ul>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🤖</span><div><div class="card-title" style="color:var(--accent2)">AI Agent 研发</div><div class="card-subtitle">推荐优先级 ★★★★★</div></div></div>
<div class="h3">核心技术栈</div>
<div class="tags">
<span class="tag hot">ReAct Agent</span><span class="tag hot">Multi-Agent</span><span class="tag java">Spring AI Agent</span>
<span class="tag">Tool Calling</span><span class="tag new">MCP</span><span class="tag">工作流编排</span>
</div>
<div class="h3">你的差距</div>
<div class="alert tip" style="margin:8px 0;font-size:0.82rem">💡 需补充 Agent Loop 设计和框架实操</div>
<div class="h3">薪资范围</div>
<p>20K-50K,稀缺岗位溢价明显</p>
<div class="h3">面试重点</div>
<ul>
<li>ReAct 思考循环机制</li>
<li>Agent 记忆与工具调用设计</li>
<li>Multi-Agent 协作架构</li>
<li>吴恩达四大设计模式</li>
</ul>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">📚</span><div><div class="card-title" style="color:var(--accent4)">RAG / 知识库工程师</div><div class="card-subtitle">推荐优先级 ★★★★</div></div></div>
<div class="h3">核心技术栈</div>
<div class="tags">
<span class="tag hot">RAG 优化</span><span class="tag">Embedding</span><span class="tag java">Spring AI VectorStore</span>
<span class="tag">Milvus</span><span class="tag">Reranker</span><span class="tag">文档解析</span>
</div>
<div class="h3">你的差距</div>
<div class="alert success" style="margin:8px 0;font-size:0.82rem">✅ 已有咔咔快 RAG 项目,直接可讲</div>
<div class="h3">薪资范围</div>
<p>15K-30K,企业需求量极大</p>
<div class="h3">面试重点</div>
<ul>
<li>文档切片策略选择</li>
<li>向量检索 + 关键词混合检索</li>
<li>HyDE、Reranker 优化技术</li>
<li>知识库质量评估方法</li>
</ul>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🗺️</span><div class="card-title">知识栈学习路径</div></div>
<div class="grid2">
<div>
<div class="h2">📌 通用基础(三个方向都要掌握)</div>
<div class="flow">
<div class="flow-step">LLM 原理</div><div class="flow-arrow">→</div>
<div class="flow-step">Prompt 工程</div><div class="flow-arrow">→</div>
<div class="flow-step">RAG 全流程</div><div class="flow-arrow">→</div>
<div class="flow-step">Tool Calling</div>
</div>
<div class="h2">🎯 大模型应用开发专项</div>
<div class="flow">
<div class="flow-step">Spring AI</div><div class="flow-arrow">→</div>
<div class="flow-step">ChatClient</div><div class="flow-arrow">→</div>
<div class="flow-step">Advisor</div><div class="flow-arrow">→</div>
<div class="flow-step">向量数据库</div>
</div>
<div class="h2">🤖 Agent 研发专项</div>
<div class="flow">
<div class="flow-step">ReAct 原理</div><div class="flow-arrow">→</div>
<div class="flow-step">记忆系统</div><div class="flow-arrow">→</div>
<div class="flow-step">Multi-Agent</div><div class="flow-arrow">→</div>
<div class="flow-step">MCP</div>
</div>
</div>
<div>
<div class="h2">⏱️ 推荐学习时间分配</div>
<div class="skill-bar"><div class="skill-label"><span>LLM 基础 + Prompt</span><span>1 周</span></div><div class="skill-track"><div class="skill-fill" style="width:30%"></div></div></div>
<div class="skill-bar"><div class="skill-label"><span>Spring AI + RAG 实操</span><span>2 周</span></div><div class="skill-track"><div class="skill-fill" style="width:60%"></div></div></div>
<div class="skill-bar"><div class="skill-label"><span>Agent 架构 + 实战</span><span>2 周</span></div><div class="skill-track"><div class="skill-fill" style="width:60%"></div></div></div>
<div class="skill-bar"><div class="skill-label"><span>企业级能力 (Skills/MCP)</span><span>1 周</span></div><div class="skill-track"><div class="skill-fill" style="width:30%"></div></div></div>
<div class="skill-bar"><div class="skill-label"><span>面试准备 + 项目梳理</span><span>1 周</span></div><div class="skill-track"><div class="skill-fill" style="width:30%"></div></div></div>
<div class="alert info" style="margin-top:12px">ℹ️ 总计约 <strong>7 周</strong>,你已有 RAG 实战基础可缩短到 <strong>4-5 周</strong></div>
</div>
</div>
</div>
</div>
<!-- ==================== END 岗位方向 ==================== -->
<!-- ==================== 全局导图 ==================== -->
<div id="page-overview" class="page active">
<div class="section-title">🗺️ 全局知识导图</div>
<div class="section-desc">从 Java 老手到 AI 应用工程师 — 系统化学习路径</div>
<div class="card">
<div class="card-header">
<span class="card-icon">🎯</span>
<div><div class="card-title">你的优势 & 转型方向</div><div class="card-subtitle">10年Java + 支付/IoT经验,AI方向价值极高</div></div>
</div>
<div class="grid2">
<div class="highlight-box">
<div class="h3">✅ 已有优势</div>
<ul>
<li>Spring 生态深度理解 → Spring AI 无缝衔接</li>
<li>微服务架构经验 → Multi-Agent 天然对应</li>
<li>RAG 实际项目经验(智能客服)</li>
<li>MQ 异步解耦 → Agent 工具调用模式一致</li>
<li>支付安全意识 → AI 应用安全设计</li>
</ul>
</div>
<div class="highlight-box">
<div class="h3">🚀 需要补充</div>
<ul>
<li>LLM 原理(Token、上下文窗口、Temperature)</li>
<li>Prompt Engineering 系统方法</li>
<li>Agent Loop 设计模式(ReAct、Plan-Execute)</li>
<li>向量检索优化(Embedding、Rerank)</li>
<li>Skills/Harness 企业级 Agent 框架</li>
</ul>
</div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🗃️</span><div class="card-title">知识体系全景</div></div>
<div class="principle-grid">
<div class="principle-box">
<div class="label">第一层 · 基础</div>
<div class="value">LLM原理 → Prompt工程 → Tool Calling → 记忆系统</div>
</div>
<div class="principle-box p2">
<div class="label">第二层 · 框架</div>
<div class="value">Spring AI · LangChain4j · Spring AI Alibaba</div>
</div>
<div class="principle-box p3">
<div class="label">第三层 · Agent</div>
<div class="value">ReAct · Plan-Execute · Multi-Agent · 设计模式</div>
</div>
<div class="principle-box p4">
<div class="label">第四层 · 工程化</div>
<div class="value">RAG优化 · 记忆管理 · 工具注册 · 可观测性</div>
</div>
<div class="principle-box">
<div class="label">第五层 · 企业级</div>
<div class="value">Skills · Harness · MCP · Vibe Coding</div>
</div>
<div class="principle-box p2">
<div class="label">第六层 · 实战</div>
<div class="value">智能客服 · 代码 Agent · 数据分析 · 流程自动化</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">📅</span><div class="card-title">学习优先级路线</div></div>
<div class="flow">
<div class="flow-step" style="border-color:var(--accent3)">Week1<br/>LLM基础+Prompt</div>
<div class="flow-arrow">→</div>
<div class="flow-step" style="border-color:var(--accent4)">Week2<br/>Spring AI实战</div>
<div class="flow-arrow">→</div>
<div class="flow-step" style="border-color:var(--accent2)">Week3<br/>RAG+Tool Calling</div>
<div class="flow-arrow">→</div>
<div class="flow-step" style="border-color:var(--accent5)">Week4<br/>ReAct Agent</div>
<div class="flow-arrow">→</div>
<div class="flow-step" style="border-color:var(--accent)">Week5+<br/>Multi-Agent+企业级</div>
</div>
<div class="alert info">💡 <span>你已有 RAG 实战经验,Week3 可以快速通过,重点放在 Week4-5 的 Agent 架构设计。</span></div>
</div>
</div>
<!-- ==================== END 全局导图 ==================== -->
<!-- ==================== LLM 基础原理 ==================== -->
<div id="page-llm" class="page">
<div class="section-title">🤖 LLM 基础原理</div>
<div class="section-desc">第一性原理:LLM 解决什么问题?原理是什么?</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>传统程序只能处理规则明确的结构化任务。LLM 解决了「用自然语言理解和生成人类意图」的问题——让机器能理解模糊的、上下文依赖的、创造性的指令,并给出流畅的回应。</p>
<div class="principle-grid">
<div class="principle-box"><div class="label">问题</div><div class="value">自然语言理解与生成</div></div>
<div class="principle-box p2"><div class="label">核心能力</div><div class="value">上下文推理 + 知识检索 + 格式生成</div></div>
<div class="principle-box p3"><div class="label">本质</div><div class="value">下一个 Token 概率预测器</div></div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">⚙️</span><div class="card-title">核心概念速查</div></div>
<table class="compare-table">
<tr><th>概念</th><th>含义</th><th>实际影响</th></tr>
<tr><td><strong>Token</strong></td><td>LLM 处理的最小单位,约 0.75 个中文字 / 1 英文单词</td><td>影响成本和速度</td></tr>
<tr><td><strong>上下文窗口</strong></td><td>模型一次能处理的最大 Token 数(如 128K)</td><td>决定能传多少历史</td></tr>
<tr><td><strong>Temperature</strong></td><td>控制随机性,0=确定性,1=创意,>1=混乱</td><td>代码用 0,创作用 0.7</td></tr>
<tr><td><strong>Top-P</strong></td><td>采样范围(nucleus sampling),配合 Temperature</td><td>一般设 0.9-0.95</td></tr>
<tr><td><strong>System Prompt</strong></td><td>角色设定和约束,在对话前注入</td><td>定义模型行为边界</td></tr>
<tr><td><strong>Few-Shot</strong></td><td>在 Prompt 中给示例引导输出格式</td><td>格式稳定性大幅提升</td></tr>
<tr><td><strong>Hallucination</strong></td><td>模型编造不存在的事实</td><td>必须用 RAG 或 Grounding</td></tr>
</table>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">💡</span><div class="card-title">关键工程注意点</div></div>
<div class="alert warn">⚠️ <strong>幻觉问题:</strong>模型不知道「不知道」,会编造答案。解法:RAG注入事实 + 要求模型引用来源 + 低Temperature</div>
<div class="alert tip">💡 <strong>上下文管理:</strong>超过窗口就会「遗忘」早期内容。解法:滑动窗口 + 摘要压缩 + 向量记忆</div>
<div class="alert info">ℹ️ <strong>成本控制:</strong>Token = 钱。System Prompt 越短越好,用 Cache 复用高频内容</div>
<div class="alert success">✅ <strong>确定性输出:</strong>生产环境 Temperature 设 0,需要 JSON 时在 Prompt 里强制约束格式</div>
</div>
</div>
<!-- ==================== END LLM ==================== -->
<!-- ==================== Prompt 工程 ==================== -->
<div id="page-prompt" class="page">
<div class="section-title">✍️ Prompt Engineering</div>
<div class="section-desc">第一性原理:Prompt 是与 LLM 沟通的编程语言</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>同一个模型,用不同的 Prompt 能得到截然不同的结果。Prompt Engineering 解决「如何精确表达意图、约束输出、引导推理」的问题。本质是:<strong>把需求翻译成模型能最好理解的指令形式</strong>。</p>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🔑</span><div class="card-title">六大核心技巧</div></div>
<div class="h2">1. 角色设定(Role Prompting)</div>
<pre>你是一个有10年支付系统经验的Java架构师,专注于高并发和金融安全。
请从架构角度评审以下代码...</pre>
<p>角色越具体,输出越专业。加上「专注于xxx」约束输出方向。</p>
<div class="h2">2. 思维链(Chain-of-Thought)</div>
<pre># 方式1:直接触发
请一步步分析这个问题...
# 方式2:Few-Shot CoT(给出推理示例)
问题:A+B=? 分析:A=1,B=2,所以 A+B=3。
问题:[你的问题] 分析:</pre>
<p>复杂推理任务必加,分析类准确率提升 30%+。</p>
<div class="h2">3. 输出格式约束</div>
<pre>请以以下JSON格式返回,不要包含其他内容:
{
"intent": "用户意图",
"confidence": 0.0-1.0,
"action": "建议动作"
}</pre>
<p>生产环境必须约束格式,配合 Temperature=0 使用。</p>
<div class="h2">4. 少样本示例(Few-Shot)</div>
<pre>示例1:输入"我要充值" → 意图:充值
示例2:输入"我的网络很慢" → 意图:网络问题
示例3:输入"怎么实名" → 意图:实名认证
现在请判断:输入"我要买套餐" → 意图:</pre>
<div class="h2">5. 负向约束(告诉模型不要做什么)</div>
<pre>注意:
- 不要编造不确定的信息
- 不要回答与[业务领域]无关的问题
- 如果不知道,请说"我不确定,建议联系人工客服"</pre>
<div class="alert warn">⚠️ 负向约束往往比正向更有效,明确边界防止幻觉</div>
<div class="h2">6. 上下文注入(RAG + Prompt)</div>
<pre>基于以下知识回答用户问题,如果知识中没有答案,回复"超出我的知识范围"。
知识库内容:
{retrieved_context}
用户问题:{user_question}</pre>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🏗️</span><div class="card-title">System Prompt 模板(客服场景)</div></div>
<pre>你是"咔咔快随身WiFi"的智能客服助手。
## 身份
专业、友善、简洁地回答用户关于随身WiFi的问题。
## 能力范围
- 实名认证流程指导
- 套餐查询与购买
- 网络故障排查
- 充值与退款
## 回答规则
1. 回答控制在100字以内
2. 遇到无法解决的问题,引导用户拨打客服电话
3. 不回答与随身WiFi无关的问题
4. 回答要有温度,不要冷冰冰
## 知识库
{rag_context}</pre>
</div>
</div>
<!-- ==================== END Prompt ==================== -->
<!-- ==================== RAG ==================== -->
<div id="page-rag" class="page">
<div class="section-title">📚 RAG 检索增强生成</div>
<div class="section-desc">第一性原理:LLM 不会「查资料」,RAG 让它先检索再回答</div>
<div class="card">
<div class="card-header"><span class="card-icon">🧬</span><div class="card-title">第一性原理:RAG 解决什么问题?</div></div>
<div class="principle-grid">
<div class="principle-box"><div class="label">根本矛盾</div><div class="value">LLM 知识 = 训练数据快照,截止后无法感知企业私有文档</div></div>
<div class="principle-box p2"><div class="label">核心解法</div><div class="value">不修改模型权重,检索外部知识 → 注入 Prompt → 基于事实生成</div></div>
<div class="principle-box p3"><div class="label">类比</div><div class="value">开卷考试:模型是考生,向量库是书架,RAG 是「翻书找答案再写」</div></div>
</div>
<table class="compare-table" style="margin-top:16px">
<tr><th>方案</th><th>适用场景</th><th>局限</th></tr>
<tr><td><strong>纯 Prompt</strong></td><td>通用知识问答</td><td>无法回答私有数据,易幻觉</td></tr>
<tr><td><strong>微调 Fine-tuning</strong></td><td>固定领域、风格固化</td><td>成本高、更新慢、无法引用最新文档</td></tr>
<tr><td><strong>RAG</strong></td><td>企业知识库、客服 FAQ、规章制度</td><td>依赖检索质量,需工程化优化</td></tr>
</table>
<div class="alert info">💡 企业级知识库系统的本质:<strong>代码写得好不如数据洗得好</strong>——检索精度 80% 取决于分片和 Embedding,20% 才是 Prompt 和模型。</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🔄</span><div class="card-title">RAG 完整流程(两阶段)</div></div>
<div class="h2">阶段一:Indexing(离线建库)</div>
<div class="flow">
<div class="flow-step">原始文档<br/>PDF/Word/Excel</div>
<div class="flow-arrow">→</div>
<div class="flow-step">文档解析<br/>Tika Reader</div>
<div class="flow-arrow">→</div>
<div class="flow-step">分片 Chunking<br/>策略可选</div>
<div class="flow-arrow">→</div>
<div class="flow-step">Embedding<br/>向量化</div>
<div class="flow-arrow">→</div>
<div class="flow-step">Milvus<br/>+ Metadata</div>
</div>
<div class="h2">阶段二:Retrieval + Generation(在线问答)</div>
<div class="flow">
<div class="flow-step">用户提问</div>
<div class="flow-arrow">→</div>
<div class="flow-step">Query 向量化</div>
<div class="flow-arrow">→</div>
<div class="flow-step">Metadata 过滤<br/>缩小范围</div>
<div class="flow-arrow">→</div>
<div class="flow-step">Top-K 相似检索</div>
<div class="flow-arrow">→</div>
<div class="flow-step">(可选) Rerank</div>
<div class="flow-arrow">→</div>
<div class="flow-step">拼 Prompt + LLM</div>
</div>
<div class="alert tip">📌 Spring AI 中 <code>vectorStore.add()</code> 和 <code>QuestionAnswerAdvisor</code> 已封装 Embedding 与检索,开发者重点在<strong>分片策略、Metadata、召回优化</strong>。</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">☕</span><div class="card-title">Spring AI 最小实现</div></div>
<pre>// Indexing:Tika 读取 → TokenTextSplitter 分片 → Milvus 存储
List<Document> docs = new TikaDocumentReader(resource).get();
docs = tokenTextSplitter.apply(docs);
vectorStore.add(docs); // 内部自动调用 EmbeddingModel.embed()
// Retrieval:Advisor 自动检索 + 注入 Prompt
chatClient.prompt()
.advisors(new QuestionAnswerAdvisor(vectorStore,
SearchRequest.builder()
.query(userMessage)
.topK(5)
.similarityThreshold(0.5)
.build()))
.user(userMessage)
.call()
.content();</pre>
<div class="alert success">✅ 详细讲解(名词表、咔咔快客服案例、17 知识点+代码、面试题)见 → <strong>侧边栏「企业级 RAG · 咔咔快」</strong></div>
</div>
</div>
<!-- ==================== END RAG ==================== -->
<!-- ==================== Tool Calling ==================== -->
<div id="page-tools" class="page">
<div class="section-title">🔧 Tool Calling / Function Calling</div>
<div class="section-desc">第一性原理:让 LLM 具备执行能力,不只是说,还能做</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>LLM 只能生成文字,无法查数据库、调 API、发邮件。Tool Calling 解决「LLM 的执行能力」问题——让模型决定「该调用哪个工具、传什么参数」,由代码层执行并把结果返回给模型,形成完整的推理-执行闭环。</p>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🔄</span><div class="card-title">执行流程</div></div>
<div class="flow">
<div class="flow-step">用户提问</div>
<div class="flow-arrow">→</div>
<div class="flow-step">LLM 判断<br/>需要调用工具</div>
<div class="flow-arrow">→</div>
<div class="flow-step">输出工具调用<br/>指令(JSON)</div>
<div class="flow-arrow">→</div>
<div class="flow-step">代码层<br/>执行工具</div>
<div class="flow-arrow">→</div>
<div class="flow-step">结果回传<br/>LLM</div>
<div class="flow-arrow">→</div>
<div class="flow-step">最终回答</div>
</div>
<div class="alert info">💡 模型不执行工具,只"决策"调用什么。执行权在你的代码层,这是安全边界的关键!</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">☕</span><div class="card-title">Spring AI Tool Calling 实现</div></div>
<pre>// 定义工具(Spring AI 用 @Tool 注解)
@Component
public class OrderTools {
@Tool(description = "查询用户的套餐信息,需要用户手机号")
public PackageInfo queryPackage(String phone) {
// 调用真实业务接口
return orderService.getPackageByPhone(phone);
}
@Tool(description = "查询流量使用情况")
public TrafficInfo queryTraffic(String phone) {
return trafficService.getUsage(phone);
}
}
// 在 ChatClient 中注册工具
@Service
public class SmartAssistant {
public String chat(String userMessage) {
return chatClient.prompt()
.user(userMessage)
.tools(new OrderTools()) // 注册工具
.call()
.content();
}
}</pre>
<div class="alert tip">💡 工具描述(description)质量直接决定 LLM 调用准确率,要写清楚「什么时候用」「需要什么参数」</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">⚠️</span><div class="card-title">注意事项</div></div>
<ul>
<li><strong>参数校验:</strong>LLM 可能传错类型或缺参,工具层必须做防御性校验</li>
<li><strong>权限控制:</strong>工具不应该暴露危险操作(删除/转账),必须有权限检查</li>
<li><strong>幂等性:</strong>LLM 可能重复调用同一工具,写操作工具必须幂等</li>
<li><strong>超时处理:</strong>工具调用要有超时,避免 Agent 卡死等待</li>
<li><strong>错误返回:</strong>工具失败要返回明确错误信息,而不是抛异常</li>
</ul>
</div>
</div>
<!-- ==================== END Tool Calling ==================== -->
<!-- ==================== 记忆系统 ==================== -->
<div id="page-memory" class="page">
<div class="section-title">🧠 AI 记忆系统</div>
<div class="section-desc">第一性原理:让 AI 记住过去,才能有连贯的智能</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>LLM 无状态,每次对话都从零开始。记忆系统解决「跨对话持续性」问题——让 Agent 记住用户偏好、历史行为、重要信息,像真正的助手而不是每次失忆的机器。</p>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🗂️</span><div class="card-title">四种记忆类型</div></div>
<div class="principle-grid" style="grid-template-columns:repeat(2,1fr)">
<div class="principle-box">
<div class="label">短期记忆(Sensory/Buffer)</div>
<div class="value">当前对话的上下文窗口内。滑动窗口保留最近 N 轮,超出就丢。实现:ChatMemory</div>
</div>
<div class="principle-box p2">
<div class="label">长期记忆(Long-term)</div>
<div class="value">持久化到外部存储(Redis/DB/向量库)。对话结束后提取关键信息写入,下次检索注入。</div>
</div>
<div class="principle-box p3">
<div class="label">情节记忆(Episodic)</div>
<div class="value">存储具体事件序列("用户上次充值了100元")。时间线索检索,还原事件上下文。</div>
</div>
<div class="principle-box p4">
<div class="label">语义记忆(Semantic)</div>
<div class="value">存储抽象知识和用户画像("该用户偏好流量套餐")。向量相似度检索。</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">☕</span><div class="card-title">Spring AI 记忆实现</div></div>
<pre>// 短期记忆:保留最近10条消息
@Bean
public ChatMemory chatMemory() {
return new InMemoryChatMemory(); // 或 RedisChatMemory
}
// 带记忆的对话(MessageChatMemoryAdvisor 自动管理)
public String chatWithMemory(String conversationId, String userMsg) {
return chatClient.prompt()
.advisors(new MessageChatMemoryAdvisor(
chatMemory, conversationId, 10)) // 10轮窗口
.user(userMsg)
.call()
.content();
}
// 长期记忆:对话结束后提取并存储
public void saveImportantInfo(String userId, String conversation) {
// 让 LLM 从对话中提取关键信息
String extracted = chatClient.prompt()
.system("从以下对话提取用户关键信息,以JSON格式返回")
.user(conversation)
.call().content();
// 存入向量数据库
vectorStore.add(new Document(extracted,
Map.of("userId", userId)));
}</pre>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">💡</span><div class="card-title">记忆设计关键决策</div></div>
<table class="compare-table">
<tr><th>决策点</th><th>选项</th><th>推荐</th></tr>
<tr><td>记忆写入时机</td><td>对话结束 vs 实时</td><td>对话结束后批量提取,降低延迟</td></tr>
<tr><td>记忆检索策略</td><td>时间顺序 vs 相关性</td><td>向量相似度检索 + 时间权重</td></tr>
<tr><td>记忆更新方式</td><td>覆盖 vs 追加</td><td>追加 + 定期整合摘要</td></tr>
<tr><td>记忆存储介质</td><td>内存 vs Redis vs 向量库</td><td>短期用Redis,长期用向量库</td></tr>
</table>
</div>
</div>
<!-- ==================== END Memory ==================== -->
<!-- ==================== Spring AI ==================== -->
<div id="page-springai" class="page">
<div class="section-title">☕ Spring AI</div>
<div class="section-desc">Java 生态官方 AI 框架 — 你最熟悉的方式接入 LLM</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>Java 开发者要用 LLM,需要处理 HTTP 调用、流式响应、Embedding、向量存储等复杂底层。Spring AI 提供统一抽象层,让你像写 <code>@Autowired</code> 一样使用 AI,屏蔽不同模型提供商的差异。</p>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🏗️</span><div class="card-title">核心架构(四大抽象)</div></div>
<div class="principle-grid">
<div class="principle-box"><div class="label">ChatModel</div><div class="value">对话生成,支持流式(Flux)和阻塞两种方式</div></div>
<div class="principle-box p2"><div class="label">EmbeddingModel</div><div class="value">文本向量化,RAG 建库时使用</div></div>
<div class="principle-box p3"><div class="label">VectorStore</div><div class="value">向量数据库抽象,支持 Pinecone/Chroma/PGVector 等</div></div>
<div class="principle-box p4"><div class="label">ChatClient</div><div class="value">高级 API,流式 Builder 模式,内置 Advisor 拦截</div></div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🚀</span><div class="card-title">快速开始</div></div>
<pre><!-- pom.xml -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency></pre>
<pre># application.yml
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o
temperature: 0.7</pre>
<pre>// 最简单的用法
@RestController
public class ChatController {
@Autowired ChatClient chatClient;
@PostMapping("/chat")
public String chat(@RequestBody String message) {
return chatClient.prompt()
.user(message)
.call()
.content();
}
// 流式响应
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> stream(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.stream()
.content();
}
}</pre>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🔌</span><div class="card-title">Advisor 拦截器(核心特性)</div></div>
<p>类似 Spring AOP,在请求前后做增强:</p>
<pre>chatClient.prompt()
.advisors(
new QuestionAnswerAdvisor(vectorStore), // RAG自动检索注入
new MessageChatMemoryAdvisor(memory), // 自动管理对话历史
new SimpleLoggerAdvisor() // 打印请求/响应日志
)
.user(question)
.call().content();</pre>
</div>
</div>
<!-- ==================== END Spring AI ==================== -->
<!-- ==================== Spring AI Alibaba ==================== -->
<div id="page-springai-alibaba" class="page">
<div class="section-title">☁️ Spring AI Alibaba</div>
<div class="section-desc">阿里云 + 通义千问的 Java AI 首选方案</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>Spring AI 官方对阿里云支持有限,Spring AI Alibaba 是阿里开源的扩展,深度集成通义千问、DashScope、Nacos、DashVector,适合在阿里云体系内构建 AI 应用,无需自建基础设施。</p>
<div class="tags">
<span class="tag hot">国内首选</span>
<span class="tag java">Java</span>
<span class="tag new">2024开源</span>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🆚</span><div class="card-title">vs 原生 Spring AI 对比</div></div>
<table class="compare-table">
<tr><th>维度</th><th>Spring AI</th><th>Spring AI Alibaba</th></tr>
<tr><td>模型支持</td><td>OpenAI/Azure/Ollama等</td><td>通义系列(Qwen) + DashScope</td></tr>
<tr><td>向量数据库</td><td>Pinecone/Chroma/PGVector</td><td>DashVector(阿里云)</td></tr>
<tr><td>配置中心</td><td>无</td><td>Nacos 动态配置</td></tr>
<tr><td>函数计算</td><td>基础 Tool Calling</td><td>集成阿里云函数计算</td></tr>
<tr><td>适用场景</td><td>多云/海外</td><td>国内/阿里云体系</td></tr>
</table>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🚀</span><div class="card-title">快速接入</div></div>
<pre><!-- pom.xml -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0</version>
</dependency></pre>
<pre># application.yml
spring:
ai:
dashscope:
api-key: ${DASHSCOPE_API_KEY}
chat:
options:
model: qwen-max # qwen-plus / qwen-turbo
temperature: 0.7</pre>
<pre>// 用法与 Spring AI 完全一致
@Autowired ChatClient chatClient;
public String chat(String msg) {
return chatClient.prompt().user(msg).call().content();
}</pre>
<div class="alert success">✅ API 完全兼容 Spring AI,切换只需改依赖和配置,业务代码零修改!</div>
</div>
</div>
<!-- ==================== END Spring AI Alibaba ==================== -->
<!-- ==================== LangChain4j ==================== -->
<div id="page-langchain4j" class="page">
<div class="section-title">⛓️ LangChain4j</div>
<div class="section-desc">Java 版 LangChain — 比 Spring AI 更灵活,更接近 Python 生态</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>Python 的 LangChain 生态很成熟,但 Java 开发者用不了。LangChain4j 移植了 LangChain 的核心设计理念到 Java,提供更灵活的链式组合和更完善的 Agent 支持(60+模型提供商)。</p>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🏗️</span><div class="card-title">核心特性:AiServices(声明式接口)</div></div>
<p>LangChain4j 最强特性:像写接口一样定义 AI 能力,底层自动实现。</p>
<pre>// 1. 声明 AI 服务接口(纯注解)
interface CustomerServiceAssistant {
@SystemMessage("你是咔咔快的客服助手,只回答WiFi相关问题")
String chat(@MemoryId String userId, @UserMessage String question);
@SystemMessage("分析用户意图,返回JSON")
@UserMessage("用户说:{{message}}")
IntentResult analyzeIntent(@V("message") String message);
}
// 2. Spring 自动注入,AiServices 创建实现
@Bean
public CustomerServiceAssistant assistant(ChatLanguageModel model,
ChatMemoryStore memoryStore) {
return AiServices.builder(CustomerServiceAssistant.class)
.chatLanguageModel(model)
.chatMemoryProviderByUserId(userId ->
MessageWindowChatMemory.withMaxMessages(10))
.tools(new OrderQueryTools())
.build();
}
// 3. 直接调用,就像普通 Service
@Autowired CustomerServiceAssistant assistant;
String reply = assistant.chat("user123", "我的套餐到期了吗");</pre>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🆚</span><div class="card-title">Spring AI vs LangChain4j 选哪个?</div></div>
<table class="compare-table">
<tr><th>场景</th><th>推荐</th><th>原因</th></tr>
<tr><td>Spring Boot 项目,国内阿里云</td><td>Spring AI Alibaba</td><td>生态一致,零学习成本</td></tr>
<tr><td>需要复杂 Agent 链</td><td>LangChain4j</td><td>AiServices + 链式组合更灵活</td></tr>
<tr><td>多模型切换</td><td>LangChain4j</td><td>60+ 提供商,切换代价小</td></tr>
<tr><td>企业级微服务</td><td>Spring AI</td><td>与 Spring Cloud 整合更自然</td></tr>
</table>
<div class="alert tip">💡 面试回答:优先用 Spring AI Alibaba(Spring 生态一致),复杂 Agent 场景可以引入 LangChain4j。</div>
</div>
</div>
<!-- ==================== END LangChain4j ==================== -->
<!-- ==================== Agent 介绍 ==================== -->
<div id="page-agent-intro" class="page">
<div class="section-title">🤖 Agent 是什么?</div>
<div class="section-desc">第一性原理:Agent = LLM + 工具 + 记忆 + 自主决策循环</div>
<div class="card">
<div class="card-header"><span class="card-icon">❓</span><div class="card-title">解决什么问题?</div></div>
<p>普通 LLM 是「问答机器」——给它一个问题,它给一个答案,仅此而已。Agent 解决「自主完成复杂任务」的问题——它能<strong>自己决定下一步做什么、调用什么工具、什么时候停止</strong>,像真正的工作者而不只是回答者。</p>
<div class="highlight-box">
<p><strong>类比:</strong>LLM 是一个博学的顾问(只能说),Agent 是一个能执行任务的助理(能说 + 能做)。</p>
<p><strong>对比你的经验:</strong>支付系统中的「状态机 + 补偿机制」和 Agent 的「Loop + 工具调用」思路高度一致!</p>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-icon">🏗️</span><div class="card-title">Agent 四要素</div></div>
<div class="principle-grid">
<div class="principle-box">
<div class="label">大脑 · LLM</div>
<div class="value">负责推理、规划、决策。"下一步该做什么?"</div>
</div>
<div class="principle-box p2">
<div class="label">手脚 · Tools</div>
<div class="value">执行能力:搜索、查数据库、调API、写文件</div>
</div>
<div class="principle-box p3">
<div class="label">记忆 · Memory</div>
<div class="value">短期对话历史 + 长期用户画像 + 知识库</div>
</div>
<div class="principle-box p4">
<div class="label">循环 · Loop</div>