{"id":70903,"date":"2026-02-02T18:49:17","date_gmt":"2026-02-02T10:49:17","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/70903.html"},"modified":"2026-02-02T18:49:17","modified_gmt":"2026-02-02T10:49:17","slug":"%e8%87%aa%e5%8a%a8%e5%8c%96%e3%80%81%e8%84%9a%e6%9c%ac%e6%8a%80%e6%9c%af%e3%80%81ai%e7%b3%bb%e7%bb%9f%e3%80%81%e6%99%ba%e8%83%bd%e4%bd%93%e3%80%81%e7%9f%a5%e8%af%86%e5%ba%93%e7%9a%84%e6%a6%82%e5%bf%b5","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/70903.html","title":{"rendered":"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236"},"content":{"rendered":"<h2>\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u673a\u5668\u4eba\u3001\u4eba\u5de5\u667a\u80fd\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236<\/h2>\n<h3>1. \u6982\u5ff5\u5b9a\u4e49\u4e0e\u5c42\u7ea7\u5173\u7cfb<\/h3>\n<h4>1.1 \u6838\u5fc3\u6982\u5ff5\u5b9a\u4e49<\/h4>\n<table>\n<tr>\u6982\u5ff5\u5b9a\u4e49\u8303\u7574<\/tr>\n<tbody>\n<tr>\n<td>\u81ea\u52a8\u5316<\/td>\n<td>\u4f7f\u7528\u6280\u672f\u4f7f\u6d41\u7a0b\u3001\u7cfb\u7edf\u6216\u8bbe\u5907\u5728\u6700\u5c11\u6216\u65e0\u9700\u4eba\u5de5\u5e72\u9884\u4e0b\u8fd0\u884c<\/td>\n<td>\u5e7f\u4e49\u6982\u5ff5<\/td>\n<\/tr>\n<tr>\n<td>\u811a\u672c\u6280\u672f<\/td>\n<td>\u4f7f\u7528\u811a\u672c\u8bed\u8a00\u7f16\u5199\u7a0b\u5e8f&#xff0c;\u81ea\u52a8\u5316\u6267\u884c\u7279\u5b9a\u4efb\u52a1<\/td>\n<td>\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u5177\u4f53\u6280\u672f\u624b\u6bb5<\/td>\n<\/tr>\n<tr>\n<td>\u4eba\u5de5\u667a\u80fd<\/td>\n<td>\u4f7f\u673a\u5668\u6a21\u62df\u4eba\u7c7b\u667a\u80fd\u884c\u4e3a\u7684\u6280\u672f\u79d1\u5b66<\/td>\n<td>\u7406\u8bba\u6846\u67b6\u4e0e\u6280\u672f\u9886\u57df<\/td>\n<\/tr>\n<tr>\n<td>AI\u7cfb\u7edf<\/td>\n<td>\u57fa\u4e8e\u4eba\u5de5\u667a\u80fd\u7406\u8bba\u6784\u5efa\u7684\u5b8c\u6574\u6280\u672f\u7cfb\u7edf<\/td>\n<td>\u5177\u4f53\u5b9e\u73b0<\/td>\n<\/tr>\n<tr>\n<td>\u667a\u80fd\u4f53<\/td>\n<td>\u80fd\u591f\u611f\u77e5\u73af\u5883\u5e76\u81ea\u4e3b\u884c\u52a8\u4ee5\u5b9e\u73b0\u76ee\u6807\u7684\u5b9e\u4f53<\/td>\n<td>AI\u7cfb\u7edf\u7684\u5177\u4f53\u8868\u73b0\u5f62\u5f0f<\/td>\n<\/tr>\n<tr>\n<td>\u673a\u5668\u4eba<\/td>\n<td>\u80fd\u591f\u6267\u884c\u7269\u7406\u52a8\u4f5c\u7684\u81ea\u52a8\u5316\u673a\u5668&#xff0c;\u53ef\u80fd\u5305\u542bAI\u7cfb\u7edf<\/td>\n<td>\u7269\u7406\u5b9e\u73b0\u8f7d\u4f53<\/td>\n<\/tr>\n<tr>\n<td>\u77e5\u8bc6\u5e93<\/td>\n<td>\u7ed3\u6784\u5316\u5b58\u50a8\u7684\u77e5\u8bc6\u96c6\u5408&#xff0c;\u652f\u6301\u63a8\u7406\u548c\u51b3\u7b56<\/td>\n<td>\u667a\u80fd\u7cfb\u7edf\u7684\u6838\u5fc3\u7ec4\u4ef6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>1.2 \u6982\u5ff5\u5173\u7cfbUML\u56fe<\/h4>\n<p>  #mermaid-svg-GgODh7U6tCSkHm3G{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GgODh7U6tCSkHm3G .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GgODh7U6tCSkHm3G .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GgODh7U6tCSkHm3G .error-icon{fill:#552222;}#mermaid-svg-GgODh7U6tCSkHm3G .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GgODh7U6tCSkHm3G .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GgODh7U6tCSkHm3G .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GgODh7U6tCSkHm3G .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GgODh7U6tCSkHm3G .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GgODh7U6tCSkHm3G .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GgODh7U6tCSkHm3G .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GgODh7U6tCSkHm3G .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GgODh7U6tCSkHm3G .marker.cross{stroke:#333333;}#mermaid-svg-GgODh7U6tCSkHm3G svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GgODh7U6tCSkHm3G p{margin:0;}#mermaid-svg-GgODh7U6tCSkHm3G g.classGroup text{fill:#9370DB;stroke:none;font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-GgODh7U6tCSkHm3G g.classGroup text .title{font-weight:bolder;}#mermaid-svg-GgODh7U6tCSkHm3G .nodeLabel,#mermaid-svg-GgODh7U6tCSkHm3G .edgeLabel{color:#131300;}#mermaid-svg-GgODh7U6tCSkHm3G .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-GgODh7U6tCSkHm3G .label text{fill:#131300;}#mermaid-svg-GgODh7U6tCSkHm3G .labelBkg{background:#ECECFF;}#mermaid-svg-GgODh7U6tCSkHm3G .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-GgODh7U6tCSkHm3G .classTitle{font-weight:bolder;}#mermaid-svg-GgODh7U6tCSkHm3G .node rect,#mermaid-svg-GgODh7U6tCSkHm3G .node circle,#mermaid-svg-GgODh7U6tCSkHm3G .node ellipse,#mermaid-svg-GgODh7U6tCSkHm3G .node polygon,#mermaid-svg-GgODh7U6tCSkHm3G .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GgODh7U6tCSkHm3G .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G g.clickable{cursor:pointer;}#mermaid-svg-GgODh7U6tCSkHm3G g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-GgODh7U6tCSkHm3G g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-GgODh7U6tCSkHm3G .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-GgODh7U6tCSkHm3G .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-GgODh7U6tCSkHm3G .dashed-line{stroke-dasharray:3;}#mermaid-svg-GgODh7U6tCSkHm3G .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-GgODh7U6tCSkHm3G #compositionStart,#mermaid-svg-GgODh7U6tCSkHm3G .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #compositionEnd,#mermaid-svg-GgODh7U6tCSkHm3G .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #dependencyStart,#mermaid-svg-GgODh7U6tCSkHm3G .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #dependencyStart,#mermaid-svg-GgODh7U6tCSkHm3G .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #extensionStart,#mermaid-svg-GgODh7U6tCSkHm3G .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #extensionEnd,#mermaid-svg-GgODh7U6tCSkHm3G .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #aggregationStart,#mermaid-svg-GgODh7U6tCSkHm3G .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #aggregationEnd,#mermaid-svg-GgODh7U6tCSkHm3G .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #lollipopStart,#mermaid-svg-GgODh7U6tCSkHm3G .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G #lollipopEnd,#mermaid-svg-GgODh7U6tCSkHm3G .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GgODh7U6tCSkHm3G .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-GgODh7U6tCSkHm3G .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GgODh7U6tCSkHm3G .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GgODh7U6tCSkHm3G .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GgODh7U6tCSkHm3G :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>\u5305\u542b<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>\u53ef\u63a7\u5236<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>\u652f\u6301\u5b9e\u73b0<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\">1<\/span><\/p>\n<p>         <span class=\"edgeLabel\">1<\/span><\/p>\n<p>         <span class=\"edgeLabel\">1<\/span><\/p>\n<p>        <span class=\"edgeLabel\">1..*<\/span><\/p>\n<p>        <span class=\"edgeLabel\">1<\/span><\/p>\n<p>        <span class=\"edgeLabel\">0..*<\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>Automation<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u6267\u884c\u81ea\u52a8\u5316\u6d41\u7a0b()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>ScriptingTechnology<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u89e3\u91ca\u578b\u6267\u884c()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u4efb\u52a1\u81ea\u52a8\u5316()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>ArtificialIntelligence<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u5b66\u4e60\u80fd\u529b()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u63a8\u7406\u80fd\u529b()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u611f\u77e5\u80fd\u529b()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>AISystem<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u6570\u636e\u5904\u7406()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u6a21\u578b\u63a8\u7406()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u51b3\u7b56\u751f\u6210()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>Agent<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u611f\u77e5\u73af\u5883()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u5236\u5b9a\u7b56\u7565()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u6267\u884c\u52a8\u4f5c()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u8bc4\u4f30\u53cd\u9988()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>Robot<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u7269\u7406\u4ea4\u4e92()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u4f20\u611f\u5668\u96c6\u6210()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u8fd0\u52a8\u63a7\u5236()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>KnowledgeBase<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u77e5\u8bc6\u8868\u793a()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u77e5\u8bc6\u68c0\u7d22()<\/p>\n<p><\/span><\/p>\n<p>          <span class=\"nodeLabel markdown-node-label\"><\/p>\n<p>&#043;\u77e5\u8bc6\u63a8\u7406()<\/p>\n<p><\/span><\/p>\n<h3>2. \u6838\u5fc3\u5de5\u4f5c\u673a\u5236\u4e0e\u539f\u7406<\/h3>\n<h4>2.1 \u81ea\u52a8\u5316\u7cfb\u7edf\u7684\u5206\u5c42\u67b6\u6784<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502           \u5e94\u7528\u5c42 (Application)           \u2502<br \/>\n\u2502  \u2022 \u4e1a\u52a1\u6d41\u7a0b\u81ea\u52a8\u5316                       \u2502<br \/>\n\u2502  \u2022 \u7528\u6237\u754c\u9762\u81ea\u52a8\u5316                       \u2502<br \/>\n\u2502  \u2022 \u6570\u636e\u6d41\u7a0b\u81ea\u52a8\u5316                       \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                  \u2502<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502          \u63a7\u5236\u5c42 (Control)                \u2502<br \/>\n\u2502  \u2022 \u5de5\u4f5c\u6d41\u5f15\u64ce                           \u2502<br \/>\n\u2502  \u2022 \u8c03\u5ea6\u5668                               \u2502<br \/>\n\u2502  \u2022 \u51b3\u7b56\u903b\u8f91                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                  \u2502<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502          \u6267\u884c\u5c42 (Execution)              \u2502<br \/>\n\u2502  \u2022 \u811a\u672c\u89e3\u91ca\u5668                           \u2502<br \/>\n\u2502  \u2022 API\u8c03\u7528\u6a21\u5757                          \u2502<br \/>\n\u2502  \u2022 \u8bbe\u5907\u63a7\u5236\u63a5\u53e3                         \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                  \u2502<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502          \u611f\u77e5\u5c42 (Perception)             \u2502<br \/>\n\u2502  \u2022 \u6570\u636e\u91c7\u96c6                             \u2502<br \/>\n\u2502  \u2022 \u4f20\u611f\u5668\u63a5\u53e3                           \u2502<br \/>\n\u2502  \u2022 \u73af\u5883\u76d1\u6d4b                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h4>2.2 AI\u7cfb\u7edf\u6838\u5fc3\u539f\u7406<\/h4>\n<h5>2.2.1 \u673a\u5668\u5b66\u4e60\u5de5\u4f5c\u6d41\u7a0b<\/h5>\n<p>\u6570\u636e\u91c7\u96c6 \u2192 \u6570\u636e\u9884\u5904\u7406 \u2192 \u7279\u5f81\u5de5\u7a0b \u2192 \u6a21\u578b\u8bad\u7ec3 \u2192 \u6a21\u578b\u8bc4\u4f30 \u2192 \u90e8\u7f72\u63a8\u7406<br \/>\n    \u2502           \u2502           \u2502           \u2502           \u2502          \u2502<br \/>\n    \u25bc           \u25bc           \u25bc           \u25bc           \u25bc          \u25bc<br \/>\n\u4f20\u611f\u5668     \u6e05\u6d17\/\u5f52\u4e00\u5316   \u7279\u5f81\u63d0\u53d6   \u53cd\u5411\u4f20\u64ad   \u51c6\u786e\u7387\/\u53ec\u56de\u7387  \u9884\u6d4b\u670d\u52a1<br \/>\n    \u2502           \u2502           \u2502           \u2502           \u2502          \u2502<br \/>\n\u6570\u636e\u5e93    \u6570\u636e\u589e\u5f3a       \u964d\u7ef4       \u4f18\u5316\u5668     \u4ea4\u53c9\u9a8c\u8bc1     \u5b9e\u65f6\u63a8\u7406<\/p>\n<h5>2.2.2 \u667a\u80fd\u4f53\u67b6\u6784(POMDP\u6a21\u578b)<\/h5>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                   \u667a\u80fd\u4f53(Agent)                          \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u72b6\u6001s_t \u2208 S          \u7b56\u7565\u03c0(a|s)          \u5956\u52b1R(s,a)     \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502  \u4fe1\u5ff5\u66f4\u65b0   \u2502        \u884c\u52a8\u9009\u62e9       \u2502    \u4ef7\u503c\u8bc4\u4f30       \u2502<br \/>\n\u2502  b&#039; &#061; \u03c4(b,a,o)   a ~ \u03c0(\u00b7|b)         \u2502   V(b) &#061; E[\u03a3\u03b3^t r_t]\u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n       \u2502                 \u2502                    \u2502<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502  \u89c2\u5bdf      \u2502    \u2502  \u884c\u52a8      \u2502    \u2502  \u73af\u5883\u6a21\u578b      \u2502<br \/>\n\u2502  o \u2208 \u03a9     \u2502    \u2502  a \u2208 A     \u2502    \u2502  T(s&#039;|s,a)     \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n       \u2502                 \u2502                    \u2502<br \/>\n       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                         \u2502<br \/>\n                  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n                  \u2502   \u73af\u5883       \u2502<br \/>\n                  \u2502  Environment \u2502<br \/>\n                  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h4>2.3 \u77e5\u8bc6\u5e93\u7cfb\u7edf\u67b6\u6784<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u77e5\u8bc6\u5e94\u7528\u5c42                            \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502  \u2022 \u95ee\u7b54\u7cfb\u7edf    \u2022 \u63a8\u8350\u7cfb\u7edf    \u2022 \u51b3\u7b56\u652f\u6301    \u2022 \u8bed\u4e49\u641c\u7d22    \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                           \u2502<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u77e5\u8bc6\u63a8\u7406\u5c42                            \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502  \u2022 \u89c4\u5219\u5f15\u64ce    \u2022 \u672c\u4f53\u63a8\u7406    \u2022 \u903b\u8f91\u63a8\u7406    \u2022 \u6982\u7387\u63a8\u7406    \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                           \u2502<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u77e5\u8bc6\u8868\u793a\u5c42                            \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502  \u2022 \u672c\u4f53(Ontology)      \u2022 \u77e5\u8bc6\u56fe\u8c31      \u2022 \u89c4\u5219\u5e93         \u2502<br \/>\n\u2502  \u2022 \u6846\u67b6(Frame)        \u2022 \u8bed\u4e49\u7f51\u7edc      \u2022 \u6848\u4f8b\u5e93         \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n                           \u2502<br \/>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u77e5\u8bc6\u5b58\u50a8\u5c42                            \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502  \u2022 \u56fe\u6570\u636e\u5e93(Neo4j)    \u2022 RDF\u5b58\u50a8       \u2022 \u5173\u7cfb\u6570\u636e\u5e93      \u2502<br \/>\n\u2502  \u2022 \u6587\u6863\u6570\u636e\u5e93        \u2022 \u5411\u91cf\u6570\u636e\u5e93     \u2022 \u7f13\u5b58\u7cfb\u7edf        \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h3>3. \u811a\u672c\u8bed\u8a00\u6280\u672f\u8be6\u89e3<\/h3>\n<h4>3.1 \u811a\u672c\u8bed\u8a00\u5206\u7c7b\u4e0e\u7279\u6027<\/h4>\n<p>  #mermaid-svg-QX3zSokjRt3bE3ty{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QX3zSokjRt3bE3ty .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QX3zSokjRt3bE3ty .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QX3zSokjRt3bE3ty .error-icon{fill:#552222;}#mermaid-svg-QX3zSokjRt3bE3ty .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QX3zSokjRt3bE3ty .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QX3zSokjRt3bE3ty .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QX3zSokjRt3bE3ty .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QX3zSokjRt3bE3ty .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QX3zSokjRt3bE3ty .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QX3zSokjRt3bE3ty .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QX3zSokjRt3bE3ty .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QX3zSokjRt3bE3ty .marker.cross{stroke:#333333;}#mermaid-svg-QX3zSokjRt3bE3ty svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QX3zSokjRt3bE3ty p{margin:0;}#mermaid-svg-QX3zSokjRt3bE3ty .edge{stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .section&#8211;1 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section&#8211;1 path,#mermaid-svg-QX3zSokjRt3bE3ty .section&#8211;1 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section&#8211;1 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section&#8211;1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section&#8211;1 text{fill:#ffffff;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon&#8211;1{font-size:40px;color:#ffffff;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge&#8211;1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth&#8211;1{stroke-width:17;}#mermaid-svg-QX3zSokjRt3bE3ty .section&#8211;1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-0 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-0 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-0 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-0 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-0 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-0{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-0{stroke-width:14;}#mermaid-svg-QX3zSokjRt3bE3ty .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-1 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-1 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-1 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-1 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-1 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-1{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-1{stroke-width:11;}#mermaid-svg-QX3zSokjRt3bE3ty .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-2 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-2 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-2 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-2 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-2 text{fill:#ffffff;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-2{stroke-width:8;}#mermaid-svg-QX3zSokjRt3bE3ty .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-3 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-3 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-3 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-3 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-3 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-3{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-3{stroke-width:5;}#mermaid-svg-QX3zSokjRt3bE3ty .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-4 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-4 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-4 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-4 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-4 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-4{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-4{stroke-width:2;}#mermaid-svg-QX3zSokjRt3bE3ty .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-5 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-5 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-5 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-5 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-5 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-5{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-5{stroke-width:-1;}#mermaid-svg-QX3zSokjRt3bE3ty .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-6 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-6 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-6 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-6 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-6 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-6{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-6{stroke-width:-4;}#mermaid-svg-QX3zSokjRt3bE3ty .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-7 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-7 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-7 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-7 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-7 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-7{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-7{stroke-width:-7;}#mermaid-svg-QX3zSokjRt3bE3ty .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-8 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-8 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-8 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-8 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-8 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-8{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-8{stroke-width:-10;}#mermaid-svg-QX3zSokjRt3bE3ty .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-9 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-9 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-9 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-9 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-9 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-9{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-9{stroke-width:-13;}#mermaid-svg-QX3zSokjRt3bE3ty .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-10 rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-10 path,#mermaid-svg-QX3zSokjRt3bE3ty .section-10 circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-10 polygon,#mermaid-svg-QX3zSokjRt3bE3ty .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-10 text{fill:black;}#mermaid-svg-QX3zSokjRt3bE3ty .node-icon-10{font-size:40px;color:black;}#mermaid-svg-QX3zSokjRt3bE3ty .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .edge-depth-10{stroke-width:-16;}#mermaid-svg-QX3zSokjRt3bE3ty .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled,#mermaid-svg-QX3zSokjRt3bE3ty .disabled circle,#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:lightgray;}#mermaid-svg-QX3zSokjRt3bE3ty .disabled text{fill:#efefef;}#mermaid-svg-QX3zSokjRt3bE3ty .section-root rect,#mermaid-svg-QX3zSokjRt3bE3ty .section-root path,#mermaid-svg-QX3zSokjRt3bE3ty .section-root circle,#mermaid-svg-QX3zSokjRt3bE3ty .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-QX3zSokjRt3bE3ty .section-root text{fill:#ffffff;}#mermaid-svg-QX3zSokjRt3bE3ty .section-root span{color:#ffffff;}#mermaid-svg-QX3zSokjRt3bE3ty .section-2 span{color:#ffffff;}#mermaid-svg-QX3zSokjRt3bE3ty .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-QX3zSokjRt3bE3ty .edge{fill:none;}#mermaid-svg-QX3zSokjRt3bE3ty .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-QX3zSokjRt3bE3ty :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u811a\u672c\u8bed\u8a00\u751f\u6001\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7cfb\u7edf\u7ba1\u7406\u7c7b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>Bash<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: Unix\/Linux\u539f\u751f<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: \u7cfb\u7edf\u7ba1\u7406, \u81ea\u52a8\u5316\u90e8\u7f72<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>PowerShell<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: \u9762\u5411\u5bf9\u8c61, .NET\u96c6\u6210<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: Windows\u7ba1\u7406, \u4f01\u4e1a\u81ea\u52a8\u5316<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u901a\u7528\u7f16\u7a0b\u7c7b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>Python<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: \u7b80\u6d01\u6613\u8bfb, \u4e30\u5bcc\u7684\u5e93<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: \u6570\u636e\u5206\u6790, AI\u5f00\u53d1, Web<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>JavaScript\/Node.js<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: \u5f02\u6b65\u975e\u963b\u585e, \u5168\u6808\u80fd\u529b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: Web\u81ea\u52a8\u5316, \u670d\u52a1\u7aef\u811a\u672c<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4e13\u7528\u9886\u57df\u7c7b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>SQL<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: \u58f0\u660e\u5f0f\u67e5\u8be2<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: \u6570\u636e\u5e93\u81ea\u52a8\u5316<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>R<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: \u7edf\u8ba1\u8ba1\u7b97<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: \u6570\u636e\u79d1\u5b66\u81ea\u52a8\u5316<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u914d\u7f6e\u5373\u4ee3\u7801\u7c7b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>YAML\/JSON<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: \u7ed3\u6784\u5316\u914d\u7f6e<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: CI\/CD, \u57fa\u7840\u8bbe\u65bd\u5373\u4ee3\u7801<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>Terraform<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7279\u70b9: \u57fa\u7840\u8bbe\u65bd\u58f0\u660e<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528: \u4e91\u8d44\u6e90\u7f16\u6392<\/p>\n<p><\/span><\/p>\n<h4>3.2 \u5178\u578b\u811a\u672c\u793a\u4f8b<\/h4>\n<h5>3.2.1 Python\u81ea\u52a8\u5316\u811a\u672c\u793a\u4f8b<\/h5>\n<p><span class=\"token comment\">#!\/usr\/bin\/env python3<\/span><br \/>\n<span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n\u667a\u80fd\u6587\u4ef6\u7ba1\u7406\u7cfb\u7edf &#8211; \u7ed3\u5408AI\u548c\u81ea\u52a8\u5316\u7684\u793a\u4f8b<br \/>\n&#034;&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> os<br \/>\n<span class=\"token keyword\">import<\/span> shutil<br \/>\n<span class=\"token keyword\">import<\/span> hashlib<br \/>\n<span class=\"token keyword\">from<\/span> datetime <span class=\"token keyword\">import<\/span> datetime<br \/>\n<span class=\"token keyword\">from<\/span> pathlib <span class=\"token keyword\">import<\/span> Path<br \/>\n<span class=\"token keyword\">from<\/span> typing <span class=\"token keyword\">import<\/span> Dict<span class=\"token punctuation\">,<\/span> List<br \/>\n<span class=\"token keyword\">import<\/span> json<br \/>\n<span class=\"token keyword\">from<\/span> dataclasses <span class=\"token keyword\">import<\/span> dataclass<span class=\"token punctuation\">,<\/span> asdict<br \/>\n<span class=\"token keyword\">from<\/span> enum <span class=\"token keyword\">import<\/span> Enum<br \/>\n<span class=\"token keyword\">import<\/span> logging<\/p>\n<p><span class=\"token comment\"># \u914d\u7f6e\u65e5\u5fd7<\/span><br \/>\nlogging<span class=\"token punctuation\">.<\/span>basicConfig<span class=\"token punctuation\">(<\/span>level<span class=\"token operator\">&#061;<\/span>logging<span class=\"token punctuation\">.<\/span>INFO<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">format<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;%(asctime)s &#8211; %(levelname)s &#8211; %(message)s&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\nlogger <span class=\"token operator\">&#061;<\/span> logging<span class=\"token punctuation\">.<\/span>getLogger<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">FileCategory<\/span><span class=\"token punctuation\">(<\/span>Enum<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u6587\u4ef6\u5206\u7c7b\u679a\u4e3e&#034;&#034;&#034;<\/span><br \/>\n    DOCUMENT <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;documents&#034;<\/span><br \/>\n    IMAGE <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;images&#034;<\/span><br \/>\n    VIDEO <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;videos&#034;<\/span><br \/>\n    CODE <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;code&#034;<\/span><br \/>\n    DATA <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;data&#034;<\/span><br \/>\n    ARCHIVE <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;archives&#034;<\/span><br \/>\n    OTHER <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;other&#034;<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;dataclass<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">FileMetadata<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u6587\u4ef6\u5143\u6570\u636e\u7c7b&#034;&#034;&#034;<\/span><br \/>\n    filename<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    path<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    size<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span><br \/>\n    created<span class=\"token punctuation\">:<\/span> datetime<br \/>\n    modified<span class=\"token punctuation\">:<\/span> datetime<br \/>\n    category<span class=\"token punctuation\">:<\/span> FileCategory<br \/>\n    hash_md5<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    tags<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">None<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">to_dict<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> asdict<span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">IntelligentFileManager<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u667a\u80fd\u6587\u4ef6\u7ba1\u7406\u5668&#034;&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6587\u4ef6\u6269\u5c55\u540d\u5230\u5206\u7c7b\u7684\u6620\u5c04<\/span><br \/>\n    FILE_EXTENSIONS <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        FileCategory<span class=\"token punctuation\">.<\/span>DOCUMENT<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;.pdf&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.doc&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.docx&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.txt&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.md&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.rtf&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        FileCategory<span class=\"token punctuation\">.<\/span>IMAGE<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;.jpg&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.jpeg&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.png&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.gif&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.bmp&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.svg&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        FileCategory<span class=\"token punctuation\">.<\/span>VIDEO<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;.mp4&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.avi&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.mov&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.mkv&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.wmv&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        FileCategory<span class=\"token punctuation\">.<\/span>CODE<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;.py&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.js&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.java&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.cpp&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.html&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.css&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        FileCategory<span class=\"token punctuation\">.<\/span>DATA<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;.csv&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.json&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.xml&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.sql&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.db&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        FileCategory<span class=\"token punctuation\">.<\/span>ARCHIVE<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;.zip&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.tar&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.gz&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.rar&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;.7z&#039;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> knowledge_base_path<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;knowledge_base.json&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>knowledge_base_path <span class=\"token operator\">&#061;<\/span> knowledge_base_path<br \/>\n        self<span class=\"token punctuation\">.<\/span>knowledge_base <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>load_knowledge_base<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>file_index <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">load_knowledge_base<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Dict<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u52a0\u8f7d\u77e5\u8bc6\u5e93&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>exists<span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>knowledge_base_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>knowledge_base_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;r&#039;<\/span><span class=\"token punctuation\">,<\/span> encoding<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;utf-8&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">return<\/span> json<span class=\"token punctuation\">.<\/span>load<span class=\"token punctuation\">(<\/span>f<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u52a0\u8f7d\u77e5\u8bc6\u5e93\u5931\u8d25: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;file_patterns&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;user_preferences&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;organize_rules&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">save_knowledge_base<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u4fdd\u5b58\u77e5\u8bc6\u5e93&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>knowledge_base_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;w&#039;<\/span><span class=\"token punctuation\">,<\/span> encoding<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;utf-8&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n                json<span class=\"token punctuation\">.<\/span>dump<span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">,<\/span> f<span class=\"token punctuation\">,<\/span> indent<span class=\"token operator\">&#061;<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> default<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u77e5\u8bc6\u5e93\u5df2\u4fdd\u5b58&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u4fdd\u5b58\u77e5\u8bc6\u5e93\u5931\u8d25: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">categorize_file<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> filepath<span class=\"token punctuation\">:<\/span> Path<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> FileCategory<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u57fa\u4e8e\u89c4\u5219\u548c\u77e5\u8bc6\u5e93\u5bf9\u6587\u4ef6\u8fdb\u884c\u5206\u7c7b&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token comment\"># \u4ece\u77e5\u8bc6\u5e93\u4e2d\u83b7\u53d6\u7528\u6237\u504f\u597d<\/span><br \/>\n        user_prefs <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_preferences&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u68c0\u67e5\u6587\u4ef6\u6269\u5c55\u540d<\/span><br \/>\n        ext <span class=\"token operator\">&#061;<\/span> filepath<span class=\"token punctuation\">.<\/span>suffix<span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u9996\u5148\u68c0\u67e5\u77e5\u8bc6\u5e93\u4e2d\u7684\u81ea\u5b9a\u4e49\u89c4\u5219<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> pattern<span class=\"token punctuation\">,<\/span> category <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;file_patterns&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> pattern <span class=\"token keyword\">in<\/span> filepath<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">return<\/span> FileCategory<span class=\"token punctuation\">(<\/span>category<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">except<\/span> ValueError<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">continue<\/span><\/p>\n<p>        <span class=\"token comment\"># \u4f7f\u7528\u9884\u5b9a\u4e49\u89c4\u5219<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> category<span class=\"token punctuation\">,<\/span> extensions <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>FILE_EXTENSIONS<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> ext <span class=\"token keyword\">in<\/span> extensions<span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">return<\/span> category<\/p>\n<p>        <span class=\"token comment\"># \u4f7f\u7528AI\u589e\u5f3a\u5206\u7c7b&#xff08;\u7b80\u5316\u7248&#xff09;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self<span class=\"token punctuation\">.<\/span>_ai_enhanced_categorization<span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_ai_enhanced_categorization<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> filepath<span class=\"token punctuation\">:<\/span> Path<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> FileCategory<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;AI\u589e\u5f3a\u7684\u6587\u4ef6\u5206\u7c7b&#xff08;\u7b80\u5316\u5b9e\u73b0&#xff09;&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token comment\"># \u5728\u5b9e\u9645\u5e94\u7528\u4e2d&#xff0c;\u8fd9\u91cc\u53ef\u4ee5\u96c6\u6210ML\u6a21\u578b<\/span><br \/>\n        <span class=\"token comment\"># \u6b64\u5904\u4f7f\u7528\u57fa\u4e8e\u6587\u4ef6\u5185\u5bb9\u7684\u542f\u53d1\u5f0f\u65b9\u6cd5<\/span><\/p>\n<p>        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token comment\"># \u8bfb\u53d6\u6587\u4ef6\u5934\u90e8\u8fdb\u884c\u5185\u5bb9\u5206\u6790<\/span><br \/>\n            <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;rb&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n                header <span class=\"token operator\">&#061;<\/span> f<span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">(<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\"># \u8bfb\u53d6\u524d1KB<\/span><\/p>\n<p>            <span class=\"token comment\"># \u7b80\u5355\u7684\u9b54\u6cd5\u6570\u5b57\u68c0\u6d4b<\/span><br \/>\n            magic_numbers <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token string\">b&#039;%PDF&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>DOCUMENT<span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">b&#039;\\\\x89PNG&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>IMAGE<span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">b&#039;\\\\xff\\\\xd8\\\\xff&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>IMAGE<span class=\"token punctuation\">,<\/span>  <span class=\"token comment\"># JPEG<\/span><br \/>\n                <span class=\"token string\">b&#039;&lt;?xml&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>DATA<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><\/p>\n<p>            <span class=\"token keyword\">for<\/span> magic<span class=\"token punctuation\">,<\/span> category <span class=\"token keyword\">in<\/span> magic_numbers<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> header<span class=\"token punctuation\">.<\/span>startswith<span class=\"token punctuation\">(<\/span>magic<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">return<\/span> category<\/p>\n<p>            <span class=\"token comment\"># \u6587\u672c\u5185\u5bb9\u5206\u6790<\/span><br \/>\n            <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                text_sample <span class=\"token operator\">&#061;<\/span> header<span class=\"token punctuation\">.<\/span>decode<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;utf-8&#039;<\/span><span class=\"token punctuation\">,<\/span> errors<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;ignore&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                keywords <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#039;import&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>CODE<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#039;function&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>CODE<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#039;class&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>CODE<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#039;&lt;html&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>CODE<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#039;select&#039;<\/span><span class=\"token punctuation\">:<\/span> FileCategory<span class=\"token punctuation\">.<\/span>DATA<span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><\/p>\n<p>                <span class=\"token keyword\">for<\/span> keyword<span class=\"token punctuation\">,<\/span> category <span class=\"token keyword\">in<\/span> keywords<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">if<\/span> keyword <span class=\"token keyword\">in<\/span> text_sample<span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                        <span class=\"token keyword\">return<\/span> category<br \/>\n            <span class=\"token keyword\">except<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">pass<\/span><\/p>\n<p>        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span>debug<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;AI\u5206\u7c7b\u5931\u8d25: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> FileCategory<span class=\"token punctuation\">.<\/span>OTHER<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">calculate_file_hash<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> filepath<span class=\"token punctuation\">:<\/span> Path<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u8ba1\u7b97\u6587\u4ef6\u54c8\u5e0c\u503c&#034;&#034;&#034;<\/span><br \/>\n        hash_md5 <span class=\"token operator\">&#061;<\/span> hashlib<span class=\"token punctuation\">.<\/span>md5<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;rb&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> chunk <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">iter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">lambda<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">(<\/span><span class=\"token number\">4096<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    hash_md5<span class=\"token punctuation\">.<\/span>update<span class=\"token punctuation\">(<\/span>chunk<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> hash_md5<span class=\"token punctuation\">.<\/span>hexdigest<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u8ba1\u7b97\u6587\u4ef6\u54c8\u5e0c\u5931\u8d25 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>filepath<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">scan_directory<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> directory<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>FileMetadata<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u626b\u63cf\u76ee\u5f55\u5e76\u6536\u96c6\u6587\u4ef6\u5143\u6570\u636e&#034;&#034;&#034;<\/span><br \/>\n        files_metadata <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        dir_path <span class=\"token operator\">&#061;<\/span> Path<span class=\"token punctuation\">(<\/span>directory<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> dir_path<span class=\"token punctuation\">.<\/span>exists<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u76ee\u5f55\u4e0d\u5b58\u5728: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>directory<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> files_metadata<\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u5f00\u59cb\u626b\u63cf\u76ee\u5f55: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>directory<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> filepath <span class=\"token keyword\">in<\/span> dir_path<span class=\"token punctuation\">.<\/span>rglob<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;*&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> filepath<span class=\"token punctuation\">.<\/span>is_file<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    stat <span class=\"token operator\">&#061;<\/span> filepath<span class=\"token punctuation\">.<\/span>stat<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>                    metadata <span class=\"token operator\">&#061;<\/span> FileMetadata<span class=\"token punctuation\">(<\/span><br \/>\n                        filename<span class=\"token operator\">&#061;<\/span>filepath<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span><br \/>\n                        path<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        size<span class=\"token operator\">&#061;<\/span>stat<span class=\"token punctuation\">.<\/span>st_size<span class=\"token punctuation\">,<\/span><br \/>\n                        created<span class=\"token operator\">&#061;<\/span>datetime<span class=\"token punctuation\">.<\/span>fromtimestamp<span class=\"token punctuation\">(<\/span>stat<span class=\"token punctuation\">.<\/span>st_ctime<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        modified<span class=\"token operator\">&#061;<\/span>datetime<span class=\"token punctuation\">.<\/span>fromtimestamp<span class=\"token punctuation\">(<\/span>stat<span class=\"token punctuation\">.<\/span>st_mtime<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        category<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>categorize_file<span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        hash_md5<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>calculate_file_hash<span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        tags<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                    <span class=\"token punctuation\">)<\/span><\/p>\n<p>                    files_metadata<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>metadata<span class=\"token punctuation\">)<\/span><br \/>\n                    self<span class=\"token punctuation\">.<\/span>file_index<span class=\"token punctuation\">[<\/span>metadata<span class=\"token punctuation\">.<\/span>hash_md5<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> metadata<\/p>\n<p>                <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n                    logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u5904\u7406\u6587\u4ef6\u5931\u8d25 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>filepath<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u626b\u63cf\u5b8c\u6210&#xff0c;\u53d1\u73b0 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>files_metadata<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u4e2a\u6587\u4ef6&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> files_metadata<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">organize_files<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> source_dir<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> target_base<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                      strategy<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;categorical&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Dict<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n        \u7ec4\u7ec7\u6587\u4ef6\u6839\u636e\u6307\u5b9a\u7b56\u7565<\/p>\n<p>        Args:<br \/>\n            source_dir: \u6e90\u76ee\u5f55<br \/>\n            target_base: \u76ee\u6807\u57fa\u7840\u76ee\u5f55<br \/>\n            strategy: \u7ec4\u7ec7\u7b56\u7565 (categorical, date_based, hybrid)<br \/>\n        &#034;&#034;&#034;<\/span><br \/>\n        files <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>scan_directory<span class=\"token punctuation\">(<\/span>source_dir<span class=\"token punctuation\">)<\/span><br \/>\n        report <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;total_files&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>files<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;organized&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;skipped&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;errors&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        target_base_path <span class=\"token operator\">&#061;<\/span> Path<span class=\"token punctuation\">(<\/span>target_base<span class=\"token punctuation\">)<\/span><br \/>\n        target_base_path<span class=\"token punctuation\">.<\/span>mkdir<span class=\"token punctuation\">(<\/span>parents<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> file_meta <span class=\"token keyword\">in<\/span> files<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                source_path <span class=\"token operator\">&#061;<\/span> Path<span class=\"token punctuation\">(<\/span>file_meta<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">)<\/span><\/p>\n<p>                <span class=\"token comment\"># \u786e\u5b9a\u76ee\u6807\u8def\u5f84<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> strategy <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;categorical&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    target_dir <span class=\"token operator\">&#061;<\/span> target_base_path <span class=\"token operator\">\/<\/span> file_meta<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<br \/>\n                <span class=\"token keyword\">elif<\/span> strategy <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;date_based&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    date_str <span class=\"token operator\">&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>created<span class=\"token punctuation\">.<\/span>strftime<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%Y\/%m\/%d&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    target_dir <span class=\"token operator\">&#061;<\/span> target_base_path <span class=\"token operator\">\/<\/span> date_str<br \/>\n                <span class=\"token keyword\">elif<\/span> strategy <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;hybrid&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    category_dir <span class=\"token operator\">&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<br \/>\n                    date_str <span class=\"token operator\">&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>created<span class=\"token punctuation\">.<\/span>strftime<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%Y\/%m&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    target_dir <span class=\"token operator\">&#061;<\/span> target_base_path <span class=\"token operator\">\/<\/span> category_dir <span class=\"token operator\">\/<\/span> date_str<br \/>\n                <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    target_dir <span class=\"token operator\">&#061;<\/span> target_base_path <span class=\"token operator\">\/<\/span> <span class=\"token string\">&#034;organized&#034;<\/span><\/p>\n<p>                target_dir<span class=\"token punctuation\">.<\/span>mkdir<span class=\"token punctuation\">(<\/span>parents<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                target_path <span class=\"token operator\">&#061;<\/span> target_dir <span class=\"token operator\">\/<\/span> source_path<span class=\"token punctuation\">.<\/span>name<\/p>\n<p>                <span class=\"token comment\"># \u68c0\u67e5\u662f\u5426\u5df2\u5b58\u5728\u76f8\u540c\u6587\u4ef6<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> target_path<span class=\"token punctuation\">.<\/span>exists<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    existing_hash <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>calculate_file_hash<span class=\"token punctuation\">(<\/span>target_path<span class=\"token punctuation\">)<\/span><br \/>\n                    <span class=\"token keyword\">if<\/span> existing_hash <span class=\"token operator\">&#061;&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>hash_md5<span class=\"token punctuation\">:<\/span><br \/>\n                        logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u6587\u4ef6\u5df2\u5b58\u5728: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>target_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                        report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;skipped&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\n                        report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                            <span class=\"token string\">&#034;file&#034;<\/span><span class=\"token punctuation\">:<\/span> file_meta<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">,<\/span><br \/>\n                            <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;skipped_duplicate&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                            <span class=\"token string\">&#034;target&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>target_path<span class=\"token punctuation\">)<\/span><br \/>\n                        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                        <span class=\"token keyword\">continue<\/span><\/p>\n<p>                <span class=\"token comment\"># \u79fb\u52a8\u6587\u4ef6<\/span><br \/>\n                shutil<span class=\"token punctuation\">.<\/span>move<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>source_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>target_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u5df2\u79fb\u52a8: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>source_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> -&gt; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>target_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>                <span class=\"token comment\"># \u66f4\u65b0\u77e5\u8bc6\u5e93<\/span><br \/>\n                self<span class=\"token punctuation\">.<\/span>_update_knowledge_base<span class=\"token punctuation\">(<\/span>file_meta<span class=\"token punctuation\">,<\/span> target_path<span class=\"token punctuation\">)<\/span><\/p>\n<p>                report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;organized&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\n                report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;file&#034;<\/span><span class=\"token punctuation\">:<\/span> file_meta<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;organized&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;target&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>target_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;category&#034;<\/span><span class=\"token punctuation\">:<\/span> file_meta<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<br \/>\n                <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n                logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u7ec4\u7ec7\u6587\u4ef6\u5931\u8d25 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_meta<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;errors&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\n                report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;file&#034;<\/span><span class=\"token punctuation\">:<\/span> file_meta<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u4fdd\u5b58\u77e5\u8bc6\u5e93\u66f4\u65b0<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>save_knowledge_base<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u7ec4\u7ec7\u5b8c\u6210: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>report<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> report<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_update_knowledge_base<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> file_meta<span class=\"token punctuation\">:<\/span> FileMetadata<span class=\"token punctuation\">,<\/span> target_path<span class=\"token punctuation\">:<\/span> Path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u66f4\u65b0\u77e5\u8bc6\u5e93\u57fa\u4e8e\u6587\u4ef6\u7ec4\u7ec7\u884c\u4e3a&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token comment\"># \u66f4\u65b0\u6587\u4ef6\u6a21\u5f0f\u77e5\u8bc6<\/span><br \/>\n        pattern_key <span class=\"token operator\">&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> pattern_key <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;file_patterns&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">.<\/span>setdefault<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;file_patterns&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span>pattern_key<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<\/p>\n<p>        <span class=\"token comment\"># \u66f4\u65b0\u7ec4\u7ec7\u89c4\u5219<\/span><br \/>\n        org_rule <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;source_pattern&#034;<\/span><span class=\"token punctuation\">:<\/span> file_meta<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;category&#034;<\/span><span class=\"token punctuation\">:<\/span> file_meta<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;target_pattern&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>target_path<span class=\"token punctuation\">.<\/span>parent<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;timestamp&#034;<\/span><span class=\"token punctuation\">:<\/span> datetime<span class=\"token punctuation\">.<\/span>now<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>isoformat<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">.<\/span>setdefault<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;organize_rules&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>org_rule<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u9650\u5236\u89c4\u5219\u6570\u91cf<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;organize_rules&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">1000<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;organize_rules&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>knowledge_base<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;organize_rules&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1000<\/span><span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">find_duplicates<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> directory<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> List<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u67e5\u627e\u91cd\u590d\u6587\u4ef6&#034;&#034;&#034;<\/span><br \/>\n        files <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>scan_directory<span class=\"token punctuation\">(<\/span>directory<span class=\"token punctuation\">)<\/span><br \/>\n        hash_groups <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> file_meta <span class=\"token keyword\">in<\/span> files<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> file_meta<span class=\"token punctuation\">.<\/span>hash_md5<span class=\"token punctuation\">:<\/span><br \/>\n                hash_groups<span class=\"token punctuation\">.<\/span>setdefault<span class=\"token punctuation\">(<\/span>file_meta<span class=\"token punctuation\">.<\/span>hash_md5<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>file_meta<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u8fc7\u6ee4\u51fa\u91cd\u590d\u7ec4<\/span><br \/>\n        duplicates <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span>hash_val<span class=\"token punctuation\">:<\/span> paths <span class=\"token keyword\">for<\/span> hash_val<span class=\"token punctuation\">,<\/span> paths <span class=\"token keyword\">in<\/span> hash_groups<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                     <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>paths<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> duplicates<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">generate_report<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> directory<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Dict<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u751f\u6210\u76ee\u5f55\u5206\u6790\u62a5\u544a&#034;&#034;&#034;<\/span><br \/>\n        files <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>scan_directory<span class=\"token punctuation\">(<\/span>directory<span class=\"token punctuation\">)<\/span><\/p>\n<p>        report <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token string\">&#034;total_files&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>files<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;total_size&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">sum<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token punctuation\">.<\/span>size <span class=\"token keyword\">for<\/span> f <span class=\"token keyword\">in<\/span> files<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;categories&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;largest_files&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;recent_files&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;category_distribution&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\"># \u5206\u7c7b\u7edf\u8ba1<\/span><br \/>\n        category_stats <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> file_meta <span class=\"token keyword\">in<\/span> files<span class=\"token punctuation\">:<\/span><br \/>\n            cat <span class=\"token operator\">&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<br \/>\n            category_stats<span class=\"token punctuation\">.<\/span>setdefault<span class=\"token punctuation\">(<\/span>cat<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;count&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;size&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            category_stats<span class=\"token punctuation\">[<\/span>cat<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;count&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\n            category_stats<span class=\"token punctuation\">[<\/span>cat<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;size&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> file_meta<span class=\"token punctuation\">.<\/span>size<\/p>\n<p>        report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;categories&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> category_stats<\/p>\n<p>        <span class=\"token comment\"># \u6700\u5927\u7684\u6587\u4ef6<\/span><br \/>\n        largest_files <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">sorted<\/span><span class=\"token punctuation\">(<\/span>files<span class=\"token punctuation\">,<\/span> key<span class=\"token operator\">&#061;<\/span><span class=\"token keyword\">lambda<\/span> x<span class=\"token punctuation\">:<\/span> x<span class=\"token punctuation\">.<\/span>size<span class=\"token punctuation\">,<\/span> reverse<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;largest_files&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;file&#034;<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;size&#034;<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>size<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;category&#034;<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> f <span class=\"token keyword\">in<\/span> largest_files<br \/>\n        <span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token comment\"># \u6700\u8fd1\u4fee\u6539\u7684\u6587\u4ef6<\/span><br \/>\n        recent_files <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">sorted<\/span><span class=\"token punctuation\">(<\/span>files<span class=\"token punctuation\">,<\/span> key<span class=\"token operator\">&#061;<\/span><span class=\"token keyword\">lambda<\/span> x<span class=\"token punctuation\">:<\/span> x<span class=\"token punctuation\">.<\/span>modified<span class=\"token punctuation\">,<\/span> reverse<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;recent_files&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;file&#034;<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;modified&#034;<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>modified<span class=\"token punctuation\">.<\/span>isoformat<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             <span class=\"token string\">&#034;category&#034;<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>category<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> f <span class=\"token keyword\">in<\/span> recent_files<br \/>\n        <span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> report<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u4e3b\u51fd\u6570&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token comment\"># \u521d\u59cb\u5316\u667a\u80fd\u6587\u4ef6\u7ba1\u7406\u5668<\/span><br \/>\n    manager <span class=\"token operator\">&#061;<\/span> IntelligentFileManager<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u793a\u4f8b\u4f7f\u7528<\/span><br \/>\n    source_directory <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;~\/Downloads&#034;<\/span>  <span class=\"token comment\"># \u793a\u4f8b\u76ee\u5f55<\/span><br \/>\n    target_directory <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;~\/Documents\/OrganizedFiles&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># 1. \u626b\u63cf\u5e76\u5206\u6790\u76ee\u5f55<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#061;&#061; \u76ee\u5f55\u5206\u6790 &#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    analysis_report <span class=\"token operator\">&#061;<\/span> manager<span class=\"token punctuation\">.<\/span>generate_report<span class=\"token punctuation\">(<\/span>source_directory<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u603b\u6587\u4ef6\u6570: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>analysis_report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;summary&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;total_files&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u603b\u5927\u5c0f: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>analysis_report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;summary&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;total_size&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">1024<\/span><span class=\"token operator\">*<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.2f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> MB&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># 2. \u67e5\u627e\u91cd\u590d\u6587\u4ef6<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#061;&#061;&#061; \u91cd\u590d\u6587\u4ef6\u68c0\u6d4b &#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    duplicates <span class=\"token operator\">&#061;<\/span> manager<span class=\"token punctuation\">.<\/span>find_duplicates<span class=\"token punctuation\">(<\/span>source_directory<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u53d1\u73b0 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>duplicates<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u7ec4\u91cd\u590d\u6587\u4ef6&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># 3. \u667a\u80fd\u7ec4\u7ec7\u6587\u4ef6<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#061;&#061;&#061; \u6587\u4ef6\u7ec4\u7ec7 &#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    organize_report <span class=\"token operator\">&#061;<\/span> manager<span class=\"token punctuation\">.<\/span>organize_files<span class=\"token punctuation\">(<\/span><br \/>\n        source_directory<span class=\"token punctuation\">,<\/span><br \/>\n        target_directory<span class=\"token punctuation\">,<\/span><br \/>\n        strategy<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;hybrid&#034;<\/span>  <span class=\"token comment\"># \u4f7f\u7528\u6df7\u5408\u7b56\u7565<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u5df2\u7ec4\u7ec7 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>organize_report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;organized&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u4e2a\u6587\u4ef6&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u8df3\u8fc7 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>organize_report<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;skipped&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u4e2a\u91cd\u590d\u6587\u4ef6&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># 4. \u4fdd\u5b58\u77e5\u8bc6\u5e93\u4f9b\u672a\u6765\u4f7f\u7528<\/span><br \/>\n    manager<span class=\"token punctuation\">.<\/span>save_knowledge_base<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#061;&#061;&#061; \u77e5\u8bc6\u5e93\u5df2\u66f4\u65b0 &#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u77e5\u8bc6\u5e93\u6587\u4ef6: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>manager<span class=\"token punctuation\">.<\/span>knowledge_base_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    main<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h5>3.2.2 Bash\u81ea\u52a8\u5316\u811a\u672c\u793a\u4f8b<\/h5>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u667a\u80fd\u7cfb\u7edf\u76d1\u63a7\u4e0e\u81ea\u52a8\u5316\u7ef4\u62a4\u811a\u672c<\/span><\/p>\n<p><span class=\"token builtin class-name\">set<\/span> -euo pipefail<br \/>\n<span class=\"token assign-left variable\"><span class=\"token environment constant\">IFS<\/span><\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">$&#039;<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span><span class=\"token entity\" title=\"\\\\t\">\\\\t<\/span>&#039;<\/span><\/p>\n<p><span class=\"token comment\"># \u914d\u7f6e<\/span><br \/>\n<span class=\"token assign-left variable\">LOG_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/var\/log\/automation&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">BACKUP_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/backup&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">REPORT_EMAIL<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;admin&#064;example.com&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">THRESHOLD_DISK_USAGE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">80<\/span><br \/>\n<span class=\"token assign-left variable\">THRESHOLD_MEMORY_USAGE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">90<\/span><br \/>\n<span class=\"token assign-left variable\">THRESHOLD_LOAD_AVERAGE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">5.0<\/span><\/p>\n<p><span class=\"token comment\"># \u521d\u59cb\u5316\u76ee\u5f55<\/span><br \/>\n<span class=\"token function-name function\">init_directories<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">mkdir<\/span> -p <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_DIR<\/span>&#034;<\/span><br \/>\n    <span class=\"token function\">mkdir<\/span> -p <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>&#034;<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">timestamp<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> &#043;<span class=\"token string\">&#034;%Y%m%d_%H%M%S&#034;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token assign-left variable\">LOG_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$LOG_DIR<\/span>\/automation_<span class=\"token variable\">${timestamp}<\/span>.log&#034;<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">exec<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">1<\/span>&gt;<\/span> <span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">tee<\/span> -a <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token builtin class-name\">exec<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u65e5\u5fd7\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">level<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><br \/>\n    <span class=\"token builtin class-name\">shift<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span>] [<span class=\"token variable\">$level<\/span>] <span class=\"token variable\">$&#064;<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tee<\/span> -a <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u7cfb\u7edf\u5065\u5eb7\u68c0\u67e5<\/span><br \/>\n<span class=\"token function-name function\">check_system_health<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u5f00\u59cb\u7cfb\u7edf\u5065\u5eb7\u68c0\u67e5&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u78c1\u76d8\u4f7f\u7528\u7387\u68c0\u67e5<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">disk_usage<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">df<\/span> -h \/ <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;NR&#061;&#061;2 {print $5}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tr<\/span> -d <span class=\"token string\">&#039;%&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$disk_usage<\/span>&#034;<\/span> -gt <span class=\"token string\">&#034;<span class=\"token variable\">$THRESHOLD_DISK_USAGE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        log <span class=\"token string\">&#034;WARNING&#034;<\/span> <span class=\"token string\">&#034;\u78c1\u76d8\u4f7f\u7528\u7387\u8fc7\u9ad8: <span class=\"token variable\">${disk_usage}<\/span>%&#034;<\/span><br \/>\n        send_alert <span class=\"token string\">&#034;\u78c1\u76d8\u4f7f\u7528\u7387\u8fc7\u9ad8&#034;<\/span> <span class=\"token string\">&#034;\u5f53\u524d\u4f7f\u7528\u7387: <span class=\"token variable\">${disk_usage}<\/span>%&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u5185\u5b58\u4f7f\u7528\u7387\u68c0\u67e5<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">memory_usage<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">free<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;\/Mem:\/ {printf(&#034;%.0f&#034;), $3\/$2 * 100}&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$memory_usage<\/span>&#034;<\/span> -gt <span class=\"token string\">&#034;<span class=\"token variable\">$THRESHOLD_MEMORY_USAGE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        log <span class=\"token string\">&#034;WARNING&#034;<\/span> <span class=\"token string\">&#034;\u5185\u5b58\u4f7f\u7528\u7387\u8fc7\u9ad8: <span class=\"token variable\">${memory_usage}<\/span>%&#034;<\/span><br \/>\n        send_alert <span class=\"token string\">&#034;\u5185\u5b58\u4f7f\u7528\u7387\u8fc7\u9ad8&#034;<\/span> <span class=\"token string\">&#034;\u5f53\u524d\u4f7f\u7528\u7387: <span class=\"token variable\">${memory_usage}<\/span>%&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u8d1f\u8f7d\u5e73\u5747\u503c\u68c0\u67e5<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">load_average<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">uptime<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> -F<span class=\"token string\">&#039;load average:&#039;<\/span> <span class=\"token string\">&#039;{print $2}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> -F, <span class=\"token string\">&#039;{print $1}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tr<\/span> -d <span class=\"token string\">&#039; &#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token variable\"><span class=\"token punctuation\">((<\/span> $<span class=\"token punctuation\">(<\/span>echo &#034;$load_average <span class=\"token operator\">&gt;<\/span> $THRESHOLD_LOAD_AVERAGE&#034; <span class=\"token operator\">|<\/span> bc <span class=\"token operator\">&#8211;<\/span>l<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">))<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        log <span class=\"token string\">&#034;WARNING&#034;<\/span> <span class=\"token string\">&#034;\u7cfb\u7edf\u8d1f\u8f7d\u8fc7\u9ad8: <span class=\"token variable\">${load_average}<\/span>&#034;<\/span><br \/>\n        send_alert <span class=\"token string\">&#034;\u7cfb\u7edf\u8d1f\u8f7d\u8fc7\u9ad8&#034;<\/span> <span class=\"token string\">&#034;\u5f53\u524d\u8d1f\u8f7d: <span class=\"token variable\">${load_average}<\/span>&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u7cfb\u7edf\u5065\u5eb7\u68c0\u67e5\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u81ea\u52a8\u5907\u4efd<\/span><br \/>\n<span class=\"token function-name function\">perform_backup<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">backup_type<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">timestamp<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> &#043;<span class=\"token string\">&#034;%Y%m%d_%H%M%S&#034;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">backup_name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;backup_<span class=\"token variable\">${backup_type}<\/span>_<span class=\"token variable\">${timestamp}<\/span>.tar.gz&#034;<\/span><\/p>\n<p>    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u5f00\u59cb<span class=\"token variable\">${backup_type}<\/span>\u5907\u4efd&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$backup_type<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        <span class=\"token string\">&#034;system&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">tar<\/span> -czf <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>\/<span class=\"token variable\">$backup_name<\/span>&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                &#8211;exclude<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                &#8211;exclude<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/tmp&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                &#8211;exclude<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/proc&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                &#8211;exclude<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/sys&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                &#8211;exclude<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/dev&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                &#8211;exclude<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/run&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                \/<br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token string\">&#034;web&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">tar<\/span> -czf <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>\/<span class=\"token variable\">$backup_name<\/span>&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n                \/var\/www\/html <span class=\"token punctuation\">\\\\<\/span><br \/>\n                \/etc\/nginx <span class=\"token punctuation\">\\\\<\/span><br \/>\n                \/etc\/apache2<br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token string\">&#034;database&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            perform_database_backup <span class=\"token string\">&#034;<span class=\"token variable\">$backup_name<\/span>&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        *<span class=\"token punctuation\">)<\/span><br \/>\n            log <span class=\"token string\">&#034;ERROR&#034;<\/span> <span class=\"token string\">&#034;\u672a\u77e5\u7684\u5907\u4efd\u7c7b\u578b: <span class=\"token variable\">$backup_type<\/span>&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">1<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$?<\/span> -eq <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${backup_type}<\/span>\u5907\u4efd\u5b8c\u6210: <span class=\"token variable\">$backup_name<\/span>&#034;<\/span><\/p>\n<p>        <span class=\"token comment\"># \u6e05\u7406\u65e7\u5907\u4efd&#xff08;\u4fdd\u7559\u6700\u8fd130\u5929&#xff09;<\/span><br \/>\n        <span class=\"token function\">find<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>&#034;<\/span> -name <span class=\"token string\">&#034;backup_<span class=\"token variable\">${backup_type}<\/span>_*.tar.gz&#034;<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n             -mtime &#043;30 -delete<br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        log <span class=\"token string\">&#034;ERROR&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${backup_type}<\/span>\u5907\u4efd\u5931\u8d25&#034;<\/span><br \/>\n        send_alert <span class=\"token string\">&#034;\u5907\u4efd\u5931\u8d25&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${backup_type}<\/span>\u5907\u4efd\u8fc7\u7a0b\u51fa\u9519&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u6570\u636e\u5e93\u5907\u4efd<\/span><br \/>\n<span class=\"token function-name function\">perform_database_backup<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">backup_name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u6d4b\u6570\u636e\u5e93\u7c7b\u578b<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> systemctl is-active &#8211;quiet mysql<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token comment\"># MySQL\u5907\u4efd<\/span><br \/>\n        mysqldump &#8211;all-databases &#8211;single-transaction <span class=\"token punctuation\">\\\\<\/span><br \/>\n                  &#8211;routines &#8211;triggers <span class=\"token punctuation\">\\\\<\/span><br \/>\n                  <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;\/tmp\/db_dump.sql&#034;<\/span><br \/>\n        <span class=\"token function\">tar<\/span> -czf <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>\/<span class=\"token variable\">$backup_name<\/span>&#034;<\/span> -C \/tmp <span class=\"token string\">&#034;db_dump.sql&#034;<\/span><br \/>\n        <span class=\"token function\">rm<\/span> -f <span class=\"token string\">&#034;\/tmp\/db_dump.sql&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">elif<\/span> systemctl is-active &#8211;quiet postgresql<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token comment\"># PostgreSQL\u5907\u4efd<\/span><br \/>\n        <span class=\"token function\">sudo<\/span> -u postgres pg_dumpall <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;\/tmp\/pg_dump.sql&#034;<\/span><br \/>\n        <span class=\"token function\">tar<\/span> -czf <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>\/<span class=\"token variable\">$backup_name<\/span>&#034;<\/span> -C \/tmp <span class=\"token string\">&#034;pg_dump.sql&#034;<\/span><br \/>\n        <span class=\"token function\">rm<\/span> -f <span class=\"token string\">&#034;\/tmp\/pg_dump.sql&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        log <span class=\"token string\">&#034;ERROR&#034;<\/span> <span class=\"token string\">&#034;\u672a\u627e\u5230\u6d3b\u52a8\u7684\u6570\u636e\u5e93\u670d\u52a1&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u5b89\u5168\u626b\u63cf<\/span><br \/>\n<span class=\"token function-name function\">security_scan<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u5f00\u59cb\u5b89\u5168\u626b\u63cf&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u53ef\u7591\u8fdb\u7a0b<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">suspicious_procs<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">ps<\/span> aux <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> -E <span class=\"token string\">&#034;(miner|backdoor|malware)&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> -v <span class=\"token function\">grep<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> -n <span class=\"token string\">&#034;<span class=\"token variable\">$suspicious_procs<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        log <span class=\"token string\">&#034;WARNING&#034;<\/span> <span class=\"token string\">&#034;\u53d1\u73b0\u53ef\u7591\u8fdb\u7a0b&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$suspicious_procs<\/span>&#034;<\/span> <span class=\"token operator\">&gt;&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><br \/>\n        send_alert <span class=\"token string\">&#034;\u53d1\u73b0\u53ef\u7591\u8fdb\u7a0b&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$suspicious_procs<\/span>&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u5f02\u5e38\u7f51\u7edc\u8fde\u63a5<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">unusual_connections<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">netstat<\/span> -tunap <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> -E <span class=\"token string\">&#034;(0.0.0.0:|:::)&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> -v LISTEN<span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> -n <span class=\"token string\">&#034;<span class=\"token variable\">$unusual_connections<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u68c0\u67e5\u7f51\u7edc\u8fde\u63a5&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$unusual_connections<\/span>&#034;<\/span> <span class=\"token operator\">&gt;&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u6587\u4ef6\u6743\u9650<\/span><br \/>\n    check_file_permissions<\/p>\n<p>    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u5b89\u5168\u626b\u63cf\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u6587\u4ef6\u6743\u9650\u68c0\u67e5<\/span><br \/>\n<span class=\"token function-name function\">check_file_permissions<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">critical_files<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token string\">&#034;\/etc\/passwd&#034;<\/span><br \/>\n        <span class=\"token string\">&#034;\/etc\/shadow&#034;<\/span><br \/>\n        <span class=\"token string\">&#034;\/etc\/sudoers&#034;<\/span><br \/>\n        <span class=\"token string\">&#034;\/etc\/ssh\/sshd_config&#034;<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">file<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${critical_files<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> -e <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">perms<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">stat<\/span> -c <span class=\"token string\">&#034;%a&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n            <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">owner<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">stat<\/span> -c <span class=\"token string\">&#034;%U&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span><span class=\"token variable\">)<\/span><\/span><\/p>\n<p>            <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token keyword\">in<\/span><br \/>\n                <span class=\"token string\">&#034;\/etc\/shadow&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$perms<\/span>&#034;<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token string\">&#034;640&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$owner<\/span>&#034;<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token string\">&#034;root&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n                        log <span class=\"token string\">&#034;WARNING&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span> \u6743\u9650\/\u6240\u6709\u8005\u5f02\u5e38: <span class=\"token variable\">$perms<\/span>\/<span class=\"token variable\">$owner<\/span>&#034;<\/span><br \/>\n                    <span class=\"token keyword\">fi<\/span><br \/>\n                    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token string\">&#034;\/etc\/passwd&#034;<\/span><span class=\"token operator\">|<\/span><span class=\"token string\">&#034;\/etc\/sudoers&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$perms<\/span>&#034;<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token string\">&#034;644&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$owner<\/span>&#034;<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token string\">&#034;root&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n                        log <span class=\"token string\">&#034;WARNING&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span> \u6743\u9650\/\u6240\u6709\u8005\u5f02\u5e38: <span class=\"token variable\">$perms<\/span>\/<span class=\"token variable\">$owner<\/span>&#034;<\/span><br \/>\n                    <span class=\"token keyword\">fi<\/span><br \/>\n                    <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">esac<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u53d1\u9001\u8b66\u62a5<\/span><br \/>\n<span class=\"token function-name function\">send_alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">subject<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">message<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$2<\/span><\/p>\n<p>    <span class=\"token comment\"># \u5982\u679c\u6709\u90ae\u4ef6\u914d\u7f6e&#xff0c;\u53d1\u9001\u90ae\u4ef6<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token builtin class-name\">command<\/span> -v mail <span class=\"token operator\">&amp;&gt;<\/span> \/dev\/null<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$message<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> mail -s <span class=\"token string\">&#034;\u7cfb\u7edf\u8b66\u62a5: <span class=\"token variable\">$subject<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$REPORT_EMAIL<\/span>&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u4e5f\u53ef\u4ee5\u96c6\u6210\u5230\u5176\u4ed6\u901a\u77e5\u7cfb\u7edf<\/span><br \/>\n    <span class=\"token comment\"># send_slack_notification &#034;$subject&#034; &#034;$message&#034;<\/span><br \/>\n    <span class=\"token comment\"># send_telegram_notification &#034;$subject&#034; &#034;$message&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u6027\u80fd\u4f18\u5316<\/span><br \/>\n<span class=\"token function-name function\">optimize_performance<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u5f00\u59cb\u6027\u80fd\u4f18\u5316&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6e05\u7406\u4e34\u65f6\u6587\u4ef6<\/span><br \/>\n    clean_temporary_files<\/p>\n<p>    <span class=\"token comment\"># \u4f18\u5316\u6570\u636e\u5e93<\/span><br \/>\n    optimize_databases<\/p>\n<p>    <span class=\"token comment\"># \u91cd\u542f\u670d\u52a1&#xff08;\u5982\u679c\u9700\u8981&#xff09;<\/span><br \/>\n    restart_stale_services<\/p>\n<p>    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u6027\u80fd\u4f18\u5316\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u6e05\u7406\u4e34\u65f6\u6587\u4ef6<\/span><br \/>\n<span class=\"token function-name function\">clean_temporary_files<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">temp_dirs<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token string\">&#034;\/tmp&#034;<\/span><br \/>\n        <span class=\"token string\">&#034;\/var\/tmp&#034;<\/span><br \/>\n        <span class=\"token string\">&#034;<span class=\"token environment constant\">$HOME<\/span>\/.cache&#034;<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">dir<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${temp_dirs<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> -d <span class=\"token string\">&#034;<span class=\"token variable\">$dir<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token function\">find<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$dir<\/span>&#034;<\/span> -type f -atime &#043;7 -delete <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> <span class=\"token boolean\">true<\/span><br \/>\n            log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u5df2\u6e05\u7406 <span class=\"token variable\">$dir<\/span> \u4e2d\u7684\u65e7\u6587\u4ef6&#034;<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u4f18\u5316\u6570\u636e\u5e93<\/span><br \/>\n<span class=\"token function-name function\">optimize_databases<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> systemctl is-active &#8211;quiet mysql<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        mysqlcheck &#8211;all-databases &#8211;optimize &#8211;silent<br \/>\n        log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;MySQL\u6570\u636e\u5e93\u5df2\u4f18\u5316&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> systemctl is-active &#8211;quiet postgresql<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token function\">sudo<\/span> -u postgres vacuumdb &#8211;all &#8211;analyze<br \/>\n        log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;PostgreSQL\u6570\u636e\u5e93\u5df2\u4f18\u5316&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u91cd\u542f\u505c\u6ede\u7684\u670d\u52a1<\/span><br \/>\n<span class=\"token function-name function\">restart_stale_services<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">services<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;nginx&#034;<\/span> <span class=\"token string\">&#034;apache2&#034;<\/span> <span class=\"token string\">&#034;mysql&#034;<\/span> <span class=\"token string\">&#034;postgresql&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">service<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${services<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> systemctl is-active &#8211;quiet <span class=\"token string\">&#034;<span class=\"token variable\">$service<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token comment\"># \u68c0\u67e5\u670d\u52a1\u72b6\u6001<\/span><br \/>\n            <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">status<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>systemctl status <span class=\"token string\">&#034;<span class=\"token variable\">$service<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> -E <span class=\"token string\">&#034;(active|failed)&#034;<\/span><span class=\"token variable\">)<\/span><\/span><\/p>\n<p>            <span class=\"token keyword\">if<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$status<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> -q <span class=\"token string\">&#034;failed&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n                log <span class=\"token string\">&#034;WARNING&#034;<\/span> <span class=\"token string\">&#034;\u670d\u52a1 <span class=\"token variable\">$service<\/span> \u5931\u8d25&#xff0c;\u5c1d\u8bd5\u91cd\u542f&#034;<\/span><br \/>\n                systemctl restart <span class=\"token string\">&#034;<span class=\"token variable\">$service<\/span>&#034;<\/span><\/p>\n<p>                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$?<\/span> -eq <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n                    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u670d\u52a1 <span class=\"token variable\">$service<\/span> \u91cd\u542f\u6210\u529f&#034;<\/span><br \/>\n                <span class=\"token keyword\">else<\/span><br \/>\n                    log <span class=\"token string\">&#034;ERROR&#034;<\/span> <span class=\"token string\">&#034;\u670d\u52a1 <span class=\"token variable\">$service<\/span> \u91cd\u542f\u5931\u8d25&#034;<\/span><br \/>\n                <span class=\"token keyword\">fi<\/span><br \/>\n            <span class=\"token keyword\">fi<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u751f\u6210\u62a5\u544a<\/span><br \/>\n<span class=\"token function-name function\">generate_report<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">timestamp<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> &#043;<span class=\"token string\">&#034;%Y-%m-%d %H:%M:%S&#034;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">report_file<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$LOG_DIR<\/span>\/report_<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> &#043;%Y%m%d<span class=\"token variable\">)<\/span><\/span>.html&#034;<\/span><\/p>\n<p>    <span class=\"token function\">cat<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$report_file<\/span>&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">EOF<br \/>\n&lt;!DOCTYPE html&gt;<br \/>\n&lt;html&gt;<br \/>\n&lt;head&gt;<br \/>\n    &lt;title&gt;\u7cfb\u7edf\u81ea\u52a8\u5316\u62a5\u544a &#8211; <span class=\"token variable\">$timestamp<\/span>&lt;\/title&gt;<br \/>\n    &lt;style&gt;<br \/>\n        body { font-family: Arial, sans-serif; margin: 20px; }<br \/>\n        h1 { color: #333; }<br \/>\n        .section { margin-bottom: 30px; }<br \/>\n        .success { color: green; }<br \/>\n        .warning { color: orange; }<br \/>\n        .error { color: red; }<br \/>\n        pre { background: #f5f5f5; padding: 10px; border-radius: 5px; }<br \/>\n    &lt;\/style&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n    &lt;h1&gt;\u7cfb\u7edf\u81ea\u52a8\u5316\u62a5\u544a&lt;\/h1&gt;<br \/>\n    &lt;p&gt;\u751f\u6210\u65f6\u95f4: <span class=\"token variable\">$timestamp<\/span>&lt;\/p&gt;<\/p>\n<p>    &lt;div class&#061;&#034;section&#034;&gt;<br \/>\n        &lt;h2&gt;\u7cfb\u7edf\u72b6\u6001&lt;\/h2&gt;<br \/>\n        &lt;pre&gt;<br \/>\n<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">uptime<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">free<\/span> -h<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">df<\/span> -h<span class=\"token variable\">)<\/span><\/span><br \/>\n        &lt;\/pre&gt;<br \/>\n    &lt;\/div&gt;<\/p>\n<p>    &lt;div class&#061;&#034;section&#034;&gt;<br \/>\n        &lt;h2&gt;\u5b89\u5168\u68c0\u67e5&lt;\/h2&gt;<br \/>\n        &lt;pre&gt;<br \/>\n<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">ps<\/span> aux <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> -20<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">netstat<\/span> -tulpn <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> -20<span class=\"token variable\">)<\/span><\/span><br \/>\n        &lt;\/pre&gt;<br \/>\n    &lt;\/div&gt;<\/p>\n<p>    &lt;div class&#061;&#034;section&#034;&gt;<br \/>\n        &lt;h2&gt;\u5907\u4efd\u72b6\u6001&lt;\/h2&gt;<br \/>\n        &lt;p&gt;\u6700\u65b0\u5907\u4efd:&lt;\/p&gt;<br \/>\n        &lt;pre&gt;<br \/>\n<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">ls<\/span> -la <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tail<\/span> -10<span class=\"token variable\">)<\/span><\/span><br \/>\n        &lt;\/pre&gt;<br \/>\n    &lt;\/div&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\nEOF<\/span><\/p>\n<p>    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u62a5\u544a\u5df2\u751f\u6210: <span class=\"token variable\">$report_file<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u4e3b\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    init_directories<\/p>\n<p>    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u81ea\u52a8\u5316\u811a\u672c\u5f00\u59cb\u6267\u884c&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6267\u884c\u5404\u9879\u4efb\u52a1<\/span><br \/>\n    check_system_health<\/p>\n<p>    <span class=\"token comment\"># \u6839\u636e\u661f\u671f\u6267\u884c\u4e0d\u540c\u7684\u5907\u4efd<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">day_of_week<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> &#043;%u<span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$day_of_week<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> perform_backup <span class=\"token string\">&#034;database&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>  <span class=\"token comment\"># \u5468\u4e00&#xff1a;\u6570\u636e\u5e93\u5907\u4efd<\/span><br \/>\n        <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> perform_backup <span class=\"token string\">&#034;web&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>      <span class=\"token comment\"># \u5468\u4e09&#xff1a;Web\u5907\u4efd<\/span><br \/>\n        <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span> perform_backup <span class=\"token string\">&#034;system&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\"># \u5468\u4e94&#xff1a;\u7cfb\u7edf\u5907\u4efd<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><\/p>\n<p>    security_scan<\/p>\n<p>    <span class=\"token comment\"># \u6bcf\u67081\u53f7\u6267\u884c\u6027\u80fd\u4f18\u5316<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> &#043;%d<span class=\"token variable\">)<\/span><\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;01&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        optimize_performance<br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    generate_report<\/p>\n<p>    log <span class=\"token string\">&#034;INFO&#034;<\/span> <span class=\"token string\">&#034;\u81ea\u52a8\u5316\u811a\u672c\u6267\u884c\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u9519\u8bef\u5904\u7406<\/span><br \/>\n<span class=\"token builtin class-name\">trap<\/span> <span class=\"token string\">&#039;log &#034;ERROR&#034; &#034;\u811a\u672c\u5f02\u5e38\u9000\u51fa&#034;; exit 1&#039;<\/span> ERR<br \/>\n<span class=\"token builtin class-name\">trap<\/span> <span class=\"token string\">&#039;log &#034;INFO&#034; &#034;\u811a\u672c\u88ab\u7528\u6237\u4e2d\u65ad&#034;; exit 0&#039;<\/span> INT <span class=\"token environment constant\">TERM<\/span><\/p>\n<p><span class=\"token comment\"># \u6267\u884c\u4e3b\u51fd\u6570<\/span><br \/>\nmain <span class=\"token string\">&#034;<span class=\"token variable\">$&#064;<\/span>&#034;<\/span><\/p>\n<h3>4. \u96c6\u6210\u7cfb\u7edf\u67b6\u6784\u8bbe\u8ba1<\/h3>\n<h4>4.1 \u667a\u80fd\u81ea\u52a8\u5316\u7cfb\u7edf\u6574\u4f53\u67b6\u6784<\/h4>\n<p>  #mermaid-svg-bh4ujE1JhILcXP9R{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bh4ujE1JhILcXP9R .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bh4ujE1JhILcXP9R .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bh4ujE1JhILcXP9R .error-icon{fill:#552222;}#mermaid-svg-bh4ujE1JhILcXP9R .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bh4ujE1JhILcXP9R .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bh4ujE1JhILcXP9R .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bh4ujE1JhILcXP9R .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bh4ujE1JhILcXP9R .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bh4ujE1JhILcXP9R .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bh4ujE1JhILcXP9R .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bh4ujE1JhILcXP9R .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bh4ujE1JhILcXP9R .marker.cross{stroke:#333333;}#mermaid-svg-bh4ujE1JhILcXP9R svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bh4ujE1JhILcXP9R p{margin:0;}#mermaid-svg-bh4ujE1JhILcXP9R .label{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;color:#333;}#mermaid-svg-bh4ujE1JhILcXP9R .cluster-label text{fill:#333;}#mermaid-svg-bh4ujE1JhILcXP9R .cluster-label span{color:#333;}#mermaid-svg-bh4ujE1JhILcXP9R .cluster-label span p{background-color:transparent;}#mermaid-svg-bh4ujE1JhILcXP9R .label text,#mermaid-svg-bh4ujE1JhILcXP9R span{fill:#333;color:#333;}#mermaid-svg-bh4ujE1JhILcXP9R .node rect,#mermaid-svg-bh4ujE1JhILcXP9R .node circle,#mermaid-svg-bh4ujE1JhILcXP9R .node ellipse,#mermaid-svg-bh4ujE1JhILcXP9R .node polygon,#mermaid-svg-bh4ujE1JhILcXP9R .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bh4ujE1JhILcXP9R .rough-node .label text,#mermaid-svg-bh4ujE1JhILcXP9R .node .label text,#mermaid-svg-bh4ujE1JhILcXP9R .image-shape .label,#mermaid-svg-bh4ujE1JhILcXP9R .icon-shape .label{text-anchor:middle;}#mermaid-svg-bh4ujE1JhILcXP9R .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bh4ujE1JhILcXP9R .rough-node .label,#mermaid-svg-bh4ujE1JhILcXP9R .node .label,#mermaid-svg-bh4ujE1JhILcXP9R .image-shape .label,#mermaid-svg-bh4ujE1JhILcXP9R .icon-shape .label{text-align:center;}#mermaid-svg-bh4ujE1JhILcXP9R .node.clickable{cursor:pointer;}#mermaid-svg-bh4ujE1JhILcXP9R .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bh4ujE1JhILcXP9R .arrowheadPath{fill:#333333;}#mermaid-svg-bh4ujE1JhILcXP9R .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bh4ujE1JhILcXP9R .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bh4ujE1JhILcXP9R .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bh4ujE1JhILcXP9R .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bh4ujE1JhILcXP9R .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bh4ujE1JhILcXP9R .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bh4ujE1JhILcXP9R .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bh4ujE1JhILcXP9R .cluster text{fill:#333;}#mermaid-svg-bh4ujE1JhILcXP9R .cluster span{color:#333;}#mermaid-svg-bh4ujE1JhILcXP9R div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bh4ujE1JhILcXP9R .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bh4ujE1JhILcXP9R rect.text{fill:none;stroke-width:0;}#mermaid-svg-bh4ujE1JhILcXP9R .icon-shape,#mermaid-svg-bh4ujE1JhILcXP9R .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bh4ujE1JhILcXP9R .icon-shape p,#mermaid-svg-bh4ujE1JhILcXP9R .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bh4ujE1JhILcXP9R .icon-shape rect,#mermaid-svg-bh4ujE1JhILcXP9R .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bh4ujE1JhILcXP9R .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bh4ujE1JhILcXP9R .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bh4ujE1JhILcXP9R :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u57fa\u7840\u8bbe\u65bd\u5c42<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u6570\u636e\u5904\u7406\u5c42<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u6838\u5fc3\u670d\u52a1\u5c42<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u667a\u80fd\u5904\u7406\u5c42<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528\u670d\u52a1\u5c42<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u7528\u6237\u754c\u9762\u5c42<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>Web\/CLI\/GUI\u754c\u9762<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>RESTful API<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u547d\u4ee4\u884c\u63a5\u53e3<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u5de5\u4f5c\u6d41\u5f15\u64ce<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u4efb\u52a1\u8c03\u5ea6\u5668<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u76d1\u63a7\u670d\u52a1<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u901a\u77e5\u670d\u52a1<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>AI\u63a8\u7406\u5f15\u64ce<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u673a\u5668\u5b66\u4e60\u6a21\u578b<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u81ea\u7136\u8bed\u8a00\u5904\u7406<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u8ba1\u7b97\u673a\u89c6\u89c9<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u811a\u672c\u6267\u884c\u5668<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u667a\u80fd\u4f53\u7ba1\u7406\u5668<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u77e5\u8bc6\u5e93\u670d\u52a1<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u89c4\u5219\u5f15\u64ce<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>ETL\u7ba1\u9053<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u6570\u636e\u5b58\u50a8<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u7f13\u5b58\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u6d41\u5904\u7406<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u5bb9\u5668\/\u865a\u62df\u5316<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u7f16\u6392\u5668<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u7f51\u7edc\u670d\u52a1<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u5b89\u5168\u670d\u52a1<\/p>\n<p><\/span><\/p>\n<h4>4.2 \u667a\u80fd\u4f53\u7cfb\u7edf\u8be6\u7ec6\u8bbe\u8ba1<\/h4>\n<p><span class=\"token comment\"># \u667a\u80fd\u4f53\u7cfb\u7edf\u914d\u7f6e\u793a\u4f8b<\/span><br \/>\n<span class=\"token key atrule\">agent_system<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;enterprise_automation_agent&#034;<\/span><br \/>\n  <span class=\"token key atrule\">version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;1.0.0&#034;<\/span><\/p>\n<p>  <span class=\"token key atrule\">components<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">perception_module<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">sensors<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;file_system&#034;<\/span><br \/>\n          <span class=\"token key atrule\">config<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token key atrule\">watch_paths<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;\/data\/inbound&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\/var\/log&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            <span class=\"token key atrule\">events<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;create&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;modify&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;delete&#034;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;api_monitor&#034;<\/span><br \/>\n          <span class=\"token key atrule\">config<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token key atrule\">endpoints<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;\/api\/v1\/health&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\/api\/v1\/metrics&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            <span class=\"token key atrule\">interval<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;30s&#034;<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;database_monitor&#034;<\/span><br \/>\n          <span class=\"token key atrule\">config<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token key atrule\">connection_string<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;${DB_URL}&#034;<\/span><br \/>\n            <span class=\"token key atrule\">queries<\/span><span class=\"token punctuation\">:<\/span><br \/>\n              <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;SELECT COUNT(*) FROM jobs WHERE status&#061;&#039;pending&#039;&#034;<\/span><br \/>\n              <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;SELECT AVG(response_time) FROM api_logs&#034;<\/span><\/p>\n<p>    <span class=\"token key atrule\">decision_module<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">planner_type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;hierarchical_task_network&#034;<\/span><br \/>\n      <span class=\"token key atrule\">policies<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;resource_optimization&#034;<\/span><br \/>\n          <span class=\"token key atrule\">conditions<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;memory_usage &gt; 80%&#034;<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;cpu_usage &gt; 75%&#034;<\/span><br \/>\n          <span class=\"token key atrule\">actions<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;scale_down_non_critical_services&#034;<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;trigger_garbage_collection&#034;<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;notify_administrator&#034;<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;security_incident&#034;<\/span><br \/>\n          <span class=\"token key atrule\">conditions<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;failed_login_attempts &gt; 10&#034;<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;unusual_network_traffic detected&#034;<\/span><br \/>\n          <span class=\"token key atrule\">actions<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;block_ip_address&#034;<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;increase_logging_level&#034;<\/span><br \/>\n            <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;initiate_forensic_analysis&#034;<\/span><\/p>\n<p>    <span class=\"token key atrule\">action_module<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">executors<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;script_executor&#034;<\/span><br \/>\n          <span class=\"token key atrule\">languages<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;python&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;bash&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;powershell&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n          <span class=\"token key atrule\">timeout<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;300s&#034;<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;api_caller&#034;<\/span><br \/>\n          <span class=\"token key atrule\">config<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token key atrule\">retry_policy<\/span><span class=\"token punctuation\">:<\/span><br \/>\n              <span class=\"token key atrule\">max_attempts<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">3<\/span><br \/>\n              <span class=\"token key atrule\">backoff<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;exponential&#034;<\/span><br \/>\n            <span class=\"token key atrule\">timeout<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;30s&#034;<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;infrastructure_orchestrator&#034;<\/span><br \/>\n          <span class=\"token key atrule\">supported_providers<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;aws&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;azure&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;kubernetes&#034;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>    <span class=\"token key atrule\">learning_module<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">algorithm<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;reinforcement_learning&#034;<\/span><br \/>\n      <span class=\"token key atrule\">config<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token key atrule\">state_space<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;system_metrics&#034;<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;workload_patterns&#034;<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;user_behavior&#034;<\/span><br \/>\n        <span class=\"token key atrule\">action_space<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;scale_resources&#034;<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;adjust_configurations&#034;<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;execute_remediation&#034;<\/span><br \/>\n        <span class=\"token key atrule\">reward_function<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;weighted_composite_of_qos_and_cost&#034;<\/span><\/p>\n<p>    <span class=\"token key atrule\">knowledge_base<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">storage<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token key atrule\">primary<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;graph_database&#034;<\/span><br \/>\n        <span class=\"token key atrule\">secondary<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;vector_database&#034;<\/span><br \/>\n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;redis&#034;<\/span><\/p>\n<p>      <span class=\"token key atrule\">schemas<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;system_topology&#034;<\/span><br \/>\n          <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;ontology&#034;<\/span><br \/>\n          <span class=\"token key atrule\">file<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;schemas\/topology.ttl&#034;<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;incident_patterns&#034;<\/span><br \/>\n          <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;knowledge_graph&#034;<\/span><br \/>\n          <span class=\"token key atrule\">file<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;schemas\/incidents.neo4j&#034;<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;best_practices&#034;<\/span><br \/>\n          <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;document_store&#034;<\/span><br \/>\n          <span class=\"token key atrule\">file<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;knowledge\/best_practices.json&#034;<\/span><\/p>\n<p>  <span class=\"token key atrule\">communication<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">internal<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">protocol<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;gRPC&#034;<\/span><br \/>\n      <span class=\"token key atrule\">message_format<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;protobuf&#034;<\/span><\/p>\n<p>    <span class=\"token key atrule\">external<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">apis<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;rest&#034;<\/span><br \/>\n          <span class=\"token key atrule\">authentication<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;jwt&#034;<\/span><br \/>\n          <span class=\"token key atrule\">rate_limit<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;1000\/hour&#034;<\/span><\/p>\n<p>        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;websocket&#034;<\/span><br \/>\n          <span class=\"token key atrule\">events<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status_update&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;alert&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;completion&#034;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>  <span class=\"token key atrule\">monitoring<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">metrics<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;agent_decision_latency&#034;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;action_success_rate&#034;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;knowledge_base_hit_rate&#034;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;learning_progress&#034;<\/span><\/p>\n<p>    <span class=\"token key atrule\">logging<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">level<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;INFO&#034;<\/span><br \/>\n      <span class=\"token key atrule\">format<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;json&#034;<\/span><br \/>\n      <span class=\"token key atrule\">retention<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;30d&#034;<\/span><\/p>\n<p>    <span class=\"token key atrule\">alerting<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">channels<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;slack&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;email&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;pagerduty&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n      <span class=\"token key atrule\">thresholds<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token key atrule\">error_rate<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;5%&#034;<\/span><br \/>\n        <span class=\"token key atrule\">latency_p95<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;1000ms&#034;<\/span><\/p>\n<h3>5. \u77e5\u8bc6\u5e93\u7cfb\u7edf\u5b9e\u73b0\u65b9\u6848<\/h3>\n<h4>5.1 \u77e5\u8bc6\u56fe\u8c31\u6784\u5efa\u6d41\u7a0b<\/h4>\n<p><span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n\u77e5\u8bc6\u56fe\u8c31\u6784\u5efa\u4e0e\u7ba1\u7406\u7cfb\u7edf<br \/>\n&#034;&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">from<\/span> typing <span class=\"token keyword\">import<\/span> Dict<span class=\"token punctuation\">,<\/span> List<span class=\"token punctuation\">,<\/span> Set<span class=\"token punctuation\">,<\/span> Tuple<span class=\"token punctuation\">,<\/span> Optional<br \/>\n<span class=\"token keyword\">from<\/span> dataclasses <span class=\"token keyword\">import<\/span> dataclass<span class=\"token punctuation\">,<\/span> field<br \/>\n<span class=\"token keyword\">from<\/span> datetime <span class=\"token keyword\">import<\/span> datetime<br \/>\n<span class=\"token keyword\">import<\/span> networkx <span class=\"token keyword\">as<\/span> nx<br \/>\n<span class=\"token keyword\">from<\/span> enum <span class=\"token keyword\">import<\/span> Enum<br \/>\n<span class=\"token keyword\">import<\/span> json<br \/>\n<span class=\"token keyword\">import<\/span> hashlib<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">RelationType<\/span><span class=\"token punctuation\">(<\/span>Enum<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u5173\u7cfb\u7c7b\u578b\u679a\u4e3e&#034;&#034;&#034;<\/span><br \/>\n    IS_A <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;is_a&#034;<\/span>           <span class=\"token comment\"># \u7236\u5b50\u7c7b\u5173\u7cfb<\/span><br \/>\n    PART_OF <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;part_of&#034;<\/span>     <span class=\"token comment\"># \u90e8\u5206\u5173\u7cfb<\/span><br \/>\n    USES <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;uses&#034;<\/span>           <span class=\"token comment\"># \u4f7f\u7528\u5173\u7cfb<\/span><br \/>\n    DEPENDS_ON <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;depends_on&#034;<\/span>  <span class=\"token comment\"># \u4f9d\u8d56\u5173\u7cfb<\/span><br \/>\n    CREATES <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;creates&#034;<\/span>     <span class=\"token comment\"># \u521b\u5efa\u5173\u7cfb<\/span><br \/>\n    MANAGES <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;manages&#034;<\/span>     <span class=\"token comment\"># \u7ba1\u7406\u5173\u7cfb<\/span><br \/>\n    RELATED_TO <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;related_to&#034;<\/span>  <span class=\"token comment\"># \u76f8\u5173\u5173\u7cfb<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;dataclass<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Entity<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u77e5\u8bc6\u5b9e\u4f53&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin\">id<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    <span class=\"token builtin\">type<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    properties<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">any<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> field<span class=\"token punctuation\">(<\/span>default_factory<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">dict<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    attributes<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">any<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> field<span class=\"token punctuation\">(<\/span>default_factory<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">dict<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    created_at<span class=\"token punctuation\">:<\/span> datetime <span class=\"token operator\">&#061;<\/span> field<span class=\"token punctuation\">(<\/span>default_factory<span class=\"token operator\">&#061;<\/span>datetime<span class=\"token punctuation\">.<\/span>now<span class=\"token punctuation\">)<\/span><br \/>\n    updated_at<span class=\"token punctuation\">:<\/span> datetime <span class=\"token operator\">&#061;<\/span> field<span class=\"token punctuation\">(<\/span>default_factory<span class=\"token operator\">&#061;<\/span>datetime<span class=\"token punctuation\">.<\/span>now<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">to_dict<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;id&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">type<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;properties&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>properties<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;attributes&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>attributes<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;created_at&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>created_at<span class=\"token punctuation\">.<\/span>isoformat<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;updated_at&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>updated_at<span class=\"token punctuation\">.<\/span>isoformat<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token decorator annotation punctuation\">&#064;classmethod<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">from_dict<\/span><span class=\"token punctuation\">(<\/span>cls<span class=\"token punctuation\">,<\/span> data<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        entity <span class=\"token operator\">&#061;<\/span> cls<span class=\"token punctuation\">(<\/span><br \/>\n            <span class=\"token builtin\">id<\/span><span class=\"token operator\">&#061;<\/span>data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            name<span class=\"token operator\">&#061;<\/span>data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token builtin\">type<\/span><span class=\"token operator\">&#061;<\/span>data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            properties<span class=\"token operator\">&#061;<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;properties&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            attributes<span class=\"token operator\">&#061;<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;attributes&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><br \/>\n        entity<span class=\"token punctuation\">.<\/span>created_at <span class=\"token operator\">&#061;<\/span> datetime<span class=\"token punctuation\">.<\/span>fromisoformat<span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;created_at&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        entity<span class=\"token punctuation\">.<\/span>updated_at <span class=\"token operator\">&#061;<\/span> datetime<span class=\"token punctuation\">.<\/span>fromisoformat<span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;updated_at&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> entity<\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;dataclass<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Relation<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u5b9e\u4f53\u5173\u7cfb&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin\">id<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    source_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    target_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><br \/>\n    <span class=\"token builtin\">type<\/span><span class=\"token punctuation\">:<\/span> RelationType<br \/>\n    properties<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">any<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> field<span class=\"token punctuation\">(<\/span>default_factory<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">dict<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    confidence<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">float<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1.0<\/span><br \/>\n    created_at<span class=\"token punctuation\">:<\/span> datetime <span class=\"token operator\">&#061;<\/span> field<span class=\"token punctuation\">(<\/span>default_factory<span class=\"token operator\">&#061;<\/span>datetime<span class=\"token punctuation\">.<\/span>now<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">to_dict<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;id&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;source_id&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>source_id<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;target_id&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>target_id<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">type<\/span><span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;properties&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>properties<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;confidence&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>confidence<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;created_at&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>created_at<span class=\"token punctuation\">.<\/span>isoformat<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">KnowledgeGraph<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u77e5\u8bc6\u56fe\u8c31&#034;&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>name <span class=\"token operator\">&#061;<\/span> name<br \/>\n        self<span class=\"token punctuation\">.<\/span>graph <span class=\"token operator\">&#061;<\/span> nx<span class=\"token punctuation\">.<\/span>MultiDiGraph<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> Entity<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>relations<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> Relation<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>index <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span>  <span class=\"token comment\"># \u53cd\u5411\u7d22\u5f15<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">add_entity<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> entity<span class=\"token punctuation\">:<\/span> Entity<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u6dfb\u52a0\u5b9e\u4f53&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> entity<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span> <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">False<\/span><\/p>\n<p>        self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">[<\/span>entity<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> entity<br \/>\n        self<span class=\"token punctuation\">.<\/span>graph<span class=\"token punctuation\">.<\/span>add_node<span class=\"token punctuation\">(<\/span>entity<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">**<\/span>entity<span class=\"token punctuation\">.<\/span>to_dict<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u66f4\u65b0\u7d22\u5f15<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> key<span class=\"token punctuation\">,<\/span> value <span class=\"token keyword\">in<\/span> entity<span class=\"token punctuation\">.<\/span>properties<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            index_key <span class=\"token operator\">&#061;<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>key<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">:<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>value<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><br \/>\n            self<span class=\"token punctuation\">.<\/span>index<span class=\"token punctuation\">.<\/span>setdefault<span class=\"token punctuation\">(<\/span>index_key<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">set<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>add<span class=\"token punctuation\">(<\/span>entity<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">True<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">add_relation<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> relation<span class=\"token punctuation\">:<\/span> Relation<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u6dfb\u52a0\u5173\u7cfb&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> relation<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span> <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>relations<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">False<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> relation<span class=\"token punctuation\">.<\/span>source_id <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">raise<\/span> ValueError<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u6e90\u5b9e\u4f53\u4e0d\u5b58\u5728: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>relation<span class=\"token punctuation\">.<\/span>source_id<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> relation<span class=\"token punctuation\">.<\/span>target_id <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">raise<\/span> ValueError<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u76ee\u6807\u5b9e\u4f53\u4e0d\u5b58\u5728: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>relation<span class=\"token punctuation\">.<\/span>target_id<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        self<span class=\"token punctuation\">.<\/span>relations<span class=\"token punctuation\">[<\/span>relation<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> relation<br \/>\n        self<span class=\"token punctuation\">.<\/span>graph<span class=\"token punctuation\">.<\/span>add_edge<span class=\"token punctuation\">(<\/span><br \/>\n            relation<span class=\"token punctuation\">.<\/span>source_id<span class=\"token punctuation\">,<\/span><br \/>\n            relation<span class=\"token punctuation\">.<\/span>target_id<span class=\"token punctuation\">,<\/span><br \/>\n            key<span class=\"token operator\">&#061;<\/span>relation<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token operator\">**<\/span>relation<span class=\"token punctuation\">.<\/span>to_dict<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">True<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">query<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> pattern<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>Dict<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u56fe\u6a21\u5f0f\u67e5\u8be2&#034;&#034;&#034;<\/span><br \/>\n        results <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token comment\"># \u6839\u636e\u5c5e\u6027\u67e5\u8be2\u5b9e\u4f53<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token string\">&#034;properties&#034;<\/span> <span class=\"token keyword\">in<\/span> pattern<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> key<span class=\"token punctuation\">,<\/span> value <span class=\"token keyword\">in<\/span> pattern<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;properties&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                index_key <span class=\"token operator\">&#061;<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>key<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">:<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>value<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><br \/>\n                <span class=\"token keyword\">if<\/span> index_key <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>index<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">for<\/span> entity_id <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>index<span class=\"token punctuation\">[<\/span>index_key<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                        entity <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">[<\/span>entity_id<span class=\"token punctuation\">]<\/span><br \/>\n                        <span class=\"token keyword\">if<\/span> self<span class=\"token punctuation\">.<\/span>_matches_pattern<span class=\"token punctuation\">(<\/span>entity<span class=\"token punctuation\">,<\/span> pattern<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                            results<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>entity<span class=\"token punctuation\">.<\/span>to_dict<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> results<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_matches_pattern<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> entity<span class=\"token punctuation\">:<\/span> Entity<span class=\"token punctuation\">,<\/span> pattern<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u68c0\u67e5\u5b9e\u4f53\u662f\u5426\u5339\u914d\u6a21\u5f0f&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> key<span class=\"token punctuation\">,<\/span> expected <span class=\"token keyword\">in<\/span> pattern<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> key <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;properties&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> prop_key<span class=\"token punctuation\">,<\/span> prop_value <span class=\"token keyword\">in<\/span> expected<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">if<\/span> entity<span class=\"token punctuation\">.<\/span>properties<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span>prop_key<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> prop_value<span class=\"token punctuation\">:<\/span><br \/>\n                        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">False<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> key <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> entity<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">type<\/span> <span class=\"token operator\">!&#061;<\/span> expected<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">False<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> key <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> expected <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> entity<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">False<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">True<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">infer_relations<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> entity_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> depth<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>Dict<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u63a8\u7406\u76f8\u5173\u5173\u7cfb&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> entity_id <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>        inferred <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        visited <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">set<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">def<\/span> <span class=\"token function\">dfs<\/span><span class=\"token punctuation\">(<\/span>current_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> current_depth<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">,<\/span> path<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> current_depth <span class=\"token operator\">&gt;<\/span> depth <span class=\"token keyword\">or<\/span> current_id <span class=\"token keyword\">in<\/span> visited<span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">return<\/span><\/p>\n<p>            visited<span class=\"token punctuation\">.<\/span>add<span class=\"token punctuation\">(<\/span>current_id<span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token comment\"># \u83b7\u53d6\u6240\u6709\u51fa\u8fb9\u548c\u5165\u8fb9<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> _<span class=\"token punctuation\">,<\/span> target<span class=\"token punctuation\">,<\/span> data <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>graph<span class=\"token punctuation\">.<\/span>out_edges<span class=\"token punctuation\">(<\/span>current_id<span class=\"token punctuation\">,<\/span> data<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                relation_info <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;source&#034;<\/span><span class=\"token punctuation\">:<\/span> current_id<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;target&#034;<\/span><span class=\"token punctuation\">:<\/span> target<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;relation&#034;<\/span><span class=\"token punctuation\">:<\/span> data<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">:<\/span> path <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">[<\/span>current_id<span class=\"token punctuation\">]<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><br \/>\n                inferred<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>relation_info<span class=\"token punctuation\">)<\/span><br \/>\n                dfs<span class=\"token punctuation\">(<\/span>target<span class=\"token punctuation\">,<\/span> current_depth <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> path <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">[<\/span>current_id<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">for<\/span> source<span class=\"token punctuation\">,<\/span> _<span class=\"token punctuation\">,<\/span> data <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>graph<span class=\"token punctuation\">.<\/span>in_edges<span class=\"token punctuation\">(<\/span>current_id<span class=\"token punctuation\">,<\/span> data<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                relation_info <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;source&#034;<\/span><span class=\"token punctuation\">:<\/span> source<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;target&#034;<\/span><span class=\"token punctuation\">:<\/span> current_id<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;relation&#034;<\/span><span class=\"token punctuation\">:<\/span> data<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">:<\/span> path <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">[<\/span>current_id<span class=\"token punctuation\">]<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><br \/>\n                inferred<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>relation_info<span class=\"token punctuation\">)<\/span><br \/>\n                dfs<span class=\"token punctuation\">(<\/span>source<span class=\"token punctuation\">,<\/span> current_depth <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> path <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">[<\/span>current_id<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        dfs<span class=\"token punctuation\">(<\/span>entity_id<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> inferred<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">save<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> filepath<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u4fdd\u5b58\u77e5\u8bc6\u56fe\u8c31&#034;&#034;&#034;<\/span><br \/>\n        data <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;entities&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span>e<span class=\"token punctuation\">.<\/span>to_dict<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> e <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>entities<span class=\"token punctuation\">.<\/span>values<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;relations&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span>r<span class=\"token punctuation\">.<\/span>to_dict<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> r <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>relations<span class=\"token punctuation\">.<\/span>values<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;w&#039;<\/span><span class=\"token punctuation\">,<\/span> encoding<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;utf-8&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n            json<span class=\"token punctuation\">.<\/span>dump<span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">,<\/span> f<span class=\"token punctuation\">,<\/span> indent<span class=\"token operator\">&#061;<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> ensure_ascii<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token decorator annotation punctuation\">&#064;classmethod<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">load<\/span><span class=\"token punctuation\">(<\/span>cls<span class=\"token punctuation\">,<\/span> filepath<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u52a0\u8f7d\u77e5\u8bc6\u56fe\u8c31&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>filepath<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;r&#039;<\/span><span class=\"token punctuation\">,<\/span> encoding<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;utf-8&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n            data <span class=\"token operator\">&#061;<\/span> json<span class=\"token punctuation\">.<\/span>load<span class=\"token punctuation\">(<\/span>f<span class=\"token punctuation\">)<\/span><\/p>\n<p>        kg <span class=\"token operator\">&#061;<\/span> cls<span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u52a0\u8f7d\u5b9e\u4f53<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> entity_data <span class=\"token keyword\">in<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;entities&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            entity <span class=\"token operator\">&#061;<\/span> Entity<span class=\"token punctuation\">.<\/span>from_dict<span class=\"token punctuation\">(<\/span>entity_data<span class=\"token punctuation\">)<\/span><br \/>\n            kg<span class=\"token punctuation\">.<\/span>add_entity<span class=\"token punctuation\">(<\/span>entity<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u52a0\u8f7d\u5173\u7cfb<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> relation_data <span class=\"token keyword\">in<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;relations&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            relation <span class=\"token operator\">&#061;<\/span> Relation<span class=\"token punctuation\">(<\/span><br \/>\n                <span class=\"token builtin\">id<\/span><span class=\"token operator\">&#061;<\/span>relation_data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                source_id<span class=\"token operator\">&#061;<\/span>relation_data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;source_id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                target_id<span class=\"token operator\">&#061;<\/span>relation_data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;target_id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token builtin\">type<\/span><span class=\"token operator\">&#061;<\/span>RelationType<span class=\"token punctuation\">(<\/span>relation_data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                properties<span class=\"token operator\">&#061;<\/span>relation_data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;properties&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                confidence<span class=\"token operator\">&#061;<\/span>relation_data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;confidence&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                created_at<span class=\"token operator\">&#061;<\/span>datetime<span class=\"token punctuation\">.<\/span>fromisoformat<span class=\"token punctuation\">(<\/span>relation_data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;created_at&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">)<\/span><br \/>\n            kg<span class=\"token punctuation\">.<\/span>add_relation<span class=\"token punctuation\">(<\/span>relation<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> kg<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">KnowledgeBaseSystem<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u77e5\u8bc6\u5e93\u7cfb\u7edf&#034;&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>graphs<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> KnowledgeGraph<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>inference_rules <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>extractors <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">create_graph<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> KnowledgeGraph<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u521b\u5efa\u77e5\u8bc6\u56fe\u8c31&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> name <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>graphs<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">raise<\/span> ValueError<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u56fe\u8c31\u5df2\u5b58\u5728: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        kg <span class=\"token operator\">&#061;<\/span> KnowledgeGraph<span class=\"token punctuation\">(<\/span>name<span class=\"token punctuation\">)<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>graphs<span class=\"token punctuation\">[<\/span>name<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> kg<br \/>\n        <span class=\"token keyword\">return<\/span> kg<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">register_extractor<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> extractor<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u6ce8\u518c\u77e5\u8bc6\u63d0\u53d6\u5668&#034;&#034;&#034;<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>extractors<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>extractor<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">extract_from_text<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> text<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> graph_name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u4ece\u6587\u672c\u4e2d\u63d0\u53d6\u77e5\u8bc6&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> graph_name <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>graphs<span class=\"token punctuation\">:<\/span><br \/>\n            self<span class=\"token punctuation\">.<\/span>create_graph<span class=\"token punctuation\">(<\/span>graph_name<span class=\"token punctuation\">)<\/span><\/p>\n<p>        kg <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>graphs<span class=\"token punctuation\">[<\/span>graph_name<span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> extractor <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>extractors<span class=\"token punctuation\">:<\/span><br \/>\n            entities<span class=\"token punctuation\">,<\/span> relations <span class=\"token operator\">&#061;<\/span> extractor<span class=\"token punctuation\">.<\/span>extract<span class=\"token punctuation\">(<\/span>text<span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">for<\/span> entity <span class=\"token keyword\">in<\/span> entities<span class=\"token punctuation\">:<\/span><br \/>\n                kg<span class=\"token punctuation\">.<\/span>add_entity<span class=\"token punctuation\">(<\/span>entity<span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">for<\/span> relation <span class=\"token keyword\">in<\/span> relations<span class=\"token punctuation\">:<\/span><br \/>\n                kg<span class=\"token punctuation\">.<\/span>add_relation<span class=\"token punctuation\">(<\/span>relation<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">query_across_graphs<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> query<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>Dict<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u8de8\u56fe\u8c31\u67e5\u8be2&#034;&#034;&#034;<\/span><br \/>\n        results <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> graph_name<span class=\"token punctuation\">,<\/span> kg <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>graphs<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            graph_results <span class=\"token operator\">&#061;<\/span> kg<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">(<\/span>query<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> result <span class=\"token keyword\">in<\/span> graph_results<span class=\"token punctuation\">:<\/span><br \/>\n                result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;graph&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> graph_name<br \/>\n                results<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>result<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> results<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">infer_new_knowledge<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u63a8\u7406\u65b0\u77e5\u8bc6&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> kg <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>graphs<span class=\"token punctuation\">.<\/span>values<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token comment\"># \u5e94\u7528\u63a8\u7406\u89c4\u5219<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> rule <span class=\"token keyword\">in<\/span> self<span class=\"token punctuation\">.<\/span>inference_rules<span class=\"token punctuation\">:<\/span><br \/>\n                new_relations <span class=\"token operator\">&#061;<\/span> rule<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">apply<\/span><span class=\"token punctuation\">(<\/span>kg<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> relation <span class=\"token keyword\">in<\/span> new_relations<span class=\"token punctuation\">:<\/span><br \/>\n                    kg<span class=\"token punctuation\">.<\/span>add_relation<span class=\"token punctuation\">(<\/span>relation<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u793a\u4f8b\u4f7f\u7528<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token comment\"># \u521b\u5efa\u77e5\u8bc6\u5e93\u7cfb\u7edf<\/span><br \/>\n    kbs <span class=\"token operator\">&#061;<\/span> KnowledgeBaseSystem<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u521b\u5efa\u81ea\u52a8\u5316\u77e5\u8bc6\u56fe\u8c31<\/span><br \/>\n    automation_kg <span class=\"token operator\">&#061;<\/span> kbs<span class=\"token punctuation\">.<\/span>create_graph<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;automation_concepts&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u5b9a\u4e49\u5b9e\u4f53<\/span><br \/>\n    automation <span class=\"token operator\">&#061;<\/span> Entity<span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token builtin\">id<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ent_001&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u81ea\u52a8\u5316&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6982\u5ff5&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        properties<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;level&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u62bd\u8c61&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;domain&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u901a\u7528&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    script <span class=\"token operator\">&#061;<\/span> Entity<span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token builtin\">id<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ent_002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u811a\u672c\u6280\u672f&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6280\u672f&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        properties<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u5b9e\u73b0\u624b\u6bb5&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;language&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u591a\u79cd&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    ai <span class=\"token operator\">&#061;<\/span> Entity<span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token builtin\">id<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ent_003&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4eba\u5de5\u667a\u80fd&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u9886\u57df&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        properties<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;level&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u7406\u8bba&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;complexity&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u9ad8&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6dfb\u52a0\u5b9e\u4f53<\/span><br \/>\n    automation_kg<span class=\"token punctuation\">.<\/span>add_entity<span class=\"token punctuation\">(<\/span>automation<span class=\"token punctuation\">)<\/span><br \/>\n    automation_kg<span class=\"token punctuation\">.<\/span>add_entity<span class=\"token punctuation\">(<\/span>script<span class=\"token punctuation\">)<\/span><br \/>\n    automation_kg<span class=\"token punctuation\">.<\/span>add_entity<span class=\"token punctuation\">(<\/span>ai<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u5b9a\u4e49\u5173\u7cfb<\/span><br \/>\n    uses_relation <span class=\"token operator\">&#061;<\/span> Relation<span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token builtin\">id<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rel_001&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        source_id<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ent_001&#034;<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\"># \u81ea\u52a8\u5316<\/span><br \/>\n        target_id<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ent_002&#034;<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\"># \u811a\u672c\u6280\u672f<\/span><br \/>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">&#061;<\/span>RelationType<span class=\"token punctuation\">.<\/span>USES<span class=\"token punctuation\">,<\/span><br \/>\n        properties<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;strength&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u5f3a&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;frequency&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u9ad8&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    is_a_relation <span class=\"token operator\">&#061;<\/span> Relation<span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token builtin\">id<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rel_002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        source_id<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ent_002&#034;<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\"># \u811a\u672c\u6280\u672f<\/span><br \/>\n        target_id<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ent_003&#034;<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\"># \u4eba\u5de5\u667a\u80fd<\/span><br \/>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">&#061;<\/span>RelationType<span class=\"token punctuation\">.<\/span>RELATED_TO<span class=\"token punctuation\">,<\/span><br \/>\n        properties<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;direction&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;subset&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;nature&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;implementation&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6dfb\u52a0\u5173\u7cfb<\/span><br \/>\n    automation_kg<span class=\"token punctuation\">.<\/span>add_relation<span class=\"token punctuation\">(<\/span>uses_relation<span class=\"token punctuation\">)<\/span><br \/>\n    automation_kg<span class=\"token punctuation\">.<\/span>add_relation<span class=\"token punctuation\">(<\/span>is_a_relation<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u67e5\u8be2\u793a\u4f8b<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#061;&#061; \u77e5\u8bc6\u56fe\u8c31\u67e5\u8be2 &#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    results <span class=\"token operator\">&#061;<\/span> automation_kg<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token string\">&#034;properties&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;level&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u62bd\u8c61&#034;<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> result <span class=\"token keyword\">in<\/span> results<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u627e\u5230\u5b9e\u4f53: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;name&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u63a8\u7406\u5173\u7cfb<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#061;&#061;&#061; \u5173\u7cfb\u63a8\u7406 &#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    inferred <span class=\"token operator\">&#061;<\/span> automation_kg<span class=\"token punctuation\">.<\/span>infer_relations<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ent_001&#034;<\/span><span class=\"token punctuation\">,<\/span> depth<span class=\"token operator\">&#061;<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> rel <span class=\"token keyword\">in<\/span> inferred<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u5173\u7cfb: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>rel<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;relation&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;type&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u4ece: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>rel<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;source&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u5230: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>rel<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;target&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u4fdd\u5b58\u77e5\u8bc6\u56fe\u8c31<\/span><br \/>\n    automation_kg<span class=\"token punctuation\">.<\/span>save<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;automation_knowledge_graph.json&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#061;&#061;&#061; \u77e5\u8bc6\u56fe\u8c31\u5df2\u4fdd\u5b58 &#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    main<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h3>6. \u73b0\u4ee3\u81ea\u52a8\u5316\u6280\u672f\u6808<\/h3>\n<h4>6.1 \u6280\u672f\u6808\u67b6\u6784<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                   \u81ea\u52a8\u5316\u6280\u672f\u6808                                \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502  \u9886\u57df                     \u6280\u672f\u6808                             \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u57fa\u7840\u8bbe\u65bd\u81ea\u52a8\u5316  Terraform, Ansible, Kubernetes, Docker      \u2502<br \/>\n\u2502 \u6301\u7eed\u96c6\u6210\/\u90e8\u7f72    Jenkins, GitLab CI, GitHub Actions, ArgoCD \u2502<br \/>\n\u2502 \u6d4b\u8bd5\u81ea\u52a8\u5316        Selenium, Cypress, Jest, Pytest           \u2502<br \/>\n\u2502 \u76d1\u63a7\u4e0e\u544a\u8b66        Prometheus, Grafana, ELK Stack, Datadog   \u2502<br \/>\n\u2502 AI\/ML\u81ea\u52a8\u5316      Kubeflow, MLflow, Airflow, TensorFlow      \u2502<br \/>\n\u2502 \u4e1a\u52a1\u6d41\u7a0b\u81ea\u52a8\u5316   UiPath, Automation Anywhere, Power Automate\u2502<br \/>\n\u2502 \u6570\u636e\u7ba1\u9053\u81ea\u52a8\u5316   Apache Airflow, Dagster, Prefect, dbt      \u2502<br \/>\n\u2502 \u5b89\u5168\u81ea\u52a8\u5316       SOAR\u5e73\u53f0, \u6f0f\u6d1e\u626b\u63cf, \u5408\u89c4\u68c0\u67e5               \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h4>6.2 \u5bb9\u5668\u5316\u81ea\u52a8\u5316\u90e8\u7f72\u793a\u4f8b<\/h4>\n<p><span class=\"token comment\"># docker-compose.yml &#8211; \u81ea\u52a8\u5316\u7cfb\u7edf\u5bb9\u5668\u5316\u90e8\u7f72<\/span><br \/>\n<span class=\"token key atrule\">version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#039;3.8&#039;<\/span><\/p>\n<p><span class=\"token key atrule\">services<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token comment\"># AI\u63a8\u7406\u670d\u52a1<\/span><br \/>\n  <span class=\"token key atrule\">ai-engine<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> tensorflow\/serving<span class=\"token punctuation\">:<\/span>latest<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> ai<span class=\"token punctuation\">&#8211;<\/span>inference<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;8500:8500&#034;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;8501:8501&#034;<\/span><br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/models<span class=\"token punctuation\">:<\/span>\/models<br \/>\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> MODEL_NAME&#061;automation_model<br \/>\n    <span class=\"token key atrule\">deploy<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">resources<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token key atrule\">limits<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token key atrule\">cpus<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#039;2&#039;<\/span><br \/>\n          <span class=\"token key atrule\">memory<\/span><span class=\"token punctuation\">:<\/span> 4G<br \/>\n        <span class=\"token key atrule\">reservations<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token key atrule\">cpus<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#039;1&#039;<\/span><br \/>\n          <span class=\"token key atrule\">memory<\/span><span class=\"token punctuation\">:<\/span> 2G<br \/>\n    <span class=\"token key atrule\">healthcheck<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">test<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;CMD&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;curl&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;-f&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;http:\/\/localhost:8501\/v1\/models\/automation_model&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n      <span class=\"token key atrule\">interval<\/span><span class=\"token punctuation\">:<\/span> 30s<br \/>\n      <span class=\"token key atrule\">timeout<\/span><span class=\"token punctuation\">:<\/span> 10s<br \/>\n      <span class=\"token key atrule\">retries<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">3<\/span><\/p>\n<p>  <span class=\"token comment\"># \u77e5\u8bc6\u56fe\u8c31\u670d\u52a1<\/span><br \/>\n  <span class=\"token key atrule\">knowledge-graph<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> neo4j<span class=\"token punctuation\">:<\/span><span class=\"token number\">4.4<\/span><br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> knowledge<span class=\"token punctuation\">&#8211;<\/span>graph<span class=\"token punctuation\">&#8211;<\/span>db<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;7474:7474&#034;<\/span>  <span class=\"token comment\"># HTTP<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;7687:7687&#034;<\/span>  <span class=\"token comment\"># Bolt<\/span><br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> neo4j_data<span class=\"token punctuation\">:<\/span>\/data<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> neo4j_logs<span class=\"token punctuation\">:<\/span>\/logs<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> neo4j_import<span class=\"token punctuation\">:<\/span>\/var\/lib\/neo4j\/import<br \/>\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> NEO4J_AUTH&#061;neo4j\/automation123<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> NEO4J_dbms_memory_pagecache_size&#061;1G<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> NEO4J_dbms_memory_heap_max__size&#061;2G<br \/>\n    <span class=\"token key atrule\">restart<\/span><span class=\"token punctuation\">:<\/span> unless<span class=\"token punctuation\">&#8211;<\/span>stopped<\/p>\n<p>  <span class=\"token comment\"># \u5de5\u4f5c\u6d41\u5f15\u64ce<\/span><br \/>\n  <span class=\"token key atrule\">workflow-engine<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">build<\/span><span class=\"token punctuation\">:<\/span> .\/workflow<span class=\"token punctuation\">&#8211;<\/span>engine<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> workflow<span class=\"token punctuation\">&#8211;<\/span>orchestrator<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;8080:8080&#034;<\/span><br \/>\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> DB_HOST&#061;postgres<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> DB_PORT&#061;5432<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> DB_NAME&#061;workflows<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> DB_USER&#061;automation<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> DB_PASSWORD&#061;securepass<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> REDIS_HOST&#061;redis<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> REDIS_PORT&#061;6379<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> AI_ENGINE_URL&#061;http<span class=\"token punctuation\">:<\/span>\/\/ai<span class=\"token punctuation\">&#8211;<\/span>engine<span class=\"token punctuation\">:<\/span><span class=\"token number\">8501<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> KNOWLEDGE_GRAPH_URL&#061;bolt<span class=\"token punctuation\">:<\/span>\/\/knowledge<span class=\"token punctuation\">&#8211;<\/span>graph<span class=\"token punctuation\">:<\/span><span class=\"token number\">7687<\/span><br \/>\n    <span class=\"token key atrule\">depends_on<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> postgres<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> redis<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> ai<span class=\"token punctuation\">&#8211;<\/span>engine<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> knowledge<span class=\"token punctuation\">&#8211;<\/span>graph<br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/workflows<span class=\"token punctuation\">:<\/span>\/app\/workflows<br \/>\n    <span class=\"token key atrule\">deploy<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">replicas<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">2<\/span><\/p>\n<p>  <span class=\"token comment\"># \u811a\u672c\u6267\u884c\u5668<\/span><br \/>\n  <span class=\"token key atrule\">script-executor<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">build<\/span><span class=\"token punctuation\">:<\/span> .\/script<span class=\"token punctuation\">&#8211;<\/span>executor<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> script<span class=\"token punctuation\">&#8211;<\/span>runner<br \/>\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> PYTHONPATH&#061;\/app<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> EXECUTION_TIMEOUT&#061;300<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> MAX_CONCURRENT_SCRIPTS&#061;10<br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/scripts<span class=\"token punctuation\">:<\/span>\/app\/scripts<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/shared<span class=\"token punctuation\">:<\/span>\/app\/shared<br \/>\n    <span class=\"token key atrule\">depends_on<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> redis<br \/>\n    <span class=\"token key atrule\">security_opt<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> no<span class=\"token punctuation\">&#8211;<\/span>new<span class=\"token punctuation\">&#8211;<\/span>privileges<span class=\"token punctuation\">:<\/span><span class=\"token boolean important\">true<\/span><br \/>\n    <span class=\"token key atrule\">cap_drop<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> ALL<br \/>\n    <span class=\"token key atrule\">cap_add<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> CHOWN<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> SETGID<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> SETUID<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> DAC_OVERRIDE<\/p>\n<p>  <span class=\"token comment\"># \u6d88\u606f\u961f\u5217<\/span><br \/>\n  <span class=\"token key atrule\">redis<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> redis<span class=\"token punctuation\">:<\/span>7<span class=\"token punctuation\">&#8211;<\/span>alpine<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> message<span class=\"token punctuation\">&#8211;<\/span>broker<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;6379:6379&#034;<\/span><br \/>\n    <span class=\"token key atrule\">command<\/span><span class=\"token punctuation\">:<\/span> redis<span class=\"token punctuation\">&#8211;<\/span>server <span class=\"token punctuation\">&#8211;<\/span><span class=\"token punctuation\">&#8211;<\/span>appendonly yes <span class=\"token punctuation\">&#8211;<\/span><span class=\"token punctuation\">&#8211;<\/span>requirepass redissecret<br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> redis_data<span class=\"token punctuation\">:<\/span>\/data<br \/>\n    <span class=\"token key atrule\">healthcheck<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">test<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;CMD&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;redis-cli&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;ping&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n      <span class=\"token key atrule\">interval<\/span><span class=\"token punctuation\">:<\/span> 10s<br \/>\n      <span class=\"token key atrule\">timeout<\/span><span class=\"token punctuation\">:<\/span> 5s<br \/>\n      <span class=\"token key atrule\">retries<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">3<\/span><\/p>\n<p>  <span class=\"token comment\"># \u6570\u636e\u5e93<\/span><br \/>\n  <span class=\"token key atrule\">postgres<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> postgres<span class=\"token punctuation\">:<\/span>14<span class=\"token punctuation\">&#8211;<\/span>alpine<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> automation<span class=\"token punctuation\">&#8211;<\/span>db<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;5432:5432&#034;<\/span><br \/>\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> POSTGRES_DB&#061;automation<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> POSTGRES_USER&#061;automation<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> POSTGRES_PASSWORD&#061;dbpassword123<br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> postgres_data<span class=\"token punctuation\">:<\/span>\/var\/lib\/postgresql\/data<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/init<span class=\"token punctuation\">&#8211;<\/span>db.sql<span class=\"token punctuation\">:<\/span>\/docker<span class=\"token punctuation\">&#8211;<\/span>entrypoint<span class=\"token punctuation\">&#8211;<\/span>initdb.d\/init.sql<br \/>\n    <span class=\"token key atrule\">healthcheck<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">test<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;CMD-SHELL&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;pg_isready -U automation&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n      <span class=\"token key atrule\">interval<\/span><span class=\"token punctuation\">:<\/span> 10s<br \/>\n      <span class=\"token key atrule\">timeout<\/span><span class=\"token punctuation\">:<\/span> 5s<br \/>\n      <span class=\"token key atrule\">retries<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">5<\/span><\/p>\n<p>  <span class=\"token comment\"># \u76d1\u63a7\u7cfb\u7edf<\/span><br \/>\n  <span class=\"token key atrule\">prometheus<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> prom\/prometheus<span class=\"token punctuation\">:<\/span>latest<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> metrics<span class=\"token punctuation\">&#8211;<\/span>collector<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;9090:9090&#034;<\/span><br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/prometheus.yml<span class=\"token punctuation\">:<\/span>\/etc\/prometheus\/prometheus.yml<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> prometheus_data<span class=\"token punctuation\">:<\/span>\/prometheus<br \/>\n    <span class=\"token key atrule\">command<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#039;&#8211;config.file&#061;\/etc\/prometheus\/prometheus.yml&#039;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#039;&#8211;storage.tsdb.path&#061;\/prometheus&#039;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#039;&#8211;web.console.libraries&#061;\/etc\/prometheus\/console_libraries&#039;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#039;&#8211;web.console.templates&#061;\/etc\/prometheus\/consoles&#039;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#039;&#8211;storage.tsdb.retention.time&#061;200h&#039;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#039;&#8211;web.enable-lifecycle&#039;<\/span><br \/>\n    <span class=\"token key atrule\">depends_on<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> workflow<span class=\"token punctuation\">&#8211;<\/span>engine<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> script<span class=\"token punctuation\">&#8211;<\/span>executor<\/p>\n<p>  <span class=\"token key atrule\">grafana<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">image<\/span><span class=\"token punctuation\">:<\/span> grafana\/grafana<span class=\"token punctuation\">:<\/span>latest<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> monitoring<span class=\"token punctuation\">&#8211;<\/span>dashboard<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;3000:3000&#034;<\/span><br \/>\n    <span class=\"token key atrule\">environment<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> GF_SECURITY_ADMIN_PASSWORD&#061;grafanaadmin<br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> grafana_data<span class=\"token punctuation\">:<\/span>\/var\/lib\/grafana<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/grafana\/provisioning<span class=\"token punctuation\">:<\/span>\/etc\/grafana\/provisioning<br \/>\n    <span class=\"token key atrule\">depends_on<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> prometheus<\/p>\n<p>  <span class=\"token comment\"># \u524d\u7aef\u754c\u9762<\/span><br \/>\n  <span class=\"token key atrule\">web-ui<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">build<\/span><span class=\"token punctuation\">:<\/span> .\/web<span class=\"token punctuation\">&#8211;<\/span>ui<br \/>\n    <span class=\"token key atrule\">container_name<\/span><span class=\"token punctuation\">:<\/span> automation<span class=\"token punctuation\">&#8211;<\/span>portal<br \/>\n    <span class=\"token key atrule\">ports<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;80:80&#034;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token string\">&#034;443:443&#034;<\/span><br \/>\n    <span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/nginx.conf<span class=\"token punctuation\">:<\/span>\/etc\/nginx\/nginx.conf<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> .\/ssl<span class=\"token punctuation\">:<\/span>\/etc\/nginx\/ssl<br \/>\n    <span class=\"token key atrule\">depends_on<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> workflow<span class=\"token punctuation\">&#8211;<\/span>engine<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> script<span class=\"token punctuation\">&#8211;<\/span>executor<\/p>\n<p><span class=\"token key atrule\">volumes<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">neo4j_data<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">neo4j_logs<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">neo4j_import<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">redis_data<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">postgres_data<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">prometheus_data<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">grafana_data<\/span><span class=\"token punctuation\">:<\/span><\/p>\n<p><span class=\"token key atrule\">networks<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">default<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> automation<span class=\"token punctuation\">&#8211;<\/span>network<br \/>\n    <span class=\"token key atrule\">driver<\/span><span class=\"token punctuation\">:<\/span> bridge<br \/>\n    <span class=\"token key atrule\">ipam<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token key atrule\">config<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">subnet<\/span><span class=\"token punctuation\">:<\/span> 172.20.0.0\/16<\/p>\n<h3>7. \u603b\u7ed3\u4e0e\u672a\u6765\u5c55\u671b<\/h3>\n<h4>7.1 \u6982\u5ff5\u5173\u7cfb\u601d\u7ef4\u5bfc\u56fe<\/h4>\n<p>  #mermaid-svg-h954U9Pb4Wpmz6M5{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-h954U9Pb4Wpmz6M5 .error-icon{fill:#552222;}#mermaid-svg-h954U9Pb4Wpmz6M5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-h954U9Pb4Wpmz6M5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-h954U9Pb4Wpmz6M5 .marker.cross{stroke:#333333;}#mermaid-svg-h954U9Pb4Wpmz6M5 svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-h954U9Pb4Wpmz6M5 p{margin:0;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge{stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section&#8211;1 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section&#8211;1 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section&#8211;1 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section&#8211;1 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section&#8211;1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section&#8211;1 text{fill:#ffffff;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon&#8211;1{font-size:40px;color:#ffffff;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge&#8211;1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth&#8211;1{stroke-width:17;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section&#8211;1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-0 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-0 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-0 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-0 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-0 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-0{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-0{stroke-width:14;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-1 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-1 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-1 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-1 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-1 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-1{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-1{stroke-width:11;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 text{fill:#ffffff;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-2{stroke-width:8;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-3 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-3 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-3 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-3 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-3 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-3{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-3{stroke-width:5;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-4 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-4 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-4 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-4 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-4 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-4{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-4{stroke-width:2;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-5 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-5 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-5 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-5 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-5 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-5{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-5{stroke-width:-1;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-6 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-6 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-6 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-6 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-6 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-6{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-6{stroke-width:-4;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-7 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-7 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-7 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-7 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-7 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-7{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-7{stroke-width:-7;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-8 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-8 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-8 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-8 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-8 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-8{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-8{stroke-width:-10;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-9 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-9 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-9 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-9 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-9 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-9{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-9{stroke-width:-13;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-10 rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-10 path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-10 circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-10 polygon,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-10 text{fill:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .node-icon-10{font-size:40px;color:black;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge-depth-10{stroke-width:-16;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:lightgray;}#mermaid-svg-h954U9Pb4Wpmz6M5 .disabled text{fill:#efefef;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-root rect,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-root path,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-root circle,#mermaid-svg-h954U9Pb4Wpmz6M5 .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-root text{fill:#ffffff;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-root span{color:#ffffff;}#mermaid-svg-h954U9Pb4Wpmz6M5 .section-2 span{color:#ffffff;}#mermaid-svg-h954U9Pb4Wpmz6M5 .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-h954U9Pb4Wpmz6M5 .edge{fill:none;}#mermaid-svg-h954U9Pb4Wpmz6M5 .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-h954U9Pb4Wpmz6M5 :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"edgeLabel\"><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u81ea\u52a8\u5316\u4e0e\u667a\u80fd\u7cfb\u7edf\u751f\u6001\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7406\u8bba\u57fa\u7840<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u63a7\u5236\u8bba<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u53cd\u9988\u673a\u5236<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7cfb\u7edf\u8c03\u8282<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4fe1\u606f\u8bba<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4fe1\u606f\u5904\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u901a\u4fe1\u7406\u8bba<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4eba\u5de5\u667a\u80fd\u7406\u8bba<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u673a\u5668\u5b66\u4e60<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6df1\u5ea6\u5b66\u4e60<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5f3a\u5316\u5b66\u4e60<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6280\u672f\u5b9e\u73b0\u5c42<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u81ea\u52a8\u5316\u6280\u672f<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u811a\u672c\u6280\u672f<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:Python, Bash, PowerShell<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5de5\u4f5c\u6d41\u5f15\u64ce<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:Airflow, Camunda<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4efb\u52a1\u8c03\u5ea6\u5668<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:Celery, Quartz<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4eba\u5de5\u667a\u80fd\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u611f\u77e5\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:\u8ba1\u7b97\u673a\u89c6\u89c9, NLP<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u51b3\u7b56\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:\u63a8\u7406\u5f15\u64ce, \u89c4\u5212\u5668<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6267\u884c\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:\u673a\u68b0\u81c2, \u8f6f\u4ef6\u4ee3\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u673a\u5668\u4eba\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u786c\u4ef6\u5e73\u53f0<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:\u79fb\u52a8\u5e95\u76d8, \u673a\u68b0\u7ed3\u6784<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4f20\u611f\u5668\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:LiDAR, \u6444\u50cf\u5934, IMU<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u63a7\u5236\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:ROS, \u8fd0\u52a8\u89c4\u5212<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u77e5\u8bc6\u7ba1\u7406\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u77e5\u8bc6\u8868\u793a<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:\u672c\u4f53, \u77e5\u8bc6\u56fe\u8c31<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u77e5\u8bc6\u5b58\u50a8<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:\u56fe\u6570\u636e\u5e93, \u5411\u91cf\u6570\u636e\u5e93<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u77e5\u8bc6\u63a8\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>:\u89c4\u5219\u5f15\u64ce, \u903b\u8f91\u63a8\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5e94\u7528\u9886\u57df<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5de5\u4e1a\u81ea\u52a8\u5316<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u667a\u80fd\u5236\u9020<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u8fc7\u7a0b\u63a7\u5236<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u8d28\u91cf\u68c0\u6d4b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>RPA<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6570\u636e\u5f55\u5165<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6587\u6863\u5904\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5ba2\u6237\u670d\u52a1<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>AIOps<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5f02\u5e38\u68c0\u6d4b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6839\u56e0\u5206\u6790<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u81ea\u6108\u7cfb\u7edf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u667a\u80fd\u5bb6\u5c45<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u73af\u5883\u63a7\u5236<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u5b89\u9632\u76d1\u63a7<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u80fd\u6e90\u7ba1\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u81ea\u52a8\u9a7e\u9a76<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u73af\u5883\u611f\u77e5<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u8def\u5f84\u89c4\u5212<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u51b3\u7b56\u63a7\u5236<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u53d1\u5c55\u8d8b\u52bf<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6280\u672f\u878d\u5408<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u8fb9\u7f18\u8ba1\u7b97\u4e0eAI\u7ed3\u5408<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6570\u5b57\u5b6a\u751f\u6280\u672f<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u8111\u673a\u63a5\u53e3<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u667a\u80fd\u5316\u589e\u5f3a<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u81ea\u4e3b\u5b66\u4e60\u80fd\u529b<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u591a\u667a\u80fd\u4f53\u534f\u4f5c<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u56e0\u679c\u63a8\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u4f26\u7406\u4e0e\u6cbb\u7406<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u53ef\u89e3\u91caAI<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u7b97\u6cd5\u516c\u5e73\u6027<\/p>\n<p><\/span><\/p>\n<p>        <span class=\"nodeLabel\"><\/p>\n<p>\u6570\u636e\u9690\u79c1\u4fdd\u62a4<\/p>\n<p><\/span><\/p>\n<h4>7.2 \u6838\u5fc3\u6d1e\u5bdf\u4e0e\u8d8b\u52bf<\/h4>\n<li>\n<p>\u6280\u672f\u878d\u5408\u8d8b\u52bf<\/p>\n<ul>\n<li>\u811a\u672c\u6280\u672f\u4e0eAI\u7cfb\u7edf\u6df1\u5ea6\u878d\u5408&#xff0c;\u5f62\u6210\u667a\u80fd\u81ea\u52a8\u5316<\/li>\n<li>\u77e5\u8bc6\u5e93\u4e3aAI\u7cfb\u7edf\u63d0\u4f9b\u53ef\u89e3\u91ca\u6027\u548c\u9886\u57df\u77e5\u8bc6<\/li>\n<li>\u673a\u5668\u4eba\u4f5c\u4e3a\u7269\u7406\u4e16\u754c\u7684\u6267\u884c\u8f7d\u4f53<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u67b6\u6784\u6f14\u8fdb\u65b9\u5411<\/p>\n<ul>\n<li>\u4ece\u96c6\u4e2d\u5f0f\u63a7\u5236\u5411\u5206\u5e03\u5f0f\u667a\u80fd\u4f53\u67b6\u6784\u6f14\u8fdb<\/li>\n<li>\u4ece\u89c4\u5219\u9a71\u52a8\u5411\u6570\u636e\u9a71\u52a8\u548c\u6a21\u578b\u9a71\u52a8\u7ed3\u5408<\/li>\n<li>\u4ece\u9759\u6001\u811a\u672c\u5411\u81ea\u9002\u5e94\u5b66\u4e60\u7cfb\u7edf\u53d1\u5c55<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u5173\u952e\u6280\u672f\u6311\u6218<\/p>\n<ul>\n<li>\u5f02\u6784\u7cfb\u7edf\u96c6\u6210\u4e0e\u4e92\u64cd\u4f5c\u6027<\/li>\n<li>\u5b9e\u65f6\u51b3\u7b56\u4e0e\u8d44\u6e90\u7ea6\u675f\u5e73\u8861<\/li>\n<li>\u5b89\u5168\u6027\u4e0e\u53ef\u9760\u6027\u4fdd\u969c<\/li>\n<li>\u4f26\u7406\u4e0e\u6cd5\u89c4\u5408\u89c4\u6027<\/li>\n<\/ul>\n<\/li>\n<h4>7.3 \u5b9e\u7528\u5efa\u8bae<\/h4>\n<li>\n<p>\u5b9e\u65bd\u8def\u7ebf\u56fe<\/p>\n<p> \u9636\u6bb51: \u57fa\u7840\u81ea\u52a8\u5316<br \/>\n  \u2192 \u811a\u672c\u6807\u51c6\u5316<br \/>\n  \u2192 \u7b80\u5355\u5de5\u4f5c\u6d41\u81ea\u52a8\u5316<br \/>\n  \u2192 \u57fa\u7840\u76d1\u63a7\u544a\u8b66<\/p>\n<p>\u9636\u6bb52: \u667a\u80fd\u589e\u5f3a<br \/>\n  \u2192 \u5f15\u5165\u673a\u5668\u5b66\u4e60\u7ec4\u4ef6<br \/>\n  \u2192 \u6784\u5efa\u77e5\u8bc6\u56fe\u8c31<br \/>\n  \u2192 \u5b9e\u73b0\u9884\u6d4b\u6027\u7ef4\u62a4<\/p>\n<p>\u9636\u6bb53: \u81ea\u4e3b\u7cfb\u7edf<br \/>\n  \u2192 \u5f3a\u5316\u5b66\u4e60\u4f18\u5316<br \/>\n  \u2192 \u591a\u667a\u80fd\u4f53\u534f\u4f5c<br \/>\n  \u2192 \u81ea\u9002\u5e94\u8c03\u6574\n <\/li>\n<li>\n<p>\u6280\u672f\u9009\u578b\u5efa\u8bae<\/p>\n<ul>\n<li>\u4e2d\u5c0f\u89c4\u6a21&#xff1a;Python &#043; Airflow &#043; PostgreSQL &#043; Redis<\/li>\n<li>\u4f01\u4e1a\u7ea7&#xff1a;Kubernetes &#043; Kubeflow &#043; Neo4j &#043; Kafka<\/li>\n<li>\u4e91\u7aef\u65b9\u6848&#xff1a;AWS Step Functions &#043; SageMaker &#043; Neptune<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u4eba\u624d\u57f9\u517b\u7b56\u7565<\/p>\n<ul>\n<li>\u4ea4\u53c9\u5b66\u79d1\u56e2\u961f&#xff1a;\u8f6f\u4ef6\u5de5\u7a0b &#043; \u6570\u636e\u79d1\u5b66 &#043; \u9886\u57df\u4e13\u5bb6<\/li>\n<li>\u6301\u7eed\u5b66\u4e60\u8ba1\u5212&#xff1a;\u5173\u6ce8AI\u3001\u81ea\u52a8\u5316\u3001DevOps\u6700\u65b0\u8fdb\u5c55<\/li>\n<li>\u5b9e\u8df5\u5bfc\u5411&#xff1a;\u901a\u8fc7\u5b9e\u9645\u9879\u76ee\u79ef\u7d2f\u7ecf\u9a8c<\/li>\n<\/ul>\n<\/li>\n<h4>7.4 \u672a\u6765\u5c55\u671b<\/h4>\n<p>\u968f\u7740\u6280\u672f\u7684\u4e0d\u65ad\u53d1\u5c55&#xff0c;\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u673a\u5668\u4eba\u3001\u667a\u80fd\u4f53\u548c\u77e5\u8bc6\u5e93\u5c06\u66f4\u52a0\u6df1\u5ea6\u878d\u5408&#xff0c;\u5f62\u6210\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u81ea\u4e3b\u667a\u80fd\u7cfb\u7edf\u3002\u8fd9\u4e9b\u7cfb\u7edf\u5c06\u5177\u5907\u66f4\u5f3a\u7684\u81ea\u9002\u5e94\u80fd\u529b\u3001\u63a8\u7406\u80fd\u529b\u548c\u534f\u4f5c\u80fd\u529b&#xff0c;\u80fd\u591f\u5728\u590d\u6742\u52a8\u6001\u73af\u5883\u4e2d\u5b8c\u6210\u5404\u79cd\u4efb\u52a1&#xff0c;\u4e3a\u4eba\u7c7b\u793e\u4f1a\u5e26\u6765\u524d\u6240\u672a\u6709\u7684\u6548\u7387\u548c\u4ef7\u503c\u3002<\/p>\n<p>\u540c\u65f6&#xff0c;\u6211\u4eec\u4e5f\u9700\u8981\u5173\u6ce8\u8fd9\u4e9b\u6280\u672f\u5e26\u6765\u7684\u4f26\u7406\u3001\u5b89\u5168\u548c\u793e\u4f1a\u5f71\u54cd&#xff0c;\u786e\u4fdd\u6280\u672f\u7684\u53d1\u5c55\u7b26\u5408\u4eba\u7c7b\u4ef7\u503c\u89c2\u548c\u5229\u76ca&#xff0c;\u5b9e\u73b0\u6280\u672f\u5411\u5584\u7684\u76ee\u6807\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u673a\u5668\u4eba\u3001\u4eba\u5de5\u667a\u80fd\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236<br \/>\n1. \u6982\u5ff5\u5b9a\u4e49\u4e0e\u5c42\u7ea7\u5173\u7cfb<br \/>\n1.1 \u6838\u5fc3\u6982\u5ff5\u5b9a\u4e49<br \/>\n\u6982\u5ff5\u5b9a\u4e49\u8303\u7574\u81ea\u52a8\u5316\u4f7f\u7528\u6280\u672f\u4f7f\u6d41\u7a0b\u3001\u7cfb\u7edf\u6216\u8bbe\u5907\u5728\u6700\u5c11\u6216\u65e0\u9700\u4eba\u5de5\u5e72\u9884\u4e0b\u8fd0\u884c\u5e7f\u4e49\u6982\u5ff5\u811a\u672c\u6280\u672f\u4f7f\u7528\u811a\u672c\u8bed\u8a00\u7f16\u5199\u7a0b\u5e8f&#xff0c;\u81ea\u52a8\u5316\u6267\u884c\u7279\u5b9a\u4efb\u52a1\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u5177\u4f53\u6280\u672f\u624b\u6bb5\u4eba\u5de5\u667a\u80fd\u4f7f\u673a\u5668\u6a21\u62df\u4eba\u7c7b\u667a\u80fd\u884c\u4e3a\u7684\u6280\u672f\u79d1\u5b66\u7406\u8bba\u6846\u67b6\u4e0e\u6280\u672f\u9886\u57dfAI\u7cfb\u7edf\u57fa\u4e8e\u4eba\u5de5\u667a\u80fd\u7406\u8bba\u6784\u5efa\u7684\u5b8c\u6574\u6280\u672f\u7cfb\u7edf\u5177\u4f53\u5b9e\u73b0\u667a\u80fd\u4f53\u80fd\u591f\u611f\u77e5\u73af\u5883\u5e76\u81ea\u4e3b\u884c\u52a8\u4ee5\u5b9e\u73b0\u76ee\u6807\u7684\u5b9e\u4f53AI\u7cfb\u7edf\u7684\u5177\u4f53\u8868\u73b0\u5f62\u5f0f\u673a\u5668\u4eba<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[50,395,44],"topic":[],"class_list":["post-70903","post","type-post","status-publish","format-standard","hentry","category-server","tag-50","tag-395","tag-44"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/70903.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u673a\u5668\u4eba\u3001\u4eba\u5de5\u667a\u80fd\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 1. \u6982\u5ff5\u5b9a\u4e49\u4e0e\u5c42\u7ea7\u5173\u7cfb 1.1 \u6838\u5fc3\u6982\u5ff5\u5b9a\u4e49 \u6982\u5ff5\u5b9a\u4e49\u8303\u7574\u81ea\u52a8\u5316\u4f7f\u7528\u6280\u672f\u4f7f\u6d41\u7a0b\u3001\u7cfb\u7edf\u6216\u8bbe\u5907\u5728\u6700\u5c11\u6216\u65e0\u9700\u4eba\u5de5\u5e72\u9884\u4e0b\u8fd0\u884c\u5e7f\u4e49\u6982\u5ff5\u811a\u672c\u6280\u672f\u4f7f\u7528\u811a\u672c\u8bed\u8a00\u7f16\u5199\u7a0b\u5e8f&#xff0c;\u81ea\u52a8\u5316\u6267\u884c\u7279\u5b9a\u4efb\u52a1\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u5177\u4f53\u6280\u672f\u624b\u6bb5\u4eba\u5de5\u667a\u80fd\u4f7f\u673a\u5668\u6a21\u62df\u4eba\u7c7b\u667a\u80fd\u884c\u4e3a\u7684\u6280\u672f\u79d1\u5b66\u7406\u8bba\u6846\u67b6\u4e0e\u6280\u672f\u9886\u57dfAI\u7cfb\u7edf\u57fa\u4e8e\u4eba\u5de5\u667a\u80fd\u7406\u8bba\u6784\u5efa\u7684\u5b8c\u6574\u6280\u672f\u7cfb\u7edf\u5177\u4f53\u5b9e\u73b0\u667a\u80fd\u4f53\u80fd\u591f\u611f\u77e5\u73af\u5883\u5e76\u81ea\u4e3b\u884c\u52a8\u4ee5\u5b9e\u73b0\u76ee\u6807\u7684\u5b9e\u4f53AI\u7cfb\u7edf\u7684\u5177\u4f53\u8868\u73b0\u5f62\u5f0f\u673a\u5668\u4eba\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/70903.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-02T10:49:17+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"42 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/70903.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/70903.html\",\"name\":\"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-02-02T10:49:17+00:00\",\"dateModified\":\"2026-02-02T10:49:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/70903.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/70903.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/70903.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/70903.html","og_locale":"zh_CN","og_type":"article","og_title":"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u673a\u5668\u4eba\u3001\u4eba\u5de5\u667a\u80fd\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 1. \u6982\u5ff5\u5b9a\u4e49\u4e0e\u5c42\u7ea7\u5173\u7cfb 1.1 \u6838\u5fc3\u6982\u5ff5\u5b9a\u4e49 \u6982\u5ff5\u5b9a\u4e49\u8303\u7574\u81ea\u52a8\u5316\u4f7f\u7528\u6280\u672f\u4f7f\u6d41\u7a0b\u3001\u7cfb\u7edf\u6216\u8bbe\u5907\u5728\u6700\u5c11\u6216\u65e0\u9700\u4eba\u5de5\u5e72\u9884\u4e0b\u8fd0\u884c\u5e7f\u4e49\u6982\u5ff5\u811a\u672c\u6280\u672f\u4f7f\u7528\u811a\u672c\u8bed\u8a00\u7f16\u5199\u7a0b\u5e8f&#xff0c;\u81ea\u52a8\u5316\u6267\u884c\u7279\u5b9a\u4efb\u52a1\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u5177\u4f53\u6280\u672f\u624b\u6bb5\u4eba\u5de5\u667a\u80fd\u4f7f\u673a\u5668\u6a21\u62df\u4eba\u7c7b\u667a\u80fd\u884c\u4e3a\u7684\u6280\u672f\u79d1\u5b66\u7406\u8bba\u6846\u67b6\u4e0e\u6280\u672f\u9886\u57dfAI\u7cfb\u7edf\u57fa\u4e8e\u4eba\u5de5\u667a\u80fd\u7406\u8bba\u6784\u5efa\u7684\u5b8c\u6574\u6280\u672f\u7cfb\u7edf\u5177\u4f53\u5b9e\u73b0\u667a\u80fd\u4f53\u80fd\u591f\u611f\u77e5\u73af\u5883\u5e76\u81ea\u4e3b\u884c\u52a8\u4ee5\u5b9e\u73b0\u76ee\u6807\u7684\u5b9e\u4f53AI\u7cfb\u7edf\u7684\u5177\u4f53\u8868\u73b0\u5f62\u5f0f\u673a\u5668\u4eba","og_url":"https:\/\/www.wsisp.com\/helps\/70903.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-02-02T10:49:17+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"42 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/70903.html","url":"https:\/\/www.wsisp.com\/helps\/70903.html","name":"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-02-02T10:49:17+00:00","dateModified":"2026-02-02T10:49:17+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/70903.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/70903.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/70903.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u81ea\u52a8\u5316\u3001\u811a\u672c\u6280\u672f\u3001AI\u7cfb\u7edf\u3001\u667a\u80fd\u4f53\u3001\u77e5\u8bc6\u5e93\u7684\u6982\u5ff5\u5173\u7cfb\u4e0e\u5de5\u4f5c\u673a\u5236"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/70903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=70903"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/70903\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=70903"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=70903"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=70903"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=70903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}