1:"$Sreact.fragment" 2:I[56271,["2545","static/chunks/c16f53c3-391a1f5a73546b11.js","2619","static/chunks/2619-eccd988d1e161df3.js","3353","static/chunks/3353-35c19838f8cf7b3b.js","7177","static/chunks/app/layout-cb4429a7e3e88a9f.js"],"ThemeProviders"] 3:I[41402,["2545","static/chunks/c16f53c3-391a1f5a73546b11.js","2619","static/chunks/2619-eccd988d1e161df3.js","3353","static/chunks/3353-35c19838f8cf7b3b.js","7177","static/chunks/app/layout-cb4429a7e3e88a9f.js"],""] 4:I[91367,["2545","static/chunks/c16f53c3-391a1f5a73546b11.js","2619","static/chunks/2619-eccd988d1e161df3.js","3353","static/chunks/3353-35c19838f8cf7b3b.js","7177","static/chunks/app/layout-cb4429a7e3e88a9f.js"],"KBarSearchProvider"] 5:I[52619,["2619","static/chunks/2619-eccd988d1e161df3.js","1356","static/chunks/1356-354ecf51aaaf5203.js","6909","static/chunks/app/blog/%5B...slug%5D/page-d416e20a09ba8ecb.js"],""] 6:I[51350,["2545","static/chunks/c16f53c3-391a1f5a73546b11.js","2619","static/chunks/2619-eccd988d1e161df3.js","3353","static/chunks/3353-35c19838f8cf7b3b.js","7177","static/chunks/app/layout-cb4429a7e3e88a9f.js"],"KBarButton"] 11:I[57150,[],""] :HL["/_next/static/css/29ff447a95e95257.css","style"] :HL["/_next/static/css/77af622156c5e021.css","style"] 0:{"P":null,"b":"FUTryh0Sm2lrVLTvF5oMH","p":"","c":["","blog","page","4"],"i":false,"f":[[["",{"children":["blog",{"children":["page",{"children":[["page","4","d"],{"children":["__PAGE__",{}]}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/29ff447a95e95257.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/77af622156c5e021.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"zh-cn","className":"scroll-smooth","suppressHydrationWarning":true,"children":[["$","link",null,{"rel":"apple-touch-icon","sizes":"76x76","href":"/static/favicons/apple-touch-icon.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"32x32","href":"/static/favicons/favicon-32x32.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"16x16","href":"/static/favicons/favicon-16x16.png"}],["$","link",null,{"rel":"manifest","href":"/static/favicons/site.webmanifest"}],["$","link",null,{"rel":"mask-icon","href":"/static/favicons/safari-pinned-tab.svg","color":"#5bbad5"}],["$","meta",null,{"name":"msapplication-TileColor","content":"#4f46e5"}],["$","meta",null,{"name":"theme-color","media":"(prefers-color-scheme: light)","content":"#ffffff"}],["$","meta",null,{"name":"theme-color","media":"(prefers-color-scheme: dark)","content":"#0f172a"}],["$","link",null,{"rel":"alternate","type":"application/rss+xml","href":"/feed.xml"}],["$","body",null,{"className":"bg-white pl-[calc(100vw-100%)] text-black antialiased dark:bg-gray-950 dark:text-white","children":["$","$L2",null,{"children":[["$undefined","$undefined","$undefined",["$","$L3",null,{"async":true,"defer":true,"src":"https://analytics.umami.is/script.js"}],"$undefined","$undefined"],["$","section",null,{"className":"mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0","children":[["$","$L4",null,{"kbarConfig":{"searchDocumentsPath":"/search.json"},"children":[["$","header",null,{"className":"flex items-center w-full bg-white dark:bg-gray-950 justify-between py-10","children":[["$","$L5",null,{"className":"break-words","href":"/","aria-label":"TechLog","children":["$","div",null,{"className":"flex items-center justify-between","children":[["$","div",null,{"className":"mr-3","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","xmlnsXlink":"http://www.w3.org/1999/xlink","width":53.87,"height":43.61,"viewBox":"344.564 330.278 111.737 91.218","children":[["$","defs",null,{"children":[["$","linearGradient",null,{"id":"logo_svg__b","x1":420.97,"x2":420.97,"y1":331.28,"y2":418.5,"gradientUnits":"userSpaceOnUse","children":[["$","stop",null,{"offset":"0%","style":{"stopColor":"#06b6d4","stopOpacity":1}}],["$","stop",null,{"offset":"100%","style":{"stopColor":"#67e8f9","stopOpacity":1}}]]}],["$","linearGradient",null,{"id":"logo_svg__d","x1":377.89,"x2":377.89,"y1":331.28,"y2":418.5,"gradientUnits":"userSpaceOnUse","children":[["$","stop",null,{"offset":"0%","style":{"stopColor":"#06b6d4","stopOpacity":1}}],["$","stop",null,{"offset":"100%","style":{"stopColor":"#67e8f9","stopOpacity":1}}]]}],["$","path",null,{"id":"logo_svg__a","d":"M453.3 331.28v28.57l-64.66 58.65v-30.08z"}],["$","path",null,{"id":"logo_svg__c","d":"M410.23 331.28v28.57l-64.67 58.65v-30.08z"}]]}],["$","use",null,{"xlinkHref":"#logo_svg__a","fill":"url(#logo_svg__b)"}],["$","use",null,{"xlinkHref":"#logo_svg__c","fill":"url(#logo_svg__d)"}]]}]}],["$","div",null,{"className":"hidden h-6 text-2xl font-semibold sm:block","children":"TechLog"}]]}]}],["$","div",null,{"className":"flex items-center space-x-4 leading-5 sm:-mr-6 sm:space-x-6","children":[["$","div",null,{"className":"no-scrollbar hidden max-w-40 items-center gap-x-4 overflow-x-auto sm:flex md:max-w-72 lg:max-w-96","children":[["$","$L5","博客",{"className":"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100","href":"/blog.html","children":"博客"}],["$","$L5","标签",{"className":"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100","href":"/tags.html","children":"标签"}],["$","$L5","项目",{"className":"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100","href":"/projects.html","children":"项目"}],["$","$L5","关于",{"className":"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100","href":"/about.html","children":"关于"}]]}],["$","$L6",null,{"aria-label":"Search","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","fill":"none","viewBox":"0 0 24 24","strokeWidth":1.5,"stroke":"currentColor","className":"hover:text-primary-500 dark:hover:text-primary-400 h-6 w-6 text-gray-900 dark:text-gray-100","children":"$L7"}]}],"$L8","$L9"]}]]}],"$La"]}],"$Lb"]}]]}]}]]}]]}],{"children":["blog","$Lc",{"children":["page","$Ld",{"children":[["page","4","d"],"$Le",{"children":["__PAGE__","$Lf",{},null,false]},null,false]},null,false]},null,false]},null,false],"$L10",false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true} 12:I[49217,["2545","static/chunks/c16f53c3-391a1f5a73546b11.js","2619","static/chunks/2619-eccd988d1e161df3.js","3353","static/chunks/3353-35c19838f8cf7b3b.js","7177","static/chunks/app/layout-cb4429a7e3e88a9f.js"],"default"] 13:I[394,["2545","static/chunks/c16f53c3-391a1f5a73546b11.js","2619","static/chunks/2619-eccd988d1e161df3.js","3353","static/chunks/3353-35c19838f8cf7b3b.js","7177","static/chunks/app/layout-cb4429a7e3e88a9f.js"],"default"] 14:I[9766,[],""] 15:I[98924,[],""] 17:I[24431,[],"OutletBoundary"] 19:I[15278,[],"AsyncMetadataOutlet"] 1b:I[24431,[],"ViewportBoundary"] 1d:I[24431,[],"MetadataBoundary"] 1e:"$Sreact.suspense" 7:["$","path",null,{"strokeLinecap":"round","strokeLinejoin":"round","d":"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"}] 8:["$","$L12",null,{}] 9:["$","$L13",null,{}] a:["$","main",null,{"className":"mb-auto","children":["$","$L14",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L15",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","div",null,{"className":"flex flex-col items-start justify-start md:mt-24 md:flex-row md:items-center md:justify-center md:space-x-6","children":[["$","div",null,{"className":"space-x-2 pt-6 pb-8 md:space-y-5","children":["$","h1",null,{"className":"text-6xl leading-9 font-extrabold tracking-tight text-gray-900 md:border-r-2 md:px-6 md:text-8xl md:leading-14 dark:text-gray-100","children":"404"}]}],["$","div",null,{"className":"max-w-md","children":[["$","p",null,{"className":"mb-4 text-xl leading-normal font-bold md:text-2xl","children":"Sorry we couldn't find this page."}],["$","p",null,{"className":"mb-8","children":"But dont worry, you can find plenty of other things on our homepage."}],["$","$L5",null,{"className":"focus:shadow-outline-blue inline rounded-lg border border-transparent bg-blue-600 px-4 py-2 text-sm leading-5 font-medium text-white shadow-xs transition-colors duration-150 hover:bg-blue-700 focus:outline-hidden dark:hover:bg-blue-500","href":"/","children":"Back to homepage"}]]}]]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}] b:["$","footer",null,{"children":["$","div",null,{"className":"mt-16 flex flex-col items-center","children":[["$","div",null,{"className":"mb-3 flex space-x-4","children":[["$","a",null,{"className":"text-sm text-gray-500 transition hover:text-gray-600","target":"_blank","rel":"noopener noreferrer","href":"mailto:birenwenmou@qq.com","children":[["$","span",null,{"className":"sr-only","children":"mail"}],["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 20 20","className":"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6","children":[["$","title",null,{"children":"Mail"}],["$","path",null,{"d":"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z"}],["$","path",null,{"d":"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z"}]]}]]}],["$","a",null,{"className":"text-sm text-gray-500 transition hover:text-gray-600","target":"_blank","rel":"noopener noreferrer","href":"https://github.com/joker1point","children":[["$","span",null,{"className":"sr-only","children":"github"}],["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","className":"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6","children":[["$","title",null,{"children":"GitHub"}],["$","path",null,{"d":"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"}]]}]]}],null,null,null,null,null,null,null,null,null]}],["$","div",null,{"className":"mb-2 flex space-x-2 text-sm text-gray-500 dark:text-gray-400","children":[["$","div",null,{"children":"眠月"}],["$","div",null,{"children":" • "}],["$","div",null,{"children":"© 2026"}],["$","div",null,{"children":" • "}],["$","$L5",null,{"className":"break-words","href":"/","children":"TechLog"}]]}],["$","div",null,{"className":"mb-8 text-sm text-gray-500 dark:text-gray-400","children":["$","a",null,{"className":"break-words","target":"_blank","rel":"noopener noreferrer","href":"https://github.com/joker1point","children":"GitHub"}]}]]}]}] c:["$","$1","c",{"children":[null,["$","$L14",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L15",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] d:["$","$1","c",{"children":[null,["$","$L14",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L15",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] e:["$","$1","c",{"children":[null,["$","$L14",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L15",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] f:["$","$1","c",{"children":["$L16",null,["$","$L17",null,{"children":["$L18",["$","$L19",null,{"promise":"$@1a"}]]}]]}] 10:["$","$1","h",{"children":[null,[["$","$L1b",null,{"children":"$L1c"}],null],["$","$L1d",null,{"children":["$","div",null,{"hidden":true,"children":["$","$1e",null,{"fallback":null,"children":"$L1f"}]}]}]]}] 20:I[97979,["2619","static/chunks/2619-eccd988d1e161df3.js","6775","static/chunks/6775-3fc538fd0daf2399.js","4109","static/chunks/app/blog/page/%5Bpage%5D/page-7169e025ac90e48f.js"],"default"] 16:["$","$L20",null,{"posts":[{"title":"在 AI 时代,聚焦一线从业","date":"2026-06-05T00:00:00.000Z","tags":["ai","opinion","engineering","mindset"],"draft":false,"featured":true,"summary":"在 AI 时代,信息数量的增量远大于信息质量的增量。永远聚焦一线从业,坚持实操上手,最小 MVP,避免无效输入。","type":"Blog","readingTime":{"text":"1 min read","minutes":0.22,"time":13200,"words":44},"wordCount":44,"slug":"focus-on-firstline-practice","path":"blog/focus-on-firstline-practice","filePath":"blog/focus-on-firstline-practice.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"在 AI 时代,聚焦一线从业","datePublished":"2026-06-05T00:00:00.000Z","dateModified":"2026-06-05T00:00:00.000Z","description":"在 AI 时代,信息数量的增量远大于信息质量的增量。永远聚焦一线从业,坚持实操上手,最小 MVP,避免无效输入。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/focus-on-firstline-practice"}},{"title":"2026 年 9 月 GitHub 热门项目分析:追踪大模型应用领域技术动态","date":"2026-09-17T00:00:00.000Z","tags":["github","open-source","ai","agent","trending"],"draft":false,"summary":"2026 年 9 月 GitHub 月榜 Top 10 逐项拆解——从 archify(把 AI 生成的架构图变成可验证制品)到 OpenViking(Agent 上下文数据库),并归纳出 Agent 输出制品化、上下文工程、Rust 工具化、AI 与教育/桌面交叉四条趋势。","type":"Blog","readingTime":{"text":"26 min read","minutes":25.54,"time":1532400,"words":5108},"wordCount":5108,"slug":"github-trending-2026-09","path":"blog/github-trending-2026-09","filePath":"blog/github-trending-2026-09.mdx","toc":[{"value":"🔥 GitHub 热门项目分析报告","url":"#-github-热门项目分析报告","depth":1},{"value":"一、本期热门项目总览","url":"#一本期热门项目总览","depth":2},{"value":"二、项目详细分析","url":"#二项目详细分析","depth":2},{"value":"📦 项目 1:tt-a1i/archify","url":"#-项目-1tt-a1iarchify","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因","depth":4},{"value":"📦 项目 2:public-apis/public-apis","url":"#-项目-2public-apispublic-apis","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-1","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-1","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-1","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-1","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-1","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-1","depth":4},{"value":"📦 项目 3:ayghri/i-have-adhd","url":"#-项目-3ayghrii-have-adhd","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-2","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-2","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-2","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-2","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-2","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-2","depth":4},{"value":"📦 项目 4:omarchy/omarchy","url":"#-项目-4omarchyomarchy","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-3","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-3","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-3","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-3","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-3","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-3","depth":4},{"value":"📦 项目 5:OpenMAIC/OpenMAIC","url":"#-项目-5openmaicopenmaic","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-4","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-4","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-4","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-4","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-4","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-4","depth":4},{"value":"📦 项目 6:volcengine/OpenViking","url":"#-项目-6volcengineopenviking","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-5","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-5","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-5","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-5","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-5","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-5","depth":4},{"value":"📦 项目 7:jingyaogong/minimind","url":"#-项目-7jingyaogongminimind","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-6","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-6","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-6","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-6","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-6","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-6","depth":4},{"value":"📦 项目 8:cathrynlavery/diagram-design","url":"#-项目-8cathrynlaverydiagram-design","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-7","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-7","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-7","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-7","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-7","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-7","depth":4},{"value":"📦 项目 9:AprilNEA/OpenLogi","url":"#-项目-9aprilneaopenlogi","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-8","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-8","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-8","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-8","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-8","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-8","depth":4},{"value":"📦 项目 10:vorssaintapp/vorssaint-utils","url":"#-项目-10vorssaintappvorssaint-utils","depth":3},{"value":"🔍 A. 项目背景","url":"#-a-项目背景-9","depth":4},{"value":"🎯 B. 项目目的","url":"#-b-项目目的-9","depth":4},{"value":"⚙️ C. 主要作用","url":"#️-c-主要作用-9","depth":4},{"value":"🛠️ D. 使用技术","url":"#️-d-使用技术-9","depth":4},{"value":"📍 E. 适用场景","url":"#-e-适用场景-9","depth":4},{"value":"💡 F. 热门原因","url":"#-f-热门原因-9","depth":4},{"value":"三、趋势总结","url":"#三趋势总结","depth":2},{"value":"🌐 本期技术趋势","url":"#-本期技术趋势","depth":3},{"value":"⭐ 编辑精选推荐","url":"#-编辑精选推荐","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"2026 年 9 月 GitHub 热门项目分析:追踪大模型应用领域技术动态","datePublished":"2026-09-17T00:00:00.000Z","dateModified":"2026-09-17T00:00:00.000Z","description":"2026 年 9 月 GitHub 月榜 Top 10 逐项拆解——从 archify(把 AI 生成的架构图变成可验证制品)到 OpenViking(Agent 上下文数据库),并归纳出 Agent 输出制品化、上下文工程、Rust 工具化、AI 与教育/桌面交叉四条趋势。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/github-trending-2026-09"}},{"title":"我的 Agent 架构演进:Skill 压平 Sub Agent,Restatement 又把它拉了回来","date":"2026-09-15T00:00:00.000Z","tags":["agent","ai","architecture","context-engineering"],"draft":false,"summary":"从初代「主 Agent 编排 + 子 Agent 分工」三层架构,到用 Skill 替代冗余 Sub Agent 压平架构降低 Token,再到长任务中撞上步骤合并跳过、规则失效、输出同质化,最终靠 Restatement 机制与 Sub Agent 回归分头解决——一条完整的踩坑迭代链。","type":"Blog","readingTime":{"text":"4 min read","minutes":3.825,"time":229500,"words":765},"wordCount":765,"slug":"agent-architecture-evolution-skill-restatement","path":"blog/agent-architecture-evolution-skill-restatement","filePath":"blog/agent-architecture-evolution-skill-restatement.mdx","toc":[{"value":"一、AI 开发核心认知框架","url":"#一ai-开发核心认知框架","depth":2},{"value":"二、各框架/阶段对应问题及解决方案","url":"#二各框架阶段对应问题及解决方案","depth":2},{"value":"(一)整体开发现状及核心痛点","url":"#一整体开发现状及核心痛点","depth":3},{"value":"(二)初代 Plan and Execute 三层架构(主Agent编排+子Agent分工)","url":"#二初代-plan-and-execute-三层架构主agent编排子agent分工","depth":3},{"value":"(三)架构压平后(Skill替代Sub Agent)","url":"#三架构压平后skill替代sub-agent","depth":3},{"value":"三、总结","url":"#三总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"我的 Agent 架构演进:Skill 压平 Sub Agent,Restatement 又把它拉了回来","datePublished":"2026-09-15T00:00:00.000Z","dateModified":"2026-09-15T00:00:00.000Z","description":"从初代「主 Agent 编排 + 子 Agent 分工」三层架构,到用 Skill 替代冗余 Sub Agent 压平架构降低 Token,再到长任务中撞上步骤合并跳过、规则失效、输出同质化,最终靠 Restatement 机制与 Sub Agent 回归分头解决——一条完整的踩坑迭代链。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/agent-architecture-evolution-skill-restatement"}},{"title":"Agent 健壮性设计:工具调用与模型调用失败的容错与兜底","date":"2026-09-15T00:00:00.000Z","tags":["agent","ai","reliability","system-design"],"draft":false,"summary":"错误分类(确定性 vs 瞬时)→ 确定性错误回传模型自我修复、瞬时错误指数退避+随机抖动重试 → 多次失败熔断 → 按能力等级优雅降级(备用工具 / 业务降级 / 转人工)。模型侧另需识别「API 返回成功但业务结果错误」的潜在失败,并在切换备用模型后持续评估。","type":"Blog","readingTime":{"text":"9 min read","minutes":8.33,"time":499800,"words":1666},"wordCount":1666,"slug":"agent-fault-tolerance-design","path":"blog/agent-fault-tolerance-design","filePath":"blog/agent-fault-tolerance-design.mdx","toc":[{"value":"一、核心目标(要做什么)","url":"#一核心目标要做什么","depth":2},{"value":"二、工具调用失败:四步处理法(怎么做)","url":"#二工具调用失败四步处理法怎么做","depth":2},{"value":"Step 1:先对错误分类(答题第一句话说这个)","url":"#step-1先对错误分类答题第一句话说这个","depth":3},{"value":"Step 2:确定性错误 → 错误信息回传,让模型自我修复","url":"#step-2确定性错误--错误信息回传让模型自我修复","depth":3},{"value":"Step 3:瞬时错误 → 重试(指数退避 + 随机抖动)","url":"#step-3瞬时错误--重试指数退避--随机抖动","depth":3},{"value":"Step 4:多次重试仍失败 → 熔断","url":"#step-4多次重试仍失败--熔断","depth":3},{"value":"Step 5:优雅回退——按能力等级逐级降级(结合业务场景答)","url":"#step-5优雅回退按能力等级逐级降级结合业务场景答","depth":3},{"value":"三、模型调用失败:四步处理法(怎么做)","url":"#三模型调用失败四步处理法怎么做","depth":2},{"value":"Step 1:瞬时抖动 → 重试,但严格控制成本","url":"#step-1瞬时抖动--重试但严格控制成本","depth":3},{"value":"Step 2:识别\"潜在失败\"——监控业务指标(加分点)","url":"#step-2识别潜在失败监控业务指标加分点","depth":3},{"value":"Step 3:持续不可用 → 切换备用方案","url":"#step-3持续不可用--切换备用方案","depth":3},{"value":"Step 4:切换备用模型后持续评估(加分点)","url":"#step-4切换备用模型后持续评估加分点","depth":3},{"value":"四、完整处理流程图","url":"#四完整处理流程图","depth":2},{"value":"五、重点结论(面试直接背)","url":"#五重点结论面试直接背","depth":2},{"value":"六、为什么这样设计(动机)","url":"#六为什么这样设计动机","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Agent 健壮性设计:工具调用与模型调用失败的容错与兜底","datePublished":"2026-09-15T00:00:00.000Z","dateModified":"2026-09-15T00:00:00.000Z","description":"错误分类(确定性 vs 瞬时)→ 确定性错误回传模型自我修复、瞬时错误指数退避+随机抖动重试 → 多次失败熔断 → 按能力等级优雅降级(备用工具 / 业务降级 / 转人工)。模型侧另需识别「API 返回成功但业务结果错误」的潜在失败,并在切换备用模型后持续评估。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/agent-fault-tolerance-design"}},{"title":"Agent Washing:为什么大批企业升级 Agent 不会产生增值","date":"2026-09-15T00:00:00.000Z","tags":["agent","ai","product","industry"],"draft":false,"summary":"Agent 有明确适用边界——擅长非结构化输入、路径不固定、需动态推理的任务。把确定流程强行套上自主智能是技术错配;中小企业缺数据/SOP/权限/复合人才配套地基;管理层\"替换人\"的预期错位(实际只能替换重复与信息整理类子集工作)。","type":"Blog","readingTime":{"text":"7 min read","minutes":6.495,"time":389700,"words":1299},"wordCount":1299,"slug":"agent-washing-why-no-value","path":"blog/agent-washing-why-no-value","filePath":"blog/agent-washing-why-no-value.mdx","toc":[{"value":"一、为什么大批企业升级Agent不会产生增值","url":"#一为什么大批企业升级agent不会产生增值","depth":2},{"value":"二、岗位分化:不是全部Agent岗位消失,而是两极分化","url":"#二岗位分化不是全部agent岗位消失而是两极分化","depth":2},{"value":"✅能够保留Agent岗位的:中大型企业","url":"#能够保留agent岗位的中大型企业","depth":3},{"value":"❌中小企业大量伪Agent岗位会消亡","url":"#中小企业大量伪agent岗位会消亡","depth":3},{"value":"三、会出现的现实连锁现象","url":"#三会出现的现实连锁现象","depth":2},{"value":"四、延伸的启发(对应技术从业者视角)","url":"#四延伸的启发对应技术从业者视角","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Agent Washing:为什么大批企业升级 Agent 不会产生增值","datePublished":"2026-09-15T00:00:00.000Z","dateModified":"2026-09-15T00:00:00.000Z","description":"Agent 有明确适用边界——擅长非结构化输入、路径不固定、需动态推理的任务。把确定流程强行套上自主智能是技术错配;中小企业缺数据/SOP/权限/复合人才配套地基;管理层\"替换人\"的预期错位(实际只能替换重复与信息整理类子集工作)。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/agent-washing-why-no-value"}},{"title":"把 22 篇项目文档蒸馏成一个可进化的全局技能","date":"2026-09-15T00:00:00.000Z","tags":["agent","skill","engineering","knowledge-management"],"draft":false,"summary":"将 22 篇原始复盘文档蒸馏为全局技能 dev-lessons:按领域分文件(LLM 应用、前后端异步、数据库迁移、上游复用、部署环境、协作测试),每条经验附场景标签与溯源字段,并内置进化协议(同问题复现三次升级为元原则、元原则超 15 条强制合并)。","type":"Blog","readingTime":{"text":"3 min read","minutes":2.165,"time":129900,"words":433},"wordCount":433,"slug":"dev-lessons-skill-distillation","path":"blog/dev-lessons-skill-distillation","filePath":"blog/dev-lessons-skill-distillation.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"把 22 篇项目文档蒸馏成一个可进化的全局技能","datePublished":"2026-09-15T00:00:00.000Z","dateModified":"2026-09-15T00:00:00.000Z","description":"将 22 篇原始复盘文档蒸馏为全局技能 dev-lessons:按领域分文件(LLM 应用、前后端异步、数据库迁移、上游复用、部署环境、协作测试),每条经验附场景标签与溯源字段,并内置进化协议(同问题复现三次升级为元原则、元原则超 15 条强制合并)。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/dev-lessons-skill-distillation"}},{"title":"如何给一个陌生开源项目做架构分析,并找到能合进去的贡献点","date":"2026-09-15T00:00:00.000Z","tags":["open-source","agent","architecture","python"],"draft":false,"summary":"以 MoneyPrinterTurbo 为例,按 7 个维度(任务规划、多 Agent 协作、上下文管理、Human-in-the-loop、评估框架、工具路由、Streaming)系统拆解一个陌生项目的架构缺陷,从中筛出 Top 3 贡献方向,并给出方案骨架与给维护者的英文沟通草稿。","type":"Blog","readingTime":{"text":"21 min read","minutes":20.17,"time":1210200,"words":4034},"wordCount":4034,"slug":"mpt-open-source-contribution-analysis","path":"blog/mpt-open-source-contribution-analysis","filePath":"blog/mpt-open-source-contribution-analysis.mdx","toc":[{"value":"Top 3 贡献方向:① 任务断点续跑(Checkpoint/Resume)② 官方 MCP Server ③ Issue #1157 批量脚本去重;前两者来自架构分析,第三个是 2~3 天可合入的信任建立型 PR","url":"#top-3-贡献方向-任务断点续跑checkpointresume-官方-mcp-server--issue-1157-批量脚本去重前两者来自架构分析第三个是-23-天可合入的信任建立型-pr","depth":3},{"value":"准备工作:项目理解","url":"#准备工作项目理解","depth":2},{"value":"目录结构(depth=3,★ 为核心模块)","url":"#目录结构depth3-为核心模块","depth":3},{"value":"核心循环与规划范式","url":"#核心循环与规划范式","depth":3},{"value":"分析维度一:Issue 列表筛选","url":"#分析维度一issue-列表筛选","depth":2},{"value":"分析维度二:架构层缺陷分析","url":"#分析维度二架构层缺陷分析","depth":2},{"value":"1. 任务规划","url":"#1-任务规划","depth":3},{"value":"2. 多 Agent 协作","url":"#2-多-agent-协作","depth":3},{"value":"3. 上下文管理策略","url":"#3-上下文管理策略","depth":3},{"value":"4. Human-in-the-loop 机制","url":"#4-human-in-the-loop-机制","depth":3},{"value":"5. Agent 评估框架","url":"#5-agent-评估框架","depth":3},{"value":"6. Tool 检索与路由","url":"#6-tool-检索与路由","depth":3},{"value":"7. Streaming 与中间状态可见性","url":"#7-streaming-与中间状态可见性","depth":3},{"value":"最终输出:Top 3 贡献建议","url":"#最终输出top-3-贡献建议","depth":2},{"value":"第 1 名:任务 Checkpoint 与断点续跑机制","url":"#第-1-名任务-checkpoint-与断点续跑机制","depth":3},{"value":"第 2 名:官方 MCP Server 集成","url":"#第-2-名官方-mcp-server-集成","depth":3},{"value":"第 3 名:Issue #1157 批量多视频脚本去重","url":"#第-3-名issue-1157-批量多视频脚本去重","depth":3},{"value":"附:Top 1 方向的技术方案骨架(供你启动第二阶段)","url":"#附top-1-方向的技术方案骨架供你启动第二阶段","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"如何给一个陌生开源项目做架构分析,并找到能合进去的贡献点","datePublished":"2026-09-15T00:00:00.000Z","dateModified":"2026-09-15T00:00:00.000Z","description":"以 MoneyPrinterTurbo 为例,按 7 个维度(任务规划、多 Agent 协作、上下文管理、Human-in-the-loop、评估框架、工具路由、Streaming)系统拆解一个陌生项目的架构缺陷,从中筛出 Top 3 贡献方向,并给出方案骨架与给维护者的英文沟通草稿。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/mpt-open-source-contribution-analysis"}},{"title":"给 119k star 项目提 PR:8 小时从评论到合并的完整复盘","date":"2026-09-15T00:00:00.000Z","tags":["open-source","agent","python","engineering","pr"],"draft":false,"summary":"一次向 MoneyPrinterTurbo(119k+ star)提交 OpenAI 兼容文生图素材源并被合并的完整复盘:占坑式沟通拿到约束、用数据回应\"改动过大\"的顾虑、测试证据链决定合并速度,以及维护者在后续 PR 中指出的付费 API 容错设计缺陷。","type":"Blog","readingTime":{"text":"14 min read","minutes":13.555,"time":813300,"words":2711},"wordCount":2711,"slug":"mpt-pr-1291-contribution-review","path":"blog/mpt-pr-1291-contribution-review","filePath":"blog/mpt-pr-1291-contribution-review.mdx","toc":[{"value":"一、项目概述","url":"#一项目概述","depth":2},{"value":"二、成功经验","url":"#二成功经验","depth":2},{"value":"1. 占坑式沟通——先对齐再动手","url":"#1-占坑式沟通先对齐再动手","depth":3},{"value":"2. 用数据回应\"改动过大\"顾虑","url":"#2-用数据回应改动过大顾虑","depth":3},{"value":"3. 测试证据链决定合并速度","url":"#3-测试证据链决定合并速度","depth":3},{"value":"4. Review 响应:逐条修复 + 一次到位","url":"#4-review-响应逐条修复--一次到位","depth":3},{"value":"5. 技术设计上的克制","url":"#5-技术设计上的克制","depth":3},{"value":"6. 后续 PR #1296:遗留边界闭环(200 伪装内容)","url":"#6-后续-pr-1296遗留边界闭环200-伪装内容","depth":3},{"value":"7. 最有价值的一课:维护者在 #1296 上的深化(commit 428dd4e)","url":"#7-最有价值的一课维护者在-1296-上的深化commit-428dd4e","depth":3},{"value":"8. 事实修正:计费安全先例的归属(防止面试翻车)","url":"#8-事实修正计费安全先例的归属防止面试翻车","depth":3},{"value":"三、踩坑记录与解决方案","url":"#三踩坑记录与解决方案","depth":2},{"value":"1. Streamlit text_area 必须 Ctrl+Enter 提交","url":"#1-streamlit-text_area-必须-ctrlenter-提交","depth":3},{"value":"2. GITHUB_TOKEN 环境变量劫持 gh 认证","url":"#2-github_token-环境变量劫持-gh-认证","depth":3},{"value":"3. Agnes 文生图端点间歇性 503(队列满)","url":"#3-agnes-文生图端点间歇性-503队列满","depth":3},{"value":"4. 千问兼容端点免费额度耗尽","url":"#4-千问兼容端点免费额度耗尽","depth":3},{"value":"5. Windows 下 Python 嵌套引号命令","url":"#5-windows-下-python-嵌套引号命令","depth":3},{"value":"6. Edit 工具字符串匹配失败(行尾空白)","url":"#6-edit-工具字符串匹配失败行尾空白","depth":3},{"value":"7. 测试用 TemporaryDirectory 的作用域陷阱","url":"#7-测试用-temporarydirectory-的作用域陷阱","depth":3},{"value":"8. 测试隔离:本地 config.toml 泄漏进单测","url":"#8-测试隔离本地-configtoml-泄漏进单测","depth":3},{"value":"9. 首次贡献者 fork PR 的 CI 不自动跑","url":"#9-首次贡献者-fork-pr-的-ci-不自动跑","depth":3},{"value":"四、可复用流程资产","url":"#四可复用流程资产","depth":2},{"value":"五、面试叙事素材","url":"#五面试叙事素材","depth":2},{"value":"六、遗留事项","url":"#六遗留事项","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"给 119k star 项目提 PR:8 小时从评论到合并的完整复盘","datePublished":"2026-09-15T00:00:00.000Z","dateModified":"2026-09-15T00:00:00.000Z","description":"一次向 MoneyPrinterTurbo(119k+ star)提交 OpenAI 兼容文生图素材源并被合并的完整复盘:占坑式沟通拿到约束、用数据回应\"改动过大\"的顾虑、测试证据链决定合并速度,以及维护者在后续 PR 中指出的付费 API 容错设计缺陷。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/mpt-pr-1291-contribution-review"}},{"title":"RAG 还必要吗:从 130 条技术评论里提炼出的选型决策框架","date":"2026-09-15T00:00:00.000Z","tags":["rag","agent","ai","research"],"draft":false,"summary":"围绕「向量 RAG vs LLM Wiki + grep / Agent 自主检索」的四派立场梳理(谨慎派、混合派、场景决定论派、演进视角派)、四个辩论冲突点,以及一组可直接落地的决策框架:按更新频率、查询频率、数据规模、领域特性决定上不上 RAG。","type":"Blog","readingTime":{"text":"10 min read","minutes":9.515,"time":570900,"words":1903},"wordCount":1903,"slug":"rag-vs-agent-retrieval-decision-framework","path":"blog/rag-vs-agent-retrieval-decision-framework","filePath":"blog/rag-vs-agent-retrieval-decision-framework.mdx","toc":[{"value":"话题主题","url":"#话题主题","depth":3},{"value":"不同立场 & 核心观点","url":"#不同立场--核心观点","depth":3},{"value":"辩论冲突点","url":"#辩论冲突点","depth":3},{"value":"逻辑疑点 / 待思考问题","url":"#逻辑疑点--待思考问题","depth":3},{"value":"关键信息摘要","url":"#关键信息摘要","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"RAG 还必要吗:从 130 条技术评论里提炼出的选型决策框架","datePublished":"2026-09-15T00:00:00.000Z","dateModified":"2026-09-15T00:00:00.000Z","description":"围绕「向量 RAG vs LLM Wiki + grep / Agent 自主检索」的四派立场梳理(谨慎派、混合派、场景决定论派、演进视角派)、四个辩论冲突点,以及一组可直接落地的决策框架:按更新频率、查询频率、数据规模、领域特性决定上不上 RAG。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/rag-vs-agent-retrieval-decision-framework"}},{"title":"如何沉淀 Agent 每次的踩坑经验","date":"2026-09-06T00:00:00.000Z","tags":["agent","dev-lessons","engineering","methodology","knowledge-management"],"draft":false,"summary":"把\"记住教训\"从 agent 的自觉变成基础设施:三层漏斗体系——规则强制捕获(项目级原始档)→ 定期蒸馏(全局技能)→ 协议化进化(活性维护)。","type":"Blog","readingTime":{"text":"5 min read","minutes":4.685,"time":281100,"words":937},"wordCount":937,"slug":"agent-lessons-precipitation","path":"blog/agent-lessons-precipitation","filePath":"blog/agent-lessons-precipitation.mdx","toc":[{"value":"如何沉淀 Agent 每次的踩坑经验","url":"#如何沉淀-agent-每次的踩坑经验","depth":2},{"value":"阶段一:规则驱动,强制捕获(源头)","url":"#阶段一规则驱动强制捕获源头","depth":2},{"value":"阶段二:蒸馏整合,跨项目复用","url":"#阶段二蒸馏整合跨项目复用","depth":2},{"value":"阶段三:进化协议,防止腐烂","url":"#阶段三进化协议防止腐烂","depth":2},{"value":"资产结构","url":"#资产结构","depth":2},{"value":"这套体系的本质","url":"#这套体系的本质","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"如何沉淀 Agent 每次的踩坑经验","datePublished":"2026-09-06T00:00:00.000Z","dateModified":"2026-09-06T00:00:00.000Z","description":"把\"记住教训\"从 agent 的自觉变成基础设施:三层漏斗体系——规则强制捕获(项目级原始档)→ 定期蒸馏(全局技能)→ 协议化进化(活性维护)。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/agent-lessons-precipitation"}},{"title":"Agent 怎么防止 Prompt 注入:四层纵深防御体系","date":"2026-09-06T00:00:00.000Z","tags":["ai","agent","security","prompt-injection","llm"],"draft":false,"summary":"单靠 Prompt 加限制词防不住注入,正确做法是搭建「输入侧 → 模型侧 → 执行侧 → 输出侧」四层纵深防御体系,其中执行侧权限管控是最硬的底线。","type":"Blog","readingTime":{"text":"8 min read","minutes":7.935,"time":476100,"words":1587},"wordCount":1587,"slug":"agent-prompt-injection-defense","path":"blog/agent-prompt-injection-defense","filePath":"blog/agent-prompt-injection-defense.mdx","toc":[{"value":"Agent 怎么防止 Prompt 注入","url":"#agent-怎么防止-prompt-注入","depth":2},{"value":"一、要做什么:四层纵深防御体系总览","url":"#一要做什么四层纵深防御体系总览","depth":2},{"value":"二、怎么做:各层具体落地手段","url":"#二怎么做各层具体落地手段","depth":2},{"value":"第一层:输入侧(隔离与检测)","url":"#第一层输入侧隔离与检测","depth":3},{"value":"第二层:模型侧(提升鲁棒性)","url":"#第二层模型侧提升鲁棒性","depth":3},{"value":"第三层:执行侧(权限管控,最硬防线)","url":"#第三层执行侧权限管控最硬防线","depth":3},{"value":"第四层:输出侧(过滤与追溯)","url":"#第四层输出侧过滤与追溯","depth":3},{"value":"三、为什么:根因与底层逻辑","url":"#三为什么根因与底层逻辑","depth":2},{"value":"Prompt 注入的根因","url":"#prompt-注入的根因","depth":3},{"value":"为什么 Prompt 加固防不住","url":"#为什么-prompt-加固防不住","depth":3},{"value":"为什么执行侧最关键","url":"#为什么执行侧最关键","depth":3},{"value":"为什么要重视输出侧追溯","url":"#为什么要重视输出侧追溯","depth":3},{"value":"四、面试回答框架(可直接套用)","url":"#四面试回答框架可直接套用","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Agent 怎么防止 Prompt 注入:四层纵深防御体系","datePublished":"2026-09-06T00:00:00.000Z","dateModified":"2026-09-06T00:00:00.000Z","description":"单靠 Prompt 加限制词防不住注入,正确做法是搭建「输入侧 → 模型侧 → 执行侧 → 输出侧」四层纵深防御体系,其中执行侧权限管控是最硬的底线。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/agent-prompt-injection-defense"}},{"title":"我是如何保证 Agent Skill 多而不乱的?","date":"2026-09-06T00:00:00.000Z","tags":["agent","skill","governance","engineering","methodology"],"draft":false,"summary":"700+ Skill 库的四层治理体系:L1 排序层(选得对)、L2 存储管理层(管得住)、L3 分区保护层(改不坏)、L4 自进化层(不腐烂),叠加快慢双路径检索。","type":"Blog","readingTime":{"text":"16 min read","minutes":15.28,"time":916800,"words":3056},"wordCount":3056,"slug":"agent-skill-governance","path":"blog/agent-skill-governance","filePath":"blog/agent-skill-governance.mdx","toc":[{"value":"1. 问题定义","url":"#1-问题定义","depth":2},{"value":"2. 总体架构","url":"#2-总体架构","depth":2},{"value":"3. L1 排序层:多指标综合排序","url":"#3-l1-排序层多指标综合排序","depth":2},{"value":"3.1 为什么必须多指标","url":"#31-为什么必须多指标","depth":3},{"value":"3.2 指标定义","url":"#32-指标定义","depth":3},{"value":"3.3 综合分公式","url":"#33-综合分公式","depth":3},{"value":"3.4 排序结果的用途","url":"#34-排序结果的用途","depth":3},{"value":"4. L2 存储管理层:skills-manager 统一管理","url":"#4-l2-存储管理层skills-manager-统一管理","depth":2},{"value":"4.1 核心原则","url":"#41-核心原则","depth":3},{"value":"4.2 架构","url":"#42-架构","depth":3},{"value":"4.3 元数据模型(DB schema 扩展)","url":"#43-元数据模型db-schema-扩展","depth":3},{"value":"4.4 分类体系","url":"#44-分类体系","depth":3},{"value":"5. L3 分区保护层:可修改区 / 不可修改区","url":"#5-l3-分区保护层可修改区--不可修改区","depth":2},{"value":"5.1 设计动机","url":"#51-设计动机","depth":3},{"value":"5.2 分区定义","url":"#52-分区定义","depth":3},{"value":"5.3 分区规则","url":"#53-分区规则","depth":3},{"value":"5.4 分层的信息学依据","url":"#54-分层的信息学依据","depth":3},{"value":"6. L4 自进化层:使用中持续迭代","url":"#6-l4-自进化层使用中持续迭代","depth":2},{"value":"6.1 进化闭环","url":"#61-进化闭环","depth":3},{"value":"6.2 进化的三类信号","url":"#62-进化的三类信号","depth":3},{"value":"6.3 防退化约束","url":"#63-防退化约束","depth":3},{"value":"7. 检索架构:快慢双路径","url":"#7-检索架构快慢双路径","depth":2},{"value":"7.1 快路径(默认)","url":"#71-快路径默认","depth":3},{"value":"7.2 慢路径(子 agent 兜底检索)","url":"#72-慢路径子-agent-兜底检索","depth":3},{"value":"8. 度量与验收","url":"#8-度量与验收","depth":2},{"value":"9. 设计要点回顾","url":"#9-设计要点回顾","depth":2},{"value":"10. 与现有组件的映射","url":"#10-与现有组件的映射","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"我是如何保证 Agent Skill 多而不乱的?","datePublished":"2026-09-06T00:00:00.000Z","dateModified":"2026-09-06T00:00:00.000Z","description":"700+ Skill 库的四层治理体系:L1 排序层(选得对)、L2 存储管理层(管得住)、L3 分区保护层(改不坏)、L4 自进化层(不腐烂),叠加快慢双路径检索。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/agent-skill-governance"}},{"title":"成本治理:付费 API 的计费安全与双重试状态机设计","date":"2026-09-06T00:00:00.000Z","tags":["engineering","api","cost","retry","billing","architecture"],"draft":false,"summary":"以 OpenAI 文生图 API 为例,解析生成请求与图片下载为什么必须是两个独立重试状态机:关键差异在计费语义——一个是未确认态可能重复扣费,一个是已付费的幂等免费操作。","type":"Blog","readingTime":{"text":"3 min read","minutes":2.94,"time":176400,"words":588},"wordCount":588,"slug":"billing-safety-retry-state-machine","path":"blog/billing-safety-retry-state-machine","filePath":"blog/billing-safety-retry-state-machine.mdx","toc":[{"value":"成本治理:付费 API 的计费安全与双重试状态机设计","url":"#成本治理付费-api-的计费安全与双重试状态机设计","depth":2},{"value":"状态机一:生成请求(_request_openai_image,L1290)","url":"#状态机一生成请求_request_openai_imagel1290","depth":2},{"value":"状态机二:图片下载(_openai_image_download_bytes,L1202)","url":"#状态机二图片下载_openai_image_download_bytesl1202","depth":2},{"value":"为什么必须是两个状态机","url":"#为什么必须是两个状态机","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"成本治理:付费 API 的计费安全与双重试状态机设计","datePublished":"2026-09-06T00:00:00.000Z","dateModified":"2026-09-06T00:00:00.000Z","description":"以 OpenAI 文生图 API 为例,解析生成请求与图片下载为什么必须是两个独立重试状态机:关键差异在计费语义——一个是未确认态可能重复扣费,一个是已付费的幂等免费操作。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/billing-safety-retry-state-machine"}},{"title":"如何快速接手一个项目并构建深度项目认知","date":"2026-09-06T00:00:00.000Z","tags":["onboarding","engineering","architecture","methodology","agent"],"draft":false,"summary":"接手陌生项目的四阶段方法论:宏观定向(1-2小时)→ 架构建模(半天)→ 运行验证(半天)→ 持续深化。12 个可执行步骤,配合 agent 技能栈实现认知加速。","type":"Blog","readingTime":{"text":"4 min read","minutes":3.055,"time":183300,"words":611},"wordCount":611,"slug":"onboarding-project-deep-understanding","path":"blog/onboarding-project-deep-understanding","filePath":"blog/onboarding-project-deep-understanding.mdx","toc":[{"value":"如何快速接手一个项目并构建深度项目认知","url":"#如何快速接手一个项目并构建深度项目认知","depth":2},{"value":"阶段一:宏观定向(1-2 小时)","url":"#阶段一宏观定向1-2-小时","depth":2},{"value":"阶段二:架构建模(半天)","url":"#阶段二架构建模半天","depth":2},{"value":"阶段三:运行验证(半天)","url":"#阶段三运行验证半天","depth":2},{"value":"阶段四:持续深化","url":"#阶段四持续深化","depth":2},{"value":"关键原则","url":"#关键原则","depth":2},{"value":"技能栈覆盖","url":"#技能栈覆盖","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"如何快速接手一个项目并构建深度项目认知","datePublished":"2026-09-06T00:00:00.000Z","dateModified":"2026-09-06T00:00:00.000Z","description":"接手陌生项目的四阶段方法论:宏观定向(1-2小时)→ 架构建模(半天)→ 运行验证(半天)→ 持续深化。12 个可执行步骤,配合 agent 技能栈实现认知加速。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/onboarding-project-deep-understanding"}},{"title":"Workflow vs Agent:用 7 维度框架定位你的项目","date":"2026-09-06T00:00:00.000Z","tags":["ai","agent","workflow","architecture","llm"],"draft":false,"summary":"以 MoneyPrinterTurbo 为例,用 7 个 agent 架构维度审视一个固定管线项目:它几乎一个都不占,但这不是缺陷,而是项目性质使然。能说清\"为什么这里不需要 agent\",比硬说\"这里有 agent\"更显研究深度。","type":"Blog","readingTime":{"text":"6 min read","minutes":5.25,"time":315000,"words":1050},"wordCount":1050,"slug":"workflow-vs-agent-7-dimensions","path":"blog/workflow-vs-agent-7-dimensions","filePath":"blog/workflow-vs-agent-7-dimensions.mdx","toc":[{"value":"Workflow vs Agent:用 7 维度框架定位你的项目","url":"#workflow-vs-agent用-7-维度框架定位你的项目","depth":2},{"value":"前提纠正:MoneyPrinterTurbo 不是 Agent 项目,这 7 个维度大多不适用","url":"#前提纠正moneyprinterturbo-不是-agent-项目这-7-个维度大多不适用","depth":2},{"value":"真问题:你的 agent 深度证据链目前是空的","url":"#真问题你的-agent-深度证据链目前是空的","depth":2},{"value":"1. 把 7 维度框架用在正确的对象上","url":"#1-把-7-维度框架用在正确的对象上","depth":3},{"value":"2. LiveTalking 才是 7 维度的主战场","url":"#2-livetalking-才是-7-维度的主战场","depth":3},{"value":"3. 如果 agent 线必须马上有东西","url":"#3-如果-agent-线必须马上有东西","depth":3},{"value":"面试话术(如果被问\"你的 PR 没体现 agent 研究\")","url":"#面试话术如果被问你的-pr-没体现-agent-研究","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Workflow vs Agent:用 7 维度框架定位你的项目","datePublished":"2026-09-06T00:00:00.000Z","dateModified":"2026-09-06T00:00:00.000Z","description":"以 MoneyPrinterTurbo 为例,用 7 个 agent 架构维度审视一个固定管线项目:它几乎一个都不占,但这不是缺陷,而是项目性质使然。能说清\"为什么这里不需要 agent\",比硬说\"这里有 agent\"更显研究深度。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/workflow-vs-agent-7-dimensions"}},{"title":"从参考项目移植功能的标准流程","date":"2026-06-20T00:00:00.000Z","tags":["engineering","open-source","python","fastapi","streamlit","workflow","opinion"],"draft":false,"summary":"将参考项目(如 NextChat、web-tools)的功能移植到当前项目的标准流程:从分析参考项目、确认集成范围、数据模型迁移、后端实现、前端实现、端到端验证到提 PR,覆盖 Python/FastAPI + Streamlit 技术栈的完整实践。","type":"Blog","readingTime":{"text":"10 min read","minutes":9.045,"time":542700,"words":1809},"wordCount":1809,"slug":"port-feature-from-reference","path":"blog/port-feature-from-reference","filePath":"blog/port-feature-from-reference.mdx","toc":[{"value":"从参考项目移植功能的标准流程","url":"#从参考项目移植功能的标准流程","depth":2},{"value":"为什么需要标准流程?","url":"#为什么需要标准流程","depth":3},{"value":"标准流程:7 步法","url":"#标准流程7-步法","depth":2},{"value":"步骤 1:分析参考项目","url":"#步骤-1分析参考项目","depth":2},{"value":"步骤 2:确认集成范围(关键!)","url":"#步骤-2确认集成范围关键","depth":2},{"value":"步骤 3:数据模型 + 迁移设计","url":"#步骤-3数据模型--迁移设计","depth":2},{"value":"3.1 新增模型","url":"#31-新增模型","depth":3},{"value":"3.2 迁移脚本","url":"#32-迁移脚本","depth":3},{"value":"3.3 复合索引","url":"#33-复合索引","depth":3},{"value":"步骤 4:后端实现(分层)","url":"#步骤-4后端实现分层","depth":2},{"value":"4.1 Service 层(backend/services/xxx.py)","url":"#41-service-层backendservicesxxxpy","depth":3},{"value":"4.2 Schema 层(schemas.py)","url":"#42-schema-层schemaspy","depth":3},{"value":"4.3 Endpoint 层(main.py)","url":"#43-endpoint-层mainpy","depth":3},{"value":"4.4 启动钩子","url":"#44-启动钩子","depth":3},{"value":"步骤 5:前端实现","url":"#步骤-5前端实现","depth":2},{"value":"5.1 API 客户端(api_client.py)","url":"#51-api-客户端api_clientpy","depth":3},{"value":"5.2 页面实现(app.py)","url":"#52-页面实现apppy","depth":3},{"value":"5.3 UI 交互","url":"#53-ui-交互","depth":3},{"value":"步骤 6:端到端验证","url":"#步骤-6端到端验证","depth":2},{"value":"步骤 7:提 PR","url":"#步骤-7提-pr","depth":2},{"value":"7.1 提交前安全检查","url":"#71-提交前安全检查","depth":3},{"value":"7.2 分支与提交","url":"#72-分支与提交","depth":3},{"value":"7.3 推送与创建 PR","url":"#73-推送与创建-pr","depth":3},{"value":"常见踩坑速查","url":"#常见踩坑速查","depth":2},{"value":"移植决策原则","url":"#移植决策原则","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"从参考项目移植功能的标准流程","datePublished":"2026-06-20T00:00:00.000Z","dateModified":"2026-06-20T00:00:00.000Z","description":"将参考项目(如 NextChat、web-tools)的功能移植到当前项目的标准流程:从分析参考项目、确认集成范围、数据模型迁移、后端实现、前端实现、端到端验证到提 PR,覆盖 Python/FastAPI + Streamlit 技术栈的完整实践。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/port-feature-from-reference"}},{"title":"从程序员到初级架构师的思考路径","date":"2026-06-18T00:00:00.000Z","tags":["architecture","engineering","career","opinion","mindset"],"draft":false,"summary":"编程语言只是实现模块功能的方式,而模块功能是整体架构的一部分。理解架构的本质——它是什么、影响了什么、为什么这样设计、遇到了哪些场景和问题——再思考用什么工具解决这些实际问题。当测试通过、功能正常、日志正常,你就已经是一位初级架构师了。","type":"Blog","readingTime":{"text":"6 min read","minutes":5.475,"time":328500,"words":1095},"wordCount":1095,"slug":"from-developer-to-junior-architect","path":"blog/from-developer-to-junior-architect","filePath":"blog/from-developer-to-junior-architect.mdx","toc":[{"value":"从程序员到初级架构师的思考路径","url":"#从程序员到初级架构师的思考路径","depth":2},{"value":"理解架构的本质","url":"#理解架构的本质","depth":3},{"value":"从理解到实践","url":"#从理解到实践","depth":3},{"value":"初级架构师的标准","url":"#初级架构师的标准","depth":3},{"value":"底层设计:为系统膨胀预留空间","url":"#底层设计为系统膨胀预留空间","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"从程序员到初级架构师的思考路径","datePublished":"2026-06-18T00:00:00.000Z","dateModified":"2026-06-18T00:00:00.000Z","description":"编程语言只是实现模块功能的方式,而模块功能是整体架构的一部分。理解架构的本质——它是什么、影响了什么、为什么这样设计、遇到了哪些场景和问题——再思考用什么工具解决这些实际问题。当测试通过、功能正常、日志正常,你就已经是一位初级架构师了。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/from-developer-to-junior-architect"}},{"title":"我建站如何确保数据安全","date":"2026-06-14T00:00:00.000Z","tags":["security","devops","engineering","cloudflare","api","opinion"],"draft":false,"summary":"从独立开发者视角,系统梳理建站全链路数据安全实践:Cloudflare 隧道架构、开发阶段单测与静态扫描、API 六维防护、渗透测试验证、灰度发布与回滚、二阶安全兜底。","type":"Blog","readingTime":{"text":"5 min read","minutes":4.62,"time":277200,"words":924},"wordCount":924,"slug":"building-site-data-security","path":"blog/building-site-data-security","filePath":"blog/building-site-data-security.mdx","toc":[{"value":"我建站如何确保数据安全","url":"#我建站如何确保数据安全","depth":3},{"value":"开发阶段把好第一关","url":"#开发阶段把好第一关","depth":4},{"value":"API 是防护重点","url":"#api-是防护重点","depth":4},{"value":"测试与渗透验证","url":"#测试与渗透验证","depth":4},{"value":"发布与线上不掉链子","url":"#发布与线上不掉链子","depth":4},{"value":"二阶安全补足短板","url":"#二阶安全补足短板","depth":4}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"我建站如何确保数据安全","datePublished":"2026-06-14T00:00:00.000Z","dateModified":"2026-06-14T00:00:00.000Z","description":"从独立开发者视角,系统梳理建站全链路数据安全实践:Cloudflare 隧道架构、开发阶段单测与静态扫描、API 六维防护、渗透测试验证、灰度发布与回滚、二阶安全兜底。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/building-site-data-security"}},{"title":"对Agent产品窗口期的看法","date":"2026-06-06T00:00:00.000Z","tags":["ai","agent","startup","product","opinion"],"draft":false,"summary":"Agent的窗口期会非常短——因为Agent本身就在提高开发Agent应用的效率,市场需求将迅速饱和。以月之暗面Alnative桌面级本地Agent为例,超5万行代码中92%由AI自主生成,工程师仅耗时一周完成架构优化与交互调校。","type":"Blog","readingTime":{"text":"1 min read","minutes":0.62,"time":37200,"words":124},"wordCount":124,"slug":"agent-window-period","path":"blog/agent-window-period","filePath":"blog/agent-window-period.mdx","toc":[{"value":"对Agent产品窗口期的看法","url":"#对agent产品窗口期的看法","depth":2},{"value":"产品开发背景","url":"#产品开发背景","depth":3},{"value":"核心观点","url":"#核心观点","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"对Agent产品窗口期的看法","datePublished":"2026-06-06T00:00:00.000Z","dateModified":"2026-06-06T00:00:00.000Z","description":"Agent的窗口期会非常短——因为Agent本身就在提高开发Agent应用的效率,市场需求将迅速饱和。以月之暗面Alnative桌面级本地Agent为例,超5万行代码中92%由AI自主生成,工程师仅耗时一周完成架构优化与交互调校。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/agent-window-period"}},{"title":"Anthropic官方手册:打造AI原生创业公司的核心要点","date":"2026-06-06T00:00:00.000Z","tags":["ai","startup","anthropic","product","engineering","opinion"],"draft":false,"summary":"解读Anthropic官方手册,系统阐述如何从第一天起将AI深度融入验证、构建、运营与积累等各环节,打造真正的AI原生创业公司。","type":"Blog","readingTime":{"text":"4 min read","minutes":3.42,"time":205200,"words":684},"wordCount":684,"slug":"anthropic-ai-native-startup","path":"blog/anthropic-ai-native-startup","filePath":"blog/anthropic-ai-native-startup.mdx","toc":[{"value":"Anthropic官方手册:打造AI原生创业公司的核心要点","url":"#anthropic官方手册打造ai原生创业公司的核心要点","depth":2},{"value":"1. 核心主旨","url":"#1-核心主旨","depth":3},{"value":"2. 关键要点","url":"#2-关键要点","depth":3},{"value":"3. 结论/建议","url":"#3-结论建议","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Anthropic官方手册:打造AI原生创业公司的核心要点","datePublished":"2026-06-06T00:00:00.000Z","dateModified":"2026-06-06T00:00:00.000Z","description":"解读Anthropic官方手册,系统阐述如何从第一天起将AI深度融入验证、构建、运营与积累等各环节,打造真正的AI原生创业公司。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/anthropic-ai-native-startup"}},{"title":"IDE Agent 开发体验:为什么直接操作代码比通用 AI 助手更靠谱","date":"2026-06-04T00:00:00.000Z","tags":["ai","ide","agent","devtools","opinion","developer-experience"],"draft":false,"summary":"对比 IDE 内置 Agent 与通用 AI 编程助手在代码开发场景中的体验差异,探讨代码硬约束、模型幻觉抑制、精准代码定位等关键优势。","type":"Blog","readingTime":{"text":"1 min read","minutes":0.34,"time":20400,"words":68},"wordCount":68,"slug":"ide-agent-vs-ai-assistant","path":"blog/ide-agent-vs-ai-assistant","filePath":"blog/ide-agent-vs-ai-assistant.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"IDE Agent 开发体验:为什么直接操作代码比通用 AI 助手更靠谱","datePublished":"2026-06-04T00:00:00.000Z","dateModified":"2026-06-04T00:00:00.000Z","description":"对比 IDE 内置 Agent 与通用 AI 编程助手在代码开发场景中的体验差异,探讨代码硬约束、模型幻觉抑制、精准代码定位等关键优势。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/ide-agent-vs-ai-assistant"}},{"title":"RAG 链路全解析:从文档入库到混合记忆的实战架构","date":"2026-06-04T00:00:00.000Z","tags":["rag","ai","llm","embedding","chromadb","nodejs","architecture","engineering"],"draft":false,"summary":"详述 RAG(检索增强生成)的完整技术链路,包括文档入库、向量化、召回重排、Prompt 拼接,以及基于 Node.js + ChromaDB + SQLite 的三层混合记忆进阶方案。","type":"Blog","readingTime":{"text":"15 min read","minutes":14.405,"time":864300,"words":2881},"wordCount":2881,"slug":"rag-pipeline-architecture","path":"blog/rag-pipeline-architecture","filePath":"blog/rag-pipeline-architecture.mdx","toc":[{"value":"引言:为什么需要重新思考 RAG?","url":"#引言为什么需要重新思考-rag","depth":2},{"value":"第一部分:基础 RAG 链路回顾","url":"#第一部分基础-rag-链路回顾","depth":2},{"value":"第二部分:三层混合记忆架构","url":"#第二部分三层混合记忆架构","depth":2},{"value":"架构全景图","url":"#架构全景图","depth":3},{"value":"第一层:全量留存(底片层)","url":"#第一层全量留存底片层","depth":3},{"value":"第二层:滚动摘要(摘要层)","url":"#第二层滚动摘要摘要层","depth":3},{"value":"第三层:RAG 记忆(向量层)","url":"#第三层rag-记忆向量层","depth":3},{"value":"第三部分:混合检索策略(三路召回 + RRF)","url":"#第三部分混合检索策略三路召回--rrf","depth":2},{"value":"三路召回通道","url":"#三路召回通道","depth":3},{"value":"RRF 融合排序算法","url":"#rrf-融合排序算法","depth":3},{"value":"第四部分:动态状态引擎(三层 Prompt 叠加)","url":"#第四部分动态状态引擎三层-prompt-叠加","depth":2},{"value":"三层结构详解","url":"#三层结构详解","depth":3},{"value":"情绪状态引擎的实现","url":"#情绪状态引擎的实现","depth":3},{"value":"第五部分:完整技术栈","url":"#第五部分完整技术栈","depth":2},{"value":"后端核心","url":"#后端核心","depth":3},{"value":"AI 与检索层","url":"#ai-与检索层","depth":3},{"value":"数据加密","url":"#数据加密","depth":3},{"value":"第六部分:优化建议与展望","url":"#第六部分优化建议与展望","depth":2},{"value":"1. 向量库的可扩展性","url":"#1-向量库的可扩展性","depth":3},{"value":"2. 重排序层(Reranker)的引入","url":"#2-重排序层reranker的引入","depth":3},{"value":"3. SQLite 性能优化","url":"#3-sqlite-性能优化","depth":3},{"value":"4. 异步写入队列","url":"#4-异步写入队列","depth":3},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"RAG 链路全解析:从文档入库到混合记忆的实战架构","datePublished":"2026-06-04T00:00:00.000Z","dateModified":"2026-06-04T00:00:00.000Z","description":"详述 RAG(检索增强生成)的完整技术链路,包括文档入库、向量化、召回重排、Prompt 拼接,以及基于 Node.js + ChromaDB + SQLite 的三层混合记忆进阶方案。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/rag-pipeline-architecture"}},{"title":"前端工程化:从 Webpack 到 Turbopack 的迁移指南","date":"2026-06-01T00:00:00.000Z","tags":["webpack","turbopack","build-tools","engineering"],"draft":false,"summary":"Next.js 15 默认使用 Turbopack,本文对比 Webpack 和 Turbopack,提供完整的迁移策略和性能数据。","type":"Blog","readingTime":{"text":"3 min read","minutes":2.67,"time":160200,"words":534},"wordCount":534,"slug":"webpack-to-turbopack","path":"blog/webpack-to-turbopack","filePath":"blog/webpack-to-turbopack.mdx","toc":[{"value":"为什么选择 Turbopack?","url":"#为什么选择-turbopack","depth":2},{"value":"迁移步骤","url":"#迁移步骤","depth":2},{"value":"第一步:升级 Next.js","url":"#第一步升级-nextjs","depth":3},{"value":"第二步:启用 Turbopack","url":"#第二步启用-turbopack","depth":3},{"value":"第三步:处理不兼容的配置","url":"#第三步处理不兼容的配置","depth":3},{"value":"第四步:插件迁移","url":"#第四步插件迁移","depth":3},{"value":"CSS 处理演进","url":"#css-处理演进","depth":2},{"value":"渐进式迁移策略","url":"#渐进式迁移策略","depth":2},{"value":"常见问题","url":"#常见问题","depth":2},{"value":"SVG 导入","url":"#svg-导入","depth":3},{"value":"环境变量","url":"#环境变量","depth":3},{"value":"性能对比实测","url":"#性能对比实测","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"前端工程化:从 Webpack 到 Turbopack 的迁移指南","datePublished":"2026-06-01T00:00:00.000Z","dateModified":"2026-06-01T00:00:00.000Z","description":"Next.js 15 默认使用 Turbopack,本文对比 Webpack 和 Turbopack,提供完整的迁移策略和性能数据。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/webpack-to-turbopack"}},{"title":"Next.js App Router 性能优化实战","date":"2026-05-28T00:00:00.000Z","tags":["nextjs","performance","react","frontend"],"draft":false,"summary":"从 Server Components 到 Streaming SSR,一文掌握 Next.js App Router 的核心性能优化策略。","type":"Blog","readingTime":{"text":"3 min read","minutes":2.065,"time":123900,"words":413},"wordCount":413,"slug":"nextjs-performance","path":"blog/nextjs-performance","filePath":"blog/nextjs-performance.mdx","toc":[{"value":"Server Components:减少客户端 JavaScript","url":"#server-components减少客户端-javascript","depth":2},{"value":"什么时候用 Client Components?","url":"#什么时候用-client-components","depth":3},{"value":"Streaming SSR:渐进式渲染","url":"#streaming-ssr渐进式渲染","depth":2},{"value":"图片优化","url":"#图片优化","depth":2},{"value":"字体优化","url":"#字体优化","depth":2},{"value":"数据获取策略","url":"#数据获取策略","depth":2},{"value":"静态生成(推荐博客内容)","url":"#静态生成推荐博客内容","depth":3},{"value":"增量静态再生 (ISR)","url":"#增量静态再生-isr","depth":3},{"value":"性能检查清单","url":"#性能检查清单","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Next.js App Router 性能优化实战","datePublished":"2026-05-28T00:00:00.000Z","dateModified":"2026-05-28T00:00:00.000Z","description":"从 Server Components 到 Streaming SSR,一文掌握 Next.js App Router 的核心性能优化策略。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/nextjs-performance"}},{"title":"构建现代设计系统:从 Design Tokens 到组件库","date":"2026-05-20T00:00:00.000Z","tags":["design-system","tailwind","css","frontend"],"draft":false,"summary":"深入探讨如何基于 Design Tokens 方法论,使用 Tailwind CSS 构建可扩展、可维护的现代设计系统。","type":"Blog","readingTime":{"text":"3 min read","minutes":2.475,"time":148500,"words":495},"wordCount":495,"slug":"design-system-with-tailwind","path":"blog/design-system-with-tailwind","filePath":"blog/design-system-with-tailwind.mdx","toc":[{"value":"为什么需要 Design Tokens","url":"#为什么需要-design-tokens","depth":2},{"value":"设计 Token 的三层架构","url":"#设计-token-的三层架构","depth":2},{"value":"第一层:基础 Tokens (Primitive Tokens)","url":"#第一层基础-tokens-primitive-tokens","depth":3},{"value":"第二层:语义 Tokens (Semantic Tokens)","url":"#第二层语义-tokens-semantic-tokens","depth":3},{"value":"第三层:组件 Tokens (Component Tokens)","url":"#第三层组件-tokens-component-tokens","depth":3},{"value":"暗色模式实现","url":"#暗色模式实现","depth":2},{"value":"组件库架构","url":"#组件库架构","depth":2},{"value":"工具链推荐","url":"#工具链推荐","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"构建现代设计系统:从 Design Tokens 到组件库","datePublished":"2026-05-20T00:00:00.000Z","dateModified":"2026-05-20T00:00:00.000Z","description":"深入探讨如何基于 Design Tokens 方法论,使用 Tailwind CSS 构建可扩展、可维护的现代设计系统。","image":"/static/images/twitter-card.png","url":"https://techlog-18328.app.workbuddy.host/blog/design-system-with-tailwind"}}],"initialDisplayPosts":["$16:props:posts:15","$16:props:posts:16","$16:props:posts:17","$16:props:posts:18","$16:props:posts:19"],"pagination":{"currentPage":4,"totalPages":5},"title":"All Posts"}] 1c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] 18:null 1a:{"metadata":[["$","title","0",{"children":"TechLog"}],["$","meta","1",{"name":"description","content":"AI Agent 工程化实践复盘:架构设计、容错与可靠性、上下文工程与成本治理。"}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","meta","3",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","4",{"rel":"canonical","href":"https://techlog-18328.app.workbuddy.host/blog/page/4"}],["$","link","5",{"rel":"alternate","type":"application/rss+xml","href":"https://techlog-18328.app.workbuddy.host/feed.xml"}],["$","meta","6",{"property":"og:title","content":"TechLog"}],["$","meta","7",{"property":"og:description","content":"AI Agent 工程化实践复盘:架构设计、容错与可靠性、上下文工程与成本治理。"}],["$","meta","8",{"property":"og:url","content":"https://techlog-18328.app.workbuddy.host/blog/page/4"}],["$","meta","9",{"property":"og:site_name","content":"TechLog"}],["$","meta","10",{"property":"og:locale","content":"zh_CN"}],["$","meta","11",{"property":"og:image","content":"https://techlog-18328.app.workbuddy.host/static/images/twitter-card.png"}],["$","meta","12",{"property":"og:type","content":"website"}],["$","meta","13",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","14",{"name":"twitter:title","content":"TechLog"}],["$","meta","15",{"name":"twitter:description","content":"AI Agent 工程化实践复盘:架构设计、容错与可靠性、上下文工程与成本治理。"}],["$","meta","16",{"name":"twitter:image","content":"https://techlog-18328.app.workbuddy.host/static/images/twitter-card.png"}]],"error":null,"digest":"$undefined"} 1f:"$1a:metadata"