heyingyue commited on
Commit
5de1d21
ยท
verified ยท
1 Parent(s): 9195a5e

Add docs/DATAFLOW.md

Browse files
Files changed (1) hide show
  1. docs/DATAFLOW.md +251 -0
docs/DATAFLOW.md ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ScholarMind ๆ•ฐๆฎๆต่ฏฆ็ป†่ฎพ่ฎก
2
+
3
+ ## 1. ็ซฏๅˆฐ็ซฏๆ•ฐๆฎๆต
4
+
5
+ ```
6
+ ScholarMind ๆ•ฐๆฎๆตๅ…จๆ™ฏๅ›พ
7
+
8
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
9
+ โ”‚ Phase 1: ๆ•ฐๆฎๆ‘„ๅ…ฅ (Ingestion) โ”‚
10
+ โ”‚ โ”‚
11
+ โ”‚ PDFๆ–‡ไปถ โ”€โ”€โ–ถ MinIOๅญ˜ๅ‚จ โ”€โ”€โ–ถ Redis้˜Ÿๅˆ— โ”€โ”€โ–ถ PDF่ทฏ็”ฑๅ™จ โ”‚
12
+ โ”‚ โ”‚ โ”‚
13
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
14
+ โ”‚ โ–ผ โ–ผ โ–ผ โ”‚
15
+ โ”‚ PyMuPDF MinerU Pipeline MinerU 2.5 VLM โ”‚
16
+ โ”‚ (ๆ•ฐๅญ—PDF) (ๆ•ฐๅญ—+ๅ›พ่กจ) (ๆ‰ซๆไปถ/ๅคๆ‚) โ”‚
17
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
18
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
19
+ โ”‚ โ–ผ โ”‚
20
+ โ”‚ ParsedPaper JSON โ”‚
21
+ โ”‚ (็ป“ๆž„ๅŒ–ๅ†…ๅฎนๅ—) โ”‚
22
+ โ”‚ โ”‚ โ”‚
23
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
24
+ โ”‚ โ–ผ โ–ผ โ–ผ โ”‚
25
+ โ”‚ PostgreSQL MinIO(ๅŽŸๅง‹) Redis(็Šถๆ€) โ”‚
26
+ โ”‚ (ๅ…ƒๆ•ฐๆฎ) (PDF+JSON) (่ฟ›ๅบฆ) โ”‚
27
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
28
+ โ”‚
29
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
30
+ โ”‚ Phase 2: ็Ÿฅ่ฏ†ๆŠฝๅ– (Extraction) โ”‚
31
+ โ”‚ โ”‚
32
+ โ”‚ ParsedPaper โ”€โ”€โ–ถ ๅญฆๆœฏๅˆ†ๅ—ๅ™จ(256 tokens) โ”‚
33
+ โ”‚ โ”‚ โ”‚
34
+ โ”‚ โ”œโ”€โ”€โ–ถ GLiNER NER (ๅฎžไฝ“ๆŠฝๅ–, ๆœฌๅœฐGPU) โ”‚
35
+ โ”‚ โ”‚ โ”‚ โ”‚
36
+ โ”‚ โ”‚ โ–ผ โ”‚
37
+ โ”‚ โ”‚ ๅฎžไฝ“ๅˆ—่กจ: [(text, type, score), ...] โ”‚
38
+ โ”‚ โ”‚ โ”‚ โ”‚
39
+ โ”‚ โ”‚ โ–ผ โ”‚
40
+ โ”‚ โ”œโ”€โ”€โ–ถ LLMGraphTransformer (ๅ…ณ็ณปๆŠฝๅ–) โ”‚
41
+ โ”‚ โ”‚ โ”‚ ่พ“ๅ…ฅ: ๆ–‡ๆœฌๅ— + ๅฎžไฝ“ๆ็คบ โ”‚
42
+ โ”‚ โ”‚ โ”‚ LLM: local(Qwen2.5-14B) ๆˆ– API(GPT-4o-mini) โ”‚
43
+ โ”‚ โ”‚ โ–ผ โ”‚
44
+ โ”‚ โ”‚ ไธ‰ๅ…ƒ็ป„ๅˆ—่กจ: [(head, rel, tail, props), ...] โ”‚
45
+ โ”‚ โ”‚ โ”‚ โ”‚
46
+ โ”‚ โ”‚ โ–ผ โ”‚
47
+ โ”‚ โ””โ”€โ”€โ–ถ Graphusion ่žๅˆๅผ•ๆ“Ž โ”‚
48
+ โ”‚ โ”‚ - ๅตŒๅ…ฅ็›ธไผผๅบฆๅฎžไฝ“ๅˆๅนถ (>0.92) โ”‚
49
+ โ”‚ โ”‚ - LLMๅ†ฒ็ชๆถˆ่งฃ โ”‚
50
+ โ”‚ โ”‚ - ็ผบๅคฑๅ…ณ็ณปๆŽจๆ–ญ โ”‚
51
+ โ”‚ โ–ผ โ”‚
52
+ โ”‚ ่ง„่ŒƒๅŒ–ไธ‰ๅ…ƒ็ป„ โ”‚
53
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€๏ฟฝ๏ฟฝ๏ฟฝโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
54
+ โ”‚
55
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
56
+ โ”‚ Phase 3: ็ดขๅผ•ๆž„ๅปบ (Indexing) โ”‚
57
+ โ”‚ โ”‚
58
+ โ”‚ ๅนถ่กŒไธ‰่ทฏ็ดขๅผ•ๆž„ๅปบ: โ”‚
59
+ โ”‚ โ”‚
60
+ โ”‚ ่ทฏๅพ„A: ๅ‘้‡็ดขๅผ• โ”‚
61
+ โ”‚ ๆ–‡ๆœฌๅ— โ”€โ”€โ–ถ Embedding Model โ”€โ”€โ–ถ Dense Vector โ”€โ”€โ” โ”‚
62
+ โ”‚ ๆ–‡ๆœฌๅ— โ”€โ”€โ–ถ BM42/SPLADE โ”€โ”€โ–ถ Sparse Vector โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ–ถ Qdrant Collection โ”‚
63
+ โ”‚ ๅ…ƒๆ•ฐๆฎ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ (papers, 1M+ vectors) โ”‚
64
+ โ”‚ โ”‚
65
+ โ”‚ ่ทฏๅพ„B: ็Ÿฅ่ฏ†ๅ›พ่ฐฑ โ”‚
66
+ โ”‚ ่ง„่ŒƒๅŒ–ไธ‰ๅ…ƒ็ป„ โ”€โ”€โ–ถ Neo4j Batch Import โ”€โ”€โ–ถ Neo4j Graph โ”‚
67
+ โ”‚ ๅฎžไฝ“ๅตŒๅ…ฅ โ”€โ”€โ–ถ Neo4j Vector Index โ”€โ”€โ–ถ ๅ›พๅ†…ๅ‘้‡ๆœ็ดข โ”‚
68
+ โ”‚ ๅ…จๆ–‡็ดขๅผ• โ”€โ”€โ–ถ Neo4j Fulltext Index โ”€โ”€โ–ถ ๅ›พๅ†…ๆ–‡ๆœฌๆœ็ดข โ”‚
69
+ โ”‚ โ”‚
70
+ โ”‚ ่ทฏๅพ„C: RAPTORๅฑ‚ๆฌกๆ ‘ โ”‚
71
+ โ”‚ ๆ–‡ๆœฌๅ— โ”€โ”€โ–ถ SBERTๅตŒๅ…ฅ โ”€โ”€โ–ถ GMM่š็ฑป โ”€โ”€โ–ถ LLMๆ‘˜่ฆ โ”€โ”€โ–ถ ้‡ๆ–ฐๅตŒๅ…ฅ โ”€โ”€โ–ถ ้€’ๅฝ’ โ”‚
72
+ โ”‚ Level 0 (ๅŽŸๅง‹) โ†’ Level 1 (ๆฎต่ฝ) โ†’ Level 2 (ไธป้ข˜) โ†’ Level 3 (้ข†ๅŸŸ) โ”‚
73
+ โ”‚ ๆ‰€ๆœ‰ๅฑ‚็บง่Š‚็‚น โ”€โ”€โ–ถ Qdrant Collection (raptor_tree) โ”‚
74
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
75
+ โ”‚
76
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
77
+ โ”‚ Phase 4: ๆฃ€็ดขไธŽ้—ฎ็ญ” (Query) โ”‚
78
+ โ”‚ โ”‚
79
+ โ”‚ ็”จๆˆทๆŸฅ่ฏข โ”‚
80
+ โ”‚ โ”‚ โ”‚
81
+ โ”‚ โ”œโ”€โ”€โ–ถ ๆ„ๅ›พๅˆ†็ฑป (Router LLM) โ”‚
82
+ โ”‚ โ”‚ โ”‚ โ”‚
83
+ โ”‚ โ”‚ โ”œโ”€โ”€ factual โ†’ ๅ‘้‡+BM25ๆฃ€็ดข (Qdrant) โ”‚
84
+ โ”‚ โ”‚ โ”œโ”€โ”€ reasoning โ†’ ๅ›พ่ฐฑ้ๅކ (Neo4j) + ๅ‘้‡ๆฃ€็ดข โ”‚
85
+ โ”‚ โ”‚ โ””โ”€โ”€ global โ†’ RAPTOR้ซ˜ๅฑ‚ๆ‘˜่ฆ + ็คพๅŒบๆฃ€็ดข โ”‚
86
+ โ”‚ โ”‚ โ”‚
87
+ โ”‚ โ”œโ”€โ”€โ–ถ HyDEๆŸฅ่ฏขๅขžๅผบ โ”‚
88
+ โ”‚ โ”‚ LLM็”Ÿๆˆๅ‡่ฎพ็ญ”ๆกˆ โ†’ ๅตŒๅ…ฅ โ†’ ๅœจๆ–‡ๆกฃ็ฉบ้—ดๆœ็ดข โ”‚
89
+ โ”‚ โ”‚ โ”‚
90
+ โ”‚ โ””โ”€โ”€โ–ถ ๅคš่ทฏ็ป“ๆžœ โ”€โ”€โ–ถ RRF่žๅˆ โ”€โ”€โ–ถ bge-reranker-large้‡ๆŽ’ โ”€โ”€โ–ถ Top-5 โ”‚
91
+ โ”‚ โ”‚
92
+ โ”‚ Top-5 + ๆŸฅ่ฏข โ”€โ”€โ–ถ Generator LLM โ”€โ”€โ–ถ ็ญ”ๆกˆ + ๅผ•็”จ โ”‚
93
+ โ”‚ โ”‚ โ”‚
94
+ โ”‚ โ–ผ โ”‚
95
+ โ”‚ ็ญ”ๆกˆ โ”€โ”€โ–ถ Validator LLM (่‡ชๆฃ€) โ”€โ”€โ”ฌโ”€โ”€ ็ฝฎไฟกๅบฆ>0.8 โ†’ ่ฟ”ๅ›ž โ”‚
96
+ โ”‚ โ””โ”€โ”€ ็ฝฎไฟกๅบฆ<0.8 โ†’ ่กฅๅ……ๆฃ€็ดข (max 3่ฝฎ) โ”‚
97
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
98
+ ```
99
+
100
+ ## 2. ็Ÿฅ่ฏ†ๅ›พ่ฐฑๆŸฅ่ฏขๆต็คบไพ‹
101
+
102
+ ### ็คบไพ‹1: "BERTๆจกๅž‹ๅœจๅ“ชไบ›ๆ•ฐๆฎ้›†ไธŠ่ถ…่ฟ‡ไบ†GPT-2?"
103
+
104
+ ```
105
+ ๆŸฅ่ฏข โ†’ ๆ„ๅ›พๅˆ†็ฑป: reasoning
106
+ โ†’ ๅ›พ่ฐฑๆŸฅ่ฏข:
107
+
108
+ MATCH (bert:Method {name: "BERT"})-[r1:EVALUATED_ON]->(d:Dataset)
109
+ <-[r2:EVALUATED_ON]-(gpt2:Method {name: "GPT-2"})
110
+ WHERE r1.score > r2.score AND r1.metric = r2.metric
111
+ RETURN d.name as dataset,
112
+ r1.metric as metric,
113
+ r1.score as bert_score,
114
+ r2.score as gpt2_score
115
+ ORDER BY (r1.score - r2.score) DESC
116
+
117
+ โ†’ ็ป“ๆžœ:
118
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
119
+ โ”‚ dataset โ”‚ metric โ”‚ bert_score โ”‚ gpt2_score โ”‚
120
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
121
+ โ”‚ GLUE โ”‚ accuracy โ”‚ 82.1 โ”‚ 75.4 โ”‚
122
+ โ”‚ SQuAD โ”‚ F1 โ”‚ 93.2 โ”‚ 89.1 โ”‚
123
+ โ”‚ ... โ”‚ ... โ”‚ ... โ”‚ ... โ”‚
124
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
125
+
126
+ + ๅ‘้‡ๆฃ€็ดข่กฅๅ……: ็›ธๅ…ณ่ฎบๆ–‡ๆฎต่ฝไฝœไธบsupporting evidence
127
+ โ†’ LLM็ปผๅˆ็”Ÿๆˆ็ญ”ๆกˆ
128
+ ```
129
+
130
+ ### ็คบไพ‹2: "Transformerๆžถๆž„่ฟ‘3ๅนด็š„ไธป่ฆๆ”น่ฟ›ๆ–นๅ‘ๆœ‰ๅ“ชไบ›?"
131
+
132
+ ```
133
+ ๆŸฅ่ฏข โ†’ ๆ„ๅ›พๅˆ†็ฑป: global
134
+ โ†’ RAPTOR Level 2-3 ๆฃ€็ดข:
135
+ "Transformerๆ”น่ฟ›" ็›ธๅ…ณ็š„้ซ˜ๅฑ‚ๆ‘˜่ฆ่Š‚็‚น
136
+ โ†’ ๅ›พ่ฐฑๆŸฅ่ฏข:
137
+
138
+ MATCH (t:Concept {name: "Transformer"})<-[:IMPROVES_ON]-(m:Method)
139
+ WHERE m.year >= 2022
140
+ RETURN m.name, m.description, m.year
141
+ ORDER BY m.year DESC
142
+
143
+ โ†’ LLM็ปผๅˆ: ไปŽๆ‘˜่ฆ+ๅ›พ่ฐฑ็ป“ๆž„็”Ÿๆˆ่ถ‹ๅŠฟๅˆ†ๆž
144
+ ```
145
+
146
+ ## 3. ๅนถๅ‘ๅค„็†ๆจกๅž‹
147
+
148
+ ```
149
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
150
+ โ”‚ ๅนถๅ‘ๅค„็†ๆžถๆž„ โ”‚
151
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
152
+ โ”‚ โ”‚
153
+ โ”‚ FastAPI (asyncio) โ”€โ”€โ”€โ”€โ”€โ”€ ๆŸฅ่ฏข่ฏทๆฑ‚ๅค„็† โ”‚
154
+ โ”‚ โ”‚ ๅนถๅ‘: 100+ concurrent requests โ”‚
155
+ โ”‚ โ”‚ โ”‚
156
+ โ”‚ Celery Workers โ”€โ”€โ”€โ”€โ”€โ”€โ”€ PDF่งฃๆžไปปๅŠก โ”‚
157
+ โ”‚ โ”‚ GPU Worker: 1 per GPU โ”‚
158
+ โ”‚ โ”‚ CPU Worker: 4-8 per node โ”‚
159
+ โ”‚ โ”‚ โ”‚
160
+ โ”‚ vLLM Server โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ LLMๆŽจ็† โ”‚
161
+ โ”‚ โ”‚ Async batching (่‡ชๅŠจ) โ”‚
162
+ โ”‚ โ”‚ max_num_seqs: 32 โ”‚
163
+ โ”‚ โ”‚ โ”‚
164
+ โ”‚ Qdrant โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๅ‘้‡ๆฃ€็ดข โ”‚
165
+ โ”‚ โ”‚ RPS: 3000+ (p99 < 10ms) โ”‚
166
+ โ”‚ โ”‚ โ”‚
167
+ โ”‚ Neo4j โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๅ›พ่ฐฑๆŸฅ่ฏข โ”‚
168
+ โ”‚ โ”‚ Connection pool: 50 โ”‚
169
+ โ”‚ โ”‚ Query timeout: 5s โ”‚
170
+ โ”‚ โ”‚ โ”‚
171
+ โ”‚ Redis โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ็ผ“ๅญ˜ + ้˜Ÿๅˆ— โ”‚
172
+ โ”‚ LLMๅ“ๅบ”็ผ“ๅญ˜ โ”‚
173
+ โ”‚ ไปปๅŠก้˜Ÿๅˆ— โ”‚
174
+ โ”‚ Session็Šถๆ€ โ”‚
175
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
176
+
177
+ ๅ…ณ้”ฎ่ฎพ่ฎกๅ†ณ็ญ–:
178
+ 1. MinerU VLM Worker: ๆฏGPUไธ€ไธช่ฟ›็จ‹ (vLLMๅ†…้ƒจๅทฒๅšbatch)
179
+ 2. GLiNER: GPU batch inference, ๅ…ฑไบซๅ•ไธชGPU
180
+ 3. LLM่ฐƒ็”จ: ๅผ‚ๆญฅ (litellm.acompletion), ่‡ชๅŠจbatch
181
+ 4. ๅ›พ่ฐฑๅ†™ๅ…ฅ: ๆ‰น้‡UNWINDๅฏผๅ…ฅ (1000 triplets/batch)
182
+ 5. ๅ‘้‡ๅ†™ๅ…ฅ: Qdrant batch upload (100 points/batch)
183
+ ```
184
+
185
+ ## 4. ็ผ“ๅญ˜็ญ–็•ฅ
186
+
187
+ ```
188
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
189
+ โ”‚ ๅคš็บง็ผ“ๅญ˜็ญ–็•ฅ โ”‚
190
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€๏ฟฝ๏ฟฝโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
191
+ โ”‚ โ”‚
192
+ โ”‚ L1: LLMๅ“ๅบ”็ผ“ๅญ˜ (Redis, TTL: 24h) โ”‚
193
+ โ”‚ Key: hash(model + messages + temperature) โ”‚
194
+ โ”‚ ๅ‘ฝไธญ็އ้ข„ไผฐ: 30-40% (ๅญฆๆœฏๆŸฅ่ฏข้‡ๅคๅบฆ้ซ˜) โ”‚
195
+ โ”‚ โ”‚
196
+ โ”‚ L2: ๅตŒๅ…ฅ็ผ“ๅญ˜ (Redis, TTL: 7d) โ”‚
197
+ โ”‚ Key: hash(text + model_name) โ”‚
198
+ โ”‚ ้ฟๅ…้‡ๅค่ฎก็ฎ—ๅตŒๅ…ฅๅ‘้‡ โ”‚
199
+ โ”‚ โ”‚
200
+ โ”‚ L3: ๆŸฅ่ฏข็ป“ๆžœ็ผ“ๅญ˜ (Redis, TTL: 1h) โ”‚
201
+ โ”‚ Key: hash(query + mode + top_k) โ”‚
202
+ โ”‚ ๅฎŒๆ•ดๆฃ€็ดข็ป“ๆžœ็ผ“ๅญ˜ โ”‚
203
+ โ”‚ โ”‚
204
+ โ”‚ L4: ๅ›พ่ฐฑๅญๅ›พ็ผ“ๅญ˜ (Application Memory, LRU) โ”‚
205
+ โ”‚ ็ƒญ้—จๅฎžไฝ“็š„2่ทณๅญๅ›พ้ข„ๅŠ ่ฝฝ โ”‚
206
+ โ”‚ ๅฎน้‡: top 1000 entities โ”‚
207
+ โ”‚ โ”‚
208
+ โ”‚ ๅคฑๆ•ˆ็ญ–็•ฅ: โ”‚
209
+ โ”‚ - ๆ–ฐ่ฎบๆ–‡ๅฏผๅ…ฅ โ†’ ๆธ…้™ค็›ธๅ…ณquery็ผ“ๅญ˜ (L3) โ”‚
210
+ โ”‚ - ๅ›พ่ฐฑๆ›ดๆ–ฐ โ†’ ๆธ…้™คๅ›พ่ฐฑ็ผ“ๅญ˜ (L4) โ”‚
211
+ โ”‚ - ๆจกๅž‹ๆ›ดๆข โ†’ ๆธ…้™คLLM+ๅตŒๅ…ฅ็ผ“ๅญ˜ (L1+L2) โ”‚
212
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
213
+ ```
214
+
215
+ ## 5. ้”™่ฏฏๅค„็†ไธŽ็›‘ๆŽง
216
+
217
+ ```
218
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
219
+ โ”‚ ๅฏ่ง‚ๆต‹ๆ€งๆžถๆž„ โ”‚
220
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
221
+ โ”‚ โ”‚
222
+ โ”‚ Metrics (Prometheus + Grafana): โ”‚
223
+ โ”‚ - pdf_parse_duration_seconds (histogram) โ”‚
224
+ โ”‚ - pdf_parse_total{status="success|failed"} (counter) โ”‚
225
+ โ”‚ - query_latency_seconds{mode="factual|reasoning|global"}โ”‚
226
+ โ”‚ - llm_tokens_total{model, task} (counter) โ”‚
227
+ โ”‚ - llm_cost_usd_total{model} (counter) โ”‚
228
+ โ”‚ - qdrant_search_latency_seconds (histogram) โ”‚
229
+ โ”‚ - neo4j_query_latency_seconds (histogram) โ”‚
230
+ โ”‚ - cache_hit_ratio{level="L1|L2|L3|L4"} (gauge) โ”‚
231
+ โ”‚ โ”‚
232
+ โ”‚ Logging (Structured JSON โ†’ ELK/Loki): โ”‚
233
+ โ”‚ - ๆฏๆฌกๆŸฅ่ฏขๅฎŒๆ•ดtrace (queryโ†’retrievalโ†’generation) โ”‚
234
+ โ”‚ - PDF่งฃๆžๅผ‚ๅธธ่ฏฆๆƒ… โ”‚
235
+ โ”‚ - LLM่ฐƒ็”จ่ฏฆๆƒ… (token count, latency, model) โ”‚
236
+ โ”‚ โ”‚
237
+ โ”‚ Alerts: โ”‚
238
+ โ”‚ - PDF่งฃๆžๅคฑ่ดฅ็އ > 5% โ†’ ๆฃ€ๆŸฅPDF่ดจ้‡/MinerU็Šถๆ€ โ”‚
239
+ โ”‚ - ๆŸฅ่ฏขP99ๅปถ่ฟŸ > 10s โ†’ ๆฃ€ๆŸฅLLM/ๅ‘้‡ๅบ“่ดŸ่ฝฝ โ”‚
240
+ โ”‚ - LLMๆˆๆœฌๆ—ฅ่ถ… $X โ†’ ๅˆ‡ๆขๆ›ดๅคšๆต้‡ๅˆฐๆœฌๅœฐๆจกๅž‹ โ”‚
241
+ โ”‚ - Neo4jๅ†…ๅญ˜ > 80% โ†’ ๆ‰ฉๅฎนๆˆ–ๆธ…็†ๆ—งๆ•ฐๆฎ โ”‚
242
+ โ”‚ โ”‚
243
+ โ”‚ Health Checks: โ”‚
244
+ โ”‚ GET /health โ†’ ๆฃ€ๆŸฅๆ‰€ๆœ‰ไพ่ต–ๆœๅŠก็Šถๆ€ โ”‚
245
+ โ”‚ - Redis: PING โ”‚
246
+ โ”‚ - Qdrant: collection info โ”‚
247
+ โ”‚ - Neo4j: RETURN 1 โ”‚
248
+ โ”‚ - LiteLLM: /health โ”‚
249
+ โ”‚ - MinerU Worker: Celery inspect โ”‚
250
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
251
+ ```