@leterhong/multichat 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +32 -0
- package/.agents/plugins/plugins/developer-toolkit/.codex-plugin/plugin.json +24 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/code-review/SKILL.md +9 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/code-review/agents/openai.yaml +3 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/release-notes/SKILL.md +9 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/release-notes/agents/openai.yaml +3 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/security-review/SKILL.md +9 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/security-review/agents/openai.yaml +3 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/test-plan/SKILL.md +9 -0
- package/.agents/plugins/plugins/developer-toolkit/skills/test-plan/agents/openai.yaml +3 -0
- package/.agents/plugins/plugins/writing-toolkit/.codex-plugin/plugin.json +24 -0
- package/.agents/plugins/plugins/writing-toolkit/skills/meeting-notes/SKILL.md +9 -0
- package/.agents/plugins/plugins/writing-toolkit/skills/meeting-notes/agents/openai.yaml +3 -0
- package/.agents/plugins/plugins/writing-toolkit/skills/resume-tune/SKILL.md +9 -0
- package/.agents/plugins/plugins/writing-toolkit/skills/resume-tune/agents/openai.yaml +3 -0
- package/.agents/plugins/plugins/writing-toolkit/skills/weekly-report/SKILL.md +9 -0
- package/.agents/plugins/plugins/writing-toolkit/skills/weekly-report/agents/openai.yaml +3 -0
- package/.agents/skills/.gitkeep +1 -0
- package/.agents/skills/wanghong-handwritten-ppt/SKILL.md +172 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/HTML-PPT-LICENSE +21 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/NEAT-ANNOTATIONS-LICENSE +21 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/animations.css +138 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/base.css +150 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/deepseek-example.css +893 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/neat-annotations.css +152 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/preview-cover.png +0 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/preview-diagram.png +0 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/preview-summary.png +0 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/preview-table.png +0 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/runtime.js +960 -0
- package/.agents/skills/wanghong-handwritten-ppt/assets/template.css +198 -0
- package/.agents/skills/wanghong-handwritten-ppt/evals/evals.json +20 -0
- package/.agents/skills/wanghong-handwritten-ppt/examples/deepseek-v4-flash/index.html +414 -0
- package/.agents/skills/wanghong-handwritten-ppt/examples/deepseek-v4-flash/style.css +897 -0
- package/.agents/skills/wanghong-handwritten-ppt/references/prompts.md +170 -0
- package/.agents/skills/wanghong-handwritten-ppt/references/style-guide.md +133 -0
- package/.agents/skills/wanghong-handwritten-ppt/scripts/check_deck.py +41 -0
- package/.agents/skills/wanghong-handwritten-ppt/scripts/prepare_render_html.py +137 -0
- package/.agents/skills/wanghong-handwritten-ppt/scripts/render.sh +110 -0
- package/.agents/skills/wanghong-handwritten-ppt/templates/deck.html +94 -0
- package/.agents/skills/wanghong-handwritten-ppt/tests/test_font_contract.py +73 -0
- package/LICENSE +21 -0
- package/README.md +186 -0
- package/backend/adapters/README.md +77 -0
- package/backend/adapters/anthropic.ts +115 -0
- package/backend/adapters/base.ts +47 -0
- package/backend/adapters/index.ts +41 -0
- package/backend/adapters/lmstudio.ts +7 -0
- package/backend/adapters/moonshot.ts +7 -0
- package/backend/adapters/ollama.ts +7 -0
- package/backend/adapters/openai-compatible.ts +51 -0
- package/backend/adapters/openai.ts +7 -0
- package/backend/adapters/qwen.ts +112 -0
- package/backend/adapters/wenxin.ts +136 -0
- package/backend/adapters/zhipu.ts +93 -0
- package/backend/dist/adapters/anthropic.js +130 -0
- package/backend/dist/adapters/anthropic.js.map +1 -0
- package/backend/dist/adapters/base.js +38 -0
- package/backend/dist/adapters/base.js.map +1 -0
- package/backend/dist/adapters/index.js +39 -0
- package/backend/dist/adapters/index.js.map +1 -0
- package/backend/dist/adapters/lmstudio.js +8 -0
- package/backend/dist/adapters/lmstudio.js.map +1 -0
- package/backend/dist/adapters/moonshot.js +8 -0
- package/backend/dist/adapters/moonshot.js.map +1 -0
- package/backend/dist/adapters/ollama.js +8 -0
- package/backend/dist/adapters/ollama.js.map +1 -0
- package/backend/dist/adapters/openai-compatible.js +47 -0
- package/backend/dist/adapters/openai-compatible.js.map +1 -0
- package/backend/dist/adapters/openai.js +8 -0
- package/backend/dist/adapters/openai.js.map +1 -0
- package/backend/dist/adapters/qwen.js +103 -0
- package/backend/dist/adapters/qwen.js.map +1 -0
- package/backend/dist/adapters/wenxin.js +114 -0
- package/backend/dist/adapters/wenxin.js.map +1 -0
- package/backend/dist/adapters/zhipu.js +86 -0
- package/backend/dist/adapters/zhipu.js.map +1 -0
- package/backend/dist/extensions/demo-mcp-server.js +75 -0
- package/backend/dist/extensions/demo-mcp-server.js.map +1 -0
- package/backend/dist/extensions/importer.js +828 -0
- package/backend/dist/extensions/importer.js.map +1 -0
- package/backend/dist/extensions/manager.js +1154 -0
- package/backend/dist/extensions/manager.js.map +1 -0
- package/backend/dist/lib/catalog.js +30 -0
- package/backend/dist/lib/catalog.js.map +1 -0
- package/backend/dist/lib/context.js +59 -0
- package/backend/dist/lib/context.js.map +1 -0
- package/backend/dist/lib/errors.js +75 -0
- package/backend/dist/lib/errors.js.map +1 -0
- package/backend/dist/lib/provider-store.js +116 -0
- package/backend/dist/lib/provider-store.js.map +1 -0
- package/backend/dist/lib/redact.js +11 -0
- package/backend/dist/lib/redact.js.map +1 -0
- package/backend/dist/lib/runtime-store.js +28 -0
- package/backend/dist/lib/runtime-store.js.map +1 -0
- package/backend/dist/lib/sqlite-store.js +218 -0
- package/backend/dist/lib/sqlite-store.js.map +1 -0
- package/backend/dist/lib/sse.js +46 -0
- package/backend/dist/lib/sse.js.map +1 -0
- package/backend/dist/lib/ssrf.js +131 -0
- package/backend/dist/lib/ssrf.js.map +1 -0
- package/backend/dist/lib/store.js +84 -0
- package/backend/dist/lib/store.js.map +1 -0
- package/backend/dist/lib/usage.js +219 -0
- package/backend/dist/lib/usage.js.map +1 -0
- package/backend/dist/lib/util.js +38 -0
- package/backend/dist/lib/util.js.map +1 -0
- package/backend/dist/lib/workspace-store.js +152 -0
- package/backend/dist/lib/workspace-store.js.map +1 -0
- package/backend/dist/mcp.js +429 -0
- package/backend/dist/mcp.js.map +1 -0
- package/backend/dist/routes/agents.js +51 -0
- package/backend/dist/routes/agents.js.map +1 -0
- package/backend/dist/routes/assistants.js +32 -0
- package/backend/dist/routes/assistants.js.map +1 -0
- package/backend/dist/routes/chat.js +697 -0
- package/backend/dist/routes/chat.js.map +1 -0
- package/backend/dist/routes/control-plane.js +200 -0
- package/backend/dist/routes/control-plane.js.map +1 -0
- package/backend/dist/routes/conversations.js +66 -0
- package/backend/dist/routes/conversations.js.map +1 -0
- package/backend/dist/routes/extensions-import.js +22 -0
- package/backend/dist/routes/extensions-import.js.map +1 -0
- package/backend/dist/routes/import.js +85 -0
- package/backend/dist/routes/import.js.map +1 -0
- package/backend/dist/routes/mcp-servers.js +56 -0
- package/backend/dist/routes/mcp-servers.js.map +1 -0
- package/backend/dist/routes/meta.js +37 -0
- package/backend/dist/routes/meta.js.map +1 -0
- package/backend/dist/routes/mock.js +28 -0
- package/backend/dist/routes/mock.js.map +1 -0
- package/backend/dist/routes/plugins.js +41 -0
- package/backend/dist/routes/plugins.js.map +1 -0
- package/backend/dist/routes/providers.js +197 -0
- package/backend/dist/routes/providers.js.map +1 -0
- package/backend/dist/routes/runs.js +57 -0
- package/backend/dist/routes/runs.js.map +1 -0
- package/backend/dist/routes/skills.js +73 -0
- package/backend/dist/routes/skills.js.map +1 -0
- package/backend/dist/routes/tools.js +40 -0
- package/backend/dist/routes/tools.js.map +1 -0
- package/backend/dist/routes/usage.js +14 -0
- package/backend/dist/routes/usage.js.map +1 -0
- package/backend/dist/routes/workspaces.js +158 -0
- package/backend/dist/routes/workspaces.js.map +1 -0
- package/backend/dist/runtime/agent.js +518 -0
- package/backend/dist/runtime/agent.js.map +1 -0
- package/backend/dist/server.js +103 -0
- package/backend/dist/server.js.map +1 -0
- package/backend/dist/types.js +3 -0
- package/backend/dist/types.js.map +1 -0
- package/backend/extensions/demo-mcp-server.js +70 -0
- package/backend/extensions/importer.ts +709 -0
- package/backend/extensions/manager.ts +1055 -0
- package/backend/lib/catalog.ts +28 -0
- package/backend/lib/context.ts +61 -0
- package/backend/lib/errors.ts +78 -0
- package/backend/lib/provider-store.ts +116 -0
- package/backend/lib/redact.ts +9 -0
- package/backend/lib/runtime-store.ts +38 -0
- package/backend/lib/sqlite-store.ts +220 -0
- package/backend/lib/sse.ts +42 -0
- package/backend/lib/ssrf.ts +120 -0
- package/backend/lib/store.ts +79 -0
- package/backend/lib/usage.ts +212 -0
- package/backend/lib/util.ts +31 -0
- package/backend/lib/workspace-store.ts +150 -0
- package/backend/mcp.ts +417 -0
- package/backend/package.json +34 -0
- package/backend/prompts.json +82 -0
- package/backend/routes/agents.ts +55 -0
- package/backend/routes/assistants.ts +30 -0
- package/backend/routes/chat.ts +660 -0
- package/backend/routes/control-plane.ts +165 -0
- package/backend/routes/conversations.ts +62 -0
- package/backend/routes/extensions-import.ts +15 -0
- package/backend/routes/import.ts +72 -0
- package/backend/routes/mcp-servers.ts +36 -0
- package/backend/routes/meta.ts +38 -0
- package/backend/routes/mock.ts +25 -0
- package/backend/routes/plugins.ts +27 -0
- package/backend/routes/providers.ts +166 -0
- package/backend/routes/runs.ts +55 -0
- package/backend/routes/skills.ts +52 -0
- package/backend/routes/tools.ts +40 -0
- package/backend/routes/usage.ts +13 -0
- package/backend/routes/workspaces.ts +124 -0
- package/backend/runtime/agent.ts +474 -0
- package/backend/server.ts +106 -0
- package/backend/types.ts +126 -0
- package/bin/multichat.mjs +535 -0
- package/frontend/dist/assets/agentPicker-C39VzmYa.js +13 -0
- package/frontend/dist/assets/compare-BpaGD32J.js +1 -0
- package/frontend/dist/assets/conversations-COuLmg99.js +7 -0
- package/frontend/dist/assets/data-ZH7Dux1K.js +1 -0
- package/frontend/dist/assets/extensionImport-CnTWKtWm.js +28 -0
- package/frontend/dist/assets/importExport-B3mB-9zs.js +70 -0
- package/frontend/dist/assets/index-CASVCOUO.js +34 -0
- package/frontend/dist/assets/index-DSvbjNLc.css +1 -0
- package/frontend/dist/assets/init-ZPK483vB.js +1 -0
- package/frontend/dist/assets/jsx-runtime-ZSsbr0oW.js +9 -0
- package/frontend/dist/assets/modal-CgHocv3n.js +2 -0
- package/frontend/dist/assets/modelPicker-EUmmVnbj.js +14 -0
- package/frontend/dist/assets/pluginsUI-B6jGUQkx.js +16 -0
- package/frontend/dist/assets/render-DgAg1K8A.js +1 -0
- package/frontend/dist/assets/send-BJhZ_5YA.js +14 -0
- package/frontend/dist/assets/settings-DdnYwZl-.js +2 -0
- package/frontend/dist/assets/shell-DFV2khQl.js +1 -0
- package/frontend/dist/assets/workbench-BY2J4vWC.js +41 -0
- package/frontend/dist/icon-maskable.svg +4 -0
- package/frontend/dist/icon.svg +4 -0
- package/frontend/dist/index.html +21 -0
- package/frontend/dist/manifest.webmanifest +26 -0
- package/package.json +58 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--paper: #f7f5ed;
|
|
3
|
+
--ink: #18224d;
|
|
4
|
+
--blue: #2f6cf6;
|
|
5
|
+
--magenta: #ec3f79;
|
|
6
|
+
--green: #56dc38;
|
|
7
|
+
--yellow: #fff04f;
|
|
8
|
+
--coral: #ffaaa4;
|
|
9
|
+
--muted: #6a718f;
|
|
10
|
+
--hand: "HanziPen SC";
|
|
11
|
+
--ann-font: var(--hand);
|
|
12
|
+
--ann-label-max-width: 220px;
|
|
13
|
+
--font-sans: var(--hand);
|
|
14
|
+
--font-display: var(--hand);
|
|
15
|
+
--font-mono: var(--hand);
|
|
16
|
+
--font-serif: var(--hand);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
html,
|
|
20
|
+
body {
|
|
21
|
+
background: #111;
|
|
22
|
+
color: var(--ink);
|
|
23
|
+
font-family: var(--hand);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.deck {
|
|
27
|
+
background: var(--paper);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.progress-bar {
|
|
31
|
+
display: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.slide {
|
|
35
|
+
background:
|
|
36
|
+
radial-gradient(circle at 20% 12%, rgba(255,255,255,.55), transparent 34%),
|
|
37
|
+
var(--paper);
|
|
38
|
+
color: var(--ink);
|
|
39
|
+
padding: 70px 92px 60px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.slide-title {
|
|
43
|
+
margin: 0 0 42px;
|
|
44
|
+
font-size: 42px;
|
|
45
|
+
font-weight: 500;
|
|
46
|
+
line-height: 1.25;
|
|
47
|
+
letter-spacing: .02em;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.slide-title::after {
|
|
51
|
+
content: "";
|
|
52
|
+
display: block;
|
|
53
|
+
width: 100%;
|
|
54
|
+
height: 3px;
|
|
55
|
+
margin-top: 10px;
|
|
56
|
+
background: var(--blue);
|
|
57
|
+
transform: rotate(-.12deg);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.cover {
|
|
61
|
+
padding-top: 175px;
|
|
62
|
+
text-align: center;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.cover h1 {
|
|
66
|
+
display: inline-block;
|
|
67
|
+
margin: 0;
|
|
68
|
+
padding-bottom: 12px;
|
|
69
|
+
border-bottom: 3px solid var(--magenta);
|
|
70
|
+
font-size: 50px;
|
|
71
|
+
font-weight: 500;
|
|
72
|
+
letter-spacing: .02em;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.cover-meta {
|
|
76
|
+
display: grid;
|
|
77
|
+
gap: 22px;
|
|
78
|
+
margin-top: 86px;
|
|
79
|
+
font-size: 24px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.hand-grid {
|
|
83
|
+
display: grid;
|
|
84
|
+
grid-template-columns: .9fr 1.1fr;
|
|
85
|
+
gap: 74px;
|
|
86
|
+
align-items: center;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.notes-list {
|
|
90
|
+
display: grid;
|
|
91
|
+
gap: 22px;
|
|
92
|
+
font-size: 26px;
|
|
93
|
+
line-height: 1.55;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.mark-yellow,
|
|
97
|
+
.mark-green,
|
|
98
|
+
.mark-coral {
|
|
99
|
+
display: inline-block;
|
|
100
|
+
padding: 0 9px 2px;
|
|
101
|
+
border-radius: 46% 55% 42% 50%;
|
|
102
|
+
transform: rotate(-.5deg);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.mark-yellow { background: var(--yellow); }
|
|
106
|
+
.mark-green { background: var(--green); }
|
|
107
|
+
.mark-coral { background: var(--coral); }
|
|
108
|
+
|
|
109
|
+
.result-box {
|
|
110
|
+
border: 3px solid var(--magenta);
|
|
111
|
+
padding: 12px 22px;
|
|
112
|
+
color: var(--magenta);
|
|
113
|
+
font-size: 27px;
|
|
114
|
+
text-align: center;
|
|
115
|
+
transform: rotate(-.1deg);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.flow {
|
|
119
|
+
display: grid;
|
|
120
|
+
grid-template-columns: 1fr auto 1.35fr auto 1fr;
|
|
121
|
+
gap: 26px;
|
|
122
|
+
align-items: center;
|
|
123
|
+
margin: 90px 32px 70px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.flow-box {
|
|
127
|
+
border: 3px solid var(--ink);
|
|
128
|
+
padding: 20px;
|
|
129
|
+
font-size: 30px;
|
|
130
|
+
text-align: center;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.flow-arrow {
|
|
134
|
+
color: var(--blue);
|
|
135
|
+
font-size: 50px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.hand-table {
|
|
139
|
+
width: 100%;
|
|
140
|
+
border-collapse: collapse;
|
|
141
|
+
font-size: 22px;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.hand-table th,
|
|
145
|
+
.hand-table td {
|
|
146
|
+
padding: 16px 12px;
|
|
147
|
+
border-bottom: 2px solid rgba(24,34,77,.35);
|
|
148
|
+
text-align: left;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.hand-table th {
|
|
152
|
+
border-top: 3px solid var(--ink);
|
|
153
|
+
color: var(--blue);
|
|
154
|
+
font-weight: 500;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.formula-summary {
|
|
158
|
+
display: flex;
|
|
159
|
+
justify-content: center;
|
|
160
|
+
align-items: center;
|
|
161
|
+
gap: 20px;
|
|
162
|
+
margin-top: 120px;
|
|
163
|
+
font-size: 44px;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.formula-summary span {
|
|
167
|
+
padding-bottom: 7px;
|
|
168
|
+
border-bottom: 3px solid var(--magenta);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.thanks {
|
|
172
|
+
display: grid;
|
|
173
|
+
place-content: center;
|
|
174
|
+
text-align: center;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.thanks h2 {
|
|
178
|
+
margin: 0 0 48px;
|
|
179
|
+
font-size: 68px;
|
|
180
|
+
font-weight: 500;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.notes {
|
|
184
|
+
display: none;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
svg text {
|
|
188
|
+
font-family: var(--hand);
|
|
189
|
+
fill: var(--ink);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
svg path,
|
|
193
|
+
svg line,
|
|
194
|
+
svg polyline,
|
|
195
|
+
svg rect,
|
|
196
|
+
svg circle {
|
|
197
|
+
vector-effect: non-scaling-stroke;
|
|
198
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "z-wanghong-handwritten-ppt",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": "article-to-full-deck",
|
|
6
|
+
"prompt": "把这篇中文技术文章做成 16:9 王虹手写PPT风格的完整 HTML 幻灯片,并导出全部 PNG。",
|
|
7
|
+
"expected": ["极简封面", "一页一个问题", "完整逻辑链", "浏览器翻页", "逐页PNG", "无溢出"]
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "notability-chinese-annotations",
|
|
11
|
+
"prompt": "做一套 Notability 学术手写幻灯片,用中文 neat-annotations 标出推荐档、风险和结论。",
|
|
12
|
+
"expected": ["中文标注可读", "标注不遮挡", "颜色有明确含义", "关键结论仍在正文"]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "dense-research-talk",
|
|
16
|
+
"prompt": "把论文讲稿整理成 45 分钟数学报告风 HTML PPT,要求工整、干净、信息量大。",
|
|
17
|
+
"expected": ["高信息密度", "逻辑连续", "手绘图表", "每页讲稿备注", "总览检查"]
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>DeepSeek-V4-Flash · 王虹手写风完整演示</title>
|
|
7
|
+
<link rel="icon" href="data:,">
|
|
8
|
+
<link rel="stylesheet" href="../../assets/base.css">
|
|
9
|
+
<link rel="stylesheet" href="../../assets/animations.css">
|
|
10
|
+
<link rel="stylesheet" href="../../assets/neat-annotations.css">
|
|
11
|
+
<link rel="stylesheet" href="style.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div class="deck">
|
|
15
|
+
<section class="slide cover is-active" data-title="封面">
|
|
16
|
+
<div>
|
|
17
|
+
<h1 class="hand-title">DeepSeek-V4-Flash:极限量化与本地部署</h1>
|
|
18
|
+
<div class="title-line"></div>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="cover-meta">
|
|
21
|
+
<div>AI学习的老章</div>
|
|
22
|
+
<div>AI 技术分享</div>
|
|
23
|
+
<div>August 2, 2026</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="notes">今天只讲一件事:DeepSeek-V4-Flash 为什么值得企业重新计算本地部署这笔账。</div>
|
|
26
|
+
</section>
|
|
27
|
+
|
|
28
|
+
<section class="slide" data-title="正式版开源">
|
|
29
|
+
<div class="page-heading">
|
|
30
|
+
<h2 class="hand-title">DeepSeek-V4-Flash 正式版开源</h2>
|
|
31
|
+
<div class="title-line"></div>
|
|
32
|
+
</div>
|
|
33
|
+
<p class="note-line release-sub">模型结构、参数规模保持不变</p>
|
|
34
|
+
<div class="release-flow">
|
|
35
|
+
<div class="sketch-box">Preview</div>
|
|
36
|
+
<div class="flow-arrow">→</div>
|
|
37
|
+
<div class="sketch-box marker-yellow">重新后训练</div>
|
|
38
|
+
<div class="flow-arrow">→</div>
|
|
39
|
+
<div class="sketch-box marker-green">正式版</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="training-notes">
|
|
42
|
+
<span>回答问题</span><span>调用工具</span><span>完成任务</span>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="wide-result">多项基准超过三个月前的 V4-Pro Preview</div>
|
|
45
|
+
<div class="notes">同架构、同参数,通过后训练把回答、工具调用和任务完成能力继续抬高。</div>
|
|
46
|
+
</section>
|
|
47
|
+
|
|
48
|
+
<section class="slide" data-title="斩杀线">
|
|
49
|
+
<div class="page-heading">
|
|
50
|
+
<h2 class="hand-title">理想模型,应该站在左上角</h2>
|
|
51
|
+
<div class="title-line"></div>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="s2-layout">
|
|
54
|
+
<div class="scatter-copy">
|
|
55
|
+
<p class="note-line">横轴:完成一次任务的<span class="marker marker-coral">成本</span></p>
|
|
56
|
+
<p class="note-line">纵轴:模型的<span class="marker marker-green">智能得分</span></p>
|
|
57
|
+
<p class="note-line">越往左越便宜,越往上越聪明</p>
|
|
58
|
+
<div class="equation thin-box">左上角 = 低成本 + 高能力</div>
|
|
59
|
+
</div>
|
|
60
|
+
<div>
|
|
61
|
+
<svg class="diagram" viewBox="0 0 700 590" role="img" aria-label="成本与智能得分坐标图,DeepSeek 位于左上区域">
|
|
62
|
+
<defs>
|
|
63
|
+
<filter id="wobble-s3">
|
|
64
|
+
<feTurbulence type="turbulence" baseFrequency="0.018" numOctaves="2" result="noise"/>
|
|
65
|
+
<feDisplacementMap in="SourceGraphic" in2="noise" scale="1.25"/>
|
|
66
|
+
</filter>
|
|
67
|
+
</defs>
|
|
68
|
+
<path class="scribble" d="M105 485 C103 382 105 220 109 95 M103 485 C255 485 454 483 618 486"/>
|
|
69
|
+
<path class="scribble" d="M99 108 L109 92 L120 111 M604 478 L622 486 L603 496"/>
|
|
70
|
+
<text x="36" y="80" font-size="28">智能得分</text>
|
|
71
|
+
<text x="565" y="530" font-size="28">任务成本</text>
|
|
72
|
+
<circle cx="204" cy="175" r="15" fill="var(--magenta)"/>
|
|
73
|
+
<path class="scribble-magenta scribble" d="M226 174 C278 158 318 154 358 159"/>
|
|
74
|
+
<text x="370" y="166" font-size="30" fill="var(--magenta)">DeepSeek-V4-Flash</text>
|
|
75
|
+
<circle cx="435" cy="280" r="11" fill="var(--blue)"/>
|
|
76
|
+
<text x="456" y="289" font-size="22">模型 A</text>
|
|
77
|
+
<circle cx="518" cy="402" r="11" fill="var(--green)"/>
|
|
78
|
+
<text x="539" y="409" font-size="22">模型 B</text>
|
|
79
|
+
</svg>
|
|
80
|
+
<span class="ann ann-e ann-red ann-no-mark annotation-anchor" data-note="DeepSeek 斩杀线" style="position:absolute;right:720px;top:385px;--ann-arrow-x:2px;--ann-text-x:-2px" aria-label="DeepSeek 位于低成本高能力区域"></span>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
<div class="notes">横轴看成本,纵轴看智能。DeepSeek 的位置把“能力强”和“单次任务便宜”放到了一起。</div>
|
|
84
|
+
</section>
|
|
85
|
+
|
|
86
|
+
<section class="slide" data-title="本地部署门槛">
|
|
87
|
+
<div class="page-heading">
|
|
88
|
+
<h2 class="hand-title">本地部署门槛,终于降下来了</h2>
|
|
89
|
+
<div class="title-line"></div>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="model-stats">
|
|
92
|
+
<div><strong>304B</strong><span>参数规模</span></div>
|
|
93
|
+
<div><strong class="marker marker-green">原生 8-bit</strong><span>官方精度</span></div>
|
|
94
|
+
<div><strong class="marker marker-yellow">167GB</strong><span>模型文件</span></div>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="local-row">
|
|
97
|
+
<p class="note-line">企业最关心:能力、成本、数据</p>
|
|
98
|
+
<div class="local-boundary">
|
|
99
|
+
<span class="boundary-title">本地</span>
|
|
100
|
+
<span>CPU</span><span>↔</span><span class="server-doodle">▤</span><span>↔</span><span>SSD</span>
|
|
101
|
+
<span class="ram-line">↕ 内存(RAM)</span>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
<div class="wide-result compact-result">本地可控</div>
|
|
105
|
+
<div class="notes">304B、原生八位、167GB 文件,让本地部署从昂贵集群下沉到更多企业环境。</div>
|
|
106
|
+
</section>
|
|
107
|
+
|
|
108
|
+
<section class="slide" data-title="企业为什么要本地">
|
|
109
|
+
<div class="page-heading">
|
|
110
|
+
<h2 class="hand-title">企业应用,为什么绕不开本地模型?</h2>
|
|
111
|
+
<div class="title-line"></div>
|
|
112
|
+
</div>
|
|
113
|
+
<div class="why-local">
|
|
114
|
+
<div class="why-line"><span class="marker marker-yellow">数据</span><p>敏感资料留在自己的边界内</p></div>
|
|
115
|
+
<div class="why-line"><span class="marker marker-green">成本</span><p>高频调用可以长期摊薄</p></div>
|
|
116
|
+
<div class="why-line"><span class="marker marker-coral">控制</span><p>版本、能力、审计都掌握在手里</p></div>
|
|
117
|
+
</div>
|
|
118
|
+
<div class="model-weight-compare">
|
|
119
|
+
<div><span>GLM-5.2</span><i class="weight-long"></i><em>参数量太大</em></div>
|
|
120
|
+
<div><span>Kimi-K3</span><i class="weight-long"></i><em>部署成本高</em></div>
|
|
121
|
+
<div><span>V4-Flash</span><i class="weight-short"></i><em>304B / 167GB</em></div>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="wide-result">能力足够强 + 成本可以接受 + 技术路线透明</div>
|
|
124
|
+
<div class="notes">企业关心的数据边界、长期成本和技术控制力,决定了本地模型仍然有不可替代的位置。</div>
|
|
125
|
+
</section>
|
|
126
|
+
|
|
127
|
+
<section class="slide" data-title="vLLM 官方部署">
|
|
128
|
+
<div class="page-heading">
|
|
129
|
+
<h2 class="hand-title">官方部署:先看 vLLM</h2>
|
|
130
|
+
<div class="title-line"></div>
|
|
131
|
+
</div>
|
|
132
|
+
<div class="deploy-split">
|
|
133
|
+
<div class="deploy-notes">
|
|
134
|
+
<p class="note-line">• vLLM 升级到 <span class="marker marker-yellow">v0.25+</span></p>
|
|
135
|
+
<p class="note-line">• NVIDIA 仍然挑架构</p>
|
|
136
|
+
<p class="note-line">• 推荐 <span class="marker marker-green">Hopper / Blackwell</span></p>
|
|
137
|
+
</div>
|
|
138
|
+
<svg class="diagram gpu-diagram" viewBox="0 0 650 460" role="img" aria-label="Hopper 与 Blackwell GPU 架构">
|
|
139
|
+
<rect x="92" y="95" width="175" height="235" rx="8" fill="none" stroke="var(--blue)" stroke-width="3"/>
|
|
140
|
+
<rect x="375" y="95" width="175" height="235" rx="8" fill="none" stroke="var(--magenta)" stroke-width="3"/>
|
|
141
|
+
<text x="128" y="75" font-size="29">Hopper</text>
|
|
142
|
+
<text x="402" y="75" font-size="29">Blackwell</text>
|
|
143
|
+
<g fill="none" stroke="var(--ink)" stroke-width="2.5">
|
|
144
|
+
<path d="M125 145 H235 M125 185 H235 M125 225 H235 M125 265 H235"/>
|
|
145
|
+
<path d="M408 145 H518 M408 185 H518 M408 225 H518 M408 265 H518"/>
|
|
146
|
+
<path d="M110 350 C204 374 285 374 360 352"/>
|
|
147
|
+
</g>
|
|
148
|
+
<text x="210" y="405" font-size="25">旧卡先核对支持情况</text>
|
|
149
|
+
</svg>
|
|
150
|
+
</div>
|
|
151
|
+
<div class="wide-result compact-result">部署前先确认版本与 GPU 架构</div>
|
|
152
|
+
<div class="notes">官方首推 vLLM,但版本和显卡架构都有明确门槛,旧环境不能直接照搬命令。</div>
|
|
153
|
+
</section>
|
|
154
|
+
|
|
155
|
+
<section class="slide" data-title="H200 PD 分离">
|
|
156
|
+
<div class="page-heading">
|
|
157
|
+
<h2 class="hand-title">H200 单机:4 张 prefill + 4 张 decode</h2>
|
|
158
|
+
<div class="title-line"></div>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="pd-layout">
|
|
161
|
+
<div class="gpu-group"><span>Prefill</span><b>GPU</b><b>GPU</b><b>GPU</b><b>GPU</b></div>
|
|
162
|
+
<div class="kv-bridge"><span class="marker marker-yellow">KV cache</span><strong>Mooncake / Nixl</strong><i>⇄</i></div>
|
|
163
|
+
<div class="gpu-group"><span>Decode</span><b>GPU</b><b>GPU</b><b>GPU</b><b>GPU</b></div>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="pd-caption">
|
|
166
|
+
<span>先把提示词算好</span><span>再持续吐出 token</span>
|
|
167
|
+
</div>
|
|
168
|
+
<div class="wide-result">做推理集群:关注 PD 分离和 KV cache 传输</div>
|
|
169
|
+
<div class="notes">官方方案把预填充和解码拆开,八张 H200 分成四加四,中间通过 Mooncake 或 Nixl 传递 KV cache。</div>
|
|
170
|
+
</section>
|
|
171
|
+
|
|
172
|
+
<section class="slide" data-title="Unsloth GGUF">
|
|
173
|
+
<div class="page-heading">
|
|
174
|
+
<h2 class="hand-title">Unsloth:13 个 GGUF 档位来了</h2>
|
|
175
|
+
<div class="title-line"></div>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="levels-list">
|
|
178
|
+
<div><span>1-bit</span><b>IQ1_S</b><b>IQ1_M</b></div>
|
|
179
|
+
<div><span>2-bit</span><b>IQ2_XXS</b><b>IQ2_M</b><b>Q2_K_XL</b></div>
|
|
180
|
+
<div><span>3-bit</span><b>IQ3_XXS</b><b>IQ3_S</b><b>Q3_K_M</b><b>Q3_K_XL</b></div>
|
|
181
|
+
<div><span>4-bit</span><b>IQ4_NL</b><b>IQ4_XS</b><b class="marker marker-green">Q4_K_XL</b></div>
|
|
182
|
+
<div><span>8-bit</span><b class="marker marker-yellow">Q8_K_XL</b></div>
|
|
183
|
+
</div>
|
|
184
|
+
<div class="levels-scale">
|
|
185
|
+
<span>82.5GB</span><i></i><span>161.9GB</span>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="wide-result">档位很多,关键要看“体积—质量”的断点</div>
|
|
188
|
+
<div class="notes">十三个档位从 82.5GB 到 161.9GB。名称很多,真正有用的是找到质量断点。</div>
|
|
189
|
+
</section>
|
|
190
|
+
|
|
191
|
+
<section class="slide" data-title="原生量化">
|
|
192
|
+
<div class="quant-layout">
|
|
193
|
+
<div class="quant-copy">
|
|
194
|
+
<p class="note-line">• DeepSeek-V4-Flash 做了<span class="marker marker-yellow">量化感知训练 QAT</span></p>
|
|
195
|
+
<p class="note-line">• <span class="marker marker-green">96% routed experts</span> 已经是 MXFP4</p>
|
|
196
|
+
<p class="note-line">• 剩余 <span class="marker marker-coral">4%</span> 是 FP8 或 BF16</p>
|
|
197
|
+
<div class="thin-box">GGUF = 逐位重打包</div>
|
|
198
|
+
<div class="conclusion-arrow"><span>⟶</span><strong>专家权重一个 bit 都不动</strong></div>
|
|
199
|
+
</div>
|
|
200
|
+
<div>
|
|
201
|
+
<svg class="diagram" viewBox="0 0 670 500" role="img" aria-label="96% 专家权重与 4% 其他权重比例图">
|
|
202
|
+
<path d="M58 205 L538 205 L538 294 L58 294 Z" fill="none" stroke="var(--blue)" stroke-width="3"/>
|
|
203
|
+
<path d="M538 205 L618 205 L618 294 L538 294 Z" fill="none" stroke="var(--magenta)" stroke-width="3"/>
|
|
204
|
+
<g stroke="var(--green)" stroke-width="3" opacity=".9">
|
|
205
|
+
<path d="M78 285 L123 215"/><path d="M127 285 L172 215"/><path d="M176 285 L221 215"/>
|
|
206
|
+
<path d="M225 285 L270 215"/><path d="M274 285 L319 215"/><path d="M323 285 L368 215"/>
|
|
207
|
+
<path d="M372 285 L417 215"/><path d="M421 285 L466 215"/><path d="M470 285 L515 215"/>
|
|
208
|
+
</g>
|
|
209
|
+
<g stroke="var(--coral)" stroke-width="3">
|
|
210
|
+
<path d="M550 285 L586 215"/><path d="M576 285 L608 222"/>
|
|
211
|
+
</g>
|
|
212
|
+
<text x="230" y="183" font-size="34">96%</text>
|
|
213
|
+
<text x="550" y="183" font-size="34">4%</text>
|
|
214
|
+
<text x="176" y="353" font-size="31">原生 MXFP4</text>
|
|
215
|
+
<text x="527" y="353" font-size="26">FP8 / BF16</text>
|
|
216
|
+
</svg>
|
|
217
|
+
<span class="ann ann-s ann-green ann-no-mark annotation-anchor" data-note="官方已经压过" style="position:absolute;right:400px;top:325px" aria-label="96% 专家权重已经是原生四位格式"></span>
|
|
218
|
+
<span class="ann ann-s ann-red ann-no-mark annotation-anchor" data-note="只剩这点能再量化" style="position:absolute;right:172px;top:325px;--ann-label-max-width:180px;--ann-text-x:12px" aria-label="仅有 4% 权重属于其他格式"></span>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
<div class="notes">文件没有明显缩小,因为百分之九十六的专家权重原本就是 MXFP4。GGUF 主要做格式重打包。</div>
|
|
222
|
+
</section>
|
|
223
|
+
|
|
224
|
+
<section class="slide" data-title="同为 4bit">
|
|
225
|
+
<div class="page-heading">
|
|
226
|
+
<h2 class="hand-title">同样写着 4bit,结果可以差很多</h2>
|
|
227
|
+
<div class="title-line"></div>
|
|
228
|
+
</div>
|
|
229
|
+
<div class="method-compare">
|
|
230
|
+
<div class="compare-head"><span>版本</span><span>专家权重</span><span>体积</span><span>KLD</span></div>
|
|
231
|
+
<div><span class="marker marker-green">UD-Q4_K_XL</span><span>逐位精确</span><span>155.1GB</span><span>≈0.01</span></div>
|
|
232
|
+
<div><span>bartowski MXFP4</span><span>重新处理</span><span>156.0GB</span><span>0.0105</span></div>
|
|
233
|
+
<div><span class="marker marker-coral">antirez Q4K</span><span>专家再量化</span><span>164.6GB</span><span>0.029</span></div>
|
|
234
|
+
</div>
|
|
235
|
+
<div class="callout-pair">
|
|
236
|
+
<p>文件更大</p><span>+</span><p>质量更差</p>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="wide-result">看名称不够,还要看专家权重有没有被重新量化</div>
|
|
239
|
+
<div class="notes">同为四位档,专家权重的处理方法决定了最终体积和质量。名称相同,路线可能完全不同。</div>
|
|
240
|
+
</section>
|
|
241
|
+
|
|
242
|
+
<section class="slide" data-title="关键数字">
|
|
243
|
+
<div class="page-heading">
|
|
244
|
+
<h2 class="hand-title">把几个关键数字放在一起</h2>
|
|
245
|
+
<div class="title-line"></div>
|
|
246
|
+
</div>
|
|
247
|
+
<div class="metrics-table">
|
|
248
|
+
<div class="metrics-head"><span>版本</span><span>体积</span><span>PPL</span><span>KL 散度</span><span>一致率</span></div>
|
|
249
|
+
<div><span>官方原版</span><span>156.4GB</span><span>4.5319</span><span>0</span><span>100%</span></div>
|
|
250
|
+
<div class="metric-highlight"><span>UD-Q8_K_XL</span><span>161.9GB</span><span>4.5319</span><span>≈0</span><span>100%</span></div>
|
|
251
|
+
<div><span>UD-Q4_K_XL</span><span>155.1GB</span><span>4.5335</span><span>0.0102</span><span>96.28%</span></div>
|
|
252
|
+
<div><span>antirez Q4K</span><span>164.6GB</span><span>4.5726</span><span>0.0290</span><span>93.94%</span></div>
|
|
253
|
+
<div><span>antirez IQ2XXS</span><span>86.7GB</span><span>6.1518</span><span>0.4207</span><span>77.92%</span></div>
|
|
254
|
+
</div>
|
|
255
|
+
<span class="ann ann-w ann-green ann-no-mark metric-note" data-note="小数点后四位一致" aria-label="UD-Q8 与官方版本困惑度一致">Q8</span>
|
|
256
|
+
<div class="wide-result compact-result">UD-Q8_K_XL:首次看到真正的无损点</div>
|
|
257
|
+
<div class="notes">Q8 的困惑度和官方原版小数点后四位完全相同,KL 接近零,top-token 一致率百分之百。</div>
|
|
258
|
+
</section>
|
|
259
|
+
|
|
260
|
+
<section class="slide" data-title="质量断点">
|
|
261
|
+
<div class="page-heading">
|
|
262
|
+
<h2 class="hand-title">体积继续下降,质量损失突然抬头</h2>
|
|
263
|
+
<div class="title-line"></div>
|
|
264
|
+
</div>
|
|
265
|
+
<div class="curve-layout">
|
|
266
|
+
<div class="curve-copy">
|
|
267
|
+
<p class="note-line">Q8:<span class="marker marker-yellow">无损</span></p>
|
|
268
|
+
<p class="note-line">Q4:KLD <span class="marker marker-green">≈ 0.01</span></p>
|
|
269
|
+
<p class="note-line">IQ3:KLD 约为 Q4 的 25 倍</p>
|
|
270
|
+
<div class="thin-box">低于 4bit,开始真正改动专家权重</div>
|
|
271
|
+
</div>
|
|
272
|
+
<svg class="diagram" viewBox="0 0 720 560" role="img" aria-label="量化档位体积与质量损失曲线">
|
|
273
|
+
<path class="scribble" d="M95 475 L95 70 M95 475 L650 475"/>
|
|
274
|
+
<path class="scribble" d="M86 85 L95 68 L106 86 M635 467 L653 475 L636 486"/>
|
|
275
|
+
<text x="26" y="52" font-size="27">质量损失</text><text x="592" y="520" font-size="27">体积</text>
|
|
276
|
+
<path class="scribble scribble-blue" d="M122 115 C160 180 203 260 278 348 C358 439 480 455 620 460"/>
|
|
277
|
+
<circle cx="157" cy="175" r="11" fill="var(--coral)"/><text x="177" y="178" font-size="25">IQ3 · 103GB</text>
|
|
278
|
+
<circle cx="411" cy="443" r="11" fill="var(--magenta)"/><text x="430" y="426" font-size="25">Q4 · 155GB</text>
|
|
279
|
+
<circle cx="600" cy="458" r="11" fill="var(--green)"/><text x="565" y="430" font-size="25">Q8 · 162GB</text>
|
|
280
|
+
<ellipse cx="421" cy="435" rx="66" ry="48" fill="none" stroke="var(--magenta)" stroke-width="3"/>
|
|
281
|
+
</svg>
|
|
282
|
+
</div>
|
|
283
|
+
<div class="notes">四位以下开始动专家权重,质量曲线从这里明显抬头。Q4 是这条曲线最值得记住的拐点。</div>
|
|
284
|
+
</section>
|
|
285
|
+
|
|
286
|
+
<section class="slide" data-title="档位选择">
|
|
287
|
+
<div class="page-heading">
|
|
288
|
+
<h2 class="hand-title">13 个档位怎么选?</h2>
|
|
289
|
+
<div class="title-line"></div>
|
|
290
|
+
</div>
|
|
291
|
+
<div class="choice-layout">
|
|
292
|
+
<div class="choice-list">
|
|
293
|
+
<div class="choice-row"><span>169GB+</span><span class="arrow">→</span><span>UD-Q8_K_XL:<span class="marker marker-yellow">无损</span></span></div>
|
|
294
|
+
<div class="choice-row"><span>162GB</span><span class="arrow">→</span><span>UD-Q4_K_XL:<span class="ann ann-w ann-red" data-note="甜点档" style="--ann-label-max-width:110px;--ann-text-x:4px">首选</span></span></div>
|
|
295
|
+
<div class="choice-row"><span>128GB</span><span class="arrow">→</span><span>UD-IQ3_XXS:能用</span></div>
|
|
296
|
+
<div class="choice-row"><span><128GB</span><span class="arrow">→</span><span>API</span></div>
|
|
297
|
+
</div>
|
|
298
|
+
<svg class="diagram" viewBox="0 0 650 530" role="img" aria-label="内存越高,质量损失越低,Q4 是推荐拐点">
|
|
299
|
+
<path class="scribble" d="M90 446 L90 63 M90 446 L594 446"/>
|
|
300
|
+
<path class="scribble" d="M81 77 L90 61 L101 78 M579 438 L597 446 L579 456"/>
|
|
301
|
+
<text x="27" y="45" font-size="25">质量损失</text><text x="548" y="491" font-size="25">内存</text>
|
|
302
|
+
<path class="scribble scribble-blue" d="M112 96 C139 188 186 282 272 346 C350 405 438 424 546 429"/>
|
|
303
|
+
<circle cx="131" cy="148" r="10" fill="var(--blue)"/><text x="151" y="151" font-size="25">IQ3</text>
|
|
304
|
+
<circle cx="270" cy="344" r="10" fill="var(--blue)"/><text x="290" y="345" font-size="25">Q4</text>
|
|
305
|
+
<ellipse cx="303" cy="337" rx="52" ry="39" fill="none" stroke="var(--magenta)" stroke-width="3"/>
|
|
306
|
+
<circle cx="529" cy="427" r="10" fill="var(--blue)"/><text x="508" y="390" font-size="25">Q8</text>
|
|
307
|
+
</svg>
|
|
308
|
+
</div>
|
|
309
|
+
<div class="choice-result">结论:162GB 先选 UD-Q4_K_XL</div>
|
|
310
|
+
<div class="notes">一百六十九 GB 以上直接 Q8;一百六十二 GB 选 Q4;一百二十八 GB 再考虑 IQ3;更小内存建议用 API。</div>
|
|
311
|
+
</section>
|
|
312
|
+
|
|
313
|
+
<section class="slide" data-title="内存门槛">
|
|
314
|
+
<div class="page-heading">
|
|
315
|
+
<h2 class="hand-title">官方内存门槛:RAM + VRAM</h2>
|
|
316
|
+
<div class="title-line"></div>
|
|
317
|
+
</div>
|
|
318
|
+
<div class="memory-scale">
|
|
319
|
+
<div style="--w:34%"><span>1-bit</span><b>92GB</b><i></i></div>
|
|
320
|
+
<div style="--w:42%"><span>2-bit</span><b>102GB</b><i></i></div>
|
|
321
|
+
<div style="--w:58%"><span>3-bit</span><b>110–135GB</b><i></i></div>
|
|
322
|
+
<div style="--w:82%"><span>4-bit</span><b>162GB</b><i class="bar-green"></i></div>
|
|
323
|
+
<div style="--w:88%"><span>Q8</span><b>169GB</b><i class="bar-yellow"></i></div>
|
|
324
|
+
</div>
|
|
325
|
+
<div class="memory-notes">
|
|
326
|
+
<p>门槛已包含 KV cache 与上下文余量</p>
|
|
327
|
+
<p>Mac 用户直接对照统一内存</p>
|
|
328
|
+
</div>
|
|
329
|
+
<div class="wide-result">先看总内存,再决定档位</div>
|
|
330
|
+
<div class="notes">这里看的总内存包含 RAM、显存或统一内存,也已经给 KV cache 和上下文留了余量。</div>
|
|
331
|
+
</section>
|
|
332
|
+
|
|
333
|
+
<section class="slide code-slide" data-title="开始运行">
|
|
334
|
+
<div class="page-heading">
|
|
335
|
+
<h2 class="hand-title">最省事的跑法:llama.cpp 直接拉</h2>
|
|
336
|
+
<div class="title-line"></div>
|
|
337
|
+
</div>
|
|
338
|
+
<div class="command-block">
|
|
339
|
+
<code>export LLAMA_CACHE="unsloth/DeepSeek-V4-Flash-0731-GGUF"</code>
|
|
340
|
+
<code>./llama.cpp/llama-cli \</code>
|
|
341
|
+
<code> -hf unsloth/DeepSeek-V4-Flash-0731-GGUF:UD-Q8_K_XL \</code>
|
|
342
|
+
<code> --temp 1.0 --top-p 1.0 --min-p 0.0</code>
|
|
343
|
+
</div>
|
|
344
|
+
<div class="download-note">
|
|
345
|
+
<p class="note-line">一百多 GB,建议按档位过滤下载</p>
|
|
346
|
+
<div class="thin-box mono-note">--include "*UD-Q8_K_XL*"</div>
|
|
347
|
+
</div>
|
|
348
|
+
<div class="run-platforms"><span>Mac</span><span>Windows</span><span>Linux</span></div>
|
|
349
|
+
<div class="notes">命令行可以直接从 Hugging Face 拉取。文件很大,实际使用时建议先筛选档位,避免把整仓库拖下来。</div>
|
|
350
|
+
</section>
|
|
351
|
+
|
|
352
|
+
<section class="slide" data-title="思考档位">
|
|
353
|
+
<div class="page-heading">
|
|
354
|
+
<h2 class="hand-title">Non-think / High / Max 怎么切?</h2>
|
|
355
|
+
<div class="title-line"></div>
|
|
356
|
+
</div>
|
|
357
|
+
<div class="thinking-modes">
|
|
358
|
+
<div><span>Max</span><code>reasoning_effort: "max"</code><em>上下文至少 384K</em></div>
|
|
359
|
+
<div><span>High</span><code>reasoning_effort: "high"</code><em>复杂任务</em></div>
|
|
360
|
+
<div><span>Non-think</span><code>enable_thinking: false</code><em>直接回答</em></div>
|
|
361
|
+
</div>
|
|
362
|
+
<div class="sampling-row">
|
|
363
|
+
<span>temperature = 1.0</span><span>top_p = 1.0</span><span class="marker marker-yellow">Agent:top_p = 0.95</span>
|
|
364
|
+
</div>
|
|
365
|
+
<div class="wide-result">思考越深,越要给足上下文</div>
|
|
366
|
+
<div class="notes">三个档位对应不同任务节奏。Think Max 至少给三百八十四 K 上下文,避免思考还没结束就被截断。</div>
|
|
367
|
+
</section>
|
|
368
|
+
|
|
369
|
+
<section class="slide" data-title="模板陷阱">
|
|
370
|
+
<div class="page-heading">
|
|
371
|
+
<h2 class="hand-title">能跑起来,还要确认它跑对了</h2>
|
|
372
|
+
<div class="title-line"></div>
|
|
373
|
+
</div>
|
|
374
|
+
<div class="template-flow">
|
|
375
|
+
<div><span>官方</span><b>encoding 文件夹</b><em>没有 Jinja 模板</em></div>
|
|
376
|
+
<div class="flow-arrow">→</div>
|
|
377
|
+
<div><span>Unsloth</span><b class="marker marker-green">补齐 Jinja</b><em>4000+ 轮对话对齐</em></div>
|
|
378
|
+
<div class="flow-arrow">→</div>
|
|
379
|
+
<div><span>工具调用</span><b class="marker marker-yellow">reasoning_content</b><em>重新补回</em></div>
|
|
380
|
+
</div>
|
|
381
|
+
<div class="check-pair">
|
|
382
|
+
<p>① 模板处理</p><p>② MXFP4 重打包</p>
|
|
383
|
+
</div>
|
|
384
|
+
<div class="wide-result">下载第三方 GGUF 前,先核对这两件事</div>
|
|
385
|
+
<div class="notes">官方只提供 encoding 目录。第三方 GGUF 能否正确工作,要同时看聊天模板和 MXFP4 重打包。</div>
|
|
386
|
+
</section>
|
|
387
|
+
|
|
388
|
+
<section class="slide" data-title="真正值得讨论的地方">
|
|
389
|
+
<div class="page-heading">
|
|
390
|
+
<h2 class="hand-title">真正值得讨论的,是 DeepSeek 一直在换路</h2>
|
|
391
|
+
<div class="title-line"></div>
|
|
392
|
+
</div>
|
|
393
|
+
<div class="route-notes">
|
|
394
|
+
<p>大家堆参数 → 它做<span class="marker marker-green">架构创新</span></p>
|
|
395
|
+
<p>大家追万亿参数 → 它用<span class="marker marker-yellow">后训练</span>继续抬能力</p>
|
|
396
|
+
<p>一条路线跑通 → 它选择<span class="marker marker-coral">开源</span></p>
|
|
397
|
+
</div>
|
|
398
|
+
<div class="enterprise-formula">
|
|
399
|
+
<span>能力</span><b>+</b><span>成本</span><b>+</b><span>本地</span><b>+</b><span>透明</span>
|
|
400
|
+
</div>
|
|
401
|
+
<div class="wide-result">大模型还有很多路可以走,中国团队也能走在前面</div>
|
|
402
|
+
<div class="notes">榜单只是结果。更重要的是,它持续探索架构、后训练和开放路线,让企业能研究、部署和长期掌握。</div>
|
|
403
|
+
</section>
|
|
404
|
+
|
|
405
|
+
<section class="slide thanks" data-title="结束">
|
|
406
|
+
<div class="thanks-main">Thank you !</div>
|
|
407
|
+
<div class="thanks-line">你梁哥,还是你梁哥</div>
|
|
408
|
+
<div class="thanks-meta">AI学习的老章 · August 2, 2026</div>
|
|
409
|
+
<div class="notes">结束。邀请大家讨论自己的机器配置和准备选择的量化档位。</div>
|
|
410
|
+
</section>
|
|
411
|
+
</div>
|
|
412
|
+
<script src="../../assets/runtime.js"></script>
|
|
413
|
+
</body>
|
|
414
|
+
</html>
|