300 lines
25 KiB
HTML
300 lines
25 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>TradingAgents 详细架构与数据流</title>
|
|
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
body {
|
|
font-family: 'Noto Sans Mono CJK SC', 'JetBrains Mono', 'WenQuanYi Zen Hei Mono', monospace;
|
|
background: #020617;
|
|
min-height: 100vh;
|
|
padding: 2rem;
|
|
color: white;
|
|
}
|
|
.container { max-width: 1200px; margin: 0 auto; }
|
|
.header { margin-bottom: 2rem; }
|
|
.header-row { display: flex; align-items: center; gap: 1rem; margin-bottom: 0.5rem; }
|
|
.pulse-dot {
|
|
width: 12px; height: 12px; background: #22d3ee; border-radius: 50%;
|
|
animation: pulse 2s infinite;
|
|
}
|
|
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
|
|
h1 { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.025em; }
|
|
.subtitle { color: #94a3b8; font-size: 0.875rem; margin-left: 1.75rem; }
|
|
.diagram-container {
|
|
background: rgba(15, 23, 42, 0.5); border-radius: 1rem;
|
|
border: 1px solid #1e293b; padding: 1.5rem; overflow-x: auto;
|
|
}
|
|
svg { width: 100%; min-width: 900px; display: block; }
|
|
.cards {
|
|
display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
gap: 1rem; margin-top: 2rem;
|
|
}
|
|
.card {
|
|
background: rgba(15, 23, 42, 0.5); border-radius: 0.75rem;
|
|
border: 1px solid #1e293b; padding: 1.25rem;
|
|
}
|
|
.card-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; }
|
|
.card-dot { width: 8px; height: 8px; border-radius: 50%; }
|
|
.card h3 { font-size: 0.875rem; font-weight: 600; color: #e2e8f0; }
|
|
.card ul { list-style: none; font-size: 0.75rem; color: #94a3b8; line-height: 1.8; }
|
|
.card li::before { content: "• "; color: #64748b; }
|
|
.footer {
|
|
margin-top: 2rem; padding-top: 1rem; border-top: 1px solid #1e293b;
|
|
font-size: 0.75rem; color: #64748b; text-align: center;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<div class="header">
|
|
<div class="header-row">
|
|
<div class="pulse-dot"></div>
|
|
<h1>TradingAgents 详细架构与数据流</h1>
|
|
</div>
|
|
<div class="subtitle">系统架构图 · Hand-Drawn SVG</div>
|
|
</div>
|
|
<div class="diagram-container">
|
|
<svg viewBox="0 0 1100 1160" xmlns="http://www.w3.org/2000/svg" font-family="'Noto Sans Mono CJK SC', 'JetBrains Mono', 'WenQuanYi Zen Hei Mono', monospace">
|
|
<defs>
|
|
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
|
|
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#1e293b" stroke-width="0.5"/>
|
|
</pattern>
|
|
<filter id="dropShadow" x="-50%" y="-50%" width="200%" height="200%">
|
|
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-opacity="0.3"/>
|
|
</filter>
|
|
<marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#64748b"/>
|
|
</marker>
|
|
<marker id="arrowhead-cyan" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#22d3ee"/>
|
|
</marker>
|
|
<marker id="arrowhead-green" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#34d399"/>
|
|
</marker>
|
|
<marker id="arrowhead-rose" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#fb7185"/>
|
|
</marker>
|
|
<marker id="arrowhead-amber" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#fbbf24"/>
|
|
</marker>
|
|
<marker id="arrowhead-purple" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#a78bfa"/>
|
|
</marker>
|
|
</defs>
|
|
<rect width="1100" height="1160" fill="url(#grid)"/>
|
|
<rect x="20" y="285" width="960" height="110" rx="10" fill="rgba(15, 23, 42, 0.3)" stroke="#fbbf24" stroke-width="1.5" stroke-dasharray="5,3"/>
|
|
<rect x="35" y="277" width="90" height="16" fill="#0f172a"/>
|
|
<text x="80" y="288" fill="#fbbf24" font-size="9" font-weight="500" text-anchor="middle">分析师团队 (并行)</text>
|
|
<rect x="200" y="415" width="580" height="100" rx="10" fill="rgba(15, 23, 42, 0.3)" stroke="#a78bfa" stroke-width="1.5" stroke-dasharray="5,3"/>
|
|
<rect x="215" y="407" width="90" height="16" fill="#0f172a"/>
|
|
<text x="260" y="418" fill="#a78bfa" font-size="9" font-weight="500" text-anchor="middle">多空辩论 (可多轮)</text>
|
|
<rect x="150" y="655" width="820" height="105" rx="10" fill="rgba(15, 23, 42, 0.3)" stroke="#f87171" stroke-width="1.5" stroke-dasharray="5,3"/>
|
|
<rect x="165" y="647" width="42" height="16" fill="#0f172a"/>
|
|
<text x="186" y="658" fill="#f87171" font-size="9" font-weight="500" text-anchor="middle">三级风控</text>
|
|
<rect x="50" y="905" width="950" height="105" rx="10" fill="rgba(15, 23, 42, 0.3)" stroke="#64748b" stroke-width="1.5" stroke-dasharray="5,3"/>
|
|
<rect x="65" y="897" width="42" height="16" fill="#0f172a"/>
|
|
<text x="86" y="908" fill="#64748b" font-size="9" font-weight="500" text-anchor="middle">数据源层</text>
|
|
<path d="M 608.0 47.0 A 15.749999999999998 15.749999999999998 0 0 1 629.0 33.5 A 18.9 18.9 0 0 1 671.0 31.25 A 15.749999999999998 15.749999999999998 0 0 1 692.0 44.75 A 12.6 12.6 0 0 1 685.0 53.75 L 615.0 53.75 A 12.6 12.6 0 0 1 608.0 47.0 Z" fill="rgba(120, 53, 15, 0.3)" stroke="#fbbf24" stroke-width="1.5"/>
|
|
<text x="650" y="46" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">用户浏览器</text>
|
|
<rect x="555" y="95" width="190" height="55" rx="6" fill="#0f172a" stroke="#22d3ee" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="555" y="95" width="190" height="55" rx="6" fill="rgba(8, 51, 68, 0.4)" stroke="#22d3ee" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="650" y="113" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Web Server (FastAPI)
|
|
后台异步分析任务</text>
|
|
<rect x="545" y="185" width="210" height="55" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="545" y="185" width="210" height="55" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="650" y="203" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">TradingAgents Graph
|
|
(LangGraph StateGraph)</text>
|
|
<text x="650" y="217" fill="#94a3b8" font-size="8" font-weight="normal" text-anchor="middle">hexagon</text>
|
|
<rect x="50" y="310" width="150" height="60" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="50" y="310" width="150" height="60" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="125" y="328" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">市场分析师
|
|
行情+技术指标</text>
|
|
<rect x="240" y="310" width="140" height="60" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="240" y="310" width="140" height="60" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="310" y="328" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">社媒分析师
|
|
舆论情绪</text>
|
|
<rect x="420" y="310" width="150" height="60" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="420" y="310" width="150" height="60" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="495" y="328" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">新闻分析师
|
|
个股+宏观新闻</text>
|
|
<rect x="610" y="310" width="150" height="60" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="610" y="310" width="150" height="60" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="685" y="328" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">基本面分析师
|
|
三表+估值</text>
|
|
<rect x="810" y="310" width="140" height="60" rx="6" fill="#0f172a" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="810" y="310" width="140" height="60" rx="6" fill="rgba(136, 19, 55, 0.4)" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="880" y="328" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">研究经理
|
|
汇总4份报告</text>
|
|
<rect x="230" y="440" width="140" height="50" rx="6" fill="#0f172a" stroke="#22d3ee" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="230" y="440" width="140" height="50" rx="6" fill="rgba(8, 51, 68, 0.4)" stroke="#22d3ee" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="300" y="458" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Bull 多头
|
|
研究员</text>
|
|
<rect x="420" y="440" width="140" height="50" rx="6" fill="#0f172a" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="420" y="440" width="140" height="50" rx="6" fill="rgba(136, 19, 55, 0.4)" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="490" y="458" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Bear 空头
|
|
研究员</text>
|
|
<rect x="610" y="440" width="140" height="50" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="610" y="440" width="140" height="50" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="680" y="458" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">辩论裁判
|
|
评估论据</text>
|
|
<rect x="545" y="560" width="210" height="55" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="545" y="560" width="210" height="55" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="650" y="578" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Trader 交易员
|
|
综合辩论→决策草案</text>
|
|
<text x="650" y="592" fill="#94a3b8" font-size="8" font-weight="normal" text-anchor="middle">hexagon</text>
|
|
<rect x="190" y="680" width="140" height="55" rx="6" fill="#0f172a" stroke="#22d3ee" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="190" y="680" width="140" height="55" rx="6" fill="rgba(8, 51, 68, 0.4)" stroke="#22d3ee" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="260" y="698" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Aggressive
|
|
激进风控</text>
|
|
<rect x="390" y="680" width="145" height="55" rx="6" fill="#0f172a" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="390" y="680" width="145" height="55" rx="6" fill="rgba(136, 19, 55, 0.4)" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="462" y="698" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Conservative
|
|
保守风控</text>
|
|
<rect x="590" y="680" width="140" height="55" rx="6" fill="#0f172a" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="590" y="680" width="140" height="55" rx="6" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="660" y="698" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Neutral
|
|
中立风控</text>
|
|
<rect x="800" y="680" width="140" height="55" rx="6" fill="#0f172a" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<rect x="800" y="680" width="140" height="55" rx="6" fill="rgba(136, 19, 55, 0.4)" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="870" y="698" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Risk Judge
|
|
风控终审</text>
|
|
<path d="M 584.0 833.0 A 19.25 19.25 0 0 1 617.0 816.5 A 23.099999999999998 23.099999999999998 0 0 1 683.0 813.75 A 19.25 19.25 0 0 1 716.0 830.25 A 15.4 15.4 0 0 1 705.0 841.25 L 595.0 841.25 A 15.4 15.4 0 0 1 584.0 833.0 Z" fill="rgba(120, 53, 15, 0.3)" stroke="#fbbf24" stroke-width="1.5"/>
|
|
<text x="650" y="831" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">输出结果
|
|
分析报告 + 交易信号</text>
|
|
<path d="M 80 940 L 80 975 A 92 10 0 0 0 265 975 L 265 940 A 92 10 0 0 0 80 940 Z" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<ellipse cx="172" cy="940" rx="92" ry="10" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<text x="172" y="961" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">akshare 主数据源
|
|
A股/港股/美股/新闻</text>
|
|
<path d="M 320 940 L 320 975 A 82 10 0 0 0 485 975 L 485 940 A 82 10 0 0 0 320 940 Z" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<ellipse cx="402" cy="940" rx="82" ry="10" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<text x="402" y="961" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">yfinance 备用1
|
|
美股+内部交易</text>
|
|
<path d="M 540 940 L 540 975 A 82 10 0 0 0 705 975 L 705 940 A 82 10 0 0 0 540 940 Z" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<ellipse cx="622" cy="940" rx="82" ry="10" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<text x="622" y="961" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">Alpha Vantage 备用2
|
|
美国市场备选</text>
|
|
<path d="M 780 940 L 780 975 A 77 10 0 0 0 935 975 L 935 940 A 77 10 0 0 0 780 940 Z" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<ellipse cx="857" cy="940" rx="77" ry="10" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
<text x="857" y="961" fill="#e2e8f0" font-size="11" font-weight="600" text-anchor="middle">DeepSeek LLM
|
|
推理引擎</text>
|
|
<line x1="650" y1="65" x2="650" y2="95" stroke="POST /api/analyze" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="626" y="72" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="650" y="83" fill="POST /api/analyze" font-size="8" font-weight="normal" text-anchor="middle">#22d3ee</text>
|
|
<line x1="650" y1="150" x2="650" y2="185" stroke="启动分析" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="626" y="159" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="650" y="170" fill="启动分析" font-size="8" font-weight="normal" text-anchor="middle">#22d3ee</text>
|
|
<line x1="650" y1="240" x2="125" y2="310" stroke="分发" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="363" y="267" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="387" y="278" fill="分发" font-size="8" font-weight="normal" text-anchor="middle">#fbbf24</text>
|
|
<line x1="650" y1="240" x2="310" y2="310" stroke="分发" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="456" y="267" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="480" y="278" fill="分发" font-size="8" font-weight="normal" text-anchor="middle">#fbbf24</text>
|
|
<line x1="650" y1="240" x2="495" y2="310" stroke="分发" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="548" y="267" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="572" y="278" fill="分发" font-size="8" font-weight="normal" text-anchor="middle">#fbbf24</text>
|
|
<line x1="650" y1="240" x2="685" y2="310" stroke="分发" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="643" y="267" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="667" y="278" fill="分发" font-size="8" font-weight="normal" text-anchor="middle">#fbbf24</text>
|
|
<line x1="200" y1="340" x2="810" y2="340" stroke="报告" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="481" y="332" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="505" y="343" fill="报告" font-size="8" font-weight="normal" text-anchor="middle">#34d399</text>
|
|
<line x1="380" y1="340" x2="810" y2="340" stroke="报告" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="571" y="332" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="595" y="343" fill="报告" font-size="8" font-weight="normal" text-anchor="middle">#34d399</text>
|
|
<line x1="570" y1="340" x2="810" y2="340" stroke="报告" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="666" y="332" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="690" y="343" fill="报告" font-size="8" font-weight="normal" text-anchor="middle">#34d399</text>
|
|
<line x1="760" y1="340" x2="810" y2="340" stroke="报告" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="761" y="332" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="785" y="343" fill="报告" font-size="8" font-weight="normal" text-anchor="middle">#34d399</text>
|
|
<line x1="880" y1="370" x2="300" y2="440" stroke="启动辩论" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="566" y="397" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="590" y="408" fill="启动辩论" font-size="8" font-weight="normal" text-anchor="middle">#a78bfa</text>
|
|
<line x1="880" y1="370" x2="490" y2="440" stroke="启动辩论" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="661" y="397" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="685" y="408" fill="启动辩论" font-size="8" font-weight="normal" text-anchor="middle">#a78bfa</text>
|
|
<line x1="370" y1="465" x2="610" y2="465" stroke="多方论据" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="466" y="457" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="490" y="468" fill="多方论据" font-size="8" font-weight="normal" text-anchor="middle">#f87171</text>
|
|
<line x1="560" y1="465" x2="610" y2="465" stroke="空方论据" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="561" y="457" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="585" y="468" fill="空方论据" font-size="8" font-weight="normal" text-anchor="middle">#f87171</text>
|
|
<line x1="680" y1="490" x2="650" y2="560" stroke="辩论摘要" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="641" y="517" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="665" y="528" fill="辩论摘要" font-size="8" font-weight="normal" text-anchor="middle">#fb923c</text>
|
|
<line x1="650" y1="615" x2="260" y2="680" stroke="草案" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="431" y="639" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="455" y="650" fill="草案" font-size="8" font-weight="normal" text-anchor="middle">#38bdf8</text>
|
|
<line x1="650" y1="615" x2="462" y2="680" stroke="草案" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="532" y="639" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="556" y="650" fill="草案" font-size="8" font-weight="normal" text-anchor="middle">#38bdf8</text>
|
|
<line x1="650" y1="615" x2="660" y2="680" stroke="草案" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="631" y="639" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="655" y="650" fill="草案" font-size="8" font-weight="normal" text-anchor="middle">#38bdf8</text>
|
|
<line x1="330" y1="707" x2="800" y2="707" stroke="评估" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="541" y="699" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="565" y="710" fill="评估" font-size="8" font-weight="normal" text-anchor="middle">#34d399</text>
|
|
<line x1="535" y1="707" x2="800" y2="707" stroke="评估" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="643" y="699" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="667" y="710" fill="评估" font-size="8" font-weight="normal" text-anchor="middle">#34d399</text>
|
|
<line x1="730" y1="707" x2="800" y2="707" stroke="评估" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="741" y="699" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="765" y="710" fill="评估" font-size="8" font-weight="normal" text-anchor="middle">#34d399</text>
|
|
<line x1="870" y1="735" x2="650" y2="800" stroke="最终决策" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<rect x="736" y="759" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="760" y="770" fill="最终决策" font-size="8" font-weight="normal" text-anchor="middle">#22d3ee</text>
|
|
<line x1="125" y1="370" x2="172" y2="930" stroke="数据" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="124" y="642" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="148" y="653" fill="数据" font-size="8" font-weight="normal" text-anchor="middle">#94a3b8</text>
|
|
<line x1="685" y1="370" x2="172" y2="930" stroke="数据" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="404" y="642" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="428" y="653" fill="数据" font-size="8" font-weight="normal" text-anchor="middle">#94a3b8</text>
|
|
<line x1="495" y1="370" x2="172" y2="930" stroke="数据" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="309" y="642" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="333" y="653" fill="数据" font-size="8" font-weight="normal" text-anchor="middle">#94a3b8</text>
|
|
<line x1="265" y1="957" x2="320" y2="957" stroke="fallback" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="268" y="949" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="292" y="960" fill="fallback" font-size="8" font-weight="normal" text-anchor="middle">#64748b</text>
|
|
<line x1="485" y1="957" x2="540" y2="957" stroke="fallback" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="488" y="949" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="512" y="960" fill="fallback" font-size="8" font-weight="normal" text-anchor="middle">#64748b</text>
|
|
<line x1="300" y1="490" x2="857" y2="930" stroke="推理" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="554" y="702" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="578" y="713" fill="推理" font-size="8" font-weight="normal" text-anchor="middle">#94a3b8</text>
|
|
<line x1="490" y1="490" x2="857" y2="930" stroke="推理" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrowhead)"/>
|
|
<rect x="649" y="702" width="49" height="14" fill="#0f172a" rx="2"/>
|
|
<text x="673" y="713" fill="推理" font-size="8" font-weight="normal" text-anchor="middle">#94a3b8</text>
|
|
<rect x="30" y="1090" width="850" height="60" rx="6" fill="rgba(15, 23, 42, 0.8)" stroke="#1e293b" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="45" y="1110" fill="#64748b" font-size="10" font-weight="normal" text-anchor="start">组件类型:</text>
|
|
<rect x="120" y="1098" width="16" height="16" rx="3" fill="rgba(8, 51, 68, 0.4)" stroke="#22d3ee" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="142" y="1110" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">前端</text>
|
|
<rect x="195" y="1098" width="16" height="16" rx="3" fill="rgba(6, 78, 59, 0.4)" stroke="#34d399" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="217" y="1110" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">后端</text>
|
|
<rect x="270" y="1098" width="16" height="16" rx="3" fill="rgba(76, 29, 149, 0.4)" stroke="#a78bfa" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="292" y="1110" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">数据库</text>
|
|
<rect x="345" y="1098" width="16" height="16" rx="3" fill="rgba(120, 53, 15, 0.3)" stroke="#fbbf24" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="367" y="1110" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">外部API</text>
|
|
<rect x="420" y="1098" width="16" height="16" rx="3" fill="rgba(136, 19, 55, 0.4)" stroke="#fb7185" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="442" y="1110" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">认证</text>
|
|
<rect x="495" y="1098" width="16" height="16" rx="3" fill="rgba(30, 41, 59, 0.5)" stroke="#94a3b8" stroke-width="1.5" opacity="1.0"/>
|
|
<text x="517" y="1110" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">通用</text>
|
|
<text x="45" y="1135" fill="#64748b" font-size="10" font-weight="normal" text-anchor="start">连接类型:</text>
|
|
<line x1="120" y1="1130" x2="140" y2="1130" stroke="#64748b" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
|
<text x="148" y="1134" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">数据流</text>
|
|
<line x1="195" y1="1130" x2="215" y2="1130" stroke="#fb7185" stroke-width="1.5" marker-end="url(#arrowhead-rose)"/>
|
|
<text x="223" y="1134" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">认证流</text>
|
|
<line x1="270" y1="1130" x2="290" y2="1130" stroke="#fbbf24" stroke-width="1.5" marker-end="url(#arrowhead-amber)"/>
|
|
<text x="298" y="1134" fill="#94a3b8" font-size="9" font-weight="normal" text-anchor="start">配置</text>
|
|
</svg>
|
|
</div>
|
|
|
|
<div class="footer">
|
|
生成时间: 2026-05-05 19:42 | Hand-Drawn Diagram · Zero Token Cost
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html> |