[{"data":1,"prerenderedAt":2121},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-rfc_agentic_project\u002Frag\u002F2026-08-12-arkhiv_rag-vol-1":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":2110,"date":156,"description":2111,"extension":2112,"mathjax":2113,"meta":2114,"navigation":2113,"path":802,"published":804,"readingMinutes":2116,"seo":2117,"stem":2118,"sticky":156,"swiper_index":156,"tags":2119,"updated":156,"words":803,"__hash__":2120},"posts\u002Fposts\u002FRFC_Agentic_project\u002FRAG\u002F2026-08-12-Arkhiv_RAG-vol-1.md","2026-08-12-Arkhiv_RAG-vol.1-综述","29484",{"type":1088,"value":1089,"toc":2079},"minimark",[1090,1094,1098,1107,1113,1116,1123,1151,1157,1178,1182,1196,1202,1341,1345,1351,1354,1377,1392,1403,1418,1421,1425,1428,1472,1476,1486,1500,1515,1526,1529,1532,1537,1540,1567,1578,1583,1614,1618,1621,1624,1627,1630,1641,1647,1651,1654,1657,1660,1663,1666,1669,1672,1675,1678,1682,1685,1688,1691,1694,1698,1701,1704,1707,1716,1719,1793,1795,1798,1841,1844,1847,1922,1925,1928,2003,2006,2014,2017,2037,2040,2043,2046],[1091,1092,1093],"h2",{"id":1093},"背景",[1095,1096,1097],"p",{},"RAG，全称Retrieval Augmented Generation（检索增强生成），其工作原理为：当用户提问时，系统先从海量知识库中检索出与问题相关的实时或私有信息，并将这些信息作为参考背景与问题一起提供给大模型，让模型像做开卷考试一样，基于提供的可靠证据生成更准确、实时且可溯源的回答。",[1095,1099,1100,1106],{},[1101,1102,1103],"a",{"href":1103,"rel":1104},"https:\u002F\u002Farxiv.org\u002Fpdf\u002F2005.11401",[1105],"nofollow"," Facebook AI 2020 年提出 RAG 概念的开山之作，定义了「检索器 + 生成器」联合训练范式",[1095,1108,1109],{},[1110,1111],"img",{"alt":275,"src":1112},"https:\u002F\u002Fpic3.zhimg.com\u002F80\u002Fv2-8de8add37668cb28db59a368848a2992_720w.webp",[1095,1114,1115],{},"RAG主要通过两个阶段来完成这一过程：",[1095,1117,1118,1119],{},"（1）",[1120,1121,1122],"strong",{},"检索阶段：寻找“非参数化知识”",[1124,1125,1126,1141],"ul",{},[1127,1128,1129,1132,1133,1136,1137,1140],"li",{},[1120,1130,1131],{},"知识向量化","：",[1120,1134,1135],{},"嵌入模型（Embedding Model）"," 充当了“连接器”的角色。它将外部知识库编码为向量索引（Index），存入",[1120,1138,1139],{},"向量数据库","。",[1127,1142,1143,1146,1147,1150],{},[1120,1144,1145],{},"语义召回","：当用户发起查询时，检索模块利用同样的嵌入模型将问题向量化，并通过",[1120,1148,1149],{},"相似度搜索（Similarity Search）","，从海量数据中精准锁定与问题最相关的文档片段。",[1095,1152,1153,1154],{},"（2）",[1120,1155,1156],{},"生成阶段：融合两种知识",[1124,1158,1159,1168],{},[1127,1160,1161,1132,1164,1167],{},[1120,1162,1163],{},"上下文整合",[1120,1165,1166],{},"生成模块","接收检索阶段送来的相关文档片段以及用户的原始问题。",[1127,1169,1170,1173,1174,1177],{},[1120,1171,1172],{},"指令引导生成","：该模块会遵循预设的 ",[1120,1175,1176],{},"Prompt"," 指令，将上下文与问题有效整合，并引导 LLM（如 DeepSeek）进行可控的、有理有据的文本生成。",[1179,1180,1181],"h3",{"id":1181},"技术演进",[1095,1183,1184,1185,1140],{},"RAG 的技术架构经历了从简单到复杂的演进，如图 1-2 大致可分为三个阶段 ",[1186,1187,1188],"sup",{},[1101,1189,1195],{"href":1190,"ariaDescribedBy":1191,"dataFootnoteRef":1193,"id":1194},"#user-content-fn-4",[1192],"footnote-label","","user-content-fnref-4","1",[1095,1197,1198],{},[1110,1199],{"alt":1200,"src":1201},"alt text","https:\u002F\u002Fpic1.zhimg.com\u002Fv2-734104a77788bc5993644c6feee3e5e0_r.jpg",[1203,1204,1205,1224],"table",{},[1206,1207,1208],"thead",{},[1209,1210,1211,1215,1218,1221],"tr",{},[1212,1213],"th",{"align":1214},"center",[1212,1216,1217],{"align":1214},"Naive RAG",[1212,1219,1220],{"align":1214},"Advanced RAG",[1212,1222,1223],{"align":1214},"模块化 RAG（Modular RAG）",[1225,1226,1227,1270,1290,1325],"tbody",{},[1209,1228,1229,1235,1254,1267],{},[1230,1231,1232],"td",{"align":1214},[1120,1233,1234],{},"流程",[1230,1236,1237,1240,1241,1245,1248,1240,1251],{"align":1214},[1120,1238,1239],{},"离线:"," ",[1242,1243,1244],"code",{},"索引",[1246,1247],"br",{},[1120,1249,1250],{},"在线:",[1242,1252,1253],{},"检索 → 生成",[1230,1255,1256,1240,1258,1260,1262,1240,1264],{"align":1214},[1120,1257,1239],{},[1242,1259,1244],{},[1246,1261],{},[1120,1263,1250],{},[1242,1265,1266],{},"...→ 检索前 → ... → 检索后 → ...",[1230,1268,1269],{"align":1214},"积木式可编排流程",[1209,1271,1272,1277,1280,1287],{},[1230,1273,1274],{"align":1214},[1120,1275,1276],{},"特点",[1230,1278,1279],{"align":1214},"基础线性流程",[1230,1281,1282,1283,1286],{"align":1214},"增加",[1120,1284,1285],{},"检索前后","的优化步骤",[1230,1288,1289],{"align":1214},"模块化、可组合、可动态调整",[1209,1291,1292,1297,1300,1310],{},[1230,1293,1294],{"align":1214},[1120,1295,1296],{},"主要技术",[1230,1298,1299],{"align":1214},"基础向量检索",[1230,1301,1302,1305,1307],{"align":1214},[1120,1303,1304],{},"查询重写",[1246,1306],{},[1120,1308,1309],{},"结果重排",[1230,1311,1312,1315,1317,1320,1322],{"align":1214},[1120,1313,1314],{},"动态路由",[1246,1316],{},[1120,1318,1319],{},"查询转换",[1246,1321],{},[1120,1323,1324],{},"多路融合",[1209,1326,1327,1332,1335,1338],{},[1230,1328,1329],{"align":1214},[1120,1330,1331],{},"局限性",[1230,1333,1334],{"align":1214},"效果不稳定，难以优化",[1230,1336,1337],{"align":1214},"流程相对固定，优化点有限",[1230,1339,1340],{"align":1214},"系统复杂性高",[1091,1342,1344],{"id":1343},"技术选型rag-与-微调","技术选型：RAG 与 微调",[1095,1346,1347,1348,1140],{},"技术选型时比较重要的考量是成本与效益的平衡，优先选择对模型改动最小、成本最低的方案，所以一般从",[1120,1349,1350],{},"提示词工程到检索增强生成再到微调",[1095,1352,1353],{},"其中提示工程只是优化提问方式，而 RAG 则通过引入外部知识库，填补了通用模型与专业领域之间的鸿沟。当目标是改变模型“如何做”（行为\u002F风格\u002F格式）而不是“知道什么”（知识）时，微调是最终且最合适的选择。例如，让模型学会严格遵循某种独特的输出格式、模仿特定人物的对话风格，或者将极其复杂的指令“蒸馏”进模型权重中。",[1095,1355,1356,1357,1360,1361,1364,1365,1368,1369,1372,1373,1376],{},"RAG 最主要的价值在于突破了模型预训练知识的限制，能",[1120,1358,1359],{},"补充专业领域的知识盲区","，能通过提供具体的参考材料，",[1120,1362,1363],{},"抑制模型的幻觉现象","。RAG 生成的内容在",[1120,1366,1367],{},"具体性","和",[1120,1370,1371],{},"多样性","上也显著优于纯 LLM。此外 RAG 具备",[1120,1374,1375],{},"可溯源性","，回答都能找到对应的原始文档出处，提高了生成内容在法律、医疗等严肃场景下的可信度。",[1095,1378,1379,1380,1383,1384,1387,1388,1391],{},"在知识更新方面，RAG 支持",[1120,1381,1382],{},"索引热拔插","，解决了 LLM 固有的",[1120,1385,1386],{},"知识时滞问题","（即模型不知道训练截止日期之后发生的事）。RAG 允许知识库独立于模型进行",[1120,1389,1390],{},"动态更新","——新政策或新数据一旦入库，立刻就能被检索到。",[1095,1393,1394,1395,1398,1399,1402],{},"从经济角度看，RAG 是一种高性价比的方案。首先，它",[1120,1396,1397],{},"避免了高频微调","带来的巨额算力成本；其次，由于有了外部知识的强力辅助，我们在处理特定领域问题时，往往可以使用",[1120,1400,1401],{},"参数量更小的基础模型","来达到类似的效果，从而直接降低了推理成本。减少了试图将海量知识强行“塞入”模型权重中所需的计算资源消耗。",[1095,1404,1405,1406,1409,1410,1413,1414,1417],{},"RAG 的架构具备极强的",[1120,1407,1408],{},"包容性","，支持",[1120,1411,1412],{},"多源集成","，PDF、Word 以及网页数据都能统一构建进知识库中。同时其",[1120,1415,1416],{},"模块化设计","实现了检索与生成的解耦，这意味着我们可以独立优化检索组件（比如更换更好的 Embedding 模型），而不会影响到生成组件的稳定性，便于系统的长期迭代。",[1095,1419,1420],{},"另外就是RAG方便处理合规相关的问题。",[1091,1422,1424],{"id":1423},"构建rag系统","构建RAG系统",[1095,1426,1427],{},"构建 RAG 系统通常涉及几个关键环节的选型。",[1095,1429,1430,1431,1434,1435,1438,1439,1442,1443,1446,1447,1450,1451,1454,1455,1450,1458,1461,1462,1438,1465,1468,1469,1140],{},"在",[1120,1432,1433],{},"开发模式","上可以利用 ",[1120,1436,1437],{},"LangChain"," 或 ",[1120,1440,1441],{},"LlamaIndex"," 等成熟框架快速集成，也可以自己造轮子，对系统流程有更精细的控制力。",[1120,1444,1445],{},"记忆载体","（向量数据库）方面，有 ",[1120,1448,1449],{},"Milvus","、",[1120,1452,1453],{},"Pinecone"," 等适合大规模数据的方案，也有 ",[1120,1456,1457],{},"FAISS",[1120,1459,1460],{},"Chroma"," 等轻量级或本地化的选择，根据具体业务规模灵活决定。后期为了量化效果，还可以引入 ",[1120,1463,1464],{},"RAGAS",[1120,1466,1467],{},"TruLens"," 等自动化",[1120,1470,1471],{},"评估工具",[1179,1473,1475],{"id":1474},"最小可行系统mvp","最小可行系统（MVP）",[1095,1477,1118,1478,1481,1482,1485],{},[1120,1479,1480],{},"数据准备与清洗","：这是系统的地基。我们需要将 PDF、Word 等多源异构数据标准化，并采用合理的",[1120,1483,1484],{},"分块策略","（如按语义段落切分而非固定字符数），避免信息在切割中支离破碎。",[1095,1487,1153,1488,1491,1492,1495,1496,1499],{},[1120,1489,1490],{},"索引构建","：将切分好的文本通过",[1120,1493,1494],{},"嵌入模型","转化为向量，并存入数据库。可以在此阶段关联",[1120,1497,1498],{},"元数据","（如来源、页码），这对后续的精确引用很有帮助。",[1095,1501,1502,1503,1506,1507,1510,1511,1514],{},"（3）",[1120,1504,1505],{},"检索策略优化","：不要依赖单一的向量搜索。可以采用",[1120,1508,1509],{},"混合检索","（向量+关键词）等方式来提升召回率，并引入",[1120,1512,1513],{},"重排序","模型对检索结果进行二次精选，确保 LLM 看到的都是精华。",[1095,1516,1517,1518,1521,1522,1525],{},"（4）",[1120,1519,1520],{},"生成与提示工程","：最后，设计一套清晰的 ",[1120,1523,1524],{},"Prompt 模板","，引导 LLM 基于检索到的上下文回答用户问题，并明确要求模型“不知道就说不知道”，防止幻觉。",[1179,1527,1528],{"id":1528},"进阶",[1095,1530,1531],{},"当基础的 RAG 系统搭建完成后，下一步的进阶之路便聚焦于如何评估、诊断并突破其固有的瓶颈。",[1095,1533,1118,1534],{},[1120,1535,1536],{},"评估维度与挑战",[1095,1538,1539],{},"业界通常会从几个维度对RAG系统进行量化评估：",[1124,1541,1542,1548],{},[1127,1543,1544,1547],{},[1120,1545,1546],{},"检索相关性","（找到的内容是否包含答案）",[1127,1549,1550,1553],{},[1120,1551,1552],{},"生成质量",[1124,1554,1555,1561],{},[1127,1556,1557,1560],{},[1120,1558,1559],{},"语义准确性","（回答的意思是否正确）",[1127,1562,1563,1566],{},[1120,1564,1565],{},"词汇匹配度","（专业术语是否使用得当）",[1095,1568,1569,1570,1573,1574,1577],{},"这些评估维度对应 RAG 当前面临的主要挑战。比如",[1120,1571,1572],{},"检索依赖性","问题——如果检索系统召回了错误信息，再强的 LLM 也会“一本正经地胡说八道”。此外，对于需要跨多个文档进行综合分析的",[1120,1575,1576],{},"多跳推理","问题，常见的 RAG 架构也普遍感到吃力。",[1095,1579,1153,1580],{},[1120,1581,1582],{},"优化方向与架构演进",[1095,1584,1585,1586,1589,1590,1593,1594,1597,1598,1601,1602,1605,1606,1609,1610,1613],{},"针对上述挑战，社区探索出了多种优化路径。在",[1120,1587,1588],{},"性能层面","，可以通过",[1120,1591,1592],{},"索引分层","（对高频数据启用缓存）和",[1120,1595,1596],{},"多模态扩展","（支持图像\u002F表格检索）来提升效率和能力边界。在",[1120,1599,1600],{},"架构层面","，简单的线性流程正在被更复杂的",[1120,1603,1604],{},"设计模式","所取代。如系统可以通过",[1120,1607,1608],{},"分支模式","并行处理多路检索，或通过",[1120,1611,1612],{},"循环模式","进行自我修正，更灵活的架构构建了更智能 RAG",[1091,1615,1617],{"id":1616},"rag-已死","RAG 已死？",[1095,1619,1620],{},"随着大模型上下文窗口（Context Window）动辄达到百万甚至千万级别，我们似乎可以直接将整本书、整个知识库喂给大模型，让它自己去阅读理解，何必再费劲地搞“ 检索-增强-生成 ”这套流程？",[1095,1622,1623],{},"这里需要厘清一个概念：",[1095,1625,1626],{},"上下文工程泛指所有在生成前对输入给大语言模型的上下文进行组织、优化和管理的技术。而 RAG 是一种动态、实时的信息获取机制，是上下文工程的一种高级实现方式。它的核心是检索这个动作，而不是增强这个结果。",[1095,1628,1629],{},"把长文本一股脑塞进上下文窗口一般面临着大海捞针的困境：",[1124,1631,1632,1635,1638],{},[1127,1633,1634],{},"精度问题：在数百万字的文本中，LLM的注意力是有限的，关键信息很容易被淹没在海量无关内容中，导致Lost in the Middle（中间淹没现象）。",[1127,1636,1637],{},"成本问题：处理超长上下文的计算成本和时间成本是巨大的。对于每次查询都重复处理整个知识库，无异于杀鸡用牛刀。",[1127,1639,1640],{},"动态性问题：如果知识库更新了，你需要重新将整个新知识库塞入上下文。这在实时应用，特别是许多企业级场景当中几乎不可行。",[1095,1642,1643,1644],{},"而 RAG 恰恰是解决上述问题的优雅方案，",[1120,1645,1646],{},"RAG 已死” 是典型的技术伪命题",[1091,1648,1650],{"id":1649},"未来趋势agentic-rag","未来趋势：Agentic RAG",[1095,1652,1653],{},"目前走在前沿的智能体 RAG（Agentic RAG）是对 RAG 进行了范式革命。在这个架构中，RAG 不再是整个系统的核心，而是被降级为一个可供调用的工具，主角变成了 Agent。",[1095,1655,1656],{},"当 AI Agent 接到一个复杂任务，比如「 分析并对比 A、B 两家公司最新财报中的AI战略 」，它会开始以下动作：",[1179,1658,1659],{"id":1659},"规划",[1095,1661,1662],{},"“我需要先找到A公司的财报，再找到B公司的财报。”",[1179,1664,1665],{"id":1665},"调用工具",[1095,1667,1668],{},"“调用 RAG 工具，在内部文档库中查询「 A公司最新财报 」。” 然后，“再次调用 RAG 工具，查询「 B公司最新财报 」。”",[1179,1670,1671],{"id":1671},"反思与整合",[1095,1673,1674],{},"AI Agent 会评估 RAG 返回的内容是否准确。如果信息不足，它甚至可能决定调用「 网页搜索工具 」去网上查找。最后，它将所有收集到的信息进行整合、对比，并生成最终的分析报告。",[1095,1676,1677],{},"在这个模式下，RAG和长上下文窗口的协作关系变得无比清晰：",[1179,1679,1681],{"id":1680},"rag负责输入","RAG负责输入",[1095,1683,1684],{},"作为最高效的信息获取工具，它将为 AI Agent 提供精准、可靠、可追溯的外部知识。",[1179,1686,1687],{"id":1687},"长上下文负责工作台",[1095,1689,1690],{},"广阔的上下文窗口成为了 AI Agent 进行多步推理、整合不同来源信息、维持对话记忆的工作内存。",[1095,1692,1693],{},"RAG 正在以更加成熟和强大的形态，深度融入未来的 AI 技术栈，接下来关于RAG的构建展开论述。",[1091,1695,1697],{"id":1696},"基于-langchain-框架的-rag-实现","基于 LangChain 框架的 RAG 实现",[1095,1699,1700],{},"四步构建最小可行系统分别是数据准备、索引构建、检索优化和生成集成提到四步构建最小可行系统分别是数据准备、索引构建、检索优化和生成集成。下面将围绕这四个方面来实现一个基于 LangChain 框架的 RAG 应用。",[1179,1702,1703],{"id":1703},"初始化设置",[1095,1705,1706],{},"首先进行基础配置，包括导入必要的库、加载环境变量以及下载嵌入模型。",[1708,1709,1714],"pre",{"className":1710,"code":1712,"language":1713,"meta":1193},[1711],"language-python","import os\n# os.environ['HF_ENDPOINT'] = 'https:\u002F\u002Fhf-mirror.com'\nfrom dotenv import load_dotenv\nfrom langchain_community.document_loaders import TextLoader\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\nfrom langchain_huggingface import HuggingFaceEmbeddings\nfrom langchain_core.vectorstores import InMemoryVectorStore\nfrom langchain_core.prompts import ChatPromptTemplate\nfrom langchain_deepseek import ChatOpenAI\n\n# 加载环境变量\nload_dotenv()\n","python",[1242,1715,1712],{"__ignoreMap":1193},[1179,1717,1718],{"id":1718},"数据准备",[1124,1720,1721,1737],{},[1127,1722,1723,1726,1727,1730,1731],{},[1120,1724,1725],{},"加载原始文档",": 先定义Markdown文件的路径，然后使用",[1242,1728,1729],{},"TextLoader","加载该文件作为知识源。\n",[1708,1732,1735],{"className":1733,"code":1734,"language":1713,"meta":1193},[1711],"markdown_path = \"..\u002F..\u002Fdata\u002FC1\u002Fmarkdown\u002Feasy-rl-chapter1.md\"\nloader = TextLoader(markdown_path)\ndocs = loader.load()\n",[1242,1736,1734],{"__ignoreMap":1193},[1127,1738,1739,1742,1743,1746,1747,1787],{},[1120,1740,1741],{},"文本分块 (Chunking)",": 为了便于后续的嵌入和检索，长文档被分割成较小的、可管理的文本块（chunks）。这里采用了递归字符分割策略，使用其默认参数进行分块。当不指定参数初始化 ",[1242,1744,1745],{},"RecursiveCharacterTextSplitter()"," 时，其默认行为旨在最大程度保留文本的语义结构：\n",[1124,1748,1749,1759,1769],{},[1127,1750,1751,1754,1755,1758],{},[1120,1752,1753],{},"默认分隔符与语义保留",": 按顺序尝试使用一系列预设的分隔符 ",[1242,1756,1757],{},"[\"\\n\\n\" (段落), \"\\n\" (行), \" \" (空格), \"\" (字符)]"," 来递归分割文本。这种策略的目的是尽可能保持段落、句子和单词的完整性，因为它们通常是语义上最相关的文本单元，直到文本块达到目标大小。",[1127,1760,1761,1764,1765,1768],{},[1120,1762,1763],{},"保留分隔符",": 默认情况下 (",[1242,1766,1767],{},"keep_separator=True",")，分隔符本身会被保留在分割后的文本块中。",[1127,1770,1771,1774,1775,1778,1779,1782,1783,1786],{},[1120,1772,1773],{},"默认块大小与重叠",": 使用其基类 ",[1242,1776,1777],{},"TextSplitter"," 中定义的默认参数 ",[1242,1780,1781],{},"chunk_size=4000","（块大小）和 ",[1242,1784,1785],{},"chunk_overlap=200","（块重叠）。这些参数确保文本块符合预定的大小限制，并通过重叠来减少上下文信息的丢失。",[1708,1788,1791],{"className":1789,"code":1790,"language":1713,"meta":1193},[1711],"text_splitter = RecursiveCharacterTextSplitter()\ntexts = text_splitter.split_documents(docs)\n",[1242,1792,1790],{"__ignoreMap":1193},[1179,1794,1490],{"id":1490},[1095,1796,1797],{},"数据准备完成后，接下来构建向量索引：",[1124,1799,1800,1820],{},[1127,1801,1802,1805,1806,1809,1810,1813,1814],{},[1120,1803,1804],{},"初始化中文嵌入模型",": 使用",[1242,1807,1808],{},"HuggingFaceEmbeddings","加载之前在初始化设置中下载的中文嵌入模型。配置模型在CPU上运行，并启用嵌入归一化 (",[1242,1811,1812],{},"normalize_embeddings: True",")。\n",[1708,1815,1818],{"className":1816,"code":1817,"language":1713,"meta":1193},[1711],"embeddings = HuggingFaceEmbeddings(\n    model_name=\"BAAI\u002Fbge-small-zh-v1.5\",\n    model_kwargs={'device': 'cpu'},\n    encode_kwargs={'normalize_embeddings': True}\n)\n",[1242,1819,1817],{"__ignoreMap":1193},[1127,1821,1822,1825,1826,1829,1830,1833,1834,1840],{},[1120,1823,1824],{},"构建向量存储",": 将分割后的文本块 (",[1242,1827,1828],{},"texts",") 通过初始化好的嵌入模型转换为向量表示，然后使用",[1242,1831,1832],{},"InMemoryVectorStore","将这些向量及其对应的原始文本内容添加进去，从而在内存中构建出一个向量索引。\n",[1708,1835,1838],{"className":1836,"code":1837,"language":1713,"meta":1193},[1711],"vectorstore = InMemoryVectorStore(embeddings)\nvectorstore.add_documents(texts)\n",[1242,1839,1837],{"__ignoreMap":1193},"\n这个过程完成后，便构建了一个可供查询的知识索引。",[1179,1842,1843],{"id":1843},"查询与检索",[1095,1845,1846],{},"索引构建完毕后，便可以针对用户问题进行查询与检索：",[1124,1848,1849,1861,1885],{},[1127,1850,1851,1854,1855],{},[1120,1852,1853],{},"定义用户查询",": 设置一个具体的用户问题字符串。\n",[1708,1856,1859],{"className":1857,"code":1858,"language":1713,"meta":1193},[1711],"question = \"文中举了哪些例子？\"\n",[1242,1860,1858],{"__ignoreMap":1193},[1127,1862,1863,1866,1867,1870,1871,1874,1875,1878,1879],{},[1120,1864,1865],{},"在向量存储中查询相关文档",": 使用向量存储的",[1242,1868,1869],{},"similarity_search","方法，根据用户问题在索引中查找最相关的 ",[1242,1872,1873],{},"k"," (此处示例中 ",[1242,1876,1877],{},"k=3",") 个文本块。\n",[1708,1880,1883],{"className":1881,"code":1882,"language":1713,"meta":1193},[1711],"retrieved_docs = vectorstore.similarity_search(question, k=3)\n",[1242,1884,1882],{"__ignoreMap":1193},[1127,1886,1887,1890,1891,1894,1895,1898,1899,1902,1903,1909],{},[1120,1888,1889],{},"准备上下文",": 将检索到的多个文本块的页面内容 (",[1242,1892,1893],{},"doc.page_content",") 合并成一个单一的字符串，并使用双换行符 (",[1242,1896,1897],{},"\"\\n\\n\"",") 分隔各个块，形成最终的上下文信息 (",[1242,1900,1901],{},"docs_content",") 供大语言模型参考。\n",[1708,1904,1907],{"className":1905,"code":1906,"language":1713,"meta":1193},[1711],"docs_content = \"\\n\\n\".join(doc.page_content for doc in retrieved_docs)\n",[1242,1908,1906],{"__ignoreMap":1193},[1910,1911,1912],"blockquote",{},[1095,1913,1914,1915,1917,1918,1921],{},"使用 ",[1242,1916,1897],{}," (双换行符) 而不是 ",[1242,1919,1920],{},"\"\\n\""," (单换行符) 来连接不同的检索文档块，主要是为了在传递给大型语言模型（LLM）时，能够更清晰地在语义上区分这些独立的文本片段。双换行符通常代表段落的结束和新段落的开始，这种格式有助于LLM将每个块视为一个独立的上下文来源，从而更好地理解和利用这些信息来生成回答。",[1179,1923,1924],{"id":1924},"生成集成",[1095,1926,1927],{},"最后一步是将检索到的上下文与用户问题结合，利用大语言模型（LLM）生成答案：",[1124,1929,1930,1953,1981],{},[1127,1931,1932,1805,1935,1938,1939,1942,1943,1946,1947],{},[1120,1933,1934],{},"构建提示词模板",[1242,1936,1937],{},"ChatPromptTemplate.from_template","创建一个结构化的提示模板。此模板指导LLM根据提供的上下文 (",[1242,1940,1941],{},"context",") 回答用户的问题 (",[1242,1944,1945],{},"question",")，并明确指出在信息不足时应如何回应。",[1708,1948,1951],{"className":1949,"code":1950,"language":1713,"meta":1193},[1711],"prompt = ChatPromptTemplate.from_template(\"\"\"请根据下面提供的上下文信息来回答问题。\n请确保你的回答完全基于这些上下文。\n如果上下文中没有足够的信息来回答问题，请直接告知：“抱歉，我无法根据提供的上下文找到相关信息来回答此问题。”\n\n上下文:\n{context}\n\n问题: {question}\n\n回答:\"\"\"\n                                          )\n",[1242,1952,1950],{"__ignoreMap":1193},[1127,1954,1955,1958,1959,1962,1963,1966,1967,1970,1971,1974,1975],{},[1120,1956,1957],{},"配置大语言模型",": 初始化 ",[1242,1960,1961],{},"ChatOpenAI"," 客户端，配置所用模型（",[1242,1964,1965],{},"glm-4.7-flash-free","）、生成答案的温度参数（",[1242,1968,1969],{},"temperature=0.7","）、最大Token数 (",[1242,1972,1973],{},"max_tokens=2048",") 以及API密钥（从环境变量加载）和 url。",[1708,1976,1979],{"className":1977,"code":1978,"language":1713,"meta":1193},[1711],"llm = ChatOpenAI(\n    model=\"glm-4.7-flash-free\",\n    temperature=0.7,\n    max_tokens=2048,\n    api_key=os.getenv(\"DEEPSEEK_API_KEY\")\n    base_url=\"https:\u002F\u002Faihubmix.com\u002Fv1\"\n)\n",[1242,1980,1978],{"__ignoreMap":1193},[1127,1982,1983,1986,1987,1989,1990,1992,1993,1996,1997],{},[1120,1984,1985],{},"调用LLM生成答案并输出",": 将用户问题 (",[1242,1988,1945],{},") 和先前准备好的上下文 (",[1242,1991,1901],{},") 格式化到提示模板中，然后调用ChatDeepSeek的",[1242,1994,1995],{},"invoke","方法获取生成的答案。",[1708,1998,2001],{"className":1999,"code":2000,"language":1713,"meta":1193},[1711],"answer = llm.invoke(prompt.format(question=question, context=docs_content))\nprint(answer)\n",[1242,2002,2000],{"__ignoreMap":1193},[1179,2004,2005],{"id":2005},"完整代码",[1708,2007,2012],{"className":2008,"code":2010,"language":2011,"meta":1193},[2009],"language-py","import os\n# hugging face镜像设置，如果国内环境无法使用启用该设置\n# os.environ['HF_ENDPOINT'] = 'https:\u002F\u002Fhf-mirror.com'\nfrom dotenv import load_dotenv\nfrom langchain_community.document_loaders import UnstructuredMarkdownLoader\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\nfrom langchain_huggingface import HuggingFaceEmbeddings\nfrom langchain_core.vectorstores import InMemoryVectorStore\nfrom langchain_core.prompts import ChatPromptTemplate\nfrom langchain_openai import ChatOpenAI\n\nload_dotenv()\n\nmarkdown_path = \"..\u002F..\u002Fdata\u002FC1\u002Fmarkdown\u002Feasy-rl-chapter1.md\"\n\n# 加载本地markdown文件\nloader = UnstructuredMarkdownLoader(markdown_path)\ndocs = loader.load()\n\n# 文本分块\ntext_splitter = RecursiveCharacterTextSplitter()\nchunks = text_splitter.split_documents(docs)\n\n# 中文嵌入模型\nembeddings = HuggingFaceEmbeddings(\n    model_name=\"BAAI\u002Fbge-small-zh-v1.5\",\n    model_kwargs={'device': 'cpu'},\n    encode_kwargs={'normalize_embeddings': True}\n)\n\n# 构建向量存储\nvectorstore = InMemoryVectorStore(embeddings)\nvectorstore.add_documents(chunks)\n\n# 提示词模板\nprompt = ChatPromptTemplate.from_template(\"\"\"请根据下面提供的上下文信息来回答问题。\n请确保你的回答完全基于这些上下文。\n如果上下文中没有足够的信息来回答问题，请直接告知：“抱歉，我无法根据提供的上下文找到相关信息来回答此问题。”\n\n上下文:\n{context}\n\n问题: {question}\n\n回答:\"\"\"\n                                          )\n\n# 配置大语言模型\n\n# 使用 AIHubmix\nllm = ChatOpenAI(\n    model=\"glm-4.7-flash-free\",\n    temperature=0.7,\n    max_tokens=4096,\n    api_key=os.getenv(\"DEEPSEEK_API_KEY\"),\n    base_url=\"https:\u002F\u002Faihubmix.com\u002Fv1\"\n)\n\n# llm = ChatOpenAI(\n#     model=\"deepseek-chat\",\n#     temperature=0.7,\n#     max_tokens=4096,\n#     api_key=os.getenv(\"DEEPSEEK_API_KEY\"),\n#     base_url=\"https:\u002F\u002Fapi.deepseek.com\"\n# )\n\n# 用户查询\nquestion = \"文中举了哪些例子？\"\n\n# 在向量存储中查询相关文档\nretrieved_docs = vectorstore.similarity_search(question, k=3)\ndocs_content = \"\\n\\n\".join(doc.page_content for doc in retrieved_docs)\n\nanswer = llm.invoke(prompt.format(question=question, context=docs_content))\nprint(answer)\n","py",[1242,2013,2010],{"__ignoreMap":1193},[1095,2015,2016],{},"当然这个距离上生产环境还有相当远的一段距离，OpenAI\u002FLangChain 是个好工具，但企业场景下要面对的是：",[1124,2018,2019,2022,2025,2028,2031,2034],{},[1127,2020,2021],{},"大规模文档的增量更新，不可能每次全量重建索引",[1127,2023,2024],{},"多租户隔离和权限控制，不同部门看到的知识库不一样",[1127,2026,2027],{},"高并发下的检索性能，模型调用的成本控制和容错",[1127,2029,2030],{},"请求风控，防止用户套取敏感信息或恶意攻击",[1127,2032,2033],{},"模型负载均衡，多供应商切换和降级策略",[1127,2035,2036],{},"可观测性，效果监控和用户反馈收集",[1095,2038,2039],{},"这些问题 LangChain 的 QuickStart 不会告诉你，但实际业务场景肯定要面对。",[1095,2041,2042],{},"所以具体的设计细节将在后面的博客展开。",[1091,2044,2045],{"id":2045},"参考文献",[2047,2048,2051,2056],"section",{"className":2049,"dataFootnotes":1193},[2050],"footnotes",[1091,2052,2055],{"className":2053,"id":1192},[2054],"sr-only","Footnotes",[2057,2058,2059],"ol",{},[1127,2060,2062,2071,2072],{"id":2061},"user-content-fn-4",[1101,2063,2066,2067],{"href":2064,"rel":2065},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2407.21059",[1105],"Gao et al. (2024). ",[2068,2069,2070],"em",{},"Modular RAG: Transforming RAG Systems into LEGO-like Reconfigurable Frameworks",". ",[1101,2073,2078],{"href":2074,"ariaLabel":2075,"className":2076,"dataFootnoteBackref":1193},"#user-content-fnref-4","Back to reference 1",[2077],"data-footnote-backref","↩",{"title":1193,"searchDepth":2080,"depth":2080,"links":2081},4,[2082,2087,2088,2092,2093,2100,2108,2109],{"id":1093,"depth":2083,"text":1093,"children":2084},2,[2085],{"id":1181,"depth":2086,"text":1181},3,{"id":1343,"depth":2083,"text":1344},{"id":1423,"depth":2083,"text":1424,"children":2089},[2090,2091],{"id":1474,"depth":2086,"text":1475},{"id":1528,"depth":2086,"text":1528},{"id":1616,"depth":2083,"text":1617},{"id":1649,"depth":2083,"text":1650,"children":2094},[2095,2096,2097,2098,2099],{"id":1659,"depth":2086,"text":1659},{"id":1665,"depth":2086,"text":1665},{"id":1671,"depth":2086,"text":1671},{"id":1680,"depth":2086,"text":1681},{"id":1687,"depth":2086,"text":1687},{"id":1696,"depth":2083,"text":1697,"children":2101},[2102,2103,2104,2105,2106,2107],{"id":1703,"depth":2086,"text":1703},{"id":1718,"depth":2086,"text":1718},{"id":1490,"depth":2086,"text":1490},{"id":1843,"depth":2086,"text":1843},{"id":1924,"depth":2086,"text":1924},{"id":2005,"depth":2086,"text":2005},{"id":2045,"depth":2083,"text":2045},{"id":1192,"depth":2083,"text":2055},"https:\u002F\u002Fpic1.zhimg.com\u002F80\u002Fv2-aad998e4635454432798201472ffd04f_720w.webp?source=d16d100b","RAG 综述","md",true,{"uuid":156,"slots":2115},{},15,{"title":1085,"description":2111},"posts\u002FRFC_Agentic_project\u002FRAG\u002F2026-08-12-Arkhiv_RAG-vol-1",[274],"8UVQZtHm2m1dMlMKamdW7-tREDZKINMV1fmTxyskabE",1790443282459]