1"use strict";(self.rspackChunknebulaAiDocs=self.rspackChunknebulaAiDocs||[]).push([["148"],{4319(n,e,r){r.r(e),r.d(e,{default:()=>d});var s=r(2615),i=r(416);function l(n){let e={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(e.h1,{id:"3ç³»ç»æ¶æ",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#3ç³»ç»æ¶æ",children:"#"}),"3ãç³»ç»æ¶æ"]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.img,{src:"/images/architecture/1765800832015-c3a74ef5-0a1c-4188-ac96-a44e5ef3a102.png",alt:"NebulaAI ç³»ç»æ¶æå¾"})}),"\n",(0,s.jsxs)(e.h2,{id:"1-æ¶ææ»è§-system-architecture-overview",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#1-æ¶ææ»è§-system-architecture-overview",children:"#"}),"1. æ¶ææ»è§ (System Architecture Overview)"]}),"\n",(0,s.jsxs)(e.p,{children:["æ¬ç³»ç»ï¼NebulaAIï¼éç¨ ",(0,s.jsx)(e.strong,{children:"â端-äº-èâä¸ä½å"})," çåå±å¾®æå¡æ¶æãç³»ç»èªä¸èä¸å为 ",(0,s.jsx)(e.strong,{children:"åºç¨å±ï¼äº¤äºä¸çæï¼"}),"ã",(0,s.jsx)(e.strong,{children:"æå¡å±ï¼æ¯æä¸ä¸é´ä»¶ï¼"}),"ã",(0,s.jsx)(e.strong,{children:"æºè½ä½åºåº§ï¼æ ¸å¿è®¤ç¥å¼æï¼"})," 以å ",(0,s.jsx)(e.strong,{children:"LLM æ¥å£å±ï¼æ¨¡åç®åï¼"}),"ãè¯¥æ¶æéè¿é«å
èä½è¦åç设计ï¼å®ç°äºä»ç¨æ·äº¤äºå端ï¼React/Next.jsï¼å°å¼æå¤§æ¨¡åå端ï¼Python/Hybrid LLMsï¼çå
¨é¾è·¯æéï¼ç¡®ä¿äºå¹³å°ç髿©å±æ§ä¸ä¼ä¸çº§æ°æ®ä¸è´æ§ã"]}),"\n",(0,s.jsx)(e.hr,{}),"\n",(0,s.jsxs)(e.h2,{id:"2-详ç»åå±è®¾è®¡",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#2-详ç»åå±è®¾è®¡",children:"#"}),"2. 详ç»åå±è®¾è®¡"]}),"\n",(0,s.jsxs)(e.h3,{id:"21-åºç¨å±-application-layer--交äºä¸å¿ä¸çææå»º",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#21-åºç¨å±-application-layer--交äºä¸å¿ä¸çææå»º",children:"#"}),"2.1 åºç¨å± (Application Layer) ââ 交äºä¸å¿ä¸çææå»º"]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.em,{children:["æ¬å±åºäº ",(0,s.jsx)(e.strong,{children:"Next.js/React"})," æå»ºï¼è´è´£å
·ä½ä¸å¡åºæ¯çåç°ä¸äººæºäº¤äºï¼éè¿ç»ä»¶åè®¾è®¡æ¯æçµæ´»çåè½æ©å±ã"]})}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"çæä¸ç®¡ç (App Store & Management)"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"åºç¨ååº & æä»¶ä¸å¿"}),": 建ç«åºäº React ç»ä»¶ç弿¾å¸åºï¼å
许å¼åè
éè¿æ å忥å£åå¸ Agent æè½ä¸å端 UI ç»ä»¶ã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"åºç¨ç®¡ç & ç¨æ·ç®¡ç"}),": æä¾å¤ç§æ·ç®¡çåå°ï¼åºäº ",(0,s.jsx)(e.strong,{children:"MySQL"})," åå¨ä¼ä¸ç»ç»æ¶æãè§è²æéï¼RBACï¼å计费çç¥ã"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"交äºå½¢å¼ (Smart Interface)"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"æºè½å¡ç (Smart Cards)"}),": å©ç¨ Next.js çæå¡ç«¯æ¸²æï¼SSRï¼è½åï¼å¨æçæå¯è§åæ°æ®å¡çï¼å¦æ¥è¡¨ãå¾è¡¨ï¼ï¼è¶
è¶çº¯ææ¬å¯¹è¯ä½éªã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"工使µ (Workflows)"}),": æä¾ä½ä»£ç ï¼Low-Codeï¼å¯è§åç»å¸ï¼å
è®¸ç¨æ·éè¿ææ½ç¼æ Agent çä»»å¡é¾è·¯ã"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"ä¸å¡é»è¾æ©å±"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"äºå½æ° (Cloud Functions)"}),": éæ Python Serverless è¿è¡æ¶ï¼æ¯æç¨æ·ç¼åèªå®ä¹ Python èæ¬ä½ä¸º Agent ç卿è½åæ©å±ã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"é¿æè®°å¿ (Long-term Memory UI)"}),": å¯è§åå±ç¤ºç¨æ·çåå²ç»åä¸å好设置ã"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.h3,{id:"22-æå¡å±-service-layer--åºç¡è®¾æ½ä¸ä¸é´ä»¶",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#22-æå¡å±-service-layer--åºç¡è®¾æ½ä¸ä¸é´ä»¶",children:"#"}),"2.2 æå¡å± (Service Layer) ââ åºç¡è®¾æ½ä¸ä¸é´ä»¶"]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.em,{children:["æ¬å±ä½ä¸ºç³»ç»çç¨³å®æ¯æå±ï¼éè¿ ",(0,s.jsx)(e.strong,{children:"Python å端æå¡"})," æä¾éç¨è½åï¼ç¡®ä¿ç³»ç»çé«å¯ç¨ä¸å®å
¨æ§ã"]}
1)}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"å®å
¨ä¸éä¿¡"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"é´æ (Auth)"}),": ç»ä¸ç½å
³å±ï¼æ¯æ JWT/OAuth2.0 认è¯ï¼ç¡®ä¿ API è°ç¨ä¸ WebSocket è¿æ¥çå®å
¨æ§ã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"API è°ç¨ & Mock æå¡"}),": æ åå RESTful/gRPC æ¥å£å°è£
ï¼æ¯æç¬¬ä¸æ¹ç³»ç»éæï¼å¹¶æä¾ Mock è½å以便äºåå端并è¡å¼å䏿µè¯ã"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"夿¨¡ææ¯æ"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"é³è§é¢ (Audio/Video)"}),": å¤çè¯é³è½¬æåï¼STTï¼ä¸æå转è¯é³ï¼TTSï¼æµï¼æ¯æå¤æ¨¡æè¾å
¥è¾åºã"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"髿§è½æ°æ®åºåº§"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"ç¼åä¸åå¨ (Cache & Storage)"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["éç¨ ",(0,s.jsx)(e.strong,{children:"Redis"})," ç¼åä¼è¯çæ°æ®ï¼Session Stateï¼ä¸ API ååºï¼å®ç°æ¯«ç§çº§ååºã"]}),"\n",(0,s.jsxs)(e.li,{children:["éç¨ ",(0,s.jsx)(e.strong,{children:"MySQL"})," å®ç°ä¸å¡æ°æ®çæä¹
ååå¨ï¼ä¿éæ°æ®å¼ºä¸è´æ§ï¼ACIDï¼ã"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.h3,{id:"23-æºè½ä½åºåº§-agent-foundation--æ ¸å¿è®¤ç¥å¼æ",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#23-æºè½ä½åºåº§-agent-foundation--æ ¸å¿è®¤ç¥å¼æ",children:"#"}),"2.3 æºè½ä½åºåº§ (Agent Foundation) ââ æ ¸å¿è®¤ç¥å¼æ"]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.em,{children:["æ¬å±æ¯ NebulaAI çâ大èâï¼ç± ",(0,s.jsx)(e.strong,{children:"Python"})," 深度å¼åï¼éæäºæç»´é¾ï¼CoTï¼ä¸åéæ£ç´¢ææ¯ã"]})}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"认ç¥è°åº¦"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"æºè½ç¼æ (Orchestration)"}),": åºäº ReAct æ TOTï¼Tree of Thoughtsï¼èå¼ï¼åæç¨æ·æå¾ï¼å¨ææè§£ä»»å¡æ¥éª¤ã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"æ§è¡è®¡å (Planning)"}),": èªå¨çæåæ¥æ§è¡è·¯å¾ï¼å¹¶å¨æ¯ä¸æ¥æ§è¡åè¿è¡ç»æéªè¯ä¸èªæä¿®æ£ã"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"è®°å¿ä¸ç¥è¯å¢å¼º (Memory & RAG)"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"RAG æ£ç´¢"}),": éæ ",(0,s.jsx)(e.strong,{children:"FAISS"})," åéæ°æ®åºï¼æå»ºé«ç»´ç¨ 坿£ç´¢ç³»ç»ã对ä¼ä¸ææ¡£è¿è¡åç Embeddingï¼å®ç°ç§æé¢åç¥è¯çç²¾åå¬åã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"æ ¸å¿è®°å¿ (Core Memory)"}),": ç»´æ¤çæä¸ä¸æçªå£ï¼å¨æå缩ä¸åªæï¼Pruningï¼å¯¹è¯åå²ï¼ç¡®ä¿ Prompt ä¸è¶
éä¸ä¿çå
³é®ä¿¡æ¯ã"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"è½åæ©å±"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"å·¥å
·æ³¨å (Tool Registration)"}),": å®ä¹æ ååç Python Decoratorsï¼èªå¨å°æ¬å°å½æ°ãAPI æ¥å£è½¬å为 LLM å¯çè§£åè°ç¨çå·¥å
·ï¼Toolsï¼ã"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.h3,{id:"24-æ¨¡åæ¥å£å±-openai--llm-interface--å¼ææ¨¡åç½å
³",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#24-æ¨¡åæ¥å£å±-openai--llm-interface--å¼ææ¨¡åç½å
³",children:"#"}),"2.4 æ¨¡åæ¥å£å± (OpenAI / LLM Interface) ââ å¼ææ¨¡åç½å
³"]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.em,{children:["æ¬å±å®ç°äºâ模åä¸ç«âçç¥ï¼éè¿ ",(0,s.jsx)(e.strong,{children:"Model Gateway"})," ç»ä¸å°è£
ï¼å±è½äºåºå±åååçææ¯å·®å¼ã"]})}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"ç»ä¸åè®® (Unified Interface)"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["åºäº ",(0,s.jsx)(e.strong,{children:"OpenAI SDK æ åæ ¼å¼"})," å°è£
æææ¨¡åæ¥å£ï¼æ¯ææµå¼è¾åºï¼Streamingï¼ï¼ä¾¿äºä¸å±ä¸å¡æ ç¼åæ¢æ¨¡åã"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"æ··åæ¨¡åè°åº¦ (Hybrid Routing)"}),":\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"æ¬å°ç§æå (Local/Edge)"}),": å¯¹æ¥ ",(0,s.jsx)(e.strong,{children:"Ollama"})," è¿è¡ Llama3/Mistral çæ¨¡åï¼ç¨äºå¤çéç§æææ°æ®æé«é¢ä½ææ¬ä»»å¡ã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"äºç«¯é«æ§è½ (Cloud SaaS)"}),": è·¯ç±å¤æé»è¾ä»»å¡è³ ",(0,s.jsx)(e.strong,{children:"Azure OpenAI"}),"ã",(0,s.jsx)(e.strong,{children:"OpenAI (GPT-4)"})," æ ",(0,s.jsx)(e.strong,{children:"Claude"}),"ã"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"å½äº
1§ååè§ (China Native)"}),": 深度éé
",(0,s.jsx)(e.strong,{children:"Qwen (éä¹åé®)"}),"ã",(0,s.jsx)(e.strong,{children:"Qianfan (ç¾åº¦åå¸)"}),"ã",(0,s.jsx)(e.strong,{children:"è®¯é£æç«"}),"ï¼æ»¡è¶³å½å
ä¸å¡åè§ä¸ä¸æçè§£éæ±ã"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.hr,{}),"\n",(0,s.jsxs)(e.h2,{id:"3-ææ¯æ æ å°æè¦",children:[(0,s.jsx)(e.a,{className:"rp-header-anchor","aria-hidden":"true",href:"#3-ææ¯æ æ å°æè¦",children:"#"}),"3. ææ¯æ æ å°æè¦"]}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:(0,s.jsx)(e.strong,{children:"æ¶æå±çº§"})}),(0,s.jsx)(e.th,{children:(0,s.jsx)(e.strong,{children:"å¾ç¤ºæ¨¡åæ å°"})}),(0,s.jsx)(e.th,{children:(0,s.jsx)(e.strong,{children:"æ ¸å¿ææ¯æ "})})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:(0,s.jsx)(e.strong,{children:"åºç¨å±"})}),(0,s.jsx)(e.td,{children:"æä»¶ç®¡çãåºç¨ååºãæºè½å¡çã工使µ"}),(0,s.jsxs)(e.td,{children:[(0,s.jsx)(e.strong,{children:"Next.js / React"})," (SSR, Streaming UI)"]})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:(0,s.jsx)(e.strong,{children:"æå¡å±"})}),(0,s.jsx)(e.td,{children:"é´æãAPI è°ç¨ãç¼åä¸åå¨"}),(0,s.jsxs)(e.td,{children:[(0,s.jsx)(e.strong,{children:"Python"})," (Backend Framework), ",(0,s.jsx)(e.strong,{children:"Redis"})," (Cache), ",(0,s.jsx)(e.strong,{children:"MySQL"})," (DB)"]})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:(0,s.jsx)(e.strong,{children:"åºåº§å±"})}),(0,s.jsx)(e.td,{children:"RAG æ£ç´¢ãæ ¸å¿è®°å¿ãæºè½ç¼æ"}),(0,s.jsxs)(e.td,{children:[(0,s.jsx)(e.strong,{children:"Python"})," (Logic), ",(0,s.jsx)(e.strong,{children:"FAISS"})," (Vector DB), LangChain/Self-developed Core"]})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:(0,s.jsx)(e.strong,{children:"模åå±"})}),(0,s.jsx)(e.td,{children:"LLM InterfaceãQwen/Ollama/Azure"}),(0,s.jsxs)(e.td,{children:[(0,s.jsx)(e.strong,{children:"Model Gateway"})," (Python Adapters for ",(0,s.jsx)(e.strong,{children:"OpenAI/Azure/Ollama/Qwen/etc."}),")"]})]})]})]}),"\n",(0,s.jsxs)(e.p,{children:["è¿ä¸ªæ¶ææè¿°å®ç¾å¥åäº ",(0,s.jsx)(e.strong,{children:"NebulaAI"})," çå¾çç»æï¼å±ç°äºä»åºå±æ°æ®å¤çãæ¨¡åæ¨çå°ä¸å±åºç¨ååç宿´ææ¯å¾è°±ï¼æ¢ä½ç°äºç³»ç»çå¤æåº¦åä¸ä¸æ§ï¼åçªåºäºæ¨éç¨çææ¯æ çå
è¿æ§ã"]})]})}function d(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:e}={...(0,i.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(l,{...n})}):l(n)}d.__RSPRESS_PAGE_META={},d.__RSPRESS_PAGE_META["guide%2Fstart%2Fsystem-architecture.md"]={toc:[{id:"1-æ¶ææ»è§-system-architecture-overview",text:"1. æ¶ææ»è§ (System Architecture Overview)",depth:2},{id:"2-详ç»åå±è®¾è®¡",text:"2. 详ç»åå±è®¾è®¡",depth:2},{id:"21-åºç¨å±-application-layer--交äºä¸å¿ä¸çææå»º",text:"2.1 åºç¨å± (Application Layer) ââ 交äºä¸å¿ä¸çææå»º",depth:3},{id:"22-æå¡å±-service-layer--åºç¡è®¾æ½ä¸ä¸é´ä»¶",text:"2.2 æå¡å± (Service Layer) ââ åºç¡è®¾æ½ä¸ä¸é´ä»¶",depth:3},{id:"23-æºè½ä½åºåº§-agent-foundation--æ ¸å¿è®¤ç¥å¼æ",text:"2.3 æºè½ä½åºåº§ (Agent Foundation) ââ æ ¸å¿è®¤ç¥å¼æ",depth:3},{id:"24-æ¨¡åæ¥å£å±-openai--llm-interface--å¼ææ¨¡åç½å
³",text:"2.4 æ¨¡åæ¥å£å± (OpenAI / LLM Interface) ââ å¼ææ¨¡åç½å
³",depth:3},{id:"3-ææ¯æ æ å°æè¦",text:"3. ææ¯æ æ å°æè¦",depth:2}],title:"3ãç³»ç»æ¶æ",headingTitle:"3ãç³»ç»æ¶æ",frontmatter:{}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.