[{"data":1,"prerenderedAt":2502},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-rfc_agentic_project\u002F2026-08-03-adr-ogas-arkhiv":1083},[4,11,16,21,25,29,36,39,44,47,52,58,63,66,71,76,80,84,87,93,96,101,105,110,113,117,122,127,132,136,141,143,146,151,155,157,162,165,169,173,176,179,183,186,190,193,197,200,205,208,211,214,219,222,228,234,237,239,245,249,253,256,260,266,271,276,281,283,287,290,293,298,301,304,306,308,311,314,316,318,321,327,332,337,342,347,352,354,356,358,361,365,367,369,371,374,376,378,381,386,390,393,396,400,404,407,411,413,415,417,421,423,425,428,431,433,435,437,439,441,443,446,448,450,454,456,459,461,463,465,467,469,471,473,477,483,486,488,491,493,495,497,499,501,503,505],{"category":5,"tags":6},"笔记",[7,8,9,10],"QQ","插件","LiteLoader","美化",{"category":12,"tags":13},"其他",[14,15,10],"博客","IP签名",{"category":17,"tags":18},"杂谈",[19,20],"互联网","观点",{"category":5,"tags":22},[14,23,24],"GitHub","数据可视化",{"category":5,"tags":26},[14,27,28],"访问统计","不蒜子",{"category":30,"tags":31},"工具",[32,33,34,35],"Python","爬虫","选课脚本","广州大学",{"category":5,"tags":37},[38,5],"数学分析",{"category":40,"tags":41},"算法",[42,40,43],"数据结构","线性表",{"category":40,"tags":45},[42,46],"复习",{"category":5,"tags":48},[49,50,51],"高等代数","线性代数","知识点",{"category":5,"tags":53},[14,54,55,56,57],"Typora","PicGo","图床","Markdown",{"category":30,"tags":59},[60,61,62],"Jupyter","工具配置","中文",{"category":30,"tags":64},[65,61,10],"VSCode",{"category":30,"tags":67},[68,69,70,35],"路由器","OpenWrt","校园网",{"category":12,"tags":72},[73,74,75],"网络协议","Wireshark","DEVP2P",{"category":5,"tags":77},[73,74,78,79],"Lua","解码器",{"category":5,"tags":81},[82,5,83],"常微分方程","数学",{"category":5,"tags":85},[86,5,83],"概率论",{"category":30,"tags":88},[89,90,91,92],"Docker","WSL","Windows","磁盘清理",{"category":30,"tags":94},[32,33,95,35],"课程表",{"category":5,"tags":97},[14,98,99,100],"Hexo","Gitalk","评论系统",{"category":5,"tags":102},[14,103,98,104],"Obsidian","写作工具",{"category":12,"tags":106},[107,108,109],"课题研究","泊松分布","参数估计",{"category":12,"tags":111},[107,108,109,112],"组会",{"category":12,"tags":114},[109,115,108,116],"IM模型","统计学",{"category":17,"tags":118},[119,120,121],"软考","网络规划","信息系统项目管理",{"category":30,"tags":123},[124,125,126],"Arch Linux","AppImage","Linux",{"category":5,"tags":128},[129,130,131],"编程语言","计算机科学","内存管理",{"category":5,"tags":133},[134,135],"Canvas","前端",{"category":5,"tags":137},[14,138,139,140],"GitHub Actions","Vite","部署",{"category":5,"tags":142},[135],{"category":5,"tags":144},[135,145],"系统设计",{"category":5,"tags":147},[135,148,149,150],"安全","XSS","CSRF",{"category":152,"tags":153},"项目",[134,154],"PixiJS",{"category":152,"tags":156},null,{"category":40,"tags":158},[42,159,160,161],"栈","队列","JavaScript",{"category":40,"tags":163},[42,164,161],"哈希表",{"category":5,"tags":166},[167,161,168],"ES6","Set",{"category":40,"tags":170},[40,171,172],"动态规划","背包问题",{"category":40,"tags":174},[40,175],"滑动窗口",{"category":40,"tags":177},[42,178,161],"链表",{"category":40,"tags":180},[40,181,161,182],"ACM","面试",{"category":40,"tags":184},[40,161,185],"数据类型转换",{"category":40,"tags":187},[42,188,178,189],"顺序表","TypeScript",{"category":5,"tags":191},[135,154,134,192],"渲染",{"category":5,"tags":194},[135,195,134,196],"富文本编辑","wangEditor",{"category":40,"tags":198},[199,40,178],"力扣",{"category":5,"tags":201},[202,203,204,91],"DNS","加密","网络安全",{"category":5,"tags":206},[135,207],"Axios",{"category":5,"tags":209},[135,207,189,210],"接口封装",{"category":5,"tags":212},[135,213,145],"JWT",{"category":152,"tags":215},[134,216,217,154,218],"画布","React","项目开发",{"category":17,"tags":220},[221],"日志",{"category":5,"tags":223},[224,225,226,227],"Neo4j","图数据库","中心度分析","PageRank",{"category":12,"tags":229},[230,231,232,233],"论文","机器学习","随机森林","保险欺诈",{"category":5,"tags":235},[236],"人工智能",{"category":5,"tags":238},[231,40,32],{"category":12,"tags":240},[241,242,243,244],"共识算法","最长链","区块链","算法设计",{"category":5,"tags":246},[161,247,248,135],"闭包","作用域",{"category":5,"tags":250},[14,138,251,252],"RSS","自动化",{"category":30,"tags":254},[89,90,91,255],"安装",{"category":30,"tags":257},[258,91,259],"MSYS2","开发环境",{"category":5,"tags":261},[262,263,264,265],"团队协作","Git","Commit规范","代码审查",{"category":30,"tags":267},[268,269,270],"oh-my-posh","终端美化","CLI",{"category":5,"tags":272},[273,274,275],"上下文工程","Agent","RAG",{"category":5,"tags":277},[278,279,280],"前端工程化","技术选型","工程基建",{"category":5,"tags":282},[275],{"category":5,"tags":284},[285,286],"SDD","规格驱动开发",{"category":5,"tags":288},[289],"neovim",{"category":5,"tags":291},[292],"技术写作",{"category":5,"tags":294},[295,32,296,89,297],"FastAPI","后端","工程实践",{"category":152,"tags":299},[274,300],"Harness Engineering",{"category":5,"tags":302},[303],"RFC",{"category":152,"tags":305},[274,300,275],{"category":152,"tags":307},[274],{"category":40,"tags":309},[199,40,161,310],"两数之和",{"category":40,"tags":312},[199,40,161,313],"双指针",{"category":40,"tags":315},[199,40,161,178],{"category":40,"tags":317},[199,40,161,175],{"category":40,"tags":319},[199,40,161,320],"回溯",{"category":5,"tags":322},[323,324,325,326],"分布式处理与计算","Spark","Scala","RDD",{"category":5,"tags":328},[323,329,330,331],"线性回归","逻辑回归","监督学习",{"category":5,"tags":333},[323,334,335,336],"数值优化","牛顿法","收敛性",{"category":5,"tags":338},[323,339,340,341],"PCA","数据降维","正则化",{"category":5,"tags":343},[323,344,345,346],"聚类","层次聚类","K-Means",{"category":5,"tags":348},[323,349,350,351],"随机模拟","统计推断","EM算法",{"category":5,"tags":353},[24],{"category":5,"tags":355},[24],{"category":5,"tags":357},[24],{"category":40,"tags":359},[42,360],"图论",{"category":40,"tags":362},[42,363,364],"树","二叉树",{"category":40,"tags":366},[42,160],{"category":40,"tags":368},[42],{"category":40,"tags":370},[42,159],{"category":40,"tags":372},[42,40,373],"复杂度分析",{"category":40,"tags":375},[42,43,178],{"category":40,"tags":377},[42,43,188],{"category":40,"tags":379},[42,380],"基础概念",{"category":17,"tags":382},[383,384,385],"随记","照片","高中",{"category":17,"tags":387},[383,388,389],"团建","战地",{"category":17,"tags":391},[383,392],"生活",{"category":17,"tags":394},[383,395],"文学",{"category":17,"tags":397},[383,398,399],"SCP","模因",{"category":17,"tags":401},[383,402,403],"画集","艺术",{"category":17,"tags":405},[14,406,383],"写作",{"category":17,"tags":408},[383,409,410],"音乐","摇滚",{"category":17,"tags":412},[383,392],{"category":17,"tags":414},[383,409],{"category":17,"tags":416},[383,35,392],{"category":17,"tags":418},[383,419,420],"同人","手书",{"category":17,"tags":422},[383,392],{"category":17,"tags":424},[383,392],{"category":17,"tags":426},[383,427],"植物",{"category":17,"tags":429},[383,430],"读书",{"category":17,"tags":432},[383,392],{"category":17,"tags":434},[383,392],{"category":17,"tags":436},[383,392],{"category":17,"tags":438},[383,392],{"category":17,"tags":440},[383,392],{"category":17,"tags":442},[383,392],{"category":17,"tags":444},[14,445,383],"一周年",{"category":17,"tags":447},[383,392],{"category":17,"tags":449},[383,392],{"category":17,"tags":451},[35,452,453],"开源组织","SITE-193",{"category":17,"tags":455},[383,392],{"category":17,"tags":457},[383,458],"年末",{"category":17,"tags":460},[383,392],{"category":17,"tags":462},[383,392],{"category":17,"tags":464},[14,17],{"category":17,"tags":466},[383,392],{"category":17,"tags":468},[383,392],{"category":17,"tags":470},[383,392],{"category":17,"tags":472},[383,392],{"category":17,"tags":474},[383,475,476],"游戏","Control",{"category":30,"tags":478},[479,480,481,482],"Quadim","图像处理","四叉树","Rust",{"category":17,"tags":484},[14,485],"上线纪念",{"category":17,"tags":487},[383,395],{"category":30,"tags":489},[203,490],"测试",{"category":17,"tags":492},[383],{"category":17,"tags":494},[383,392],{"category":17,"tags":496},[383],{"category":5,"tags":498},[40],{"category":5,"tags":500},[40],{"category":5,"tags":502},[40],{"category":5,"tags":504},[40],{"category":5,"tags":506},[40],[508,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,579,583,587,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754,758,762,766,770,774,778,782,786,790,794,798,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885,889,893,897,901,904,907,911,915,919,923,927,930,934,938,942,946,950,954,957,961,965,969,973,977,981,984,988,992,996,1000,1004,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079],{"path":509,"words":510,"published":511,"date":156},"\u002Fposts\u002F2024\u002F2024-06-25-liteloaderqqnt",1296,"2024-06-25 11:03:08",{"path":513,"words":514,"published":515,"date":156},"\u002Fposts\u002F2024\u002F2024-06-26-ip签名",0,"2024-06-26 22:53:53",{"path":517,"words":518,"published":519,"date":156},"\u002Fposts\u002F2024\u002F2024-06-29-何加盐中文互联网正在加速崩塌",4853,"2024-06-29 00:47:13",{"path":521,"words":522,"published":523,"date":156},"\u002Fposts\u002F2024\u002F2024-07-12-github-chart",270,"2024-07-12 20:02:50",{"path":525,"words":526,"published":527,"date":156},"\u002Fposts\u002F2024\u002F2024-07-14-访客数统计",192,"2024-07-24 01:34:28",{"path":529,"words":530,"published":531,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-广大选课脚本",110,"2024-07-26 01:34:28",{"path":533,"words":534,"published":535,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数学分析笔记其二",14,"2024-07-26 23:54:02",{"path":537,"words":538,"published":539,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习其二",12856,"2024-07-26 02:48:08",{"path":541,"words":542,"published":543,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习相关",32856,"2024-07-26 02:24:14",{"path":545,"words":546,"published":547,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-线性代数与空间解析几何知识点全汇总",6110,"2024-07-26 03:27:55",{"path":549,"words":550,"published":551,"date":156},"\u002Fposts\u002F2024\u002F2024-07-31-typora-picgo-兰空图床打造markdown写作环境",311,"2024-07-31 12:56:23",{"path":553,"words":554,"published":555,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-jupyter配置中文",441,"2024-09-02 23:49:05",{"path":557,"words":558,"published":559,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-自定义vscode背景图片",100,"2024-09-02 23:39:00",{"path":561,"words":562,"published":563,"date":156},"\u002Fposts\u002F2024\u002F2024-09-03-制作gzhu校园网路由器",1423,"2024-09-03 23:43:18",{"path":565,"words":566,"published":567,"date":156},"\u002Fposts\u002F2024\u002F2024-09-26-09-25-2024",136,"2024-09-26 00:49:26",{"path":569,"words":570,"published":571,"date":156},"\u002Fposts\u002F2024\u002F2024-11-04-创建一个网络包解码器分析devp2p协议",1943,"2024-11-04 16:45:19",{"path":573,"words":574,"published":575,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记常微分",16,"2024-12-09 22:51:00",{"path":577,"words":574,"published":578,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记概率论","2025-03-09 22:51:00",{"path":580,"words":581,"published":582,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-windows下释放docker占用的wsl空间",164,"2025-03-01 13:54:15",{"path":584,"words":585,"published":586,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-爬虫实战-爬取广州大学课程表",774,"2025-03-01 14:55:48",{"path":588,"words":530,"published":589,"date":156},"\u002Fposts\u002F2025\u002F2025-04-03-hexo集成gitalk的问题","2025-04-03 14:26:34",{"path":591,"words":592,"published":593,"date":156},"\u002Fposts\u002F2025\u002F2025-09-22-记一次配置obsidian配合hexo写博客",92,"2025-09-22 16:47:52",{"path":595,"words":596,"published":597,"date":156},"\u002Fposts\u002F2025\u002F2025-10-24-10-20课题",204,"2025-10-24 08:15:01",{"path":599,"words":600,"published":601,"date":156},"\u002Fposts\u002F2025\u002F2025-11-02-组会朝花夕拾",501,"2025-11-02 18:56:59",{"path":603,"words":604,"published":605,"date":156},"\u002Fposts\u002F2025\u002F2025-11-05-基于随机加权推断模型im的参数估计算法",481,"2025-11-05 20:51:41",{"path":607,"words":608,"published":609,"date":156},"\u002Fposts\u002F2025\u002F2025-11-09-关于软考高项网规",884,"2025-11-09 19:54:52",{"path":611,"words":612,"published":613,"date":156},"\u002Fposts\u002F2025\u002F2025-11-17-arch-linux运行appimage相关",365,"2025-11-17 09:59:59",{"path":615,"words":616,"published":617,"date":156},"\u002Fposts\u002F2025\u002F2025-11-19-相关概念",2058,"2025-11-19 11:06:20",{"path":619,"words":620,"published":621,"date":156},"\u002Fposts\u002F2025\u002F2025-11-21-web可视化实践canvas",6393,"2025-11-21 14:50:48",{"path":623,"words":624,"published":625,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-使用-github-actions-自动部署基于vite的项目到-github-pages",272,"2025-11-23 01:59:24",{"path":627,"words":628,"published":629,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-关于前端包管理器npmpnpmyarn和bun",4890,"2025-11-22 21:21:15",{"path":631,"words":632,"published":633,"date":156},"\u002Fposts\u002F2025\u002F2025-11-23-undo-redo-机制具体实现",7839,"2025-11-23 19:15:00",{"path":635,"words":636,"published":637,"date":156},"\u002Fposts\u002F2025\u002F2025-11-27-前端安全-关于xss与crsf",1866,"2025-11-28 02:05:25",{"path":639,"words":640,"published":641,"date":156},"\u002Fposts\u002F2025\u002F2025-12-05-现代协同-2d-画布编辑器pixijs-v8",4285,"2025-12-05 02:00:16",{"path":643,"words":644,"published":645,"date":156},"\u002Fposts\u002F2025\u002F2025-12-07-杂谈-课题组系统设计",3710,"2025-12-07 21:09:33",{"path":647,"words":648,"published":649,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-javascript中的数组方法与栈stack和队列queue的实现",474,"2025-11-29 16:58:15",{"path":651,"words":652,"published":653,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript-实现哈希表",189,"2025-11-27 11:31:39",{"path":655,"words":656,"published":657,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript的set方法",332,"2025-12-25 15:26:18",{"path":659,"words":660,"published":661,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于动态规划(背包问题为例)",1238,"2025-11-17 18:24:04",{"path":663,"words":664,"published":665,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于滑动窗口",712,"2025-11-20 15:04:40",{"path":667,"words":668,"published":669,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于链表(javascript)",500,"2025-11-25 13:00:48",{"path":671,"words":672,"published":673,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-面试算法acm模式构建构建输入输出模板",2051,"2025-12-25 23:09:45",{"path":675,"words":676,"published":677,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascript-数字数组字符串的处理",483,"2025-12-26 11:20:25",{"path":679,"words":680,"published":681,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascripttypescript-的顺序表链表实现",446,"2025-12-26 12:16:12",{"path":683,"words":684,"published":685,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-1-实现基础yuan素渲染和状态控制",2136,"2025-12-28 01:23:08",{"path":687,"words":688,"published":689,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-2-实现富文本编辑",1838,"2025-12-28 02:58:47",{"path":691,"words":692,"published":693,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-算法刷题-关于链表操作",2135,"2025-12-27 16:12:42",{"path":695,"words":696,"published":697,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-配置dnscrypt-proxy实现加密dns服务windows",1899,"2025-11-15 01:06:37",{"path":699,"words":700,"published":701,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-关于网络请求xhrajaxfetchaxios",7788,"2025-10-28 15:48:46",{"path":703,"words":704,"published":705,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-接口封装与请求规范axios为例",2373,"2025-12-29 01:01:18",{"path":707,"words":708,"published":709,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-身份验证管理-基于-jwt-token-的实现",2709,"2025-11-23 22:04:41",{"path":711,"words":712,"published":713,"date":156},"\u002Fposts\u002F2025\u002F2025-12-29-记canvas画布项目开发",6254,"2025-12-29 04:52:15",{"path":715,"words":716,"published":717,"date":156},"\u002Fposts\u002F2025\u002Fabout-site",116,"2025-03-31 16:44:24",{"path":719,"words":720,"published":721,"date":156},"\u002Fposts\u002F2025\u002F使用neo4j图数据科学库gds进行中心度分析",143,"2025-04-02 23:37:24",{"path":723,"words":724,"published":725,"date":156},"\u002Fposts\u002F2026\u002F2026-01-03-论文实训草稿",10445,"2026-01-03 14:10:49",{"path":727,"words":728,"published":729,"date":156},"\u002Fposts\u002F2026\u002F2026-01-06-人工智能导论",11461,"2026-01-07 03:25:49",{"path":731,"words":732,"published":733,"date":156},"\u002Fposts\u002F2026\u002F2026-01-07-机器学习相关算法",82,"2026-01-08 02:28:13",{"path":735,"words":736,"published":737,"date":156},"\u002Fposts\u002F2026\u002F2026-01-16-关于低复杂度最长链共识算法设计",4466,"2026-01-16 10:33:23",{"path":739,"words":740,"published":741,"date":156},"\u002Fposts\u002F2026\u002F2026-01-19-杂记2026-01-19",5754,"2026-01-20 01:03:26",{"path":743,"words":744,"published":745,"date":156},"\u002Fposts\u002F2026\u002F2026-01-22-github-action-自动同步博客到-github-主页",1069,"2026-01-22 16:31:47",{"path":747,"words":748,"published":749,"date":156},"\u002Fposts\u002F2026\u002F2026-03-01-windows-wsl安装docker",257,"2026-03-01 20:55:31",{"path":751,"words":752,"published":753,"date":156},"\u002Fposts\u002F2026\u002F2026-03-14-关于-msys2",701,"2026-03-15 03:05:04",{"path":755,"words":756,"published":757,"date":156},"\u002Fposts\u002F2026\u002F2026-03-28-团队项目协作规范随记",2419,"2026-03-29 05:33:50",{"path":759,"words":760,"published":761,"date":156},"\u002Fposts\u002F2026\u002F2026-03-29-oh-my-posh配置分享",104,"2026-03-29 16:34:43",{"path":763,"words":764,"published":765,"date":156},"\u002Fposts\u002F2026\u002F2026-06-13-从上下文工程到-agent-harness-engineering",8840,"2026-06-13 21:06:20",{"path":767,"words":768,"published":769,"date":156},"\u002Fposts\u002F2026\u002F2026-07-13-简谈前端基建质量标准与ai友好建设",3814,"2026-07-13 21:06:20",{"path":771,"words":772,"published":773,"date":156},"\u002Fposts\u002F2026\u002F2026-07-15-agentic-rag-系统实践",13357,"2026-07-15 21:06:20",{"path":775,"words":776,"published":777,"date":156},"\u002Fposts\u002F2026\u002F2026-07-18-简谈sdd规范驱动开发-copy",4476,"2026-07-18 11:06:20",{"path":779,"words":780,"published":781,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-个人neovim配置分享",366,"2026-07-22 13:46:50",{"path":783,"words":784,"published":785,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-关于技术写作-设计文档",6763,"2026-07-20 13:46:50",{"path":787,"words":788,"published":789,"date":156},"\u002Fposts\u002F2026\u002F2026-07-29-fastapi-工程实践随记",3417,"2026-07-29 04:58:34",{"path":791,"words":792,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-06-19-rfc-liskin_code_agent",3563,"2026-06-19 15:18:20",{"path":795,"words":796,"published":797,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-07-25-rfc-glushkov_ogas",13461,"2026-07-28 23:46:50",{"path":799,"words":800,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-08-03-adr-ogas-arkhiv",2698,{"path":802,"words":803,"published":804,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002Frag\u002F2026-08-12-arkhiv_rag-vol-1",4366,"2026-08-12 15:18:20",{"path":806,"words":807,"published":808,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-25-力扣百题速练javascripttypescriptvol-1",3108,"2025-12-25 13:57:08",{"path":810,"words":811,"published":812,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-26-力扣百题速练javascripttypescriptvol-2",3185,"2025-12-26 13:57:08",{"path":814,"words":815,"published":816,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-28-力扣百题速练javascripttypescriptvol-3",2533,"2025-12-29 02:15:44",{"path":818,"words":819,"published":820,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-17-力扣百题速练javascripttypescriptvol-4",3024,"2026-01-17 22:53:01",{"path":822,"words":823,"published":824,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-19-力扣百题速练javascripttypescriptvol-5",293,"2026-01-19 15:15:12",{"path":826,"words":827,"published":828,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算spark系统与scala语言",4320,"2026-07-06 14:10:49",{"path":830,"words":831,"published":832,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算分类与回归分析",2081,"2026-07-07 12:40:29",{"path":834,"words":835,"published":836,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数值优化方法",2182,"2026-07-07 13:50:29",{"path":838,"words":839,"published":840,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数据降维",1583,"2026-07-07 21:50:29",{"path":842,"words":843,"published":844,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算聚类分析",1882,"2026-07-07 16:50:29",{"path":846,"words":847,"published":848,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算随机模拟与统计推断",2433,"2026-07-06 22:40:29",{"path":850,"words":851,"published":852,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-基本图像",10011,"2026-06-14 20:18:20",{"path":854,"words":855,"published":856,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-概论",10030,"2026-06-14 15:18:20",{"path":858,"words":859,"published":860,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库",2032,"2026-06-15 20:18:20",{"path":862,"words":863,"published":864,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-图",5451,"2025-04-15 20:48:06",{"path":866,"words":867,"published":868,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-树",4211,"2025-04-30 02:19:06",{"path":870,"words":871,"published":872,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-队列",921,"2025-04-11 15:30:08",{"path":874,"words":875,"published":876,"date":156},"\u002Fposts\u002F数据结构\u002F关于数据结构的一些想法",456,"2025-04-04 19:13:49",{"path":878,"words":879,"published":880,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-栈",920,"2025-04-18 00:17:37",{"path":882,"words":883,"published":884,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-算法复杂度",2153,"2025-04-05 16:09:55",{"path":886,"words":887,"published":888,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表链表",4572,"2025-04-06 00:24:40",{"path":890,"words":891,"published":892,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表顺序表",4191,"2025-04-05 22:09:59",{"path":894,"words":895,"published":896,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-绪论",2881,"2025-04-05 11:31:22",{"path":898,"words":899,"published":156,"date":900},"\u002Fposts\u002F杂记\u002F2023-12-26-2023年12月26日",7,"2023-12-26 23:51:33",{"path":902,"words":899,"published":156,"date":903},"\u002Fposts\u002F杂记\u002F2024-01-01-2024团建","2024-01-01 01:51:27",{"path":905,"words":581,"published":156,"date":906},"\u002Fposts\u002F杂记\u002F2024-01-09-随记","2024-01-09 20:50:35",{"path":908,"words":909,"published":156,"date":910},"\u002Fposts\u002F杂记\u002F2024-03-12-花名",5275,"2024-03-12 16:04:23",{"path":912,"words":913,"published":156,"date":914},"\u002Fposts\u002F杂记\u002F2024-04-15-逆模因",1353,"2024-04-15 00:26:16",{"path":916,"words":917,"published":156,"date":918},"\u002Fposts\u002F杂记\u002F2024-05-03-艺作",27,"2024-05-03 00:01:00",{"path":920,"words":921,"published":156,"date":922},"\u002Fposts\u002F杂记\u002F2024-05-21-关于博客",1720,"2024-02-21 23:21:11",{"path":924,"words":925,"published":156,"date":926},"\u002Fposts\u002F杂记\u002F2024-06-20-dnvrc维克多崔专访-2023",2036,"2024-06-20 00:28:39",{"path":928,"words":760,"published":156,"date":929},"\u002Fposts\u002F杂记\u002F2024-06-25-6月25日随记","2024-06-25 12:46:36",{"path":931,"words":932,"published":156,"date":933},"\u002Fposts\u002F杂记\u002F2024-06-25-歌名-想見星星",148,"2024-06-25 22:47:59",{"path":935,"words":936,"published":156,"date":937},"\u002Fposts\u002F杂记\u002F2024-07-11-桂花岗",6,"2024-07-11 00:28:17",{"path":939,"words":940,"published":156,"date":941},"\u002Fposts\u002F杂记\u002F2024-07-15-rolling-bocci",9,"2024-07-15 21:25:56",{"path":943,"words":944,"published":156,"date":945},"\u002Fposts\u002F杂记\u002F2024-07-22-七月九日",34,"2024-07-09 17:54:23",{"path":947,"words":948,"published":156,"date":949},"\u002Fposts\u002F杂记\u002F2024-07-22-六月随记",1052,"2024-07-22 01:03:19",{"path":951,"words":952,"published":156,"date":953},"\u002Fposts\u002F杂记\u002F2024-07-22-石菖蒲",41,"2024-07-10 01:26:05",{"path":955,"words":514,"published":156,"date":956},"\u002Fposts\u002F杂记\u002F2024-07-23-新书","2024-07-23 01:05:49",{"path":958,"words":959,"published":156,"date":960},"\u002Fposts\u002F杂记\u002F2024-07-29-年前",74,"2024-07-29 23:59:07",{"path":962,"words":963,"published":156,"date":964},"\u002Fposts\u002F杂记\u002F2024-07-30-周边",138,"2024-07-30 02:03:23",{"path":966,"words":967,"published":156,"date":968},"\u002Fposts\u002F杂记\u002F2024-07-31-2024-7-31日",185,"2024-07-31 01:21:52",{"path":970,"words":971,"published":156,"date":972},"\u002Fposts\u002F杂记\u002F2024-08-02-八月",1710,"2024-08-30 00:31:02",{"path":974,"words":975,"published":156,"date":976},"\u002Fposts\u002F杂记\u002F2024-09-01-九月",1484,"2024-09-26 16:30:15",{"path":978,"words":979,"published":156,"date":980},"\u002Fposts\u002F杂记\u002F2024-09-08-2024年9月8日",97,"2024-09-08 13:59:36",{"path":982,"words":514,"published":156,"date":983},"\u002Fposts\u002F杂记\u002F2024-09-19-博客站的一周年","2024-09-18 23:36:24",{"path":985,"words":986,"published":156,"date":987},"\u002Fposts\u002F杂记\u002F2024-10-03-十月",1028,"2024-10-31 23:54:27",{"path":989,"words":990,"published":156,"date":991},"\u002Fposts\u002F杂记\u002F2024-11-04-十一月",2134,"2024-11-30 00:04:39",{"path":993,"words":994,"published":156,"date":995},"\u002Fposts\u002F杂记\u002F2024-11-10-gzhu-site-193",80,"2024-11-10 19:19:12",{"path":997,"words":998,"published":156,"date":999},"\u002Fposts\u002F杂记\u002F2024-12-01-十二月",455,"2024-12-30 23:13:47",{"path":1001,"words":1002,"published":156,"date":1003},"\u002Fposts\u002F杂记\u002F2024-12-21-年末",23,"2024-12-21 23:21:49",{"path":1005,"words":522,"published":156,"date":1006},"\u002Fposts\u002F杂记\u002F2025-01-30-一月","2025-01-30 23:44:41",{"path":1008,"words":1009,"published":156,"date":1010},"\u002Fposts\u002F杂记\u002F2025-03-01-二月",224,"2025-02-28 00:11:08",{"path":1012,"words":1013,"published":156,"date":1014},"\u002Fposts\u002F杂记\u002F2025-03-01-博客杂谈",344,"2025-03-01 16:03:18",{"path":1016,"words":1017,"published":156,"date":1018},"\u002Fposts\u002F杂记\u002F2025-03-05-三月",2090,"2025-03-05 19:17:28",{"path":1020,"words":1021,"published":156,"date":1022},"\u002Fposts\u002F杂记\u002F2025-07-10-七月",361,"2025-07-10 22:04:32",{"path":1024,"words":1025,"published":156,"date":1026},"\u002Fposts\u002F杂记\u002F2025-09-21-九月",781,"2025-09-21 20:53:37",{"path":1028,"words":1029,"published":156,"date":1030},"\u002Fposts\u002F杂记\u002F2025-10-09-十月",591,"2025-10-09 00:35:07",{"path":1032,"words":1033,"published":156,"date":1034},"\u002Fposts\u002F杂记\u002Fcontrol",13,"2023-09-25 13:03:59",{"path":1036,"words":1037,"published":156,"date":1038},"\u002Fposts\u002F杂记\u002Fquadim四叉树图像处理",1094,"2023-10-21 11:27:06",{"path":1040,"words":1041,"published":156,"date":1042},"\u002Fposts\u002F杂记\u002Fsuccess",24,"2023-09-22 15:59:07",{"path":1044,"words":1045,"published":156,"date":1046},"\u002Fposts\u002F杂记\u002F三光年",295,"2023-11-18 04:18:40",{"path":1048,"words":1049,"published":156,"date":1050},"\u002Fposts\u002F杂记\u002F加密测试",961,"2023-11-21 14:24:01",{"path":1052,"words":1053,"published":156,"date":1054},"\u002Fposts\u002F杂记\u002F啊啊啊啊啊啊啊",54,"2023-09-20 17:29:33",{"path":1056,"words":1057,"published":156,"date":1058},"\u002Fposts\u002F杂记\u002F杂谈",124,"2023-09-25 23:11:32",{"path":1060,"words":1061,"published":156,"date":1062},"\u002Fposts\u002F杂记\u002F艹",25,"2023-10-21 17:40:43",{"path":1064,"words":1065,"published":1066,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习卷积神经网络",3168,"2026-06-07 11:23:08",{"path":1068,"words":1069,"published":1070,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习循环神经网络",2348,"2026-06-07 11:33:08",{"path":1072,"words":1073,"published":1074,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习改进学习方法",3360,"2026-06-07 10:13:08",{"path":1076,"words":1077,"published":1078,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习深度生成模型",2727,"2026-06-07 11:43:08",{"path":1080,"words":1081,"published":1082,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习神经网络基础",3205,"2026-06-07 10:03:08",{"id":1084,"title":1085,"abbrlink":1086,"body":1087,"category":152,"cover":156,"date":156,"description":2493,"extension":2494,"mathjax":2495,"meta":2496,"navigation":2495,"path":799,"published":793,"readingMinutes":940,"seo":2498,"stem":2499,"sticky":156,"swiper_index":156,"tags":2500,"updated":156,"words":800,"__hash__":2501},"posts\u002Fposts\u002FRFC_Agentic_project\u002F2026-08-03-[ADR]-OGAS-Arkhiv.md","2026-08-03-[ADR]-OGAS-ArkhivRAG 设计文档","29089371",{"type":1088,"value":1089,"toc":2460},"minimark",[1090,1095,1123,1126,1131,1143,1169,1188,1203,1206,1210,1214,1355,1358,1404,1408,1412,1621,1625,1865,1869,1878,1900,1904,1910,1927,1931,2009,2013,2019,2022,2026,2030,2128,2168,2176,2228,2238,2241,2267,2271,2278,2324,2328,2379,2383,2389,2392,2395,2399,2402,2410,2416,2419,2423,2430,2453],[1091,1092,1094],"h1",{"id":1093},"ogas-arkhivrag-设计文档","OGAS-ArkhivRAG 设计文档",[1096,1097,1098,1106,1112],"ul",{},[1099,1100,1101,1105],"li",{},[1102,1103,1104],"strong",{},"状态","：持续更新（跟随当前代码库）",[1099,1107,1108,1111],{},[1102,1109,1110],{},"读者","：扩展 Eagle-RAG 的工程师（核心、领域插件、下游 Agent）",[1099,1113,1114,1117,1118,1122],{},[1102,1115,1116],{},"范围","：",[1119,1120,1121],"code",{},"eagle_rag"," 后端的架构及其对外接口（REST \u002F SSE \u002F MCP）。前端是 Core 能力的展示层，仅在约束后端时提及。",[1124,1125],"hr",{},[1127,1128,1130],"h2",{"id":1129},"_1-上下文与范围","1. 上下文与范围",[1132,1133,1134,1135,1142],"p",{},"Eagle-RAG 是一个",[1102,1136,1137,1138,1141],{},"行业无关、多租户（",[1119,1139,1140],{},"kb_name","）的多模态 RAG 数据层","，面向 Agent 与 LLM。它只承担四项职责（ADR-008）：",[1096,1144,1145,1151,1157,1163],{},[1099,1146,1147,1150],{},[1102,1148,1149],{},"ingest（入库）","——把文件\u002FURL 路由到正确的解析器，做向量化并建索引；",[1099,1152,1153,1156],{},[1102,1154,1155],{},"retrieve（检索）","——对文本块与视觉切片做多模态召回；",[1099,1158,1159,1162],{},[1102,1160,1161],{},"assemble context（组装上下文）","——融合、重排、带溯源的答案生成；",[1099,1164,1165,1168],{},[1102,1166,1167],{},"admin metadata（管理元数据）","——任务审计、知识库生命周期、标签、健康探针。",[1132,1170,1171,1172,1175,1176,1179,1180,1183,1184,1187],{},"它被",[1102,1173,1174],{},"下游 Agent 通过 REST \u002F SSE \u002F MCP 消费","；内置 Next.js 前端只展示 Core（knowhere + pixelrag）检索能力。垂直领域（",[1119,1177,1178],{},"plugins\u002Fbiomed"," 实验性、",[1119,1181,1182],{},"plugins\u002Flakehouse_bi"," 开发中）以",[1102,1185,1186],{},"后端 + MCP 形态","交付。",[1132,1189,1190,1191,1194,1195,1198,1199,1202],{},"系统运行在",[1102,1192,1193],{},"内网（无鉴权）","、固定的基础设施之上：Milvus 2.6、PostgreSQL 16、Redis 7、MinIO，外加 Knowhere 解析服务（或进程内 ",[1119,1196,1197],{},"knowhere-parse-sdk","）与 PixelRAG 进程内库。AI 供应商被限定为",[1102,1200,1201],{},"DeepSeek + Qwen","。",[1132,1204,1205],{},"本文描述系统在代码中的真实形态，可作为快速复习的入口和扩展功能、编写插件时可引用的资料源。",[1127,1207,1209],{"id":1208},"_2-目标与非目标","2. 目标与非目标",[1211,1212,1213],"h3",{"id":1213},"目标",[1096,1215,1216,1229,1261,1273,1293,1309,1329],{},[1099,1217,1218,1221,1222,1225,1226,1202],{},[1102,1219,1220],{},"双入库管线","，按「格式 + 内容形态」路由：Knowhere（语义骨架：类型化 chunk、",[1119,1223,1224],{},"doc_nav"," 章节树、知识图谱边）处理文本类文档；PixelRAG（视觉切片，2048 维）处理扫描件\u002F图片文档。见 ",[1119,1227,1228],{},"eagle_rag\u002Fingest\u002Frouter.py",[1099,1230,1231,1234,1235,1238,1239,1242,1243,1242,1246,1242,1249,1252,1253,1256,1257,1260],{},[1102,1232,1233],{},"多模态融合","，通过 ",[1119,1236,1237],{},"eagle_visual"," 上的四个锚点字段（",[1119,1240,1241],{},"chunk_type","、",[1119,1244,1245],{},"parent_section",[1119,1247,1248],{},"content_summary",[1119,1250,1251],{},"source_chunk_id","）锚定到 Knowhere 语义树，支持父文档召回（先 ",[1119,1254,1255],{},"type=\"section_summary\"","，再按 ",[1119,1258,1259],{},"path"," 前缀下钻）。",[1099,1262,1263,1117,1266,1269,1270,1272],{},[1102,1264,1265],{},"双层多租户",[1119,1267,1268],{},"plugin_namespace","（Milvus Database + PG 仓储过滤）把一次部署绑定到单一领域；",[1119,1271,1140],{}," 在该领域内对标量检索做知识库过滤。",[1099,1274,1275,1278,1279,1282,1283,1282,1286,1282,1289,1292],{},[1102,1276,1277],{},"路由查询引擎","（",[1119,1280,1281],{},"auto"," \u002F ",[1119,1284,1285],{},"text",[1119,1287,1288],{},"visual",[1119,1290,1291],{},"hybrid","），由 FallbackChain 选择器链 + 插件可扩展的 collection 计划构成，随后做逐计划重排、RRF 融合、跨 collection 去重与最终重排。",[1099,1294,1295,1298,1299,1282,1302,1282,1305,1308],{},[1102,1296,1297],{},"插件微内核","：Core 与领域插件共用同一套 Hook\u002FMCP 扩展路径；热路径 Hook（",[1119,1300,1301],{},"PARSE",[1119,1303,1304],{},"CHUNK",[1119,1306,1307],{},"QUERY_ASSEMBLE","）只做增强、绝不重新切块。",[1099,1310,1311,1314,1315,1282,1318,1282,1321,1324,1325,1328],{},[1102,1312,1313],{},"可靠性","：Celery 三队列（",[1119,1316,1317],{},"router",[1119,1319,1320],{},"knowhere",[1119,1322,1323],{},"pixelrag","）+ ",[1119,1326,1327],{},"with_retry"," + 死信；解析器 fail-closed（无 mock 兜底）。",[1099,1330,1331,1334,1335,1242,1338,1341,1342,1242,1345,1242,1348,1242,1351,1354],{},[1102,1332,1333],{},"统一对外接口","：REST + SSE 流式（",[1119,1336,1337],{},"\u002Fquery\u002Fstream",[1119,1339,1340],{},"\u002Fsearch\u002Fstream","）与 FastMCP 工具（",[1119,1343,1344],{},"core_ingest",[1119,1346,1347],{},"core_query",[1119,1349,1350],{},"core_retrieve_text",[1119,1352,1353],{},"core_retrieve_visual","）。",[1211,1356,1357],{"id":1357},"非目标",[1096,1359,1360,1366,1380,1386,1392,1398],{},[1099,1361,1362,1365],{},[1102,1363,1364],{},"不做 Agent 工作流，不做副作用型 MCP 工具","（ADR-008 红线）。规划、工具循环与决策属于下游 Agent 宿主。",[1099,1367,1368,1371,1372,1375,1376,1379],{},[1102,1369,1370],{},"不做运行时领域切换","——每个实例一个 ",[1119,1373,1374],{},"default_namespace","（ADR-002）。多行业 = 多套部署（",[1119,1377,1378],{},"EAGLE_RAG_PROFILE","），而非运行时切换。",[1099,1381,1382,1385],{},[1102,1383,1384],{},"不做格式转换\u002FOffice 渲染","——已移除 LibreOffice 与 pixelrag-serve；Excel 直接走 Knowhere。",[1099,1387,1388,1391],{},[1102,1389,1390],{},"无 FAISS、无 OpenAI \u002F Cohere \u002F 其他供应商","——视觉存储由 Milvus HNSW\u002FDiskANN 承载；模型仅 DeepSeek + Qwen。",[1099,1393,1394,1397],{},[1102,1395,1396],{},"不是向量数据库、工作流引擎或通用 Web 服务","——产品是只读为主的 RAG 数据层。",[1099,1399,1400,1403],{},[1102,1401,1402],{},"不做跨存储强一致","——入库是异步任务管线，带审计轨迹；MinIO \u002F Milvus \u002F PG 之间接受最终一致。",[1127,1405,1407],{"id":1406},"_3-真正的设计","3. 真正的设计",[1211,1409,1411],{"id":1410},"_31-技术选型与取舍","3.1 技术选型与取舍",[1413,1414,1415,1431],"table",{},[1416,1417,1418],"thead",{},[1419,1420,1421,1425,1428],"tr",{},[1422,1423,1424],"th",{},"关注点",[1422,1426,1427],{},"选择",[1422,1429,1430],{},"理由",[1432,1433,1434,1462,1476,1496,1525,1536,1550,1578,1600,1611],"tbody",{},[1419,1435,1436,1440,1449],{},[1437,1438,1439],"td",{},"编排框架",[1437,1441,1442,1278,1445,1448],{},[1102,1443,1444],{},"LlamaIndex",[1119,1446,1447],{},"llama_index.core"," + 官方集成包）",[1437,1450,1451,1452,1242,1455,1242,1458,1461],{},"提供 RAG 原语（节点 schema、",[1119,1453,1454],{},"BaseRetriever",[1119,1456,1457],{},"CustomQueryEngine",[1119,1459,1460],{},"MilvusVectorStore","、模型包），又不引入 Agent 编排。LangChain 曾评估并否决：其差异化是 Agent\u002FLCEL 工作流，恰是 ADR-008 排除的范围；迁移需要重写检索器、生成链路与全部模型集成，召回收益为零。",[1419,1463,1464,1467,1470],{},[1437,1465,1466],{},"API \u002F 流式",[1437,1468,1469],{},"FastAPI + uvicorn + sse-starlette",[1437,1471,1472,1473,1354],{},"内网异步 API；SSE 匹配流式步骤（",[1119,1474,1475],{},"session\u002Fstep\u002Fsources\u002Ftoken\u002Fdone",[1419,1477,1478,1481,1484],{},[1437,1479,1480],{},"任务队列",[1437,1482,1483],{},"Celery（Redis broker）",[1437,1485,1486,1487,1489,1490,1492,1493,1495],{},"异步持久化入库；三队列不同并发（",[1119,1488,1317],{}," 4 \u002F ",[1119,1491,1320],{}," 8 \u002F ",[1119,1494,1323],{}," 1）。",[1419,1497,1498,1501,1512],{},[1437,1499,1500],{},"向量库",[1437,1502,1503,1504,1507,1508,1511],{},"Milvus 2.6（",[1119,1505,1506],{},"pymilvus"," + ",[1119,1509,1510],{},"llama-index-vector-stores-milvus","）",[1437,1513,1514,1515,1517,1518,1521,1522,1524],{},"每个 ",[1119,1516,1268],{}," 一个 Database；双集合 ",[1119,1519,1520],{},"eagle_text","（1536 维）\u002F ",[1119,1523,1237],{},"（2048 维）；HNSW\u002FDiskANN + 标量过滤。",[1419,1526,1527,1530,1533],{},[1437,1528,1529],{},"关系库",[1437,1531,1532],{},"PostgreSQL 16 + SQLModel + SQLAlchemy 2 + Alembic",[1437,1534,1535],{},"文档注册表、去重、会话、任务审计、标签目录。store 内不写 DDL，只走迁移。",[1419,1537,1538,1541,1544],{},[1437,1539,1540],{},"对象存储",[1437,1542,1543],{},"MinIO",[1437,1545,1546,1547,1549],{},"分布式 worker 共享文件；",[1119,1548,1140],{}," 前缀隔离。",[1419,1551,1552,1555,1575],{},[1437,1553,1554],{},"解析",[1437,1556,1557,1558,1561,1562,1565,1566,1568,1569,1507,1572,1511],{},"Knowhere（",[1119,1559,1560],{},"knowhere-python-sdk"," HTTP ",[1119,1563,1564],{},":5005"," 或进程内 ",[1119,1567,1197],{},"）+ PixelRAG 库（",[1119,1570,1571],{},"pixelrag_render",[1119,1573,1574],{},"pixelrag_embed",[1437,1576,1577],{},"两条专业化管线，均 fail-closed，无 mock。",[1419,1579,1580,1583,1593],{},[1437,1581,1582],{},"模型",[1437,1584,1585,1586,1589,1590],{},"DeepSeek-V4-Pro（LLM\u002F路由）、Qwen-VL-Max（VLM）、",[1119,1587,1588],{},"text-embedding-v4","（1536 维）、Qwen3-VL-Embedding-2B（2048 维，本地或百炼）、",[1119,1591,1592],{},"qwen3-rerank",[1437,1594,1595,1596,1599],{},"产品级供应商锁定；新模型经 LlamaIndex 集成包或插件 ",[1119,1597,1598],{},"EncoderRegistry"," 进入。",[1419,1601,1602,1605,1608],{},[1437,1603,1604],{},"MCP",[1437,1606,1607],{},"FastMCP ≥ 2.3（HTTP 默认，stdio 兜底）+ tenacity\u002Fpybreaker",[1437,1609,1610],{},"为下游 Agent 提供标准工具面，带重试与熔断。",[1419,1612,1613,1615,1618],{},[1437,1614,135],{},[1437,1616,1617],{},"Next.js 16 \u002F React 19 \u002F TS \u002F Bun \u002F Tailwind v4 \u002F HeroUI v3 \u002F next-intl",[1437,1619,1620],{},"Core 展示层；本仓库垂类无 UI。",[1211,1622,1624],{"id":1623},"_32-模块划分核心","3.2 模块划分（核心）",[1413,1626,1627,1640],{},[1416,1628,1629],{},[1419,1630,1631,1634,1637],{},[1422,1632,1633],{},"模块",[1422,1635,1636],{},"职责",[1422,1638,1639],{},"关键文件",[1432,1641,1642,1666,1690,1714,1732,1753,1768,1795,1816,1837],{},[1419,1643,1644,1649,1652],{},[1437,1645,1646],{},[1119,1647,1648],{},"api\u002F",[1437,1650,1651],{},"FastAPI 路由、Pydantic schema、MCP server、SSE",[1437,1653,1654,1242,1657,1242,1660,1242,1663],{},[1119,1655,1656],{},"api\u002Fquery.py",[1119,1658,1659],{},"api\u002Fingest.py",[1119,1661,1662],{},"api\u002Fmcp_server.py",[1119,1664,1665],{},"api\u002Fschemas\u002F",[1419,1667,1668,1673,1676],{},[1437,1669,1670],{},[1119,1671,1672],{},"ingest\u002F",[1437,1674,1675],{},"路由矩阵、Knowhere\u002FPixelRAG 适配器、runner",[1437,1677,1678,1242,1681,1242,1684,1242,1687],{},[1119,1679,1680],{},"ingest\u002Frouter.py",[1119,1682,1683],{},"ingest\u002Frunner.py",[1119,1685,1686],{},"ingest\u002Fknowhere_adapter.py",[1119,1688,1689],{},"ingest\u002Fpixelrag_adapter.py",[1419,1691,1692,1697,1700],{},[1437,1693,1694],{},[1119,1695,1696],{},"index\u002F",[1437,1698,1699],{},"Milvus store、按 DB 的客户端池、注册表、标签目录",[1437,1701,1702,1242,1705,1242,1708,1242,1711],{},[1119,1703,1704],{},"index\u002Fmilvus_text_store.py",[1119,1706,1707],{},"index\u002Fmilvus_visual_store.py",[1119,1709,1710],{},"index\u002Fmilvus_pool.py",[1119,1712,1713],{},"index\u002Fregistry.py",[1419,1715,1716,1721,1724],{},[1437,1717,1718],{},[1119,1719,1720],{},"retrievers\u002F",[1437,1722,1723],{},"文本（图）检索与视觉检索",[1437,1725,1726,1242,1729],{},[1119,1727,1728],{},"retrievers\u002Fknowhere_graph_retriever.py",[1119,1730,1731],{},"retrievers\u002Fpixelrag_visual_retriever.py",[1419,1733,1734,1739,1742],{},[1437,1735,1736],{},[1119,1737,1738],{},"router\u002F",[1437,1740,1741],{},"查询路由、RRF 融合、重排、LLM 工厂",[1437,1743,1744,1242,1747,1242,1750],{},[1119,1745,1746],{},"router\u002Frouter_engine.py",[1119,1748,1749],{},"router\u002Fselectors.py",[1119,1751,1752],{},"router\u002Frerank_fusion.py",[1419,1754,1755,1760,1763],{},[1437,1756,1757],{},[1119,1758,1759],{},"generation\u002F",[1437,1761,1762],{},"多模态答案生成",[1437,1764,1765],{},[1119,1766,1767],{},"generation\u002Fmultimodal_engine.py",[1419,1769,1770,1775,1778],{},[1437,1771,1772],{},[1119,1773,1774],{},"plugins\u002F",[1437,1776,1777],{},"微内核：管理器、HookBus、Core 默认插件、编排器",[1437,1779,1780,1242,1783,1242,1786,1242,1789,1242,1792],{},[1119,1781,1782],{},"plugins\u002Fmanager.py",[1119,1784,1785],{},"plugins\u002Fhookbus.py",[1119,1787,1788],{},"plugins\u002Fcore_defaults.py",[1119,1790,1791],{},"plugins\u002Fingest_orchestrator.py",[1119,1793,1794],{},"plugins\u002Fretriever_orchestrator.py",[1419,1796,1797,1802,1805],{},[1437,1798,1799],{},[1119,1800,1801],{},"db\u002F",[1437,1803,1804],{},"SQLModel 模型、按 namespace 隔离的仓储",[1437,1806,1807,1242,1810,1242,1813],{},[1119,1808,1809],{},"db\u002Fmodels\u002F",[1119,1811,1812],{},"db\u002Frepositories\u002F",[1119,1814,1815],{},"db\u002Fnamespace.py",[1419,1817,1818,1823,1826],{},[1437,1819,1820],{},[1119,1821,1822],{},"tasks\u002F",[1437,1824,1825],{},"Celery 应用、任务状态、死信",[1437,1827,1828,1242,1831,1242,1834],{},[1119,1829,1830],{},"tasks\u002Fcelery_app.py",[1119,1832,1833],{},"tasks\u002Fstate.py",[1119,1835,1836],{},"tasks\u002Fdead_letter.py",[1419,1838,1839,1859,1862],{},[1437,1840,1841,1242,1844,1242,1847,1242,1850,1242,1853,1242,1856],{},[1119,1842,1843],{},"kb\u002F",[1119,1845,1846],{},"sessions\u002F",[1119,1848,1849],{},"storage\u002F",[1119,1851,1852],{},"attachments\u002F",[1119,1854,1855],{},"admin\u002F",[1119,1857,1858],{},"telemetry\u002F",[1437,1860,1861],{},"知识库生命周期、会话、MinIO\u002F去重、附件惰性解析、运维、可观测性",[1437,1863,1864],{},"—",[1211,1866,1868],{"id":1867},"_33-业务流入库","3.3 业务流：入库",[1870,1871,1875],"pre",{"className":1872,"code":1874,"language":1285},[1873],"language-text","POST \u002Fingest (file | bytes | object_key | URL)\n  └─ runner.ingest()\n       ├─ 生成 job\u002Fdocument id\n       ├─ 按 (sha256, kb_name, plugin_namespace) 去重\n       ├─ 上传 MinIO（kb_name 前缀隔离）\n       ├─ 创建审计 + 注册文档\n       └─ app.send_task(ingest_router)            # router_queue\n            └─ ingest.router.ingest_router\n                 └─ FallbackChain 路由               # 格式 + 内容形态\n                      前缀 knowhere:\u002Fpixelrag:\n                      → settings.router.mode (text\u002Fvisual\u002Fhybrid)\n                      → http(s) URI → PixelRAG\n                      → PDF 形态探测 (pypdf\u002Fpdfplumber)\n                      → 扩展名 → content_type\n                 ├─ knowhere → knowhere_parse     # knowhere_queue\n                 │    └─ 解析（api SDK :5005 | parser SDK 进程内）\n                 │       ├─ 文本节点 + section_summary 节点\n                 │       ├─ doc_nav 章节树\n                 │       ├─ 关键词目录（document_keywords）\n                 │       └─ 视觉分发 → knowhere_visual_chunks \u002F pixelrag_build\n                 └─ pixelrag → pixelrag_build      # pixelrag_queue（并发 1）\n                      └─ 渲染切片 → Qwen3-VL 2048 维 → upsert eagle_visual\n",[1119,1876,1874],{"__ignoreMap":1877},"",[1132,1879,1880,1881,1883,1884,1886,1887,1889,1890,1282,1892,1894,1895,1282,1897,1899],{},"文本管线用 Qwen ",[1119,1882,1588],{},"（1536 维）写入 ",[1119,1885,1520],{},"；视觉切片带四个融合锚点字段落入 ",[1119,1888,1237],{},"。热路径 ",[1119,1891,1301],{},[1119,1893,1304],{}," Hook 只增强节点，必须保留 Knowhere 的 ",[1119,1896,1224],{},[1119,1898,1259],{}," \u002F 类型化 chunk（ADR-005）。",[1211,1901,1903],{"id":1902},"_34-业务流查询","3.4 业务流：查询",[1870,1905,1908],{"className":1906,"code":1907,"language":1285},[1873],"POST \u002Fquery | \u002Fsearch | \u002Fquery\u002Fstream | \u002Fsearch\u002Fstream\n  └─ EagleRouterQueryEngine\n       ├─ 解析附件（惰性解析；不写 Milvus）\n       ├─ route_query: FallbackChain\n       │    ForcedModeSelector → AttachmentSelector → LLMIntentSelector → HeuristicSelector\n       ├─ _plan_query_route: CLASSIFY_QUERY Hook → QueryRouteDecision（collection 计划）\n       │    + scope 感知并集（scope_filter: kb_names ∪ document_ids ∪ tags）\n       ├─ RetrieverOrchestrator.retrieve\n       │    每个计划：ANN（Qwen 文本 | Qwen3-VL 视觉 | 插件编码器）\n       │    → 计划内重排 → supplement Hook\n       │    → merge_rrf → dedupe_cross_collection → RRF_POST_MERGE → 最终重排\n       ├─ 两阶段父文档召回：section_summary → path 前缀下钻\n       └─ 生成（EagleMultimodalQueryEngine）\n            文本答案走 DeepSeek；图像推理走 Qwen-VL-Max\n            SSE 事件：session → step(route\u002Frecall\u002Frerank) → sources → token* → done\n",[1119,1909,1907],{"__ignoreMap":1877},[1132,1911,1912,1913,1916,1917,1282,1919,1922,1923,1926],{},"代码中的关键保证：空召回列表不参与 RRF 产生虚排位（",[1119,1914,1915],{},"merge_rrf","）；跨 collection 重复按 ",[1119,1918,1251],{},[1119,1920,1921],{},"(document_id, path)"," 折叠（",[1119,1924,1925],{},"dedupe_cross_collection","）；单个 collection 计划失败时跳过并记录审计，而不是让整个查询失败（G14）。",[1211,1928,1930],{"id":1929},"_35-插件微内核","3.5 插件微内核",[1132,1932,1933,1936,1937,1940,1941,1944,1945,1948,1949,1952,1953,1282,1956,1282,1959,1962,1963,1282,1965,1282,1967,1969,1970,1242,1973,1242,1976,1242,1979,1242,1982,1242,1985,1242,1988,1991,1992,1994,1995,1998,1999,2002,2003,1507,2006,2008],{},[1119,1934,1935],{},"PluginManager"," 从 ",[1119,1938,1939],{},"settings.plugins.enabled"," 加载模块（仅仓库内模块；Core ",[1119,1942,1943],{},"eagle_rag.plugins.core_defaults"," 永远最先加载）。每个插件声明 namespace 清单；实例绑定 ",[1119,1946,1947],{},"settings.plugins.default_namespace"," = Milvus Database + PG 仓储过滤。",[1119,1950,1951],{},"HookBus"," 支持 ",[1119,1954,1955],{},"invoke_first",[1119,1957,1958],{},"invoke_all",[1119,1960,1961],{},"invoke_transform","；热路径 Hook 是 ",[1119,1964,1301],{},[1119,1966,1304],{},[1119,1968,1307],{},"，编排 Hook 包括 ",[1119,1971,1972],{},"CLASSIFY_*",[1119,1974,1975],{},"EMBED_*",[1119,1977,1978],{},"UPSERT_VECTORS",[1119,1980,1981],{},"CLASSIFY_QUERY",[1119,1983,1984],{},"QUERY_DENSE_EXPAND",[1119,1986,1987],{},"RETRIEVE_SUPPLEMENT",[1119,1989,1990],{},"RRF_POST_MERGE","。编码器经 ",[1119,1993,1598],{}," 注册；MCP 工具经 ",[1119,1996,1997],{},"mcp_registry.py"," 注册，带 RAG-only 命名（",[1119,2000,2001],{},"assert_rag_only_tool_name","）与 G3 namespace 过滤（仅暴露 ",[1119,2004,2005],{},"core_*",[1119,2007,1374],{}," 插件工具）。",[1127,2010,2012],{"id":2011},"_4-系统上下文图","4. 系统上下文图",[1870,2014,2017],{"className":2015,"code":2016,"language":1285},[1873],"                    ┌─────────────────────────────┐\n                    │  内置 UI（Core 展示层）        │\n                    └──────────────┬──────────────┘\n                                   │ REST\u002FSSE\n        ┌───────────────┐          ▼          ┌──────────────────┐\n        │ 下游 Agent    │  REST\u002FSSE\u002FMCP       │                  │\n        │ （LLM 宿主）   │──────────────────►  │    Eagle-RAG     │\n        │              │                     │  （数据层）        │\n        └───────────────┘                     │                  │\n                                              └───┬──────┬───────┘\n                 文件 \u002F URL ──────────────────────►│      │\n                                                  │      │\n        ┌──────────────┐  HTTP :5005 \u002F 进程内     │      │\n        │ Knowhere     │◄─────────────────────────┤      │\n        │ （解析器）     │                          │      │\n        └──────────────┘                          │      │\n        ┌──────────────┐  库引用（pixelrag_*）     │      │\n        │ PixelRAG     │◄─────────────────────────┤      │\n        └──────────────┘                          │      │\n        ┌──────────────┐  DeepSeek \u002F Qwen（百炼）  │\n        │ LLM \u002F VLM \u002F  │◄─────────────────────────┤\n        │ embed \u002F rerank│                        │\n        └──────────────┘                          │\n        ┌──────────────┐                          │\n        │ Milvus \u002F PG \u002F │◄────────────────────────┤\n        │ Redis \u002F MinIO │                         │\n        └──────────────┘                          │\n",[1119,2018,2016],{"__ignoreMap":1877},[1132,2020,2021],{},"该图展示 Eagle-RAG 与外部世界的边界：Agent 不直接访问存储，Eagle-RAG 也不拥有 Agent 工作流——它只把检索与上下文组装暴露为工具。",[1127,2023,2025],{"id":2024},"_5-api","5. API",[1211,2027,2029],{"id":2028},"rest-sse","REST \u002F SSE",[1096,2031,2032,2044,2063,2097,2103,2115],{},[1099,2033,2034,2037,2038,2040,2041,1354],{},[1119,2035,2036],{},"POST \u002Fingest","——四种来源（文件 \u002F 字节流 \u002F MinIO 对象 \u002F URL）；返回 job id、去重状态与审计日志。经 ",[1119,2039,1140],{}," 多租户（缺省回退 ",[1119,2042,2043],{},"settings.kb_name",[1099,2045,2046,1242,2049,2052,2053,1507,2055,2058,2059,2062],{},[1119,2047,2048],{},"POST \u002Fsearch",[1119,2050,2051],{},"POST \u002Fsearch\u002Fstream","——仅检索；返回 ",[1119,2054,1285],{},[1119,2056,2057],{},"image"," 来源，含路径、分数、",[1119,2060,2061],{},"chunk_count","、关键词、页码。",[1099,2064,2065,1242,2068,2071,2072,1242,2075,1278,2078,1282,2081,1282,2084,2087,2088,1242,2091,1242,2094,1202],{},[1119,2066,2067],{},"POST \u002Fquery",[1119,2069,2070],{},"POST \u002Fquery\u002Fstream","——检索 + 生成。SSE 依次发出 ",[1119,2073,2074],{},"session",[1119,2076,2077],{},"step",[1119,2079,2080],{},"route",[1119,2082,2083],{},"recall",[1119,2085,2086],{},"rerank","）、",[1119,2089,2090],{},"sources",[1119,2092,2093],{},"token*",[1119,2095,2096],{},"done",[1099,2098,2099,2102],{},[1119,2100,2101],{},"POST \u002Fattachments","——单张 PixelRAG 图片（默认上限 5 MB）；在查询\u002F搜索时惰性解析，从不写入 Milvus。",[1099,2104,2105,2106,1242,2109,1242,2112,1202],{},"证据类——",[1119,2107,2108],{},"GET \u002Fdocuments\u002F{id}\u002Fstructure",[1119,2110,2111],{},"\u002Fdocuments\u002F{id}\u002Ffile",[1119,2113,2114],{},"\u002Fdocuments\u002F{id}\u002Fchunks\u002F{chunk_id}",[1099,2116,2117,2118,1242,2121,1242,2124,2127],{},"知识库\u002F标签\u002F会话\u002F运维——",[1119,2119,2120],{},"GET \u002Ftags",[1119,2122,2123],{},"\u002Fsessions*",[1119,2125,2126],{},"\u002Fadmin\u002Fprobes","、任务审计。",[1132,2129,2130,2131,2134,2135,1278,2138,2087,2141,1278,2144,1282,2147,1282,2150,2087,2153,1278,2156,2159,2160,2163,2164,2167],{},"请求要点（",[1119,2132,2133],{},"api\u002Fschemas\u002Fquery.py","）：",[1119,2136,2137],{},"mode",[1119,2139,2140],{},"auto|text|visual|hybrid",[1119,2142,2143],{},"filters",[1119,2145,2146],{},"source_type",[1119,2148,2149],{},"pipeline",[1119,2151,2152],{},"year",[1119,2154,2155],{},"scope_filter",[1119,2157,2158],{},"ScopeSelection{kb_names, document_ids, tags}","，",[1102,2161,2162],{},"并集","语义）、",[1119,2165,2166],{},"attachments","（按 id）以及 MCP 的内联图片字节。",[1211,2169,2171,2172,2175],{"id":2170},"mcpmcphttp-默认stdio-兜底","MCP（",[1119,2173,2174],{},"\u002Fmcp","，HTTP 默认，stdio 兜底）",[1413,2177,2178,2187],{},[1416,2179,2180],{},[1419,2181,2182,2184],{},[1422,2183,30],{},[1422,2185,2186],{},"用途",[1432,2188,2189,2198,2207,2216],{},[1419,2190,2191,2195],{},[1437,2192,2193],{},[1119,2194,1344],{},[1437,2196,2197],{},"将文件\u002FURL 摄入知识库",[1419,2199,2200,2204],{},[1437,2201,2202],{},[1119,2203,1347],{},[1437,2205,2206],{},"多模态查询，返回答案 + 来源",[1419,2208,2209,2213],{},[1437,2210,2211],{},[1119,2212,1350],{},[1437,2214,2215],{},"仅文本检索",[1419,2217,2218,2222],{},[1437,2219,2220],{},[1119,2221,1353],{},[1437,2223,2224,2225,1511],{},"视觉检索（支持内联 ",[1119,2226,2227],{},"image_base64",[1132,2229,2230,2231,2233,2234,2237],{},"工具只允许检索\u002F组装上下文；",[1119,2232,2001],{}," 禁止副作用命名。领域插件注册 ",[1119,2235,2236],{},"{namespace}_{name}"," 工具。",[1211,2239,2240],{"id":2240},"设计理由",[1096,2242,2243,2248,2251,2264],{},[1099,2244,2245,2247],{},[1119,2246,1140],{}," 贯穿所有 API、MCP 工具、Celery 任务、Milvus 标量过滤与仓储调用——多租户是横切关注点，不是开关。",[1099,2249,2250],{},"流式是一等公民：检索 + VLM 生成较慢，客户端可以增量看到 route → recall → rerank → sources → tokens。",[1099,2252,2253,2255,2256,2259,2260,2263],{},[1119,2254,2155],{}," 把完整并集过滤下推到 Milvus（",[1119,2257,2258],{},"_resolve_scope_filter","），标签经标签目录解析为 ",[1119,2261,2262],{},"document_id","，并带文档数量上限保护。",[1099,2265,2266],{},"按设计不做鉴权（内网）；需要时由网关补。",[1127,2268,2270],{"id":2269},"_6-数据存储","6. 数据存储",[1211,2272,2274,2275,2277],{"id":2273},"milvus-26每个-plugin_namespace-一个-database","Milvus 2.6（每个 ",[1119,2276,1268],{}," 一个 Database）",[1096,2279,2280,2302,2318],{},[1099,2281,2282,2284,2285,1242,2287,1242,2289,1242,2291,1242,2293,1242,2296,2298,2299,1202],{},[1119,2283,1520],{},"——1536 维文本块（HNSW\u002FDiskANN），标量过滤 ",[1119,2286,1140],{},[1119,2288,2262],{},[1119,2290,2152],{},[1119,2292,2146],{},[1119,2294,2295],{},"type",[1119,2297,1259],{},"；去重主键 ",[1119,2300,2301],{},"(sha256, kb_name, plugin_namespace)",[1099,2303,2304,2306,2307,1278,2309,2087,2312,1242,2314,1242,2316,1202],{},[1119,2305,1237],{},"——2048 维视觉切片，带融合锚点：",[1119,2308,1241],{},[1119,2310,2311],{},"tile|image|table",[1119,2313,1245],{},[1119,2315,1248],{},[1119,2317,1251],{},[1099,2319,2320,2321,2323],{},"客户端按 DB 名池化（",[1119,2322,1710],{},"），永不关闭。",[1211,2325,2327],{"id":2326},"postgresql-16sqlmodel-alembic","PostgreSQL 16（SQLModel + Alembic）",[1132,2329,2330,2331,1242,2334,2337,2338,1242,2341,1507,2344,1242,2347,2350,2351,1242,2354,1242,2357,1242,2359,1242,2362,1242,2365,1242,2368,2371,2372,1507,2374,2376,2377,1354],{},"表：",[1119,2332,2333],{},"documents",[1119,2335,2336],{},"document_keywords","（标签目录）、",[1119,2339,2340],{},"images",[1119,2342,2343],{},"sessions",[1119,2345,2346],{},"messages",[1119,2348,2349],{},"task_audit","（审计\u002F重试）、",[1119,2352,2353],{},"document_dedup",[1119,2355,2356],{},"knowledge_bases",[1119,2358,2166],{},[1119,2360,2361],{},"notifications",[1119,2363,2364],{},"mcp_call_log",[1119,2366,2367],{},"system_setting",[1119,2369,2370],{},"metric_samples","。每条注册表数据都带 ",[1119,2373,1140],{},[1119,2375,1268],{},"；仓储按 namespace 过滤（",[1119,2378,1812],{},[1211,2380,2382],{"id":2381},"redis-7-minio","Redis 7 \u002F MinIO",[1132,2384,2385,2386,2388],{},"Redis 是 Celery broker + 结果后端；MinIO 按 ",[1119,2387,1140],{}," 前缀存储上传文件，worker 按 object key 拉取。",[1211,2390,2391],{"id":2391},"取舍",[1132,2393,2394],{},"选 Milvus 而非 FAISS，因为需要托管 ANN + 标量过滤 + Database 隔离；代价是外部服务依赖以及与 PG 的最终一致。PG 保存关系型事实（注册表、审计、会话）；Milvus 只放可重建的向量（重新解析即可恢复）。",[1127,2396,2398],{"id":2397},"_7-代码与伪代码","7. 代码与伪代码",[1132,2400,2401],{},"只在代码本身就是设计点的地方贴代码：",[1870,2403,2408],{"className":2404,"code":2406,"language":2407,"meta":1877},[2405],"language-python","# 查询路由（简化自 router\u002Frouter_engine.py）\ndecision = FallbackChain([\n    ForcedModeSelector(default_mode=cfg.mode),   # text\u002Fvisual\u002Fhybrid 覆盖\n    AttachmentSelector(),                        # 图片附件 → visual\n    LLMIntentSelector(llm, prompt, enabled),     # LLM 意图分类\n    HeuristicSelector(rules, default),           # 关键词兜底\n]).select(ctx)\n","python",[1119,2409,2406],{"__ignoreMap":1877},[1870,2411,2414],{"className":2412,"code":2413,"language":2407,"meta":1877},[2405],"# RRF 融合核心（router\u002Frerank_fusion.py）——空列表防护是设计点\nnon_empty = [lst for lst in plan_results if lst]\nfor lst in non_empty:\n    for rank, nws in enumerate(lst, start=1):\n        scores[key(nws)] += 1 \u002F (k + rank)       # k = settings.router.rrf_k\n",[1119,2415,2413],{"__ignoreMap":1877},[1132,2417,2418],{},"其余不再贴代码：真正的重点在第 3–6 节的取舍，而非实现细节。",[1127,2420,2422],{"id":2421},"_8-约束的程度","8. 约束的程度",[1132,2424,2425,2426,2429],{},"这是一个",[1102,2427,2428],{},"强约束的存量系统","，更靠近「大量决策已被锁定」的一端：",[1096,2431,2432,2438,2447],{},[1099,2433,2434,2437],{},[1102,2435,2436],{},"已锁定","：基础设施（Milvus 2.6 \u002F PG 16 \u002F Redis \u002F MinIO）、模型供应商（仅 DeepSeek + Qwen）、解析 SDK（Knowhere、PixelRAG 库）、LlamaIndex 作为集成层、ADR-008 红线（无 Agent 工作流、无副作用 MCP 工具）、单域部署、中英双语文档、仓库规范（ruff\u002Fmypy、仅 Alembic 改 DDL、英文注释）。",[1099,2439,2440,2443,2444,2446],{},[1102,2441,2442],{},"缝隙内的自由度","：插件 Hook 与清单、经 ",[1119,2445,1598],{}," 新增 collection\u002F编码器、新增带 namespace 的 MCP 工具、入库\u002F查询路由规则、Core 前端（仅展示；垂类无 UI）。",[1099,2448,2449,2452],{},[1102,2450,2451],{},"设计启示","：新功能应扩展插件\u002FHook 而非改核心；框架替换（如 LlamaIndex → LangChain）成本高、收益低——锁定的决策已覆盖通用部分，剩余的自研逻辑（路由、融合、多租户、插件总线）是与框架无关的领域代码。",[1132,2454,2455,2456,2459],{},"遗留说明：",[1119,2457,2458],{},"eagle_rag\u002F__init__.py"," 的 docstring 仍保留重构前的描述 \"for the finance and tax domain\"；产品现已行业无关（AGENTS.md），建议在后续清理中更新。",{"title":1877,"searchDepth":2461,"depth":2461,"links":2462},4,[2463,2465,2470,2477,2478,2484,2491,2492],{"id":1129,"depth":2464,"text":1130},2,{"id":1208,"depth":2464,"text":1209,"children":2466},[2467,2469],{"id":1213,"depth":2468,"text":1213},3,{"id":1357,"depth":2468,"text":1357},{"id":1406,"depth":2464,"text":1407,"children":2471},[2472,2473,2474,2475,2476],{"id":1410,"depth":2468,"text":1411},{"id":1623,"depth":2468,"text":1624},{"id":1867,"depth":2468,"text":1868},{"id":1902,"depth":2468,"text":1903},{"id":1929,"depth":2468,"text":1930},{"id":2011,"depth":2464,"text":2012},{"id":2024,"depth":2464,"text":2025,"children":2479},[2480,2481,2483],{"id":2028,"depth":2468,"text":2029},{"id":2170,"depth":2468,"text":2482},"MCP（\u002Fmcp，HTTP 默认，stdio 兜底）",{"id":2240,"depth":2468,"text":2240},{"id":2269,"depth":2464,"text":2270,"children":2485},[2486,2488,2489,2490],{"id":2273,"depth":2468,"text":2487},"Milvus 2.6（每个 plugin_namespace 一个 Database）",{"id":2326,"depth":2468,"text":2327},{"id":2381,"depth":2468,"text":2382},{"id":2391,"depth":2468,"text":2391},{"id":2397,"depth":2464,"text":2398},{"id":2421,"depth":2464,"text":2422},"OGAS-ArkhivRAG 业务知识库 MCP Serve 相关设计方案","md",true,{"uuid":156,"slots":2497},{},{"title":1085,"description":2493},"posts\u002FRFC_Agentic_project\u002F2026-08-03-[ADR]-OGAS-Arkhiv",[274,300,275],"ahavOaLcBjlb8s_pyVXJr5IDfTSGapb3QwA0Vvvt6L4",1790443284127]