docs(update):更新Porject Caffeine README文档

Signed-off-by: gzkoala <guohao@gitconomy.org>
This commit is contained in:
gzkoala
2026-03-08 20:14:18 +08:00
parent 3a437eb739
commit 43fc7faced
2 changed files with 281 additions and 343 deletions

View File

@@ -1,15 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 850" width="100%" height="100%">
<!--
================================================================================
图表名称:基于 MCP 的研报智能体系统拓扑图 (Research MCP Server Topology)
文件命名project-caffeine-system-topology.svg
用途:展示学术研究 MCP 系统的核心组件交互拓扑包括用户层客户端、MCP 传输协议层、MCP Server 集群逻辑分工,以及与外部学术基础设施的数据流向。
版本v1.0.1
作者Gitconomy Research-AI
版本v2.0.1
作者Gitconomy Research-郭晧
SPDX-License-Identifier: MIT & CC-BY-SA-4.0
创建日期2026-02-27
更新r日期2026-03-08
更新说明:根据开发文档更新系统架构
================================================================================
-->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 850" width="100%" height="100%">
<!-- Background: Solid White (强制兼容深色模式的白底) -->
<rect width="100%" height="100%" fill="#FFFFFF" />
@@ -75,9 +77,9 @@ SPDX-License-Identifier: MIT & CC-BY-SA-4.0
<!-- 图表编号 -->
<text y="-30" text-anchor="middle" class="text-mono" font-size="12" fill="var(--c-neutral-gray)" letter-spacing="1">FIG-01</text>
<!-- 主标题 -->
<text y="0" text-anchor="middle" class="text-title" font-size="24" fill="#000000">研报智能体 MCP 系统拓扑图</text>
<text y="0" text-anchor="middle" class="text-title" font-size="24" fill="#000000">Project Caffeine 研报智能体 MCP 系统拓扑图</text>
<!-- 面包屑导航 -->
<text y="25" text-anchor="middle" class="text-mono" font-size="14" fill="var(--c-neutral-gray)">架构图 &gt; MCP &gt; 系统拓扑结构</text>
<text y="25" text-anchor="middle" class="text-mono" font-size="14" fill="var(--c-neutral-gray)">架构图 &gt; 智能体 MCP &gt; 核心原语拓扑</text>
<!-- 上下文指示线 (使用主色调代表架构主体) -->
<rect x="-30" y="40" width="60" height="3" fill="var(--c-local-green)" />
</g>
@@ -92,15 +94,15 @@ SPDX-License-Identifier: MIT & CC-BY-SA-4.0
<!-- MCP Server 集群区域 (Center: Local/Container) -->
<rect x="420" y="0" width="340" height="520" rx="8" class="box-local" />
<text x="435" y="25" class="text-title" font-size="14" fill="var(--c-local-green)">MCP 服务端集群 (核心执行区)</text>
<text x="435" y="25" class="text-title" font-size="14" fill="var(--c-local-green)">单体 MCP Server (三大核心原语)</text>
<!-- 外部基础设施区域 (Right: Cloud) -->
<rect x="850" y="0" width="400" height="330" rx="8" class="box-cloud" />
<rect x="850" y="0" width="400" height="200" rx="8" class="box-cloud" />
<text x="865" y="25" class="text-title" font-size="14" fill="var(--c-cloud-blue)">外部学术基础设施 (公有云)</text>
<!-- 本地知识库区域 (Right Bottom: Local Storage) -->
<rect x="850" y="360" width="400" height="160" rx="8" class="box-local" />
<text x="865" y="385" class="text-title" font-size="14" fill="var(--c-local-green)">本地知识库</text>
<rect x="850" y="240" width="400" height="280" rx="8" class="box-local" />
<text x="865" y="265" class="text-title" font-size="14" fill="var(--c-local-green)">本地持久化存储</text>
</g>
<!-- ========================================================================= -->
@@ -121,7 +123,7 @@ SPDX-License-Identifier: MIT & CC-BY-SA-4.0
<text x="365" y="325" text-anchor="middle" class="text-mono" font-size="10" fill="var(--c-neutral-gray)">JSON-RPC 2.0</text>
<!-- 协议层标签 -->
<text x="365" y="380" text-anchor="middle" class="text-title" font-size="12" fill="var(--c-neutral-gray)">MCP 标准传输协议层</text>
<text x="365" y="380" text-anchor="middle" class="text-title" font-size="12" fill="var(--c-neutral-gray)">MCP 传输协议层</text>
</g>
<!-- ========================================================================= -->
@@ -145,7 +147,7 @@ SPDX-License-Identifier: MIT & CC-BY-SA-4.0
<text x="110" y="30" text-anchor="middle" class="text-title" font-size="16" fill="var(--c-local-green)">MCP 客户端</text>
<text x="110" y="50" text-anchor="middle" class="text-mono" font-size="12" fill="#000000">Claude Desktop / Cursor</text>
<rect x="20" y="70" width="180" height="30" rx="4" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="1" />
<text x="110" y="89" text-anchor="middle" class="text-sans" font-size="12" fill="#000000">大模型上下文与工具调度</text>
<text x="110" y="89" text-anchor="middle" class="text-sans" font-size="12" fill="#000000">大模型上下文与协议调度</text>
</g>
<!-- 远程 LLM (Remote Brain) - 从 Client 发起调用 -->
@@ -161,33 +163,33 @@ SPDX-License-Identifier: MIT & CC-BY-SA-4.0
<text x="180" y="380" class="text-sans" font-size="10" fill="var(--c-risk-amber)">提示词请求 / 结果流式响应</text>
<!-- [4.2] MCP Server 集群 -->
<!-- [4.2] 单体 MCP Server 的 3 大核心原语 -->
<!-- MCP Server 1: 文献查询 -->
<!-- MCP 原语 1: Tools -->
<g transform="translate(450, 70)">
<rect width="280" height="100" rx="6" class="node-local" />
<rect x="0" y="0" width="280" height="35" rx="6" fill="var(--c-local-green)" />
<text x="140" y="22" text-anchor="middle" class="text-title" font-size="14" fill="#FFFFFF">文献查询 MCP Server</text>
<text x="140" y="55" text-anchor="middle" class="text-mono" font-size="11" fill="#000000">工具: search_papers(), fetch_pdf()</text>
<text x="140" y="75" text-anchor="middle" class="text-sans" font-size="11" fill="var(--c-neutral-gray)">负责多源学术数据库 API 聚合与清洗</text>
<text x="140" y="22" text-anchor="middle" class="text-title" font-size="14" fill="#FFFFFF">Tools 原语 (动作执行)</text>
<text x="140" y="55" text-anchor="middle" class="text-mono" font-size="11" fill="#000000">search_academic_literature(), save_to_vault()</text>
<text x="140" y="75" text-anchor="middle" class="text-sans" font-size="11" fill="var(--c-neutral-gray)">调用外部API检索文献并执行标准化数据双轨落盘</text>
</g>
<!-- MCP Server 2: 提示词策略 -->
<!-- MCP 原语 2: Prompts -->
<g transform="translate(450, 210)">
<rect width="280" height="100" rx="6" class="node-local" />
<rect x="0" y="0" width="280" height="35" rx="6" fill="var(--c-local-green)" />
<text x="140" y="22" text-anchor="middle" class="text-title" font-size="14" fill="#FFFFFF">提示词策略 MCP Server</text>
<text x="140" y="55" text-anchor="middle" class="text-mono" font-size="11" fill="#000000">提示词: synthesis_template</text>
<text x="140" y="75" text-anchor="middle" class="text-sans" font-size="11" fill="var(--c-neutral-gray)">负责基于主题动态组装超级提示词</text>
<text x="140" y="22" text-anchor="middle" class="text-title" font-size="14" fill="#FFFFFF">Prompts 原语 (上下文策略)</text>
<text x="140" y="55" text-anchor="middle" class="text-mono" font-size="11" fill="#000000">prompts/get: 5w3h, scqa, pestle 等</text>
<text x="140" y="75" text-anchor="middle" class="text-sans" font-size="11" fill="var(--c-neutral-gray)">提供多维思维框架,动态指导大模型分析与拆解</text>
</g>
<!-- MCP Server 3: CoT 推理 -->
<!-- MCP 原语 3: Resources -->
<g transform="translate(450, 350)">
<rect width="280" height="100" rx="6" class="node-amber" />
<rect x="0" y="0" width="280" height="35" rx="6" fill="var(--c-risk-amber)" />
<text x="140" y="22" text-anchor="middle" class="text-title" font-size="14" fill="#FFFFFF">CoT 推理 MCP Server</text>
<text x="140" y="55" text-anchor="middle" class="text-mono" font-size="11" fill="#000000">工具: run_cot_chain(), verify_logic()</text>
<text x="140" y="75" text-anchor="middle" class="text-sans" font-size="11" fill="var(--c-neutral-gray)">协调多步思考推理,抽取实体与洞察生成</text>
<rect width="280" height="100" rx="6" class="node-local" />
<rect x="0" y="0" width="280" height="35" rx="6" fill="var(--c-local-green)" />
<text x="140" y="22" text-anchor="middle" class="text-title" font-size="14" fill="#FFFFFF">Resources 原语 (数据暴露)</text>
<text x="140" y="55" text-anchor="middle" class="text-mono" font-size="11" fill="#000000">literature://local/, note://local/</text>
<text x="140" y="75" text-anchor="middle" class="text-sans" font-size="11" fill="var(--c-neutral-gray)">暴露本地知识库的文献卡片与笔记供大模型访问</text>
</g>
@@ -198,49 +200,39 @@ SPDX-License-Identifier: MIT & CC-BY-SA-4.0
<!-- Cylinder -->
<path d="M 0,20 A 40,15 0 0,0 80,20 A 40,15 0 0,0 0,20 L 0,80 A 40,15 0 0,0 80,80 L 80,20" class="node-cloud" />
<text x="40" y="50" text-anchor="middle" class="text-title" font-size="12" fill="#000000">学术数据库</text>
<text x="40" y="68" text-anchor="middle" class="text-mono" font-size="10" fill="var(--c-cloud-blue)">PubMed, arXiv</text>
<text x="40" y="82" text-anchor="middle" class="text-mono" font-size="10" fill="var(--c-cloud-blue)">IEEE, WOS</text>
<text x="40" y="68" text-anchor="middle" class="text-mono" font-size="10" fill="var(--c-cloud-blue)">arXiv API</text>
<text x="40" y="82" text-anchor="middle" class="text-mono" font-size="10" fill="var(--c-cloud-blue)">Semantic Scholar</text>
</g>
<!-- 互联网资源 -->
<g transform="translate(1080, 200)">
<!-- Hexagon-like Cloud Service -->
<polygon points="20,0 80,0 100,40 80,80 20,80 0,40" class="node-cloud" />
<text x="50" y="35" text-anchor="middle" class="text-title" font-size="12" fill="#000000">互联网资源</text>
<text x="50" y="55" text-anchor="middle" class="text-mono" font-size="10" fill="var(--c-cloud-blue)">PDF / HTML</text>
</g>
<!-- [4.4] 本地知识库 (Local Knowledge Base) -->
<g transform="translate(980, 410)">
<g transform="translate(930, 360)">
<!-- Cylinder -->
<path d="M 0,20 A 50,15 0 0,0 100,20 A 50,15 0 0,0 0,20 L 0,80 A 50,15 0 0,0 100,80 L 100,20" class="node-local" />
<text x="50" y="50" text-anchor="middle" class="text-title" font-size="12" fill="#000000">本地知识库</text>
<text x="50" y="70" text-anchor="middle" class="text-mono" font-size="11" fill="var(--c-local-green)">Obsidian / Logseq</text>
<text x="50" y="70" text-anchor="middle" class="text-mono" font-size="11" fill="var(--c-local-green)">Obsidian / PKM</text>
<text x="50" y="85" text-anchor="middle" class="text-mono" font-size="9" fill="var(--c-neutral-gray)">(YAML / Markdown)</text>
</g>
<!-- [4.5] 服务器到外部/本地基础设施的连线 -->
<!-- 文献查询 MCP -> 学术数据库 (Async) -->
<!-- Tools 原语 -> 学术数据库 (Async) -->
<path d="M 730,100 L 930,100" class="line-async" marker-end="url(#arrow-async)" />
<text x="830" y="90" text-anchor="middle" class="text-sans" font-size="10" fill="var(--c-risk-amber)">API 请求调用 (REST/GraphQL)</text>
<text x="810" y="90" text-anchor="middle" class="text-sans" font-size="10" fill="var(--c-risk-amber)">API 请求调用 (REST)</text>
<!-- CoT 推理 MCP -> 互联网资源 (Async) -->
<path d="M 730,400 L 1130,400 L 1130,285" class="line-async" marker-end="url(#arrow-async)" />
<text x="1000" y="390" text-anchor="middle" class="text-sans" font-size="10" fill="var(--c-risk-amber)">拉取文献全文 / 网页爬取</text>
<!-- Tools 原语 -> Local KB (Sync) 写入落盘 -->
<!-- 采用肘型连接线绕行 -->
<path d="M 730,140 L 880,140 L 880,380 L 930,380" class="line-sync" marker-end="url(#arrow-sync)" />
<text x="800" y="160" text-anchor="middle" class="text-sans" font-size="10" fill="var(--c-local-green)">JSON 转 Markdown+YAML</text>
<!-- 提示词策略 MCP -> Local KB (Sync) (如果是读取本地上下文) -->
<!-- 文献查询/CoT推理 MCP -> Local KB (Sync) (双轨制写入落盘) -->
<!-- 采用肘型连接线 -->
<path d="M 730,420 L 790,420 L 790,460 L 980,460" class="line-sync" marker-end="url(#arrow-sync)" />
<text x="885" y="452" text-anchor="middle" class="text-sans" font-size="10" fill="var(--c-local-green)">本地读写 Markdown / YAML</text>
<!-- Resources 原语 -> Local KB (Sync) 读取数据 -->
<path d="M 730,400 L 930,400" class="line-sync" marker-end="url(#arrow-sync)" />
<text x="830" y="390" text-anchor="middle" class="text-sans" font-size="10" fill="var(--c-local-green)">读取文献卡片与笔记</text>
<!-- MCP 内部的协同工作流虚线表示 (可选的逻辑联系) -->
<path d="M 590,170 L 590,210" class="line-neutral" marker-end="url(#arrow-async)" />
<path d="M 590,310 L 590,350" class="line-neutral" marker-end="url(#arrow-async)" />
<text x="600" y="195" class="text-sans" font-size="9" fill="var(--c-neutral-gray)">本地上下文共享</text>
<path d="M 590,170 L 590,210" class="line-neutral" />
<path d="M 590,310 L 590,350" class="line-neutral" />
<text x="600" y="195" class="text-sans" font-size="9" fill="var(--c-neutral-gray)">核心引擎共享调度</text>
</g>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,320 +1,266 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 1200" width="100%" height="100%">
<!--
================================================================================
图表名称:个人级研究助手智能体 - 开发框架与技术栈架构图
文件命名project-caffeine-tech-stack-framework.svg
用途:展示从宿主端到三个核心 MCP Server 的底层技术栈、核心算法、Monorepo工程化及安全交互框架。
版本v1.1.1 (Added Legend)
作者Gitconomy Research-郭晧
SPDX-License-Identifier: MIT & CC-BY-SA-4.0
创建日期2026-02-27
================================================================================
-->
<!--
================================================================================
图表名称:个人级研究助手智能体 - 开发框架与技术栈架构图
文件命名project-caffeine-tech-stack-framework.svg
用途:展示从宿主端到三个核心 MCP Server 的底层技术栈、核心算法、Monorepo工程化及安全交互框架。
版本v2.0.0
作者Gitconomy Research-郭晧
SPDX-License-Identifier: MIT & CC-BY-SA-4.0
创建日期2026-02-27
更新日期2026-03-08
================================================================================
-->
<!-- Background: Solid White for Git compatibility -->
<rect width="100%" height="100%" fill="#FFFFFF" />
<!-- Background: Solid White -->
<rect width="100%" height="100%" fill="#FFFFFF" />
<defs>
<style>
:root {
/* 语义色定义 */
--c-cloud-blue: #0099FF;
--c-cloud-blue-light: rgba(0, 153, 255, 0.08);
--c-local-green: #009900;
--c-local-green-light: rgba(0, 153, 0, 0.08);
--c-risk-amber: #FF991F;
--c-risk-amber-light: rgba(255, 153, 31, 0.08);
--c-gov-blue: #0052CC;
--c-gov-blue-light: rgba(0, 82, 204, 0.04);
--c-neutral-gray: #475569;
--c-neutral-gray-light: #E2E8F0;
}
<defs>
<!-- CSS 变量与全局样式 -->
<style>
:root {
/* 语义色彩体系 */
--c-cloud-blue: #0099FF;
--c-cloud-blue-light: rgba(0, 153, 255, 0.08);
--c-local-green: #009900;
--c-local-green-light: rgba(0, 153, 0, 0.08);
--c-risk-amber: #FF991F;
--c-risk-amber-light: rgba(255, 153, 31, 0.08);
--c-neutral-gray: #475569;
--c-neutral-gray-light: #F1F5F9;
--c-gov-blue: #0052CC;
--c-op-green: #00875A;
/* 字体降级机制 */
.font-sans { font-family: 'Noto Sans', 'Helvetica Neue', Arial, sans-serif; }
.font-mono { font-family: 'JetBrains Mono', Consolas, 'Courier New', monospace; }
/* 字体系统降级适配 */
--font-sans: 'Noto Sans', 'Helvetica Neue', Arial, sans-serif;
--font-mono: 'JetBrains Mono', Consolas, 'Courier New', monospace;
}
/* 文本层级 */
.title-main { font-size: 16px; font-weight: bold; fill: var(--c-neutral-gray); }
.title-sub { font-size: 14px; font-weight: bold; fill: #0F172A; }
.tech-badge { font-size: 12px; font-weight: bold; }
.desc-text { font-size: 12px; fill: #64748B; }
</style>
/* 文本工具类 */
.font-sans { font-family: var(--font-sans); }
.font-mono { font-family: var(--font-mono); }
.text-bold { font-weight: bold; }
</style>
<!-- 箭头标记 -->
<marker id="arrow-green" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto">
<path d="M 0 0 L 8 4 L 0 8 Z" fill="var(--c-local-green)" />
</marker>
<marker id="arrow-blue" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto">
<path d="M 0 0 L 8 4 L 0 8 Z" fill="var(--c-cloud-blue)" />
</marker>
<marker id="arrow-amber" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto">
<path d="M 0 0 L 8 4 L 0 8 Z" fill="var(--c-risk-amber)" />
</marker>
</defs>
<!-- 箭头标记定义 -->
<marker id="arrow-green" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="var(--c-local-green)" />
</marker>
<marker id="arrow-amber" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="var(--c-risk-amber)" />
</marker>
<marker id="arrow-blue" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="var(--c-cloud-blue)" />
</marker>
</defs>
<!--
===========================================================================
顶层标题块 (Title Block)
===========================================================================
-->
<g id="title-block" transform="translate(600, 40)">
<text y="0" text-anchor="middle" class="font-mono" font-size="12" fill="var(--c-neutral-gray)" letter-spacing="1">FIG-02</text>
<text y="30" text-anchor="middle" class="font-sans" font-weight="bold" font-size="24" fill="#000000">Project Caffeine开发框架与技术栈架构图</text>
<text y="55" text-anchor="middle" class="font-mono" font-size="14" fill="var(--c-neutral-gray)">架构图 &gt; MCP &gt; 系统技术堆栈 </text>
<rect x="-30" y="70" width="60" height="3" fill="var(--c-gov-blue)" />
<!-- ==========================================
1. 标题区域 (Title Block)
=========================================== -->
<g id="title-block" transform="translate(500, 40)">
<!-- 1. Figure ID -->
<text y="0" text-anchor="middle" class="font-mono text-bold" font-size="12" fill="var(--c-neutral-gray)" letter-spacing="1">FIGURE-02</text>
<!-- 2. Main Title -->
<text y="30" text-anchor="middle" class="font-sans text-bold" font-size="24" fill="#000000">Project Caffeine 开发框架与技术栈</text>
<!-- 3. Breadcrumbs -->
<text y="55" text-anchor="middle" class="font-mono" font-size="14" fill="var(--c-neutral-gray)">Framework > Tech Stack > Monolithic Server</text>
<!-- 4. Context Indicator (Y=70, 高度3底部为 Y=73。相对于 translate(500, 40),绝对底部 Y=113) -->
<rect x="-30" y="70" width="60" height="3" fill="var(--c-local-green)" />
</g>
<!-- ==========================================
2. 核心架构主体 (Diagram Content)
为了与标题底部(113)精确保持50间距设定 translate Y 为 163
=========================================== -->
<g id="diagram-content" transform="translate(0, 163)">
<!-- 外部客户端 (MCP Client Desktop) 笔记本图标 -->
<g id="mcp-client" transform="translate(500, 0)">
<!-- 屏幕外框 -->
<rect x="-35" y="0" width="70" height="45" rx="4" fill="none" stroke="var(--c-cloud-blue)" stroke-width="3"/>
<!-- 屏幕内侧 -->
<rect x="-31" y="4" width="62" height="37" rx="1" fill="var(--c-cloud-blue-light)"/>
<!-- 笔记本底座 -->
<path d="M-45,45 L45,45 L52,52 L-52,52 Z" fill="var(--c-cloud-blue)"/>
<!-- 触控板区 -->
<rect x="-8" y="47" width="16" height="3" fill="#FFFFFF" opacity="0.5"/>
<!-- 键盘区装饰 -->
<path d="M-35,46 L35,46 L38,49 L-38,49 Z" fill="#FFFFFF" opacity="0.2"/>
<text x="0" y="75" text-anchor="middle" class="font-sans text-bold" font-size="14" fill="var(--c-cloud-blue)">Client (Claude Desktop / Cherry Studio)</text>
</g>
<!--
===========================================================================
Layer 1: 宿主环境与模型层 (Host & LLM Layer)
===========================================================================
-->
<g id="layer-host" transform="translate(100, 140)">
<text x="0" y="0" class="font-sans title-main">Layer 1: 宿主应用与大脑层 (Host &amp; Brain)</text>
<rect x="0" y="15" width="1000" height="90" rx="8" fill="var(--c-neutral-gray-light)" opacity="0.2" stroke="var(--c-neutral-gray)" stroke-dasharray="4 4" stroke-width="1.5" />
<!-- 连接线条:客户端到 MCP Server -->
<line x1="500" y1="85" x2="500" y2="135" stroke="var(--c-local-green)" stroke-width="2" marker-end="url(#arrow-green)" />
<!-- 客户端 -->
<rect x="30" y="30" width="220" height="60" rx="6" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="2" />
<text x="140" y="55" text-anchor="middle" class="font-sans title-sub">MCP Client 宿主联调环境</text>
<text x="140" y="75" text-anchor="middle" class="font-mono desc-text">VS Code (MCP 插件) / Claude</text>
<!-- 单体服务器容器 (整体向下偏移以容纳客户端) -->
<g id="monolithic-server" transform="translate(0, 100)">
<!-- 双向箭头 -->
<line x1="260" y1="60" x2="330" y2="60" stroke="var(--c-neutral-gray)" stroke-width="2" stroke-dasharray="3 3"/>
<!-- 单体服务器边界 (Monolithic Boundary) -->
<g id="monolithic-boundary">
<rect x="60" y="0" width="880" height="570" rx="12" fill="none" stroke="var(--c-local-green)" stroke-width="2" stroke-dasharray="6 4" />
<!-- 远程模型 (Brain) -->
<g transform="translate(400, 60)">
<!-- 六边形 Token -->
<polygon points="0,-30 26,-15 26,15 0,30 -26,15 -26,-15" fill="var(--c-cloud-blue-light)" stroke="var(--c-cloud-blue)" stroke-width="2" />
<text x="40" y="-5" class="font-sans title-sub" fill="var(--c-cloud-blue)">Remote LLM Brain</text>
<text x="40" y="15" class="font-mono desc-text">Claude 3.5 / DeepSeek (Context Engine)</text>
</g>
</g>
<!--
===========================================================================
Layer 2: 协议总线 (Protocol Bus)
===========================================================================
-->
<g id="layer-protocol" transform="translate(100, 270)">
<text x="0" y="0" class="font-sans title-main">Layer 2: 通信协议层 (JSON-RPC 2.0 Bus)</text>
<rect x="0" y="15" width="1000" height="40" rx="20" fill="var(--c-gov-blue-light)" stroke="var(--c-gov-blue)" stroke-width="2" />
<text x="500" y="40" text-anchor="middle" class="font-mono" font-size="14" font-weight="bold" fill="var(--c-gov-blue)">mcp-protocol: STDIO 协议 (MVP阶段本地 stdin/stdout 零网络开销)</text>
<!-- 连接上下层的管线 -->
<line x1="210" y1="-35" x2="210" y2="15" stroke="var(--c-local-green)" stroke-width="3" marker-end="url(#arrow-green)" />
<line x1="210" y1="55" x2="210" y2="90" stroke="var(--c-local-green)" stroke-width="3" marker-end="url(#arrow-green)" />
<line x1="500" y1="55" x2="500" y2="90" stroke="var(--c-local-green)" stroke-width="3" marker-end="url(#arrow-green)" />
<line x1="850" y1="55" x2="850" y2="90" stroke="var(--c-local-green)" stroke-width="3" marker-end="url(#arrow-green)" />
</g>
<!--
===========================================================================
Layer 3: 核心 MCP Server 集群框架 (Microservices Stack)
===========================================================================
-->
<g id="layer-servers" transform="translate(100, 370)">
<text x="0" y="0" class="font-sans title-main">Layer 3: 核心智能体引擎 / MCP Server 集群开发框架</text>
<!-- 工程化管控边界 (Monorepo) -->
<rect x="0" y="15" width="1000" height="360" rx="8" fill="transparent" stroke="var(--c-neutral-gray)" stroke-dasharray="4 4" stroke-width="2" />
<rect x="0" y="15" width="1000" height="30" fill="var(--c-neutral-gray-light)" opacity="0.4" rx="8"/>
<text x="20" y="35" class="font-mono desc-text" font-weight="bold" fill="var(--c-neutral-gray)">📦 npm Workspaces (Monorepo) - 统一包管理 / 依赖隔离 / 共享 JSON-RPC Schema</text>
<!-- ================= S1: 文献查询 Server ================= -->
<g transform="translate(20, 45)">
<rect x="0" y="0" width="300" height="320" rx="8" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-width="2" />
<rect x="0" y="0" width="300" height="40" fill="var(--c-local-green)" rx="8" />
<rect x="0" y="20" width="300" height="20" fill="var(--c-local-green)" />
<text x="150" y="25" text-anchor="middle" class="font-sans title-sub" fill="#FFFFFF">S1: 文献查询 Server (执行者)</text>
<!-- Tech Stack Badges (Unified TS/Node) -->
<text x="20" y="65" class="font-sans desc-text" font-weight="bold">开发环境与框架</text>
<rect x="20" y="75" width="115" height="24" rx="12" fill="#FFFFFF" stroke="var(--c-local-green)" />
<text x="77.5" y="91" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-local-green)">Node.js (v20+)</text>
<rect x="145" y="75" width="95" height="24" rx="12" fill="#FFFFFF" stroke="var(--c-local-green)" />
<text x="192.5" y="91" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-local-green)">@mcp/sdk-ts</text>
<!-- Core Algorithms -->
<text x="20" y="130" class="font-sans desc-text" font-weight="bold">核心组件与算法集成</text>
<rect x="20" y="140" width="260" height="40" rx="4" fill="#FFFFFF" stroke="var(--c-risk-amber)" stroke-dasharray="2 2" />
<text x="150" y="165" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-risk-amber)">Semantic Chunking 文本切块算法</text>
<rect x="20" y="190" width="260" height="40" rx="4" fill="#FFFFFF" stroke="var(--c-risk-amber)" stroke-dasharray="2 2" />
<text x="150" y="215" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-risk-amber)">Playwright / Firecrawl 网页深抓取</text>
<!-- APIs -->
<text x="20" y="260" class="font-sans desc-text" font-weight="bold">集成外部接口</text>
<rect x="20" y="270" width="125" height="24" rx="4" fill="var(--c-cloud-blue-light)" stroke="var(--c-cloud-blue)" />
<text x="82.5" y="286" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-cloud-blue)">arXiv API</text>
<rect x="155" y="270" width="125" height="24" rx="4" fill="var(--c-cloud-blue-light)" stroke="var(--c-cloud-blue)" />
<text x="217.5" y="286" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-cloud-blue)">S.Scholar API</text>
<!-- 边界标签 -->
<rect x="80" y="-12" width="220" height="24" fill="#FFFFFF" />
<text x="90" y="4" class="font-mono text-bold" font-size="14" fill="var(--c-local-green)">📦 Monolithic MCP Server</text>
</g>
<!-- ================= S2: 提示词策略 Server ================= -->
<g transform="translate(350, 45)">
<rect x="0" y="0" width="300" height="320" rx="8" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-width="2" />
<rect x="0" y="0" width="300" height="40" fill="var(--c-local-green)" rx="8" />
<rect x="0" y="20" width="300" height="20" fill="var(--c-local-green)" />
<text x="150" y="25" text-anchor="middle" class="font-sans title-sub" fill="#FFFFFF">S2: 提示词策略 Server (军师)</text>
<!-- 内部连接线条 (Data Flows) -->
<g id="data-flows">
<!-- Core to Zod (Sync) -->
<line x1="380" y1="190" x2="340" y2="190" stroke="var(--c-local-green)" stroke-width="2" marker-end="url(#arrow-green)" marker-start="url(#arrow-green)" />
<!-- Tech Stack Badges (Unified TS/Node) -->
<text x="20" y="65" class="font-sans desc-text" font-weight="bold">开发环境与框架</text>
<rect x="20" y="75" width="115" height="24" rx="12" fill="#FFFFFF" stroke="var(--c-local-green)" />
<text x="77.5" y="91" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-local-green)">Node.js (v20+)</text>
<rect x="145" y="75" width="95" height="24" rx="12" fill="#FFFFFF" stroke="var(--c-local-green)" />
<text x="192.5" y="91" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-local-green)">@mcp/sdk-ts</text>
<!-- Core to Axios (Async) -->
<line x1="620" y1="190" x2="660" y2="190" stroke="var(--c-risk-amber)" stroke-width="2" stroke-dasharray="4 2" marker-end="url(#arrow-amber)" />
<!-- Core Algorithms -->
<text x="20" y="130" class="font-sans desc-text" font-weight="bold">核心智能体架构与引擎</text>
<rect x="20" y="140" width="260" height="40" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="150" y="165" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">Persona Matrix 角色化矩阵</text>
<!-- Core to Runtime -->
<line x1="500" y1="230" x2="500" y2="260" stroke="var(--c-local-green)" stroke-width="2" marker-end="url(#arrow-green)" />
<rect x="20" y="190" width="260" height="40" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="150" y="215" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">Exploration State (防死循环账本)</text>
<!-- Prompts -->
<text x="20" y="260" class="font-sans desc-text" font-weight="bold">注入的静态思维框架 (Prompts)</text>
<rect x="20" y="270" width="80" height="24" rx="4" fill="#F1F5F9" stroke="var(--c-neutral-gray)" />
<text x="60" y="286" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-neutral-gray)">5W3H</text>
<rect x="110" y="270" width="80" height="24" rx="4" fill="#F1F5F9" stroke="var(--c-neutral-gray)" />
<text x="150" y="286" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-neutral-gray)">SCQA</text>
<rect x="200" y="270" width="80" height="24" rx="4" fill="#F1F5F9" stroke="var(--c-neutral-gray)" />
<text x="240" y="286" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-neutral-gray)">SWOT</text>
<!-- Axios to External API (Cloud) -->
<line x1="900" y1="190" x2="950" y2="190" stroke="var(--c-cloud-blue)" stroke-width="2" stroke-dasharray="4 2" marker-end="url(#arrow-blue)" />
<text x="960" y="194" class="font-mono" font-size="12" fill="var(--c-cloud-blue)">Academic APIs</text>
</g>
<!-- ================= S3: CoT 多步推理 Server ================= -->
<g transform="translate(680, 45)">
<rect x="0" y="0" width="300" height="320" rx="8" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-width="2" />
<rect x="0" y="0" width="300" height="40" fill="var(--c-local-green)" rx="8" />
<rect x="0" y="20" width="300" height="20" fill="var(--c-local-green)" />
<text x="150" y="25" text-anchor="middle" class="font-sans title-sub" fill="#FFFFFF">S3: CoT 推理 Server (分析师)</text>
<!-- ================== 层级 1协议与网络层 (Y=40) ================== -->
<!-- MCP SDK -->
<g id="card-mcp" transform="translate(380, 40)">
<rect width="240" height="80" rx="6" fill="var(--c-cloud-blue-light)" stroke="var(--c-cloud-blue)" stroke-width="1.5" />
<rect width="6" height="80" rx="3" fill="var(--c-cloud-blue)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-cloud-blue)">协议层 (Protocol)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">MCP SDK</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">@modelcontextprotocol/sdk (stdio/SSE)</text>
</g>
<!-- Tech Stack Badges (Unified TS/Node) -->
<text x="20" y="65" class="font-sans desc-text" font-weight="bold">开发环境与框架</text>
<rect x="20" y="75" width="115" height="24" rx="12" fill="#FFFFFF" stroke="var(--c-local-green)" />
<text x="77.5" y="91" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-local-green)">Node.js (v20+)</text>
<rect x="145" y="75" width="95" height="24" rx="12" fill="#FFFFFF" stroke="var(--c-local-green)" />
<text x="192.5" y="91" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-local-green)">@mcp/sdk-ts</text>
<!-- ================== 层级 2核心业务层 (Y=150) ================== -->
<!-- Zod -->
<g id="card-zod" transform="translate(100, 150)">
<rect width="240" height="80" rx="6" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-width="1.5" />
<rect width="6" height="80" rx="3" fill="var(--c-local-green)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-local-green)">校验工具 (Validation)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">Zod</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">运行时类型校验与参数安全验证</text>
</g>
<!-- Core Algorithms -->
<text x="20" y="130" class="font-sans desc-text" font-weight="bold">质量把控与数据组装逻辑</text>
<rect x="20" y="140" width="260" height="40" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="150" y="165" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">引文密度强制校验 (Citation Check)</text>
<!-- TypeScript -->
<g id="card-ts" transform="translate(380, 150)">
<rect width="240" height="80" rx="6" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-width="2" />
<rect width="6" height="80" rx="3" fill="var(--c-local-green)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-local-green)">核心语言 (Core Language)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">TypeScript</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">所有服务逻辑与控制流强制使用</text>
</g>
<rect x="20" y="190" width="260" height="40" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="150" y="215" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">双轨制落盘编译器 (JSON-to-MD)</text>
<!-- axios -->
<g id="card-axios" transform="translate(660, 150)">
<rect width="240" height="80" rx="6" fill="var(--c-risk-amber-light)" stroke="var(--c-risk-amber)" stroke-width="1.5" />
<rect width="6" height="80" rx="3" fill="var(--c-risk-amber)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-risk-amber)">HTTP 客户端 (Network I/O)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">axios</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">封装学术 API支持重试与速率限制</text>
</g>
<!-- Output Formats -->
<text x="20" y="260" class="font-sans desc-text" font-weight="bold">标准数据协议输出</text>
<rect x="20" y="270" width="120" height="24" rx="4" fill="#F1F5F9" stroke="var(--c-neutral-gray)" />
<text x="80" y="286" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-neutral-gray)">Markdown 解析</text>
<rect x="150" y="270" width="130" height="24" rx="4" fill="#F1F5F9" stroke="var(--c-neutral-gray)" />
<text x="215" y="286" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-neutral-gray)">YAML Frontmatter</text>
<!-- ================== 层级 3运行环境层 (Y=260) ================== -->
<!-- Node.js -->
<g id="card-node" transform="translate(380, 260)">
<rect width="240" height="80" rx="6" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-width="1.5" />
<rect width="6" height="80" rx="3" fill="var(--c-local-green)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-local-green)">运行环境 (Runtime)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">Node.js LTS v20+</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">单进程异步非阻塞 I/O 引擎</text>
</g>
<!-- 分隔线 -->
<line x1="80" y1="365" x2="920" y2="365" stroke="var(--c-neutral-gray)" stroke-width="1" stroke-dasharray="2 4" />
<text x="100" y="360" class="font-mono" font-size="12" fill="var(--c-neutral-gray)">DevTools &amp; Engineering Infrastructure</text>
<!-- ================== 层级 4工程化基础工具 (Y=390) ================== -->
<!-- Winston -->
<g id="card-log" transform="translate(100, 390)">
<rect width="240" height="80" rx="6" fill="var(--c-neutral-gray-light)" stroke="var(--c-neutral-gray)" stroke-width="1" />
<rect width="6" height="80" rx="3" fill="var(--c-neutral-gray)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-neutral-gray)">日志工具 (Logging)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">winston / log4js</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="#64748b">生产级结构化日志记录与追踪</text>
</g>
<!-- VS Code -->
<g id="card-vscode" transform="translate(380, 390)">
<rect width="240" height="80" rx="6" fill="var(--c-neutral-gray-light)" stroke="var(--c-neutral-gray)" stroke-width="1" />
<rect width="6" height="80" rx="3" fill="var(--c-neutral-gray)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-neutral-gray)">调试工具 (Debugging)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">VS Code (--inspect)</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="#64748b">统一入口进程挂载与源码级断点</text>
</g>
<!-- Jest + k6 -->
<g id="card-test" transform="translate(660, 390)">
<rect width="240" height="80" rx="6" fill="var(--c-neutral-gray-light)" stroke="var(--c-neutral-gray)" stroke-width="1" />
<rect width="6" height="80" rx="3" fill="var(--c-neutral-gray)" />
<text x="20" y="24" class="font-sans text-bold" font-size="14" fill="var(--c-neutral-gray)">测试工具 (Testing)</text>
<text x="20" y="46" class="font-mono text-bold" font-size="16" fill="#1e293b">Jest + k6</text>
<text x="20" y="66" class="font-sans" font-size="12" fill="#64748b">服务单元测试与接口负载压测</text>
</g>
<!-- ================== 层级 5包与仓库管理 (Y=500) ================== -->
<!-- npm -->
<g id="card-npm" transform="translate(380, 480)">
<rect width="240" height="60" rx="6" fill="var(--c-neutral-gray-light)" stroke="var(--c-neutral-gray)" stroke-width="1" />
<text x="120" y="25" text-anchor="middle" class="font-sans text-bold" font-size="14" fill="var(--c-neutral-gray)">包管理 (Package Config)</text>
<text x="120" y="45" text-anchor="middle" class="font-mono text-bold" font-size="14" fill="#1e293b">npm (单一 package.json)</text>
</g>
</g>
</g>
<!-- ==========================================
3. 底部图例与注释块 (Legend & Key Block)
向下调整布局至 Y=890 适应新高度
=========================================== -->
<g id="legend" transform="translate(500, 890)">
<!-- 统一的半透明背景容器 -->
<rect x="-420" y="-16" width="840" height="40" rx="4" fill="rgba(255, 255, 255, 0.9)" stroke="var(--c-neutral-gray)" stroke-width="0.5" />
<g transform="translate(-400, 0)">
<!-- 图例引导文本 -->
<text x="0" y="8" class="font-sans text-bold" font-size="12" fill="var(--c-neutral-gray)">图例说明:</text>
<!-- 图例项 1: Cloud/External -->
<g transform="translate(80, 0)">
<rect x="0" y="-2" width="12" height="12" rx="2" fill="var(--c-cloud-blue)" />
<text x="18" y="8" class="font-mono" font-size="12" fill="var(--c-neutral-gray)">接口/外部协议 (Interface)</text>
</g>
<!-- 图例项 2: Local/Core -->
<g transform="translate(260, 0)">
<rect x="0" y="-2" width="12" height="12" rx="2" fill="var(--c-local-green)" />
<text x="18" y="8" class="font-mono" font-size="12" fill="var(--c-neutral-gray)">核心引擎/计算 (Core/Sync)</text>
</g>
<!-- 图例项 3: Network I/O -->
<g transform="translate(440, 0)">
<rect x="0" y="-2" width="12" height="12" rx="2" fill="var(--c-risk-amber)" />
<text x="18" y="8" class="font-mono" font-size="12" fill="var(--c-neutral-gray)">网络/异步流 (Async I/O)</text>
</g>
<!-- 图例项 4: Engineering -->
<g transform="translate(620, 0)">
<rect x="0" y="-2" width="12" height="12" rx="2" fill="var(--c-neutral-gray)" />
<text x="18" y="8" class="font-mono" font-size="12" fill="var(--c-neutral-gray)">基建/工具 (DevTools)</text>
</g>
</g>
</g>
<!--
===========================================================================
Layer 4: 物理存储与图谱层 (PKM Storage Layer)
===========================================================================
-->
<g id="layer-pkm" transform="translate(100, 790)">
<text x="0" y="0" class="font-sans title-main">Layer 4: 数据存储与个人图谱化 (PKM Data Persistence)</text>
<line x1="500" y1="-30" x2="500" y2="15" stroke="var(--c-local-green)" stroke-width="3" stroke-dasharray="4 4" marker-end="url(#arrow-green)" />
<rect x="0" y="30" width="1000" height="80" rx="8" fill="var(--c-local-green-light)" stroke="var(--c-local-green)" stroke-width="2" />
<!-- Storage Cylinder Icon -->
<path d="M 40 55 A 25 10 0 1 0 90 55 V 85 A 25 10 0 1 1 40 85 Z" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="2"/>
<ellipse cx="65" cy="55" rx="25" ry="10" fill="#FFFFFF" stroke="var(--c-local-green)" stroke-width="2"/>
<text x="120" y="65" class="font-sans title-sub">本地个人知识库 (Local Vault)</text>
<text x="120" y="85" class="font-mono desc-text">Obsidian / Logseq Graph System</text>
<!-- Data Spec Badges -->
<rect x="420" y="55" width="180" height="30" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="510" y="75" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">双向链接 [[文献名称]] 编排</text>
<rect x="620" y="55" width="160" height="30" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="700" y="75" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">自动化文献目录索引池</text>
</g>
<!--
===========================================================================
Layer 5: 工程化与运维安全 (Engineering & Security)
===========================================================================
-->
<g id="layer-engineering" transform="translate(100, 930)">
<text x="0" y="0" class="font-sans title-main">Layer 5: 架构运维管控与安全基线 (Engineering &amp; Security)</text>
<rect x="0" y="15" width="1000" height="60" rx="8" fill="var(--c-gov-blue-light)" stroke="var(--c-gov-blue)" stroke-width="2" />
<!-- Security Badge 1 -->
<rect x="30" y="30" width="280" height="30" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="170" y="50" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">零信任架构 (不可信负载防范)</text>
<!-- Security Badge 2 -->
<rect x="340" y="30" width="280" height="30" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="480" y="50" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">.env.example 隔离敏感凭证</text>
<!-- Performance Badge -->
<rect x="650" y="30" width="320" height="30" rx="4" fill="#FFFFFF" stroke="var(--c-gov-blue)" />
<text x="810" y="50" text-anchor="middle" class="font-mono tech-badge" fill="var(--c-gov-blue)">异步非阻塞事件流 (高并发处理能力)</text>
</g>
<!--
===========================================================================
底部图例与注释块 (Legend & Key Block)
===========================================================================
-->
<g id="legend" transform="translate(600, 1050)">
<rect x="-440" y="-16" width="880" height="40" rx="4" fill="rgba(255, 255, 255, 0.9)" stroke="var(--c-neutral-gray)" stroke-width="0.5"/>
<g transform="translate(-420, 0)">
<text x="0" y="8" class="font-sans" font-size="13" font-weight="bold" fill="var(--c-neutral-gray)">语义图例说明:</text>
<!-- 云端/外部 -->
<g transform="translate(110, 0)">
<rect x="-6" y="-6" width="12" height="12" rx="2" fill="var(--c-cloud-blue)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">云端服务 / 外部资源</text>
</g>
<!-- 本地/核心 -->
<g transform="translate(265, 0)">
<rect x="-6" y="-6" width="12" height="12" rx="2" fill="var(--c-local-green)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">本地服务 / 核心引擎</text>
</g>
<!-- 风险/高负载 -->
<g transform="translate(420, 0)">
<rect x="-6" y="-6" width="12" height="12" rx="2" fill="var(--c-risk-amber)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">高频计算 / 网络爬取</text>
</g>
<!-- 治理/安全 -->
<g transform="translate(575, 0)">
<rect x="-6" y="-6" width="12" height="12" rx="2" fill="var(--c-gov-blue)" />
<text x="12" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">治理规范 / 安全控制</text>
</g>
<!-- 逻辑边界 -->
<g transform="translate(730, 0)">
<rect x="-8" y="-8" width="16" height="16" rx="2" fill="transparent" stroke="var(--c-neutral-gray)" stroke-dasharray="2 2" stroke-width="1.5" />
<text x="14" y="8" class="font-sans" font-size="12" fill="var(--c-neutral-gray)">逻辑边界 / 虚拟容器</text>
</g>
</g>
</g>
<!--
===========================================================================
底部许可声明
===========================================================================
-->
<text x="600" y="1140" text-anchor="middle" class="font-sans" font-size="11" fill="var(--c-neutral-gray)">
本作品采用 CC-BY-SA 4.0 进行许可,© 2025-2026 Gitconomy Research社区
<!-- ==========================================
4. 底部许可声明 (License)
向下调整至 Y=950
=========================================== -->
<g id="license" transform="translate(500, 950)">
<text text-anchor="middle" class="font-sans" font-size="10" fill="#94a3b8">
本作品采用 CC-BY-SA 4.0 进行许可,© 2025-2026 Gitconomy Research
</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 14 KiB