diff --git a/build.sh b/build.sh
index acce01d66..2af146afc 100644
--- a/build.sh
+++ b/build.sh
@@ -1,3 +1,11 @@
-NODE_OPTIONS=--max-old-space-size=14096 npm run build
+# 先切换到指定的 Node.js 版本 sudo n
+NODE_OPTIONS=--max-old-space-size=24096 npm run build
-# 优惠券地址;https://bugstack.cn/images/article/zsxq/zsxq-youhuiquan.png
\ No newline at end of file
+# 优惠券地址;https://bugstack.cn/images/article/zsxq/zsxq-youhuiquan.png
+# node 版本切换;https://www.cnblogs.com/fengchong0925/p/18489658
+# 全局安装;npm install -g n
+# 安装指定node版本;sudo -E n 18.16.0
+# 查看已安装的版本列表;n list
+# 删除指定版本;n rm 16.13.2
+# 切换node版本;sudo n
+# 查看切换版本;node -v npm -v
\ No newline at end of file
diff --git a/docs/.vuepress/components/LockArticle.vue b/docs/.vuepress/components/LockArticle.vue
index ad153b655..cbebdc22f 100644
--- a/docs/.vuepress/components/LockArticle.vue
+++ b/docs/.vuepress/components/LockArticle.vue
@@ -95,7 +95,7 @@
t._lock(articleObj);
} else {
t._unlock(articleObj);
- t.setCookie("_unlock", "success", 7);
+ t.setCookie("_unlock", "success", 45);
}
},
error: function (data) {
@@ -170,13 +170,7 @@
if (!value) {
return await this.getFingerprintId();
}
-
- if (value.length <= 12) {
- return value.substring(value.length - 6).toUpperCase();
- }
-
- const currentMonth = new Date().getMonth() + 1; // 获取当前月份(JavaScript 中月份是从 0 开始的)
- return value.substring(currentMonth, currentMonth + 6).toUpperCase();
+ return value.substring(value.length - 6).toUpperCase();
} else{
return await this.getFingerprintId();
}
@@ -211,9 +205,9 @@
if (parts.length === 2)
return parts.pop().split(";").shift();
},
- setCookie: function (name, value, hours){
+ setCookie: function (name, value, day){
let exp = new Date();
- exp.setTime(exp.getTime() + hours*60*60*1000);
+ exp.setTime(exp.getTime() + day*24*60*60*1000);
// ;path=/ cookie全站有效
document.cookie = name + "="+ escape (value) + ";path=/;expires=" + exp.toGMTString();
},
diff --git a/docs/.vuepress/components/RoadMap.vue b/docs/.vuepress/components/RoadMap.vue
index 700d00053..71cd5ab96 100644
--- a/docs/.vuepress/components/RoadMap.vue
+++ b/docs/.vuepress/components/RoadMap.vue
@@ -1867,7 +1867,7 @@
src="https://bugstack.cn/images/roadmap/08-测试/082-性能测试/1-Jemeter/images/Jemeter.png">
- Jemeter
+ JMeter
diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
index 105aaf0af..50871fed0 100755
--- a/docs/.vuepress/config.js
+++ b/docs/.vuepress/config.js
@@ -33,7 +33,7 @@ module.exports = {
"/": {
lang: "zh-CN",
title: "小傅哥 bugstack 虫洞栈",
- description: "包含: Java 基础,面经手册,Netty4.x,手写Spring,用Java实现JVM,重学Java设计模式,SpringBoot中间件开发,IDEA插件开发,Lottery抽奖系统,字节码编程..."
+ description: "包含: Java 基础,面经手册,Netty4.x,手写MyBatis,用Java实现JVM,重学Java设计模式,SpringBoot中间件开发,IDEA插件开发,大营销抽奖系统,Java 实战项目训练,字节码编程..."
}
},
head: [
@@ -47,7 +47,7 @@ module.exports = {
["meta", {"http-equiv": "Expires", content: "0"}],
["meta", {
name: "keywords",
- content: "小傅哥, bugstack 虫洞栈, 实战项目, 应用项目, 面试项目, DDD抽奖系统,数据结构,重学Java设计模式, 字节码编程, 中间件, 手写Spring, 手写MyBatis,Java基础, 面经手册,Java面试题,API网关,SpringBoot Stater, ChatGPT"
+ content: "欢迎来到小傅哥的编程世界,这里是bugstack虫洞栈!无论你是Java初学者还是资深开发者,我们都为你准备了丰富的学习资源和实战项目,包括Java基础教程、实战项目指南、应用项目开发、Java面试题解析、重学Java设计模式、字节码编程、手写Spring与MyBatis、API网关与中间件、DDD抽奖系统、SpringBoot Starter开发,以及ChatGPT与AI技术的应用。我们致力于为你提供最优质的学习体验,帮助你在Java开发的道路上不断进步。欢迎访问我们的官方网站获取更多资源,并加入我们的社交媒体平台,与全球开发者一起交流学习。"
}],
["meta", {name: "apple-mobile-web-app-capable", content: "yes"}],
['script',
@@ -185,7 +185,10 @@ module.exports = {
text: '导读', link: '/md/other/guide-to-reading.md'
},
{
- text: '路书', link: '/md/road-map/road-map.md'
+ text: '编程路书', link: '/md/road-map/road-map.md'
+ },
+ {
+ text: 'AI Agent', link: '/md/ai/spring-ai.md'
},
{
text: '算法',
@@ -205,184 +208,185 @@ module.exports = {
]
},
{
- text: 'Java',
+ text: '开发技术',
items: [
{
- text: '面经手册',
- link: '/md/java/interview/2020-07-28-面经手册 · 开篇《面试官都问我啥》.md'
- },
- {
- text: '用Java实现JVM',
- link: '/md/java/develop-jvm/2019-05-01-用Java实现JVM第一章《命令行工具》.md'
- },
- {
- text: '基础技术',
- link: '/md/java/core/2020-01-06-[源码分析]咋嘞?你的IDEA过期了吧!加个Jar包就破解了,为什么?.md'
- }
- ]
- },
- {
- text: 'Spring',
- items: [
- {
- text: 'Spring 手撸专栏',
- link: '/md/spring/develop-spring/2021-05-16-第1章:开篇介绍,手写Spring能给你带来什么?.md'
- },
- {
- text: 'MyBatis 手撸专栏',
- link: '/md/spring/develop-mybatis/2022-03-20-第1章:开篇介绍,手写Mybatis能给你带来什么?.md'
- },
- {
- text: 'Spring Cloud',
- link: '/md/spring/spring-cloud/2019-10-31-Spring Cloud零《总有一偏概述告诉你SpringCloud是什么》.md'
+ text: 'Java',
+ items: [
+ {
+ text: '面经手册',
+ link: '/md/java/interview/2020-07-28-面经手册 · 开篇《面试官都问我啥》.md'
+ },
+ {
+ text: '用Java实现JVM',
+ link: '/md/java/develop-jvm/2019-05-01-用Java实现JVM第一章《命令行工具》.md'
+ },
+ {
+ text: '基础技术',
+ link: '/md/java/core/2020-01-06-[源码分析]咋嘞?你的IDEA过期了吧!加个Jar包就破解了,为什么?.md'
+ }
+ ]
},
{
- text: '源码分析(Mybatis、Quartz)',
- link: '/md/spring/source-code/2019-12-25-[源码分析]Mybatis接口没有实现类为什么可以执行增删改查.md'
- }
- ]
- },
- {
- text: '面向对象',
- items: [
- {
- text: '重学Java设计模式',
+ text: 'Spring',
items: [
{
- text: '创建型模式',
- link: '/md/develop/design-pattern/2020-05-20-重学Java设计模式《实战工厂方法模式》.md'
+ text: 'Spring 手撸专栏',
+ link: '/md/spring/develop-spring/2021-05-16-第1章:开篇介绍,手写Spring能给你带来什么?.md'
},
{
- text: '结构型模式',
- link: '/md/develop/design-pattern/2020-06-02-重学 Java 设计模式《适配器模式》.md'
+ text: 'MyBatis 手撸专栏',
+ link: '/md/spring/develop-mybatis/2022-03-20-第1章:开篇介绍,手写Mybatis能给你带来什么?.md'
},
{
- text: '行为型模式',
- link: '/md/develop/design-pattern/2020-06-18-重学 Java 设计模式《实战责任链模式》.md'
+ text: 'Spring Cloud',
+ link: '/md/spring/spring-cloud/2019-10-31-Spring Cloud零《总有一偏概述告诉你SpringCloud是什么》.md'
+ },
+ {
+ text: '源码分析(Mybatis、Quartz)',
+ link: '/md/spring/source-code/2019-12-25-[源码分析]Mybatis接口没有实现类为什么可以执行增删改查.md'
}
]
},
{
- text: '系统架构',
+ text: '面向对象',
items: [
{
- text: 'DDD 专题',
+ text: '重学Java设计模式-创建型模式',
+ link: '/md/develop/design-pattern/2020-05-20-重学Java设计模式《实战工厂方法模式》.md'
+ },
+ {
+ text: '重学Java设计模式-结构型模式',
+ link: '/md/develop/design-pattern/2020-06-02-重学 Java 设计模式《适配器模式》.md'
+ },
+ {
+ text: '重学Java设计模式-行为型模式',
+ link: '/md/develop/design-pattern/2020-06-18-重学 Java 设计模式《实战责任链模式》.md'
+ },
+ {
+ text: '系统架构-DDD 专题',
link: '/md/develop/framework/ddd/2019-10-15-DDD专题案例一《初识领域驱动设计DDD落地》.md'
},
{
- text: '工程框架',
+ text: '系统架构-工程框架',
link: '/md/develop/framework/frame/2019-12-22-架构框架搭建一《单体应用服务之SSM整合:Spring4 + SpringMvc + Mybatis》.md'
},
{
- text: '架构方案',
+ text: '系统架构-架构方案',
link: '/md/develop/framework/scheme/2021-02-04-基于IDEA插件开发和字节码插桩技术,实现研发交付质量自动分析.md'
+ },
+ {
+ text: '标准-开发规范&事故',
+ link: '/md/develop/standard/2020-09-14-一次代码评审,差点过不了试用期!.md'
}
]
},
{
- text: '标准',
+ text: 'Netty 4.x',
items: [
{
- text: '开发规范&事故',
- link: '/md/develop/standard/2020-09-14-一次代码评审,差点过不了试用期!.md'
- }
+ text: '基础入门篇',
+ link: '/md/netty/base/2019-07-30-netty案例,netty4.1基础入门篇零《初入JavaIO之门BIO、NIO、AIO实战练习》.md'
+ },
+ {
+ text: '中级拓展篇',
+ link: '/md/netty/expand/2019-08-16-netty案例,netty4.1中级拓展篇一《Netty与SpringBoot整合》.md'
+ },
+ {
+ text: '高级应用篇',
+ link: '/md/netty/application/2019-09-01-手写RPC框架第一章《自定义配置xml》.md'
+ },
+ {
+ text: '源码分析篇',
+ link: '/md/netty/source-code/2019-09-10-netty案例,netty4.1源码分析篇一《NioEventLoopGroup源码分析》.md'
+ },
]
- }
- ]
- },
- {
- text: '中间件',
- items: [
- {
- text: 'SpringBoot 中间件开发',
- link: '/md/assembly/middleware/2019-12-02-SpringBoot服务治理中间件之统一白名单验证.md'
- },
- {
- text: 'IDEA Plugin 开发手册',
- link: '/md/assembly/idea-plugin/2021-08-27-技术调研,IDEA 插件怎么开发?.md'
},
{
- text: 'API网关:中间件设计和实践',
- link: '/md/assembly/api-gateway/api-gateway.md'
- }
- ]
- },
- {
- text: 'Netty 4.x',
- items: [
- {
- text: '基础入门篇',
- link: '/md/netty/base/2019-07-30-netty案例,netty4.1基础入门篇零《初入JavaIO之门BIO、NIO、AIO实战练习》.md'
- },
- {
- text: '中级拓展篇',
- link: '/md/netty/expand/2019-08-16-netty案例,netty4.1中级拓展篇一《Netty与SpringBoot整合》.md'
- },
- {
- text: '高级应用篇',
- link: '/md/netty/application/2019-09-01-手写RPC框架第一章《自定义配置xml》.md'
- },
- {
- text: '源码分析篇',
- link: '/md/netty/source-code/2019-09-10-netty案例,netty4.1源码分析篇一《NioEventLoopGroup源码分析》.md'
- },
- ]
- },
- {
- text: '字节码编程',
- items: [
- {
- text: '框架', items: [
+ text: '字节码编程',
+ items: [
{
- text: 'ASM',
+ text: '框架-ASM',
link: '/md/bytecode/asm/2020-03-25-[ASM字节码编程]如果你只写CRUD,那这种技术你永远碰不到.md'
},
{
- text: 'Javassist',
+ text: '框架-Javassist',
link: '/md/bytecode/javassist/2020-04-19-字节码编程,Javassist篇一《基于javassist的第一个案例helloworld》.md'
},
{
- text: 'Byte-Buddy',
+ text: '框架-Byte-Buddy',
link: '/md/bytecode/byte-buddy/2020-05-08-字节码编程,Byte-buddy篇一《基于Byte Buddy语法创建的第一个HelloWorld》.md'
+ },
+ {
+ text: '全链路监控-JavaAgent',
+ link: '/md/bytecode/agent/2019-07-10-基于JavaAgent的全链路监控一《嗨!JavaAgent》.md'
+ },
+ {
+ text: '文档-ASM-DOC',
+ link: '/md/bytecode/asm-document/1引言.md'
}
]
},
{
- text: '全链路监控', items: [
+ text: '部署',
+ items: [
{
- text: 'JavaAgent',
- link: '/md/bytecode/agent/2019-07-10-基于JavaAgent的全链路监控一《嗨!JavaAgent》.md'
+ text: '部署工具',
+ link: '/md/devops/2023-04-18-tool.md'
}
]
},
- {
- text: '文档', items: [
- {text: 'ASM-DOC', link: '/md/bytecode/asm-document/1引言.md'}
- ]
- }
]
},
- {
- text: '部署',
- link: '/md/devops/2023-04-18-tool.md'
- },
{
text: '💯实战项目',
items: [
+ {
+ text: '创新类型(AI)', items: [
+ {
+ text: 'AI Agent 脚手架 + 场景应用',
+ link: '/md/project/ai-agent-scaffold/ai-agent-scaffold.md'
+ },
+ {
+ text: 'AI MCP Gateway 网关服务系统(更新中)',
+ link: '/md/project/ai-mcp-gateway/ai-mcp-gateway.md'
+ },
+ {
+ text: 'AI Agent 拖拉拽 + 动态配置',
+ link: '/md/project/ai-knowledge/ai-knowledge.md'
+ },
+ {
+ text: 'OpenAI 代码自动评审',
+ link: 'https://bugstack.cn/md/zsxq/project/openai-code-review.html'
+ },
+ {
+ text: 'OpenAI 大模型应用服务体系构建',
+ link: '/md/project/chatgpt/chatgpt.md'
+ },
+ {
+ text: 'ChatGPT AI 问答助手',
+ link: '/md/project/chatbot-api/chatbot-api.md'
+ },
+ {
+ text: 'OpenAI SDK 组件项目',
+ link: 'https://bugstack.cn/md/zsxq/project/openai-sdk-java.html'
+ }
+ ]
+ },
{
text: '业务类型', items: [
{
- text: '小型支付电商系统(新)',
+ text: '拼团交易平台系统',
+ link: '/md/project/group-buy-market/group-buy-market.md'
+ },
+ {
+ text: '小型支付电商系统',
link: '/md/project/s-pay-mall/s-pay-mall.md'
},
{
text: '大营销平台系统',
link: '/md/project/big-market/big-market.md'
},
- {
- text: 'OpenAi 大模型应用服务体系构建',
- link: '/md/project/chatgpt/chatgpt.md'
- },
{
text: 'Lottery 分布式抽奖系统',
link: '/md/project/lottery/introduce/Lottery抽奖系统.md'
@@ -390,18 +394,18 @@ module.exports = {
{
text: 'IM Netty 仿PC端微信',
link: '/md/project/im/2020-03-04-《Netty+JavaFx实战:仿桌面版微信聊天》.md'
- },
- {
- text: 'ChatGPT AI 问答助手',
- link: '/md/project/chatbot-api/chatbot-api.md'
}
]
},
{
text: '组件类型', items: [
{
- text: 'OpenAI 代码自动评审',
- link: 'https://bugstack.cn/md/zsxq/project/openai-code-review.html'
+ text: '本地任务消息组件',
+ link: '/md/project/local-task-message/local-task-message.md'
+ },
+ {
+ text: '通用技术组件 - 🔧扳手工程',
+ link: 'https://bugstack.cn/md/zsxq/project/xfg-wrench.html'
},
{
text: '透视业务流程-监控系统',
@@ -430,11 +434,19 @@ module.exports = {
]
},
{
- text: '其他类型', items: [
+ text: '自学类型', items: [
{
- text: '小场景训练营',
+ text: '场景案例',
link: '/md/project/ddd-scene-solution/alipay-sandbox.md'
},
+ {
+ text: '吉祥外卖',
+ link: '/md/project/lucky-tackout/lucky-tackout.md'
+ },
+ {
+ text: '钓鱼佬',
+ link: '/md/project/xfg-fish-pond/xfg-fish-pond.md'
+ },
]
},
]
@@ -444,7 +456,7 @@ module.exports = {
link: '/md/zsxq/introduce.md'
},
{
- text: '📝产品',
+ text: '📝产品(ai ide)',
items: [
{
text: '出版物', items: [
@@ -486,7 +498,15 @@ module.exports = {
text: '插件', items: [
{
text: '💱 IDEA Plugin vo2dto —— 对象转换插件',
- link: '/md/product/idea-plugin/vo2dto.md'
+ link: '/md/product/idea-plugin/vo2dto-v2.5.5.md'
+ },
+ ]
+ },
+ {
+ text: 'AI IDE', items: [
+ {
+ text: '👨🏻💻WaLiCode,AI IDE Coding',
+ link: '/md/product/software/walicode.md'
},
]
},
@@ -546,10 +566,16 @@ module.exports = {
"/md/project/chatbot-api/": getBarProjectChatBotApi(),
"/md/project/big-market/": getBarBigMarket(),
"/md/project/s-pay-mall/": getBarSPayMall(),
- "/md/project/ddd-scene-solution/": getBarDDDSceneSolution(),
+ "/md/project/group-buy-market/": getBarGroupBuyMarket(),
+ "/md/project/ai-knowledge/": getBarAiRagKnowledge(),
+ "/md/project/ai-agent-scaffold/": getBarAIAgentScaffold(),
+ "/md/project/ai-mcp-gateway/": getBarAIMCPGateway(),
+ "/md/project/local-task-message/": getBarLocalTaskMessage(),
+ "/md/project/": getBarDDDSceneSolution(),
"/md/zsxq/": getBarZSXQ(),
"/md/product/": getBarProduct(),
"/md/road-map/": genBarGuide(),
+ "/md/ai/": genBarAI(),
"/md/about/": genBarAbout()
}
}
@@ -572,15 +598,52 @@ function genBarOther() {
]
}
+function genBarAI() {
+ return [
+ {
+ title: "框架",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "spring-ai.md",
+ "google-adk.md",
+ ]
+ },
+ {
+ title: "组件",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "agent-skill.md",
+ "a2a.md",
+ ]
+ },
+ {
+ title: "工具",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "draw.io.md",
+ "qclaw.md",
+ "openclaw.md",
+ "ai-ssh-opencode.md",
+ "github-models.md",
+ "trae.md",
+ ]
+ },
+ ]
+}
+
function genBarGuide() {
return [
{
- title: "简明教程(2)",
+ title: "简明教程(3)",
collapsable: false,
- sidebarDepth: 2,
+ sidebarDepth: 3,
children: [
"road-map.md",
- "introduce.md"
+ "introduce.md",
+ "cainiao.md",
]
},
{
@@ -593,11 +656,12 @@ function genBarGuide() {
]
},
{
- title: "系统架构(9)",
+ title: "系统架构(10)",
collapsable: false,
sidebarDepth: 0,
children: [
"mvc.md",
+ "ddd-guide-00.md",
"ddd-guide-01.md",
"ddd-guide-02.md",
"ddd-guide-03.md",
@@ -609,20 +673,26 @@ function genBarGuide() {
]
},
{
- title: "开发环境(6)",
+ title: "开发环境(12)",
collapsable: false,
sidebarDepth: 0,
children: [
+ "tool.md",
"intellij-idea.md",
"maven.md",
+ "maven-central.md",
"git.md",
"github.md",
"gitcode.md",
"gitee.md",
+ "mac.md",
+ "nas.md",
+ "trae.md",
+ "joycode.md",
]
},
{
- title: "开发技术(16)",
+ title: "开发技术(19)",
collapsable: true,
sidebarDepth: 0,
children: [
@@ -642,6 +712,19 @@ function genBarGuide() {
"redis.md",
"ignite.md",
"canal.md",
+ "springcloud-feign.md",
+ "springcloud-stream.md",
+ "springcloud-bus.md",
+ ]
+ },
+ {
+ title: "授权框架(3)",
+ collapsable: true,
+ sidebarDepth: 0,
+ children: [
+ "spring-security.md",
+ "spring-oauth2.md",
+ "spring-oauth2-sso-01.md",
]
},
{
@@ -653,20 +736,37 @@ function genBarGuide() {
"guava.md",
"http.md",
"ratelimiter.md",
+ "disruptor.md",
+ ]
+ },
+ {
+ title: "智能组件(8)",
+ collapsable: true,
+ sidebarDepth: 0,
+ children: [
"spring-ai.md",
+ "google-adk.md",
+ "agent-skill.md",
+ "a2a.md",
+ "draw.io.md",
+ "ai-ssh-opencode.md",
+ "github-models.md",
+ "openclaw.md",
]
},
{
- title: "工程测试(2)",
+ title: "工程测试(4)",
collapsable: true,
sidebarDepth: 0,
children: [
"mock.md",
"jmeter.md",
+ "intellij-idea-remote-jvm-debug.md",
+ "arex-test.md",
]
},
{
- title: "质量监控(4)",
+ title: "质量监控(7)",
collapsable: true,
sidebarDepth: 0,
children: [
@@ -674,32 +774,45 @@ function genBarGuide() {
"grafana.md",
"elk.md",
"dump-mat.md",
+ "dump-visualvm.md",
+ "arthas.md",
+ "13scan-jdumpspider.md",
]
},
{
- title: "发布部署(11)",
+ title: "发布部署(20)",
collapsable: true,
sidebarDepth: 0,
children: [
+ "cloud-server.md",
"linux.md",
+ "1panel.md",
+ "docker-what.md",
"docker.md",
+ "docker-install.md",
+ "docker-deploy-project.md",
"portainer.md",
- "nginx.md",
- "ssl.md",
- "ssl-httpsok.md",
- "jenkins.md",
- "buddy.md",
+ "aliyun-workbench.md",
"github-actions-workflows.md",
+ "buddy.md",
"private-docker-hub.md",
"docker-idea.md",
+ "jenkins.md",
+ "frp.md",
+ "nginx.md",
+ "ssl.md",
+ "ssl-httpsok.md",
+ "ollama.md",
+ "aigc.md",
]
},
{
- title: "应用网关(3)",
+ title: "应用网关(4)",
collapsable: true,
sidebarDepth: 0,
children: [
"higress.md",
+ "higress-ai.md",
"springcloud-gateway.md",
"apisix.md",
]
@@ -830,6 +943,7 @@ function genAlgorithmModel() {
"2023-02-12-chat-gpt.md",
"2023-02-18-gpt2-chitchat.md",
"2023-05-21-chatglm-6b.md",
+ "autoglm-phone-agent.md",
]
}
]
@@ -1762,9 +1876,10 @@ function getBarZSXQ() {
children: [
"introduce.md",
"material/guide.md",
- "material/student-learn-all.md",
+ // "material/student-learn-all.md",
"material/student-learn-line.md",
- "material/student-learn-recruit.md",
+ // "material/student-learn-recruit.md",
+ "material/student-learn-advanced.md",
]
},
{
@@ -1775,22 +1890,36 @@ function getBarZSXQ() {
"material/architecture_design.md",
"material/interview.md",
"material/dialogue-skills.md",
+ "material/speaking-skills.md",
"material/notes.md",
"material/study-experience.md",
"material/exam.md",
]
},
+ {
+ title: "创新项目(AI)",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "project/ai-agent-scaffold.md",
+ "project/ai-mcp-gateway.md",
+ "project/ai-knowledge.md",
+ "project/openai-code-review.md",
+ "project/chatgpt.md",
+ "project/chatbot-api.md",
+ "project/openai-sdk-java.md",
+ ]
+ },
{
title: "业务项目",
collapsable: false,
sidebarDepth: 0,
children: [
+ "project/group-buy-market.md",
"project/s-pay-mall.md",
"project/big-market.md",
- "project/chatgpt.md",
"project/lottery.md",
"project/im.md",
- "project/chatbot-api.md",
]
},
{
@@ -1798,11 +1927,11 @@ function getBarZSXQ() {
collapsable: false,
sidebarDepth: 0,
children: [
- "project/openai-code-review.md",
+ "project/local-task-message.md",
+ "project/xfg-wrench.md",
"project/business-behavior-monitor.md",
"project/dynamic-thread-pool.md",
"project/ltzf-sdk-java.md",
- "project/openai-sdk-java.md",
"project/api-gateway.md",
"project/springboot-starter.md",
"booklet/idea-plugin.md",
@@ -1858,6 +1987,7 @@ function getBarZSXQ() {
collapsable: true,
sidebarDepth: 0,
children: [
+ "memorabilia/sideline.md",
"memorabilia/seven-thousand.md",
"memorabilia/ten-thousand.md",
"memorabilia/overall.md",
@@ -1868,6 +1998,9 @@ function getBarZSXQ() {
"memorabilia/student-offer.md",
"memorabilia/project-plan-v2406.md",
"memorabilia/xiaofuge-team.md",
+ "memorabilia/java-interview-experience.md",
+ "memorabilia/campus-recruitment-offer.md",
+ "memorabilia/job-hire-jd.md",
]
}
]
@@ -1875,6 +2008,14 @@ function getBarZSXQ() {
function getBarProduct() {
return [
+ {
+ title: "AI IDE",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "software/walicode.md",
+ ]
+ },
{
title: "出版物",
collapsable: false,
@@ -1903,8 +2044,10 @@ function getBarProduct() {
children: [
"idea-plugin/vo2dto.md",
"idea-plugin/vo2dto-v2.5.1.md",
+ "idea-plugin/vo2dto-v2.5.5.md",
]
},
+
]
}
@@ -2168,6 +2311,371 @@ function getBarProjectChatGPT() {
]
}
+function getBarAIMCPGateway() {
+ return [
+ {
+ title: "介绍",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "ai-mcp-gateway.md",
+ ]
+ },
+ {
+ title: "第1部分:系统设计",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第1-1节:网关需求分析.md",
+ "第1-2节:系统建模设计.md",
+ "第1-3节:网关协议表.md",
+ "第1-4节:升级网关库表.md",
+ ]
+ },
+ {
+ title: "第2部分:协议分析",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第2-1节:MCP服务实现.md",
+ "第2-2节:MCP代理调用.md",
+ "第2-3节:MCP通信协议.md",
+ ]
+ },
+ {
+ title: "第3部分:网关实现",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第3-1节:工程初始化创建.md",
+ "第3-2节:会话管理服务实现.md",
+ "第3-3节:会话接口编排.md",
+ "第3-4节:会话消息结构设计.md",
+ "第3-5节:消息协议处理案例.md",
+ "第3-6节:基础层数据处理.md",
+ "第3-7节:协议消息处理-Initialize.md",
+ "第3-8节:协议消息处理-ToolsList.md",
+ "第3-9节:协议消息处理-ToolsCall.md",
+ "第3-10节:评审库表升级代码.md",
+ "第3-11节:会话内容编排处理.md",
+ "第3-12节:鉴权功能领域服务.md",
+ "第3-13节:鉴权功能编排处理.md",
+ "第3-14节:解析Swagger标准OpenAPI协议.md",
+ "第3-15节:协议域-协议解析处理.md",
+ "第3-16节:协议域-协议存储处理.md",
+ "第3-17节:网关域-配置数据存储(CRUD).md",
+ "第3-18节:管理端-API功能编排串联.md",
+ "第3-19节:管理端-API与UI对接.md",
+ "none.md",
+ ]
+ },
+ ]
+}
+
+function getBarLocalTaskMessage() {
+ return [
+ {
+ title: "介绍",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "local-task-message.md",
+ ]
+ },
+ {
+ title: "课程",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第1节:组件需求分析.md",
+ "第2节:SpringEvent事件消息.md",
+ "第3节:任务表设计和数据写入.md",
+ "第4节:通知策略处理.md",
+ "第5节:动态任务补偿处理.md",
+ "第6节:切面拦截任务操作.md",
+ ]
+ }
+ ]
+}
+
+function getBarAIAgentScaffold() {
+ return [
+ {
+ title: "介绍",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "ai-agent-scaffold.md",
+ "notes.md",
+ ]
+ },
+ {
+ title: "1阶段 - 做设计",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "part-1/第1-1节:脚手架需求分析.md",
+ "part-1/第1-2节:系统架构设计.md",
+ ]
+ },
+ {
+ title: "2阶段 - 智能体",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "part-2/第2-1节:工程初始化创建.md",
+ "part-2/第2-2节:Api功能测试.md",
+ "part-2/第2-3节:智能体配置表设计.md",
+ "part-2/第2-4节:装配域结构化定义.md",
+ "part-2/第2-5节:装配域节点-AiApiNode.md",
+ "part-2/第2-6节:装配域节点-ChatModelNode.md",
+ "part-2/第2-7节:装配域节点-AgentNode.md",
+ "part-2/第2-8节:装配域节点-AgentWorkflowNode.md",
+ "part-2/第2-9节:装配域节点-Loop、Parallel、Sequential.md",
+ "part-2/第2-10节:装配域节点-RunnerNode.md",
+ "part-2/第2-11节:智能体加载使用验证.md",
+ "part-2/第2-12节:增强装配-RunnerNode.md",
+ "part-2/第2-13节:增强装配-AgentWorkflowNode.md",
+ "part-2/第2-14节:增强装配-本地mcp.md",
+ "part-2/第2-15节:增强装配-回调plugin.md",
+ "part-2/第2-16节:fix-多模态能力使用.md",
+ "part-2/第2-17节:会话服务接口实现-service.md",
+ "part-2/第2-18节:会话服务接口实现-trigger.md",
+ "part-2/第2-19节:会话服务接口对接-ui.md",
+ "part-2/第2-20节:增强装配-skills.md",
+ ]
+ },
+ {
+ title: "3阶段 - 脚手架",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "part-3/第3-1节:Maven脚手架配置.md",
+ "part-3/第3-2节:上传jar到maven仓库.md",
+ "part-3/第3-3节:部署脚手架网页.md",
+ ]
+ },
+ {
+ title: "4阶段 - 场景 - draw.io",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "part-4/第4-0节:ai + draw.io 产品设计.md",
+ "part-4/第4-1节:初始化工程搭建.md",
+ "part-4/第4-2节:在页面嵌入draw.io组件和对话框.md",
+ "part-4/第4-3节:智能体API接口对接.md",
+ "part-4/第4-4节:AI+用户+DrawIO,交互式画图.md",
+ "part-4/第4-5节:ai-draw-io,云服务器部署.md",
+ ]
+ },
+ {
+ title: "5阶段 - 场景 - MobileOpenClaw",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "part-5/第5-1节:初始化工程搭建.md",
+ "part-5/第5-2节:手机网关动作调度设计.md",
+ "part-5/第5-3节:服务端网络通信设计(Netty).md",
+ "part-5/第5-4节:初步通过智能体,操作手机设备.md",
+ "part-5/第5-5节:智能体工作流设计.md",
+ "part-5/第5-6节:智能体异步响应展示执行过程.md",
+ "part-5/第5-7节:使用AutoGLM-Phone-9B构建手机智能体.md",
+ "part-5/第5-8节:多版本安卓版本策略支持.md",
+ "part-5/第5-9节:会话上下文细化处理.md",
+ ]
+ }
+ ]
+}
+
+function getBarAiRagKnowledge() {
+ return [
+ {
+ title: "介绍",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "ai-knowledge.md",
+ "notes.md",
+ ]
+ },
+ {
+ title: "1阶段 RAG spring-ai v0.8.1",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第1节:AI RAG 知识库,项目介绍.md",
+ "第2节:初始化知识库工程&提交代码.md",
+ "第3接:Ollama DeepSeek 流式应答接口实现.md",
+ "第4节:Ollama DeepSeek 流式应答页面对接.md",
+ "第5节:Ollama RAG 知识库上传、解析和验证.md",
+ "第6节:Ollama RAG 知识库接口服务实现.md",
+ "第7节:基于AI工具,设计知识库UI和接口对接.md",
+ "第8节:Git仓库代码库解析到知识库.md",
+ "第9节:扩展OpenAI模型对接,以及完整AI对接.md",
+ "第10节:云服务器部署知识库(Docker、Nginx).md",
+ ]
+ },
+ {
+ title: "2阶段 MCP spring-ai v1.0.0",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第11节:吃上细糠,升级SpringAI框架.md",
+ "第12节:康庄大道,上手 AI MCP 工作流.md",
+ "第13节,道山学海,实现MCP自动发帖服务.md",
+ "第14节:海纳百川,上线MCP自动发帖服务.md",
+ "第15节:川流不息,实现MCP微信公众号消息通知服务.md",
+ "第16节:息息相通,MCP 服务部署上线(sse 模式).md",
+ ]
+ },
+ {
+ title: "3阶段 Agent spring-ai v1.0.0",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "agent/第3-0节:AiAgent 项目介绍和系统演示.md",
+ "agent/第3-1节:Ai Agent 业务流程、系统架构、库表设计说明.md",
+ "agent/第3-2节:初始化项目工程.md",
+ "agent/第3-3节:AiAgent测试案例.md",
+ "agent/第3-4节:根据AiAgent案例,设计库表.md",
+ "agent/第3-5节:多数据源和Mapper配置.md",
+ "agent/第3-6节:数据加载模型设计.md",
+ "agent/第3-7节:动态实例化客户端API.md",
+ "agent/第3-8节:动态实例化对话模型.md",
+ "agent/第3-9节:动态实例化对话客户端.md",
+ "agent/第3-10节:Agent执行链路分析.md",
+ "agent/第3-11节:Agent执行链路设计.md",
+ "agent/第3-12节:Agent服务接口和UI对接.md",
+ "agent/第3-13节,Agent-ELK日志分析场景.md",
+ "agent/第3-14节,Agent-Prometheus监控分析场景.md",
+ "agent/第3-15节:FlowAgent执行链路分析.md",
+ "agent/第3-16节:FlowAgent执行链路设计.md",
+ "agent/第3-17节:增加调度器策略执行Agent链路.md",
+ "agent/第3-18节:动态执行智能体任务.md",
+ "agent/第3-19节:拖拉拽编排数据存储.md",
+ "agent/第3-20节:Agent管理后台实现.md",
+ "agent/第3-21节:在云服务器部署上线.md",
+ ]
+ },
+ {
+ title: "扩展",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "ext/ai-agent-flowgram.md",
+ "ext/ai-agent-mcp-auth.md",
+ "ext/ai-agent-auto.md",
+ "ext/ai-agent-notes.md",
+ "ext/ai-agent-job.md",
+ "promotion/AI MCP 已经帮我“干活”了!.md",
+ "promotion/AI MCP 再这么用下去,可就要”创业“变现了呀!.md",
+ ]
+ }
+ ]
+}
+
+function getBarGroupBuyMarket() {
+ return [
+ {
+ title: "介绍",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "group-buy-market.md",
+ "notes.md",
+ "qa.md",
+ ]
+ },
+ {
+ title: "第1部分:系统设计",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第1-1节:拼团需求分析.md",
+ "第1-2节:拼团库表设计.md",
+ "第1-3节:研发系统设计.md",
+ ]
+ },
+ {
+ title: "第2部分:服务实现",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第2-1节:初始工程搭建.md",
+ "第2-2节:试算模型抽象模板设计.md",
+ "第2-3节:多线程异步数据加载.md",
+ "第2-4节:策略模式优惠折扣计算.md",
+ "第2-5节:人群标签数据采集.md",
+ "第2-6节:拆分库表关联关系.md",
+ "第2-7节:人群标签节点过滤.md",
+ "第2-8节:动态配置开关操作.md",
+ "第2-9节:拼团交易营销锁单.md",
+ "第2-10节:责任链抽象模板设计.md",
+ "第2-11节:交易规则责任链过滤.md",
+ "第2-12节:拼团组队结算统计.md",
+ "第2-13节:交易结算责任链过滤.md",
+ "第2-14节:拼团回调通知任务.md",
+ "第2-15节:根据UI展示封装接口.md",
+ "第2-16节:引入RabbitMQ分布式多端消费.md",
+ "第2-17节:发送MQ结算消息.md",
+ "第2-18节:消费MQ结算消息.md",
+ "第2-19节:独占锁和无锁化场景运用.md",
+ "第2-20节:函数式数据缓存和降级到DB处理.md",
+ "第2-21节:引入扳手工程.md",
+ "第2-22节:动态限流配置.md",
+ "第2-23节:ELK+AI MCP检索.md",
+ "第2-24节:系统监控+AIMCP分析.md",
+ "第2-25节:逆向流程场景分析.md",
+ "第2-26节:未支付退单流程.md",
+ "第2-27节:已支付未成团退单.md",
+ "第2-28节:已支付已成团退单.md",
+ "第2-29节:退单锁单量恢复.md",
+ "第2-30节:设计模式重构退单.md",
+ "第2-31节:退订接口和定时任务.md",
+ ]
+ },
+ {
+ title: "第3部分:外部对接",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第3-1节:DeepSeek设计拼团UI.md",
+ "第3-2节:DeepSeek处理UI与接口对接.md",
+ "第3-3节:小商城对接营销锁单.md",
+ "第3-4节:小商城对接营销结算.md",
+ "第3-5节:小商城UI与接口对接.md",
+ "第3-6节:通过浏览器指纹获取登录ticket无痕登录.md",
+ "第3-7节:用户订单列表和退单UI.md",
+ "第3-8节:退单退款服务对接.md",
+ ]
+ },
+ {
+ title: "第4部分:开发运维",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "第4-1节:第1阶段部署云环境.md",
+ "第4-2节:第2阶段部署云环境.md",
+ "第4-3节:第3阶段部署云环境.md",
+ ]
+ },
+ {
+ title: "番外 - 课程阶段产物",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "promotion/group-buy-market-v1.md",
+ "promotion/group-buy-market-v2.md",
+ "promotion/group-buy-market-v3.md",
+ "promotion/group-buy-market-v4.md",
+ "promotion/group-buy-market-v5.md",
+ "promotion/group-buy-market-v6.md",
+ "promotion/group-buy-market-v7.md",
+ ]
+ }
+ ]
+}
+
function getBarSPayMall() {
return [
{
@@ -2209,6 +2717,8 @@ function getBarSPayMall() {
"part-3-mvc/第4节:商品下单.md",
"part-3-mvc/第5节:对接支付.md",
"part-3-mvc/第6节:支付回调.md",
+ "part-3-mvc/第7节:前端页面.md",
+ "part-3-mvc/第8节:Docker构建和部署.md",
]
},
{
@@ -2222,6 +2732,8 @@ function getBarSPayMall() {
"part-3-ddd/第4节:DDD 重构,商品下单.md",
"part-3-ddd/第5节:DDD 重构,对接支付.md",
"part-3-ddd/第6节:DDD 重构,支付回调.md",
+ "part-3-ddd/第7节:前端页面.md",
+ "part-3-ddd/第8节:Docker构建和部署.md",
]
},
{
@@ -2232,7 +2744,6 @@ function getBarSPayMall() {
"part-4/第1节:natapp 内网穿透.md",
"part-4/第2节:微信公众号测试评审申请.md",
"part-4/第3节:支付宝沙箱申请.md",
- "part-4/第4节:项目上线.md",
]
}
]
@@ -2247,7 +2758,9 @@ function getBarBigMarket() {
children: [
"big-market.md",
"ddd.md",
+ "system-design-diagram.md",
"notes.md",
+ "qa.md",
]
},
{
@@ -2269,6 +2782,7 @@ function getBarBigMarket() {
"dev-ops/第1节:使用脚手架创建工程.md",
"dev-ops/第2节:第一阶段完成抽奖部署.md",
"dev-ops/第3节:引入Nacos+Dubbo框架.md",
+ "dev-ops/openai_big_market.md",
]
},
{
@@ -2303,12 +2817,12 @@ function getBarBigMarket() {
"api/第25节:积分发奖服务实现.md",
"api/第26节:积分领域调额服务.md",
"api/第27节:积分支付兑换商品.md",
+ "api/第28节:积分应用场景接口实现.md",
"api/第29节:分布式动态配置活动降级.md",
"api/第30节:分布式动态限流和熔断.md",
"api/第31节:分库分表数据同步ES.md",
"api/第32节:ES-ORM多数据源配置使用.md",
"api/第33节:xxl-job分布式任务调度.md",
- "none.md",
]
},
{
@@ -2326,10 +2840,22 @@ function getBarBigMarket() {
},
{
title: "第5部分:后台管理",
- collapsable: true,
+ collapsable: false,
sidebarDepth: 0,
children: [
"erp/第1节:初始后台运营页面.md",
+ "erp/第2节:querys模块提供查询接口.md",
+ ]
+ },
+ {
+ title: "第6部分:外部对接",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "distributed/第1节:对接OpenAI项目额度奖品接口.md",
+ "distributed/第2节:营销页面接口封装.md",
+ "distributed/第3节:RPC接口对接支付返利.md",
+ "distributed/第4节:活动上架发布预热对接.md",
]
},
{
@@ -2343,6 +2869,7 @@ function getBarBigMarket() {
"extra/big-market-v4.md",
"extra/big-market-v5.md",
"extra/big-market-v6.md",
+ "extra/big-market-v7.md",
]
}
]
@@ -2351,14 +2878,23 @@ function getBarBigMarket() {
function getBarDDDSceneSolution() {
return [
{
- title: "课程",
+ title: "案例",
collapsable: false,
sidebarDepth: 0,
children: [
- "alipay-sandbox.md",
- "openai-tldraw.md",
- "sensitive-word-content-moderation.md",
- "weixin-login.md",
+ "ddd-scene-solution/alipay-sandbox.md",
+ "ddd-scene-solution/openai-tldraw.md",
+ "ddd-scene-solution/sensitive-word-content-moderation.md",
+ "ddd-scene-solution/weixin-login.md",
+ ]
+ },
+ {
+ title: "项目",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "lucky-tackout/lucky-tackout.md",
+ "xfg-fish-pond/xfg-fish-pond.md",
]
},
]
@@ -2454,16 +2990,26 @@ function getBarProjectLottery() {
function genBarAbout() {
return [
{
- title: "关于自己",
+ title: "年终总结",
collapsable: false,
sidebarDepth: 0,
children: [
- "me/about-me.md",
- "me/2020-03-31-大学四年到毕业工作5年的学习路线资源汇总.md",
"me/2020-12-27-2020总结,作为技术号主的一年!.md",
"me/2022-01-27-2021年,小傅哥の年终总结!.md",
"me/2023-01-02-2022年,小傅哥の年终总结.md",
"me/2024-02-07-2023年,小傅哥の年终总结.md",
+ "me/2025-01-05-2024年,小傅哥の年终总结!.md",
+ "me/2025-01-04-2025年,小傅哥の年终总结.md",
+ ]
+ },
+ {
+ title: "关于自己",
+ collapsable: false,
+ sidebarDepth: 0,
+ children: [
+ "me/about-me.md",
+ "me/2020-03-31-大学四年到毕业工作5年的学习路线资源汇总.md",
+
"me/2020-07-25-12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜.md",
"me/2020-08-25-13年毕业,用两年时间从外包走进互联网大厂.md",
"me/2020-10-09-让人怪不好意思的,粉丝破万,用了1年!.md",
@@ -2482,6 +3028,8 @@ function genBarAbout() {
"me/2023-05-07-51假期代码旅游.md",
"me/2024-01-09-从T4到T8,4年时间,4次晋升。技术提升最快的那几年,我做了什么?.md",
"me/2024-01-28-大厂架构师小傅哥,上学时都做过哪些项目?.md",
+ "me/2024-11-17-gold-content.md",
+ "me/2025-07-03-嘎嘎强,嘎嘎哒学v2.0.md",
]
},
{
@@ -2527,6 +3075,9 @@ function genBarAbout() {
"job/2023-03-19-你简历没项目,你得遭老罪喽!.md",
"job/2023-07-11-面试官都问你啥了.md",
"job/2023-09-13-工作内推.md",
+ "job/2024-09-08-阿里P7,就是很多人的天花板吗?.md",
+ "job/2025-11-16-现在转AI应用开发,是不是个机会?.md",
+ "job/2026-03-21-古法编程,是否还重要?.md",
]
}
];
diff --git a/docs/.vuepress/public/images/article/about/about-241117-01.gif b/docs/.vuepress/public/images/article/about/about-241117-01.gif
new file mode 100644
index 000000000..07bee7721
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-01.gif differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-02.png b/docs/.vuepress/public/images/article/about/about-241117-02.png
new file mode 100644
index 000000000..c81295834
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-03.png b/docs/.vuepress/public/images/article/about/about-241117-03.png
new file mode 100644
index 000000000..248346345
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-04.png b/docs/.vuepress/public/images/article/about/about-241117-04.png
new file mode 100644
index 000000000..c4a64f1e2
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-04.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-05.png b/docs/.vuepress/public/images/article/about/about-241117-05.png
new file mode 100644
index 000000000..ef474068f
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-05.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-06.png b/docs/.vuepress/public/images/article/about/about-241117-06.png
new file mode 100644
index 000000000..1f1d5d2dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-06.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-07.png b/docs/.vuepress/public/images/article/about/about-241117-07.png
new file mode 100644
index 000000000..275bd7b5e
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-07.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-01.png b/docs/.vuepress/public/images/article/about/about-250713-01.png
new file mode 100644
index 000000000..86b676bd2
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-01.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-02.png b/docs/.vuepress/public/images/article/about/about-250713-02.png
new file mode 100644
index 000000000..0b2121fe6
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-03.png b/docs/.vuepress/public/images/article/about/about-250713-03.png
new file mode 100644
index 000000000..3d4172f37
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-04.png b/docs/.vuepress/public/images/article/about/about-250713-04.png
new file mode 100644
index 000000000..4c81ec588
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-04.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-05.png b/docs/.vuepress/public/images/article/about/about-250713-05.png
new file mode 100644
index 000000000..dbe75d24b
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-05.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-06.png b/docs/.vuepress/public/images/article/about/about-250713-06.png
new file mode 100644
index 000000000..137c4bfa8
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-06.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-07.png b/docs/.vuepress/public/images/article/about/about-250713-07.png
new file mode 100644
index 000000000..7a3ad83a2
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-07.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-08.png b/docs/.vuepress/public/images/article/about/about-250713-08.png
new file mode 100644
index 000000000..12a8db470
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-08.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-interview-250823-01.png b/docs/.vuepress/public/images/article/about/about-interview-250823-01.png
new file mode 100644
index 000000000..aadee0905
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-interview-250823-01.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-01.gif b/docs/.vuepress/public/images/article/about/about-job-240908-01.gif
new file mode 100644
index 000000000..c97e3cb2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-01.gif differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-02.png b/docs/.vuepress/public/images/article/about/about-job-240908-02.png
new file mode 100644
index 000000000..b012d4915
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-03.png b/docs/.vuepress/public/images/article/about/about-job-240908-03.png
new file mode 100644
index 000000000..b4fa9e891
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-04.png b/docs/.vuepress/public/images/article/about/about-job-240908-04.png
new file mode 100644
index 000000000..c59887462
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-04.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-ai-code-01.png b/docs/.vuepress/public/images/article/about/about-job-ai-code-01.png
new file mode 100644
index 000000000..45612a6ee
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-ai-code-01.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-ai-code-02.png b/docs/.vuepress/public/images/article/about/about-job-ai-code-02.png
new file mode 100644
index 000000000..438d1c88d
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-ai-code-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-ai-code-03.png b/docs/.vuepress/public/images/article/about/about-job-ai-code-03.png
new file mode 100644
index 000000000..ee6c677ce
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-ai-code-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-ai-code-04.png b/docs/.vuepress/public/images/article/about/about-job-ai-code-04.png
new file mode 100644
index 000000000..a722f6866
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-ai-code-04.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-ai-code-05.png b/docs/.vuepress/public/images/article/about/about-job-ai-code-05.png
new file mode 100644
index 000000000..256e3d9bb
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-ai-code-05.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-ai-code-06.png b/docs/.vuepress/public/images/article/about/about-job-ai-code-06.png
new file mode 100644
index 000000000..9c1e4119e
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-ai-code-06.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-me-25-01.png b/docs/.vuepress/public/images/article/about/about-me-25-01.png
new file mode 100644
index 000000000..22a5f6e63
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-me-25-01.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-me-25-02.png b/docs/.vuepress/public/images/article/about/about-me-25-02.png
new file mode 100644
index 000000000..b2adfc1f6
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-me-25-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-me-25-03.png b/docs/.vuepress/public/images/article/about/about-me-25-03.png
new file mode 100644
index 000000000..7e270fe5a
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-me-25-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/ai-agent-job-01.png b/docs/.vuepress/public/images/article/about/ai-agent-job-01.png
new file mode 100644
index 000000000..a853d8cbd
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/ai-agent-job-01.png differ
diff --git a/docs/.vuepress/public/images/article/about/ai-agent-job-02.png b/docs/.vuepress/public/images/article/about/ai-agent-job-02.png
new file mode 100644
index 000000000..bafd0d5fb
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/ai-agent-job-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/ai-agent-job-03.png b/docs/.vuepress/public/images/article/about/ai-agent-job-03.png
new file mode 100644
index 000000000..e6b4db398
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/ai-agent-job-03.png differ
diff --git "a/docs/.vuepress/public/images/article/about/\345\255\246\344\271\240\350\267\257\347\272\277.xmind" "b/docs/.vuepress/public/images/article/about/\345\255\246\344\271\240\350\267\257\347\272\277.xmind"
deleted file mode 100644
index bec517734..000000000
Binary files "a/docs/.vuepress/public/images/article/about/\345\255\246\344\271\240\350\267\257\347\272\277.xmind" and /dev/null differ
diff --git a/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-01.png b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-01.png
new file mode 100644
index 000000000..73d0010a8
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-01.png differ
diff --git a/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-02.png b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-02.png
new file mode 100644
index 000000000..aa70d7799
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-02.png differ
diff --git a/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-03.png b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-03.png
new file mode 100644
index 000000000..2de7fc584
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-03.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-00.png b/docs/.vuepress/public/images/article/product/software/product-walicode-00.png
new file mode 100644
index 000000000..c6cb4d13c
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-00.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-01.png b/docs/.vuepress/public/images/article/product/software/product-walicode-01.png
new file mode 100644
index 000000000..a5ca4bbca
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-01.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-02.png b/docs/.vuepress/public/images/article/product/software/product-walicode-02.png
new file mode 100644
index 000000000..85df57845
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-02.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-03.png b/docs/.vuepress/public/images/article/product/software/product-walicode-03.png
new file mode 100644
index 000000000..3f89becd6
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-03.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-04.png b/docs/.vuepress/public/images/article/product/software/product-walicode-04.png
new file mode 100644
index 000000000..6c145f6db
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-04.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-05.png b/docs/.vuepress/public/images/article/product/software/product-walicode-05.png
new file mode 100644
index 000000000..3f89becd6
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-05.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-06.png b/docs/.vuepress/public/images/article/product/software/product-walicode-06.png
new file mode 100644
index 000000000..dbcc4dd94
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-06.png differ
diff --git a/docs/.vuepress/public/images/article/product/software/product-walicode-07.png b/docs/.vuepress/public/images/article/product/software/product-walicode-07.png
new file mode 100644
index 000000000..90c3473f8
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/software/product-walicode-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/ai-agent-scaffold.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/ai-agent-scaffold.png
new file mode 100644
index 000000000..ad5ff84e6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/ai-agent-scaffold.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-0-0-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-0-0-01.png
new file mode 100644
index 000000000..4b0cad0f1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-0-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-01.png
new file mode 100644
index 000000000..c4f70f510
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-02.png
new file mode 100644
index 000000000..c92739856
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-03.png
new file mode 100644
index 000000000..0d72f852c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-0/images/ai-agent-scaffold-mobileopenclaw-260307-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-01.png
new file mode 100644
index 000000000..ca2f8ce62
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-02.png
new file mode 100644
index 000000000..6d47c797f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-03.png
new file mode 100644
index 000000000..2e066f914
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-04.png
new file mode 100644
index 000000000..851f16dd2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-05.png
new file mode 100644
index 000000000..040b9e8e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-06.png
new file mode 100644
index 000000000..b2f6d1b8c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-07.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-07.png
new file mode 100644
index 000000000..b47852838
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-08.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-08.png
new file mode 100644
index 000000000..a63c2a826
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-09.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-09.png
new file mode 100644
index 000000000..e3a12db64
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-10.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-10.png
new file mode 100644
index 000000000..1543caaba
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ai-agent-scaffold-1-1-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ppt.pptx b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ppt.pptx
new file mode 100644
index 000000000..a85d6f698
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-1/images/ppt.pptx differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-01.png
new file mode 100644
index 000000000..758751459
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-02.png
new file mode 100644
index 000000000..469fc7c0b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-03.png
new file mode 100644
index 000000000..2a0ef5509
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-04.png
new file mode 100644
index 000000000..0cfb1c63f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-05.png
new file mode 100644
index 000000000..e370f0354
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-1/1-2/images/ai-agent-scaffold-1-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-01.png
new file mode 100644
index 000000000..485753b6c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-02.png
new file mode 100644
index 000000000..b660adc6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-03.png
new file mode 100644
index 000000000..cf4be75d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-1/images/ai-agent-scaffold-2-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-10/images/ai-agent-scaffold-2-10-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-10/images/ai-agent-scaffold-2-10-01.png
new file mode 100644
index 000000000..229a3b43a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-10/images/ai-agent-scaffold-2-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-10/images/ai-agent-scaffold-2-10-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-10/images/ai-agent-scaffold-2-10-02.png
new file mode 100644
index 000000000..8fbeaccfa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-10/images/ai-agent-scaffold-2-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-11/images/ai-agent-scaffold-2-11-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-11/images/ai-agent-scaffold-2-11-01.png
new file mode 100644
index 000000000..2b67697d9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-11/images/ai-agent-scaffold-2-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-11/images/ai-agent-scaffold-2-11-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-11/images/ai-agent-scaffold-2-11-02.png
new file mode 100644
index 000000000..004765e3f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-11/images/ai-agent-scaffold-2-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-01.png
new file mode 100644
index 000000000..1cfc8c21d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-02.png
new file mode 100644
index 000000000..30f9c172c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-03.png
new file mode 100644
index 000000000..c9457310f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-04.png
new file mode 100644
index 000000000..a8492b570
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-12/images/ai-agent-scaffold-2-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-13/images/ai-agent-scaffold-2-13-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-13/images/ai-agent-scaffold-2-13-01.png
new file mode 100644
index 000000000..9bf59bbc9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-13/images/ai-agent-scaffold-2-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-13/images/ai-agent-scaffold-2-13-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-13/images/ai-agent-scaffold-2-13-02.png
new file mode 100644
index 000000000..63bf34203
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-13/images/ai-agent-scaffold-2-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-14/images/ai-agent-scaffold-2-14-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-14/images/ai-agent-scaffold-2-14-01.png
new file mode 100644
index 000000000..1f3c17c7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-14/images/ai-agent-scaffold-2-14-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-14/images/ai-agent-scaffold-2-14-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-14/images/ai-agent-scaffold-2-14-02.png
new file mode 100644
index 000000000..8660965b1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-14/images/ai-agent-scaffold-2-14-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-15/images/ai-agent-scaffold-2-15-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-15/images/ai-agent-scaffold-2-15-01.png
new file mode 100644
index 000000000..8ace6c2a7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-15/images/ai-agent-scaffold-2-15-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-15/images/ai-agent-scaffold-2-15-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-15/images/ai-agent-scaffold-2-15-02.png
new file mode 100644
index 000000000..1a57704c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-15/images/ai-agent-scaffold-2-15-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-01.png
new file mode 100644
index 000000000..666af7610
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-02.png
new file mode 100644
index 000000000..4c43047c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-03.png
new file mode 100644
index 000000000..d88ff2f09
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-04.png
new file mode 100644
index 000000000..d71bc7927
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-05.png
new file mode 100644
index 000000000..b23d69f16
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-06.png
new file mode 100644
index 000000000..372fee3dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-07.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-07.png
new file mode 100644
index 000000000..b1338d4cb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-08.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-08.png
new file mode 100644
index 000000000..20d92c51f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-09.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-09.png
new file mode 100644
index 000000000..0ca10afa8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-16/images/ai-agent-scaffold-2-16-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-17/images/ai-agent-scaffold-2-17-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-17/images/ai-agent-scaffold-2-17-01.png
new file mode 100644
index 000000000..bb322427c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-17/images/ai-agent-scaffold-2-17-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-17/images/ai-agent-scaffold-2-17-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-17/images/ai-agent-scaffold-2-17-02.png
new file mode 100644
index 000000000..d9bcd7323
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-17/images/ai-agent-scaffold-2-17-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-01.png
new file mode 100644
index 000000000..bc9f321e4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-02.png
new file mode 100644
index 000000000..7790de817
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-03.png
new file mode 100644
index 000000000..3abb8d05f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-18/images/ai-agent-scaffold-2-18-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-01.png
new file mode 100644
index 000000000..408e21f03
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-02.png
new file mode 100644
index 000000000..57495dd40
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-03.png
new file mode 100644
index 000000000..ee86f3013
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-04.png
new file mode 100644
index 000000000..b0c012e9d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-05.png
new file mode 100644
index 000000000..bf735ee7a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-06.png
new file mode 100644
index 000000000..6e820fbae
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-19/images/ai-agent-scaffold-2-19-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-2/images/ai-agent-scaffold-2-2-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-2/images/ai-agent-scaffold-2-2-01.png
new file mode 100644
index 000000000..63368a463
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-2/images/ai-agent-scaffold-2-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-01.png
new file mode 100644
index 000000000..ebdcc9414
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-02.png
new file mode 100644
index 000000000..453650b99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-03.png
new file mode 100644
index 000000000..5f638861d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-20/images/ai-agent-scaffold-2-20-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-01.png
new file mode 100644
index 000000000..1e196eca1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-02.png
new file mode 100644
index 000000000..f285f5298
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-03.png
new file mode 100644
index 000000000..0b059f011
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-3/images/ai-agent-scaffold-2-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-01.png
new file mode 100644
index 000000000..ecd999b17
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-02.png
new file mode 100644
index 000000000..72fc4fcd4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-03.png
new file mode 100644
index 000000000..7cffb5490
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-4/images/ai-agent-scaffold-2-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-5/images/ai-agent-scaffold-2-5-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-5/images/ai-agent-scaffold-2-5-01.png
new file mode 100644
index 000000000..d6f02ba35
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-5/images/ai-agent-scaffold-2-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-5/images/ai-agent-scaffold-2-5-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-5/images/ai-agent-scaffold-2-5-02.png
new file mode 100644
index 000000000..351b0fcb4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-5/images/ai-agent-scaffold-2-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-6/images/ai-agent-scaffold-2-6-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-6/images/ai-agent-scaffold-2-6-01.png
new file mode 100644
index 000000000..89f882a13
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-6/images/ai-agent-scaffold-2-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-6/images/ai-agent-scaffold-2-6-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-6/images/ai-agent-scaffold-2-6-02.png
new file mode 100644
index 000000000..434a31e8c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-6/images/ai-agent-scaffold-2-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-7/images/ai-agent-scaffold-2-7-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-7/images/ai-agent-scaffold-2-7-01.png
new file mode 100644
index 000000000..e6947c2c5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-7/images/ai-agent-scaffold-2-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-7/images/ai-agent-scaffold-2-7-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-7/images/ai-agent-scaffold-2-7-02.png
new file mode 100644
index 000000000..60a04dae0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-7/images/ai-agent-scaffold-2-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-8/images/ai-agent-scaffold-2-8-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-8/images/ai-agent-scaffold-2-8-01.png
new file mode 100644
index 000000000..b4727be1a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-8/images/ai-agent-scaffold-2-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-8/images/ai-agent-scaffold-2-8-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-8/images/ai-agent-scaffold-2-8-02.png
new file mode 100644
index 000000000..37fdd953e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-8/images/ai-agent-scaffold-2-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-9/images/ai-agent-scaffold-2-9-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-9/images/ai-agent-scaffold-2-9-01.png
new file mode 100644
index 000000000..b83e49831
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-9/images/ai-agent-scaffold-2-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-9/images/ai-agent-scaffold-2-9-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-9/images/ai-agent-scaffold-2-9-02.png
new file mode 100644
index 000000000..a13e30d02
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-2/2-9/images/ai-agent-scaffold-2-9-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-01.png
new file mode 100644
index 000000000..469fc7c0b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-02.png
new file mode 100644
index 000000000..f7c6a87de
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-03.png
new file mode 100644
index 000000000..4a58ccc72
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-04.png
new file mode 100644
index 000000000..5ce511bbb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-05.png
new file mode 100644
index 000000000..999367a95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-06.png
new file mode 100644
index 000000000..fd8b3dbb8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-07.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-07.png
new file mode 100644
index 000000000..5a310decb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-08.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-08.png
new file mode 100644
index 000000000..3ec34129e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-09.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-09.png
new file mode 100644
index 000000000..75e3ab76d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-10.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-10.png
new file mode 100644
index 000000000..bd033bfd5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-1/images/ai-agent-scaffold-3-1-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-01.png
new file mode 100644
index 000000000..8c66787e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-02.png
new file mode 100644
index 000000000..0c37fa725
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-03.png
new file mode 100644
index 000000000..9384e2d8d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-04.png
new file mode 100644
index 000000000..683ffa91c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-05.png
new file mode 100644
index 000000000..5eaca56de
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-06.png
new file mode 100644
index 000000000..dbcba126c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-07.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-07.png
new file mode 100644
index 000000000..73b4ae752
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-2/images/ai-agent-scaffold-3-2-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-01.png
new file mode 100644
index 000000000..37d7ef507
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-02.png
new file mode 100644
index 000000000..accc9a261
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-03.png
new file mode 100644
index 000000000..895ae2e0d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-04.png
new file mode 100644
index 000000000..579971d26
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-05.png
new file mode 100644
index 000000000..b9b6fafee
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-06.png
new file mode 100644
index 000000000..a021d9dc6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-07.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-07.png
new file mode 100644
index 000000000..7a4d372ed
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-08.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-08.png
new file mode 100644
index 000000000..872cfa4aa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-09.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-09.png
new file mode 100644
index 000000000..b59b57b0d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-10.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-10.png
new file mode 100644
index 000000000..3fc71458a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-3/3-3/images/ai-agent-scaffold-3-3-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-0/images/ai-agent-scaffold-4-0-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-0/images/ai-agent-scaffold-4-0-01.png
new file mode 100644
index 000000000..06a288107
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-0/images/ai-agent-scaffold-4-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-0/images/ai-agent-scaffold-4-0-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-0/images/ai-agent-scaffold-4-0-02.png
new file mode 100644
index 000000000..d6b2533d1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-0/images/ai-agent-scaffold-4-0-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-01.png
new file mode 100644
index 000000000..cbf0a266a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-02.png
new file mode 100644
index 000000000..6285e89ed
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-03.png
new file mode 100644
index 000000000..9e7553045
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-04.png
new file mode 100644
index 000000000..dc32e860d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-1/images/ai-agent-scaffold-4-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-01.png
new file mode 100644
index 000000000..6bc4c60ae
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-02.png
new file mode 100644
index 000000000..ea7376fbe
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-03.png
new file mode 100644
index 000000000..fa346e2fa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-2/images/ai-agent-scaffold-4-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-01.png
new file mode 100644
index 000000000..8cb79830f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-02.png
new file mode 100644
index 000000000..9afe9f01e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-03.png
new file mode 100644
index 000000000..cb64abcc8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-04.png
new file mode 100644
index 000000000..f454f8e93
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-05.png
new file mode 100644
index 000000000..506041398
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-06.png
new file mode 100644
index 000000000..6f2cf7b97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-07.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-07.png
new file mode 100644
index 000000000..e22d9dba4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-3/images/ai-agent-scaffold-4-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-01.png
new file mode 100644
index 000000000..239d5a421
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-02.png
new file mode 100644
index 000000000..a0861d1ea
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-03.png
new file mode 100644
index 000000000..8aee4a55d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-04.png
new file mode 100644
index 000000000..66747ddb2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-05.png
new file mode 100644
index 000000000..b47852838
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-06.png
new file mode 100644
index 000000000..c867ba605
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-4/images/ai-agent-scaffold-4-4-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-01.png
new file mode 100644
index 000000000..de5a2914c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-02.png
new file mode 100644
index 000000000..b4d52c3b6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-03.png
new file mode 100644
index 000000000..16d58a44d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-04.png
new file mode 100644
index 000000000..ba435b7c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-05.png
new file mode 100644
index 000000000..876dc2032
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-06.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-06.png
new file mode 100644
index 000000000..62be0eb07
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-07.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-07.png
new file mode 100644
index 000000000..d8213f196
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-4/4-5/images/ai-agent-scaffold-4-5-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-0/images/ai-agent-scaffold-5-0-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-0/images/ai-agent-scaffold-5-0-01.png
new file mode 100644
index 000000000..bb0cdae00
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-0/images/ai-agent-scaffold-5-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-0/images/logo.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-0/images/logo.png
new file mode 100644
index 000000000..429b2d42d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-0/images/logo.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-00.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-00.png
new file mode 100644
index 000000000..7c466f457
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-00.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-01.png
new file mode 100644
index 000000000..2f3fe1357
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-02.png
new file mode 100644
index 000000000..99b172578
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-03.png
new file mode 100644
index 000000000..4816954bb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-04.png
new file mode 100644
index 000000000..e47009b00
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-05.png
new file mode 100644
index 000000000..b93a74ddb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-1/images/ai-agent-scaffold-5-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-01.png
new file mode 100644
index 000000000..258781d2a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-02.png
new file mode 100644
index 000000000..81b7ecaf9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-03.png
new file mode 100644
index 000000000..6b7d58eed
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-2/images/ai-agent-scaffold-5-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-01.png
new file mode 100644
index 000000000..a774fd287
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-02.png
new file mode 100644
index 000000000..f993106fe
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-03.png
new file mode 100644
index 000000000..847b630de
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-3/images/ai-agent-scaffold-5-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-01.png
new file mode 100644
index 000000000..115f81115
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-02.png
new file mode 100644
index 000000000..d7a210be9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-03.png
new file mode 100644
index 000000000..3128727f8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-04.png
new file mode 100644
index 000000000..3c43ab5db
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-4/images/ai-agent-scaffold-5-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-01.png
new file mode 100644
index 000000000..970e7486f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-02.png
new file mode 100644
index 000000000..373fe0d50
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-03.png
new file mode 100644
index 000000000..236ddcb84
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-04.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-04.png
new file mode 100644
index 000000000..8ef5d932b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-05.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-05.png
new file mode 100644
index 000000000..a4f700950
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-5/images/ai-agent-scaffold-5-5-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-01.png
new file mode 100644
index 000000000..ee3be6537
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-02.png
new file mode 100644
index 000000000..8b9d7043a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-03.png
new file mode 100644
index 000000000..86d74d9ae
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-6/images/ai-agent-scaffold-5-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-01.png
new file mode 100644
index 000000000..4b58b4421
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-02.png
new file mode 100644
index 000000000..f41fdc283
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-03.png
new file mode 100644
index 000000000..21cb57c64
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-7/images/ai-agent-scaffold-5-7-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-01.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-01.png
new file mode 100644
index 000000000..4e21a6106
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-02.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-02.png
new file mode 100644
index 000000000..d1bf41d39
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-03.png b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-03.png
new file mode 100644
index 000000000..9fb2ec11c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-agent-scaffold/part-5/5-8/images/ai-agent-scaffold-5-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-01.png
new file mode 100644
index 000000000..796e21231
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-02.png
new file mode 100644
index 000000000..01fd90f9b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-03.png
new file mode 100644
index 000000000..31fe9b342
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-04.png
new file mode 100644
index 000000000..14772da72
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-01.png
new file mode 100644
index 000000000..6b7692b97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-02.png
new file mode 100644
index 000000000..ea9307b98
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-03.png
new file mode 100644
index 000000000..649de5c7e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-01.png
new file mode 100644
index 000000000..b624b92d4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-02.png
new file mode 100644
index 000000000..c8866688d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-03.png
new file mode 100644
index 000000000..febb05e7f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-04-1.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-04-1.png
new file mode 100644
index 000000000..93ada7105
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-04-1.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-04.png
new file mode 100644
index 000000000..8d4a3bec7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-05-1.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-05-1.png
new file mode 100644
index 000000000..28fbf0708
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-05-1.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-05.png
new file mode 100644
index 000000000..a1f36adae
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-06-1.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-06-1.png
new file mode 100644
index 000000000..a775c1457
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-06-1.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-06.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-06.png
new file mode 100644
index 000000000..05cb27795
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-07-1.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-07-1.png
new file mode 100644
index 000000000..efe2a904b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-07-1.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-07.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-07.png
new file mode 100644
index 000000000..8f9b8939a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-4-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-4-01.png
new file mode 100644
index 000000000..c91db171a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-4-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-4-02.png
new file mode 100644
index 000000000..892cf7fce
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-1-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-01.png
new file mode 100644
index 000000000..a0ccf09cc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-02.png
new file mode 100644
index 000000000..5d33ca481
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-03.png
new file mode 100644
index 000000000..15232fee9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-01.png
new file mode 100644
index 000000000..adb2077b0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-02.png
new file mode 100644
index 000000000..e7e452366
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-03.png
new file mode 100644
index 000000000..ff2caebd3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-04.png
new file mode 100644
index 000000000..7d25c2ab5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-01.png
new file mode 100644
index 000000000..0bfbd597e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-02.png
new file mode 100644
index 000000000..017ee0286
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-03.png
new file mode 100644
index 000000000..4227b708b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-04.png
new file mode 100644
index 000000000..4befba4ec
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-05.png
new file mode 100644
index 000000000..244f0b964
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-06.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-06.png
new file mode 100644
index 000000000..87ae5b38c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-07.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-07.png
new file mode 100644
index 000000000..ba4583147
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-08.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-08.png
new file mode 100644
index 000000000..d67bf8b03
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-2-3-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-01.png
new file mode 100644
index 000000000..b660adc6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-02.png
new file mode 100644
index 000000000..a5b52a8c8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-03.png
new file mode 100644
index 000000000..485753b6c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-04.png
new file mode 100644
index 000000000..5420bc958
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-01.png
new file mode 100644
index 000000000..5838b6a61
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-02.png
new file mode 100644
index 000000000..f363681bb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-03.png
new file mode 100644
index 000000000..a74d20e9d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-04.png
new file mode 100644
index 000000000..5c80dea8c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-05.png
new file mode 100644
index 000000000..b41b2ac2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-06.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-06.png
new file mode 100644
index 000000000..6be709da3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-10-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-01.png
new file mode 100644
index 000000000..2c5ccdfce
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-02.png
new file mode 100644
index 000000000..0b6bb8e5d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-03.png
new file mode 100644
index 000000000..83ea835b9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-11-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-01.png
new file mode 100644
index 000000000..a9fd3181f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-02.png
new file mode 100644
index 000000000..6073b850a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-03.png
new file mode 100644
index 000000000..3e7ea1643
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-04.png
new file mode 100644
index 000000000..1afe11c9e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-01.png
new file mode 100644
index 000000000..a9a36f2b5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-02.png
new file mode 100644
index 000000000..62b72d811
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-03.png
new file mode 100644
index 000000000..11dfad080
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-13-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-01.png
new file mode 100644
index 000000000..ed78d81f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-02.png
new file mode 100644
index 000000000..f51004205
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-03.png
new file mode 100644
index 000000000..57382fb0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-04.png
new file mode 100644
index 000000000..a432f0003
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-14-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-16-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-16-01.png
new file mode 100644
index 000000000..f4b3186e7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-16-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-16-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-16-02.png
new file mode 100644
index 000000000..38e7c5386
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-16-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-01.png
new file mode 100644
index 000000000..654e8a3b0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-02.png
new file mode 100644
index 000000000..1eb8ef49f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-03.png
new file mode 100644
index 000000000..98d8c0027
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-04.png
new file mode 100644
index 000000000..40fc70fd5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-18-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-01.png
new file mode 100644
index 000000000..00ea6f071
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-02.png
new file mode 100644
index 000000000..543e1054e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-03.png
new file mode 100644
index 000000000..ec58c0554
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-04.png
new file mode 100644
index 000000000..5a45a2ef7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-05.png
new file mode 100644
index 000000000..7d1bd2e76
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-06.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-06.png
new file mode 100644
index 000000000..2d8211a14
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-07.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-07.png
new file mode 100644
index 000000000..00e3df281
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-08.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-08.png
new file mode 100644
index 000000000..1a73601c8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-09.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-09.png
new file mode 100644
index 000000000..f525f10c5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-19-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-2-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-2-01.png
new file mode 100644
index 000000000..02e0b8953
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-2-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-2-02.png
new file mode 100644
index 000000000..6894b6b05
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-01.png
new file mode 100644
index 000000000..d9bc284c9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-02.png
new file mode 100644
index 000000000..e4cc3b16e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-03.png
new file mode 100644
index 000000000..f1fd3a7c1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-04.png
new file mode 100644
index 000000000..4bccc6c05
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-01.png
new file mode 100644
index 000000000..6f9bacd50
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-02.png
new file mode 100644
index 000000000..ff076a8ea
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-03.png
new file mode 100644
index 000000000..d93bb4b6a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-04.png
new file mode 100644
index 000000000..95fa15002
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-01.png
new file mode 100644
index 000000000..343f93f09
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-02.png
new file mode 100644
index 000000000..536070517
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-03.png
new file mode 100644
index 000000000..2bae7e9bb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-01.png
new file mode 100644
index 000000000..9a2de0dac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-02.png
new file mode 100644
index 000000000..eb0ac05b1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-03.png
new file mode 100644
index 000000000..281bf9711
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-04.png
new file mode 100644
index 000000000..3dc6274a1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-6-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-01.png
new file mode 100644
index 000000000..a44c74922
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-02.png
new file mode 100644
index 000000000..6329a601d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-03.png
new file mode 100644
index 000000000..08229294e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-04.png
new file mode 100644
index 000000000..ffdf1fb74
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-05.png
new file mode 100644
index 000000000..745e76504
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-06.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-06.png
new file mode 100644
index 000000000..88b969686
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-07.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-07.png
new file mode 100644
index 000000000..325b4931e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-08.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-08.png
new file mode 100644
index 000000000..27cbff57e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-7-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-01.png
new file mode 100644
index 000000000..e32f2e689
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-02.png
new file mode 100644
index 000000000..0e3a018fa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-03.png
new file mode 100644
index 000000000..4ce744dfe
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-04.png
new file mode 100644
index 000000000..ff31c024c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-05.png
new file mode 100644
index 000000000..3f68602d0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-06.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-06.png
new file mode 100644
index 000000000..23164998e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-07.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-07.png
new file mode 100644
index 000000000..79a38781b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-8-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-01.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-01.png
new file mode 100644
index 000000000..584c4aaa1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-02.png
new file mode 100644
index 000000000..ed9bc1555
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-03.png
new file mode 100644
index 000000000..eb3c1b1b5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-04.png
new file mode 100644
index 000000000..7ec7a89dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-05.png
new file mode 100644
index 000000000..462205f7e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-06.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-06.png
new file mode 100644
index 000000000..79964e866
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/ai-mcp-gateway-3-9-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-01.gif b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-01.gif
new file mode 100644
index 000000000..aae4626af
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-01.gif differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-02.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-02.png
new file mode 100644
index 000000000..e7ef0a3d6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-03.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-03.png
new file mode 100644
index 000000000..c8b1c0407
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-04.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-04.png
new file mode 100644
index 000000000..8f19975d4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-05.png b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-05.png
new file mode 100644
index 000000000..11faa2518
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-mcp-gateway/mcp-gateway-promotion-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-01.png
new file mode 100644
index 000000000..098ba0443
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-02.png
new file mode 100644
index 000000000..0166dd73d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-03.png
new file mode 100644
index 000000000..462074582
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-04.png
new file mode 100644
index 000000000..6e14c37c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-05.png
new file mode 100644
index 000000000..eaf34b393
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-06.png
new file mode 100644
index 000000000..c0b78cead
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-07.png
new file mode 100644
index 000000000..9ca37f333
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-01.png
new file mode 100644
index 000000000..f1787ebad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png
new file mode 100644
index 000000000..66ed25ba4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-03.png
new file mode 100644
index 000000000..c5af04bf3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-04.png
new file mode 100644
index 000000000..0cea30183
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-05.png
new file mode 100644
index 000000000..8b8f05e7e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-01.png
new file mode 100644
index 000000000..041ea5e40
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-02.png
new file mode 100644
index 000000000..04471e771
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-03.png
new file mode 100644
index 000000000..7e64df5de
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-04.png
new file mode 100644
index 000000000..c03aef592
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png
new file mode 100644
index 000000000..7ba5726b9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-02.png
new file mode 100644
index 000000000..f6ad01606
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-03.png
new file mode 100644
index 000000000..5b1bff3ac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-04.png
new file mode 100644
index 000000000..ca8ef3c05
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-05.png
new file mode 100644
index 000000000..86be9a07d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-06.png
new file mode 100644
index 000000000..99e7b5eda
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png
new file mode 100644
index 000000000..040b9e8e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png
new file mode 100644
index 000000000..7cf49e15d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-01.png
new file mode 100644
index 000000000..59eb10ce8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-02.png
new file mode 100644
index 000000000..c80b4e7c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-01.png
new file mode 100644
index 000000000..2d73e2a90
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-02.png
new file mode 100644
index 000000000..5d6f5a906
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-03.png
new file mode 100644
index 000000000..99628d4f2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250921-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-01.png
new file mode 100644
index 000000000..37d03c66d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-02.png
new file mode 100644
index 000000000..a9bcb4f52
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-03.png
new file mode 100644
index 000000000..15ad51b46
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-04.png
new file mode 100644
index 000000000..b2d4bf784
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-05.png
new file mode 100644
index 000000000..500d98e1d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-06.png
new file mode 100644
index 000000000..566e1656e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-07.png
new file mode 100644
index 000000000..cdd40e46b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-01.png
new file mode 100644
index 000000000..30ef61eed
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif
new file mode 100644
index 000000000..b5882a5f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-03.png
new file mode 100644
index 000000000..920fb55f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-04.png
new file mode 100644
index 000000000..30a236c97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-05.png
new file mode 100644
index 000000000..bf6220631
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-06.png
new file mode 100644
index 000000000..d614b2408
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-07.png
new file mode 100644
index 000000000..11f1b6bf3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-08.png
new file mode 100644
index 000000000..6d05d229e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png
new file mode 100644
index 000000000..40b8d60b4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png
new file mode 100644
index 000000000..e0898537b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-01.png
new file mode 100644
index 000000000..c6a930721
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png
new file mode 100644
index 000000000..00b7723d7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png
new file mode 100644
index 000000000..cccc99bf6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png
new file mode 100644
index 000000000..50ffcda56
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png
new file mode 100644
index 000000000..b911fc0bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-01.png
new file mode 100644
index 000000000..63a359a3d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-02.png
new file mode 100644
index 000000000..0b1f728dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-03.png
new file mode 100644
index 000000000..0c46d4584
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-04.png
new file mode 100644
index 000000000..b4b0a48f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-05.png
new file mode 100644
index 000000000..d8e1082ca
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-06.png
new file mode 100644
index 000000000..e858f4225
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-07.png
new file mode 100644
index 000000000..b02198e82
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-08.png
new file mode 100644
index 000000000..9bae5f1eb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-09.png
new file mode 100644
index 000000000..28f71f95b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-00-1.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-00-1.png
new file mode 100644
index 000000000..8cc6b25f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-00-1.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png
new file mode 100644
index 000000000..beb65f8d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-02.png
new file mode 100644
index 000000000..3c369b246
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png
new file mode 100644
index 000000000..314c53cd6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-04.png
new file mode 100644
index 000000000..a7461e5ff
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-01.png
new file mode 100644
index 000000000..7fb5d4c0c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-02.png
new file mode 100644
index 000000000..3747a5e95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-03.png
new file mode 100644
index 000000000..04eae84ba
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-04.png
new file mode 100644
index 000000000..d86c218f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-05.png
new file mode 100644
index 000000000..ecc5924a0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-06.png
new file mode 100644
index 000000000..a8830fd11
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-07.png
new file mode 100644
index 000000000..e8206d259
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-08.png
new file mode 100644
index 000000000..43703a9d8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-09.png
new file mode 100644
index 000000000..63ed1d877
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-10.png
new file mode 100644
index 000000000..ceeb40ce1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-01.png
new file mode 100644
index 000000000..8ef61d0b8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-02.png
new file mode 100644
index 000000000..1e74edda0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-03.png
new file mode 100644
index 000000000..b8287168e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-04.png
new file mode 100644
index 000000000..ff858d112
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-05.png
new file mode 100644
index 000000000..00bab426f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-06.png
new file mode 100644
index 000000000..e30e7f73f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-01.png
new file mode 100644
index 000000000..289161271
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-02.png
new file mode 100644
index 000000000..93b61ea1e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-03.png
new file mode 100644
index 000000000..1fb1f39e6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-04.png
new file mode 100644
index 000000000..4a6ad8e71
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-05.png
new file mode 100644
index 000000000..9a1c6101b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-06.png
new file mode 100644
index 000000000..9e768ea57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-07.png
new file mode 100644
index 000000000..302c26ea9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-08.png
new file mode 100644
index 000000000..da53d5a5e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-09.png
new file mode 100644
index 000000000..1c47aeb22
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-10.png
new file mode 100644
index 000000000..cd8efba15
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-11.png
new file mode 100644
index 000000000..17ffdbd97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-12.png
new file mode 100644
index 000000000..639b78f64
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-13.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-13.png
new file mode 100644
index 000000000..15ba76351
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-01.png
new file mode 100644
index 000000000..94890772d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-02.png
new file mode 100644
index 000000000..8d3511f57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-03.png
new file mode 100644
index 000000000..1a2af109d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-04.png
new file mode 100644
index 000000000..399206904
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-05.png
new file mode 100644
index 000000000..5048b623c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-06.png
new file mode 100644
index 000000000..007cb28c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-07.png
new file mode 100644
index 000000000..a7d6bee54
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-08.png
new file mode 100644
index 000000000..5cf001876
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-09.png
new file mode 100644
index 000000000..6c0f13816
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-10.png
new file mode 100644
index 000000000..b42b6d0c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-11.png
new file mode 100644
index 000000000..8adb2fd99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-12.png
new file mode 100644
index 000000000..d7a9bd1aa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-13.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-13.png
new file mode 100644
index 000000000..4afc08e97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-14.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-14.png
new file mode 100644
index 000000000..b7b59dc44
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-14.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-01.png
new file mode 100644
index 000000000..56de64a8a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-02.png
new file mode 100644
index 000000000..de380b2f2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-03.png
new file mode 100644
index 000000000..e7538a845
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-01.png
new file mode 100644
index 000000000..e8509babf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-02.png
new file mode 100644
index 000000000..4cd82e807
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-03.png
new file mode 100644
index 000000000..24c8d6ab0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-04.png
new file mode 100644
index 000000000..423a0139e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-05.png
new file mode 100644
index 000000000..c8c3f5436
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-06.png
new file mode 100644
index 000000000..3d6941b8b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-07.png
new file mode 100644
index 000000000..00650cf88
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-08.png
new file mode 100644
index 000000000..bd0da8e3b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-09.png
new file mode 100644
index 000000000..f07968c57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-10.png
new file mode 100644
index 000000000..01e6f077b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-11.png
new file mode 100644
index 000000000..271f30609
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-12.png
new file mode 100644
index 000000000..8069b3e3c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-01.png
new file mode 100644
index 000000000..866ccbb41
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-02.png
new file mode 100644
index 000000000..45c2c2c85
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-03.png
new file mode 100644
index 000000000..9429bd188
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-04.png
new file mode 100644
index 000000000..941040b10
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-05.png
new file mode 100644
index 000000000..c8a83fa53
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png
new file mode 100644
index 000000000..3b79db58a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png
new file mode 100644
index 000000000..05653bd79
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-03.png
new file mode 100644
index 000000000..978f6a09c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-04.png
new file mode 100644
index 000000000..dce9b6747
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-05.png
new file mode 100644
index 000000000..afa6a6911
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-06.png
new file mode 100644
index 000000000..f810a3118
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-07.png
new file mode 100644
index 000000000..3d4feddab
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-08.png
new file mode 100644
index 000000000..9bcef3f45
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-01.png
new file mode 100644
index 000000000..7283e3aa6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-02.png
new file mode 100644
index 000000000..7727ba881
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-01.png
new file mode 100644
index 000000000..b5bbdce1d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-02.png
new file mode 100644
index 000000000..0fde02b9b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png
new file mode 100644
index 000000000..9baad7c5a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-02.png
new file mode 100644
index 000000000..9cb07a1d7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-01.png
new file mode 100644
index 000000000..786e82759
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-02.png
new file mode 100644
index 000000000..f080a05a6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-03.png
new file mode 100644
index 000000000..fb234dc7f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-04.png
new file mode 100644
index 000000000..c5f7f06f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png
new file mode 100644
index 000000000..9b1aeded8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-02.png
new file mode 100644
index 000000000..040b9e8e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-03.png
new file mode 100644
index 000000000..5571d3def
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-04.png
new file mode 100644
index 000000000..b71d39e62
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-05.png
new file mode 100644
index 000000000..a67260959
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-06.png
new file mode 100644
index 000000000..7ab41408c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-01.png
new file mode 100644
index 000000000..97f5f090c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-02.png
new file mode 100644
index 000000000..f668aa163
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-03.png
new file mode 100644
index 000000000..76aa86c13
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-04.png
new file mode 100644
index 000000000..794256633
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-05.png
new file mode 100644
index 000000000..1cbff6409
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-06.png
new file mode 100644
index 000000000..15a2fce6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-07.png
new file mode 100644
index 000000000..94c1b271f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-08.png
new file mode 100644
index 000000000..1c11a1e7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-15-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-15-01.png
new file mode 100644
index 000000000..2e066f914
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-15-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-15-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-15-02.png
new file mode 100644
index 000000000..5e165a92f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-15-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-01.png
new file mode 100644
index 000000000..d66ac8f17
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-02.png
new file mode 100644
index 000000000..221eae276
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-03.png
new file mode 100644
index 000000000..750b011ad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-04.png
new file mode 100644
index 000000000..e00bc1510
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-05.png
new file mode 100644
index 000000000..e1b582a41
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-16-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-01.png
new file mode 100644
index 000000000..851f16dd2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-02.png
new file mode 100644
index 000000000..126da06a5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-03.png
new file mode 100644
index 000000000..87964973b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-04.png
new file mode 100644
index 000000000..71bf9272c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-17-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-01.png
new file mode 100644
index 000000000..89074e025
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-02.png
new file mode 100644
index 000000000..94cc7af6e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-03.png
new file mode 100644
index 000000000..8e4b21647
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-04.png
new file mode 100644
index 000000000..f54895357
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-18-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-01.png
new file mode 100644
index 000000000..d253947b4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-02.png
new file mode 100644
index 000000000..79bcfe630
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-03.png
new file mode 100644
index 000000000..3f3f51a31
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-04.png
new file mode 100644
index 000000000..3f45dfb5d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-05.png
new file mode 100644
index 000000000..f35d7e35b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-06.png
new file mode 100644
index 000000000..784d0b8b3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-07.png
new file mode 100644
index 000000000..1a919d925
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-19-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-01.png
new file mode 100644
index 000000000..fbfb8c474
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-02.png
new file mode 100644
index 000000000..6c678a496
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-03.png
new file mode 100644
index 000000000..7dc85bd09
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-04.png
new file mode 100644
index 000000000..07efe9729
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-05.png
new file mode 100644
index 000000000..be68de99f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-06.png
new file mode 100644
index 000000000..5d28e632e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-07.png
new file mode 100644
index 000000000..b840dc101
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-08.png
new file mode 100644
index 000000000..eebb64fca
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-09.png
new file mode 100644
index 000000000..a5fa4c564
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-10.png
new file mode 100644
index 000000000..f61261e07
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-11.png
new file mode 100644
index 000000000..dbe8c1660
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-12.png
new file mode 100644
index 000000000..46a3431ae
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-01.png
new file mode 100644
index 000000000..5c9f7de54
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-02.png
new file mode 100644
index 000000000..de69255d8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-03.png
new file mode 100644
index 000000000..f19061b14
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-04.png
new file mode 100644
index 000000000..d081d93e9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-05.png
new file mode 100644
index 000000000..4c35ba6c9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-06.png
new file mode 100644
index 000000000..d021448ef
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-07.png
new file mode 100644
index 000000000..46b1e748f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-20-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-01.png
new file mode 100644
index 000000000..c8f2df63d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-02.png
new file mode 100644
index 000000000..1731ae34a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-03.png
new file mode 100644
index 000000000..1ec050eb6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-04.png
new file mode 100644
index 000000000..64a0e2e6c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-05.png
new file mode 100644
index 000000000..9792485b6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-06.png
new file mode 100644
index 000000000..1f08610df
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-07.png
new file mode 100644
index 000000000..4c7c79bbb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-08.png
new file mode 100644
index 000000000..3445d70d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-21-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-01.png
new file mode 100644
index 000000000..6c72e2f86
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-02.png
new file mode 100644
index 000000000..129843d29
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-03.png
new file mode 100644
index 000000000..c67c42a37
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-01.png
new file mode 100644
index 000000000..b8191bb9e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-02.png
new file mode 100644
index 000000000..9d18d20fb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-01.png
new file mode 100644
index 000000000..3d807a4eb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-02.png
new file mode 100644
index 000000000..757e76d28
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-03.png
new file mode 100644
index 000000000..cbdb71778
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-04.png
new file mode 100644
index 000000000..d15e43a49
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-01.png
new file mode 100644
index 000000000..68d017da8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-02.png
new file mode 100644
index 000000000..9b23b3a02
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-03.png
new file mode 100644
index 000000000..b98217de4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-01.png
new file mode 100644
index 000000000..3f00ca8f6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-02.png
new file mode 100644
index 000000000..95db900f8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-01.png
new file mode 100644
index 000000000..fcc03b4ac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-02.png
new file mode 100644
index 000000000..67ab78fdd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-03.png
new file mode 100644
index 000000000..ef6163179
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png
new file mode 100644
index 000000000..a50d21c86
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-02.png
new file mode 100644
index 000000000..6e1e117b2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-03.png
new file mode 100644
index 000000000..32cd9c458
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-01.png
new file mode 100644
index 000000000..bd0146c60
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-02.png
new file mode 100644
index 000000000..1530b2440
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-03.png
new file mode 100644
index 000000000..d8fb6c1d8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-04.png
new file mode 100644
index 000000000..604c077b5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-05.png
new file mode 100644
index 000000000..36a42813d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-06.png
new file mode 100644
index 000000000..7b146035b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-07.png
new file mode 100644
index 000000000..3ae3ffa14
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-01.png
new file mode 100644
index 000000000..127cdd237
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-02.png
new file mode 100644
index 000000000..488843d7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-01.png
new file mode 100644
index 000000000..467ce20f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-02.png
new file mode 100644
index 000000000..86d1a2178
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-03.png
new file mode 100644
index 000000000..23bec8fcc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-04.png
new file mode 100644
index 000000000..88c466876
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-9-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-9-01.png
new file mode 100644
index 000000000..496eef7f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-01.png
new file mode 100644
index 000000000..601ad166b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-02.png
new file mode 100644
index 000000000..4bc067fad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-03.png
new file mode 100644
index 000000000..85fe68cfe
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-04.png
new file mode 100644
index 000000000..edc4586f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-05.png
new file mode 100644
index 000000000..86ebb96f9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-06.png
new file mode 100644
index 000000000..7d9454720
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-01.png
new file mode 100644
index 000000000..ca97a7b4c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-02.png
new file mode 100644
index 000000000..634f4f4bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-03.png
new file mode 100644
index 000000000..72a546b95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-04.png
new file mode 100644
index 000000000..230c90831
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-01.png
new file mode 100644
index 000000000..93108fbe2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-02.png
new file mode 100644
index 000000000..2e4712e6a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-03.png
new file mode 100644
index 000000000..49a4908c6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-04.png
new file mode 100644
index 000000000..763b14796
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-52-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-52-01.png
new file mode 100644
index 000000000..d8b683421
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-52-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-52-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-52-02.png
new file mode 100644
index 000000000..25ff7d7df
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-52-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-52-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-52-03.png
new file mode 100644
index 000000000..3c6967d0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-52-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-01.png
new file mode 100644
index 000000000..2813a9db1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-02.png
new file mode 100644
index 000000000..50edfa7e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-03.png
new file mode 100644
index 000000000..990a7db27
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-04.png
new file mode 100644
index 000000000..f196f8c2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-05.png
new file mode 100644
index 000000000..176b10803
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-06.png
new file mode 100644
index 000000000..97a6512cb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-01.png
new file mode 100644
index 000000000..adbac603d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-02.png
new file mode 100644
index 000000000..85328fac7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-03.png
new file mode 100644
index 000000000..3bb894277
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-04.png
new file mode 100644
index 000000000..aa2b7afa4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-05.png
new file mode 100644
index 000000000..610114578
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-06.png
new file mode 100644
index 000000000..fcd432bd1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-07.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-07.png
new file mode 100644
index 000000000..50910d8d1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-08.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-08.png
new file mode 100644
index 000000000..ca4801f29
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-09.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-09.png
new file mode 100644
index 000000000..6476abc21
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-10.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-10.png
new file mode 100644
index 000000000..31e91bc35
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-11.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-11.png
new file mode 100644
index 000000000..24647031b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-12.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-12.png
new file mode 100644
index 000000000..0546783af
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-13.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-13.png
new file mode 100644
index 000000000..96c2f57b0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-01.png
new file mode 100644
index 000000000..b183d421a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-02.png
new file mode 100644
index 000000000..b2fe305aa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-03.png
new file mode 100644
index 000000000..e0d91b044
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-04.png
new file mode 100644
index 000000000..d5dabd66a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-05.png
new file mode 100644
index 000000000..d61909685
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-06.png
new file mode 100644
index 000000000..ecc720319
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-07.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-07.png
new file mode 100644
index 000000000..57b3e4231
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-08.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-08.png
new file mode 100644
index 000000000..9b6d0ba02
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v8-01.gif b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-01.gif
new file mode 100644
index 000000000..e60416b99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-01.gif differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v8-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-02.png
new file mode 100644
index 000000000..7dbcad55b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v8-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-03.png
new file mode 100644
index 000000000..763b14796
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-01.png
new file mode 100755
index 000000000..a77dce7e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-02.png
new file mode 100644
index 000000000..d0c2faa5a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-03.png
new file mode 100644
index 000000000..f11d9c172
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-04.png
new file mode 100644
index 000000000..3e4c31bd9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-01.png
new file mode 100755
index 000000000..18373c4d0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-02.png
new file mode 100644
index 000000000..85398e1f5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-03.png
new file mode 100644
index 000000000..aecfbc484
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-01.png
new file mode 100755
index 000000000..deeb57278
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-02.png
new file mode 100644
index 000000000..ad9913a80
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-03.png
new file mode 100644
index 000000000..5420a9486
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-04.png
new file mode 100644
index 000000000..d252b1cf1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-01.png
new file mode 100755
index 000000000..b82291008
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-02.png
new file mode 100644
index 000000000..45c2c2c85
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-03.png
new file mode 100644
index 000000000..51caebdf0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-04.png
new file mode 100644
index 000000000..4d8ab0ba3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-05.png
new file mode 100644
index 000000000..13ac69ed8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-01.png
new file mode 100755
index 000000000..05bc77a6e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-02.png
new file mode 100644
index 000000000..f39060f69
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-01.png
new file mode 100755
index 000000000..85c5cb2e5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-02.png
new file mode 100644
index 000000000..4f7e05ced
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-03.png
new file mode 100644
index 000000000..09ccb2bc6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-04.png
new file mode 100644
index 000000000..fe28a4f38
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-05.png
new file mode 100644
index 000000000..7a2b89441
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-01.png
new file mode 100755
index 000000000..3606d04e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-02.png
new file mode 100644
index 000000000..2f0e8d14c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-03.png
new file mode 100644
index 000000000..c856b9e87
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-04.png
new file mode 100644
index 000000000..b5665978c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-05.png
new file mode 100644
index 000000000..d1a40ff30
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-06.png
new file mode 100644
index 000000000..af1c60504
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-01.png
new file mode 100755
index 000000000..c884d5408
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-02.png
new file mode 100644
index 000000000..ad6ca2cbb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-03.png
new file mode 100644
index 000000000..b1e7be26e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-04.png
new file mode 100644
index 000000000..889bcf4b8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-05.png
new file mode 100644
index 000000000..e03d2b6cc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-06.png
new file mode 100644
index 000000000..cd852ac1d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-01.png
new file mode 100755
index 000000000..ee4a7ee3a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-02.png
new file mode 100644
index 000000000..9c736b620
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-03.png
new file mode 100644
index 000000000..8c8f7fd0f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-04.png
new file mode 100644
index 000000000..14937dd1a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-01.png
new file mode 100755
index 000000000..c8b49a1d7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-02.png
new file mode 100644
index 000000000..986a78f7f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-03.png
new file mode 100644
index 000000000..3506000a0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-04.png
new file mode 100644
index 000000000..a3fd8a14a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-05.png
new file mode 100644
index 000000000..695840223
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-06.png
new file mode 100644
index 000000000..ba055f25d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-07.png
new file mode 100644
index 000000000..2b24014dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-01.png
new file mode 100755
index 000000000..9ba052966
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-02.png
new file mode 100644
index 000000000..931f1a666
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-03.png
new file mode 100644
index 000000000..52aab91db
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-04.png
new file mode 100644
index 000000000..57924829d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-05.png
new file mode 100644
index 000000000..d1de4275c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-06.png
new file mode 100644
index 000000000..2a0946dcb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-07.png
new file mode 100644
index 000000000..edb349e2a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-08.png
new file mode 100644
index 000000000..0d3019273
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-01.png
new file mode 100755
index 000000000..cdc863458
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-02.png
new file mode 100644
index 000000000..bdae13477
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-03.png
new file mode 100644
index 000000000..93a0704b9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-04.png
new file mode 100644
index 000000000..b4b6ee124
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-01.png
new file mode 100755
index 000000000..db2f28b6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-02.png
new file mode 100644
index 000000000..998d3feb8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-03.png
new file mode 100644
index 000000000..e453e688b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-04.png
new file mode 100644
index 000000000..b3b2ecaab
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-05.png
new file mode 100644
index 000000000..3fd37d331
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-06.png
new file mode 100644
index 000000000..6a8253e1b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-07.png
new file mode 100644
index 000000000..057bd03ab
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-01.png
new file mode 100755
index 000000000..01254b9e2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-02.png
new file mode 100644
index 000000000..ecccf2307
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-03.png
new file mode 100644
index 000000000..f113a8b5c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-04.png
new file mode 100644
index 000000000..d5807e5e6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-01.png
new file mode 100755
index 000000000..f53555121
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-02.png
new file mode 100644
index 000000000..e0bc62e87
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-03.png
new file mode 100644
index 000000000..a87652b3d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-01.png
new file mode 100755
index 000000000..2af83e7b6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-02.png
new file mode 100644
index 000000000..dda6ceaf4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-01.png
new file mode 100755
index 000000000..b65b52fea
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-02.png
new file mode 100644
index 000000000..8eee79253
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-03.png
new file mode 100644
index 000000000..4f631d096
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-04.png
new file mode 100644
index 000000000..2bb9b3279
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-05.png
new file mode 100644
index 000000000..643965d2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-06.png
new file mode 100644
index 000000000..4c6274252
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-07.png
new file mode 100644
index 000000000..2553d8b4d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-01.png
new file mode 100755
index 000000000..47e379abe
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-02.png
new file mode 100644
index 000000000..125f06912
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-03.png
new file mode 100644
index 000000000..76ee0b584
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-04.png
new file mode 100644
index 000000000..5cf021726
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-01.png
new file mode 100755
index 000000000..a6406ec9c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-02.png
new file mode 100644
index 000000000..a6fe9553c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-03.png
new file mode 100644
index 000000000..4f40aa8af
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-04.png
new file mode 100644
index 000000000..494c51c25
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-05.png
new file mode 100644
index 000000000..ecb903ab1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-06.png
new file mode 100644
index 000000000..b88fd23f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-07.png
new file mode 100644
index 000000000..e17c8f39c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-08.png
new file mode 100644
index 000000000..244e0d7f9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-09.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-09.png
new file mode 100644
index 000000000..0d1fbd769
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-10.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-10.png
new file mode 100644
index 000000000..e1db230f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-11.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-11.png
new file mode 100644
index 000000000..082e3d433
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-01.png
new file mode 100755
index 000000000..e2d98a8c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-02.png
new file mode 100644
index 000000000..c0d103502
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-03.png
new file mode 100644
index 000000000..b8d994512
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-04.png
new file mode 100644
index 000000000..3f3904fc0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-05.png
new file mode 100644
index 000000000..07416dcac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-06.png
new file mode 100644
index 000000000..f9c59efed
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-07.png
new file mode 100644
index 000000000..c85bb6ba6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-08.png
new file mode 100644
index 000000000..389890a57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-09.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-09.png
new file mode 100644
index 000000000..8c1801aea
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-10.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-10.png
new file mode 100644
index 000000000..6f2a5e6eb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-11.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-11.png
new file mode 100644
index 000000000..7ff3fe45b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-12.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-12.png
new file mode 100644
index 000000000..4ad20bb1b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-13.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-13.png
new file mode 100644
index 000000000..a5724ce4c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-14.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-14.png
new file mode 100644
index 000000000..6a7ac4f11
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-14.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-15.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-15.png
new file mode 100644
index 000000000..ef2202b67
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-15.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-16.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-16.png
new file mode 100644
index 000000000..4ddba8640
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-16.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-01.png
new file mode 100755
index 000000000..c9e3f4490
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-02.png
new file mode 100644
index 000000000..1b5f4fa29
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-03.png
new file mode 100644
index 000000000..5f7770fb3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-04.png
new file mode 100644
index 000000000..cc252ebe8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-01.png
new file mode 100755
index 000000000..de5b5170f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-02.png
new file mode 100644
index 000000000..43ecb2eda
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-03.png
new file mode 100644
index 000000000..64ad4bf38
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-04.png
new file mode 100644
index 000000000..b32c58f20
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-01.png
new file mode 100755
index 000000000..b959cd95a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-02.png
new file mode 100644
index 000000000..978c94137
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-03.png
new file mode 100644
index 000000000..14bfb07f7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-04.png
new file mode 100644
index 000000000..ae6dfeb12
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-01.png
new file mode 100755
index 000000000..31838b989
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-02.png
new file mode 100644
index 000000000..121fd06f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-03.png
new file mode 100644
index 000000000..16ddf07dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-04.png
new file mode 100644
index 000000000..38bb7d7f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-05.png
new file mode 100644
index 000000000..86dea6e3b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-01.png
new file mode 100755
index 000000000..1fefa7a0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-02.png
new file mode 100644
index 000000000..1aaf14d0e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-03.png
new file mode 100644
index 000000000..eab506d5d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-04.png
new file mode 100644
index 000000000..9f8ca3de4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-01.png
new file mode 100755
index 000000000..7987a0889
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-02.png
new file mode 100644
index 000000000..277fb1f3a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-01.png
new file mode 100755
index 000000000..68a964a34
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-02.png
new file mode 100644
index 000000000..87b072b57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-03.png
new file mode 100644
index 000000000..0ee4721db
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-04.png
new file mode 100644
index 000000000..2071429d0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-01.png
new file mode 100755
index 000000000..239b0cee4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-02.png
new file mode 100644
index 000000000..bbf413d4f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-03.png
new file mode 100644
index 000000000..9d4dac0c0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-04.png
new file mode 100644
index 000000000..befbedacb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-01.png
new file mode 100755
index 000000000..7230d1fac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-02.png
new file mode 100644
index 000000000..84d8a0d80
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-03.png
new file mode 100644
index 000000000..10c7f4701
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-01.png
new file mode 100755
index 000000000..b21426317
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-02.png
new file mode 100644
index 000000000..a1380f443
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-03.png
new file mode 100644
index 000000000..a48faa57f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-01.png
new file mode 100755
index 000000000..1459d06c5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-02.png
new file mode 100644
index 000000000..abb2c7147
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-03.png
new file mode 100644
index 000000000..048edbad2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-01.png
new file mode 100755
index 000000000..33fc4d76b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-02.png
new file mode 100644
index 000000000..e51bc8f7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-03.png
new file mode 100644
index 000000000..8aab66507
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-04.png
new file mode 100644
index 000000000..76efa198b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-01.png
new file mode 100755
index 000000000..a89bd4457
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-02.png
new file mode 100644
index 000000000..eadb631d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-03.png
new file mode 100644
index 000000000..e798d6572
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-01.png
new file mode 100755
index 000000000..e23a63a58
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-02.png
new file mode 100644
index 000000000..2918546b1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-03.png
new file mode 100644
index 000000000..31d3d020f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-01.png
new file mode 100755
index 000000000..64c12689b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-02.png
new file mode 100755
index 000000000..5c19c2f4d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-03.png
new file mode 100755
index 000000000..3c79aef06
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-04.png
new file mode 100755
index 000000000..326a55536
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-05.png
new file mode 100755
index 000000000..6c1313a76
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-01.png
new file mode 100755
index 000000000..8fdc3ee03
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-02.png
new file mode 100644
index 000000000..cc7bd813e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-03.png
new file mode 100644
index 000000000..ac6ca2d13
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-04.png
new file mode 100644
index 000000000..b7357d384
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-05.png
new file mode 100644
index 000000000..e9fba3ec1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-01.png
new file mode 100755
index 000000000..075532cbf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-02.png
new file mode 100644
index 000000000..c7309121d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-03.png
new file mode 100644
index 000000000..feff1c8a4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-04.png
new file mode 100644
index 000000000..9fcf2f686
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-05.png
new file mode 100644
index 000000000..c81ddf439
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-06.png
new file mode 100644
index 000000000..016d7584c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-01.png
new file mode 100755
index 000000000..00694546f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-02.png
new file mode 100644
index 000000000..716a4ca2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-03.png
new file mode 100644
index 000000000..ef5e15dcb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-04.png
new file mode 100644
index 000000000..3847b5ea6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-05.png
new file mode 100644
index 000000000..d039a38f6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-06.png
new file mode 100644
index 000000000..79dc0dc86
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-07.png
new file mode 100644
index 000000000..3d7d2be0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-08.png
new file mode 100644
index 000000000..21b1f7bc4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-01.png
new file mode 100755
index 000000000..94571111d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-02.png
new file mode 100644
index 000000000..92f41f708
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-03.png
new file mode 100644
index 000000000..f265c188f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-01.png
new file mode 100755
index 000000000..635390ffc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-02.png
new file mode 100644
index 000000000..2652e8ba6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-03.png
new file mode 100644
index 000000000..cca199176
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-01.png
new file mode 100755
index 000000000..05ac88b76
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-02.png
new file mode 100644
index 000000000..e0b78f87e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-03.png
new file mode 100644
index 000000000..6ab929e8e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-04.png
new file mode 100644
index 000000000..9c4efd4a7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-05.png
new file mode 100644
index 000000000..6ad83f5a5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-01.png
new file mode 100755
index 000000000..bc81b7f6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-02.png
new file mode 100644
index 000000000..a4c448ecc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-03.png
new file mode 100644
index 000000000..d3b451f0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-04.png
new file mode 100644
index 000000000..4d501269b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-05.png
new file mode 100644
index 000000000..224ad3cb7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-06.png
new file mode 100644
index 000000000..f54ae6f88
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-01.png
new file mode 100755
index 000000000..e47c88d82
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-02.png
new file mode 100644
index 000000000..4654ea88f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-03.png
new file mode 100644
index 000000000..32fa8dfc6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-04.png
new file mode 100644
index 000000000..cc3668986
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-05.png
new file mode 100644
index 000000000..c819870bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-06.png
new file mode 100644
index 000000000..348a8bc05
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-07.png
new file mode 100644
index 000000000..d4781a1f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-08.png
new file mode 100644
index 000000000..8ebed8cd0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-01.png
new file mode 100755
index 000000000..dfc1f1781
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-02.png
new file mode 100644
index 000000000..f849c9567
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-03.png
new file mode 100644
index 000000000..8493ffdf6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-04.png
new file mode 100644
index 000000000..91bda7fe3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-05.png
new file mode 100644
index 000000000..5d0e3e81f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-06.png
new file mode 100644
index 000000000..c12e464c0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-07.png
new file mode 100644
index 000000000..4f467b52a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-08.png
new file mode 100644
index 000000000..c383df54c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-01.png
new file mode 100755
index 000000000..ed63ba4bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-02.png
new file mode 100644
index 000000000..25479bf79
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-03.png
new file mode 100644
index 000000000..83480e7ef
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-04.png
new file mode 100644
index 000000000..bb31a2536
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-05.png
new file mode 100644
index 000000000..550da8ec7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-06.png
new file mode 100644
index 000000000..aafc71726
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-07.png
new file mode 100644
index 000000000..c88a175c5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-08.png
new file mode 100644
index 000000000..fde7a2378
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-01.png
new file mode 100755
index 000000000..6d900205e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-02.png
new file mode 100644
index 000000000..0548a3e95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-03.png
new file mode 100644
index 000000000..ad8eb566e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-04.png
new file mode 100644
index 000000000..353e41dd4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-05.png
new file mode 100644
index 000000000..67cff6d74
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-06.png
new file mode 100644
index 000000000..8a16078ee
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-07.png
new file mode 100644
index 000000000..ef967f867
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-notes-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-notes-01.png
new file mode 100644
index 000000000..060939d7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-notes-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-01.png
new file mode 100644
index 000000000..1853f66de
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-02.png
new file mode 100644
index 000000000..68b5af395
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif
new file mode 100644
index 000000000..5d637f90d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-02.png
new file mode 100644
index 000000000..4bf2b198c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png
new file mode 100644
index 000000000..13a47fc30
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-04.png
new file mode 100644
index 000000000..b2852152e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-05.png
new file mode 100644
index 000000000..6381be155
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png
new file mode 100644
index 000000000..527f27d9b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-01.png
new file mode 100644
index 000000000..8db8aa512
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-02.png
new file mode 100644
index 000000000..c3a25fc4e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-03.png
new file mode 100644
index 000000000..f0b40ef53
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-04.png
new file mode 100644
index 000000000..e5310a097
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-05.png
new file mode 100644
index 000000000..b9ec88b6f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-06.png
new file mode 100644
index 000000000..16f387955
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-07.png
new file mode 100644
index 000000000..569d5dba5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-08.png
new file mode 100644
index 000000000..4db135cad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-01.png
new file mode 100644
index 000000000..258d2db63
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png
new file mode 100644
index 000000000..24b910750
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png
new file mode 100644
index 000000000..ba229e549
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png
new file mode 100644
index 000000000..a90eadc98
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png
new file mode 100644
index 000000000..fa410b53d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png
new file mode 100644
index 000000000..5acd6faaa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-01.png
new file mode 100644
index 000000000..e42a15181
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-02.png
new file mode 100644
index 000000000..ebf2eb61b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-03.png
new file mode 100644
index 000000000..13a32fbd9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-04.png
new file mode 100644
index 000000000..c913caa22
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-05.png
new file mode 100644
index 000000000..85f363fe0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-06.png
new file mode 100644
index 000000000..60707c183
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-07.png
new file mode 100644
index 000000000..219df9a91
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png
new file mode 100644
index 000000000..c575e158e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-02.png
new file mode 100644
index 000000000..044718d9d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-01.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-01.png
new file mode 100644
index 000000000..4b09b9734
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-01.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-01.png
new file mode 100644
index 000000000..ad4902995
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-02.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-02.png
new file mode 100644
index 000000000..bb7d25c93
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-03.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-03.png
new file mode 100644
index 000000000..8b4c891c3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-01.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-01.png
new file mode 100644
index 000000000..671241ef0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-02.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-02.png
new file mode 100644
index 000000000..587f6b960
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-03.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-03.png
new file mode 100644
index 000000000..fb2da7256
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-04.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-04.png
new file mode 100644
index 000000000..45b14206c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-05.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-05.png
new file mode 100644
index 000000000..27c555a7d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-01.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-01.png
new file mode 100644
index 000000000..dc7abef89
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-02.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-02.png
new file mode 100644
index 000000000..fbce624f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-03.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-03.png
new file mode 100644
index 000000000..246740714
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-04.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-04.png
new file mode 100644
index 000000000..dd438d30c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-05.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-05.png
new file mode 100644
index 000000000..acb15f2c0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-06.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-06.png
new file mode 100644
index 000000000..a0bbf13f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-07.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-07.png
new file mode 100644
index 000000000..a5c391307
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-01.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-01.png
new file mode 100644
index 000000000..656b058c9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-02.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-02.png
new file mode 100644
index 000000000..880758f95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-03.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-03.png
new file mode 100644
index 000000000..0697811fa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-04.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-04.png
new file mode 100644
index 000000000..fcda29a67
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-05.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-05.png
new file mode 100644
index 000000000..99e69594b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-4-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-01.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-01.png
new file mode 100644
index 000000000..7458f5d45
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-02.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-02.png
new file mode 100644
index 000000000..b36135fae
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-03.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-03.png
new file mode 100644
index 000000000..3c468c66c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-04.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-04.png
new file mode 100644
index 000000000..a5f929302
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-5-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-01.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-01.png
new file mode 100644
index 000000000..818ae30d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-02.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-02.png
new file mode 100644
index 000000000..f79e504c3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-03.png b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-03.png
new file mode 100644
index 000000000..0a6599552
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/local-task-message/local-task-message-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-01.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-01.png
new file mode 100644
index 000000000..072c6fe3b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-02.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-02.png
new file mode 100644
index 000000000..1d32cceac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-03.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-03.png
new file mode 100644
index 000000000..33786c268
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-04.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-04.png
new file mode 100644
index 000000000..8b47275a5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-05.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-05.png
new file mode 100644
index 000000000..4704c9486
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-06.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-06.png
new file mode 100644
index 000000000..fc9460b32
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-07.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-07.png
new file mode 100644
index 000000000..b738804ff
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-08.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-08.png
new file mode 100644
index 000000000..4c969101b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-09.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-09.png
new file mode 100644
index 000000000..502504c0b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-10.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-10.png
new file mode 100644
index 000000000..fa65ea6d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-11.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-11.png
new file mode 100644
index 000000000..1f6235d5f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-12.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-12.png
new file mode 100644
index 000000000..64e72cc74
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-13.png b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-13.png
new file mode 100644
index 000000000..55dedc253
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/lucky-tackout/lucky-tackout-introduction-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-01.png b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-01.png
new file mode 100644
index 000000000..d1f832197
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-02.png b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-02.png
new file mode 100644
index 000000000..453c3da13
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-03.png b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-03.png
new file mode 100644
index 000000000..afc1ef440
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-04.png b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-04.png
new file mode 100644
index 000000000..4c4046f0e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-05.png b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-05.png
new file mode 100644
index 000000000..ada1369cd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-06.png b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-06.png
new file mode 100644
index 000000000..fd5c9ea1b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/prd/xfg-prd-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-01.png
new file mode 100644
index 000000000..d73726c56
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-02.png
new file mode 100644
index 000000000..3a3080d99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png
new file mode 100644
index 000000000..e582f1150
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-04.png
new file mode 100644
index 000000000..ded65f9c2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png
new file mode 100644
index 000000000..cb89076c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-01.png
new file mode 100644
index 000000000..2152ee64c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-02.png
new file mode 100644
index 000000000..8cc8a9ed8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-01.png
new file mode 100644
index 000000000..4ced3d23c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-02.png
new file mode 100644
index 000000000..7044efbf4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-03.png
new file mode 100644
index 000000000..b82d12b4c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-04.png
new file mode 100644
index 000000000..2492516a2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-05.png
new file mode 100644
index 000000000..51eefdd64
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-06.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-06.png
new file mode 100644
index 000000000..26f80cf88
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-07.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-07.png
new file mode 100644
index 000000000..d56ac7d3d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-08.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-08.png
new file mode 100644
index 000000000..89a9602c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-09.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-09.png
new file mode 100644
index 000000000..aab97d7a6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-10.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-10.png
new file mode 100644
index 000000000..c141e153e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-01.png
new file mode 100644
index 000000000..f9fc6a122
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-02.png
new file mode 100644
index 000000000..e52b790cb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-03.png
new file mode 100644
index 000000000..4a789947a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-04.png
new file mode 100644
index 000000000..c8d8c5300
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-05.png
new file mode 100644
index 000000000..407f25594
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-06.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-06.png
new file mode 100644
index 000000000..9f96f9500
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-07.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-07.png
new file mode 100644
index 000000000..853112319
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-08.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-08.png
new file mode 100644
index 000000000..d9c7436c6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-09.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-09.png
new file mode 100644
index 000000000..39a6f9b4a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-10.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-10.png
new file mode 100644
index 000000000..6791c4291
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-01.png
new file mode 100644
index 000000000..92844e6f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-02.png
new file mode 100644
index 000000000..ee4beac9e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-03.png
new file mode 100644
index 000000000..af41df69a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-04.png
new file mode 100644
index 000000000..f4357f47b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-05.png
new file mode 100644
index 000000000..e657cb62a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-06.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-06.png
new file mode 100644
index 000000000..5d2c96932
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-01.png
new file mode 100644
index 000000000..dac7c7cf9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-02.png
new file mode 100644
index 000000000..ab8a37566
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-2-02.png
new file mode 100644
index 000000000..7cd44a207
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-3-01.png
new file mode 100644
index 000000000..ab7c08ed5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-4-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-4-01.png
new file mode 100644
index 000000000..237532bf7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-6-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-6-01.png
new file mode 100644
index 000000000..38efa3421
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-01.png
new file mode 100644
index 000000000..95dea7831
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-02.png
new file mode 100644
index 000000000..185a760dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-03.png
new file mode 100644
index 000000000..5855428bd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-01.png
new file mode 100644
index 000000000..e35b79f0c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-02.png
new file mode 100644
index 000000000..ae309ae21
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-03.png
new file mode 100644
index 000000000..ca786a16b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-04.png
new file mode 100644
index 000000000..b9dc4d14f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-01.png
new file mode 100644
index 000000000..1f92af8b7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-02.png
new file mode 100644
index 000000000..69405813e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-03.png
new file mode 100644
index 000000000..d1711112c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-04.png
new file mode 100644
index 000000000..6d07d979d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-05.png
new file mode 100644
index 000000000..efcd335e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-01.png
new file mode 100644
index 000000000..37ad10331
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-02.png
new file mode 100644
index 000000000..29077bbb7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-01.png
new file mode 100644
index 000000000..ebfd8a9f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-02.png
new file mode 100644
index 000000000..dde0ba2e9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-6-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-6-01.png
new file mode 100644
index 000000000..0cd9547e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-7-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-7-01.png
new file mode 100644
index 000000000..b43222f48
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png
new file mode 100644
index 000000000..9a5bb8487
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-02.png
new file mode 100644
index 000000000..2b7836b9f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-03.png
new file mode 100644
index 000000000..0a8af6ee7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-01.png b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-01.png
new file mode 100644
index 000000000..cd54100da
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-02.png b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-02.png
new file mode 100644
index 000000000..65ed7f697
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-03.png b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-03.png
new file mode 100644
index 000000000..caa337eb0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-04.png b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-04.png
new file mode 100644
index 000000000..e0e545804
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-05.png b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-05.png
new file mode 100644
index 000000000..a0a8c20da
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-06.png b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-06.png
new file mode 100644
index 000000000..f7bc15d80
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-07.png b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-07.png
new file mode 100644
index 000000000..812777e8f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-fish-pond/xfg-fish-pond-introduction-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-01.png
new file mode 100644
index 000000000..ff82e2c7d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-02.png
new file mode 100644
index 000000000..861c6932d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-03.png
new file mode 100644
index 000000000..c6a96cabf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-04.png
new file mode 100644
index 000000000..9e099d13e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-05.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-05.png
new file mode 100644
index 000000000..a87fe8ffd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-01.png
new file mode 100644
index 000000000..a79d39385
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-02.png
new file mode 100644
index 000000000..475e72003
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-03.png
new file mode 100644
index 000000000..e23b64cef
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-04.png
new file mode 100644
index 000000000..01586774c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-01.png
new file mode 100644
index 000000000..8c47ef8a8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-02.png
new file mode 100644
index 000000000..12b118ca8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-03.png
new file mode 100644
index 000000000..659693111
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-04.png
new file mode 100644
index 000000000..d77d9dc90
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-05.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-05.png
new file mode 100644
index 000000000..2573c9257
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-06.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-06.png
new file mode 100644
index 000000000..481e66400
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-01.gif b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-01.gif
new file mode 100644
index 000000000..2c1084909
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-01.gif differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-02.png
new file mode 100644
index 000000000..3e9646293
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-03.png
new file mode 100644
index 000000000..065b3dd7d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-04.png
new file mode 100644
index 000000000..a14abee1d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-05.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-05.png
new file mode 100644
index 000000000..e6393e403
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-06.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-06.png
new file mode 100644
index 000000000..08a6e4a0f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-07.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-07.png
new file mode 100644
index 000000000..68f68ff98
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-08.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-08.png
new file mode 100644
index 000000000..9bf95ee07
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-09.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-09.png
new file mode 100644
index 000000000..e90c26c61
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-3-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-01.png
new file mode 100644
index 000000000..53ab2800f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-02.png
new file mode 100644
index 000000000..e4ab3e542
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-03.png
new file mode 100644
index 000000000..1a0329830
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-04.png
new file mode 100644
index 000000000..92009f6ad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-01.png
new file mode 100644
index 000000000..51f91db50
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-02.png
new file mode 100644
index 000000000..c90fb16a5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-03.png
new file mode 100644
index 000000000..772543295
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-04.png
new file mode 100644
index 000000000..394ee4c53
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-5-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-5-01.png
new file mode 100644
index 000000000..d4e9c0d78
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-5-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-5-02.png
new file mode 100644
index 000000000..37a812fd3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-01.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-01.png
new file mode 100644
index 000000000..0125211b1
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-02.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-02.png
new file mode 100644
index 000000000..0132c37d8
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-03.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-03.png
new file mode 100644
index 000000000..0243629e9
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-04.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-04.png
new file mode 100644
index 000000000..a6d54a915
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-05.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-05.png
new file mode 100644
index 000000000..abba9c0f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-06.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-06.png
new file mode 100644
index 000000000..3fad0bac4
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-07.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-07.png
new file mode 100644
index 000000000..e2196d615
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-01.gif b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-01.gif
new file mode 100644
index 000000000..a8e4892e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-01.gif differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-2.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-2.png
new file mode 100644
index 000000000..241a48fd0
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-2.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-3.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-3.png
new file mode 100644
index 000000000..788b6aad2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-3.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02.png
new file mode 100644
index 000000000..c8b986380
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-03.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-03.png
new file mode 100644
index 000000000..d908f86a2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-04.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-04.png
new file mode 100644
index 000000000..98e3b0cf3
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-01.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-01.png
new file mode 100644
index 000000000..37bfbaae2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-02.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-02.png
new file mode 100644
index 000000000..d54ed7826
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-03.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-03.png
new file mode 100644
index 000000000..c0da6857c
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-04.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-04.png
new file mode 100644
index 000000000..f69503a34
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-05.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-05.png
new file mode 100644
index 000000000..d3531e166
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-06.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-06.png
new file mode 100644
index 000000000..c04db94a3
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-07.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-07.png
new file mode 100644
index 000000000..ff8ce887f
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-08.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-08.png
new file mode 100644
index 000000000..7e91f252b
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-08.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-00.gif b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-00.gif
new file mode 100644
index 000000000..25097b89a
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-00.gif differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-01.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-01.png
new file mode 100755
index 000000000..9a61ca7b7
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-02.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-02.png
new file mode 100755
index 000000000..46495d2b7
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-03.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-03.png
new file mode 100755
index 000000000..3c82f25b4
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-04.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-04.png
new file mode 100755
index 000000000..e2f9c4274
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-05.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-05.png
new file mode 100755
index 000000000..4cc86127c
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-06.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-06.png
new file mode 100755
index 000000000..db9447140
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-07.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-07.png
new file mode 100755
index 000000000..b79911d09
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-08.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-08.png
new file mode 100755
index 000000000..4af98f8d0
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-08.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-09.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-09.png
new file mode 100755
index 000000000..a8826a4fe
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-09.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-10.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-10.png
new file mode 100755
index 000000000..4d998a367
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-10.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-250115-01.jpg b/docs/.vuepress/public/images/article/zsxq/zsxq-250115-01.jpg
new file mode 100644
index 000000000..6d55952a8
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-250115-01.jpg differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-door.png b/docs/.vuepress/public/images/article/zsxq/zsxq-door.png
new file mode 100644
index 000000000..976ee0aa2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-door.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-01.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-01.png
new file mode 100644
index 000000000..cb0ffc73f
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-02.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-02.png
new file mode 100644
index 000000000..8629112b5
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-03.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-03.png
new file mode 100644
index 000000000..75cca6a85
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-04.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-04.png
new file mode 100644
index 000000000..97d211b41
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-05.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-05.png
new file mode 100644
index 000000000..d46137941
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-06.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-06.png
new file mode 100644
index 000000000..28330ff55
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-07.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-07.png
new file mode 100644
index 000000000..dc36cbbd6
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-08.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-08.png
new file mode 100644
index 000000000..2d1898f8b
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-08.png differ
diff --git a/docs/.vuepress/public/images/personal/wx.png b/docs/.vuepress/public/images/personal/wx.png
new file mode 100644
index 000000000..3cbc440c7
Binary files /dev/null and b/docs/.vuepress/public/images/personal/wx.png differ
diff --git a/docs/.vuepress/public/images/personal/wx_kefu.png b/docs/.vuepress/public/images/personal/wx_kefu.png
new file mode 100644
index 000000000..81b3e7838
Binary files /dev/null and b/docs/.vuepress/public/images/personal/wx_kefu.png differ
diff --git a/docs/.vuepress/public/images/personal/wx_little.png b/docs/.vuepress/public/images/personal/wx_little.png
new file mode 100644
index 000000000..b98b265c6
Binary files /dev/null and b/docs/.vuepress/public/images/personal/wx_little.png differ
diff --git a/docs/.vuepress/public/images/personal/wx_qiye.png b/docs/.vuepress/public/images/personal/wx_qiye.png
new file mode 100644
index 000000000..4463c47fd
Binary files /dev/null and b/docs/.vuepress/public/images/personal/wx_qiye.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/Xnip2025-12-28_10-47-09.png b/docs/.vuepress/public/images/roadmap/tutorial/Xnip2025-12-28_10-47-09.png
new file mode 100644
index 000000000..0d7f9601a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/Xnip2025-12-28_10-47-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-01.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-01.png
new file mode 100644
index 000000000..c1fe9f54d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-02.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-02.png
new file mode 100644
index 000000000..bc28c2f0c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-03.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-03.png
new file mode 100644
index 000000000..35929acdb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-04.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-04.png
new file mode 100644
index 000000000..7549c9265
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-05.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-05.png
new file mode 100644
index 000000000..7f591702a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-06.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-06.png
new file mode 100644
index 000000000..60d69da8b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-07.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-07.png
new file mode 100644
index 000000000..808ca7cf5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/draw.io-08.png b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-08.png
new file mode 100644
index 000000000..fd5659f43
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/draw.io-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/img.png b/docs/.vuepress/public/images/roadmap/tutorial/img.png
new file mode 100644
index 000000000..7a61a114e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/img.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/img_1.png b/docs/.vuepress/public/images/roadmap/tutorial/img_1.png
new file mode 100644
index 000000000..7a61a114e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/img_1.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-01.gif
new file mode 100644
index 000000000..6fb467757
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-02.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-02.png
new file mode 100644
index 000000000..db8e2c9c9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-03.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-03.png
new file mode 100644
index 000000000..c0d12775c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-04.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-04.png
new file mode 100644
index 000000000..b61c212c2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-05.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-05.png
new file mode 100644
index 000000000..0a7cd50d1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-06.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-06.png
new file mode 100644
index 000000000..d2e3959fe
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-07.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-07.png
new file mode 100644
index 000000000..7e6e5e30b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-08.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-08.png
new file mode 100644
index 000000000..cb7086192
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-09.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-09.png
new file mode 100644
index 000000000..182d06168
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-10.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-10.png
new file mode 100644
index 000000000..7f4dc9773
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-11.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-11.png
new file mode 100644
index 000000000..351c388ee
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-12.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-12.png
new file mode 100644
index 000000000..86d1b31eb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-01.png
new file mode 100644
index 000000000..9599da683
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-02.png
new file mode 100644
index 000000000..5f4766da7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-03.png
new file mode 100644
index 000000000..33c2ed33a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-04.png
new file mode 100644
index 000000000..8cb3011a7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-00.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-00.png
new file mode 100644
index 000000000..eeba5f5c0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-00.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-01.png
new file mode 100644
index 000000000..358d5d57b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-02.png
new file mode 100644
index 000000000..ebdcc9414
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-03.png
new file mode 100644
index 000000000..7308b1874
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-04.png
new file mode 100644
index 000000000..5d1a4d512
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-05.png
new file mode 100644
index 000000000..595c95a2c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-agent-skill-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-01.png
new file mode 100644
index 000000000..c5cdf08d0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-02.png
new file mode 100644
index 000000000..dcb66342f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-03.png
new file mode 100644
index 000000000..4a8bb4ecc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-04.png
new file mode 100644
index 000000000..af04c6ba6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-05.png
new file mode 100644
index 000000000..cd18dbbef
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-06.png
new file mode 100644
index 000000000..74c34090d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-07.png
new file mode 100644
index 000000000..4380115e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-08.png
new file mode 100644
index 000000000..441ed5c9f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-09.png
new file mode 100644
index 000000000..639c92891
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-10.png
new file mode 100644
index 000000000..1365aaecb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-11.png
new file mode 100644
index 000000000..f06c83ab9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-12.png
new file mode 100644
index 000000000..8b2f45e59
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-13.png
new file mode 100644
index 000000000..e8f3c928e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-14.png
new file mode 100644
index 000000000..c56806efd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-15.png
new file mode 100644
index 000000000..716c7b46d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-16.png
new file mode 100644
index 000000000..e7f2458d4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ai-agent-openclaw-attempt-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-01.png
new file mode 100644
index 000000000..27f96155c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-02.png
new file mode 100644
index 000000000..07df0e716
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-03.png
new file mode 100644
index 000000000..7a9c9003e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-04.png
new file mode 100644
index 000000000..bdc8786e3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-05.png
new file mode 100644
index 000000000..d8fa0ca30
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-06.png
new file mode 100644
index 000000000..a84d5d132
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-07.png
new file mode 100644
index 000000000..4a2a8f86a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-08.png
new file mode 100644
index 000000000..b1e4efee0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-09.png
new file mode 100644
index 000000000..32bbfcbf0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-10.png
new file mode 100644
index 000000000..5d15173fa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-01.png
new file mode 100644
index 000000000..6e7326585
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-02.png
new file mode 100644
index 000000000..237e830cc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-03.png
new file mode 100644
index 000000000..70c5bed00
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-04.png
new file mode 100644
index 000000000..eb4182e3c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-05.png
new file mode 100644
index 000000000..923da7f1b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-06.png
new file mode 100644
index 000000000..7cf270c6a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-07.png
new file mode 100644
index 000000000..8e2641563
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-08.png
new file mode 100644
index 000000000..82b5bbbf6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-09.png
new file mode 100644
index 000000000..7817fb940
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-10.png
new file mode 100644
index 000000000..ac4ce9927
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-11.png
new file mode 100644
index 000000000..9cbb196ba
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-12.png
new file mode 100644
index 000000000..5b1233cf4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-13.png
new file mode 100644
index 000000000..5e19871a6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-14.png
new file mode 100644
index 000000000..95fa20d12
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-15.png
new file mode 100644
index 000000000..60c232cc5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-16.png
new file mode 100644
index 000000000..22103ace4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-17.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-17.png
new file mode 100644
index 000000000..3d83021a7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-01.png
new file mode 100644
index 000000000..dda9ed57d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-02.png
new file mode 100644
index 000000000..c2a752994
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-03.png
new file mode 100644
index 000000000..1a84a9fe1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-04.png
new file mode 100644
index 000000000..ef5362bf8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-architectural-design-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-01.png
new file mode 100644
index 000000000..09d250359
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-02.png
new file mode 100644
index 000000000..d1f9bd5e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-03.png
new file mode 100644
index 000000000..4399dcc1e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-04.png
new file mode 100644
index 000000000..0e623d940
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-05.png
new file mode 100644
index 000000000..aac28d6fe
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-06.png
new file mode 100644
index 000000000..034162af7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-07.png
new file mode 100644
index 000000000..292ac72a0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-08.png
new file mode 100644
index 000000000..bb7bc2736
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-09.png
new file mode 100644
index 000000000..c2f44aadc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-10.png
new file mode 100644
index 000000000..14e236795
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-11.png
new file mode 100644
index 000000000..019e09a39
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-12.png
new file mode 100644
index 000000000..bf9b6a9ab
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-13.png
new file mode 100644
index 000000000..a9fcc22f9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-01.png
new file mode 100644
index 000000000..0f0b9caea
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-02.png
new file mode 100644
index 000000000..d2c71adf7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-03.png
new file mode 100644
index 000000000..cb0a47398
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-04.png
new file mode 100644
index 000000000..f9cb57b55
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-05.png
new file mode 100644
index 000000000..edb51b167
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-01.png
new file mode 100644
index 000000000..74bf528e4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-02.png
new file mode 100644
index 000000000..73fcc58da
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-03.png
new file mode 100644
index 000000000..59c755e50
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-04.png
new file mode 100644
index 000000000..84669cbfd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-05.png
new file mode 100644
index 000000000..26244a451
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-01.gif
new file mode 100644
index 000000000..f32099b9d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-02.png
new file mode 100644
index 000000000..a9bb17e00
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-03.png
new file mode 100644
index 000000000..37014481d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-04.png
new file mode 100644
index 000000000..10094eb59
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-00.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-00.gif
new file mode 100644
index 000000000..479d9ed45
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-00.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-01.png
new file mode 100644
index 000000000..2bf30fa79
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-02.png
new file mode 100644
index 000000000..d71057a83
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-03.png
new file mode 100644
index 000000000..2798f5d87
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-04.png
new file mode 100644
index 000000000..a4eda6f05
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-01.png
new file mode 100644
index 000000000..038c8988f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-02.png
new file mode 100644
index 000000000..e510ecdbf
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-03.png
new file mode 100644
index 000000000..ff765afa8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-04.png
new file mode 100644
index 000000000..0acb0ef50
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-05.png
new file mode 100644
index 000000000..d44657c78
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-06.png
new file mode 100644
index 000000000..209f3a719
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-07.png
new file mode 100644
index 000000000..a88952496
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-08.png
new file mode 100644
index 000000000..7f98bae43
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-09.png
new file mode 100644
index 000000000..37e222db1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-10.png
new file mode 100644
index 000000000..60c0065b0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-11.png
new file mode 100644
index 000000000..e25857da2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-deploy-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-01.png
new file mode 100644
index 000000000..a8e83b083
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-02.png
new file mode 100644
index 000000000..b5b613549
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-03.png
new file mode 100644
index 000000000..c57449790
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-04.png
new file mode 100644
index 000000000..d8490710e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-05.png
new file mode 100644
index 000000000..a100f3058
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-06.png
new file mode 100644
index 000000000..30ce95c19
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-07.png
new file mode 100644
index 000000000..bc6b5cdf2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-01.png
new file mode 100644
index 000000000..0d65d5a12
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-02.png
new file mode 100644
index 000000000..9ae618d63
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-03.png
new file mode 100644
index 000000000..c8b24fd62
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-04.png
new file mode 100644
index 000000000..000f727a6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-05.png
new file mode 100644
index 000000000..7e31fcb8b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-06.png
new file mode 100644
index 000000000..2240875cf
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-07.png
new file mode 100644
index 000000000..7013cf6f3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-08.png
new file mode 100644
index 000000000..54b941d0d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-09.png
new file mode 100644
index 000000000..0b1f14fc0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-10.png
new file mode 100644
index 000000000..f6d4ac592
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-11.png
new file mode 100644
index 000000000..3a53c27aa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-12.png
new file mode 100644
index 000000000..8d0e046b0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-13.png
new file mode 100644
index 000000000..e0965ab32
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-20.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-20.png
new file mode 100644
index 000000000..844f9500a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-20.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-21.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-21.png
new file mode 100644
index 000000000..66a75a92c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-21.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-22.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-22.png
new file mode 100644
index 000000000..b3d46066d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-22.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-23.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-23.png
new file mode 100644
index 000000000..7aa6effb6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-23.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-24.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-24.png
new file mode 100644
index 000000000..d750688c7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-24.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-01.png
new file mode 100644
index 000000000..64f4f58dc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-02.png
new file mode 100644
index 000000000..9fbc61029
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-03.png
new file mode 100644
index 000000000..cc77e4c58
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-04.png
new file mode 100644
index 000000000..4728d1328
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-05.png
new file mode 100644
index 000000000..47677b348
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-06.png
new file mode 100644
index 000000000..f8fdf32da
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-07.png
new file mode 100644
index 000000000..de436b72d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-08.png
new file mode 100644
index 000000000..244bc6e6a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-github-modes-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-01.png
new file mode 100644
index 000000000..42a560e19
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-02.png
new file mode 100644
index 000000000..a60cec435
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-03.png
new file mode 100644
index 000000000..875664022
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-04.png
new file mode 100644
index 000000000..883001553
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-05.png
new file mode 100644
index 000000000..10f7f87a4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-06.png
new file mode 100644
index 000000000..e9173e8f1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-google-adk-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-01.gif
new file mode 100644
index 000000000..2a6a043e2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-02.png
new file mode 100644
index 000000000..6deb76af8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-03.png
new file mode 100644
index 000000000..ba7d15785
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-04.png
new file mode 100644
index 000000000..69c2239e0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-05.png
new file mode 100644
index 000000000..3ea8daf99
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-06.png
new file mode 100644
index 000000000..5b96ce19d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-07.png
new file mode 100644
index 000000000..ac7a36964
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-08.png
new file mode 100644
index 000000000..59c9a68b7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-09.png
new file mode 100644
index 000000000..ea7dd3f5a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-10.png
new file mode 100644
index 000000000..08c11c68d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-11.png
new file mode 100644
index 000000000..e3ecff4aa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-12.png
new file mode 100644
index 000000000..cd6acf932
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-13.png
new file mode 100644
index 000000000..ff5a3929e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-14.png
new file mode 100644
index 000000000..7842833b1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-15.png
new file mode 100644
index 000000000..a6884c4f9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-16.png
new file mode 100644
index 000000000..503faff79
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-higress-ai-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-01.png
new file mode 100644
index 000000000..e015c2463
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-02.png
new file mode 100644
index 000000000..9316bca60
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-03.png
new file mode 100644
index 000000000..5a16d2869
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-04.png
new file mode 100644
index 000000000..d8f9da698
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-05.png
new file mode 100644
index 000000000..5a6349c38
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-06.png
new file mode 100644
index 000000000..04839277b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-07.png
new file mode 100644
index 000000000..e0bf78df3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-08.png
new file mode 100644
index 000000000..665762591
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-09.png
new file mode 100644
index 000000000..d4ac8f7a7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-10.png
new file mode 100644
index 000000000..abbbfb815
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-11.png
new file mode 100644
index 000000000..22afb2875
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-12.png
new file mode 100644
index 000000000..01c896624
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-13.png
new file mode 100644
index 000000000..94ec310b3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-joycode-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-01.gif
new file mode 100644
index 000000000..3e9103a8c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-02.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-02.gif
new file mode 100644
index 000000000..66af144d7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-02.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-03.png
new file mode 100644
index 000000000..03d375099
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-04.png
new file mode 100644
index 000000000..23bfc1ce9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-05.png
new file mode 100644
index 000000000..26c3022ae
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-06.png
new file mode 100644
index 000000000..438997207
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-07.png
new file mode 100644
index 000000000..8caf650f2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-01.gif
new file mode 100644
index 000000000..f298fac61
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-02.png
new file mode 100644
index 000000000..0d8a668c9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-03.png
new file mode 100644
index 000000000..c1696c1f3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-04.png
new file mode 100644
index 000000000..5f11e856b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-05.png
new file mode 100644
index 000000000..ff6a911b8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-06.png
new file mode 100644
index 000000000..0f13431db
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-07.png
new file mode 100644
index 000000000..64f767bcd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-08.png
new file mode 100644
index 000000000..dfeaa17ab
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-09.png
new file mode 100644
index 000000000..4f3f4ff87
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-10.png
new file mode 100644
index 000000000..df2b6bf9c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-11.png
new file mode 100644
index 000000000..2e00430a0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-12.png
new file mode 100644
index 000000000..34c17315a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-13.png
new file mode 100644
index 000000000..d79927edc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-14.png
new file mode 100644
index 000000000..a20069560
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-15.png
new file mode 100644
index 000000000..35961140e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-16.png
new file mode 100644
index 000000000..ec96d087a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-17.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-17.png
new file mode 100644
index 000000000..a9cacc934
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-18.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-18.png
new file mode 100644
index 000000000..4c1a6981a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-18.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-19.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-19.png
new file mode 100644
index 000000000..f9fda0cd9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-19.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-20.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-20.png
new file mode 100644
index 000000000..d70d66466
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-20.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-21.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-21.png
new file mode 100644
index 000000000..a3080cd17
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-21.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-22.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-22.png
new file mode 100644
index 000000000..0fd15fbff
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-22.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-23.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-23.png
new file mode 100644
index 000000000..9b420aa60
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-23.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-24.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-24.png
new file mode 100644
index 000000000..905b2a162
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-24.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-01.gif
new file mode 100644
index 000000000..090e37ae9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-02.png
new file mode 100644
index 000000000..e61d6bf93
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-03.png
new file mode 100644
index 000000000..9f55039a5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-04.png
new file mode 100644
index 000000000..252b49648
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-05.png
new file mode 100644
index 000000000..30562382d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-06.png
new file mode 100644
index 000000000..59b158b44
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-07.png
new file mode 100644
index 000000000..a7860e169
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-08.png
new file mode 100644
index 000000000..c72758bde
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-01.png
new file mode 100644
index 000000000..ee2a166d8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-02.png
new file mode 100644
index 000000000..4f3f5793b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-03.png
new file mode 100644
index 000000000..6f0b027df
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-04.png
new file mode 100644
index 000000000..98eca0ffc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-05.png
new file mode 100644
index 000000000..74b1d0a3b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-06.png
new file mode 100644
index 000000000..ec63f5a06
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-07.png
new file mode 100644
index 000000000..286a954d5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-08.png
new file mode 100644
index 000000000..ade777de9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-09.png
new file mode 100644
index 000000000..cc73f8f58
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-10.png
new file mode 100644
index 000000000..f7f273bc2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-11.png
new file mode 100644
index 000000000..9c455920b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-12.png
new file mode 100644
index 000000000..fe2361aa1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-13.png
new file mode 100644
index 000000000..2c84428e3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-14.png
new file mode 100644
index 000000000..561f04eb4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-00.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-00.gif
new file mode 100644
index 000000000..977e4808e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-00.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-01.png
new file mode 100644
index 000000000..160e50843
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-02.png
new file mode 100644
index 000000000..5cfbd0586
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-03.png
new file mode 100644
index 000000000..9429bd188
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-04.png
new file mode 100644
index 000000000..0f4c7a2ba
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-05.png
new file mode 100644
index 000000000..05dc48486
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-06.png
new file mode 100644
index 000000000..25cd2d233
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-07.png
new file mode 100644
index 000000000..a22a08baf
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-08.png
new file mode 100644
index 000000000..dc8a3b40a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-09.png
new file mode 100644
index 000000000..bf7dcdc8a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-10.png
new file mode 100644
index 000000000..3bae3e205
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-11.png
new file mode 100644
index 000000000..e221c1451
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-01.gif
new file mode 100644
index 000000000..cb6e9d748
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-02.png
new file mode 100644
index 000000000..c230746e2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-03.png
new file mode 100644
index 000000000..753f57d77
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-04.png
new file mode 100644
index 000000000..f9132d68f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-05.png
new file mode 100644
index 000000000..ce0b3ff9a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-06.png
new file mode 100644
index 000000000..cdac29f60
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-07.png
new file mode 100644
index 000000000..d28c83d25
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-08.png
new file mode 100644
index 000000000..176565d16
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-09.png
new file mode 100644
index 000000000..a7bc9ed75
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-10.png
new file mode 100644
index 000000000..5511b6f66
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-11.png
new file mode 100644
index 000000000..21d19b4ed
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-12.png
new file mode 100644
index 000000000..460d47939
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-13.png
new file mode 100644
index 000000000..7ea01653d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-14.png
new file mode 100644
index 000000000..15d0ebd92
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-15.png
new file mode 100644
index 000000000..093f7a423
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-16.png
new file mode 100644
index 000000000..e920d454c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-17.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-17.png
new file mode 100644
index 000000000..a5575f7c2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-18.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-18.png
new file mode 100644
index 000000000..d3fa7b60f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-18.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-19.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-19.png
new file mode 100644
index 000000000..3d31eed31
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-19.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-20.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-20.png
new file mode 100644
index 000000000..d9a689de9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-20.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-21.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-21.png
new file mode 100644
index 000000000..26ae2c19b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-21.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-22.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-22.png
new file mode 100644
index 000000000..6b5767942
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-22.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-23.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-23.png
new file mode 100644
index 000000000..f59dd95c3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-openclaw-23.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-01.png
new file mode 100644
index 000000000..86b0aafe2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-02.png
new file mode 100644
index 000000000..4f482e9cb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-03.png
new file mode 100644
index 000000000..59a180a90
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-04.png
new file mode 100644
index 000000000..d663606e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-05.png
new file mode 100644
index 000000000..7320d4523
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-06.png
new file mode 100644
index 000000000..baf2383b1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-07.png
new file mode 100644
index 000000000..f1dae07a1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-08.png
new file mode 100644
index 000000000..820a83918
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-09.png
new file mode 100644
index 000000000..a987a1f74
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-10.png
new file mode 100644
index 000000000..3ba133a7a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-11.png
new file mode 100644
index 000000000..b9479e9ee
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-12.png
new file mode 100644
index 000000000..92c8c5545
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-13.png
new file mode 100644
index 000000000..9768c5577
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-opencode-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-01.png
new file mode 100644
index 000000000..2de1fd999
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-02.png
new file mode 100644
index 000000000..520eb9e61
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-03.png
new file mode 100644
index 000000000..7ff3a8916
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-04.png
new file mode 100644
index 000000000..5528a95ed
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-05.png
new file mode 100644
index 000000000..956129d86
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-06.png
new file mode 100644
index 000000000..61ffbc3a5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-07.png
new file mode 100644
index 000000000..e950192bc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-08.png
new file mode 100644
index 000000000..acdf41db1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-01.png
new file mode 100644
index 000000000..a4b30212d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-02.png
new file mode 100644
index 000000000..e3262a557
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-03.png
new file mode 100644
index 000000000..f8f49e431
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-04.png
new file mode 100644
index 000000000..4169e2f6e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-05.png
new file mode 100644
index 000000000..19896632a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-06.png
new file mode 100644
index 000000000..cd3896bcb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-07.png
new file mode 100644
index 000000000..92ce813df
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-08.png
new file mode 100644
index 000000000..7b8f223e6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-09.png
new file mode 100644
index 000000000..e7538a845
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-01.png
new file mode 100755
index 000000000..72c1cfbd4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-02.png
new file mode 100755
index 000000000..bb91a8daa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-03.png
new file mode 100755
index 000000000..1ba0a88cf
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-04.png
new file mode 100755
index 000000000..51cf26346
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-05.png
new file mode 100755
index 000000000..045d409aa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-06.png
new file mode 100755
index 000000000..fb3420ba7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-07.png
new file mode 100755
index 000000000..0cf748479
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-08.png
new file mode 100755
index 000000000..215c6dcc0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-09.png
new file mode 100755
index 000000000..d35dc34c8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-01.png
new file mode 100644
index 000000000..634305c99
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-02.png
new file mode 100644
index 000000000..157d188fd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-03.png
new file mode 100644
index 000000000..147e45d55
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-04.png
new file mode 100644
index 000000000..dc0451d61
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-05.png
new file mode 100644
index 000000000..b08a3fffc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-06.png
new file mode 100644
index 000000000..5edf80a6a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-07.png
new file mode 100644
index 000000000..a7c05b2e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-08.png
new file mode 100644
index 000000000..f6071c31c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-09.png
new file mode 100644
index 000000000..851b3d50b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-01.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-01.png
new file mode 100644
index 000000000..20216091e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-02.png
new file mode 100644
index 000000000..9f6363a3a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-03.png
new file mode 100644
index 000000000..d6be0e7d6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-04.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-04.png
new file mode 100644
index 000000000..4e57f8326
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-05.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-05.png
new file mode 100644
index 000000000..c86afd28a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-06.png
new file mode 100644
index 000000000..d0e283460
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-07.png
new file mode 100644
index 000000000..5b4680044
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-08.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-08.png
new file mode 100644
index 000000000..9989d96d5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-09.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-09.png
new file mode 100644
index 000000000..3da7112dd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-10.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-10.png
new file mode 100644
index 000000000..1945470ac
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-11.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-11.png
new file mode 100644
index 000000000..2c1533893
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-12.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-12.png
new file mode 100644
index 000000000..7743f2ad8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-13.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-13.png
new file mode 100644
index 000000000..a08135be8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-14.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-14.png
new file mode 100644
index 000000000..45ce04f39
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-15.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-15.png
new file mode 100644
index 000000000..00f3eb8a1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-16.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-16.png
new file mode 100644
index 000000000..6cc0dde80
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-17.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-17.png
new file mode 100644
index 000000000..2d04fad25
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-18.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-18.png
new file mode 100644
index 000000000..27dfbb314
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-phone-agent-18.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-06.png
new file mode 100644
index 000000000..67b2b92a1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-07.png
new file mode 100644
index 000000000..52659e0ac
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-01.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-01.png
new file mode 100644
index 000000000..3efeecfd9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-02.png
new file mode 100644
index 000000000..759e5c16c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-03.png
new file mode 100644
index 000000000..6a5485442
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-04.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-04.png
new file mode 100644
index 000000000..efc2a3236
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-05.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-05.png
new file mode 100644
index 000000000..9f317ef3f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-06.png
new file mode 100644
index 000000000..6225d3f71
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-07.png
new file mode 100644
index 000000000..c66fab4fd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-08.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-08.png
new file mode 100644
index 000000000..0bd6b19ce
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-09.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-09.png
new file mode 100644
index 000000000..bd3ff1b9f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif
new file mode 100644
index 000000000..27c31ab25
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-02.png
new file mode 100644
index 000000000..37cd5097f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-03.png
new file mode 100644
index 000000000..f2d432b98
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-04.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-04.png
new file mode 100644
index 000000000..ee242a673
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-05.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-05.png
new file mode 100644
index 000000000..ce031bdfd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-06.png
new file mode 100644
index 000000000..8610f2352
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-07.png
new file mode 100644
index 000000000..3f6a559d6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-01.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-01.png
new file mode 100644
index 000000000..481913e1b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-02.png
new file mode 100644
index 000000000..5b804eea9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-03.png
new file mode 100644
index 000000000..be5655d9c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-01.gif
new file mode 100644
index 000000000..69b2da8d2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-02.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-02.png
new file mode 100644
index 000000000..fb10eef7d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-03.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-03.png
new file mode 100644
index 000000000..b963cdaa7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-04.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-04.png
new file mode 100644
index 000000000..e8aebb8c4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-05.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-05.png
new file mode 100644
index 000000000..f5be72464
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-06.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-06.png
new file mode 100644
index 000000000..cca1aae7f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-07.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-07.png
new file mode 100644
index 000000000..becd3d3e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-01.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-01.png
new file mode 100644
index 000000000..88d1619bd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-02.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-02.png
new file mode 100644
index 000000000..a68e9e76f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-03.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-03.png
new file mode 100644
index 000000000..c625f1a3a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-04.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-04.png
new file mode 100644
index 000000000..1ccd842ba
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-05.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-05.png
new file mode 100644
index 000000000..c633cd888
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-06.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-06.png
new file mode 100644
index 000000000..018312ee8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-07.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-07.png
new file mode 100644
index 000000000..8e8d0b204
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-08.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-08.png
new file mode 100644
index 000000000..0fd1bdb8d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-09.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-09.png
new file mode 100644
index 000000000..72737e3d5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-09.png differ
diff --git a/docs/.vuepress/public/images/system/code.png b/docs/.vuepress/public/images/system/code.png
new file mode 100644
index 000000000..784062316
Binary files /dev/null and b/docs/.vuepress/public/images/system/code.png differ
diff --git a/docs/.vuepress/public/images/system/zsxq/zsxq-user-guide.png b/docs/.vuepress/public/images/system/zsxq/zsxq-user-guide.png
new file mode 100644
index 000000000..5a529e191
Binary files /dev/null and b/docs/.vuepress/public/images/system/zsxq/zsxq-user-guide.png differ
diff --git a/docs/.vuepress/styles/index.styl b/docs/.vuepress/styles/index.styl
index 3e91100ce..1ef828975 100755
--- a/docs/.vuepress/styles/index.styl
+++ b/docs/.vuepress/styles/index.styl
@@ -30,4 +30,12 @@ h2
// sidebar
.sidebar
width: 18rem
- font-size: 15px
\ No newline at end of file
+ font-size: 15px
+
+.page-bottom-footer {
+ text-align: center;
+ padding: 15px;
+ font-size: .8rem;
+ font-weight: 400;
+ color: var(--c-text-lightest)
+}
\ No newline at end of file
diff --git a/docs/.vuepress/theme/components/Page.vue b/docs/.vuepress/theme/components/Page.vue
index b9a0e950b..ed7f4b914 100755
--- a/docs/.vuepress/theme/components/Page.vue
+++ b/docs/.vuepress/theme/components/Page.vue
@@ -59,6 +59,9 @@
星球
知识星球:码农会锁
+
PS:添加时请备注读者加群,谢谢!
+ 做项目
+
八股文
diff --git a/docs/README.md b/docs/README.md
index a65fe1198..a1e629d10 100755
--- a/docs/README.md
+++ b/docs/README.md
@@ -5,17 +5,23 @@ actionLinks:
- link: /md/other/guide-to-reading.md
text: 开始阅读 →
class: primary
-- link: https://t.zsxq.com/09hMHNMEh
+#- link: https://wx.zsxq.com/group/48411118851818
+# text: 知识星球
+# class: secondary
+- link: /md/zsxq/introduce.html
text: 知识星球
class: secondary
- link: /md/road-map/road-map.md
- text: 路书 👣
+ text: 编程路书 👣
class: secondary
- link: https://gaga.plus
- text: 项目 💐
+ text: 项目(+菜鸟教程) 💐
class: secondary
-- link: https://618.gaga.plus
- text: 3.8元/月(云服务器) ☁️
+#- link: https://618.gaga.plus
+# text: 9.9元/月(云服务器) ☁️
+# class: secondary
+- link: https://walicode.xiaofuge.cn/
+ text: WaLiCode 🤖
class: secondary
features:
- title: 沉淀
@@ -31,7 +37,7 @@ footer: 京ICP备19031103号<
### 我是小傅哥
-- :dog: 13年毕业,互联网大厂T8架构师,全网40万+粉编程知识博主。
+- :dog: 13年毕业,互联网大厂架构师,全网40万+粉编程知识博主。
- :man_technologist: 成长:[关于我,从小白到架构师的成长经历](https://www.bilibili.com/video/BV1FF41137q5)
- :bus: 作品:[`CodeGuide | 程序员编码指南`](https://github.com/fuzhengwei/CodeGuide) | [`RoadMap 编程路书`](https://github.com/fuzhengwei/RoadMap) | [`Java 数据结构和算法`](https://github.com/fuzhengwei/java-algorithms) | [`IM 仿微信`](https://github.com/fuzhengwei/NaiveChat) | [`Java 面经手册`](https://github.com/fuzhengwei/interview) | [`IntelliJ IDEA 插件开发`](https://github.com/fuzhengwei/guide-idea-plugin) | [`Lottery 抽奖系统 - 基于领域驱动设计的四层架构实践`](https://github.com/fuzhengwei/Lottery) | [`API网关`](https://github.com/fuzhengwei/api-gateway) | [`手写MyBatis`](https://github.com/fuzhengwei/small-mybatis) | [`重学Java设计模式`](https://github.com/fuzhengwei/itstack-demo-design) | [`Netty 实战案例`](https://github.com/fuzhengwei/itstack-demo-netty) | [`字节码编程`](https://github.com/fuzhengwei/itstack-demo-bytecode) | [`ChatGPT AI 问答助手`](https://github.com/fuzhengwei/chatbot-api) | [`chatglm-sdk-java`](https://github.com/fuzhengwei/chatglm-sdk-java) | [`docker-image-pusher`](https://github.com/fuzhengwei/docker-image-pusher) | [`💱IDEA Plugin vo2dto —— 对象转换插件(15.8k+安装)`](https://bugstack.cn/md/product/idea-plugin/vo2dto.html) | [更多搜索...](https://github.com/fuzhengwei?tab=repositories)
- :seedling: 干货:[公众号『 bugstack虫洞栈 』](https://bugstack.cn/images/personal/qrcode.png)
@@ -42,16 +48,24 @@ footer: 京ICP备19031103号<
### 开发的项目
-- 业务项目
+- 创新项目「AI」(6)
+ - [AI MCP Gateway 网关服务系统](https://bugstack.cn/md/project/ai-mcp-gateway/ai-mcp-gateway.html)
+ - [AI Agent 脚手架 + 场景应用(draw.io、手机龙虾)](https://bugstack.cn/md/project/ai-agent-scaffold/ai-agent-scaffold.html) - 综合 Spring AI、LangChain4j + Google ADK(a2a、mcp、skills),打造全新智能体架构方案。
+ - [AI Agent 拖拉拽 + 动态配置(RAG、MCP、Prompt)](https://bugstack.cn/md/project/ai-knowledge/ai-knowledge.html)
+ - [OpenAI 代码自动评审组件](https://bugstack.cn/md/zsxq/project/openai-code-review.html)
+ - [OpenAI 大模型微服务应用体系构建 - API-SDK、鉴权、公众号、微信支付](https://bugstack.cn/md/zsxq/project/chatgpt.html)
+ - [ChatGPT AI 问答助手 - 小型,对接知识星球](https://bugstack.cn/md/zsxq/project/chatbot-api.html)
+
+- 业务项目(5)
+ - [拼团交易平台系统](https://bugstack.cn/md/project/group-buy-market/group-buy-market.html)
- [小型支付电商系统 - 一套项目2套架构开发(MVC+DDD)](https://bugstack.cn/md/project/s-pay-mall/s-pay-mall.html)
- [大营销平台系统 - 前后端 + Dev-Ops 的全栈式综合编程实战DDD项目!](https://bugstack.cn/md/project/big-market/big-market.html)
- - [OpenAi 大模型微服务应用体系构建 - API-SDK、鉴权、公众号、微信支付](https://bugstack.cn/md/zsxq/project/chatgpt.html)
- [Lottery 分布式抽奖系统 - 基于领域驱动设计的四层架构实践](https://bugstack.cn/md/zsxq/project/lottery.html)
- [Netty+JavaFx实战:仿桌面版微信聊天](https://bugstack.cn/md/zsxq/project/im.html)
- - [ChatGPT AI 问答助手 - 小型,对接知识星球](https://bugstack.cn/md/zsxq/project/chatbot-api.html)
-- 组件项目
- - [OpenAI 代码自动评审组件](https://bugstack.cn/md/zsxq/project/openai-code-review.html)
+- 组件项目(8)
+ - [本地任务消息组件](https://bugstack.cn/md/project/local-task-message/local-task-message.html)
+ - [通用技术组件 - 🔧扳手工程](https://bugstack.cn/md/zsxq/project/xfg-wrench.html)
- [透视业务流程 - 监控系统](https://bugstack.cn/md/zsxq/project/business-behavior-monitor.html)
- [动态线程池组件](https://bugstack.cn/md/zsxq/project/dynamic-thread-pool.html)
- [蓝兔支付SDK设计和开发](https://bugstack.cn/md/zsxq/project/ltzf-sdk-java.html)
@@ -89,11 +103,11 @@ footer: 京ICP备19031103号<
### 联系我 - 可加技术交流群
-沉淀、分享、成长,让自己和他人都能有所收获!你也可以添加本站作者小傅哥的微信:`fustack` —— 加入作者技术交流群
+沉淀、分享、成长,让自己和他人都能有所收获!你也可以扫码添加本站作者小傅哥的微信(记得备注从博客来的)
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-





+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+)。 +- **价值**:显著提升了 LLM 在算术、常识推理和符号推理任务上的准确率,是 Agent 实现复杂规划的基础。 + +#### 18. 什么是 MCP (Model Context Protocol)?为什么它对 Agent 生态很重要? +**参考答案:** +- **定义**:MCP 是一个开放标准协议,用于标准化 AI 模型与外部数据/工具的连接方式。它定义了统一的接口规范,使得工具(Tools)、资源(Resources)和提示(Prompts)可以跨平台、跨模型复用。 +- **核心价值**: + - **去碎片化**:解决了每个 AI 应用都需要为 Google Drive、Slack、GitHub 等写独立连接器(Connector)的问题。MCP 提供了统一的“插座”。 + - **即插即用**:开发者只需编写一次 MCP Server,任何支持 MCP 的 Client(如 Claude Desktop、Cursor、IDEA)都可以直接使用该工具。 + - **安全性**:通过标准化的鉴权机制(如 SSE + Token)管理数据访问权限。 diff --git a/docs/md/project/ai-agent-scaffold/part-0/mobile-openclaw.md b/docs/md/project/ai-agent-scaffold/part-0/mobile-openclaw.md new file mode 100644 index 000000000..478d0fc9b --- /dev/null +++ b/docs/md/project/ai-agent-scaffold/part-0/mobile-openclaw.md @@ -0,0 +1,62 @@ +--- +title: 手机小龙虾,这次我比小米下手早! +lock: no +--- + +# 手机小龙虾,这次我比小米下手早! + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +🦞 OpenClaw 太火了,火到什么程度,给 Mac Mini 干断货了,各行各业都找程序员👨🏻💻安装小龙虾,上门部署 OpenClaw 也成了生意!3月6日,深圳腾讯大厦,公益装机,也排起了长长的队伍。很多父母带着电脑过来,给自己娃的电脑装上小龙虾。 + +++ +但当所有人都盯着 OpenClaw 小龙虾时,小米发布了 miclaw 手机版龙虾🦞,对标豆包手机、AutoGLM-Phone,首批支持小米17系列机型。 + +但,嘿嘿,不谋而合。我在看到和体验 OpenClaw 后,也想着,我的手机、平板,也可以来一个 Mobile-OpenClaw 呀!让这些电子设备,帮我完成一些工作不是美滋滋!`下文我会演示通过小龙虾手机的案例视频。` + ++
++ +所以,在小米 miclaw 发布之前,我也已经开始设计实现手机版龙虾。并且还申请了一个手机版龙虾的域名,哈哈哈 死鬼,早有预谋哇! + ++
++ +那手机版龙虾怎么做?🤔 它可以,通过 AI Agent 智能体,分析用户行为。之后下达一些列指令到应用设备的 Socket 网关端点上,完成功能指令动作。`小米 miclaw` 应该也是类似的,以后也可以体验下,但他可以原生态直接从系统上支持,控制整个米家的应用生态 👍🏻。 + +闲言少叙,接下来我们演示下运行效果。我的小米 Pad 7 Pro 也到位了。新的设备测试起来速度更快。😂 最近是一顿花钱呀,Mac Mini(电脑龙虾)、Pad 7 Pro(手机龙虾)、群辉 Nas(数据存储 + qwen3.5:9b)!**这个世界,终究是程序员的!** + +## 一、演示场景 + +小傅哥这里做了2个演示场景,一个是在小红书🍠发帖,一个是汽水音乐🎵自动看广告开会员。 + +### 1. 小红书 - 自动发帖 + +```java +打开小红书,点击下面的红色按钮,发送一个帖子。先写想法为,你好,世界,我是手机版小龙虾 🦞 想法编写后,点击【下一步】继续。在发帖页面,输入标题为;你好,世界,我是手机版小龙虾 🦞 内容为;我是 @小傅哥 正在测试开发的 MobileOpenClaw 欢迎关注我的动向!编写后,点击右上角【发布】。 +``` + +-- + +### 2. 汽水音乐 - 看广告 + +```java +打开汽水音乐,看广告获得VIP时长,操作流程; + +1. 点击右上角【免】按钮。 +2. 点击【免】后会进入后,右上角有倒计时播放广告,播放完成后显示为【领取成功】。这个时候点击【领取成功】,会有一个弹窗,点击弹窗的【领取奖励】,不要点x关闭。 +3. 完成领取后,继续看广告,重复步骤2,一直领取奖励,直至没有。 +``` + + + diff --git "a/docs/md/project/ai-agent-scaffold/part-1/\347\254\2541-1\350\212\202\357\274\232\350\204\232\346\211\213\346\236\266\351\234\200\346\261\202\345\210\206\346\236\220.md" "b/docs/md/project/ai-agent-scaffold/part-1/\347\254\2541-1\350\212\202\357\274\232\350\204\232\346\211\213\346\236\266\351\234\200\346\261\202\345\210\206\346\236\220.md" new file mode 100644 index 000000000..cf8a978c4 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-1/\347\254\2541-1\350\212\202\357\274\232\350\204\232\346\211\213\346\236\266\351\234\200\346\261\202\345\210\206\346\236\220.md" @@ -0,0 +1,46 @@ +--- +title: 【更】第1-1节:脚手架需求分析 +pay: https://t.zsxq.com/l3GtR +--- + +# 《AI Agent 脚手架》第1-1节:脚手架需求分析 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/uNA2K](https://t.zsxq.com/uNA2K) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +今天是我们 **《AI Agent 脚手架》** 项目学习的第1节课程,小傅哥会带着大家,以互联网公司正规的承接产品需求到开发部署上线的流程,带着大家以第一主人公视角的方式进行学习。这样既可以保证你学习到项目内容,也能了解到公司里正规的开发模式,以后进入到公司也可以很好的融入团队,承接项目需求。加油💪🏻!让我们开启新项目之旅! + +## 一、本章诉求 + +站在技术视角,分析 AI Agent 脚手架项目,这样一个产品功能需求的背景、诉求和目的。 + +首先,脚手架你可以理解为是一个工程模板框架,通过简单的配置即可完成初始化项目工程(IntelliJ IDEA)的搭建,并在工程内提供最为常用的基础服务,免去大家每次做新的项目,都要手动搭建工程的过程。 + +**那么,为什么叫技术视角?** + +在互联网公司中,项目通常分为两类:一类是源自产品业务的需求,另一类则是由研发驱动的纯技术项目(或由基架部门专门负责的技术产品)。后者的初衷在于解决研发在响应业务需求时,频繁且重复的工作负担,同时推动需求制定的统一标准化。 + +随着2025年起互联网公司纷纷通过AI赋能业务,推动各场景的效率提升,构建多样化的AI Agent智能体业务应用将成为常态。面对大量复杂的工程搭建需求,亟需一套统一的标准化框架,能够快速创建项目,显著降低用户的使用门槛和开发成本。 + +## 二、项目背景 + +为互联网企业构建业务场景下的 AI Agent 智能体,提供统一标准和便捷易用的脚手架。 + +**为什么要为创建脚手架?** + +回归本质,当前大规模语言模型(LLM)的使用,基本上是通过 HTTP 响应式接口进行对接。随着应用需求的增长,为了简化各自封装 AI HTTP 接口的复杂度,逐渐出现了以 AI SDK 方式进行对接的设计和实现,提升了开发效率和集成体验。 + +随后,AI 服务不仅仅局限于简单的接口调用,还引入了诸如 RAG(检索增强生成)知识库、Tool 工具(如 Function、MCP)等能力。同时,不同厂商的大模型(OpenAI、Google、智谱、阿里千问等)在接口和功能上存在差异,推动了类似 Spring AI 这类产品的诞生,帮助开发者更加便捷地统一调用和管理多样化的 AI 服务。 + +进入下一阶段,随着智能体(AI Agent)概念的兴起,开发者开始设计支持顺序执行、循环执行(分析与决策)、并行执行等复杂流程的智能体方案。Google 发布的 ADK(Agent Development Kit)智能体框架,标志着这一阶段的技术成熟和标准化趋势。 + +++ +综上所述,构建一个完整的智能体,需要综合运用上述所有技术和能力。为了统一标准、提升易用性,就很需要搭建一套统一的 AI Agent 智能体开发脚手架,剔除重复且复杂的工作环节,帮助业务快速融合并高效开展智能体开发。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-1/\347\254\2541-2\350\212\202\357\274\232\347\263\273\347\273\237\346\236\266\346\236\204\350\256\276\350\256\241.md" "b/docs/md/project/ai-agent-scaffold/part-1/\347\254\2541-2\350\212\202\357\274\232\347\263\273\347\273\237\346\236\266\346\236\204\350\256\276\350\256\241.md" new file mode 100644 index 000000000..8eab70477 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-1/\347\254\2541-2\350\212\202\357\274\232\347\263\273\347\273\237\346\236\266\346\236\204\350\256\276\350\256\241.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第1-2节:系统架构设计 +pay: https://t.zsxq.com/sSD6u +--- + +# 《AI Agent 脚手架》第1-2节:系统架构设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/v8C8a](https://t.zsxq.com/v8C8a) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +对 AI Agent 智能体脚手架,进行应用技术选型和工程框架设计。 + +这个过程就等同于大家做一个新项目时,分析项目实现过程,以及过程中所需的技术能力,并对未知的技术点进行案例验证。待全部梳理完成后,则进行详细的方案设计。 + +>随着大家进入公司以后,在你承接一个新的项目/需求时,会大量的做这个事情,你会遇到很多没用过却需要使用的技术或者方案。当然,也会随着你的积累,你做这个事情会越来越熟练,越来越高效。而与之相反的,如果你之前的学习总是对照视频cv代码,最好一次就成功运行,害怕出错,不敢排查,没有一个思考和验证的过程,那么其实是一点经验也没积累。所以,要正视自己的学习方法。 + +## 二、架构设计 + +如图,整体简要架构设计; + +++ +做这个事情,我们要思考,需要哪些东西来完成这样项目的开发。如下; \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-10\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-RunnerNode.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-10\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-RunnerNode.md" new file mode 100644 index 000000000..331e39a5c --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-10\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-RunnerNode.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第2-10节:装配域节点-RunnerNode +pay: https://t.zsxq.com/pEBw8 +--- + +# 《AI Agent 脚手架》第2-10节:装配域节点-RunnerNode + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/tMfj3](https://t.zsxq.com/tMfj3) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +把构建的智能体,填充到 InMemoryRunner 中,以及注册到 Spring 容器中。这样后续就可以使用 Spring 容器中的对象,进行 AI Agent 对话了。 + +>目前是把最后构建的 SequentialAgent 写入到 InMemoryRunner 中,后续会做成动态的,让配置任何的一个智能体都可以填充到 InMemoryRunner 中。 + +## 二、流程设计 + +如图,智能体构建完成后,则填充到 InMemoryRunner 中; + +++ +- 从 SequentialAgentNode 节点,流转到 RunnerNode 节点。 +- 在 RunnerNode 节点,创建 InMemoryRunner 以及注册到 Spring 容器。这样可以任何一个地方获取到执行对象。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-11\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\212\240\350\275\275\344\275\277\347\224\250\351\252\214\350\257\201.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-11\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\212\240\350\275\275\344\275\277\347\224\250\351\252\214\350\257\201.md" new file mode 100644 index 000000000..7cc2ac0a5 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-11\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\212\240\350\275\275\344\275\277\347\224\250\351\252\214\350\257\201.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第2-11节:智能体加载使用验证 +pay: https://t.zsxq.com/CyuXv +--- + +# 《AI Agent 脚手架》第2-11节:智能体加载使用验证 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/kgrzQ](https://t.zsxq.com/kgrzQ) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +启动程序,加载智能体yml配置,完成智能体的装配。以及编写测试案例,验证加载智能体的使用。这部分的内容,会为后续开发对话服务做一个基础。让大家知道对话的过程需要创建会话和处理消息请求。 + +## 二、流程设计 + +如图,智能体全部节点构建完成后,在程序启动的时候进行加载; + +++ +- 前面章节已经做好了全部的加载动作,到这可以把调用入口串联起来了。在程序启动的时候,完成自动化的加载处理。 +- 完成加载处理后,我们在做一个初步的验证操作,也就是使用这个智能体,通过这样的方式了解整个会话过程。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-12\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-RunnerNode.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-12\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-RunnerNode.md" new file mode 100644 index 000000000..7c73d00ba --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-12\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-RunnerNode.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第2-12节:增强装配-RunnerNode +pay: https://t.zsxq.com/jxbVS +--- + +# 《AI Agent 脚手架》第2-12节:增强装配-RunnerNode + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/Ls0hf](https://t.zsxq.com/Ls0hf) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +基础的智能体装配一个链路做完,并验证了会话的设计,让整个链路跑通。之后我们做一下增强设计操作。让整个智能体可以在后续适应更多的场景使用。 + +这一节,我们先来做下 RunnerNode 的增强,也就是前面提到的,用户如果只是配置一个基础的 Agent 不在配置其他的 loop(循环)、parallel(并行)、sequential(序列),就结束了。那么这里要怎么流转到 RunnerNode。 + +## 二、流程设计 + +如图,从 AgentWorkflowNode 流转到 RunnerNode 设计; + +++ +- 首先,在有了前面的内容学习后,我们了解到 RunnerNode 会做 InMemoryRunner 的构建,而这个对象的构建是需要拿到 SequentialAgentNode 作为最后一个节点,构建的 SequentialAgent 写入到上下文,到 RunnerNode 节点使用。它的核心本质是拿到 InMemoryRunner 创建的时候,所需 Agent 智能体。 +- 之后,这个 Agent 智能体,不非得以一个固定的写死,而是可以在配置文件中添加以 runner 配置,指定装配到 runner 中的 agent 名称。之后在 RunnerNode 构建 InMemoryRunner 的时候,则从上下文通过智能体名称获取 agent 装配进来即可。 +- 最后,思考下,AgentWorkflowNode 什么时候流转,这个流转则是根据当前 agentWorkflows 是不为空了,为空则直接流转到 RunnerNode 即可。RunnerNode 会根据配置的关联 agentName 进行配置。`这部分看代码的yml文件会更加清晰` diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-13\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-AgentWorkflowNode.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-13\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-AgentWorkflowNode.md" new file mode 100644 index 000000000..144a44533 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-13\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-AgentWorkflowNode.md" @@ -0,0 +1,417 @@ +--- +title: 【更】第2-13:增强装配-AgentWorkflowNode +pay: https://t.zsxq.com/qjhUb +--- + +# 《AI Agent 脚手架》第2-13:增强装配-AgentWorkflowNode + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/AuQlk](https://t.zsxq.com/AuQlk) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +换种设计方式,增强 AgentWorkflowNode 流转能力,让 LoopAgentNode、ParallelAgentNode、SequentialAgentNode 不在负责判断流转,而是每个流程处理完毕后,都回到 AgentWorkflowNode 中进行流转决策。这样我们就可以组合出更为复杂的智能体编排。 + +## 二、流程设计 + +如图,增强 AgentWorkflowNode 流转能力,每个节点流转完都重新回到 AgentWorkflowNode 节点进行决策; + +++ +- 左侧是旧版流程,LoopAgentNode、ParallelAgentNode、SequentialAgentNode,每个节点交叉流转。这次换到新版流程,所有的流转都由 AgentWorkflowNode 负责。这样会让三个功能 Agent 节点的职责更为清晰。 +- 这样,AgentWorkflowNode 就成了分发中心,三个 LoopAgentNode、ParallelAgentNode、SequentialAgentNode 智能体节点处理完业务后都回到 AgentWorkflowNode 即可。 + +## 三、功能实现 + +### 1. 工程结构 + ++
++ +- 修改 LoopAgentNode、ParallelAgentNode、SequentialAgentNode,三个节点中的流转操作,都转移到 AgentWorkflowNode 处理。 +- 在 AgentWorkflowNode 中,要拿到当前 agentWorkflows 配置的列表中,步骤中第N个,把拿到的值作为当前的信息存储到上下文,之后流转到任何一个节点,只负责从上下文取到当前值即可。 + +### 2. 核心模块 + +#### 2.1 定义上下文 + +```java +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public static class DynamicContext { + + /** + * LLM API + */ + private OpenAiApi openAiApi; + + /** + * 对话模型 + */ + private ChatModel chatModel; + + /** + * 原子安全的递进步骤 + */ + private AtomicInteger currentStepIndex = new AtomicInteger(0); + + /** + * 当前的智能体 + */ + private AiAgentConfigTableVO.Module.AgentWorkflow currentAgentWorkflow; + + /** + * 智能体组 + */ + private Map+
agentGroup = new HashMap<>(); + + private Map dataObjects = new HashMap<>(); +} +``` + +- 首先,去掉 agentWorkflows 列表值,增加一个 currentAgentWorkflow 当前值。 +- 之后,添加 currentStepIndex 步骤完成一个,则迭代+1,从 agentWorkflows 渠道的当前对象存储到 currentAgentWorkflow,这样会更加方便判断。(`这个就是前面提到的另外的一个方案设计,小傅哥在项目里也给大家增加这种演进的迭代设计,可以让大家多一些积累`) + +#### 2.2 增强流转 + +```java +@Slf4j +@Service +public class AgentWorkflowNode extends AbstractArmorySupport { + + @Resource + private LoopAgentNode loopAgentNode; + + @Resource + private ParallelAgentNode parallelAgentNode; + + @Resource + private SequentialAgentNode sequentialAgentNode; + + @Resource + private RunnerNode runnerNode; + + @Override + protected AiAgentRegisterVO doApply(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + log.info("Ai Agent 装配操作 - AgentWorkflowNode"); + + AiAgentConfigTableVO aiAgentConfigTableVO = requestParameter.getAiAgentConfigTableVO(); + List agentWorkflows = aiAgentConfigTableVO.getModule().getAgentWorkflows(); + + // 如果未配置 agentWorkflows 则直接流转到 RunnerNode + if (null == agentWorkflows || agentWorkflows.isEmpty() || dynamicContext.getCurrentStepIndex() >= agentWorkflows.size()) { + // 设置结果值 + dynamicContext.setCurrentAgentWorkflow(null); + // 路由下节点 + return router(requestParameter, dynamicContext); + } + + // 设置当前判断流程对象 + dynamicContext.setCurrentAgentWorkflow(agentWorkflows.get(dynamicContext.getCurrentStepIndex())); + + // 步骤值增加 + dynamicContext.addCurrentStepIndex(); + + return router(requestParameter, dynamicContext); + } + + @Override + public StrategyHandler get(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + + AiAgentConfigTableVO.Module.AgentWorkflow currentAgentWorkflow = dynamicContext.getCurrentAgentWorkflow(); + + // 没有下一个节点,流转到结束节点 + if (null == currentAgentWorkflow) { + return runnerNode; + } + + String type = currentAgentWorkflow.getType(); + AgentTypeEnum agentTypeEnum = AgentTypeEnum.fromType(type); + + if (null == agentTypeEnum) { + throw new RuntimeException("agentWorkflow type is error!"); + } + + String node = agentTypeEnum.getNode(); + + return switch (node) { + case "loopAgentNode" -> loopAgentNode; + case "parallelAgentNode" -> parallelAgentNode; + case "sequentialAgentNode" -> sequentialAgentNode; + default -> runnerNode; + }; + + } + +} +``` + +- doApply 方法的核心是判断是否配置 agentWorkflows,以及不断的取值(类似for循环),是否取到了最后一个。如果是,则设置 `dynamicContext.setCurrentAgentWorkflow(null);` 并路由走。否则,从 agentWorkflows 获取当前步骤的对象并设置到上下文中,以及给步骤 +1 处理。 +- get 则负责节点流转,判断当前节点是否为null,为null则表示没有要处理的节点,直接进入 runnerNode 即可。如果不是 null 则按照不同的 node 流转到子 agent 智能体节点。 + +#### 2.3 子智能体节点 + +##### 2.3.1 LoopAgentNode + +```java +@Service +public class LoopAgentNode extends AbstractArmorySupport { + + @Override + protected AiAgentRegisterVO doApply(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + log.info("Ai Agent 装配操作 - LoopAgentNode"); + + AiAgentConfigTableVO.Module.AgentWorkflow currentAgentWorkflow = dynamicContext.getCurrentAgentWorkflow(); + + List subAgents = dynamicContext.queryAgentList(currentAgentWorkflow.getSubAgents()); + + LoopAgent loopAgent = + LoopAgent.builder() + .name(currentAgentWorkflow.getName()) + .description(currentAgentWorkflow.getDescription()) + .subAgents(subAgents) + .maxIterations(currentAgentWorkflow.getMaxIterations()) + .build(); + + dynamicContext.getAgentGroup().put(currentAgentWorkflow.getName(), loopAgent); + + return router(requestParameter, dynamicContext); + } + + @Override + public StrategyHandler get(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + return getBean("agentWorkflowNode"); + } + +} +``` + +- doApply 要修改为从上下文的 `dynamicContext.getCurrentAgentWorkflow()` 获取当前节点的数据,构建 Agent 之后路由。 +- get 则负责流转回 `getBean("agentWorkflowNode")` 让 agentWorkflowNode 继续负责节点的流转判断。 + +##### 2.3.2 ParallelAgentNode + +```java +@Service +public class ParallelAgentNode extends AbstractArmorySupport { + + @Override + protected AiAgentRegisterVO doApply(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + log.info("Ai Agent 装配操作 - ParallelAgentNode"); + + AiAgentConfigTableVO.Module.AgentWorkflow currentAgentWorkflow = dynamicContext.getCurrentAgentWorkflow(); + + List subAgents = dynamicContext.queryAgentList(currentAgentWorkflow.getSubAgents()); + + ParallelAgent parallelAgent = + ParallelAgent.builder() + .name(currentAgentWorkflow.getName()) + .subAgents(subAgents) + .description(currentAgentWorkflow.getDescription()) + .build(); + + dynamicContext.getAgentGroup().put(currentAgentWorkflow.getName(), parallelAgent); + + return router(requestParameter, dynamicContext); + } + + @Override + public StrategyHandler get(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + return getBean("agentWorkflowNode"); + } +} +``` + +- 代码修改方式同 `LoopAgentNode` + +##### 2.3.3 SequentialAgentNode + +```java +@Service +public class SequentialAgentNode extends AbstractArmorySupport { + + @Override + protected AiAgentRegisterVO doApply(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + log.info("Ai Agent 装配操作 - SequentialAgentNode"); + + AiAgentConfigTableVO.Module.AgentWorkflow currentAgentWorkflow = dynamicContext.getCurrentAgentWorkflow(); + + List subAgents = dynamicContext.queryAgentList(currentAgentWorkflow.getSubAgents()); + + SequentialAgent sequentialAgent = + SequentialAgent.builder() + .name(currentAgentWorkflow.getName()) + .description(currentAgentWorkflow.getDescription()) + .subAgents(subAgents) + .build(); + + dynamicContext.getAgentGroup().put(currentAgentWorkflow.getName(), sequentialAgent); + + return router(requestParameter, dynamicContext); + } + + @Override + public StrategyHandler get(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception { + return getBean("agentWorkflowNode"); + } + +} +``` + +- 代码修改方式同 `LoopAgentNode` + +## 四、测试验证 + +### 1. 修改配置文件 + +**parallel_research_app.yml** + +```java +ai: + agent: + config: + tables: + testAgent02: + app-name: ResearchAndSynthesisPipeline + agent: + agent-id: 100002 + agent-name: 测试智能体02 + agent-desc: 并行研究并汇总的智能体管道 + module: + ai-api: + base-url: https://apis.itedus.cn + api-key: sk-Sp2jx3yeq7x7HJ663bDc9bF0D34b4f609f833840271519B1 + completions-path: v1/chat/completions + embeddings-path: v1/embeddings + chat-model: + model: gpt-4.1 + tool-mcp-list: + - sse: + name: baidu-search + base-uri: https://appbuilder.baidu.com/v2/ai_search/mcp/ + sse-endpoint: sse?api_key=bce-v3/ALTAK-3zODLb9qHozIftQlGwez5/2696e92781f5bf1ba1870e2958f239fd6dc822a4 + request-timeout: 5000 + agents: + - name: RenewableEnergyResearcher + description: Researches renewable energy sources. + instruction: | + You are an AI Research Assistant specializing in energy. + Research the latest advancements in 'renewable energy sources'. + Use the Google Search tool provided. + Summarize your key findings concisely (1-2 sentences). + Output *only* the summary. + output-key: renewable_energy_result + - name: EVResearcher + description: Researches electric vehicle technology. + instruction: | + You are an AI Research Assistant specializing in transportation. + Research the latest developments in 'electric vehicle technology'. + Use the Google Search tool provided. + Summarize your key findings concisely (1-2 sentences). + Output *only* the summary. + output-key: ev_technology_result + - name: CarbonCaptureResearcher + description: Researches carbon capture methods. + instruction: | + You are an AI Research Assistant specializing in climate solutions. + Research the current state of 'carbon capture methods'. + Use the Google Search tool provided. + Summarize your key findings concisely (1-2 sentences). + Output *only* the summary. + output-key: carbon_capture_result + - name: SynthesisAgent + description: Combines research findings into a structured report. + instruction: | + You are an AI Assistant responsible for combining research findings into a structured report. + Your primary task is to synthesize the following research summaries, clearly attributing findings to their source areas. Structure your response using headings for each topic. Ensure the report is coherent and integrates the key points smoothly. + **Crucially: Your entire response MUST be grounded *exclusively* on the information provided in the 'Input Summaries' below. Do NOT add any external knowledge, facts, or details not present in these specific summaries.** + **Input Summaries:** + + * **Renewable Energy:** + {renewable_energy_result} + + * **Electric Vehicles:** + {ev_technology_result} + + * **Carbon Capture:** + {carbon_capture_result} + + **Output Format:** + + ## Summary of Recent Sustainable Technology Advancements + + ### Renewable Energy Findings + (Based on RenewableEnergyResearcher's findings) + [Synthesize and elaborate *only* on the renewable energy input summary provided above.] + + ### Electric Vehicle Findings + (Based on EVResearcher's findings) + [Synthesize and elaborate *only* on the EV input summary provided above.] + + ### Carbon Capture Findings + (Based on CarbonCaptureResearcher's findings) + [Synthesize and elaborate *only* on the carbon capture input summary provided above.] + + ### Overall Conclusion + [Provide a brief (1-2 sentence) concluding statement that connects *only* the findings presented above.] + + Output *only* the structured report following this format. Do not include introductory or concluding phrases outside this structure, and strictly adhere to using only the provided input summary content. + agent-workflows: + - type: parallel + name: ParallelWebResearchAgent + description: Runs multiple research agents in parallel to gather information. + sub-agents: + - RenewableEnergyResearcher + - EVResearcher + - CarbonCaptureResearcher + - type: sequential + name: ResearchAndSynthesisPipeline + description: Coordinates parallel research and synthesizes the results. + sub-agents: + - ParallelWebResearchAgent + - SynthesisAgent + runner: + agent-name: ResearchAndSynthesisPipeline +``` + +- agent-workflows 配置下 ParallelWebResearchAgent、ResearchAndSynthesisPipeline,这样可以测试循环处理。 +- runner 则配置 ResearchAndSynthesisPipeline 进行运行体转配。 + +### 2. 测试方法 + +```java +@Test +public void test_handlerMessage_03(){ + AiAgentRegisterVO aiAgentRegisterVO = applicationContext.getBean("100002", AiAgentRegisterVO.class); + String appName = aiAgentRegisterVO.getAppName(); + InMemoryRunner runner = aiAgentRegisterVO.getRunner(); + Session session = runner.sessionService() + .createSession(appName, "xiaofuge") + .blockingGet(); + Content userMsg = Content.fromParts(Part.fromText("你具备哪些能力")); + Flowable events = runner.runAsync("xiaofuge", session.id(), userMsg); + List outputs = new ArrayList<>(); + events.blockingForEach(event -> outputs.add(event.stringifyContent())); + log.info("测试结果:{}", JSON.toJSONString(outputs)); +} +``` + +```java +26-01-01.13:20:04.106 [main ] INFO test_handlerMessage_03 - 测试结果:["我可以帮助你查询和分析可再生能源领域的最新进展,包括太阳能、风能、生物能、地热能、海洋能等各类新能源技术的发展趋势、创新成果及政策动态。同时,我可以利用互联网搜索功能,快速获取最新科研成果、行业动态和相关数据,并将关键信息进行简明总结。","我是专注于电动汽车技术(electric vehicle technology)研究的AI助理,具备以下能力:\n\n1. **新技术检索与总结**:我能利用Google搜索等工具,快速检索最新的电动汽车技术发展、行业动态和科研突破,并进行简洁明了的总结。\n2. **趋势与前沿分析**:能够获取并分析行业趋势,例如电池创新、驱动系统进展、智能网联、电驱动新材料等领域的最新动向。\n3. **政策与市场信息搜集**:可查询全球各地与电动汽车相关的政策、市场增长、补贴政策等信息。\n4. **参考文献和数据追溯**:能帮助定位权威期刊、会议论文、专利等技术文档,提供学术研究支持。\n5. **技术对比与评估**:可对比不同品牌、技术路径或产品,分析其优劣及市场应用前景。\n6. **简明交流和摘要能力**:围绕“电动汽车技术”,可将复杂技术信息压缩为1-2句话的核心摘要,便于快速理解。\n\n如果你有特定方向的需求(如电池、驱动控制、充电技术等),我也能定向进行最新信息搜索和研究。","我具备以下能力,专注于碳捕集(carbon capture)相关的研究与信息获取:\n\n1. 实时网络检索:我可以通过专业搜索工具实时获取最新关于碳捕集方法、技术进展、应用案例、政策法规等公开信息。\n2. 资料梳理与总结:对检索到的信息快速提炼要点,进行结构化、简明扼要的总结,便于决策与参考。\n3. 技术分类与比较:能够对比不同类型的碳捕集技术(如直接空气捕集、点源捕集、碳矿化、生物碳捕集等)的原理、优缺点和应用现状。\n4. 最新动态追踪:跟踪全球范围内碳捕集领域的最新动态、前沿研究和重大项目进展。\n5. FAQ解答:针对碳捕集相关的常见问题(如成本、能效、行业难点等)进行专业、准确回答。\n\n如需获取某一具体问题或领域的最新信息,请直接告诉我!","## Summary of Recent Sustainable Technology ... +``` + +- 运行后可以看到执行的结果。也表示了,我们的装配方式是没问题的。 + +## 五、读者作业 + +- 简单作业:完成本节功能的编写,理解此处的架构设计。对于节点的流转,打开思路,之后活学活用。 +- 复杂作业:尝试配置一个多层嵌套的智能体,来验证这样的装配。 + diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-14\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-\346\234\254\345\234\260mcp.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-14\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-\346\234\254\345\234\260mcp.md" new file mode 100644 index 000000000..64b058b53 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-14\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-\346\234\254\345\234\260mcp.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第2-14节:增强装配-本地mcp +pay: https://t.zsxq.com/KYNyM +--- + +# 《AI Agent 脚手架》第2-14节:增强装配-本地mcp + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/OoPsy](https://t.zsxq.com/OoPsy) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在用户使用 ai agent 脚手架的时候,会有诉求扩展一些自己实现的 mcp 服务。比如,做一些智能体客服场景,或者公司内部的系统巡检场景,这些场景并没有提供统一的 mcp 服务,则可能都要自己扩展,扩展后装配到整个智能体中。 + +同时因为引入了多种类型的 mcp 装配,sse、stdio 又加上这种本地自己实现的,所以这块还要做一些策略处理。 + +## 二、流程设计 + +如图,增强 mcp 服务装配能力设计; + +++ +- ChatModelNode 装配 MCP 主要是 sse、stdio 两种方式,通过 if···else 判断的方式进行处理。但现在又要扩展新的方式装配,则不适合继续编写 if···else 代码,而是要通过类来拆分一个大的方法。 +- 这块会使用到工厂 + 策略接口来扩展实现,并区分出 mcp 客户端、服务端。客户端负责策略装配,服务端负责用户自己扩展新的 mcp 服务。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-15\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-\345\233\236\350\260\203plugin.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-15\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-\345\233\236\350\260\203plugin.md" new file mode 100644 index 000000000..c5660f157 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-15\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-\345\233\236\350\260\203plugin.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第2-15节:增强装配-回调plugin +pay: https://t.zsxq.com/U1p49 +--- + +# 《AI Agent 脚手架》第2-15节:增强装配-回调plugin + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/tTIdy](https://t.zsxq.com/tTIdy) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +为 InMemoryRunner 运行体扩展 Plugin 插件能力,允许用户在智能体执行的各个阶段获取到上下文信息,并做出一定的监控、调整、治理的动作。 + +如果你有学习过星球「码农会锁」的扳手工程,在设计模式框架章节,有一个 `applyBefore`、`applyAfter`、`applyAfterError` 的处理,它可以让你在使用的阶段做拦截或者打印最后的结果。这些设计都是相同的,所以说学编程,最后都是学的思想。语言就像你的盗抢棍棒,斧钺钩叉,思想才是你的一招一式。 + +## 二、流程设计 + +如图,增强运行体插件配置,可以在各个节点埋入钩子; + +++ +- Runner 的 Plugin 通过回调钩子在 AI Agent 运行流程生命周期的各个阶段执行。包括;用户输入信息、调用模型、调用工具、智能体执行等步骤中。这一工具,可以用在日志记录、性能分析、步骤调试、策略执行(权限)、监控对接(普罗米修斯)、请求或响应的调整(如敏感词的处理)等。 +- 这些操作的步骤,就是图上的各个阶段的节点,可以被采集到。就像你设置的任何一个智能体 Agent 都可以拿到它的运行信息,甚至你可以在上下文中做一些拦截操作。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-16\350\212\202\357\274\232fix-\345\244\232\346\250\241\346\200\201\350\203\275\345\212\233\344\275\277\347\224\250.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-16\350\212\202\357\274\232fix-\345\244\232\346\250\241\346\200\201\350\203\275\345\212\233\344\275\277\347\224\250.md" new file mode 100644 index 000000000..a2a9a4a3c --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-16\350\212\202\357\274\232fix-\345\244\232\346\250\241\346\200\201\350\203\275\345\212\233\344\275\277\347\224\250.md" @@ -0,0 +1,123 @@ +--- +title: 【更】第2-16节:fix-多模态能力使用 +pay: https://t.zsxq.com/wF32j +--- + +# 《AI Agent 脚手架》第2-16节:fix-多模态能力使用 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/XqlKu](https://t.zsxq.com/XqlKu) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +为接入 Google ADK 的 Spring AI 提供图片识别的多模态能力。 + +这本应该是一个简单直接使用的功能,但在 `Google ADK 0.5.0`、`Spring AI 1.1.0` 版本上,它还是一个隐藏待处理的 Bug,小傅哥已于 2026年1月6日,提交 [https://github.com/google/adk-java/issues/705](https://github.com/google/adk-java/issues/705) + +Google ADK Java 开发工程师,在 2026年1月7日,处理提交了修复代码,应该会在后续版本更新。 + +不过,对于我们学习来说,这并不是坏事。我们可以借助这样的问题点,深入理解 Google ADK 和 Spring AI 的对接,以及学习如何排查这样的报错。最终,鉴于 Google ADK 版本更新周期,我们目前先在程序中打一个”补丁“实现。 + +## 二、发现问题 + +### 步骤1,功能诉求 + +```java +@Test +public void test_handlerMessage_03() throws IOException { + AiAgentRegisterVO aiAgentRegisterVO = applicationContext.getBean("100003", AiAgentRegisterVO.class); + + String appName = aiAgentRegisterVO.getAppName(); + InMemoryRunner runner = aiAgentRegisterVO.getRunner(); + Session session = runner.sessionService() + .createSession(appName, "xiaofuge") + .blockingGet(); + + Content userMsg = Content.fromParts(Part.fromText("这是什么图片?"), + Part.fromBytes(imageResource.getContentAsByteArray(), MimeTypeUtils.IMAGE_PNG_VALUE)); + + Flowableevents = runner.runAsync("xiaofuge", session.id(), userMsg); + + List outputs = new ArrayList<>(); + events.blockingForEach(event -> outputs.add(event.stringifyContent())); + log.info("测试结果:{}", JSON.toJSONString(outputs)); +} +``` + + ++ +- 在新的章节,需要验证多模态能力的时候,传入了一个图片 byte,但无论如何修改运行,都只是提示无法识别图片。 +- 这个时候猜想,是不是 InMemoryRunner 构建问题,或者 Agent 实例化参数问题。所以,决定把问题缩小,单独验证 Google ADK + Spring AI。 + +### 步骤2,分块验证 + +```java +@Slf4j +public class SpringAiTest { + + @SneakyThrows + public static void main(String[] args) { + + OpenAiApi openAiApi = OpenAiApi.builder() + .baseUrl("https://apis.itedus.cn") + .apiKey("sk-2GQTYTNoQSs7qizlE9F00bD84d254c2994D44d6410B0Ac8f") + .completionsPath("v1/chat/completions") + .embeddingsPath("v1/embeddings") + .build(); + + ChatModel chatModel = OpenAiChatModel.builder() + .openAiApi(openAiApi) + .defaultOptions(OpenAiChatOptions.builder() + .model("gpt-4.1") + .build()) + .build(); + + LlmAgent agent = LlmAgent.builder() + .name("test") + .description("Chess coach agent") + .model(new SpringAI(chatModel)) + .instruction(""" + You are a knowledgeable chess coach + who helps chess players train and sharpen their chess skills. + """) + .build(); + + InMemoryRunner runner = new InMemoryRunner(agent); + + Session session = runner + .sessionService() + .createSession("test", "xiaofuge") + .blockingGet(); + + URL resource = Thread.currentThread().getContextClassLoader().getResource("dog.png"); + + byte[] bytes; + assert resource != null; + try (InputStream inputStream = resource.openStream()) { + bytes = inputStream.readAllBytes(); + } + + List+
parts = new ArrayList<>(); + parts.add(Part.fromText("这是什么图片")); + parts.add(Part.fromBytes(bytes, MimeTypeUtils.IMAGE_PNG_VALUE)); + + Content content = Content.builder().role("user").parts(parts).build(); + + Flowable events = runner.runAsync("xiaofuge", session.id(), + content + ); + + System.out.print("\nAgent > "); + events.blockingForEach(event -> System.out.println(event.stringifyContent())); + } + +} +``` + +- 效果;运行结果依然是识别不了,告诉我要上传图片,它才能识别。 +- 猜想;这说明单独按照官网案例构建 Agent 并测试依然不行,再细化验证。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-17\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\256\236\347\216\260-service.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-17\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\256\236\347\216\260-service.md" new file mode 100644 index 000000000..fdf87ec66 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-17\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\256\236\347\216\260-service.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第2-17节:会话服务接口实现-service +pay: https://t.zsxq.com/lxqLY +--- + +# 《AI Agent 脚手架》第2-17节:会话服务接口实现-service + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/vLd8O](https://t.zsxq.com/vLd8O) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在智能体完成装配以后,接下来我们要做的就是提供标准的会话服务接口能力,使用智能体。这包括了,所装配智能体的列表(agentId)、会话的创建、消息的处理(同步/异步)。 + +## 二、流程设计 + +如图,会话接口服务所在分层; + +++ +- 首先,在 Agent 装配后,是要对外提供服务,服务由 trigger 分层下的 http 接口提供。这个 trigger 也就是 mvc 分层里的 controller,但因为在微服务下,接口、消息、定时任务,都是一种触发行为。触发可以理解为,别人打你,可以用拳头,可以用石头,还分可以榔头,这些都可以抽象为一种名称,触发。所以在 ddd 分层下,增加了 trigger 触发器层。 +- 之后,这一节我们先来实现 service 服务层,也就是在 domain 领域下,agent 里除了做装配实现,还要做一层会话处理。在 service 实现后,后面就是包装 trigger 层的对外接口。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-18\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\256\236\347\216\260-trigger.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-18\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\256\236\347\216\260-trigger.md" new file mode 100644 index 000000000..61a2e5ca2 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-18\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\256\236\347\216\260-trigger.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第2-18节:会话服务接口实现-trigger +pay: https://t.zsxq.com/IY7j3 +--- + +# 《AI Agent 脚手架》第2-18节:会话服务接口实现-trigger + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/leFf4](https://t.zsxq.com/leFf4) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +对 domain 领域层的 service 服务,进行 trigger 包装,提供 http 接口能力。这样,后续就可以包装页面到调用接口,完整整个会话服务的操作。 + +## 二、流程设计 + +如图,会话接口服务所在分层; + +++ +- 如图,这一节主要是完成 trigger http 接口部分的能力处理,对外提供;`智能体列表`、`创建会话 session`、`发起会话(流式/非流式)` +- 注意,在实际业务开发中,接口的提供方式比较多的,也有可能提供 rpc 接口,还有可能对接口进行扩展,包装更多业务流程进去。那么这个时候,可以考虑增加 case 编排层(一个新的module模块),处理复杂流程业务。case 层的能力,主要就是分摊 trigger 层下的压力,让对外的接口层,更加轻量,只是做一些包装即可。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-19\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\257\271\346\216\245-ui.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-19\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\257\271\346\216\245-ui.md" new file mode 100644 index 000000000..d2a1a11ce --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-19\350\212\202\357\274\232\344\274\232\350\257\235\346\234\215\345\212\241\346\216\245\345\217\243\345\257\271\346\216\245-ui.md" @@ -0,0 +1,38 @@ +--- +title: 【更】第2-19节:会话服务接口对接-ui +pay: https://t.zsxq.com/gd2Ue +--- + +# 《AI Agent 脚手架》第2-19节:会话服务接口对接-ui + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/38RBe](https://t.zsxq.com/38RBe) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +开发脚手架接口对接 UI,简单展示服务端能力。 + +在业务场景中,使用 AI Agent 脚手架,构建项目后所提供的服务接口,一般是附带着业务应用场景能力的。这些提供的能力接口,可以对接到客服、巡检、数据、量化、风控等各类场景使用。 + +## 二、对接效果 + +这里小傅哥选择使用了 AI IDE 工具,设计 UI 界面,我们可以描述对接话术,让 AI 帮我们设计一套页面。`关于页面设计的话术提示词,我已经放到工程下。` + +### 1. 登录页 + +++ +- 登录页,有一个演示账号,可以填充登录。 + +### 2. 对话页 + ++
++ +- 对话,可以填写信息,发送请求。在一个会话ID下,它是可以记录历史上下文信息的。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-1\350\212\202\357\274\232\345\267\245\347\250\213\345\210\235\345\247\213\345\214\226\345\210\233\345\273\272.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-1\350\212\202\357\274\232\345\267\245\347\250\213\345\210\235\345\247\213\345\214\226\345\210\233\345\273\272.md" new file mode 100644 index 000000000..5fef2d62e --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-1\350\212\202\357\274\232\345\267\245\347\250\213\345\210\235\345\247\213\345\214\226\345\210\233\345\273\272.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第2-1节:工程初始化创建 +pay: https://t.zsxq.com/6z3Q1 +--- + +# 《AI Agent 脚手架》第2-1节:工程初始化创建 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/OxC6a](https://t.zsxq.com/OxC6a) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +搭建 AI Agent Scaffold 脚手架项目工程,并 push 代码到课程仓库,以及演示关于 Git 使用,方便后续学习使用。 + +## 二、环境配置 + +- JDK 17 +- Maven 3.8.x - [Maven 教程](https://bugstack.cn/md/road-map/maven.html) +- IntelliJ IDEA 社区版(免费) [IntelliJ IDEA 教程](https://bugstack.cn/md/road-map/intellij-idea.html) +- Git - 安装后会配置到 IntellJ IDEA 这样才能向服务端推送或者拉取代码。学习后可以知道怎么拉取、提交和比对代码。Git 教程:[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html) + +++ +>相关软件,在星球课程入口,编程环境中提供了下载链接。编程环境:[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) - 提供了已经配置好镜像的 maven 方便直接使用。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-20\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-skills.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-20\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-skills.md" new file mode 100644 index 000000000..d11452c49 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-20\350\212\202\357\274\232\345\242\236\345\274\272\350\243\205\351\205\215-skills.md" @@ -0,0 +1,34 @@ +--- +title: 【更】第2-20节:增强装配-skills +pay: https://t.zsxq.com/7uVom +--- + +# 《AI Agent 脚手架》第2-20节:增强装配-skills + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/7uVom](https://t.zsxq.com/7uVom) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +为对话模型(ChatModelNode)的装配,添加 skills 技能配置,允许用户使用 resource 资源和映射的 path 路径的方式,在构建 AI Agent 智能体时,完成装配。 + +skill 是什么?它像是一本技能书📚,把一阳指(mcp/py/shell/js)和狮吼功(prompt)合成了一整招。缩短了从用户把提示词发给AI客户端,进行分析,决策,再到 mcp 执行的过程,让诉求直达结果,token 减少了,幻觉减少了! + +随着 LLM 大模型能力的不断提升,并与 RAG、MCP、Skill 的结合,使得 Agent 智能体与完整的计算机环境(Computer/Phone)交互成为可能。这个过程中,一方面不断产生新的技术方案,一方面又不断的优化设计。就像 Skill 的出现,它不是替代 MCP,而是更准确的使用 MCP 能力。 + +## 二、技术介绍(skills 和 prompt + mcp) + +如图,演示了一段 skill 的编写案例; + +++ +- 场景:案例中体现的是,对电脑性能检测后,用一段下达命令的方式,告知用户如何优化电脑性能。 +- 重点:如果不使用 skill,则需要描述一大段话术,让 ai 自己完成对用户场景诉求的分析,并按照步骤来调用对应的各个 mcp 服务(没有 skill 则需要把各类内容,都包装为 mcp 服务)。这个过程是比较消耗 token 的,也可能有不小的幻觉。现在有了 skill,我们可以适当的完整的写一段诉求文档,文档里嵌入可执行的脚本/mcp服务,让执行更可靠。 +- 用途:那都有哪些场景可以写 skill 技能书呢?🤔 如;互联网公司里的系统巡检,在接收到报警日志后,拿到一个报警的系统和接口信息,之后用 skill 技能书,分别采集出对应的系统配置、上线日志、数据库/缓存情况、运营操作记录、全链路监控上的接口耗时情况等。之后在根据我们日常排查问题的时候经验,编写过程步骤,这样会更加准确。 + +>所以,不是 skill、mcp 谁替代谁,而是 skill 对 mcp 进行增强,让 ai 执行时更加可靠。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-2\350\212\202\357\274\232Api\345\212\237\350\203\275\346\265\213\350\257\225.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-2\350\212\202\357\274\232Api\345\212\237\350\203\275\346\265\213\350\257\225.md" new file mode 100644 index 000000000..f19a2cb7e --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-2\350\212\202\357\274\232Api\345\212\237\350\203\275\346\265\213\350\257\225.md" @@ -0,0 +1,44 @@ +--- +title: 【更】第2-2节:Api功能测试 +pay: https://t.zsxq.com/uTPE2 +--- + +# 《AI Agent 脚手架》第2-2节:Api功能测试 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/q2Zug](https://t.zsxq.com/q2Zug) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +通过功能测试代码,使用 `Spring AI`、`LangChain4J`、`Google ADK` 框架对接 AI 服务,完成功能验证。为后续做 AI Agent 智能体脚手架做准备。 + +## 二、框架介绍 + +### 1. Spring AI + +官网:[https://docs.spring.io/spring-ai/reference/1.0/index.html](https://docs.spring.io/spring-ai/reference/1.0/index.html) + +Spring AI 项目旨在简化集成人工智能功能的应用程序的开发,避免不必要的复杂性。 + +该项目从 LangChain 和 LlamaIndex 等知名的 Python 项目中汲取灵感,但 Spring AI 并非这些项目的直接移植。该项目创立的初衷是,下一代生成式人工智能应用不仅面向 Python 开发者,还将广泛应用于多种编程语言。 + +> 在使用体验下 Spring AI 可以更好的结合 Spring 整个框架,整个接口的定义形式和使用方式,会更符合你对于 Spring 整体的使用习惯。 + +### 2. LangChain4J + +官网:[https://docs.langchain4j.info/](https://docs.langchain4j.info/) + +LangChain4j 的目标是简化将 LLM 集成到 Java 应用程序中的过程。 + +LangChain4j 始于 2023 年初 ChatGPT 热潮期间。 我们注意到与众多 Python 和 JavaScript LLM 库和框架相比,缺少 Java 对应物, 我们必须解决这个问题! 虽然我们的名字中有"LangChain",但该项目是 LangChain、Haystack、 LlamaIndex 和更广泛社区的想法和概念的融合,并加入了我们自己的创新。 + +### 3. Google ADK + +官网:[https://google.github.io/adk-docs/get-started/java/#example](https://google.github.io/adk-docs/get-started/java/#example) + +代理开发工具包 (ADK) 是一个灵活且模块化的框架,用于开发和部署 AI 代理 。ADK 针对 Gemini 和 Google 生态系统进行了优化,但它与模型和部署方式无关,并且是为……而构建的。 与其他框架的兼容性 。ADK 的设计宗旨是让代理开发更像软件开发,使开发人员能够更轻松地创建、部署和编排从简单任务到复杂工作流程的各种代理架构。 + +> 在使用体验上 Google ADK 自身是可以完整构建全部智能体的,但它又兼容了 Spring AI、LangChain4j 两个框架,让这2个框架负责 AI 对接,而 Google ADK 负责 Agent 的编排和插件的处理,这样使用起来非常不错。 diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-3\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\351\205\215\347\275\256\350\241\250\350\256\276\350\256\241.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-3\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\351\205\215\347\275\256\350\241\250\350\256\276\350\256\241.md" new file mode 100644 index 000000000..cd82e542a --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-3\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\351\205\215\347\275\256\350\241\250\350\256\276\350\256\241.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第2-3节:智能体配置表设计 +pay: https://t.zsxq.com/hCtFC +--- + +# 《AI Agent 脚手架》第2-3节:智能体配置表设计 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/bHRBx](https://t.zsxq.com/bHRBx) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +定义使用工程 YML 文件方式,配置的通用的智能体配置表。允许用户在使用脚手架创建完成智能体后工程后,通过 YML 配置出自己需要的智能体,在结合业务场景做对应的衔接开发。 + +如果,你在思考把 YML 的配置表抽取到数据库中实现,那么就是另外一套项目[《DeepSeek RAG、MCP、Ai Agent 智能体》](https://t.zsxq.com/GwNZp) 通过前端页面拖拉拽的方式进行配置使用。感兴趣也可以扩展学习。 + +## 二、流程设计 + +如图,智能体配置表结构; + +++ +- 首先,一个智能体配置所需的最基本信息包括;应用名称、智能体描述、智能体模块,主要的组件类配置都在智能体模块下,AiApi 负责对接 AI 接口,ChatModel 负责模型创建(也会把 AiApi 对接),之后还要创建出 MCP 工具。 +- 之后,就是对于单一智能体(Agent)的构建,这里可以顺序的创建出很多的智能体,之后到 AgentWorkflow 进行编排,构建出一个完整的智能体。**这部分映射了【第2-2节:系统架构设计】中的流程设计以及 YML 设计** \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-4\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\347\273\223\346\236\204\345\214\226\345\256\232\344\271\211.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-4\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\347\273\223\346\236\204\345\214\226\345\256\232\344\271\211.md" new file mode 100644 index 000000000..c37aec914 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-4\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\347\273\223\346\236\204\345\214\226\345\256\232\344\271\211.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第2-4节:装配域结构化定义 +pay: https://t.zsxq.com/pwR4K +--- + +# 《AI Agent 脚手架》第2-4节:装配域结构化定义 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/3GFbQ](https://t.zsxq.com/3GFbQ) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +通过`单一职责`、`规则树(组合模式)`、`工厂`、`上下文对象`、`泛型`等设计模式手段,结合领域驱动设计思想,定义智能体装配服务结构。 + +## 二、流程设计 + +如图,智能体装配结构设计; + +++ +- 首先,最上面的是规则树(组合模式)的设计模块框架,用于各项节点流转实现,如;RootNode、AiApiNode、ChatModelNode 等。 +- 之后,定义了单一职责的 IArmoryService 装配服务接口,并通过工厂管理节点衔接服务,以及定义上下文对象。这个上下文对象,会在各个节点间记录数据并流转使用。 + +> 本节小傅哥先带着大家把功能实现框架结构定义出来,让大家厘清关于这样的框架结构设计(这是一个非常通用的手段)。之后在进行各个节点的编码实现。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-5\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AiApiNode.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-5\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AiApiNode.md" new file mode 100644 index 000000000..b46113981 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-5\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AiApiNode.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第2-5节:装配域节点-AiApiNode +pay: https://t.zsxq.com/wetnI +--- + +# 《AI Agent 脚手架》第2-5节:装配域节点-AiApiNode + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/D3LGP](https://t.zsxq.com/D3LGP) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +从本节装配 AI Agent 智能体各个节点开始,每一节都只负责一小部分独立内容的实现,方便大家可以在回顾的时候,直接找到对应章节进行查看。 + +这一节装配第一个节点 AiApiNode,它的目的是和 AI 接口,建立请求连接。 + +## 二、流程设计 + +如图,智能体装配中 AiApiNode 部分; + +++ +AiApiNode 节点的装配,使用的是 Spring AI 框架提供的构建方法。在咱们课程前面也讲解过 LangChain4j,后面如果你想锻炼,也可以更换下,完全都是可以到 Agent 装配的时候做兼容的。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-6\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-ChatModelNode.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-6\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-ChatModelNode.md" new file mode 100644 index 000000000..b738c7cc5 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-6\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-ChatModelNode.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第2-6节:装配域节点-ChatModelNode +pay: https://t.zsxq.com/mnTej +--- + +# 《AI Agent 脚手架》第2-6节:装配域节点-ChatModelNode + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/X0HRO](https://t.zsxq.com/X0HRO) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +这一节从 AiApiNode 节点流转 ChatModelNode 模型对话节点的实例化操作,以及实现 ChatModelNode 装配操作。 + +## 二、流程设计 + +如图,智能体装配中 ChatModelNode 部分; + +++ +- 首先,这一个节点是从 AiApiNode 处理完流程,流转过来的节点。节点的流转是在 doApply 处理完成后,执行 router 路由方法。路由方法会调用当前实现类的 get 方法,获取下一个要执行节点。通过这样的方式分离逻辑区和流转区,可以让代码更好维护。 +- 之后,到了 ChatModelNode 使用 Spring AI 处理模型构建。构建前还需要从上下文获取 AiApiNode 中关于 OpenAiApi 实例化对象,用于填充到 ChatModel 实例化中。 +- 此外,ChatModelNode 还要构建关于 MCP 的构建,这里是把 MCP 填充到模型中使用,这一套都是基于 Spring AI 框架处理的。当然,除了可以使用 Spring AI 也可以使用 langchain4j、google adk 来处理关于 mcp 的部分。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-7\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AgentNode.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-7\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AgentNode.md" new file mode 100644 index 000000000..9d5236a05 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-7\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AgentNode.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第2-7节:装配域节点-AgentNode +pay: https://t.zsxq.com/908Fo +--- + +# 《AI Agent 脚手架》第2-7节:装配域节点-AgentNode + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/PFBNl](https://t.zsxq.com/PFBNl) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +这一节从 ChatModelNode 节点流转 AgentNode 节点,做智能体 LlmAgent 的实例化操作,以及实现 AgentNode 装配操作。 + +## 二、流程设计 + +如图,智能体装配中,AgentNode 部分; + +++ +- 首先,AgentNode 节点是由 ChatModelNode 节点流转过来的,每个节点的流转都是类似的操作,处理完业务功能后,则路由到下一个节点继续完成其他业务。 +- 之后,AgentNode 是一个多 LlmAgent 装配的过程,我们在配置智能体的时候,有一些复杂的场景则要多个 LlmAgent 分别做不同的事情,来完成一个整体的流程。所以这类的智能体是多个 LlmAgent 配置。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-8\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AgentWorkflowNode.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-8\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AgentWorkflowNode.md" new file mode 100644 index 000000000..60bf9e157 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-8\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-AgentWorkflowNode.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第2-8节:装配域节点-AgentWorkflowNode +pay: https://t.zsxq.com/3mjk1 +--- + +# 《AI Agent 脚手架》第2-8节:装配域节点-AgentWorkflowNode + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/3EdmN](https://t.zsxq.com/3EdmN) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在 AiApi、ChatModel、Agent 装配完成后,接下来要进入到智能体工作流编排的操作了,他们的组合可能是 LoopAgent 把几个 LlmAgent 作为子 Agent,也有可能是 ParallelAgent 把几个 LlmAgent 作为并行,最后又会被 SequentialAgent 串行使用。 + +正是因为这块能有多重组合,所以,我们才需要有一个流转判断器的节点,让这些节点的执行可以串联起来。 + +## 二、流程设计 + +如图,智能体装配中,AgentWorkflowNode 部分; + +++ +- 首先,这一节重点设计关于 AgentWorkflowNode 到其他3个节点节点的流转操作,包括;LoopAgent、ParallelAgentNode、SequentialAgentNode,并最终由 SequentialAgentNode 作为结束,也就是最后是一个序列化的执行。 +- 注意,LoopAgent、ParallelAgentNode、SequentialAgentNode 这三个节点,本节只关注他们的流转操作,后续在做具体的节点功能实现。 +- 另外,还有一种可能,就是单一智能体 LlmAgent 直接作为结束,没有配置 SequentialAgentNode 包装一层序列化执行,后续在扩展这部分。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-9\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-Loop\343\200\201Parallel\343\200\201Sequential.md" "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-9\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-Loop\343\200\201Parallel\343\200\201Sequential.md" new file mode 100644 index 000000000..4c8f4ef6a --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-2/\347\254\2542-9\350\212\202\357\274\232\350\243\205\351\205\215\345\237\237\350\212\202\347\202\271-Loop\343\200\201Parallel\343\200\201Sequential.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第2-9节:装配域节点-Loop、Parallel、Sequential +pay: https://t.zsxq.com/t29lj +--- + +# 《AI Agent 脚手架》第2-9节:装配域节点-Loop、Parallel、Sequential + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/6NKGA](https://t.zsxq.com/6NKGA) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +从 AgentWorkflowNode 开始,要进入 LoopAgent、ParallelAgent、SequentialAgent,这几个节点都是类似的,我们一起来处理下。 + +## 二、流程设计 + +如图,智能体装配中,LoopAgentNode、ParallelAgentNode、SequentialAgentNode 部分; + +++ +- LoopAgentNode - 处理循环操作,如一个用户请求,要进行分析、执行、检测,也可以是一段git提交的代码,进行 diff 获取差异,检索代码匹配召回、做出执行review计划,后面在依次执行分析。这些都是可以做循环处理的。 +- ParallelAgentNode - 处理并行操作,如我们有一些场景,需要同步并行的一起完成数据处理任务,多条链路一起完成数据的获取、分析和决策,这样可以对复杂的流程显著的提高执行效率。 +- SequentialAgentNode - 处理串行操作,主要用于编排子智能体,和 loop 循环、parallel 并行,组合出复杂的智能体流程。当然,你也可以使用 loop 组合 sequence 或者 parallel 等处理过程。 diff --git "a/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-1\350\212\202\357\274\232Maven\350\204\232\346\211\213\346\236\266\351\205\215\347\275\256.md" "b/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-1\350\212\202\357\274\232Maven\350\204\232\346\211\213\346\236\266\351\205\215\347\275\256.md" new file mode 100644 index 000000000..d21e779af --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-1\350\212\202\357\274\232Maven\350\204\232\346\211\213\346\236\266\351\205\215\347\275\256.md" @@ -0,0 +1,34 @@ +--- +title: 【更】第3-1节:Maven脚手架配置 +pay: https://t.zsxq.com/jnqmk +--- + +# 《AI Agent 脚手架》第3-1节:Maven脚手架配置 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/EwCTb](https://t.zsxq.com/EwCTb) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +对 ai-agent-scaffold 脚手架工程配置 maven-archetype-plugin,生成工程脚手架。以及通过命令使用脚手架(jar)创建出新的工程。 + +脚手架的目的就在于此,我们使用一套通用的代码,按照不同的工程使用新的工程名、包名、版本,来构建一套具有相同基础能力的新的项目。 + +简单来说,maven-archetype-plugin 是 Maven 世界里的“项目模板生成器”。 + +如果把开发一个项目比作盖房子,这个插件的作用就是为你提供一套图纸和预制框架。你不需要每次都从零开始挖地基、垒砖头,只需要选好模板,它就会自动帮你把标准的目录结构和基础配置(pom.xml)搭建好。 + +## 二、流程设计 + +如图,从工程使用 maven 构建脚手架到使用的过程; + +++ +- 左侧,对现有工程使用 maven-archetype-plugin 插件,构建工程脚手架。将当前的工程打包成一个可复用的 Archetype 模板。 +- 中间,打包好的脚手架,可以在本地直接使用,也可以发布jar到私服,让大家都可以使用。私服部分,后续在做处理。 +- 右侧,使用方可以基于命令,或者 IntelliJ IDEA 配置 Maven 脚手架的方式,创建和启动工程。这一节,我们先通过命令的方式使用。 diff --git "a/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-2\350\212\202\357\274\232\344\270\212\344\274\240jar\345\210\260maven\344\273\223\345\272\223.md" "b/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-2\350\212\202\357\274\232\344\270\212\344\274\240jar\345\210\260maven\344\273\223\345\272\223.md" new file mode 100644 index 000000000..6f3bb6717 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-2\350\212\202\357\274\232\344\270\212\344\274\240jar\345\210\260maven\344\273\223\345\272\223.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第3-2节:上传jar到maven仓库 +pay: https://t.zsxq.com/GHNso +--- + +# 《AI Agent 脚手架》第3-2节:上传jar到maven仓库 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/6xBLn](https://t.zsxq.com/6xBLn) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +发布脚手架工程 Jar 包到阿里云 Maven 私有制品库。 + +在公司里,这块的目的在于,我们设计一款通用的脚手架,让公司里的伙伴都可以使用。那么公司里会把这样的脚手架jar,推送到公司内的私服仓库,之后公司内的用户配置了私服 Maven 地址,就可以使用了。 + +注意,可以检索下 Maven 私服搭建,面试也可能会问,企业里应该怎么做。 + +## 二、流程设计 + +如图,把 jar 发布到 maven 私服仓库; + +++ +- 在整个大流程中,我们要上传jar到maven私服仓库,这部分阿里云有提供,可以申请使用。另外,可以尝试检索下 Maven 私服搭建和使用。 +- 这一部分会使用到 IntelliJ IDEA Maven Deploy + Maven Settings.xml 配置阿里云私服。 diff --git "a/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-3\350\212\202\357\274\232\351\203\250\347\275\262\350\204\232\346\211\213\346\236\266\347\275\221\351\241\265.md" "b/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-3\350\212\202\357\274\232\351\203\250\347\275\262\350\204\232\346\211\213\346\236\266\347\275\221\351\241\265.md" new file mode 100644 index 000000000..023a3d9ba --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-3/\347\254\2543-3\350\212\202\357\274\232\351\203\250\347\275\262\350\204\232\346\211\213\346\236\266\347\275\221\351\241\265.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-3节:部署脚手架网页 +pay: https://t.zsxq.com/J3YHa +--- + +# 《AI Agent 脚手架》第3-3节:部署脚手架网页 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/UBTWu](https://t.zsxq.com/UBTWu) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +通过 Nginx 部署网页,把 archetype-catalog.xml 放到网页文件夹下,以便于可以通过 http 配置地址,使用脚手架。 + +这样做的目的,是为了提供一个公用的地址,让所有的用户配置地址后,都可以使用这套脚手架。 + +## 二、流程设计 + +如图,部署网页版后用户使用流程; + +++ +- 当你打开 [https://repo.maven.apache.org/maven2/]([https://repo.maven.apache.org/maven2/) 公用脚手架你会发现,在最后面有一个 `archetype-catalog.xml` 文件,也就是这个文件约定了可以使用的脚手架。那么我们就可以依次方式,配置一个自己的网页,在网页下放自己的 `archetype-catalog.xml` 文件,这样我们就可以使用自己实现的脚手架了。 +- 当我们把脚手架这样设计后,所有使用这个网页版的用户,就都可以直接配置使用了。注意使用的过程中,网页版的脚手架配置后,会拉取私服仓库的脚手架jar包。 diff --git "a/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-0\350\212\202\357\274\232ai + draw.io \344\272\247\345\223\201\350\256\276\350\256\241.md" "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-0\350\212\202\357\274\232ai + draw.io \344\272\247\345\223\201\350\256\276\350\256\241.md" new file mode 100644 index 000000000..21afc1d5b --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-0\350\212\202\357\274\232ai + draw.io \344\272\247\345\223\201\350\256\276\350\256\241.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第4-0节:ai + draw.io 产品设计 +pay: https://t.zsxq.com/AAwjy +--- + +# 《AI Agent 场景应用 - ai draw.io》第4-0节:ai + draw.io 产品设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/035hj](https://t.zsxq.com/035hj) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +基于 AI Agent 智能体脚手架,在 draw.io 场景,使用 react 开发一套 ai + draw.io 智能绘图功能场景。 + +当前章节的这套场景功能会比较轻量,不会结合toc用户诉求。但当你越来越多的熟练星球的各个项目以后,你可以在 ai + draw.io 的功能上,添加公众号扫码登录、微信支付购买使用额度 + 拼团购买、数据库记录个人绘图信息、分享绘图数据在统一平台、其他用户可以查看和收藏,以及使用后有抽奖、积分、兑换营销能力等。这些功能在星球的其他项目都有体现,可以陆续学习后扩展补充。 + +## 二、产品效果 + +如图,ai + draw.io 使用 ai agent 脚手架,所能实现的效果; + +++ +- 首先,需要结合 [react-drawio](https://github.com/marcveens/react-drawio) 插件,把 draw.io 嵌入到 react 程序里。在 react-drawio 的插件里,提供了相关的 API 操作,这可以让我们把 ai 生成的 xml 文件,让 draw.io 渲染出来。也可以读取到 draw.io 上的内容,再发给 ai 进行分析和调整。 +- 之后,是 ai agent 脚手架开发的程序,编写智能体提示词,让其可以以 xml 的格式返回。当然这部分也可以做一些限定,比如返回的数据是一个带有类型和内容的对象,如果类型 type 是对话,那么可以进行多次交流,如果返回类型是 xml,那么则直接渲染。目前的案例程序,会先直接返回 xml 直接渲染进来。 +- 最后,我们做这类内容,我们先有一个简单的清晰的流程和实现方案,能把整个流程串联起来。当你做的透彻以后,就可以继续扩展迭代功能了。 diff --git "a/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-1\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\345\267\245\347\250\213\346\220\255\345\273\272.md" "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-1\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\345\267\245\347\250\213\346\220\255\345\273\272.md" new file mode 100644 index 000000000..48d967c17 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-1\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\345\267\245\347\250\213\346\220\255\345\273\272.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第4-1节:初始化工程搭建 +pay: https://t.zsxq.com/PDeYZ +--- + +# 《AI Agent 场景应用 - ai draw.io》第4-1节:初始化工程搭建 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/KiliX](https://t.zsxq.com/KiliX) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +初始化搭建 ai draw.io 前端工程,因为 draw.io 的开发插件是 React 语言的,所以我们也要基于 React 语言构建工程。 + +>这部分前端的内容,会使用即可。如果感兴趣,也可以在 TypeScript 官网学习下,它的语言结构也比较清晰,甚至和我们学习的 Java 是有类似的地方的。 + +本节初始化工程搭建开发后,就可以基于 AI IDE 工具,来完成后续的开发了。这部分对后端程序员是比较友好的。当然找工作,一般后端岗位是不会问前端的,所以你可以仅仅是当做使用即可。 + +## 二、开发环境 + +- Node.js v20+ - [https://nodejs.org/zh-cn](https://nodejs.org/zh-cn) - 下载安装即可。 +- WebStorm 2023.1 - 因为自带了开发前端的工具,所以非常好用。星球课程入口,编程环境,软件下载。里面提供了安装包。地址:[https://drive.weixin.qq.com/s?k=ACMA4AfQABU0svnJ27](https://drive.weixin.qq.com/s?k=ACMA4AfQABU0svnJ27) +- 源地址设置;`npm config set registry https://registry.npmmirror.com` - 安装好环境后,设置下源地址。否则在后面构建项目会很慢。 +- TypeScript01:[https://www.runoob.com/typescript/ts-tutorial.html](https://www.runoob.com/typescript/ts-tutorial.html) - 课程资料,简单的菜鸟入门教程。学习之后也能看懂 TypeScript 代码。所有的面向对象语言代码,基本是通用的。 +- TypeScript02:[https://typescript.bootcss.com/namespaces.html](https://typescript.bootcss.com/namespaces.html) - 课程资料,简单的菜鸟入门教程。学习之后也能看懂 TypeScript 代码。所有的面向对象语言代码,基本是通用的。 diff --git "a/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-2\350\212\202\357\274\232\345\234\250\351\241\265\351\235\242\345\265\214\345\205\245draw.io\347\273\204\344\273\266\345\222\214\345\257\271\350\257\235\346\241\206.md" "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-2\350\212\202\357\274\232\345\234\250\351\241\265\351\235\242\345\265\214\345\205\245draw.io\347\273\204\344\273\266\345\222\214\345\257\271\350\257\235\346\241\206.md" new file mode 100644 index 000000000..98b916dcc --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-2\350\212\202\357\274\232\345\234\250\351\241\265\351\235\242\345\265\214\345\205\245draw.io\347\273\204\344\273\266\345\222\214\345\257\271\350\257\235\346\241\206.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第4-2节:在页面嵌入draw.io组件和对话框 +pay: https://t.zsxq.com/JoT4f +--- + +# 《AI Agent 场景应用 - ai draw.io》第4-2节:在页面嵌入draw.io组件和对话框 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/wtWx6](https://t.zsxq.com/wtWx6) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在 React 前端工程中,嵌入 draw.io 组件。以及在整个页面的右侧放入一个对话框,用于后续与服务端的 ai 接口进行对话。 + +这部分的实现,会使用到 ai ide 工具来处理,你常用的任何一款工具都可以。 + +## 二、流程设计 + +如图,前端页面交互的流程设计; + +++ +- 这是一个简单的交互,引入 react-drawio 到初始页面,并在右侧设置一个对话框。 diff --git "a/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-3\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223API\346\216\245\345\217\243\345\257\271\346\216\245.md" "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-3\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223API\346\216\245\345\217\243\345\257\271\346\216\245.md" new file mode 100644 index 000000000..0edb53933 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-3\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223API\346\216\245\345\217\243\345\257\271\346\216\245.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第4-3节:智能体API接口对接 +pay: https://t.zsxq.com/hrQVL +--- + +# 《AI Agent 场景应用 - ai draw.io》第4-3节:智能体API接口对接 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/RnvaG](https://t.zsxq.com/RnvaG) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +通过脚手架创建 AI Agent 智能体服务端工程,并配置用于绘制 draw.io 流程图的专属提示词。之后在前端工程对接智能体 API 服务接口,包括;创建会话 SessionID、调用对话接口进行绘图(这部分会限制智能体以 drawio 格式返回结果)。 + +## 二、流程设计 + +如图,前端页面与服务端交互的UML流程设计; + +++ +- 首先,从用户发起,打开页面开始,则从服务端的智能体列表加载接口,返回智能体列表。 +- 之后,选择智能体进行对话,这个过程要先创建会话ID。也就是所有的本次的交互,会有一个会话ID进行,这样在对话的过程中会记录上下文,输出的结果也会更加准确。 +- 最后,服务端返回智能体结果,是以 draw.io xml 的方式的方式返回的,之后渲染到 draw.io 面板上。 diff --git "a/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-4\350\212\202\357\274\232AI+\347\224\250\346\210\267+DrawIO\357\274\214\344\272\244\344\272\222\345\274\217\347\224\273\345\233\276.md" "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-4\350\212\202\357\274\232AI+\347\224\250\346\210\267+DrawIO\357\274\214\344\272\244\344\272\222\345\274\217\347\224\273\345\233\276.md" new file mode 100644 index 000000000..ed9ecd276 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-4\350\212\202\357\274\232AI+\347\224\250\346\210\267+DrawIO\357\274\214\344\272\244\344\272\222\345\274\217\347\224\273\345\233\276.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第4-4节:AI+用户+DrawIO,交互式画图 +pay: https://t.zsxq.com/BLDCn +--- + +# 《AI Agent 场景应用 - ai draw.io》第4-4节:AI+用户+DrawIO,交互式画图 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[待更新](#) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +增强服务端 ai agent 智能体配置,以分析,绘制,检查的流程处理 draw.io 的图的制作,如果用户信息不准确的时候,则返回给前端让用户补全信息。 + +此外,对于前端的使用也做一些优化处理,包括;增加对话列表页、保存用户绘图信息到浏览器、交互式完成绘图操作、提供案例绘图、携带历史绘图等。 + +## 二、流程设计 + +如图,AI 交互式绘图流程设计; + +++ +- 首先,第一个改造点是服务端的智能体流程配置,让 ai agent 对用户的请求进行分析、绘制、检查,如果用户提供的信息不全则让用户继续补充,如果全面则可以直接绘制。那么这个时候,就要给前端返回一个 json 结构,并按照不同的类型返回数据。 +- 之后,因为服务端智能体返回的不再是一个 draw.io 的 xml,所以要对 agent 智能体返回的结果,进行序列化成对象,再返回给前端。前端拿到结果后要对不同的类型的结果,反馈给用户(user)、渲染到 draw.io 页面(xml)。 +- 此外,除了结果的渲染,对前端的对话操作,增加一个历史记录页,保存 draw.io 的绘图内容到浏览器里。这样刷新页面也可以看到历史的画图。 +- 注意,你还可以再此基础上,增加更多的功能。如,学习了星球里的小型支付,那么可以把扫码登录、支付购买额度,对接进来。也可以把大营销的积分,兑换,抽奖对接进来。这些内容,都是可以衔接起来的。 diff --git "a/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-5\350\212\202\357\274\232ai-draw-io\357\274\214\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262.md" "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-5\350\212\202\357\274\232ai-draw-io\357\274\214\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262.md" new file mode 100644 index 000000000..25002cfd5 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-4/\347\254\2544-5\350\212\202\357\274\232ai-draw-io\357\274\214\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262.md" @@ -0,0 +1,34 @@ +--- +title: 【更】第4-5节:ai-draw-io,云服务器部署 +pay: https://t.zsxq.com/5h1K1 +--- + +# 《AI Agent 场景应用 - ai draw.io》第4-5节:ai-draw-io,云服务器部署 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/UaVxl](https://t.zsxq.com/UaVxl) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在云服务器(2c4g)部署 ai-draw-io 前后端项目,后端提供智能体能力,前端提供绘图操作。本次构建的镜像,小傅哥提供了动态更换前端访问服务的IP配置,在不进行构建镜像时,也可以直接使用。 + +>注意,ai-draw-io 绘图操作,模型配置的越好,效果也越好。gpt-5.1 比 gpt-4.1 绘制的效果更好。 + +## 二、部署过程 + +如图,部署过程步骤流程; + +++ +- 首先,你需要一台2c4g云服务器(安装 Ubuntu 24),推荐购买 [https://618.gaga.plus](https://618.gaga.plus) - 腾讯云暂时有买1年送3个月,可以配和 [https://bugstack.cn/md/road-map/ssl-httpsok.html](https://bugstack.cn/md/road-map/ssl-httpsok.html) 申请免费 ssl(自动续期)适合后续有域名的时候使用。 +- 之后,在你购买了一台云服务器后,你可以使用小傅哥提供的一键安装脚本,把云服务器部署好 Docker 环境 + Portainer 管理面板。安装脚本:[https://gitcode.com/Yao__Shun__Yu/xfg-dev-tech-docker-install](https://gitcode.com/Yao__Shun__Yu/xfg-dev-tech-docker-install) +- 然后,这里还有项目的部署教程,这里是小傅哥录制好的视频,教你如何部署项目。教程:[https://t.zsxq.com/iDuCt](https://t.zsxq.com/iDuCt) - `你可以做为补充学习,本课程也会带着你部署项目。` +- 另外,这里还有一个本地对项目构建好镜像后推送到阿里云docker镜像库,方便大家上传和拉取。其实也可以推送到官网 docker hub,但会需要代理。教程(阿里云docker镜像使用):[https://t.zsxq.com/XdoWr](https://t.zsxq.com/XdoWr) 阿里云镜像库地址:[https://cr.console.aliyun.com/cn-hangzhou/instance/credentials](https://cr.console.aliyun.com/cn-hangzhou/instance/credentials) +- 注意,提前在云服务器安全组开放端口;`9000-docker 管理面板`、`8091-后端接口`、`3000-前端页面` + +> 综上,所有的云服务器操作,在星球「码农会锁」都提供好了学习教程,可以参考总地址:[https://t.zsxq.com/19osWS4qj](https://t.zsxq.com/19osWS4qj) diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-1\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\345\267\245\347\250\213\346\220\255\345\273\272.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-1\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\345\267\245\347\250\213\346\220\255\345\273\272.md" new file mode 100644 index 000000000..783ab8a03 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-1\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\345\267\245\347\250\213\346\220\255\345\273\272.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第5-1节:初始化工程搭建 +pay: https://t.zsxq.com/ELrPx +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-1节:初始化工程搭建 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/dx4wS](https://t.zsxq.com/dx4wS) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +本节初始搭建 MobileOpenClaw - `智能体手机`,服务端工程和安卓网关工程。服务端基于 AI Agent Scaffold 脚手架创建,用于智能体决策部分。安卓作为网关终端,设计接收智能体下发的指令,以及完成一些列动作,如;`启动应用`、`点击指定坐标`、`输入文本`、`滑动屏幕`、`长按`、`双击`、`请求人工接管(登录/验证码)`等。 + +++ +> 整个 MobileOpenClaw - 智能体手机,使用的是`安卓`开发的手机端 apk 应用,它可以拿到更高的权限,方便做工程开发测试。 + +## 二、开发环境 + +- JDK 17、Maven 3.8.x、SpringBoot 3.4.3 ~ 4.1.0-M1、Spring AI 1.1.0-M3 ~ 2.0.0-M2、Google ADK +- IntelliJ IDEA CE 2023+ +- Android Studio - 官网(下载):[https://developer.android.com/studio?hl=zh-cn#get-android-studio](https://developer.android.com/studio?hl=zh-cn#get-android-studio) 星球(下载):[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) `首次安装时间会比较长` diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-2\350\212\202\357\274\232\346\211\213\346\234\272\347\275\221\345\205\263\345\212\250\344\275\234\350\260\203\345\272\246\350\256\276\350\256\241.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-2\350\212\202\357\274\232\346\211\213\346\234\272\347\275\221\345\205\263\345\212\250\344\275\234\350\260\203\345\272\246\350\256\276\350\256\241.md" new file mode 100644 index 000000000..14bc1e690 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-2\350\212\202\357\274\232\346\211\213\346\234\272\347\275\221\345\205\263\345\212\250\344\275\234\350\260\203\345\272\246\350\256\276\350\256\241.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第5-2节:手机网关动作调度设计 +pay: https://t.zsxq.com/ELrPx +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-2节:手机网关动作调度设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/GdwGE](https://t.zsxq.com/GdwGE) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +初步设计安卓手机端网关服务,通过接收指令,完成一系列动作调度。动作调度指令,由服务端开启一个 socket server,之后由手机端 socket client 连接,并接收指令驱动手机动作。包括;打开、点击、首屏、截图、输入等。 + +后续这套网关调度,由AI Agent 智能体根据用户的诉求,在一些列规划分析后,指令下达。让手机端完成用户诉求。 + +## 二、流程设计 + +如图,通信设备网关调度指令设计; + +++ +- 首先,核心的内容是右侧的安卓端,开发一系列控制手机设备的指令动作。之后这些指令动作由 socket 客户端接收 socket 服务端下发的指令完成操作。这里的想法也就是让手机端成为一个指令执行器,具体操作都是由服务端控制,这样就可以满足后续 AI 操作手机的目的。 +- 之后,本节的服务端是编写一个 Socket Server 的测试代码,让手机端连接,之后由服务端下发指令进行测试验证。 diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-3\350\212\202\357\274\232\346\234\215\345\212\241\347\253\257\347\275\221\347\273\234\351\200\232\344\277\241\350\256\276\350\256\241(Netty).md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-3\350\212\202\357\274\232\346\234\215\345\212\241\347\253\257\347\275\221\347\273\234\351\200\232\344\277\241\350\256\276\350\256\241(Netty).md" new file mode 100644 index 000000000..e1956f74a --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-3\350\212\202\357\274\232\346\234\215\345\212\241\347\253\257\347\275\221\347\273\234\351\200\232\344\277\241\350\256\276\350\256\241(Netty).md" @@ -0,0 +1,31 @@ +--- +title: 【更】第5-3节:服务端网络通信设计(Netty) +pay: https://t.zsxq.com/IB8jJ +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-3节:服务端网络通信设计(Netty) + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/UUvY7](https://t.zsxq.com/UUvY7) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +引入 Netty 框架,设计服务端 Socket Server 通信模型 + Future 等待响应方式获取客户端(手机)反馈结果。 + +这样设计的目的就是为了整个流程设计,从用户端发起请求,到后续章节AI分析决策产生指令,再通过 Socket 服务下发到手机端完成一些列的操作动作。 + +## 二、流程设计 + +如图,从服务端下发指令到客户端(手机)的流程设计; + +++ +- 首先,要为整个通信设计一个 Socket 通信模型,以便于服务端和客户端,保持信息数据交互。那么这里在领域层添加了一套 MobileClawService 的服务。 +- 之后,整个通信服务的处理,是由基础设施层完成的,发送给手机端指令后,还需要一个等待,用于达到同步响应的效果。否则 socket 通信是异步的,再从其他入口返回来就不好处理了。 + +> 关于 Netty 这里有一些基础案例教程可以学习[《Netty 基础教程》](https://bugstack.cn/md/netty/base/2019-07-30-netty%E6%A1%88%E4%BE%8B%EF%BC%8Cnetty4.1%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E7%AF%87%E9%9B%B6%E3%80%8A%E5%88%9D%E5%85%A5JavaIO%E4%B9%8B%E9%97%A8BIO%E3%80%81NIO%E3%80%81AIO%E5%AE%9E%E6%88%98%E7%BB%83%E4%B9%A0%E3%80%8B.html) diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-4\350\212\202\357\274\232\345\210\235\346\255\245\351\200\232\350\277\207\346\231\272\350\203\275\344\275\223\357\274\214\346\223\215\344\275\234\346\211\213\346\234\272\350\256\276\345\244\207.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-4\350\212\202\357\274\232\345\210\235\346\255\245\351\200\232\350\277\207\346\231\272\350\203\275\344\275\223\357\274\214\346\223\215\344\275\234\346\211\213\346\234\272\350\256\276\345\244\207.md" new file mode 100644 index 000000000..2fbee856a --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-4\350\212\202\357\274\232\345\210\235\346\255\245\351\200\232\350\277\207\346\231\272\350\203\275\344\275\223\357\274\214\346\223\215\344\275\234\346\211\213\346\234\272\350\256\276\345\244\207.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第5-4节:初步通过智能体,操作手机设备 +pay: https://t.zsxq.com/O4m6n +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-4节:初步通过智能体,操作手机设备 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/dqpLb](https://t.zsxq.com/dqpLb) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +初步配置 AI Agent 智能体,分析用户意图,操作手机使用。以及搭配前端操作页面,实时渲染手机当前屏幕最新结果。让用户可以可视化的方式看到手机的动作变化。 + +>可扩展点;将来你可以在智能体功能上对接微信公众号,通过手机端微信通过文字或者语音的方式,操作这台放在家中手机设备完成一些任务的处理。 + +## 二、流程设计 + +如图,从前端用户请求 -> 智能体意图分析和执行 -> 安卓设备指令应答,流程设计; + +++ +- 首先,我们先来初步的添加一个智能体配置,以及提供一个页面来串联从用户发起到智能体分析、决策、执行,再传递指令给安卓端的一个操作流程。 +- 之后,整个智能体的操作(轮训处理和拿到决策结果),目前先直接放到 trigger 里执行,后续在细化拆分到编排层。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-5\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-5\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241.md" new file mode 100644 index 000000000..c05931c0b --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-5\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\267\245\344\275\234\346\265\201\350\256\276\350\256\241.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第5-5节:智能体工作流设计 +pay: https://t.zsxq.com/v7M6t +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-5节:智能体工作流设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/dqpLb](https://t.zsxq.com/dqpLb) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +通过增加 case 层,分摊 trigger 触发器层,对智能体接口(`AgentServiceController#chat`)流程实现中的复杂逻辑处理。这种设计手段,在复杂的业务流程工程实现里是非常场景,我们经过会通过包的职责,来划分功能单元,让整个结构在复杂业务的迭代中,可以保持易于扩展和维护。 + +## 二、流程设计 + +如图,从 trigger 触发器层的功能实现到 case 编排层的设计; + +++ +- 首先,一个大的方向,是把图中,上部分 5-4节中的 trigger 内实现的流程,迁移到 5-5 节中 编排层进行处理。以此降低 trigger 层的逻辑功能复杂度。 +- 之后,通过编排逻辑模块,按照功能职责划分不同的类,来实现各个功能逻辑。也就是以前一堆的编排,拆分出不同的逻辑单元,以后看到类就能知道它在做什么。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-6\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\274\202\346\255\245\345\223\215\345\272\224\345\261\225\347\244\272\346\211\247\350\241\214\350\277\207\347\250\213.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-6\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\274\202\346\255\245\345\223\215\345\272\224\345\261\225\347\244\272\346\211\247\350\241\214\350\277\207\347\250\213.md" new file mode 100644 index 000000000..79126b0a7 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-6\350\212\202\357\274\232\346\231\272\350\203\275\344\275\223\345\274\202\346\255\245\345\223\215\345\272\224\345\261\225\347\244\272\346\211\247\350\241\214\350\277\207\347\250\213.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第5-6节:异步结果响应 +pay: https://t.zsxq.com/PfpTF +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-6节:异步结果响应 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/l1RLL](https://t.zsxq.com/l1RLL) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +修改智能体对话(web控制手机)请求为异步响应式接口,实时反馈到用户端(web)当前的执行动作。那么,这里要把 `Response` 调整为 `ResponseBodyEmitter` + +>**`ResponseBodyEmitter`** 是 Spring Framework(具体来说是 Spring Web MVC)中用于处理异步 HTTP 请求的一个核心类。它的主要作用是**允许服务端在一个 HTTP 请求的生命周期内,异步地、多次向客户端发送数据**。 + +## 二、流程设计 + +如图,在智能体处理流程中添加 ResponseBodyEmitter 异步响应设计; + + ++ +- 在整个接口调用流程中,穿插进入 ResponseBodyEmitter 进行异步结果的响应处理。 +- 这部分没有逻辑的变动,只是把过程数据渲染回去。如果你还想有一些其他的渲染,也可以通过这样的方式处理。 \ No newline at end of file diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-7\350\212\202\357\274\232\344\275\277\347\224\250AutoGLM-Phone-9B\346\236\204\345\273\272\346\211\213\346\234\272\346\231\272\350\203\275\344\275\223.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-7\350\212\202\357\274\232\344\275\277\347\224\250AutoGLM-Phone-9B\346\236\204\345\273\272\346\211\213\346\234\272\346\231\272\350\203\275\344\275\223.md" new file mode 100644 index 000000000..d5f937f01 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-7\350\212\202\357\274\232\344\275\277\347\224\250AutoGLM-Phone-9B\346\236\204\345\273\272\346\211\213\346\234\272\346\231\272\350\203\275\344\275\223.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第5-7节:使用AutoGLM-Phone-9B构建手机智能体 +pay: https://t.zsxq.com/6qOqE +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-7节:使用AutoGLM-Phone-9B构建手机智能体 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/06kx8](https://t.zsxq.com/06kx8) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +引入智谱发布的 autoglm-phone-9b 专属模型,构建手机智能体。专属模型对手机上的内容操作有更为全面流程控制,比通用视觉模型在处理用户动作时会更加准确。目前这套模型可以使用官网(限时免费 [autoglm-phone](https://docs.bigmodel.cn/cn/guide/models/vlm/autoglm-phone)),也可以在 24G * 2 显卡[自己部署](https://bugstack.cn/md/algorithm/model/autoglm-phone-agent.html)。所以,如果你考虑的是将来在一些场景使用,成本相对也是很低的。 + +## 二、流程设计 + +如图,通过 autoglm-phone-9b 专属模型,构建手机智能体设计; + +++ +- 首先,我们把之前的通用模型的实现,定义为 flow 我们要自己编写流程。把专属的手机模型定义为 auto,因为他提供了默认的一些专属特性,可以减少我们流程化上的操作。 +- 之后,对照来看,autoglm-phone-9b 模型,会为我们返回具体的手机的操作指令,如点击、打开、滑动、双击、回到主屏幕等。这部分内容在智谱官网访问也有说明 [AutoGLM-Phone](https://docs.bigmodel.cn/cn/guide/models/vlm/autoglm-phone) +- 那么,现在需要我们改动的内容,主要是围绕着特定官网的给的智能体 prompt 提示词,编写智能体处理过程,与网关通信完成一些列的流程操作。 diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-8\350\212\202\357\274\232\345\244\232\347\211\210\346\234\254\345\256\211\345\215\223\347\211\210\346\234\254\347\255\226\347\225\245\346\224\257\346\214\201.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-8\350\212\202\357\274\232\345\244\232\347\211\210\346\234\254\345\256\211\345\215\223\347\211\210\346\234\254\347\255\226\347\225\245\346\224\257\346\214\201.md" new file mode 100644 index 000000000..21d970242 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-8\350\212\202\357\274\232\345\244\232\347\211\210\346\234\254\345\256\211\345\215\223\347\211\210\346\234\254\347\255\226\347\225\245\346\224\257\346\214\201.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第5-8节:多版本安卓版本策略支持 +pay: https://t.zsxq.com/kpgKo +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-8节:多版本安卓版本策略支持 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/kpgKo](https://t.zsxq.com/kpgKo) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +安卓端的网关终端接收 AI Agent 智能体,通过 Socket 下发指令,完成一系列操作动作。但在一些安卓设备测试中发现,不同的版本安卓它的 API 也是有差异的,如低版本的截图方法在高版本中就没法支持。因此我们需要做一些策略化的处理,自动检测安卓版本,选择不同的 API 进行处理。 + +> 本节的代码调整主要在安卓端(Kotlin),这部分代码直接使用就可以。如果看了不少 Kotlin 语言,也可以编写实现。 + +## 二、流程设计 + +如图,关于安卓端的API策略设计; + +++ +- 首先,安卓网关终端的改动主要在于api策略这部分的处理,按照不同的 api 版本来处理。这部分是使用 AI IDE 工具实现的内容。AI 对于非业务的复杂串联的,开发单一工具的会比较容易。很适合有编程思维,但对某个类型的语言,没有太多开发的伙伴。 +- 另外,如果你有安卓设备测试,还可能还有一些其他截屏的限制,这部分后面还要引入录屏截取一帧的操作。 diff --git "a/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-9\350\212\202\357\274\232\344\274\232\350\257\235\344\270\212\344\270\213\346\226\207\347\273\206\345\214\226\345\244\204\347\220\206.md" "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-9\350\212\202\357\274\232\344\274\232\350\257\235\344\270\212\344\270\213\346\226\207\347\273\206\345\214\226\345\244\204\347\220\206.md" new file mode 100644 index 000000000..835785d82 --- /dev/null +++ "b/docs/md/project/ai-agent-scaffold/part-5/\347\254\2545-9\350\212\202\357\274\232\344\274\232\350\257\235\344\270\212\344\270\213\346\226\207\347\273\206\345\214\226\345\244\204\347\220\206.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第5-9节:会话上下文细化处理 +pay: https://t.zsxq.com/eSEVg +--- + +# 《AI Agent 场景应用 - MobileOpenClaw》第5-9节:会话上下文细化处理 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/kpgKo](https://t.zsxq.com/kpgKo) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +本章要解决2个场景问题;一个是智能体服务端,上下文对话内容超长报错。另外一个是安卓网关端,新版本的安卓API,会限制在隐藏当前app后对其他应用的截屏。 + +## 二、设计方案 + +### 1. 上下文超长 + +首先是 autoglm-phone 模型的上下文token限制 `You requested a total of 26891 tokens: 25867`,因此不能把过多的历史信息都在每次对话的发送给模型。 + +这里一种可以通过 `InMemoryMemoryService` 的方式,自己实现一个记忆上下文,每次只是记录用户请求和最后N条模型处理结果数据。 + +也可以使用另外一种方式是 `MySpringAI` 我们有在前面开发阶段自己实现了一个类,这个类会处理历史信息到模型请求里。因此可以从集合里遍历,拿到必要的信息来处理。 + +### 2. 录屏取一帧 + +鉴于测试验证中发现,不少新版安卓的设备,不限制在我们应用隐藏后,截图打开的应用的。因此这部分我们采用开启视频录制,之后在需要的时候,直接取一帧视频作为截图使用即可。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-0\350\212\202\357\274\232AiAgent \351\241\271\347\233\256\344\273\213\347\273\215\345\222\214\347\263\273\347\273\237\346\274\224\347\244\272.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-0\350\212\202\357\274\232AiAgent \351\241\271\347\233\256\344\273\213\347\273\215\345\222\214\347\263\273\347\273\237\346\274\224\347\244\272.md" new file mode 100644 index 000000000..a2309535b --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-0\350\212\202\357\274\232AiAgent \351\241\271\347\233\256\344\273\213\347\273\215\345\222\214\347\263\273\347\273\237\346\274\224\347\244\272.md" @@ -0,0 +1,124 @@ +--- +title: 【更】第3-0节:Ai Agent 项目介绍和系统演示 +lock: no +--- + +# 《Ai Agent》第3-0节:Ai Agent 项目介绍和系统演示 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/DcL2p](https://t.zsxq.com/DcL2p) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +**25年3月初**,小傅哥,带着大家开启了 DeepSeek RAG、MCP 项目,随后兴起 MCP 服务提供的热潮,包括;支付宝、百度、高德,等等大厂开启了 MCP 服务计划。直至现在,市面上已经有了场景非常丰富的 MCP 服务。**那些第一波跟着小傅哥学习的伙伴,早早的让简历上多了一笔 MCP 服务开发和使用的经验!** + +++ +**接下来,小傅哥将带着小伙伴,再往前多走一步!** + +RAG 教了,MCP 搞了,那么现在是时候,实现一套自动化的 Ai Agent 服务了。 + +如图,以通过数据库表动态配置的手段,完成相关物料的加载,包括;`模型(gpt-4.1/deepseek)`、`客户端`、`对话预设`、`执行规划(Planning)`、`顾问(记忆、RAG、日志)`、`工具(MCP`)等,在把单个 Client 串联,完成整个 Agent 调用链。这样一个 Agent 调用链可以以对话形式使用或通过 Agent 动态任务自动执行。 + ++
++ +这套项目,小傅哥为它干了`1.87万`行代码(前后端),`14张`数据库表,全程动态化构建模块 Bean 对象,预热装配 Agent 服务。达到随用随配,自主组建出想要的各类的 Agent 功能服务。就以现在的丰富的 MCP 市场来可以说是,广阔天地,大有可为!在这套项目架构下,可以扩展出非常多的东西。 + +接下来,小傅哥就给大家,细致的介绍下这套项目,以及截图演示运行效果。 + +> 🧧 文末提供了全套 AI、RAG、MCP、Agent 项目、开发教程以及工程源码。此外还有非常多的互联网大厂项目(17个),都可以一并获取学习。 + +## 一、项目演示 + +这套项目的功能非常强大,全部都以 Agent 方式进行通信。所有的 Agent 都可以动态化配置,解耦的非常强👍🏻。接下来,小傅哥给大家演示下使用效果。 + +### 1. 前端页面 + ++
++ +- 首先,我为智能对话体(MCP)配置了联网、CSDN自动发帖、文件操作服务。 +- 之后,我们可以通过预设的提示词模板,来调用对应的 MCP 服务,也可以多个 MCP 一起调用。如联网检索文章、生成解答,发布到论坛,在把文章名称记录到本地文件。这一系列操作都是可以的。 +- MCP 服务平台; + + - https://mcpfound.cc/ + - https://mcp.so/ + - https://sai.baidu.com/mcp + +> 结合知识库、MCP、提示词规划、上下文记忆,可以有非常多的场景可以玩。后续小傅哥还会继续分享可玩场景。 + +### 2. 后台页面 + +#### 2.1 配置智能体(动态预热) + ++
++ +#### 2.2 动态任务 + ++
++ +- 系统会自动的把任务加载到系统内执行,完成智能体的调用。 +- 有了这个操作,你配置好的智能体,他就可以连续24小时的工作了。除了自动发文章,你可以配置出各种东西。比如特朗普推特、黄金、股票价格,每天早上出一个文件,邮件方式推送给自己。兼职美滋滋。 + +#### 2.3 MCP管理 + ++
++ +- 市面上有非常的多的 MCP 服务,我们可以选择的这些服务来组装出我们的智能体。 +- 系统支持配置 stdio、sse,两种方式。无论是自己开发的 MCP 还是市面的都可以使用。(课程中有教大家,基于 Spring AI 怎么开发 MCP 服务) + +## 二、系统设计 + +### 1. 功能流程 + ++
++ +- 如图,从上往下,以任务或会话方式,调用 agent 为目标,串联各个 client。形成内部处理 a2a 流程。 +- 之后,对于 client 则由系统都动态的方式创建 bean 对象。运营在 ai agent 后台配置相关数据即可。 + +### 2. 库表设计 + ++
++ +如图,为整个系统对应的数据库表信息; + +- ai_agent_task_schedule,智能体任务调度配置表 +- ai_agent,AI智能体配置表 +- ai_agent_client,智能体-客户端关联表 +- ai_client,AI客户端配置表 +- 模型配置组;ai_client_model、ai_client_model_config、ai_client_model_tool_config +- 工具配置组;ai_client_tool_config、ai_client_tool_mcp +- 顾问配置组;ai_client_advisor、ai_client_advisor_config +- 提示词配置;ai_client_system_prompt、ai_client_system_prompt_config +- 知识库配置;ai_rag_order + +### 3. 系统工程 + ++
++ +- 如图,为整个系统的工程结构,分为 api、app、domain、infrastructure、trigger、types,六边形架构。(现在各个互联网都在落地 DDD,因为 DDD 比最早出来的几年,已经有了非常明确的规范)相关资料;[https://bugstack.cn/md/road-map/ddd-guide-01.html](https://bugstack.cn/md/road-map/ddd-guide-01.html) +- Domain 核心领域层,处理 Agent 的预热、对话、知识库、任务的操作。后续 Agent 相关都维护到这个领域包下。 +- Trigger 触发器层,负责对外提供接口,让外部来调用。当有一些纯 crud 操作的流程时,这个架构下,会在 trigger 层直接调用基础设施层提供数据,而不需要在经过 domain 领域层,重复封装对象。 + +**注意** ai-agent-station 全套代码,可以直接获取后学习(持续更新最新方案)。之后课程会单独起一个 ai-agent-station-study 工程,带着大家从0到1学习。 + diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-10\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-10\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md" new file mode 100644 index 000000000..db231e6be --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-10\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md" @@ -0,0 +1,38 @@ +--- +title: 【更】第3-10节:Agent执行链路分析 +pay: https://t.zsxq.com/bxh8h +--- + +# 《Ai Agent》第3-10节:Agent执行链路分析 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/ty1Yy](https://t.zsxq.com/ty1Yy) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +通过现有实现的动态化构建 Ai API、Model、Client、Tool(MCP)、Advisor(记忆、RAG)、Prompt,完成 Ai Agent 服务处理。 + +最早 OpenAi 出来时,我们只是对 Ai 单向询问(含上下文记忆)和提供问题结果。后来开始有了 RAG 知识库,可以让我们每次的提问结合知识库获取更全面的内容。再到后来开始有了 MCP 服务协议,让 AI 具备了调用外部服务的能力。 + +那么,到这再往后开始有了 Ai Agent 的概念,也就是让 Ai 具备环境感知能力、自主决策并执行行动,直至完成最终的结果。 + +这也就是我们目前在使用一些 Ai Agent 的时候,进行一些问题提问的时候,他会根据环境(询问)状态制定行动计划,调用各种工具和API执行具体任务,并在多轮交互中维持上下文状态,输出最终的结果。这也是我们要做的事情。 + +鉴于,整个 Ai Agent 的复杂性,我们不能一上来就直接去编码,这样很多伙伴会比较晕。所以我们先来完成 Agent 单元测试,在结合我们动态实例化的各项服务,处理 Agent 循环制定行动计划和执行多轮会话。 + +## 二、流程设计 + +如图,不同方案实现的 Agent 流程; + +++ +Ai Agent 的处理过程也是分为几类的,用于适应不同的场景使用; + +1. 固定N个步骤,这类的一般是配置工作流的,提高任务执行的准确性。如,一些检索资料、发送帖子、处理通知等。 +2. 顺序循环调用,配置 Agent 要执行的多个 Client 端,以此顺序执行。适合一些简单的任务关系,并已经分配好的动作,类似于1的方式。 +3. 智能动态决策,这类是目前市面提供给大家使用的 Agent 比较常见的实现方式,它会动态的规划执行动作,完成行动步骤,观察执行结果,判断完成状态和步骤。并最终给出结果。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-11\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-11\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md" new file mode 100644 index 000000000..ef358d38c --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-11\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第3-11节:Agent执行链路设计 +pay: https://t.zsxq.com/eSLoH +--- + +# 《Ai Agent》第3-11节:Agent执行链路设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/hNFqE](https://t.zsxq.com/hNFqE) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +将上一节对 Ai Agent 执行链路的分析,以及对应的 AutoAgentTest 测试代码,使用规则树设计可执行链路节点。 + +本节是其中的一个 Ai Agent Auto 自动执行策略,后续还要把其他的 Ai Agent 执行策略也加入进来实现。 + +## 二、流程设计 + +如图,Auto Ai Agent 动态多轮会话执行流程图; + +++ +- 首先,给入口保留一个多策略选择,以适应我们不同场景的多类型 Agent 选择使用,后续会在 agent 配置表增加策略选择属性来区分调用。本节我们先处理一个 AutoAgent 的实现。 +- 之后,进入到关键地方,在上一节 AutoAgentTest 章节,设计了一套自动化 Agent 执行方法,通过 for 循环处理。这里我们通过规则树,分多个多个节点步骤执行,节点间可循环调用,增强整体的灵活性。 +- 最后,以用户提问到所有的步骤执行完成后,进入到结束环节,产生结果。如果你上一节已经高透彻,那么到这里其实会更加容易理解对于节点的拆分。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-12\350\212\202\357\274\232Agent\346\234\215\345\212\241\346\216\245\345\217\243\345\222\214UI\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-12\350\212\202\357\274\232Agent\346\234\215\345\212\241\346\216\245\345\217\243\345\222\214UI\345\257\271\346\216\245.md" new file mode 100644 index 000000000..ceef27a8d --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-12\350\212\202\357\274\232Agent\346\234\215\345\212\241\346\216\245\345\217\243\345\222\214UI\345\257\271\346\216\245.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第3-12节:Agent服务接口和UI对接 +pay: https://t.zsxq.com/T0H6n +--- + +# 《Ai Agent》第3-12节:Agent服务接口和UI对接 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/eaqbx](https://t.zsxq.com/eaqbx) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +以实现 Ai Auto Agent Server-Sent Events (SSE) 流式响应接口为目的,设计 SSE 异步响应结果对象,对 Step 1~4 步骤的过程数据进行异步流式响应返回。开发好接口后,与Ai实现的前端UI界面进行对接。 + +像是 Ai(Cursor、trae.ai) 对于前端这样没有太多复杂的流程代码,可以很好的实现出来。这对于后端工程师想做一些前端UI产品化的东西,就变得容易的很了! + +## 二、对接效果 + +如图,流式响应(SSE)接口对接UI效果; + +++ +- 首先,小傅哥对 **Auto Agent - 自动智能对话体** 进行了数据库表(初始数据)和服务启动时自动装配 Ai Agent 所需的各项配置(客户端、模型、API、MCP等)。以便于可以在接口请求服务时,调用 Auto Agent 智能体。 +- 之后,用于就可以对智能体进行提问,所有的提问信息,会进入到服务端的 Step 1~4 步骤,并进行循环分析、执行、检测,以及最终输出结果。 + +> 接下来,小傅哥带着大家看看 Auto Agent 服务接口和对接是如何处理的。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-13\350\212\202\357\274\214Agent-ELK\346\227\245\345\277\227\345\210\206\346\236\220\345\234\272\346\231\257.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-13\350\212\202\357\274\214Agent-ELK\346\227\245\345\277\227\345\210\206\346\236\220\345\234\272\346\231\257.md" new file mode 100644 index 000000000..bdea85b3c --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-13\350\212\202\357\274\214Agent-ELK\346\227\245\345\277\227\345\210\206\346\236\220\345\234\272\346\231\257.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第3-13节,Agent-ELK日志分析场景 +pay: https://t.zsxq.com/agZ9E +--- + +# 《Ai Agent》第3-13节,Agent-ELK日志分析场景 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/kMjAw](https://t.zsxq.com/kMjAw) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +增加 Agent-ELK 日志分析的实际应用场景,通过 Agent 根据用户诉求,自主分析、规划、执行和输出结果,来帮助我们对日志检索的提效。 + +ELK(或自研) 是各个互联网公司中都有的一套分布式日志设备,以便于研发在遇到线上系统报警和运营反馈事故问题时,快速检索日志。但往往这种检索的日志的方式都是非常耗时的,所以增加 Agent 方式来辅助提效是非常有必要的。 + +注意;面试往往就是需要这样的实际应用场景,而不是坦克大战、贪吃蛇、图书管理系统等一些不着边际的项目(适合练手但不适合写简历)。 + +## 二、功能流程 + +如图,Agent-ELK 的设计使用流程图; + +++ +- 首先,虚线框内为模拟的系统的应用日志,部署一套 ELK 之后通过脚本把日志数据写入到 ELK。你也可以通过这套教程实际部署一套 ELK [https://bugstack.cn/md/road-map/elk.html](https://bugstack.cn/md/road-map/elk.html) 另外像星球项目,拼团、大营销等也都有 ELK 分布式日志的对接使用。 +- 之后,要为这套场景增加一套新的 Ai Agent 描述话术,在执行 ELK 日志分析的时候,我们先手动选择出要使用的 Ai Agent 服务。这样它就可以以 ELK 对应的 Prompt 话术分析方式使用了。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-14\350\212\202\357\274\214Agent-Prometheus\347\233\221\346\216\247\345\210\206\346\236\220\345\234\272\346\231\257.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-14\350\212\202\357\274\214Agent-Prometheus\347\233\221\346\216\247\345\210\206\346\236\220\345\234\272\346\231\257.md" new file mode 100644 index 000000000..790b7709c --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-14\350\212\202\357\274\214Agent-Prometheus\347\233\221\346\216\247\345\210\206\346\236\220\345\234\272\346\231\257.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-14节,Agent-Prometheus监控分析场景 +pay: https://t.zsxq.com/8BfkE +--- + +# 《Ai Agent》第3-14节,Agent-Prometheus监控分析场景 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/ymfSm](https://t.zsxq.com/ymfSm) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +上一节我们做了 Ai Agent ELK,这一节扩展增加 Prometheus(普罗米修斯监控) 监控系统,让 Ai Agent 具备智能监控问题分析场景。这种场景东西是在公司里非常重要的,且有实际使用用途的东西。 + +本节基于的是 Ai MCP Prometheus + Agent Prompt(分阶段提示词),来完成自动化分析、规划、执行、检测、输出的智能监控系统。 + +## 二、功能流程 + +如图,Agent-Prometheus 的设计使用流程图; + +++ +- 首先,虚线框为模拟的系统监控日志脚本(含运行程序),部署的一套普罗米修斯监控系统。你可以通过这套教程来部署一套普罗米修斯监控 [https://bugstack.cn/md/road-map/grafana.html](https://bugstack.cn/md/road-map/grafana.html) 星球的拼团、大营销、openai应用都有这样的监控系统使用。 +- 之后,要为这套场景增加一套新的 Ai Agent 执行话术,另外还要配置一套对应的 RAG 知识库,来增强分析能力。 diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-15\350\212\202\357\274\232FlowAgent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-15\350\212\202\357\274\232FlowAgent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md" new file mode 100644 index 000000000..8c10a272a --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-15\350\212\202\357\274\232FlowAgent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第3-15节:AgentFlow执行链路分析 +pay: https://t.zsxq.com/Ht0o1 +--- + +# 《Ai Agent》第3-15节:AgentFlow执行链路分析 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/u9tjH](https://t.zsxq.com/u9tjH) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +为了打开 Agent 的实现思路,本章我们再增加一种新的 Auto Agent 设计,这种设计方式以通过用户的提问和当前 Agent 配置的 MCP 工具集合,进行执行步骤的规划设计。之后在通过执行步骤按照拆分的步骤顺序号,依次进行执行。有点类似于 [manus](https://manus.im/) 的过程。 + +## 二、流程设计 + +如图,多种 Ai Agent 执行设计流程图; + +++ +Ai Agent 的处理过程也是分为几类的,用于适应不同的场景使用; + +1. 固定N个步骤,这类的一般是配置工作流的,提高任务执行的准确性。如,一些检索资料、发送帖子、处理通知等。 +2. 顺序循环调用,配置 Agent 要执行的多个 Client 端,以此顺序执行。适合一些简单的任务关系,并已经分配好的动作,类似于1的方式。 +3. 智能动态决策,这类是目前市面提供给大家使用的 Agent 比较常见的实现方式,它会动态的规划执行动作,完成行动步骤,观察执行结果,判断完成状态和步骤。并最终给出结果。 +4. 【新增】规划分析决策,根据用户输入的信息诉求,以及配置的 MCP 的能力,进行步骤规划。之后把步骤拆分出 1、2、3 具体要做什么,在依次执行这些步骤。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-16\350\212\202\357\274\232FlowAgent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-16\350\212\202\357\274\232FlowAgent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md" new file mode 100644 index 000000000..e3beecfb2 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-16\350\212\202\357\274\232FlowAgent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第3-16节:FlowAgent执行链路设计 +pay: https://t.zsxq.com/Htptt +--- + +# 《Ai Agent》第3-16节:FlowAgent执行链路设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/J68sk](https://t.zsxq.com/J68sk) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在 3-11 节的时候,我们做过一个这样的事情。针对于测试阶段的 Agent Test 代码,使用设计模式拆分出各个执行步骤,便于理解和维护。这一节我们同样需要把上一节分析的 FlowAgent 测试代码,按照模块化的流程进行拆分。 + +## 二、流程设计 + +如图,Flow Ai Agent 动态步骤分析执行流程图; + +++ +- 首先,新增加一个 Agent 执行策略,流程步骤拆分执行。这个过程其实比上一 AutoAgent 要简单一些。 +- 之后,分贝设计出 Step1 工具分析、Step2 动作规划、Step3 拆分步骤、Step4 执行节点(循环执行),这四个步骤就是 FlowAgentTest.test_agent 里的步骤。 +- 最后,响应结果。后续章节会使用 sse 将结果响应到前端,这里我们暂时增加了判null操作,先不需要发送 sse 数据。 diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-17\350\212\202\357\274\232\345\242\236\345\212\240\350\260\203\345\272\246\345\231\250\347\255\226\347\225\245\346\211\247\350\241\214Agent\351\223\276\350\267\257.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-17\350\212\202\357\274\232\345\242\236\345\212\240\350\260\203\345\272\246\345\231\250\347\255\226\347\225\245\346\211\247\350\241\214Agent\351\223\276\350\267\257.md" new file mode 100644 index 000000000..0b3a12d46 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-17\350\212\202\357\274\232\345\242\236\345\212\240\350\260\203\345\272\246\345\231\250\347\255\226\347\225\245\346\211\247\350\241\214Agent\351\223\276\350\267\257.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第3-17节:增加调度器策略执行Agent链路 +pay: https://t.zsxq.com/ayQWR +--- + +# 《Ai Agent》第3-17节:增加调度器策略执行Agent链路 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/44qnU](https://t.zsxq.com/44qnU) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +从ui页面开始,增加 ai agent 分类选择使用。因为这里有不同类型的 ai agent,所以要对调用的过程增加一个策略调度器,按照不同类型的 ai agent 选择不同的执行策略。 + +## 二、流程设计 + +如图,Ai Agent 策略调度器执行过程; + +++ +- 首先,我们实现的 ai agent 有多种类型,所以在选择场景选择的时候,要根据不同的场景获取到走那种类型的 ai agent 执行策略。 +- 之后,这里我们就把 AutoAgent、FlowAgent 都放到调度器里执行,另外要在数据库表 ai_agent 中增加一个 strategy 执行策略配置,这样用户提问时候传入的 agent id 就可以获取到对应的策略了。 +- 最后,本节还有一点关于页面 UI 的完善,每次对话,会把对话消息存储到历史对话中。这部分前端的东西使用 ai 开发工具处理的。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-18\350\212\202\357\274\232\345\212\250\346\200\201\346\211\247\350\241\214\346\231\272\350\203\275\344\275\223\344\273\273\345\212\241.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-18\350\212\202\357\274\232\345\212\250\346\200\201\346\211\247\350\241\214\346\231\272\350\203\275\344\275\223\344\273\273\345\212\241.md" new file mode 100644 index 000000000..c4ac6c6bc --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-18\350\212\202\357\274\232\345\212\250\346\200\201\346\211\247\350\241\214\346\231\272\350\203\275\344\275\223\344\273\273\345\212\241.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-18节:动态执行智能体任务 +pay: https://t.zsxq.com/8yPe5 +--- + +# 《Ai Agent》第3-18节:动态执行智能体任务 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/j116r](https://t.zsxq.com/j116r) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +本节首先新增一个基于数据库固定配置步骤的简单循环执行智能体策略。随后,结合数据库中配置的智能体定时执行参数,以及工程中引入的扳手工程动态任务组件,实现对智能体动态任务的调度与执行。 + +那么,这里有一个前置学习,《通用技术组件 - 🔧扳手工程》第5节:任务调度组件 [https://t.zsxq.com/bLkoF](https://t.zsxq.com/bLkoF) - 需要先完成下,之后就可以在智能体项目中使用了。 + +## 二、功能流程 + +如图,Ai Agent 动态任务执行过程; + +++ +- 首先,我们在项目中引入了扳手工程的任务调度组件。在调度组件内,配置检索出数据库表内可执行的任务以及对应的参数,之后由定时任务管理。 +- 之后,本节我们又增加了一个新的简单的 Agent 执行策略,依次循环数据库 Agent 配置的客户端。这个场景很适合工作流编排,把固定要执行的客户端,依次写入到数据库配置,就可以按照固定步骤执行了。这也是咱们在早期分析 Agent 执行方式的一种。 diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-19\350\212\202\357\274\232\346\213\226\346\213\211\346\213\275\347\274\226\346\216\222\346\225\260\346\215\256\345\255\230\345\202\250.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-19\350\212\202\357\274\232\346\213\226\346\213\211\346\213\275\347\274\226\346\216\222\346\225\260\346\215\256\345\255\230\345\202\250.md" new file mode 100644 index 000000000..6e06b11c7 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-19\350\212\202\357\274\232\346\213\226\346\213\211\346\213\275\347\274\226\346\216\222\346\225\260\346\215\256\345\255\230\345\202\250.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第3-19节:拖拉拽编排数据存储 +pay: https://t.zsxq.com/kPbFh +--- + +# 《Ai Agent》第3-19节:拖拉拽编排数据存储 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/oxIZg](https://t.zsxq.com/oxIZg) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +通过 [flowgram.ai](https://flowgram.ai/) 框架,实现项目中 Ai Agent 拖拉拽编排能力,增强使用的易用性。 + +这部分拖拉拽主要完成的就是一个 ai agent 所需的,client、prompt、advisor、model(api)的串联使用。通过拖拉拽方式替代 ai_client_config 中需要手动维护的数据关系链。 + +本节我们先来完成拖拉拽的页面搭建和数据存储处理。提示,对于后端开发人员,不非得学习前端代码,只要能用起来就可以。面试中往往主要考察项目完整性,但不会对后端人员必须会写前端。所以,如果你不会前端代码,也不用太担心。 + +## 二、实现效果 + +如图,是通过拖拉拽实现的 Ai Agent 编排效果; + +++ +- 创建过程中,Agent 是用户本次新创建的智能体,这个智能体所需用到的Client、以及 Client 所需的 Advisor、Prompt、Model、MCP 则可以通过拖拉拽的方式进行串联编排。 +- 对于这些节点所拉取的数据,则是从服务端接口进行获取的。如,Client 客户端获取可用数据,Model 获取模型,之后链接的 MCP 工具可以自由组合。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-1\350\212\202\357\274\232Ai Agent \344\270\232\345\212\241\346\265\201\347\250\213\343\200\201\347\263\273\347\273\237\346\236\266\346\236\204\343\200\201\345\272\223\350\241\250\350\256\276\350\256\241\350\257\264\346\230\216.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-1\350\212\202\357\274\232Ai Agent \344\270\232\345\212\241\346\265\201\347\250\213\343\200\201\347\263\273\347\273\237\346\236\266\346\236\204\343\200\201\345\272\223\350\241\250\350\256\276\350\256\241\350\257\264\346\230\216.md" new file mode 100644 index 000000000..1b041207e --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-1\350\212\202\357\274\232Ai Agent \344\270\232\345\212\241\346\265\201\347\250\213\343\200\201\347\263\273\347\273\237\346\236\266\346\236\204\343\200\201\345\272\223\350\241\250\350\256\276\350\256\241\350\257\264\346\230\216.md" @@ -0,0 +1,32 @@ +--- +title: 【更】第3-1节,Ai Agent 业务流程、系统架构、库表设计说明 +pay: https://t.zsxq.com/qUYx0 +--- + +# 《Ai Agent》第3-1节,Ai Agent 业务流程、系统架构、库表设计说明 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/DcL2p](https://t.zsxq.com/DcL2p) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +了解 Ai Agent 构建元素,以 Spring AI 硬编码创建 Agent 过程,分析各个模块用途,并以此设计拆分元素和对应的库表设计。 + +经过本节我们可以了解到,怎么把这些硬编码的过程,以配置数据库表的方式,动态化构建。有了动态化的构建,也就可以按需配置出各种 Agent 服务来满足我们的业务诉求。尤其是现在 MCP 如火如荼的发展,有一套自动化的 Agent 是非常重要的。 + +> 第3-0节,介绍和演示中,涉及了本节的部分内容。本节主要站在开发视角,来讲解如何架构和开发系统。 + +## 二、Agent 介绍 + +AI 智能体是使用 AI 来实现目标并代表用户完成任务的软件系统。其表现出了推理、规划和记忆能力,并且具有一定的自主性,能够自主学习、适应和做出决定。 + +这些功能在很大程度上得益于生成式 AI 和 AI 基础模型的多模态功能。AI 智能体可以同时处理文本、语音、视频、音频、代码等多模态信息;可以进行对话、推理、学习和决策。它们可以随着时间的推移不断学习,并简化事务和业务流程。智能体可以与其他智能体协作,来协调和执行更复杂的工作流。 + +++ +>Spring AI 框架,支持大语言模型构建 AI Agent 实现。AI Agent是整合多种技术手段的智能实体 ,其实现依赖于 Tools、MCP、Memory、RAG(Retrieval 增强检索生成) 等技术组件,但不是非得依赖全部组件才叫 AI Agent。 diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-20\350\212\202\357\274\232Agent\347\256\241\347\220\206\345\220\216\345\217\260\345\256\236\347\216\260.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-20\350\212\202\357\274\232Agent\347\256\241\347\220\206\345\220\216\345\217\260\345\256\236\347\216\260.md" new file mode 100644 index 000000000..b88505970 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-20\350\212\202\357\274\232Agent\347\256\241\347\220\206\345\220\216\345\217\260\345\256\236\347\216\260.md" @@ -0,0 +1,78 @@ +--- +title: 【更】第3-20节:Agent管理后台实现 +pay: https://t.zsxq.com/5Sdfr +--- + +# 《Ai Agent》第3-20节:Agent管理后台实现 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/z0jRV](https://t.zsxq.com/z0jRV) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +设计实现一套 Ai Agent 管理后台页面,允许用户通过管理后台实现 Ai Agent 的资源配置和拖拉拽方式维护 Ai Agent 智能体。 +第 +本章节没有复杂的逻辑实现,都是 CRUD 操作,把原本在数据库中手动处理的过程,以更符合运营使用方式提供用户使用。所以,本节你只需要了解、看懂,可以跟着继续迭代你想要的内容即可。 + +## 二、实现效果 + +这是一套完整的 Ai Agent 智能体管理后台,包括了所有资源的配置(model、client、mcp、advisor、prompt),以及拖拉拽编排的方式完成 Ai Agent 智能体的构建。 + +以下的截图内容和使用,会在本节课程的视频里演示。也包括如何运行使用。 + +### 1. 登录界面 + +++ +- 这一部分在数据库表增加了 admin_user 表,有配置登录账号和密码,可以简单做校验。 + +### 2. 管理界面 + ++
++ +- 管理后台目前提供了,代理管理(拖拉拽编排方式配置智能体),资源管理(model、client、mcp、advisor、prompt) +- 数据分析、系统设置,是样例,你可以继续扩展你所需要的内容。 + +### 3. 代理管理 + +#### 3.1 代理列表 + ++
++ +- 这里的代理列表,就是通过拖拉拽配置的智能体。可以点击【查看】看到明细,也可以【新建】,还可以删除。 +- 点击【加载】则是调用服务端,把数据加载到 Spring 容器,之后就可以使用了。 + +#### 3.2 代理配置 + ++
++ +- 当你点击一个代理配置,则会展示出拖拉拽的数据到页面上。这部分会从数据库读取,之后展示出来,全部可视化。 +- 如果你点击了Save则会做出一份新的,之后对于旧的,你可以自己手动删除。 + +### 4. 资源管理 + ++
++ +- 资源管理下,是配置一个智能体所需的各项资源信息,你可以在这里进行维护。如,MCP 工具管理。 + +### 5. 页面使用 + ++
++ +- 配置后的智能体,可以在智能体选择里进行获取使用。之后进行提问。 +- 效果还不错,这里小傅哥验证了配置的智能体进行提问。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-21\350\212\202\357\274\232\345\234\250\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\344\270\212\347\272\277.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-21\350\212\202\357\274\232\345\234\250\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\344\270\212\347\272\277.md" new file mode 100644 index 000000000..13f92fbfb --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-21\350\212\202\357\274\232\345\234\250\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\344\270\212\347\272\277.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-21节:在云服务器部署上线 +pay: https://t.zsxq.com/HO8sx +--- + +# 《Ai Agent》第3-21节:在云服务器部署上线 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/wfgDS](https://t.zsxq.com/wfgDS) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在云服务器(2c4g)部署 Ai Agent 前端页面(html)、管理页面(react)、后端服务(java)、基础环境(MySql、PG向量库)。 + +## 二、部署过程 + +如图,为本次的部署过程 + +++ +- 推荐2c4g云服务器购买,[http://618.gaga.plus/](http://618.gaga.plus/) 选个便宜的购买就可以。 +- 本次会进行本地构建镜像,之后 push 到阿里云私有个人镜像库(免费的可以申请)。这个可以代替 Docker Hub 作为代理使用。教程;[https://t.zsxq.com/XdoWr](https://t.zsxq.com/XdoWr) +- 云服务器部署教程:[https://t.zsxq.com/19osWS4qj](https://t.zsxq.com/19osWS4qj) - 需要云服务器安装 Docker、Portainer,以及配置镜像地址 [https://t.zsxq.com/2DGGY](https://t.zsxq.com/2DGGY) +- 记得在云服务器安全组开放端口 9000(Portainer)、8099(服务端)、3002(管理端)、8899(mysql管理端) 等你需要对外的端口。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-2\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\351\241\271\347\233\256\345\267\245\347\250\213.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-2\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\351\241\271\347\233\256\345\267\245\347\250\213.md" new file mode 100644 index 000000000..3c637aeb3 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-2\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\351\241\271\347\233\256\345\267\245\347\250\213.md" @@ -0,0 +1,60 @@ +--- +title: 【更】第3-2节:初始化项目工程 +pay: https://t.zsxq.com/3B4vv +--- + +# 《Ai Agent》第3-2节:初始化项目工程 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/K9NWT](https://t.zsxq.com/K9NWT) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +很多小伙伴可能都接触过一些入门级项目,简单地使用 IntelliJ IDEA 创建和开发。但在互联网公司中,如何规范地创建和管理一个新项目,往往缺乏清晰的认知。毕竟公司里有大量新项目需要启动,不可能让每个团队、每个人都随意创建风格各异的工程,这样会大幅增加后续维护和协作的难度。因此,建立统一的工具链和标准化流程显得尤为重要。 + +所以,跟着小傅哥学习,不仅仅是完成一个项目的开发,更是以互联网大型企业的标准化流程和规范,来设计、开发和实现功能,帮助大家掌握更专业、更高效的开发方法。 + +## 一、本章诉求 + +教会小伙伴使用统一的标准脚手架初始化创建项目工程,并了解工程模块的分层用途。 + +课程会循序渐进的从0到1,逐步带着大家完成项目的开发。开局只有一把 IntelliJ IDEA,完成项目后你可以学习到;业务、架构、设计、方案、配置、部署(Linux、Docker)等各项知识。 + +## 二、如何开始 + +### 1. 前置学习 + +小伙伴在学习的时候,可以依照课程的方式进行创建项目、变更配置、启动测试。这里有一些前置学习,包括:Git、Maven、Docker、脚手架,课程已经准备好了,可以刷下;**磨刀不误砍柴工,基础刷完更轻松!** + +- Git:[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html) +- Maven:[https://bugstack.cn/md/road-map/maven.html](https://bugstack.cn/md/road-map/maven.html) +- Docker [https://bugstack.cn/md/road-map/docker-what.html](https://bugstack.cn/md/road-map/docker-what.html) +- 脚手架:[https://bugstack.cn/md/road-map/ddd-archetype-maven.html](https://bugstack.cn/md/road-map/ddd-archetype-maven.html) + +> 另外课程会使用 Java JDK 17、Maven 3.8.x,软件已经提供好,可以直接下载;[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) - `附件内含有配置好阿里云镜像的 Maven` + +### 2. 开始学习 + +1. 你需要通过 git clone 命令,或者 IntelliJ IDEA 自动的检出工程方式,把项目工程检出到本地。关于如何使用Git检出项目,在前置学习里提供了教程。 +2. 检出代码后,你可以通过 IntelliJ IDEA 打开项目,并按照每一节最开始说明的本节对应的代码分支,把工程代码切换到对应的这一节。 +3. 接下来你可以通过课程的视频和小册以及提供的代码进行学习,并跟随课程每节要完成的内容,一步步操作。过程中可以参考课程的代码进行学习。如果自己的代码运行出问题的时候,可以运行课程的代码验证是环境问题还是个人代码问题。**另外注意运行课程代码,要修改对应的环境为你的本地环境,mysql、redis等** +4. 对于课程中每节涉及的库表,会放到工程 docs/dev-ops mysql 下。你可以每节学习创建一个新的库名称,之后导入。但要记得在工程 app/application-dev.yml 文件中修改对应的库名称。 + +### 3. 环境安装 + +课程提供了使用 Docker 部署 MySQL、Redis 环境的脚本。因为使用 Docker 可以随时方便卸载,不会污染本地电脑的本机环境。而且后续部署 Linux 云服务器也会非常顺手。 + +关于环境的安装; + +++ +1. Windows + wsl2,本地使用 powershell 切换到工程文件夹,执行 `docker-comopse -f docker-compose-environment-aliyun.yml up -d` +2. Mac 电脑的适配性会更好,直接点击这里的绿色箭头即可安装。 +3. 如果本机配置有问题,也可以选择使用云服务器。课程中有云服务器的操作教程,部署起来更方便。云服务器教程:[https://bugstack.cn/md/road-map/linux.html](https://bugstack.cn/md/road-map/linux.html) + +> 环境安装后就可以使用 MySql、Redis 链接工具使用了,也可以手动更新库表。 diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-3\350\212\202\357\274\232AiAgent\346\265\213\350\257\225\346\241\210\344\276\213.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-3\350\212\202\357\274\232AiAgent\346\265\213\350\257\225\346\241\210\344\276\213.md" new file mode 100644 index 000000000..ee56458cf --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-3\350\212\202\357\274\232AiAgent\346\265\213\350\257\225\346\241\210\344\276\213.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第3-3节:Ai Agent 测试案例 +pay: https://t.zsxq.com/JFnzV +--- + +# 《Ai Agent》第3-3节:Ai Agent 测试案例 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/jI0BD](https://t.zsxq.com/jI0BD) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在项目中引入 Spring Ai 1.0.0 框架,通过编写测试案例的方式,了解 Ai Agent 的工作模式。 + +**那为什么要这么做呢?** + +通常对于软件设计的解决方案,我们都有一个这样共识,那就是目标结果驱动,最先搭建可运行的最小执行单元。因为软件设计原则,[康威定律](https://zh.wikipedia.org/wiki/%E5%BA%B7%E5%A8%81%E5%AE%9A%E5%BE%8B),也提到,`大的系统组织总是比小系统更倾向于分解`。当场景问题被拆解的越小以后,也就越容易被理解和处理。所以,我们要优先通过案例的方式,验证 Ai Agent 的工作模型和可执行方案。再通过这些案例,设计详细的流程和库表细节。 + +## 二、功能流程 + +如图,为整个 Ai Agent 的工作模型; + +++ +- 概念:**Ai Agent 是整合多种技术手段的智能实体** ,其实现依赖于 Tools、MCP、Memory、RAG(Retrieval-Augmented Generation,检索增强生成) 等技术组件构建的智能体。并且每一个 Agent Client 又可以被连接通信,增强其 Agent 智能体能力。 +- 方案:这里我们基于 Spring AI 框架,通过编码的方式把模型、关键词、顾问角色、工具,放入到 LLM 客户端,构建 LLM 对话智能体。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-4\350\212\202\357\274\232\346\240\271\346\215\256AiAgent\346\241\210\344\276\213\357\274\214\350\256\276\350\256\241\345\272\223\350\241\250.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-4\350\212\202\357\274\232\346\240\271\346\215\256AiAgent\346\241\210\344\276\213\357\274\214\350\256\276\350\256\241\345\272\223\350\241\250.md" new file mode 100644 index 000000000..be57bd6c3 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-4\350\212\202\357\274\232\346\240\271\346\215\256AiAgent\346\241\210\344\276\213\357\274\214\350\256\276\350\256\241\345\272\223\350\241\250.md" @@ -0,0 +1,39 @@ +--- +title: 【更】第3-4节:根据AiAgent案例,设计库表 +pay: https://t.zsxq.com/0tZhc +--- + +# 《Ai Agent》第3-4节:根据AiAgent案例,设计库表 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/Tx438](https://t.zsxq.com/Tx438) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +根据 Ai Agent 的代码案例,设计用于解耦,硬编码流程的库表。在后续的代码开发中,根据库表配置的 Ai Agent 流程所需的,模型、提示词、顾问、工具等,动态实例化出 Ai Agent 服务。 + +## 二、拆分设计 + +如图,为对应的Ai Agent 案例代码,映射出要拆分的库表设计; + +++ +首先,整个代码构建的整个 Ai Agent 最小化单元服务,我们可以根据这样的服务信息设计出库表结构。 + +- 第一步,从上到下,OpenAiApi 是最基础单元结构,可以被多个 OpenAiChatModel 使用,它可以被拆分出第一张表。 +- 第二步,构建 OpenAiChatModel,这个阶段,需要 openAiApi、model对话模型、tool mcp 工具。其中`model对话模型`时一种固定固定资源,可以直接放到 ai_client_model 模型中,而 openAiApi、mcp 工具,都属于复杂配置,则需要额外的外部关联来衔接。也就是后面的 ai_client_config 配置,用于配置衔接关系。 +- 第三步,ChatClient 对话客户端,这部分的实例化过程都是和外部其他的资源关联,本身表设计只要有一个客户端的唯一id和客户端的描述介绍即可。 +- 第四步,给 mcp 增加一个表,mcp 服务是非常重要的,有 mcp 才有 agent 服务。mcp 的启动有 stido、sse 两种方式,每种方式都有对应的配置文件 json 数据。 +- 第五步,defaultSystem 系统提示词,需要单独拆分出来。提示词等于智能体的大脑,也有人说,其实 Ai Agent 就是 prompt 的堆叠,所以写提示词是很重要的。 +- 第六步,advisor 顾问角色,在 Spring Ai 框架中,以顾问的方式,访问记忆上下文,知识库资源,所以这部分也要单独设计库表。 +- 第七步,设计一个 ai_client_config,用于配置;api、model、client、prompt、mcp、advisor的衔接关系。 +- 第八步,设计 ai_agent、ai_agent_flow_config,也就是一个 ai agent,是可以连续调用多个 ai client 客户端的。 +- 第九步,设计 ai_agent_stask_schedule 任务,这是一种触达手段,可以把配置好的任务,让 task 定时执行,如自动发帖、系统异常巡检、舆情风险检测、系统配置变更、运营活动报表等。 +- 第十步,ai_client_rag_order,是知识库表,用于上传知识库做一个记录,这样顾问角色就可以访问知识库内容了。 + +注意;chat_client 客户端的初始化过程中,也可以增加 mcp 服务,这部分在 chat_model 模型构建中,也可以增加 mcp,选择在 chat_model 增加即可。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-5\350\212\202\357\274\232\345\244\232\346\225\260\346\215\256\346\272\220\345\222\214Mapper\351\205\215\347\275\256.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-5\350\212\202\357\274\232\345\244\232\346\225\260\346\215\256\346\272\220\345\222\214Mapper\351\205\215\347\275\256.md" new file mode 100644 index 000000000..b3427644d --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-5\350\212\202\357\274\232\345\244\232\346\225\260\346\215\256\346\272\220\345\222\214Mapper\351\205\215\347\275\256.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第3-5节:多数据源和Mapper配置 +pay: https://t.zsxq.com/099am +--- + +# 《Ai Agent》第3-5节:多数据源和Mapper配置 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/eYn4R](https://t.zsxq.com/eYn4R) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +为应用程序配置pgvector(向量库)、mysql(业务库)两套数据源,同时基于库表,编写基础设施层 Mapper 操作。 + +对于数据库表的 Mapper 编写,是一种固定的结构化代码,可以通过 MyBatis 工具生成,也可以使用 AI 编码工具处理。不过对于新人学习来说,更建议在这个阶段,通过手动的方式进行配置编写,这样可以更熟悉库表的设计和字段的理解。尤其是报错后,还可以基于报错排查错误增加编程经验。 + +## 二、功能流程 + +如图,两个数据源的配置和使用; + +++ +- 首先,为了让应用程序具备多数据源链接,则需要增加一个扩展的 DataSourceConfig 配置类,来自己实现数据源的加载。这部分会替代原本配置到 yml 文件中,由 Spring 加载数据源的过程。 +- 之后,根据不同类型的数据源,注入到 AI 向量库使用场景和 MyBatis 业务使用场景中。这个过程类似于星球中 DB-Router 路由组件的课程。可以参考:[https://bugstack.cn/md/road-map/db-router.html](https://bugstack.cn/md/road-map/db-router.html) + diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-6\350\212\202\357\274\232\346\225\260\346\215\256\345\212\240\350\275\275\346\250\241\345\236\213\350\256\276\350\256\241.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-6\350\212\202\357\274\232\346\225\260\346\215\256\345\212\240\350\275\275\346\250\241\345\236\213\350\256\276\350\256\241.md" new file mode 100644 index 000000000..da40342cb --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-6\350\212\202\357\274\232\346\225\260\346\215\256\345\212\240\350\275\275\346\250\241\345\236\213\350\256\276\350\256\241.md" @@ -0,0 +1,33 @@ +--- +title: 【更】第3-6节:数据加载模型设计 +pay: https://t.zsxq.com/zrK3n +--- + +# 《Ai Agent》第3-6节:数据加载模型设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/USaZS](https://t.zsxq.com/USaZS) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在关于 Ai Agent 的功能实现中,有一个非常重要处理步骤,就是要想办法动态的实例化来自于用户配置的;API、对话模型、MCP、顾问角色以及提示词等。这也就是我们前面为什么要基于 ai agent case 案例,把代码抽象出库表配置。 + +好,那么到这一节,还要思考,怎么让程序来加载和实例化 Ai Agent 所需的各项组件。如,客户端的实例化、对话模型的实例化等。 + +注意;本节会引入星球组件项目《扳手工程》,通用设计模式框架。可以前置学习:[第2节:责任链和规则树通用模型框架](https://t.zsxq.com/o7IBm) + +## 二、功能流程 + +如图,Ai Agent 实现过程,数据加载策略设计; + +++ +- 首先,整个 Ai Agent 的实例化过程,就是各项组件的创建和组装的过程。那么,为了让整体的实现代码更易于维护,我们可以把这样的创建过程,通过规则树的方式进行串联实现。而这部分需要的规则树,是不需要重复建设的,因为星球里的[《扳手工程组件项目》](https://t.zsxq.com/o7IBm),已经把这类的共性内容,凝练成了通用的组件,各个业务系统引用使用即可。所以,这部分建议刷下[《扳手工程组件项目》](https://t.zsxq.com/o7IBm),来看[第2节:责任链和规则树通用模型框架](https://t.zsxq.com/veRkQ) +- 之后,本节我们先把目标缩小到关于数据加载部分,因为后续所有的 Ai Agent 组件实例化的过程,都是需要基础数据的提供。所以组装数据就显得尤为重要了。 + + diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-7\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\256\242\346\210\267\347\253\257API.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-7\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\256\242\346\210\267\347\253\257API.md" new file mode 100644 index 000000000..7ca83a2bd --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-7\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\256\242\346\210\267\347\253\257API.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-7节:动态实例化客户端API +pay: https://t.zsxq.com/RdjkP +--- + +# 《Ai Agent》第3-7节:动态实例化客户端API + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/4r5r4](https://t.zsxq.com/4r5r4) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +完善数据加载操作,动态实例化`客户端API`(ai_client_api)并注册到 Spring 容器。 + +这是整个 armory 动态装配 Ai Agent 节点的第一步,涉及到了数据的获取,对象的创建和 Spring 容器的 Bean 对象注册。能看懂本节的操作,基本后续一直到整个 Ai Agent 构建也就都可以看懂了。 + +## 二、功能流程 + +如图,客户端API实例化过程设计; + +++ +- 首先,整个 AI Agent 的实例化过程,就是各项组件的创建和组装的过程。为了让整体的实现代码更易于维护,我们把这样的创建过程,通过 规则树的方式 进行串联实现。这种设计模式的优势在于:模块化设计、易于扩展、代码复用度高。 +- 之后,从开始节点看,依次执行,数据构建节点、API构建节点。在 API 构建的过程中,会检查上下文中是否存在已经从数据库获取的数据,之后依次循环构建并注册到 Spring 容器。 diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-8\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\346\250\241\345\236\213.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-8\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\346\250\241\345\236\213.md" new file mode 100644 index 000000000..161eba5e9 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-8\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\346\250\241\345\236\213.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第3-8节:动态实例化对话模型 +pay: https://t.zsxq.com/zv79l +--- + +# 《Ai Agent》第3-8节:动态实例化对话模型 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/4r5r4](https://t.zsxq.com/4r5r4) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +整个 ChatModel 对话模型,所需的元素包括;ai api、tool mcp 两块内容。那么本节我们就分别通过不同的 Node 节点实现这些元素的实例化和 ChatModel 构建。 + +## 二、功能流程 + +如图,ai api、tool mcp、model,实例化过程; + +++ +- 首先,如图 RootNode 负责数据加载,将构建节点元素的数据依次加载到内存中(写入到上下文里) +- 之后,除了上一节完成的 API 节点处理后,开始创建 MCP 服务的创建,之后是 ChatModel 对话模块的创建。因为 ChatModel 创建的时候会需要用到的 api、mcp 两个元素。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-9\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\345\256\242\346\210\267\347\253\257.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-9\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\345\256\242\346\210\267\347\253\257.md" new file mode 100644 index 000000000..92f9ac939 --- /dev/null +++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-9\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\345\256\242\346\210\267\347\253\257.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第3-9节:实例化对话客户端 +pay: https://t.zsxq.com/VcM68 +--- + +# 《Ai Agent》第3-9节:实例化对话客户端 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/bePzF](https://t.zsxq.com/bePzF) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +经过前面一系列的准备工作,包括;api、mcp、model,本节我们要进行 advisor 顾问角色的实例化,之后进行 ChatClient 对话客户端的实例化。 + +## 二、功能流程 + +如图,整体 ChatClient 客户端实例化过程; + +++ +- 首先,以构建 AiClientNode 的对话客户端为目的,已经完成了相关的元素实例化步骤。本节这里要处理的是,顾问角色的构建,以及构建 AiClientNode 节点。 +- 之后,AiClientNode 的构建,是关联了其他各项元素的,所以在构建时,需要在 AiClientNode 节点,从 Spring 容器通过 getBean 的方式,检索到对应的各项元素。 +- 注意,ai_client_system_prompt 系统提示词,需要修改为 Map 结构数据。这样更方便我们从数据里获取,哪些是属于当前 AiClientNode 构建时所需的元素。 \ No newline at end of file diff --git a/docs/md/project/ai-knowledge/ai-knowledge.md b/docs/md/project/ai-knowledge/ai-knowledge.md new file mode 100644 index 000000000..c98deb917 --- /dev/null +++ b/docs/md/project/ai-knowledge/ai-knowledge.md @@ -0,0 +1,324 @@ +--- +title: AI Agent 拖拉拽 + 动态配置 +lock: no +--- + +# 《AI Agent 拖拉拽 + 动态配置(RAG、MCP、Prompt)》 - 解析文档&Git仓库代码&AI工作流 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
课程:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + + + +大家好,我是技术UP主小傅哥。 + +刚上周,老板说:`”把咱们招聘里也加一条,具备AI应用开发能力的优先!“`。是呀,现在越来越多的企业都在用AI开发能力提效了,如;聊天软件增加一键唯独信息归档提取、工作文档资料携AI对话分析、工程SQL语句脚本辅运营自动完成数据处理、代码编写用AI完成自动评审等等。这些都是在AI的基础上在构建应用,以后也会越来越多!所以,具备AI应用开发能力,也是每个工程师最应该具备的基础能力了。 + +并且用不了多久,各大互联网企业都将大量的推进落地,自有 [MCP](https://github.com/modelcontextprotocol) 服务的实现,用于增强企业 AI 应用的提效能力。因为 [MCP](https://github.com/modelcontextprotocol) 的加入,可以让你;一条命令`帮研发`,调用应用系统日志、排查系统CPU负载、自主选择是否调度数据库信息。也可以一条命令`帮运营`,搞定复杂的SQL执行、导出报表、分析数据、完成促活营销券的自动化配置上架。这就是 [MCP](https://github.com/modelcontextprotocol) 的魅力!👍🏻 + +++ +**那么牛,MCP 是什么?** + +专业的术语 `MCP = Model Context Protocol` 模型上下文协议,可实现应用与外部数据源和工具之间的无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面还是创建自定义 AI 工作流,MCP 都提供了一种标准化的方式来连接他们所需的上下文。 + +`来吧,上图!让你看看它是啥!` + ++
++ +- 首先,站在用户的使用视角,研发或者运营,可以通过话术描述,完成系列的 AI 工作流,并拿到最终的结果。这就是 MCP 最终为你提供的服务。 +- 那么,你可以想象,在日常的工作中,运营、研发、产品、测试等,都有非常多的重复非创作性的工作,占用了大量的时间成本。尤其是研发,写写代码,就有运营过来,帮我查个问题吧,小嘚嘚。但如果有这样的借助于 MCP 实现的 AI 工作流,就可以完成80%以上的工作量。 +- 之后,站在技术的实现视角,MCP 是一个标准结构框架,你可以按照它(Spring AI)提供的 SDK 开发方式,完成本地化 API 的接入开发。让 AI 有明确的方式调用各类 API 服务接口。如果没有 MCP 这会是一件很麻烦的事情。 + +**跟着小傅哥学习,从不走偏!😄** + +- 2022年底,ChatGPT 开始火爆。 +- 2023年2月,小傅哥,开启了第一个基于AI的项目,ChatGPT AI 问答助手项目。让所有伙伴,都能学习到 AI 如何开发应用。 +- 2023年4月,启动OpenAI(ChatGPT/ChatGLM)微服务应用体系构建大型项目,让大家可以用微信登录、微信支付/蓝兔支付,构建自己的可对外付费提供服务的 OpenAI。这一年上车学习的伙伴,很多做了自己的 AI 产品,除了提高编程技能,又小赚了一辆宝马。 +- 2024年7月,结合企业诉求,开启 OpenAI + Github Acitons,实现代码自动化评审。这一年,不少伙伴在自己的公司中都有落地,个人也得到了述职晋升。 +- 2025年3月,咱们再起启航,基于 Ollama 部署 DeepSeek,开发 RAG 知识库,解析文档和Git仓库代码。这个东西,将是企业中构建自己知识库的又一项非常重要的事情。有了知识库,AI 代码的自动评审,会更加精准,也可以辅助分析需求等。 + +那么,接下来小傅哥就细致的介绍下,本次开启的新项目,可以让大家学习到哪些知识,掌握哪些技术。 + +> Spring AI MCP 与 24年末发布,学习此 AI 应用开发项目,你将是第一批具备 Java AI 应用实战开发能力的人。竞争力,嘎嘎滴! + +## 一、能学到啥 + +这是一套综合`前后端 + Dev-Ops`,基于 Spring Ai 框架实现,Ai Agent 智能体。耗时7个多月,38节课程(`视频`+`文档`),从 RAG 到 MCP,再实现出互联网企业级,可编排的 Ai Agent 智能体,现已全部开发完成 + 部署上线。💐 + +该项目是结合当下最火的 Ollama、DeepSeek、SpringAI 等技术构建的 RAG 知识库实现。从前端到后端到 dev-ops 的全栈式功能手把手实现。 + +- 前端,基于 AI 工具,设计前端对话页面,完成 HTML、JS、TailwindCSS 的编码工作。 +- 前端,配置跨域服务接口,前后端分离实现 UI + 服务端接口对接。 +- 后端,构建双层架构,直接面向需求编码。让学习伙伴更轻松完成 RAG 知识库核心知识的学习。 +- 后端,基于 Spring AI 完成 DeepSeek、OpenAI 双模型的策略对接,处理文本向量的解析和存储。 +- 后端,使用 postgresql 存储切割文本向量数据,完成知识库的解析和存储。 +- 后端,处理多样文本`(.md、.sql、.txt、.word...)`的解析储存以及Git克隆代码库遍历切割存储。 +- 后端,使用 Redis 存储知识库标签,用于检索展示使用。 +- 后端,基于 Flux 编写流式会话接口,以及增加知识库检索功能。 +- 运维,基于 Docker 部署 Ollama 环境,完成 DeepSeek 大模型配置。 +- 运维,使用 Linux、Docker、Nginx 完成项目的打包、构建、上线! + +虽然,知识库都有很多现成的工具。但研发的能力不是在于功能应用,而是具备这样的开发技能储备,在有需要的时候,可以举手🙋🏻♀️”我会,我来做!“ + +> 此项目,全程视频手把手操作 + 全部的小册文档,你可以轻松上手学会这样一个项目! + +## 二、项目介绍 + +这是一套基于 Ollama DeepSeek 大模型构建的增强 RAG 知识库检索项目,在这套项目上,实现了除普通文档知识解析外,增加了 Git 代码库的拉取和解析,并提供操作接口。为工程师做项目开发时,`需求分析`、`研发设计`、`辅助编码`、`代码评审`、`风险评估`、`上线检测`等,做工程交付提效。 + ++
++ +### 第1期,RAG 我们做了什么 + +在 《DeepSeek RAG 增强知识库》第1阶段,基于 Spring AI 0.8.1 开发了一套可以上传文件和Git仓库进行解析、切割、存储,到使用向量库完成 AI 的知识库问答系统。并最终通过 Docker 部署上线。 + +#### 1. 对话页面 + ++
++ +- 这是全程视频手把手,带着大家通过AI工具,完成的UI设计实现课程会演示这个操作),实现的一款非常简单漂亮的UI效果。 +- 我们可以结合知识库,进行更加有效的提问。像是公司中,会把知识库提供出一个标准接口,给其他各个AI应用平台提供能力。 + +#### 2. 上传知识 + ++
++ +- 上传知识,可以解析不同类型的知识库。 +- 除了课程提供的文档库、代码库,你可以增加其他的知识库,如;网页的解析,与网页内容对话。让我们的UI,增加一个侧边栏,读取当前网页内容,分析对话。这样在公司中的一些工程的日志,错误分析时,可以更快的处理。 + +#### 3. 解析知识 - 后台日志 + ++
++ +- 上传知识后,可以看到日志信息。 +- 一套工程作为知识库是非常具有开发价值的,在我们做提问的时候就不需要,人工的去分析工程,而是直接使用了。 + +### 第2期,MCP 我们要做什么 + +与第2期相比,第1期可以称之为小试牛刀,让小伙伴们以最快、最快的往事,积累,运用 Spring AI 框架,开发自己的 RAG 知识库。~~也是方便有些死鬼,早点写到简历上~~ + +到了第2期,你就开始吃上细糠了,小傅哥会带着你升级 Spring AI 框架为 1.0.0-M6 最新版本,多模型配置和操作 PG 向量库,使用 GPU 搭建响应速度更好的 Ollama DeepSeek 大模型(秒级处理),以及对接官网 DeepSeek 的大模型和统一 one-api 对接方式。 + +但这还只是开始,随着基础框架的升级完成,我们将进入 MCP 服务的开发实现。通过 AI 指令,完成 AI 工作流,调度各项 MCP 处理我们的任务作业。如图,举例操作; + ++
++ +- 基于 MCP 服务的开发和对接,通过 AI 工作流指令,完成数据的采集和存放动作。💡 聪明的小伙伴以及开始联想,基于这样的 AI 开发,可以替代很多的日常工作啦。**没想到吧,也把自己替代了** 但仍然,蠢蠢欲动(我不做,别人也做呀)!~~实现后,晋升又有的讲啦!简历也有东西写啦!~~ +- 有了 MCP 后,相当于把我们需要;在一个网页操作数据库查询数据、打开另外一个网页看天气预报,再手动的创建个文件把以上的信息获取后,复制粘贴到文件里。这一些列操作,都让 AI 通过 MCP 模型上下文协议进行处理。也就是 AI 可以调用后台接口啦! + +### 第3期,Agent 我们要做什么 + +RAG 教了,MCP 搞了,那么现在是时候,实现一套自动化的 Ai Agent 服务了。 + +如图,以通过数据库表动态配置的手段,完成相关物料的加载,包括;`模型(gpt-4.1/deepseek)`、`客户端`、`对话预设`、`执行规划(Planning)`、`顾问(记忆、RAG、日志)`、`工具(MCP`)等,在把单个 Client 串联,完成整个 Agent 调用链。这样一个 Agent 调用链可以以对话形式使用或通过 Agent 动态任务自动执行。 + ++
++ +本项目分为,用户端、管理端和服务端,服务端统一提供接口能力,管理端维护 AI Agent 智能体配置、用户端提供使用服务。 + +#### 1. 登录界面 + ++
++ +- 这一部分在数据库表增加了 admin_user 表,有配置登录账号和密码,可以简单做校验。 + +#### 2. 管理界面 + ++
++ +- 管理后台目前提供了,代理管理(拖拉拽编排方式配置智能体),资源管理(model、client、mcp、advisor、prompt) +- 数据分析、系统设置,是样例,你可以继续扩展你所需要的内容。 + +#### 3. 代理管理 + +##### 3.1 代理列表 + ++
++ +- 这里的代理列表,就是通过拖拉拽配置的智能体。可以点击【查看】看到明细,也可以【新建】,还可以删除。 +- 点击【加载】则是调用服务端,把数据加载到 Spring 容器,之后就可以使用了。 + +##### 3.2 代理配置 + ++
++ +- 当你点击一个代理配置,则会展示出拖拉拽的数据到页面上。这部分会从数据库读取,之后展示出来,全部可视化。 +- 如果你点击了Save则会做出一份新的,之后对于旧的,你可以自己手动删除。 + +#### 4. 资源管理 + ++
++ +- 资源管理下,是配置一个智能体所需的各项资源信息,你可以在这里进行维护。如,MCP 工具管理。 + +#### 5. 页面使用 + +##### 5.1 对话交流 + ++
++ +##### 5.2 场景解析 + ++
++ +##### 5.3 监控分析 + ++
++ +- 配置后的智能体,可以在智能体选择里进行获取使用。之后进行提问。 +- 效果还不错,这里小傅哥验证了配置的智能体进行提问。 + +## 三、关于系统设计 + +本套系统设计,也是花费了非常大的心思。 + +### 1. 执行流程 + ++
++ +在整个 Ai Agent 的实现中,小傅哥带着大家分析设计了4种方案,包括;固定执行的、循环执行的、智能分析决策的还有一个按照步骤规划的。这些流程都有适合于自己业务场景使用。在代码中也都有不同方案的实现,之后通过用户选择后进行动态化的策略调度。 + +### 2. 核心动作 + +#### 2.1 数据装配 + ++
++ +- 首先,以构建 AiClientNode 的对话客户端为目的,已经完成了相关的元素实例化步骤。本节这里要处理的是,顾问角色的构建,以及构建 AiClientNode 节点。 +- 之后,AiClientNode 的构建,是关联了其他各项元素的,所以在构建时,需要在 AiClientNode 节点,从 Spring 容器通过 getBean 的方式,检索到对应的各项元素。 + +#### 2.2 动态调度 + ++
++ +- 这里会根据用户的请求,进行策略路由,找到所需的 Ai Agent 执行策略进行处理。这里小傅哥也有意加入不同的策略,让大家可以看到很多的 Ai Agent 设计思路。 + +#### 2.3 执行策略(01) + ++
++ +- 以程序启动为开始,进行自动化装配。这个过程我们先把一些想预先启动的数据库中的 agent 配置所需的 client 客户端进行服务初始化。之后写入到 Spring 容器,方便在执行 Agent 时进行使用。`前面有伙伴问,为什么把实例化的对象写入到 Spring 容器,这里就是原因` +- 客户端(UI),进行 POST 接口请求,这个过程需要封装一个 SSE 流式响应的接口,让 Step 1~4 各个执行步骤,把过程信息写入到流式接口。这里要注意,需要给接口返回的**对象**添加上对应的类型(什么步骤、什么节点、什么过程),以便于反馈给用户 Agent 在做什么。 + +#### 2.4 执行策略(02) + ++
++ +- 这是其中的一种 Ai Agent 执行策略方式,通过用户的提问进行分析、规划、列出执行步骤,之后依次执行。 +- 所有的这些实现都有相应的代码,带着大家使用规则树框架清晰的实现出来。 + +## 四、课程目录 + +### 1. 课程目录 + +**第1阶段** spring-ai v0.8.1 - RAG 静态知识库(本阶段,需要配置附件的 setting.xml) + +- 第1节:关于 AI RAG 知识库项目介绍 +- 第2节:初始化知识库工程&提交代码 +- 第3节:Ollama DeepSeek 流式应答接口... +- 第4节:Ollama DeepSeek 流式应答页面... +- 第5节:Ollama RAG 知识库上传、解析和验证 +- 第6节:Ollama RAG 知识库接口服务实现 +- 第7节:基于AI工具,设计知识库UI和接口对接 +- 第8节:Git仓库代码库解析到知识库 +- 第9节:扩展OpenAI模型对接,以及完整AI对接 +- 第10节:云服务器部署知识库(Docker、Ngin... + +**第2阶段** spring-ai v1.0.0 - MCP 动态知识库 + +- 第11节:吃上细糠,升级SpringAI框架 +- 第12节:康庄大道,上手 AI MCP 工作... +- 第13节,道山学海,实现MCP自动发帖服务(... +- 第14节,海纳百川,上线MCP自动发帖服务 +- 第15节,川流不息,实现MCP微信公众号消息通知服务 +- 第16节:息息相通,MCP 服务部署上线(sse 模式) + +**第3阶段** spring-ai v1.0.0 - Ai Agent 进行中「如果着急面试,可以直接做3阶段,完成到13节很够面试啦」 + +- 第3-0节:Ai Agent 项目介绍和系统演示【最初版本,含完整代码】 +- 第3-1节,Ai Agent 业务流程、系统架构、库表设计说明 +- 第3-2节:初始化项目工程 +- 第3-3节:Ai Agent 测试案例 +- 第3-4节:根据 Ai Agent 案例,设计库表 +- 第3-5节:多数据源和Mapper配置 +- 第3-6节:数据加载模型设计 +- 第3-7节:动态实例化客户端API +- 第3-8节:动态实例化对话模型 +- 第3-9节:实例化对话客户端 +- 第3-10节:Agent执行链路分析 +- 第3-11节:Agent执行链路设计 +- 第3-12节:Agent服务接口和UI对接(第一版AutoAgent效果) +- 第3-13节,Agent-ELK日志分析场景 +- 第3-14节,Agent-Prometheus监控分析场景 +- 第3-15节:AgentFlow执行链路分析(扩展思路) +- 第3-16节:FlowAgent执行链路设计(扩展思路) +- 第3-17节:增加调度器策略执行Agent链路 +- 第3-18节:动态执行智能体任务 +- 第3-19节:拖拉拽编排数据存储 +- 第3-20节:Agent管理后台实现 +- 第3-21节:在云服务器部署上线 + +### 2. 编程环境 + +- JDK 17 ~ 21 +- Postgresql +- SpringBoot 3.2.3 - Spring AI 0.8.1 ~ 1.0.0+ +- Redis +- Docker +- Ollama + DeepSeek + GPU - +- RAG、MCP、Function Call + +课程包括文档 + 小册,全程视频带着做。课程地址:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +> 综上,你可以看到此套项目的完整的介绍,这些也都是企业里非常实用的技能积累。有希望提高自己的编程能力和面试材料的,可以马上加入学习。 + +--- + +课程包括;视频、小册、1 对 1 答疑解惑、专属VIP项目交流群,并且提供简历编写模板结构的一条龙🐲服务。让你学习后,直接拉开与还在玩具项目其他人的差距,面试脱颖而出提高竞争力!!! + diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-auto.md b/docs/md/project/ai-knowledge/ext/ai-agent-auto.md new file mode 100644 index 000000000..95cbe407e --- /dev/null +++ b/docs/md/project/ai-knowledge/ext/ai-agent-auto.md @@ -0,0 +1,137 @@ +--- +title: Ai Agent VS 字节扣子? +lock: no +--- + +# Ai Agent VS 字节扣子? + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +**媲美Dify,堪比扣子?🤔** 哈哈哈,经过哐哐的一顿卷,小傅哥这套 Ai Agent 项目,已经做出一版智能对话体(对接UI),在单一方面的功能体验上,确实可以和市面的 Ai Agent 产品握握手啦 🤝!效果很是不错,本文提供了视频和截图。 + +++ +**什么是 Ai Agent?** + +做的越多理解的也越透彻,Ai Agent 更像是对人的行为的理解。一个人再有力气,也没法一天完全一年全部的工作,而是需要我们把这些工作,做好规划、定好目标、完成执行、结果检查,循序渐进的执行再到最终交付。 + +那么,Ai Agent 也是一样的,Ai Token 提升的在高(等于人的力气),也没法一次做完所有事情。所以在结合了 `Prompt(提示词)`、`Advisor(记忆、RAG)`、`Tool(MCP)`,也可以把一整个大任务,细分为独立的小块,每一块做好规划、执行、审查和交付。所以 Ai Agent 再趋向一个人的行为。 + +**跟着小傅哥,吃上一碗细糠!** 可能你也做过一些学习的项目,但往往这些项目都是一些功能逻辑的叠加和 CRUD 的拼装 + 好看一些的脸面(UI)。但是跟着小傅哥学习,给你的就不只是一个项目,还会带着你做架构,搞设计,用优雅的方式进行编码,深度积累编程思维和编码能力。 + +>🧧 文末已提供整套 Ai Agent 实战项目的全套代码 + 各个分支章节的文档(含视频),学习起来非常爽! + +## 一、先上效果 - 堪比扣子! + +😂 做的多了,也做的久了。我发现,Ai Agent 所有模块架构好后,剩下的就是 Prompt 提示词质量的对比。**Prompt = Ai Agent 大脑!** 目前小傅哥演示的这套自研的 Ai Agent 就是反复优化 Prompt 的结果。 + +### 1. 对话场景 - 通用场景 + +#### 1.1 截图效果 + ++
++ +左侧是AI思考执行过程,右侧是最终执行结果。通过我们的提问,AI Agent 进行`分析`、`规划`、`执行`、`监督`,再到最终的结果产生。有了这样的步骤,最终的总结阶段数据就会更加准确。 + +#### 1.2 视频效果(对比扣子) + +视频:[https://www.bilibili.com/video/BV1VYbczDER6](https://www.bilibili.com/video/BV1VYbczDER6) + +### 2. 日志分析 - ELK 辅助提效(公司里非常需要这样的场景) + +#### 2.1 采集分析 + ++
++ +如图,是一个系统日志 ELK + Ai Agent 的运行简图,通过 MCP 服务的对接,让 Ai Agent 具备检索日志的能力,再结合分析话术,以此来完成日志的自动化分析。 + +#### 2.2 数据案例 + ++
++ +在互联网公司中,都会有一套类似 ELK 的分布式日志系统,之后各个应用会上报数据。研发在接收到系统报警和运营反馈线上问题的时候,研发就需要进入到 ELK 查看系统日志的情况,以此分析线上问题。 + +#### 2.3 智能分析 + ++
++ +通过 Ai Agent 分析 ELK 应用系统分布式日志,自动排除出限流用户的相关信息,来辅助研发日常工作提效。 + +## 二、系统设计 - 这是一个正经项目! + +Ai Agent 会的模型架构会趋向稳定并形成标准,之后便是 Prompt + MCP + Client 多链路动态执行迭代和优化。所以,把架构定义好,具备强扩展性是非常有必要的,也是程序员👨🏻💻工作价值的体现。—— 堆功能只等于 demo 案例,驾驭架构解决复杂问题才是核心价值体现! + +### 1. 库表设计 + ++
++ ++
++ +- 这里小傅哥设计了一套非常灵活的 Ai Agent 库表结构,满足动态配置各项资源,再由程序动态化的随时加载和使用。 +- 有了这样的库表,我们就可以按需配置出多种使用类型的 Ai Agent,之后对话或者 Job 任务方式执行使用。 + +### 2. 数据加载 + +如图,整体 ChatClient 客户端实例化过程; + ++
++ +- 首先,以构建 AiClientNode 的对话客户端为目的,已经完成了相关的元素实例化步骤。本节这里要处理的是,顾问角色的构建,以及构建 AiClientNode 节点。 +- 之后,AiClientNode 的构建,是关联了其他各项元素的,所以在构建时,需要在 AiClientNode 节点,从 Spring 容器通过 getBean 的方式,检索到对应的各项元素。 +- 注意,ai_client_system_prompt 系统提示词,需要修改为 Map 结构数据。这样更方便我们从数据里获取,哪些是属于当前 AiClientNode 构建时所需的元素。 + +### 3. 执行分析 + +如图,不同方案实现的 Agent 流程; + ++
++ +Ai Agent 的处理过程也是分为几类的,用于适应不同的场景使用; + +1. 固定N个步骤,这类的一般是配置工作流的,提高任务执行的准确性。如,一些检索资料、发送帖子、处理通知等。 +2. 顺序循环调用,配置 Agent 要执行的多个 Client 端,以此顺序执行。适合一些简单的任务关系,并已经分配好的动作,类似于1的方式。 +3. 智能动态决策,这类是目前市面提供给大家使用的 Agent 比较常见的实现方式,它会动态的规划执行动作,完成行动步骤,观察执行结果,判断完成状态和步骤。并最终给出结果。 + +### 4. 功能架构 + +如图,从Agent服务的装配到接口调用和响应的关系图; + ++
++ +- 以程序启动为开始,进行自动化装配。这个过程我们先把一些想预先启动的数据库中的 agent 配置所需的 client 客户端进行服务初始化。之后写入到 Spring 容器,方便在执行 Agent 时进行使用。`前面有伙伴问,为什么把实例化的对象写入到 Spring 容器,这里就是原因` +- 客户端(UI),进行 POST 接口请求,这个过程需要封装一个 SSE 流式响应的接口,让 Step 1~4 各个执行步骤,把过程信息写入到流式接口。这里要注意,需要给接口返回的**对象**添加上对应的类型(什么步骤、什么节点、什么过程),以便于反馈给用户 Agent 在做什么。 + +## 三、课程目录 + +整个课程分3个阶段讲解,包括;RAG、MCP,之后进入 Agent 阶段的学习。前面打好基础,后面进入应用。哪怕是小白,也可以跟着一起实战起来,而且每个阶段都有部署运行效果,越学越爽。 + +项目地址:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + ++
+\ No newline at end of file diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-flowgram.md b/docs/md/project/ai-knowledge/ext/ai-agent-flowgram.md new file mode 100644 index 000000000..b65d81c23 --- /dev/null +++ b/docs/md/project/ai-knowledge/ext/ai-agent-flowgram.md @@ -0,0 +1,84 @@ +--- +title: 有方案了,让自研 Ai Agent 可视化编排! +lock: no +--- + +# 有方案了,让自研 Ai Agent 可视化编排! + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +每当一项新技术问世,市场上总会涌现出一批基于该技术的热门项目。以 AI 技术为例,紧随其后便出现了 `n8n`、`dify`、`coze` 等各类相关应用产品(当然,他们很优秀)。 + +然而,随着技术逐渐成熟和稳定,这些通用的解决方案往往会逐渐淡出市场。为什么呢?这是因为,各个企业下场后,都开始基于自身的业务,在细分领域,做自己的 Ai Agent 服务啦!所以,什么才是最重要的呢? + +++ +**什么才是最重要的呢?** + +从研发的角度来看,最关键的是;学习业务场景经验、积累技术架构方案、落地应用项目能力。相比市场上层出不穷、功能纷繁复杂的各类产品,真正有价值的是对技术本质的持续储备。只有具备扎实的技术功底,形成闭环的技术体系,才能自身核心价值能力。 + +有了这样的能力积累,你可以在任何一个公司,任何一个场景,架构出一套最为符合的业务系统。所以,你的能力也等同于你的级别和薪资。 + +所以,对于最火的 Ai Agent 不要只是会用就行了,拿个项目过来,部署上就觉得可以了。你要做的,是把全套的业务弄透彻,实现的方案搞下来,怎么编码整明白。好啦,开冲,今天给这套 Ai Agent 加上可视化编排方案。 + +> 🧧 文末提供了全套 AI、RAG、MCP、Agent 项目、开发教程以及工程源码。此外还有非常多的互联网大厂项目(17个),都可以一并获取学习。 + +## 一、拖拉拽效果 + +鉴于整个 Ai Agent 的配置,需要一大堆东西,如;执行频次任务、客户端串联、模型选择、顾问角色知识库、MCP 工具、提示词等,有一套可视化拖拉拽配置的前端页面,就显得非常有必要了。 + +因此小傅哥调研了不少具备图形化编排能力的前端组件,发现一套 [flowgram.ai(官网有文档,可直接阅读)](https://flowgram.ai/) 可以很好的满足当前 Ai Agent 编排能力。😄 并且上手不困难,效果还不错。 + ++
++ +- 首先,我们要基于 [flowgram.ai](https://flowgram.ai/) 框架,开发自己需要的 Node 节点(后面会有代码说明,方便伙伴扩展)。这里增加了;task、agent、client、too-mcp、model。 +- 之后,在页面点击添加节点,并选择好每个节点,应该配置的属性信息,以及连接节点关系。 +- 最后,点击保存,他会给你一个json 对象,按照对象的结构,创建服务端接口即可接收和保存。(相关保存操作,会在后续课程中添加,如果有诉求可以先把前端代码下载下去,对照json开发接口即可) + +> 本套全段代码 [ai-agent-station-front](#) 已经添加到课程中,可以进入获取。地址:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +## 二、怎么添加节点 + +### 1. 下载前端工程 + +首先,你要下载 [ai-agent-station-front](https://gitcode.net/KnowledgePlanet/ai-agent-station-front) 到本地使用 trae.ai 打开。如果没有提示你,要自己手动执行 npm install 初始化工程。 + ++
++ +- 首先,[flowgram.ai](https://flowgram.ai/) 官网提供了各种案例,可以下载一个进行扩展。这里小傅哥就是下载好的一个,之后添加我们需要的节点。 +- 之后,docs 下的 ai-agent-station.sql 为的是让 ai 可以使用,自动创建 node 节点的(下文有演示)。 +- 另外,这里的代码,对于稍微有些 react 编码基础的伙伴,是可以非常方便看懂的。后端工程师,如果不懂也没关系,让 ai 来解答以及操作。 + +### 2. Ai 编码,添加节点 + ++
++ +- 首先,下载一份国际版 trae.ai,这里有使用文档。[https://bugstack.cn/md/road-map/trae.html](https://bugstack.cn/md/road-map/trae.html) 使用 cursor 也可以,其实这东西,重要的就是好用的模型。 +- 之后,nodes 下是各种节点,我们可以拖拽一份让 ai 编码参考。并告诉ai,以哪个库表信息来编写新的节点。(有时候可能有问题,如果有问题,可以手动修改下) + +## 三、点击保存,查看json + ++
++ ++
++ +- 点击保存,就可以拿到节点和链接的关系数据了。这份数据是可以和数据库对应上。 +- 后续课程从0到1的实现过程中,会和后端接口联动,存储数据。现在你也可以先下载前端代码,尝试编码。 + diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-job.md b/docs/md/project/ai-knowledge/ext/ai-agent-job.md new file mode 100644 index 000000000..01634d737 --- /dev/null +++ b/docs/md/project/ai-knowledge/ext/ai-agent-job.md @@ -0,0 +1,97 @@ +--- +title: 阶段性总结,Ai Agent 的重要性 +lock: no +--- + +# 阶段性总结,Ai Agent 的重要性 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +还好,还好早早的就开始了 AI 应用技术的储备,让我吃了互联网职场的第一碗创新类应用的技术饭。 + +其实从最早 OpenAI 发布 ChatGPT 开始,我就开始使用其接口陆续开发了应用,2022年年尾-开发智能问答助手、2023年年初-OpenAI应用项目(可支付买额度对话)、2023年终-OpenAI 代码自动评审。 + +可以说,在 AI 应用类开发这条路上,我一直走的很快也很靠前。甚至,我也思考怎么让 AI 识别接口,具备调用能力,而不是就只是做一些对话类操作。直至2024年他来啦! + +2024年11月份,Anthropic 公司推出了 MCP(Model Context Protocol,模型上下文协议)开放标准协议(JSON-RPC 2.0),其核心目标是通过提供一个标准化的接口,使AI模型能够无缝地访问本地和远程资源。 + +如果没有 MCP 可以说就没有 AI Agent 智能体,也不会有现在那么多的结合于 AI 来为工作提效的场景。 + +所以,当我看到 AI MCP 那一刻,我是很兴奋。也在 AI MCP 协议出了不久,立马筹备新的 AI Agent 项目,让大家都能学习到这一技术。而且我也早早的告诉过大家 **用不了多久,各大互联网企业都将大量的推进落地,自有 MCP 服务的实现,用于增强企业 AI 应用的提效能力。** 随后,我们看到了阿里支付宝 MCP、高德地图 MCP、百度搜索 MCP,等等各类 MCP 服务如雨后春笋一般。再往后各个公司推出了各种的 Ai Agent 能力,因为 AI 可以调用 MCP 服务,真正的帮我们做一些事情。 + +现在,公司里随便一个功能服务接口(RPC、HTTP),都可以通过简单配置走 MCP 网关转换为 MCP 协议接口能力,让 AI Agent 通过配置即可完成调用。也就是说,通过配置接口 + Prompt 提示词,既可以承接绝对部分日常工作,如;客诉排查、日志分析、监控巡检、文档评审、单测开发等等。 + +老板总说,我需要的不只是 AI 开发能力的人才,而且他还要懂得业务,具备应用项目落地能力。这样才能为我们企业的场景提效,而不是天马行空。所以,想学 AI 的伙伴来说,不要只是一头扎入到 AI 里,也要多积累业务场景经验。 + +## 一、市面的开源资料 + +**86.5k Star!** 关注 Ai Agent 实现的人超级多,也都知道这是一个热门方向。项目:[https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools](https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools) + +++ +这是一款开源系统提示词项目,包含了市面的热门产品 Trae、Cursor、Claude、v0 等20多款 Ai Agent 项目的提示词 + MCP Tool。非常适合需要做 Ai Agent 项目的伙伴借鉴使用。 + +小傅哥还复制下来 Trae.ai 提示词(不过可能不是最新版)的内容进行本地验证,配置百度搜索 MCP 服务 + 本地文件处理。经过提问后,可以在本地创建出对应的文件夹内容,如果在结合进去 Shell 脚本能力,会更好。如果想要更好的效果,可以完全配置出一套 Trae 所需的工具服务组,那么效果会更好。 + ++
++ +目前 Ai Agent 的开发实现,主要为;`分析`、`规划`、`执行`、`验证`,以及在这个过程中循环检测执行,对结果进行确认校验继续分析。可能将来也会由 OpenAI 主导,设计一套 Ai Agent 框架结构组件,那么 Ai Agent 的开发门口将更低也会更通用(目前就有不少这样的 Auto Agent 框架)。 + +## 二、也快接近尾声啦 + +2025年3月3日,小傅哥带着大家从 RAG 开始,之后进入 MCP,后来又做到 Ai Agent,持续了半年多。这块也快收尾了,核心功能都已经完成,陆续的开始做一些收尾的章节。 + ++
++ +- RAG 10节、MCP 6节、Ai Agent 18节(还有待更新的),目前整体34节,后续整体都做完预计到40节,10.1假期后差不多。 + +## 三、总结下项目内容 + +### 1. 页面效果 + ++
++ +- 如图,用户可以自己选择一个对话场景的智能体,之后后端会根据用户的请求进行动态化策略调度。 +- 目前,已经添加的场景有;CSDN发帖 + 通知(同类小红书也可以做)、智能对话分析、ELK日志检索分析、智能监控分析服务。只要你学习了这套系统,就可以设计出你所需要的 Ai Agent 使用场景。 + +### 2. 执行流程 + ++
++ +在整个 Ai Agent 的实现中,小傅哥带着大家分析设计了4种方案,包括;固定执行的、循环执行的、智能分析决策的还有一个按照步骤规划的。这些流程都有适合于自己业务场景使用。在代码中也都有不同方案的实现,之后通过用户选择后进行动态化的策略调度。 + +### 3. 核心动作 + +#### 3.1 动态调度 + ++
++这里会根据用户的请求,进行策略路由,找到所需的 Ai Agent 执行策略进行处理。这里小傅哥也有意加入不同的策略,让大家可以看到很多的 Ai Agent 设计思路。 + +#### 3.2 执行策略 + ++
++ +- 这是其中的一种 Ai Agent 执行策略方式,通过用户的提问进行分析、规划、列出执行步骤,之后依次执行。 +- 所有的这些实现都有相应的代码,带着大家使用规则树框架清晰的实现出来。 + +好啦,欢迎感兴趣的伙伴一起加入学习,小傅哥的社群,有非常多的实战项目,涵盖;业务、组件、框架、源码、开源、创新等,让你加入后,就等同于加入一个互联网大厂的核心项目组,各项信息都能全部接触到,甚至包括产品 PRD 文档。**因为小傅哥就是大厂架构师,所以也是按照一个我所在的核心的组的方式来给大家建设与之匹配的资料内容。** + diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-mcp-auth.md b/docs/md/project/ai-knowledge/ext/ai-agent-mcp-auth.md new file mode 100644 index 000000000..381acbf09 --- /dev/null +++ b/docs/md/project/ai-knowledge/ext/ai-agent-mcp-auth.md @@ -0,0 +1,450 @@ +--- +title: 给 MCP 服务加上安全认证! +lock: no +--- + +# 给 MCP 服务加上安全认证! + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +刚刚过去两个月,市面的 MCP 服务,如雨后春笋一般不断涌现出来,包括;`百度`、`高德`、`网盘`、`支付宝`。这些 MCP 服务,可以让我们基于 Spring AI 框架构建的 Agent 具备非常丰富的使用功能。同时这也说明,程序员👨🏻💻,应该具备开发 MCP 服务的能力,Spring AI 让 Java 再次牛逼! + +++ +>关于 RAG、MCP、Agent 是什么,这里小傅哥已经编写过了全套的教程,可以进入学习;[https://bugstack.cn/md/project/ai-knowledge/ai-knowledge.html](https://bugstack.cn/md/project/ai-knowledge/ai-knowledge.html) + +本节小傅哥主要给大家分享,关于市面上这些标准的带有验证权限的 MCP 服务,怎么使用 Spring AI 进行对接。同时我们自己开发的 MCP 服务,怎么加上权限校验。 + +## 一、举例,对接高德地图 MCP + +高德地图 MCP Server; + +```java +{ + "mcpServers": { + "amap-amap-sse": { + "url": "https://mcp.amap.com/sse?key=您在高德官网上申请的key" + } + } +} +``` + +- 官网:[https://lbs.amap.com/api/mcp-server/gettingstarted](https://lbs.amap.com/api/mcp-server/gettingstarted) - `官网提供了创建对接 Key` + +### 1. 代码使用示例 + +```java +@Configuration +public class McpConfig { + + @Bean + public List+
mcpClientTransport() { + McpClientTransport transport = HttpClientSseClientTransport + .builder("https://mcp.amap.com") + .sseEndpoint("/sse?key= ") + .objectMapper(new ObjectMapper()) + .build(); + + return Collections.singletonList(new NamedClientMcpTransport("amap", transport)); + } + +} +``` + +- 对接时,需要设定 sseEndpoint 如果不设定个,Spring AI 默认是对 builder 的 baseUrl 值添加 `/sse` 的。 +- 所以,如果你要对接外部带有验证权限的 MCP 服务,需要手动设置下 sseEndpoint 值。 + +### 2. 项目中的配置 + +小傅哥,带着大家做的 Ai Agent,也支持了外部的这些带有权限校验的 MCP 服务。你可以,以多种方式进行配置。如; + +```java +{ + "baseUri":"https://mcp.amap.com", + "sseEndpoint":"/sse?key=801aabf79ed0ff78603cfe85****" +} +``` + +```java +{ + "baseUri":"https://mcp.amap.com", + "sseEndpoint":"/sse?key=801aabf79ed0ff78603cfe85****" +} +``` + +- 以上两种配置方式,在 ai-agent-station 都做了兼容处理。以下是兼容代码,学习这部分项目的伙伴,可以直接阅读课程代码。 + +```java +@Slf4j +@Component +public class AiClientToolMcpNode extends AbstractArmorySupport { + + // ... 省略部分代码 + + protected McpSyncClient createMcpSyncClient(AiClientToolMcpVO aiClientToolMcpVO) { + String transportType = aiClientToolMcpVO.getTransportType(); + + switch (transportType) { + case "sse" -> { + AiClientToolMcpVO.TransportConfigSse transportConfigSse = aiClientToolMcpVO.getTransportConfigSse(); + // http://127.0.0.1:9999/sse?apikey=DElk89iu8Ehhnbu + String originalBaseUri = transportConfigSse.getBaseUri(); + String baseUri; + String sseEndpoint; + + int queryParamStartIndex = originalBaseUri.indexOf("sse"); + if (queryParamStartIndex != -1) { + baseUri = originalBaseUri.substring(0, queryParamStartIndex - 1); + sseEndpoint = originalBaseUri.substring(queryParamStartIndex - 1); + } else { + baseUri = originalBaseUri; + sseEndpoint = transportConfigSse.getSseEndpoint(); + } + + sseEndpoint = StringUtils.isBlank(sseEndpoint) ? "/sse" : sseEndpoint; + + HttpClientSseClientTransport sseClientTransport = HttpClientSseClientTransport + .builder(baseUri) // 使用截取后的 baseUri + .sseEndpoint(sseEndpoint) // 使用截取或默认的 sseEndpoint + .build(); + + McpSyncClient mcpSyncClient = McpClient.sync(sseClientTransport).requestTimeout(Duration.ofMinutes(aiClientToolMcpVO.getRequestTimeout())).build(); + var init_sse = mcpSyncClient.initialize(); + log.info("Tool SSE MCP Initialized {}", init_sse); + return mcpSyncClient; + } + case "stdio" -> { + AiClientToolMcpVO.TransportConfigStdio transportConfigStdio = aiClientToolMcpVO.getTransportConfigStdio(); + Map stdioMap = transportConfigStdio.getStdio(); + AiClientToolMcpVO.TransportConfigStdio.Stdio stdio = stdioMap.get(aiClientToolMcpVO.getMcpName()); + + // https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem + var stdioParams = ServerParameters.builder(stdio.getCommand()) + .args(stdio.getArgs()) + .build(); + var mcpClient = McpClient.sync(new StdioClientTransport(stdioParams)) + .requestTimeout(Duration.ofSeconds(aiClientToolMcpVO.getRequestTimeout())).build(); + var init_stdio = mcpClient.initialize(); + log.info("Tool Stdio MCP Initialized {}", init_stdio); + return mcpClient; + } + } + + throw new RuntimeException("err! transportType " + transportType + " not exist!"); + } + +} +``` + +- 以上代码,是为了自动化构建 MCP 服务的,其中 case sse 的部分,会对 url 进行拆分,如果本身 url 配置了校验权限,则不会从另外一个参数获取,否则从另外参数拼接。这样就可以很好的扩展用户配置时的多样性问题了。 + +>以上是关于带有权限校验的 MCP 服务配置的问题,接下来,我们要说下怎么自己开发一个带有权限校验 + +## 二、实现,带有权限校验的 MCP 服务 + +首先,Spring AI 是有意提供基于自家的 OAuth2 框架,完成 MCP 服务的多样性权限校验的。不过目前提供的方案能用,但不算成熟。 + + ++ +官网:[https://spring.io/blog/2025/05/19/spring-ai-mcp-client-oauth2](https://spring.io/blog/2025/05/19/spring-ai-mcp-client-oauth2) + +### 1. 基于 OAuth2 认证 + +#### 1.1 工程结构 + ++
++ +- 工程:[https://gitcode.net/KnowledgePlanet/mcp-server-auth](https://gitcode.net/KnowledgePlanet/mcp-server-auth) - `面向于学习 ai-agent-station 的伙伴` +- 使用 OAuth2 基于 Spring MVC 的方式到也简单,知道添加配置即可。 + +#### 1.2 所需的 POM 文件 + +```pom ++
+ + +org.springframework.boot +spring-boot-starter-oauth2-resource-server ++ + +org.springframework.boot +spring-boot-starter-oauth2-authorization-server ++ +``` + +#### 1.3 测试验证 + +```java +@Slf4j +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "server.shutdown=immediate") +public class ApiTest { + + @LocalServerPort + private int port; + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Test + public void test_access_token() throws IOException, InterruptedException { + String token = obtainAccessToken(); + log.info("token:{}", token); + // eyJraWQiOiJiMWQ0MGIxNi1hOTYzLTQ2NmYtYTVkOC02NGRjMzg0ODljYWEiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJtY3AtY2xpZW50IiwiYXVkIjoibWNwLWNsaWVudCIsIm5iZiI6MTc0ODA1MTc1NiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1ODA5OCIsImV4cCI6MTc0ODA1MjA1NiwiaWF0IjoxNzQ4MDUxNzU2LCJqdGkiOiI5NjY4ZmZkMi0wNjQ2LTRiNmItODQ4Ni1jYzk3ZjMxNTdmOTEifQ.CG4GYai_NYkmfcqmNi-_HYG06Kan04uNSsC2ivn_eC9Ra6xMKYTs9KIT7k5lKxSFRUOPI7K0zJNVvNXrrIe0iFl-csrG2vGukNTGTPMxtUi2hheBMRbnvjvuojW4DeOEE8UOpdA6uow67ucwcymTlDXE-k7OjRZeyp7UdVz2WyoDFQhLB6ihLbDSj5puAZxfNocirRzo36gmW243aW9f1gugPUcpND-oobc2q8xyBG2cX2AlGXUSS-v9PLjHr2W2smFTKHHGwu7FpMMBnJLUT5gZD0llIg6yqro91nFaAFOpGHXjRZYgVjkRlzxx08Zuquva9PbStxbUl2j8hI43_Q + + var client = HttpClient.newHttpClient(); + + var request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:" + port + "/sse")) + .header("Accept", "text/event-stream") + .header("Authorization", "Bearer " + token) + .GET() + .build(); + + var responseCode = new AtomicInteger(-1); + var sseRequest = client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()).thenApply(response -> { + responseCode.set(response.statusCode()); + if (response.statusCode() == 200) { + log.info("response:{}", JSON.toJSONString(response)); + return response; + } + else { + throw new RuntimeException("Failed to connect to SSE endpoint: " + response.statusCode()); + } + }); + + await().atMost(Duration.ofSeconds(1)).until(sseRequest::isDone); + assertThat(sseRequest).isCompleted(); + assertThat(responseCode).hasValue(200); + } + + private String obtainAccessToken() throws IOException, InterruptedException { + var client = HttpClient.newHttpClient(); + + var clearTextCredentials = "mcp-client:secret".getBytes(StandardCharsets.UTF_8); + var credentials = new String(Base64.getUrlEncoder().encode(clearTextCredentials)); + var request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:" + port + "/oauth2/token")) + .header("Authorization", "Basic " + credentials) + .header("Content-Type", "application/x-www-form-urlencoded") + .POST(ofString("grant_type=client_credentials")) + .build(); + + var rawResponse = client.send(request, HttpResponse.BodyHandlers.ofString()).body(); + + Maporg.springframework.ai +spring-ai-starter-mcp-server-webmvc +response = objectMapper.readValue(rawResponse, Map.class); + return response.get("access_token"); + } + +} +``` + +- 加上 OAuth2 以后,就需要获取并设置 accessToken 才能访问 sse 服务了。 + +### 2. 基于网关实现 + +其实我们到不非得依赖于 Spring OAuth2 往 MCP 服务里在添加一些其他的东西。倒不如直接走网关,让网关来管理权限,MCP 服务只做服务的事情就好。 + +这里我们基于 Nginx 来配置验证功能,当然你可以在学习本节的案例后,配置任何其他的网关来管理你的 MCP 服务。 + +注意,这里的前置条件为你已经跟着小傅哥,至少完成了一个 MCP 服务。课程;[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +当我们有了一套基于 sse 形式访问的 mcp 后,我们是可以给这套 mcp 基于 nginx 转发的形式进行访问后面真实的 mcp 服务的。在转发的过程中,拿到用户在地址 `http://127.0.0.1:9999/sse?apikey=DElk89iu8Ehhnbu` mcp 服务后面拼接的 apikey,并对 apikey 进行验证。 + +#### 2.1 配置工程 + + ++ +- 在 ai-agent-station 项目下,提供了 dev-ops-v2 配置 mcp 服务转发和验证能力。 +- 注意,部署的时候,要把 mcp.localhost.conf 转发的 mcp 服务的地址,更换为你的地址。 +- 另外,每一个 mcp.localhost.conf 还可以配置域名,这样就达到了高德地图 mcp 访问的效果。举例;`https://fatie.mcp.bugstack.cn/sse/apikey=*******` + +#### 2.2 服务转发&校验 + +```java +# 可以负载服务 +upstream backend_servers { + server 192.168.1.108:8101; +} + +server { + listen 80; + + server_name 192.168.1.104; # 修改为你的实际服务器 IP 或域名【域名需要备案】 + + location /sse { + # 验证apikey参数,这个apikey也可以对接服务端接口来处理。 + if ($arg_apikey != "DElk89iu8Ehhnbu") { + return 403; # 如果apikey不正确,返回403禁止访问 + } + + # 重写URL,去掉apikey参数 + rewrite ^(/sse/)\?apikey=.* $1 break; + + proxy_pass http://backend_servers; # 将请求代理到上游服务器组 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + chunked_transfer_encoding off; + proxy_buffering off; + proxy_cache off; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /mcp/message { + proxy_pass http://backend_servers; # 将请求代理到上游服务器组 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + +} +``` + +- 特别注意,mcp 服务是有2个步骤的,一个是 sse 访问,还有一个 mcp/message 的处理。我们只需要对 sse 的请求进行验证即可。 +- `/sse` 请求路径,需要会提取 apikey 与 nginx 配置的值进行对比,如果不正确则会返回一个 403 禁止访问,通过则放行。 +- 之后重写 url 地址,让转发到本身 mcp 的地址是干净的。从 `http://127.0.0.1:9999/sse?apikey=DElk89iu8Ehhnbu` 验证转发后为 `http://192.168.1.108:8101/sse` + +#### 2.3 功能验证 + +首先,要确保你的 mcp 服务是可以使用的。如,访问;`http://192.168.1.108:8101/sse` 可以获得到结果。 + ++
++- 如图,验证成功。我们可以通过转发的方式进行验证和使用。 +- 另外,有了转发和验证,你原本的服务,sse 8101 就不用对外了。只有你的网关(nginx)可以访问即可。这样就可以控制权限了。 + +#### 2.4 动态验证 + +那么,目前我们配置的nginx 转发这不是一个固定的权限账号吗,怎么让不同的接入方都申请一个秘钥key来使用呢?这里我们需要使用到 nginx 的 auth 认证模块。 + +```java +# 可以负载服务 +upstream backend_servers { + server 192.168.1.108:8101; +} + +server { + listen 80; + + server_name 192.168.1.104; # 修改为你的实际服务器 IP 或域名【域名需要备案】 + + location /sse { + auth_request /auth; + + # 重写URL,去掉apikey参数 + rewrite ^(/sse/)\?apikey=.* $1 break; + + proxy_pass http://backend_servers; # 将请求代理到上游服务器组 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + chunked_transfer_encoding off; + proxy_buffering off; + proxy_cache off; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /mcp/message { + proxy_pass http://backend_servers; # 将请求代理到上游服务器组 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location = /auth { + # 发送子请求到HTTP服务,验证客户端的凭据,返回响应码 + internal; + # 设置参数 + set $query ''; + if ($request_uri ~* "[^\?]+\?(.*)$") { + set $query $1; + } + # 验证成功,返回200 OK + proxy_pass http://207.246.123.*:8090/auth/token?$query; + # 发送原始请求 + proxy_pass_request_body off; + # 清空 Content-Type + proxy_set_header Content-Type ""; + } + +} + +``` + +- 在访问 `/sse` 的时候,增加 auth 认证,auth 来访问本地一个 http 接口。你可以是 SpringBoot 实现的接口。这个接口负责验证你的秘钥是否正确。同时你的 SpringBoot 服务还可以提供出一个创建秘钥的平台,让接入方使用。 +- 其实类似这样的场景,使用功能更加丰富的 api 网关都是自带的,或者 github 一些专门为 mcp 做网关服务的也都有。 + +## 三、增强,学习 rag、mcp、agent + +小傅哥,已经为你准备好了一套 AI RAG、MCP、Agent 实践编程课程,使用 Java + Spring AI 框架,增强自己的 AI 应用开发能力,迅速囤积编程技能,满足各个公司招聘时对AI应用类开发的要求!如下,课程目录,全程文档小册 + 视频带着你从0到1学习。 + +#### **第1期 RAG Spring AI 0.8.1 - 完结** + +1. 【更】AI RAG 知识库,项目介绍&需求分析&环境说明 +2. 【更】初始化知识库工程&部署模型&提交代码 +3. 【更】Ollama DeepSeek 流式应答接口实现 +4. 【更】Ollama DeepSeek 流式应答页面对接 +5. 【更】Ollama RAG 知识库上传、解析和验证 +6. 【更】Ollama RAG 知识库接口服务实现 +7. 【更】基于AI工具,设计前端UI和接口对接 +8. 【更】Git仓库代码库解析到知识库并完善UI对接 +9. 【更】扩展OpenAI模型对接,以及完整AI对接 +10. 【更】云服务器部署知识库(Docker、Nginx) + +#### **第2期 MCP Spring AI 1.0.0 - 完结** + +1. 【更】吃上细糠,升级SpringAI框架 +2. 【更】康庄大道,上手 AI MCP 工作流 +3. 【更】道山学海,实现MCP自动发帖服务(stdio) +4. 【更】海纳百川,上线MCP自动发帖服务 +5. 【更】川流不息,实现MCP微信公众号消息通知服务 +6. 【更】息息相通,MCP 服务部署上线(sse 模式) + +#### 第3期 Agent Spring AI 1.0.0 - 进行中【全套源码和部署已提供】 + +1. 第3-0节,AiAgent项目介绍和系统演示 +2. 第3-1节,Ai Agent 业务流程、系统架构、库表设计说明 +3. 第3-2节,初始化工程和库表dao等,提交代码,讲解代码库使用 +4. 第3-3节,硬编码方式讲解 Ai Agent 构建,为后续拆分做准备 +5. 第3-4节,引入扳手工程,规则模型,整体设计Agent预热装配 +6. 第3-5节,规则节点,RootNode 异步加载数据 +7. 第3-6节,规则节点,AiClientToolMcpNode 工具MCP服务构建 +8. 第3-7节,规则节点,AiClientAdvisorNode 顾问角色服务构建 +9. 第3-8节,规则节点,AiClientModelNode 模型构建 bean 对象 +10. 第3-9节,规则节点,AiClientNode 客户端构建 +11. 第3-10节,Agent 服务预热和对话接口封装,使用验证 +12. 第3-11节,知识库接口封装和使用 +13. 第3-12节,智能体动态任务构建 +14. 第3-13节,Admin 管理端 API 接口讲解(CRUD) +15. 第3-14节,Ai Agent 对话与 UI 页面对接 +16. 第3-15节,构建镜像,上线云服务器 +17. 第3-16节,Agent 场景玩法分享 +18. ... 更多内容,随着课程开始逐步更新。 + +课程详细介绍:[https://mp.weixin.qq.com/s/j_G32TDfM_l-S76Wo0zPXw](https://mp.weixin.qq.com/s/j_G32TDfM_l-S76Wo0zPXw) + diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-notes.md b/docs/md/project/ai-knowledge/ext/ai-agent-notes.md new file mode 100644 index 000000000..970b543dc --- /dev/null +++ b/docs/md/project/ai-knowledge/ext/ai-agent-notes.md @@ -0,0 +1,84 @@ +--- +title: Ai Agent 新项目,你要的简历模板来啦! +lock: no +--- + +# Ai Agent 新项目,你要的简历模板来啦! + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +**简历怎么写?简历怎么写?简历怎么写?** 这群死鬼,一直催小傅哥,想让小傅哥把饭🍚喂嘴里。没办法,兄弟们着急秋招写简历了,让自己写总是感觉慌,不知道从哪下手。好啦,它来了,它来了,行了吧! + +++ +**你就说吧,各个大厂都在做,它能不重要?** + +Dify、Coze、Claude,京东还开源了 JoyAgent,市面上互联网大厂做的 Ai Agent 产品可以说是如雨后春笋一般,越来越多了。Ai Agent 也成了互联网标配的业务场景,为各个应用业务提效,所以结于业务场景来看,Ai Agent 是有战略意义的。 + +所以,你想面试互联网类公司,在简历上多一笔关于 Ai 类的场景实现,总是能匹配到公司里更多的部门岗位。尤其是具备一些 Ai Agent 开发能力的,在现在看来,可以说是非常亮眼的存在。就趁现在吧,该让自己的简历增强下啦!🌶 + +>接下来,我会站在一个求职者的角度进行项目介绍和简历内容展示。可以作为你的参考。 + +## 一、运行效果 + +先看一眼系统架构和运行效果,之后我们对项目进行介绍和简历编写。—— 面试时,可能也会有面试官看你的项目运行效果,你可以把项目上线,也可以写一个技术博客文章,来介绍你做的项目。 + ++
++ ++
++ ++
++ +- 更多可查看,[关于 Ai Agent 项目介绍](https://mp.weixin.qq.com/s/S3UJY0aWbulQ2OZH9XVYmw) + +## 二、项目介绍 + +面试官您好,本套 Ai Agent 综合智能体项目,主要为业务应用系统提效而构建,包括;需求文档分析、代码评审(可结合 openai 代码自动评审)、文档资料编写(+消息通知)、ELK 日志检索 + 普罗米修斯监控的智能 Ai Agent 分析等功能。 + +整套项目,抽象设计拆分了 Ai Agent 执行过程所需的各项组件(Advisor、Prompt、MCP)能力到数据库表中,使其具备自由配置编排组装的特性。以此方式可结合应用中实际场景诉求,编排类似 Diff 和智能分析 Coze 能力,达到需要什么场景就配置什么场景的 Ai Auto Agent。 + +该项目,在架构设计上使用了 DDD 分层架构进行设计,运用了组合模式的规则引擎构建执行链路,并结合工厂、策略、责任链等方式来处理具体流程细节(多种组合方式的Ai Agent执行过程),以此解耦系统功能的实现。这样就可以更加灵活方便的迭代各类扩展性诉求。 + +## 三、简历模板 + +**注意**:🙅🏻♀️不要直接复制粘贴简历模板内容,以此结构和描述方式,可以用你的个人第1学习视角来描述。包括;学习过程中的积累、检索的同类资料,以及对课程的扩展等多方面内容来编写简历。以下简历涵盖了课程 1~3 阶段内容; + +- 项目名称:`Ai Agent 综合应用提效智能体`/`Ai Agent 智能巡检系统`/`Ai Agent 可编排服务系统` - 基于你的实际场景/目的,修改项目名称 +- 项目架构:微服务架构、DDD 领域驱动四色模型、前后端分离设计、Agent 设计模式 +- 核心技术:Spring AI(RAG、MCP、Advisor)、SpringBoot、MyBatis、MySQL、PGVector、Redis、React、flowgram.ai、Nginx、Docker +- 项目描述:本项目是一套面向业务应用系统提效的综合智能体(Ai Agent)解决方案,支持将执行过程中的各项能力(如Advisor、Prompt、MCP)抽象并存储于数据库,实现自由配置和灵活编排。用户可根据实际业务场景,动态组合和调整智能分析、代码评审、日志检索等功能模块,打造定制化的Ai Auto Agent,从而显著提升开发设计、编码、运维效率。 +- 核心职责: + - 以产品(PRD)服务诉求和多方面调研评审,设计出具有可编排能力的 Ai Agent 服务架构。并以 DDD 领域驱动建模,构建系统架构。 + - 拆解 Ai Agent 执行过程所需的能力组件,包括;Advisor 顾问角色记忆上下文和访问RAG知识库、Tool(Function Call、MCP)调用服务端(推文、通知、ELK、普罗米修斯监控等)、Prompt(提示词)、Model(对话模型)、Api(使用 one-api/自研sdk组件,统一转换其他各个模型为 openai 格式) + - 设计通用对话分析模型,完成 Ai Agent 执行过程中所需的,问题分析、自主规划、精准执行、内容判罚(循环执行),直至输出最终结果。—— Ai Agent 可对不同步骤配置不同的 Model + MCP + Prompt 能力。并对执行过程中,通过 Advisor 顾问角色访问知识库和存储上下文数据。 + - 实现 MCP 服务能力,以 stdio/sse 方式,开发,公众号通知 MCP、推文 MCP(可以是内部的文档化服务)、ELK-MCP、普罗米修斯-MCP等。以及使用 MCP 服务平台,检索公用能力 https://sai.baidu.com/zh/(本地文件、Github、搜索引擎),统一配置使用。—— 数据库设计了多类型 MCP 服务的配置操作。 + - 设计通用 MCP Nginx Token 校验能力(也可以设计 MCP-GateWay),以配置化方式进行鉴权使用。增强 MCP 调用过程中,数据传输安全性。 + - 基于 Spring TaskScheduler 扩展实现,智能体任务调度服务,可自动化完成日常系统巡检(客诉、报警)产生 html 格式报告文档。也可以基于报警监听消息,触发巡检动作(公司内,报警信息有 MQ 消息)。 + - 提供 RAG 知识库能力,可自主上传文件 + 解析工程代码库,并对知识库设有标签为 Ai Agent Advisor 访问 RAG 提供数据使用能力,增强准确性。—— 解析的代码库,可以为 openai 代码自动评审,增强评审能力。 + - 设计一键 Ai Agent 预热能力,动态化注入 Spring 容器。支持运营配置服务,随时调整、变更、上线,方便运营配置和使用。 + - 基于 Racet + flowgram.ai 框架,为 Ai Agent 服务提供拖拉拽编排能力,增强运营使用体验。 + +> 此套 Ai Agent 以为企业/平台/系统,上线3个月以来,主动巡检解决数十次系统隐患问题和运营配置错误情况,以及撰写了上万篇有效文档 + 提炼技术关键信息对新人辅导。后续还会继续配置更多方面的 Ai Agent 服务能力,为企业提效。 + +## 四、课程目录 + +整个课程分3个阶段讲解,包括;RAG、MCP,之后进入 Agent 阶段的学习。前面打好基础,后面进入应用。哪怕是小白,也可以跟着一起实战起来,而且每个阶段都有部署运行效果,越学越爽。 + +项目地址:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + ++
+\ No newline at end of file diff --git "a/docs/md/project/s-pay-mall/part-4/\347\254\2544\350\212\202\357\274\232\351\241\271\347\233\256\344\270\212\347\272\277.md" b/docs/md/project/ai-knowledge/none.md similarity index 79% rename from "docs/md/project/s-pay-mall/part-4/\347\254\2544\350\212\202\357\274\232\351\241\271\347\233\256\344\270\212\347\272\277.md" rename to docs/md/project/ai-knowledge/none.md index 5fd539db5..f64218b2f 100644 --- "a/docs/md/project/s-pay-mall/part-4/\347\254\2544\350\212\202\357\274\232\351\241\271\347\233\256\344\270\212\347\272\277.md" +++ b/docs/md/project/ai-knowledge/none.md @@ -1,9 +1,9 @@ --- -title: 第4节:项目上线 +title: 新章节,编写中 lock: no --- -# 第4节:项目上线 +# 新章节,编写中 作者:小傅哥+
博客:[https://bugstack.cn](https://bugstack.cn) diff --git a/docs/md/project/ai-knowledge/notes.md b/docs/md/project/ai-knowledge/notes.md new file mode 100644 index 000000000..a85043fcf --- /dev/null +++ b/docs/md/project/ai-knowledge/notes.md @@ -0,0 +1,133 @@ +--- +title: 面试:技能、简历、问题汇总 +lock: no +--- + +# 《Ai Agent》,关于面试中的技能、简历、问题汇总 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
课程:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +此部分主要用于向读者提供星球项目之一的《Ai Agent》项目如何体现到简历中,包括;专业技能、项目经验。 + +## 一、项目介绍 + +面试官您好,本套 Ai Agent 综合智能体项目,主要为业务应用系统提效而构建,包括;需求文档分析、代码评审(可结合 openai 代码自动评审)、文档资料编写(+消息通知)、ELK 日志检索 + 普罗米修斯监控的智能 Ai Agent 分析等功能。 + +整套项目,抽象设计拆分了 Ai Agent 执行过程所需的各项组件(Advisor、Prompt、MCP)能力到数据库表中,使其具备自由配置编排组装的特性。以此方式可结合应用中实际场景诉求,编排类似 Diff 和智能分析 Coze 能力,达到需要什么场景就配置什么场景的 Ai Auto Agent。 + +该项目,在架构设计上使用了 DDD 分层架构进行设计,运用了组合模式的规则引擎构建执行链路,并结合工厂、策略、责任链等方式来处理具体流程细节(多种组合方式的Ai Agent执行过程),以此解耦系统功能的实现。这样就可以更加灵活方便的迭代各类扩展性诉求。 + +## 二、简历模板 + +**注意**:🙅🏻♀️不要直接复制粘贴简历模板内容,以此结构和描述方式,可以用你的个人第1学习视角来描述。包括;学习过程中的积累、检索的同类资料,以及对课程的扩展等多方面内容来编写简历。以下简历涵盖了课程 1~3 阶段内容; + +- 项目名称:`Ai Agent 综合应用提效智能体`/`Ai Agent 智能巡检系统`/`Ai Agent 可编排服务系统` - 基于你的实际场景/目的,修改项目名称 +- 项目架构:微服务架构、DDD 领域驱动四色模型、前后端分离设计、Agent 设计模式 +- 核心技术:Spring AI(RAG、MCP、Advisor)、SpringBoot、MyBatis、MySQL、PGVector、Redis、React、flowgram.ai、Nginx、Docker +- 项目描述:本项目是一套面向业务应用系统提效的综合智能体(Ai Agent)解决方案,支持将执行过程中的各项能力(如Advisor、Prompt、MCP)抽象并存储于数据库,实现自由配置和灵活编排。用户可根据实际业务场景,动态组合和调整智能分析、代码评审、日志检索等功能模块,打造定制化的Ai Auto Agent,从而显著提升开发设计、编码、运维效率。 +- 核心职责: + - 以产品(PRD)服务诉求和多方面调研评审,设计出具有可编排能力的 Ai Agent 服务架构。并以 DDD 领域驱动建模,构建系统架构。 + - 拆解 Ai Agent 执行过程所需的能力组件,包括;Advisor 顾问角色记忆上下文和访问RAG知识库、Tool(Function Call、MCP)调用服务端(推文、通知、ELK、普罗米修斯监控等)、Prompt(提示词)、Model(对话模型)、Api(使用 one-api/自研sdk组件,统一转换其他各个模型为 openai 格式) + - 设计通用对话分析模型,完成 Ai Agent 执行过程中所需的,问题分析、自主规划、精准执行、内容判罚(循环执行),直至输出最终结果。—— Ai Agent 可对不同步骤配置不同的 Model + MCP + Prompt 能力。并对执行过程中,通过 Advisor 顾问角色访问知识库和存储上下文数据。 + - 实现 MCP 服务能力,以 stdio/sse 方式,开发,公众号通知 MCP、推文 MCP(可以是内部的文档化服务)、ELK-MCP、普罗米修斯-MCP等。以及使用 MCP 服务平台,检索公用能力 https://sai.baidu.com/zh/(本地文件、Github、搜索引擎),统一配置使用。—— 数据库设计了多类型 MCP 服务的配置操作。 + - 设计通用 MCP Nginx Token 校验能力(也可以设计 MCP-GateWay),以配置化方式进行鉴权使用。增强 MCP 调用过程中,数据传输安全性。 + - 基于 Spring TaskScheduler 扩展实现,智能体任务调度服务,可自动化完成日常系统巡检(客诉、报警)产生 html 格式报告文档。也可以基于报警监听消息,触发巡检动作(公司内,报警信息有 MQ 消息)。 + - 提供 RAG 知识库能力,可自主上传文件 + 解析工程代码库,并对知识库设有标签为 Ai Agent Advisor 访问 RAG 提供数据使用能力,增强准确性。—— 解析的代码库,可以为 openai 代码自动评审,增强评审能力。 + - 设计一键 Ai Agent 预热能力,动态化注入 Spring 容器。支持运营配置服务,随时调整、变更、上线,方便运营配置和使用。 + - 基于 React + flowgram.ai 框架,为 Ai Agent 服务提供拖拉拽编排能力,增强运营使用体验。 + +> 此套 Ai Agent 以为企业/平台/系统,上线3个月以来,主动巡检解决数十次系统隐患问题和运营配置错误情况,以及撰写了上万篇有效文档 + 提炼技术关键信息对新人辅导。后续还会继续配置更多方面的 Ai Agent 服务能力,为企业提效。 + +## 三、面试问题 + +### 1. 你们项目采用了DDD领域驱动设计,能简单介绍一下你们的四色模型是如何划分的? + +**回答**:我们项目严格按照DDD四色模型进行架构设计。首先是**值对象**层,主要包含AiClientVO、AiClientAdvisorVO等核心业务对象,承载业务状态和标识;**值对象(Value Object)**层包含各种配置信息如AiClientSystemPromptVO、AiClientModelVO等,保证数据的不可变性;**领域服务(Domain Service)**层实现了复杂的业务逻辑,如AiClientNode、AiClientAdvisorNode等节点服务,负责AI Agent的组装和编排;**聚合根(Aggregate Root)**则通过ExecuteCommandEntity等实体来管理整个AI Agent的生命周期。这种设计让我们的业务逻辑更加清晰,各层职责分明,便于维护和扩展。 + +### 2. 你们的微服务架构是如何设计的,各个模块之间是如何协作的? + +**回答**:我们采用了标准的DDD分层架构,分为六个核心模块:api层定义对外接口契约,app层作为应用启动入口和配置中心,domain层包含核心业务逻辑和领域模型,trigger层处理HTTP请求和事件触发,infrastructure层负责数据持久化和外部服务调用,types层定义通用类型和枚举。各模块通过依赖注入和事件驱动进行协作,domain层作为核心不依赖任何外部模块,infrastructure层实现domain层定义的接口,trigger层调用domain层的服务。这种设计保证了业务逻辑的纯净性和系统的可测试性。 + +### 3. Agent设计模式在你们项目中是如何体现的? + +**回答**:我们的Agent设计模式主要体现在多层次的智能体架构设计上。首先是**策略模式**的应用,通过IExecuteStrategy接口定义执行策略,AutoAgentExecuteStrategy实现自动执行逻辑;其次是**责任链模式**的核心应用,我们设计了四步执行链:RootNode→Step1AnalyzerNode(任务分析)→Step2PrecisionExecutorNode(精准执行)→Step3QualitySupervisorNode(质量监督)→Step4LogExecutionSummaryNode(执行总结),每个节点继承AbstractExecuteAutoSupport并实现特定的业务逻辑;再次是**工厂模式**,通过DefaultAutoAgentExecuteStrategyFactory创建执行策略处理器,管理DynamicContext动态上下文;最后是**模板方法模式**,AbstractExecuteAutoSupport定义了执行模板,各个Step节点实现具体的doApply方法。这种设计实现了"问题分析→自主规划→精准执行→质量监督"的完整AI Agent执行循环,每个步骤都可以独立配置不同的ChatClient、Prompt和Advisor,真正实现了智能体的可编排和可扩展。 + +### 4. Spring AI中的Advisor顾问角色是如何设计和实现的? + +**回答**:Advisor顾问角色是我们AI Agent的核心能力之一,主要负责上下文记忆和知识库访问。我们实现了两种主要的Advisor:PromptChatMemory用于维护对话历史,通过maxMessages参数控制记忆长度;RagAnswerAdvisor用于访问向量知识库,通过topK和filterExpression参数控制检索精度。在实现上,我们继承了Spring AI的BaseAdvisor,重写了aroundCall方法来拦截对话请求,在请求前注入相关上下文信息,在响应后更新记忆状态。这种设计让AI Agent具备了持续学习和知识积累的能力,大大提升了对话的准确性和连贯性。 + +### 5. RAG知识库的分词和向量化是如何设计的? + +**回答**:我们的RAG知识库基于PGVector实现,使用OpenAI的Embedding模型进行向量化。在分词策略上,我们使用TokenTextSplitter按照token数量进行智能分割,既保证了语义的完整性又控制了向量的维度。向量存储采用1536维的向量空间,支持余弦相似度检索。在数据预处理阶段,我们会对上传的文档进行清洗和标准化,提取关键信息并添加元数据标签,这些标签可以用于后续的过滤检索。检索时通过SearchRequest配置topK参数控制返回结果数量,通过filterExpression进行精确过滤,确保检索结果的相关性和准确性。 + +### 6. MCP协议的设计理念和实现方式是什么? + +**回答**:MCP(Model Context Protocol)是我们实现工具调用的核心协议,它定义了AI模型与外部工具之间的标准化通信接口。我们支持两种通信方式:stdio模式适用于本地工具调用,通过标准输入输出进行通信;sse模式适用于远程服务调用,通过Server-Sent Events实现实时通信。在实现上,我们为每个MCP服务定义了标准的Function接口,使用@Tool注解标记可调用的方法,通过MethodToolCallbackProvider将Java方法暴露为MCP工具。比如微信通知MCP通过WeiXinNoticeService提供消息推送能力,CSDN发帖MCP提供自动发布文章的能力。这种设计让AI Agent能够调用各种外部服务,大大扩展了智能体的能力边界。 + +### 7. 你们是如何实现AI Agent的动态编排和热部署的? + +**回答**:我们通过Spring的动态Bean注册机制实现了AI Agent的热部署能力。核心思路是将AI Agent的各个组件(Model、Prompt、Advisor、MCP)抽象为可配置的Bean,存储在数据库中。当配置发生变化时,通过ArmoryCommandEntity触发重新装配流程,使用DefaultArmoryStrategyFactory的策略模式动态创建新的组件实例,然后通过registerBean方法将新组件注册到Spring容器中。整个过程采用责任链模式,依次执行AiClientApiNode、AiClientModelNode、AiClientAdvisorNode、AiClientNode等节点,确保组件的正确装配顺序。这种设计让我们能够在不重启服务的情况下,动态调整AI Agent的能力配置,大大提升了系统的灵活性和运维效率。 + +### 8. 智能体任务调度服务是如何设计的,如何实现自动化巡检? + +**回答**:我们基于Spring TaskScheduler扩展实现了智能体任务调度服务,支持定时和事件驱动两种触发方式。定时巡检通过Cron表达式配置执行周期,自动收集系统指标、日志信息、告警数据等,然后调用专门的巡检Agent进行智能分析,最终生成HTML格式的巡检报告。事件驱动巡检则监听MQ消息,当收到告警信息时立即触发相应的巡检动作。在实现上,我们为每种巡检场景配置了专门的Agent,比如性能巡检Agent配置了Prometheus MCP工具,日志巡检Agent配置了ELK MCP工具。巡检结果会通过微信公众号MCP自动推送给相关人员,实现了从发现问题到通知处理的全自动化流程。 + +### 9. 你们的MCP服务是如何保证安全性的? + +**回答**:我们设计了通用的MCP Nginx Token校验机制来保证数据传输安全性。首先在Nginx层配置了统一的鉴权模块,所有MCP请求都需要携带有效的Token才能通过;Token采用JWT格式,包含用户身份、权限范围、过期时间等信息;在应用层,我们为每个MCP服务配置了独立的访问密钥,支持定期轮换;对于敏感操作如数据库访问、文件操作等,还增加了二次验证机制。此外,我们还实现了请求频率限制、IP白名单、操作审计日志等安全措施。在数据传输过程中,所有敏感信息都进行了加密处理,确保即使在网络传输过程中被截获也无法直接使用。 + +### 10. 前端的拖拽编排功能是如何实现的? + +**回答**:我们基于React和flowgram.ai框架实现了AI Agent的可视化编排功能。前端采用节点式的流程图设计,每个节点代表一个AI Agent组件,用户可以通过拖拽的方式组合不同的Model、Prompt、Advisor、MCP组件。在技术实现上,我们使用React Flow作为基础图形引擎,自定义了各种组件节点的渲染逻辑;通过Context API管理全局状态,实时同步编排配置;使用WebSocket与后端保持连接,支持实时预览和调试。当用户完成编排后,前端会将配置信息序列化为JSON格式发送给后端,后端解析配置并动态创建对应的AI Agent实例。这种设计让非技术人员也能够轻松配置和使用AI Agent,大大降低了使用门槛。 + +### 11. 在实现多模型适配时遇到了什么挑战,是如何解决的? + +**回答**:最大的挑战是不同AI模型的API格式和调用方式差异很大,直接适配会导致代码耦合度过高。我们的解决方案是引入one-api服务作为统一的模型网关,将所有第三方模型的API统一转换为OpenAI格式。在系统内部,我们只需要适配OpenAI的接口规范,通过配置不同的baseUrl和apiKey就能接入各种模型。同时我们还自研了SDK组件,封装了模型调用的通用逻辑,包括重试机制、超时处理、错误码转换等。这种设计不仅简化了开发复杂度,还提升了系统的稳定性和可扩展性,当需要接入新模型时只需要在one-api层配置即可。 + +### 12. 大规模并发场景下,AI Agent的性能是如何保证的? + +**回答**:我们从多个维度进行了性能优化。首先是连接池管理,为每个模型API配置了独立的连接池,避免相互影响;其次是异步处理,所有AI调用都采用异步方式,通过ResponseBodyEmitter实现流式响应,用户可以实时看到AI的思考过程;然后是缓存策略,对于相同的问题我们会缓存AI的回答,减少重复计算;在资源调度上,我们使用自定义的线程池进行任务分发,根据任务类型和优先级进行智能调度。此外,我们还实现了熔断降级机制,当某个模型服务不可用时自动切换到备用模型,保证服务的高可用性。通过这些优化,我们的系统能够支持数千并发用户同时使用。 + +### 13. 如何保证AI Agent执行过程中的数据一致性? + +**回答**:我们采用了事件驱动架构来保证数据一致性。每个AI Agent的执行过程被拆分为多个步骤,每个步骤完成后都会发布相应的事件,下一个步骤监听事件后开始执行。在数据库层面,我们使用了分布式事务来保证跨服务的数据一致性,关键操作都包装在事务中执行。对于长时间运行的AI任务,我们实现了断点续传机制,将执行状态持久化到数据库,即使服务重启也能从断点继续执行。同时我们还建立了完善的监控和告警机制,实时监控AI Agent的执行状态,一旦发现异常立即进行人工干预。这种设计确保了即使在复杂的业务场景下,数据的一致性和完整性也能得到保证。 + +### 14. 这个AI Agent系统给公司带来了什么实际价值? + +**回答**:我们的AI Agent系统在多个方面为公司创造了显著价值。在开发效率方面,代码评审Agent将人工评审时间从平均2小时缩短到15分钟,准确率达到95%以上;在运维效率方面,智能巡检Agent实现了7×24小时自动监控,故障发现时间从小时级缩短到分钟级,运维人员的重复性工作减少了80%;在内容创作方面,文章生成Agent帮助技术团队每月自动产出50+篇高质量技术文章,大大提升了公司的技术影响力。更重要的是,这套系统的可编排特性让我们能够快速响应新的业务需求,从需求提出到Agent上线的周期从原来的2周缩短到2天,大大提升了业务响应速度。 + +### 15. 在项目推广过程中遇到了什么阻力,是如何解决的? + +**回答**:最大的阻力来自于用户对AI准确性的担忧和使用习惯的改变。为了解决这个问题,我们采用了渐进式推广策略。首先选择了代码评审这个相对低风险的场景进行试点,通过大量的测试数据证明AI的准确性;然后我们设计了人机协作的工作模式,AI负责初步分析,人工负责最终决策,让用户逐步建立信任;在用户体验方面,我们提供了详细的操作文档和培训视频,还建立了用户反馈机制,根据用户建议持续优化产品功能。经过3个月的推广,用户接受度从最初的30%提升到了85%,现在已经成为团队日常工作的重要工具。 + +### 16. 未来你们计划如何进一步优化和扩展这个系统? + +**回答**:我们有几个重要的优化方向。首先是增强AI Agent的自主学习能力,通过强化学习让Agent能够从历史执行结果中学习,不断优化自己的决策策略;其次是扩展更多的业务场景,比如客服机器人、数据分析助手、项目管理助手等;在技术架构方面,我们计划引入更先进的向量数据库和图数据库,提升知识检索的准确性和效率;在用户体验方面,我们正在开发移动端应用,让用户能够随时随地使用AI Agent服务。同时我们也在探索多模态AI的应用,让Agent能够处理图片、音频、视频等多种类型的数据,进一步扩展应用场景。预计在未来一年内,我们的AI Agent系统将覆盖公司80%以上的业务流程。 + +### 17. 在设计通用对话分析模型时,你们是如何处理问题分析、自主规划、精准执行这个循环的? + +**回答**:我们设计了一个四阶段的执行循环:问题分析、自主规划、精准执行、内容判罚。在问题分析阶段,AI Agent首先理解用户意图,提取关键信息和上下文;自主规划阶段,Agent根据可用的工具和知识库制定执行计划,选择最优的执行路径;精准执行阶段,按照计划调用相应的MCP工具和Advisor,获取执行结果;内容判罚阶段,Agent评估执行结果是否满足用户需求,如果不满足则重新进入规划阶段。整个过程中,我们为每个阶段配置了不同的Model、MCP、Prompt组合,比如规划阶段使用逻辑推理能力强的模型,执行阶段使用工具调用能力强的模型。这种设计让AI Agent具备了类似人类的思考和执行能力。 + +### 18. 你们的向量数据库检索性能是如何优化的? + +**回答**:我们从多个层面优化了向量检索性能。在索引层面,PGVector使用了HNSW(Hierarchical Navigable Small World)算法构建高效的向量索引,支持近似最近邻搜索;在查询优化方面,我们实现了查询缓存机制,对于相似的查询直接返回缓存结果;在数据分片方面,我们按照业务领域对向量数据进行分片存储,减少检索范围;在并发控制方面,我们使用了连接池和异步查询,提升并发处理能力。此外,我们还实现了智能的预加载机制,根据用户的历史查询模式预先加载可能需要的向量数据到内存中。通过这些优化,我们的向量检索响应时间从原来的500ms优化到了50ms以内,同时支持千级并发查询。 + +### 19. 在实现MCP服务的过程中,stdio和sse两种模式各有什么优缺点? + +**回答**:stdio模式的优点是实现简单,适合本地工具调用,通信开销小,调试方便;缺点是只能用于本地服务,不支持远程调用,扩展性有限。sse模式的优点是支持远程调用,可以跨网络部署,支持实时双向通信,扩展性强;缺点是实现复杂度高,需要处理网络异常和重连机制,通信开销相对较大。在实际应用中,我们根据具体场景选择合适的模式:对于文件系统操作、本地命令执行等场景使用stdio模式;对于微信通知、CSDN发帖、远程API调用等场景使用sse模式。为了统一开发体验,我们封装了通用的MCP客户端,屏蔽了底层通信细节,开发者只需要关注业务逻辑即可。 + +### 20. 你们是如何保证AI Agent在复杂业务场景下的稳定性的? + +**回答**:我们建立了多层次的稳定性保障机制。在架构层面,采用微服务设计,单个服务的故障不会影响整个系统;在服务层面,实现了熔断降级机制,当某个依赖服务不可用时自动切换到备用方案;在数据层面,建立了完善的备份和恢复机制,关键数据都有多副本保护;在监控层面,实现了全链路监控,从请求接入到响应输出的每个环节都有详细的监控指标;在异常处理方面,我们为每种可能的异常场景都设计了对应的处理策略,包括重试、降级、人工介入等。此外,我们还建立了完善的测试体系,包括单元测试、集成测试、压力测试、混沌工程测试等,确保系统在各种极端情况下都能稳定运行。通过这些措施,我们的系统可用性达到了99.9%以上。 + +> 随着课程进展和大家面试遇到的问题,持续更新这部分内容。 + +### 21. AI Agent采用的是什么agent设计模式。以autoagent那套执行链路来说 + +链接:[https://t.zsxq.com/pqrtB](https://t.zsxq.com/pqrtB) + +课程里视频也讲到的,链路的执行分为4类,有固定模式,规划模式,步骤模型等。通过为 ai agent 配置可执行客户端链路,动态规划、执行步骤、审查结果(循环验证)、总结输出来完成。在整个执行过程中,使用到了,提示词prompt、顾问角色访问知识库和记忆上下文、mcp 工具调用等,来完成整个请求会话。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/promotion/AI MCP \345\206\215\350\277\231\344\271\210\347\224\250\344\270\213\345\216\273\357\274\214\345\217\257\345\260\261\350\246\201\342\200\235\345\210\233\344\270\232\342\200\234\345\217\230\347\216\260\344\272\206\345\221\200\357\274\201.md" "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\206\215\350\277\231\344\271\210\347\224\250\344\270\213\345\216\273\357\274\214\345\217\257\345\260\261\350\246\201\342\200\235\345\210\233\344\270\232\342\200\234\345\217\230\347\216\260\344\272\206\345\221\200\357\274\201.md" new file mode 100644 index 000000000..13aa0851b --- /dev/null +++ "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\206\215\350\277\231\344\271\210\347\224\250\344\270\213\345\216\273\357\274\214\345\217\257\345\260\261\350\246\201\342\200\235\345\210\233\344\270\232\342\200\234\345\217\230\347\216\260\344\272\206\345\221\200\357\274\201.md" @@ -0,0 +1,111 @@ +--- +title: AI MCP 再继续这么用,可就要”创业“变现了呀! +lock: no +--- + +# AI MCP 再继续这么用,可就要”创业“变现了呀! + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
课程:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +在 [AI MCP 24小时为我”打工“](https://mp.weixin.qq.com/s/sB4EaP6HMtj3VxK-VMD8nQ),两周时间。已产生 `251篇文章`,带来`10万+阅读量`,`涨粉近1000人`!在这么搞下去,不得变现了哇! + +++ +嘿嘿,不过这点点成绩根本挡不住我前进的脚步👣! + +AI MCP 的能力远不止于次,或者更准确的说是 AI Agent 的能力,还有非常多的场景可以运用,开玩笑讲,他会让 Java 再次伟大!这也是为什么 Spring AI 那么快速的迭代自己的框架设计,甚至不惜每次迭代还要推翻之前的结构模型,也要更好的支持未来 AI 工程的开发实现。 + +在有了 AI Agent 后,所有的 tob/toc 服务项目,都应该会变得更加智能,这会包括我们现在使用的各项软件,如;电商、出行、外卖等,也包括研发人员使用的各类技术软件。如果大公司还是牛马般的靠体力卷工时,甚至可能会被小公司的不断创新所掀翻。 + +好啦,那么这篇文章小傅哥会给大家介绍下 AI Agent 以及可运用的场景,帮助大家打开思路! + +>文末提供了 AI RAG&MCP 实战编程项目,可以快速掌握 Spring AI 应用开发能力! + +## 一、什么是 AI Agent + +AI Agent 是整合多种技术手段的智能实体,其实现依赖于 Tools、MCP、Memory、RAG(Retrieval 增强检索生成) 等技术组件。但不是非得依赖全部组件才叫 AI Agent。 + ++
++ +AI Agents 是**系统** ,它通过赋予 **大型语言模型(LLMs)** **访问工具** 和**知识** 来扩展其能力,从而使 **LLMs** 能够**执行操作** 。 + +- **系统** :将 Agents 视为一个由许多组件组成的系统,而不仅仅是单个组件,这一点很重要。在基本层面上,AI Agent 的组件包括: + - **环境** - AI Agent 运行的定义空间。例如,如果我们有一个旅行预订 AI Agent,则环境可以是 AI Agent 用来完成任务的旅行预订系统。 + - **传感器** - 环境具有信息并提供反馈。AI Agents 使用传感器来收集和解释有关环境当前状态的信息。在旅行预订 Agent 示例中,旅行预订系统可以提供诸如酒店可用性或航班价格之类的信息。 + - **执行器** - 一旦 AI Agent 接收到环境的当前状态,对于当前任务,Agent 会确定要执行的操作以更改环境。对于旅行预订 Agent,它可能是为用户预订可用房间。 +- **大型语言模型** - Agents 的概念在 LLMs 创建之前就已存在。使用 LLMs 构建 AI Agents 的优势在于它们能够解释人类语言和数据。这种能力使 LLMs 能够解释环境信息并制定改变环境的计划。 +- **执行操作** - 在 AI Agent 系统之外,LLMs 仅限于根据用户提示生成内容或信息的情况。在 AI Agent 系统内部,LLMs 可以通过解释用户请求并使用其环境中可用的工具来完成任务。 +- **访问工具** - LLM 可以访问哪些工具由 1) 它运行的环境和 2) AI Agent 的开发者定义。对于我们的旅行 Agent 示例,Agent 的工具受预订系统中可用操作的限制,开发者可以将 Agent 的工具访问权限限制为航班。 +- **知识** - 除了环境提供的信息外,AI Agents 还可以从其他系统、服务、工具甚至其他 Agents 中检索知识。在旅行 Agent 示例中,此知识可以是位于客户数据库中的用户旅行偏好信息。 + +我们可以以一个人,作为视角来理解 AI Agent,Memory 记忆是人的大脑,Tools 是人的身体和四肢,Rag 知识库是过往的经验储备,MCP 是我们与外部的连接调用。而整个人就是这个智能体 AI Agent。 + +## 二、AI 智能体的工作原理 + +每个智能体都定义了角色、个性和沟通风格,包括具体指令和可用工具的说明。 + ++
++ +- **角色**:角色是智能体的核心特征,定义了其性格和行为方式。一个定义良好的角色可以帮助智能体在与环境和用户互动时保持一致性。随着时间的推移,智能体会通过经验积累和环境互动不断发展和完善其角色。 +- **记忆**:智能体的记忆系统由短期记忆、长期记忆、共识记忆和情景记忆组成。短期记忆用于处理即时互动,长期记忆存储历史数据和对话,情景记忆记录过去的互动细节,而共识记忆则用于在智能体之间共享信息。通过这些记忆系统,智能体能够回忆过去的互动,适应新情况,保持上下文一致性,并从经验中学习以提高性能。 +- **工具**:工具是智能体用来与环境互动并增强其功能的资源。它们可以是函数或外部资源,帮助智能体访问信息、处理数据或控制外部系统以执行复杂任务。工具根据其界面类型进行分类,包括物理界面、图形界面和基于程序的界面。通过工具学习,智能体能够理解工具的功能及其应用场景,从而有效地使用这些工具。 +- **模型**:大语言模型 (LLM) 是构建 AI 智能体的基础,赋予智能体理解、推理和行动的能力。LLM 作为智能体的“大脑”,使其能够处理和生成语言,而其他组件则支持智能体的推理和行动能力。 + +> https://github.com/google/A2A 多个 Agent 间,可以使用 A2A 协议,完成 Agent 和 Agent 对接。 + +## 三、AI Agent 场景应用 + +### 1. BCP 智能巡检 + ++
++ +- 场景:在日常的互联网toc场景的系统中,每天都会有不同程度的客诉,这些客诉问题需要进行大量的系统排查。 +- 方案:将企业内的各项系统服务,开发出 MCP 服务接口(APIs),并为每个核心业务流程提供排查链路计划。在发生系统报警时,以报警为触达手段,排查系统日志、账户、Redis、Dev-Ops 服务等,给给出综合的解决方案。 +- 其他:不同配置的 Agent 是可以连接通信的,一个 Agent 就是一个配置出来的 ChatClient 对话体。 + +### 2. 工具AI化设计 + ++
++ +- 场景:其实现在除了编程方面,其他很多软件并没有那么快速的接入 AI Agent。如 trae.ai\cursor 都是编程的利器,可以更快速的迭代开发代码。那么同样的 SSH 链接云服务器的工具,也可以通过 AI Agent 进行扩展,提高我们的操作服务器部署软件的效率。 +- 方案:设计 Linux SSH MCP Server 服务,同时提供 SFTP 以及云服务器的对接。再加上 Linux RAG 知识库。这样我们就可以以对话和编码的方式操作服务器。如,部署 JDK,安装 NodeJS,执行系统镜像的构建、推送、拉取、部署等操作。 + +### 3. toc场景AI化 + ++
++ +- 场景:目前的大部分购物操作,都是人工的方式自己在平台检索,之后对于不懂的在进行客服提问,最后去下单。那么这里也可以加入 AI 操作,自主的完成购物、下单,以及将来退货的操作。 +- 方案:为产品提供购物话术 RAG 增强检索能力,以及提供货物、下单、结算、物流的 MCP 服务。用户和 AI 对话过程中,完成货品的组装选择和下单。聊聊天就把东西买好了,还能给提供产品的使用和维护。 + +### 4. AI Agent 编排 + ++
++ +- 当我们有大量的 MCP 服务实现、RAG 知识库沉淀后,会催生出 AI Agent 的编排能力实现。你可以按需组装一套自己的对话 AI Agent。 +- 类似的场景实现:[https://github.com/n8n-io/n8n](https://github.com/n8n-io/n8n) - 付费的。不过很多企业会借助之前的 BPMN 实现的低代码,扩展出 AI Agent 编排实现。 + +```java +docker volume create n8n_data +docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n registry.cn-hangzhou.aliyuncs.com/xfg-studio/n8n:1.88.0 +``` + diff --git "a/docs/md/project/ai-knowledge/promotion/AI MCP \345\267\262\347\273\217\345\270\256\346\210\221\342\200\234\345\271\262\346\264\273\342\200\235\344\272\206\357\274\201.md" "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\267\262\347\273\217\345\270\256\346\210\221\342\200\234\345\271\262\346\264\273\342\200\235\344\272\206\357\274\201.md" new file mode 100644 index 000000000..88403fbe1 --- /dev/null +++ "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\267\262\347\273\217\345\270\256\346\210\221\342\200\234\345\271\262\346\264\273\342\200\235\344\272\206\357\274\201.md" @@ -0,0 +1,119 @@ +--- +title: AI MCP 已经一天24小时,给我“打工”了! +lock: no +--- + +# AI MCP 已经一天24小时,给我“打工”了! + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
课程:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +一天24篇推文,500+收藏,2.6万+阅读量,我已经让 AI 帮我干活了!这是小傅哥最新实现的一套 `mcp-server-csdn`,完全不需要我上手,就可以定时的执行文章编写和发表。 + +++ ++
++ +只要你配置好对应的话题,AI MCP 就会自动创作文章和发表。虽然单篇流量不一定都高,但架不住我根本没出手呀,走的就是一个量大取胜!**这不是自动发帖,这是自动创业呀😂!简直美滋滋!** + ++
++ +MCP 模型上下文协议,核心的作用就在于通过标准的协议设计,让 AI 可以以通用的方式调用各类服务的接口。所以,我们可以通过 MCP 的实现,让 AI 自动化的完成内容的创作和发表。 + +在这样的一个 CSDN 发文章的模型跑通后,我们就可以大批量的复制,完成不同类内容的创作和发表,也可以以这样的方式对接其他各类内容社区平台。甚至你还可以想到,这东西能辅助我们完成很多工作。 + +以前总有人说,AI 来了,可能会让很多程序员失业。但恰恰相反,不仅不会失业,反而 AI 会让程序员如虎添翼,推进改变其他行业的工作模式。毕竟,没有哪个行业不仅能用 AI,还能懂 AI,还能开发 AI 了! + +接下来,小傅哥就给大家,介绍下这套 MCP 的设计和工作模式。 + +> 🧧 文末提供了全套 AI、RAG、MCP 的开发、使用教程以及工程源码。此外还有非常多的互联网大厂项目,都可以一并获取学习。 + +## 一、MCP 的工作模式 + +MCP 服务,可以以工具 Tools 的形式配置到 AI MCP 客户端。当我们向 AI 发送执行指令后,AI 会携带工具 Tools 信息,一起发送给 AI。之后进行语义分析以及调用 AI MCP 执行业务诉求。 + +你可以把 AI MCP 当成你雇来的员工,你有什么想法就告诉他,让他充当那个跑腿和执行的人。而你只负责下达指令和验收结果。 + ++
++ ++
++ +如图,我们可以给程序设定一套话术描述,让它去做指定类型的文章创作和发表。在 AI 完成内容创作后,会调用 MCP 服务,传递接口入参值,再由 MCP 服务,完成文章的发表。 + +如果,我们希望发布的文章具备当前热点。可以增加一个 MCP 服务,这个服务来检索牛客网最新的求职面试信息,再加上各个大厂招聘要求描述信息等。基于这些信息先获取到面试热点话题,在结合话题与设定的面试场景话术一起生成对应的文章。**MCP 就像是你的员工,你可以交代A员工做什么后,交接给B员工继续处理。** + +## 二、MCP 怎么开发的 + +首先,MCP 是一套标准的模型上下文协议,它不限制非得使用那种语言实现。如;NodeJS、Python、Java,都可以实现 MCP 服务。以 Spring AI 框架举例,Java 工程师可以,以非常简单的使用 Java 代码开发普通的业务逻辑,之后配置上 AI MCP 工具类注解和完成 Bean 对象的实例化即可。 + ++
++ +- 如图,正常的搭建 SpringBoot 应用程序,编写对接 CSDN 发帖接口。之后给服务方法配置上 Tool 工具注解。那么它就会被 Spring AI MCP 注册和使用了。 +- 同时,一个工程里可以有很多的这样的服务和工具。比如你要开发一个各大平台集成的发帖/文章的服务,那么也可以增加其他的对接类在同一个工程里。最终配置上 AI MCP 的注册即可。 + +## 三、MCP 怎么对接的 + +把 Java 开发实现的 MCP 服务端,打包成一个 Jar,把这个 Jar 配置到 MCP 客户端工程里。即可完成 MCP 服务的调用。并且一个 MCP 客户端,也可以对接多套 MCP 服务,这些服务可以以 AI 工作流的形式完成自己的工作。 + ++
++ ++
++ +- 如图,在 SpringBoot 工程中,增加MCP 服务的配置对接。这个时候 AI 对话就那可以拿到 MCP 工具进行对话。并将要执行的信息,通过 MCP 服务工具完成处理。 +- 并且,你可以把 MCP 服务,打包构建镜像部署到(服务器/Nas),让它一天24小时的干活。用不了多久,你就成为某个领域内容的专家了! + +## 四、MCP 怎么学习下? + +小傅哥,已经为你准备好了一套 AI RAG、MCP、Function Call 实践编程课程,使用 Java + Spring AI 框架,增强自己的 AI 应用开发能力,迅速囤积编程技能!如下,课程目录,全程文档小册 + 视频带着你从0到1学习。 + ++
++ +#### 第1期 RAG Spring AI 0.8.1 - 完结 + +1. 【更】AI RAG 知识库,项目介绍&需求分析&环境说明 +2. 【更】初始化知识库工程&部署模型&提交代码 +3. 【更】Ollama DeepSeek 流式应答接口实现 +4. 【更】Ollama DeepSeek 流式应答页面对接 +5. 【更】Ollama RAG 知识库上传、解析和验证 +6. 【更】Ollama RAG 知识库接口服务实现 +7. 【更】基于AI工具,设计前端UI和接口对接 +8. 【更】Git仓库代码库解析到知识库并完善UI对接 +9. 【更】扩展OpenAI模型对接,以及完整AI对接 +10. 【更】云服务器部署知识库(Docker、Nginx) + +#### 第2期 MCP Spring AI 1.0.0 - 开冲 + +1. 【新】AI MCP 项目介绍 +2. 【新】吃上细糠,Spring AI 框架升级 + GPU 部署 AI +3. 【新】康庄大道,上手 AI MCP 工作流.md +4. 【新】道山学海,实现MCP自动发帖服务 +5. 【新】海纳百川,MCP 其他服务实现 +6. 【新】川流不息,官网 DeepSeek + open-api 对接 +7. 【新】息兵罢战,服务接口实现,增强 RAG 知识库 + MCP 服务使用 +8. 【新】应用服务接口与前端页面对接 +9. ... 随课程开发提供,包括后续的云服务部署。 + +> AI RAG&MCP 只是小傅哥社群里众多项目的一个,这里还有非常多的牛皮项目,一次加入都可以学习到。并且,不断的更新迭代新项目,社群嘎嘎活跃! \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/\347\254\25410\350\212\202\357\274\232\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\347\237\245\350\257\206\345\272\223\357\274\210Docker\343\200\201Nginx\357\274\211.md" "b/docs/md/project/ai-knowledge/\347\254\25410\350\212\202\357\274\232\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\347\237\245\350\257\206\345\272\223\357\274\210Docker\343\200\201Nginx\357\274\211.md" new file mode 100644 index 000000000..88ce48c59 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25410\350\212\202\357\274\232\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\347\237\245\350\257\206\345\272\223\357\274\210Docker\343\200\201Nginx\357\274\211.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第10节:云服务器部署知识库(Docker、Nginx) +pay: https://t.zsxq.com/YUG46 +--- + +# 《DeepSeek RAG 知识库》第10节:云服务器部署知识库(Docker、Nginx) + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/cWfL6](https://t.zsxq.com/cWfL6) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +部署项目到公网云服务器,让小伙伴们学习如何打包部署上线和Linux、Docker、Nginx的操作使用。 + +## 二、部署过程 + +如图,为本次的部署过程; + +++ +- 首先,购买云服务器,之后搭建云环境。[http://618.gaga.plus/](http://618.gaga.plus/) 需要2c4g部署。 +- 之后,我们在本地构建软件镜像,之后推送到 Docker Hub,完成后再把 dev-ops 的脚本通过 sftp 上传到云服务器,执行安装。 +- 最后,记得部署完成后检查各个软件运行日志,以及开通下相关的服务端口。 diff --git "a/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232AIMCP\351\203\250\345\210\206\344\273\213\347\273\215.md" "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232AIMCP\351\203\250\345\210\206\344\273\213\347\273\215.md" new file mode 100644 index 000000000..0af867e4a --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232AIMCP\351\203\250\345\210\206\344\273\213\347\273\215.md" @@ -0,0 +1,109 @@ +--- +title: DeepSeep MCP 动态知识库 - AI工作流&智能体 +lock: no +--- + +# 《DeepSeep MCP 动态知识库》 - AI工作流&智能体 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
课程:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +用不了多久,各大互联网企业都将大量的推进落地,自有 [MCP](https://github.com/modelcontextprotocol) 服务的实现,用于增强企业 AI 应用的提效能力。因为 [MCP](https://github.com/modelcontextprotocol) 的加入,可以让你;一条命令`帮研发`,调用应用系统日志、排查系统CPU负载、自主选择是否调度数据库信息。也可以一条命令`帮运营`,搞定复杂的SQL执行、导出报表、分析数据、完成促活营销券的自动化配置上架。这就是 [MCP](https://github.com/modelcontextprotocol) 的魅力!👍🏻 + +++ +**那么牛,MCP 是什么?** + +专业的术语 `MCP = Model Context Protocol` 模型上下文协议,可实现应用与外部数据源和工具之间的无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面还是创建自定义 AI 工作流,MCP 都提供了一种标准化的方式来连接他们所需的上下文。 + +`来吧,上图!让你看看它是啥!` + ++
++ +- 首先,站在用户的使用视角,研发或者运营,可以通过话术描述,完成系列的 AI 工作流,并拿到最终的结果。这就是 MCP 最终为你提供的服务。 +- 那么,你可以想象,在日常的工作中,运营、研发、产品、测试等,都有非常多的重复非创作性的工作,占用了大量的时间成本。尤其是研发,写写代码,就有运营过来,帮我查个问题吧,小嘚嘚。但如果有这样的借助于 MCP 实现的 AI 工作流,就可以完成80%以上的工作量。 +- 之后,站在技术的实现视角,MCP 是一个标准结构框架,你可以按照它(Spring AI)提供的 SDK 开发方式,完成本地化 API 的接入开发。让 AI 有明确的方式调用各类 API 服务接口。如果没有 MCP 这会是一件很麻烦的事情。 + +好啦📢,这就是小傅哥即将为你开启的**《DeepSeek RAG 增强知识库》**第2阶段,`MCP 服务开发和对接`。让你具备 AI 开发能力,遥遥领先于还在扣 CRUD 项目的小伙伴,做面试最牛的仔,最职场最靓的人! + +> Spring AI MCP 与 24年末发布,学习此 AI 应用开发项目,你将是第一批具备 Java AI 应用实战开发能力的人。竞争力,嘎嘎滴! + +## 第1期,RAG 我们做了什么 + +在 《DeepSeek RAG 增强知识库》第1阶段,基于 Spring AI 0.8.1 开发了一套可以上传文件和Git仓库进行解析、切割、存储,到使用向量库完成 AI 的知识库问答系统。并最终通过 Docker 部署上线。 + ++
++ +- 基于,RAG 这样的一套知识库,你可以完成文本和代码库的解析。以及自行扩展提供出 RAG 知识库的接口,对接到 OpenAI 代码自动评审(小傅哥社群的另外一个项目),增强代码评审效果。 +- 在这套项目中,可以学习到 Ollama DeepSeek 本地化&云服务部署,以及流式接口的开发、基于 AI 完成页面与知识库对话接口的处理,Linux、Docker 的部署等。小项目不大,但非常锻炼人! + +## 第2期,MCP 我们要做什么 + +与第2期相比,第1期可以称之为小试牛刀,让小伙伴们以最快、最快的往事,积累,运用 Spring AI 框架,开发自己的 RAG 知识库。~~也是方便有些死鬼,早点写到简历上~~ + +到了第2期,你就开始吃上细糠了,小傅哥会带着你升级 Spring AI 框架为 1.0.0-M6 最新版本,多模型配置和操作 PG 向量库,使用 GPU 搭建响应速度更好的 Ollama DeepSeek 大模型(秒级处理),以及对接官网 DeepSeek 的大模型和统一 one-api 对接方式。 + +但这还只是开始,随着基础框架的升级完成,我们将进入 MCP 服务的开发实现。通过 AI 指令,完成 AI 工作流,调度各项 MCP 处理我们的任务作业。如图,举例操作; + ++
++ +- 基于 MCP 服务的开发和对接,通过 AI 工作流指令,完成数据的采集和存放动作。💡 聪明的小伙伴以及开始联想,基于这样的 AI 开发,可以替代很多的日常工作啦。**没想到吧,也把自己替代了** 但仍然,蠢蠢欲动(我不做,别人也做呀)!~~实现后,晋升又有的讲啦!简历也有东西写啦!~~ +- 有了 MCP 后,相当于把我们需要;在一个网页操作数据库查询数据、打开另外一个网页看天气预报,再手动的创建个文件把以上的信息获取后,复制粘贴到文件里。这一些列操作,都让 AI 通过 MCP 模型上下文协议进行处理。也就是 AI 可以调用后台接口啦! + +## 课程目录计划 💐 + +此课程会扩展很多基于 Java 的 AI 开发能力学习,帮助大家积累相关的场景解决方案。在这个过程中你可以最快的掌握最新的技术,早早的提前别人一步。 + ++
++ ++
++ +- 全课程包括文档 + 小册,全程视频手把手带着做。 +- 课程地址:[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) - 含全套项目代码和视频。 + +### 第1期 RAG Spring AI 0.8.1 - 完结 + +1. 【更】AI RAG 知识库,项目介绍&需求分析&环境说明 +2. 【更】初始化知识库工程&部署模型&提交代码 +3. 【更】Ollama DeepSeek 流式应答接口实现 +4. 【更】Ollama DeepSeek 流式应答页面对接 +5. 【更】Ollama RAG 知识库上传、解析和验证 +6. 【更】Ollama RAG 知识库接口服务实现 +7. 【更】基于AI工具,设计前端UI和接口对接 +8. 【更】Git仓库代码库解析到知识库并完善UI对接 +9. 【更】扩展OpenAI模型对接,以及完整AI对接 +10. 【更】云服务器部署知识库(Docker、Nginx) + +### 第2期 MCP Spring AI 1.0.0 - 开冲 + +11. 【新】AI MCP 项目介绍 +12. 【新】吃上细糠,Spring AI 框架升级 + GPU 部署 AI +13. 【新】吃上细糠,官网 DeepSeek + open-api 对接 +14. 【新】MCP 服务的应用类演示和使用 +15. 【新】MCP Spring AI 客户端npx调用,以及资源讲解 +16. 【新】MCP Spring AI 服务端webflux实现 +17. 【新】MCP Spring AI 服务端 + 客户端对接使用 +18. 【新】服务接口实现,增强 RAG 知识库 + MCP 服务使用 +19. 【新】应用服务接口与前端页面对接 +20. ... 随课程开发提供,包括后续的云服务部署。 + +课程包括;视频、小册、1 对 1 答疑解惑、专属VIP项目交流群,并且提供简历编写模板结构的一条龙🐲服务。让你学习后,直接拉开与还在玩具项目其他人的差距,面试脱颖而出提高竞争力!!! + +>课程已经开始,早早加入,早早学习。时间、时机,比任何东西都珍贵!晚点学,只能是工具人。但早点学,就是开发工具的人!加入小傅哥的社群,如图的全套实战项目,都可以学习; \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232\345\220\203\344\270\212\347\273\206\347\263\240\357\274\214\345\215\207\347\272\247SpringAI\346\241\206\346\236\266.md" "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232\345\220\203\344\270\212\347\273\206\347\263\240\357\274\214\345\215\207\347\272\247SpringAI\346\241\206\346\236\266.md" new file mode 100644 index 000000000..5413d1ed4 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232\345\220\203\344\270\212\347\273\206\347\263\240\357\274\214\345\215\207\347\272\247SpringAI\346\241\206\346\236\266.md" @@ -0,0 +1,39 @@ +--- +title: 【更】第11节:吃上细糠,升级SpringAI框架 +pay: https://t.zsxq.com/zT6bl +--- + +# 《DeepSeek RAG&MCP 增强检索知识库系统》第11节:吃上细糠,升级SpringAI框架 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/q5rnP](https://t.zsxq.com/q5rnP) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +升级 Spring AI 框架到 1.0.0-M6 版本,以适应于二阶段 MCP(Model Context Protocol 模型上下文协议)服务开发。 + +## 二、本章诉求 + +本节升级包括; +- 提供,快速的 Ollama DeepSeek 部署,支持 1.5b、7b、30b 模型。服务器小时价格很低,速度非常快。 +- 提供,pgAdmin管理工具部署(Docker+本地软件),用于操作 PG 向量库。 +- 提供,向量库自主创建和多模型配置,满足不同模型的向量库使用。 + +## 三、升级框架 + +### 1. POM 配置 + +```pom ++ +``` + +- Spring AI 目前最新版为 1.0.0-M6,[https://spring.io/projects/spring-ai#learn](https://spring.io/projects/spring-ai#learn) diff --git "a/docs/md/project/ai-knowledge/\347\254\25412\350\212\202\357\274\232\345\272\267\345\272\204\345\244\247\351\201\223\357\274\214\344\270\212\346\211\213 AI MCP \345\267\245\344\275\234\346\265\201.md" "b/docs/md/project/ai-knowledge/\347\254\25412\350\212\202\357\274\232\345\272\267\345\272\204\345\244\247\351\201\223\357\274\214\344\270\212\346\211\213 AI MCP \345\267\245\344\275\234\346\265\201.md" new file mode 100644 index 000000000..df9afd82c --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25412\350\212\202\357\274\232\345\272\267\345\272\204\345\244\247\351\201\223\357\274\214\344\270\212\346\211\213 AI MCP \345\267\245\344\275\234\346\265\201.md" @@ -0,0 +1,23 @@ +--- +title: 【更】第12节:康庄大道,上手 AI MCP 工作流 +pay: https://t.zsxq.com/am5PO +--- + +# 《DeepSeek RAG&MCP 增强检索知识库系统》第12节:康庄大道,上手 AI MCP 工作流 + +作者:小傅哥 +org.springframework.ai +spring-ai-bom +1.0.0-M6 +pom +import +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/GoWka](https://t.zsxq.com/GoWka) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +对接 Spring AI MCP,实现服务端 MCP 和 客户端 MCP,完成功能对接,体验 AI 工作流完成的指令动作。 + +## 二、本节重点 + +本节功能服务包括; +1. 增加,Spring AI MCP 框架接入。 +2. 对接,Spring AI MCP 共用服务端,如;[https://smithery.ai/](https://smithery.ai/)、[https://glama.ai/mcp/servers](https://glama.ai/mcp/servers) +3. 开发,Spring AI MCP 个人客户端,基于 Java 实现客户端。这块是一个独立的新工程组件。 diff --git "a/docs/md/project/ai-knowledge/\347\254\25413\350\212\202\357\274\214\351\201\223\345\261\261\345\255\246\346\265\267\357\274\214\345\256\236\347\216\260MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" "b/docs/md/project/ai-knowledge/\347\254\25413\350\212\202\357\274\214\351\201\223\345\261\261\345\255\246\346\265\267\357\274\214\345\256\236\347\216\260MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" new file mode 100644 index 000000000..0971be32d --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25413\350\212\202\357\274\214\351\201\223\345\261\261\345\255\246\346\265\267\357\274\214\345\256\236\347\216\260MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第13节,道山学海,实现MCP自动发帖服务 +pay: https://t.zsxq.com/WSM3k +--- + +# 《DeepSeek RAG&MCP 增强检索知识库系统》第13节,道山学海,实现MCP自动发帖服务 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/xTjYL](https://t.zsxq.com/xTjYL) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +分析 CSDN 文章发表接口,以 MCP 服务搭建的方式,实现一款 stdio 模式的 CSDN 发帖 MCP 服务。(后续开发 sse 模式) + +**注意**:不限于CSDN,你可以结合本节的学习,在任何一个平台使用它的接口,完成自动发帖服务。如,这里还有一个知识星球的发帖,也可以学习下之后对接实现一个 MCP 服务。地址:[https://bugstack.cn/md/road-map/http.html](https://bugstack.cn/md/road-map/http.html) + +## 二、功能流程 + +如图,实现 CSDN 发帖 MCP 服务流程; + +++ +- 首先,无论你是对接任何的平台,都是需要先获得他的接口服务。这种接口一种是平台提供了专门的对接接口,另外就是没有这样的接口,我们是通过浏览器访问网站,获得的接口。哪这些接口通过代码方式完成请求。 +- 之后,基于得到的接口,封装成可以调用的服务 service,这样 MCP 的入口工具,设定好入参信息,就可以调用底层的接口服务了。 +- 最后,当用户提问时,如果你实现了不止一个 CSDN 发帖的 MCP,也包括如星球发帖。那么你的 AI 工作流,是可以顺序的向这些平台自动发帖。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/\347\254\25414\350\212\202\357\274\232\346\265\267\347\272\263\347\231\276\345\267\235\357\274\214\344\270\212\347\272\277MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" "b/docs/md/project/ai-knowledge/\347\254\25414\350\212\202\357\274\232\346\265\267\347\272\263\347\231\276\345\267\235\357\274\214\344\270\212\347\272\277MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" new file mode 100644 index 000000000..89fa1fa42 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25414\350\212\202\357\274\232\346\265\267\347\272\263\347\231\276\345\267\235\357\274\214\344\270\212\347\272\277MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第14节,海纳百川,上线MCP自动发帖服务 +pay: https://t.zsxq.com/G5mog +--- + +# 《DeepSeek RAG&MCP 增强检索知识库系统》第14节,海纳百川,上线MCP自动发帖服务 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/W0u4s](https://t.zsxq.com/W0u4s) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +以 Jar 包的形式,打包 MCP 自动发帖服务,并以 stdio 方式引入到项目工程。再通过定时任务触达定时自动发帖。 + +## 二、功能流程 + +如图,以 stdio 方式,构建服务打包上线; + +++ +- 首先,将 mcp-server-csdn 以 maven 命令方式打一个 jar。IntelliJ IDEA 也可以直接通过界面操作打包 Jar(视频里会演示) +- 之后,将 ai-mcp-knowledge 以 maven 命令方式打一个 jar,并执行 Dockerfile 构建出可部署的镜像。注意,这里额外增加一个阿里云 Docker 镜像仓库,为的是让他提供搭理,方便我们云服务器部署的时候,可以快速拉取下来镜像。此外,如果说你以云服务器当做本机一样使用,在云服务器配置好 maven、git、java jdk 17,那么就可以在云服务器直接构建镜像,也就不需要额外拉取了。(`这部分内容在课程入口-编程环境-云服务器操作中有讲解`) +- 最后,通过 docker-compose 脚本配置上线部署。 diff --git "a/docs/md/project/ai-knowledge/\347\254\25415\350\212\202\357\274\232\345\267\235\346\265\201\344\270\215\346\201\257\357\274\214\345\256\236\347\216\260MCP\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\266\210\346\201\257\351\200\232\347\237\245\346\234\215\345\212\241.md" "b/docs/md/project/ai-knowledge/\347\254\25415\350\212\202\357\274\232\345\267\235\346\265\201\344\270\215\346\201\257\357\274\214\345\256\236\347\216\260MCP\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\266\210\346\201\257\351\200\232\347\237\245\346\234\215\345\212\241.md" new file mode 100644 index 000000000..561d77da8 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25415\350\212\202\357\274\232\345\267\235\346\265\201\344\270\215\346\201\257\357\274\214\345\256\236\347\216\260MCP\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\266\210\346\201\257\351\200\232\347\237\245\346\234\215\345\212\241.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第15节,川流不息,实现MCP微信公众号消息通知服务 +pay: https://t.zsxq.com/84IV7 +--- + +# 《DeepSeek RAG&MCP 增强检索知识库系统》第15节,川流不息,实现MCP微信公众号消息通知服务 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/Qlqkr](https://t.zsxq.com/Qlqkr) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +AI MCP 是可以让 AI 以工作流方式进行调用的,为了更好的体现这一点,同时也为了增强整体的自动发帖服务链路。本节我们实现一个微信公众号推送消息的 MCP 服务。 + +这一节暂时会先以 stdio 方式开发,之后下一节部署的时候,会把 CSDN、WeiXin 两个 MCP 服务都以 SSE 方式进行部署。让大家学习到不同的开发方式和部署方式。 + +## 二、功能流程 + +如图,自动发帖后,进行微信公众号,消息推送; + +++ +- 首先,CSDN 自动发帖是上一节实现的内容,本节要实现一个微信公众号推送模板消息的实现。 +- 之后,AI 调用两套 MCP,可以一次会话,也可以使用 ChatMemory 进行记忆完成2次对话处理 MCP 流程。 +- 最终,实现自动发帖后,完成消息通知给我们自己。点击通知信息可进入具体文章。 + diff --git "a/docs/md/project/ai-knowledge/\347\254\25416\350\212\202\357\274\232\346\201\257\346\201\257\347\233\270\351\200\232\357\274\214MCP \346\234\215\345\212\241\351\203\250\347\275\262\344\270\212\347\272\277\357\274\210sse \346\250\241\345\274\217\357\274\211.md" "b/docs/md/project/ai-knowledge/\347\254\25416\350\212\202\357\274\232\346\201\257\346\201\257\347\233\270\351\200\232\357\274\214MCP \346\234\215\345\212\241\351\203\250\347\275\262\344\270\212\347\272\277\357\274\210sse \346\250\241\345\274\217\357\274\211.md" new file mode 100644 index 000000000..7bd661a88 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\25416\350\212\202\357\274\232\346\201\257\346\201\257\347\233\270\351\200\232\357\274\214MCP \346\234\215\345\212\241\351\203\250\347\275\262\344\270\212\347\272\277\357\274\210sse \346\250\241\345\274\217\357\274\211.md" @@ -0,0 +1,32 @@ +--- +title: 【更】第16节:息息相通,MCP 服务部署上线(sse 模式) +pay: https://t.zsxq.com/Qexmh +--- + +# 《DeepSeek RAG&MCP 增强检索知识库系统》第16节:息息相通,MCP 服务部署上线(sse 模式) + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/J6kpc](https://t.zsxq.com/J6kpc) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +调整 mcp-server-csdn、mcp-server-weixin,两个 MCP 部署方式为 SSE 以及增加 Dockerfile 部署脚本。让服务支持以 sse 方式,被 ai-mcp-knowledge 调用。 + +## 二、功能流程 + +如图,以 sse 方式,构建服务打包上线; + +++ +- `SSE` (Server-Sent Events) ,是一种基于 HTTP 的**服务器向客户端单向实时推送数据**的通信技术,常用于实现实时更新功能。 +- 在 Spring AI 框架中,SSE 的实现方式包括 spring-ai-starter-mcp-server-webmvc、spring-ai-starter-mcp-server-webflux 两种框架实现。课程以 webflux 进行使用。 +- SSE 的部署方式,要把每个 mcp 服务,通过 docker 进行部署,提供出可用的接口。之后 ai-mcp-knowledge 工程则配置 sse 方式进行使用。 + +> 接下来我们介绍,如何配置 sse 方式进行对接。这部分主要是配置文件的变化,以及 1.0.0-M6 版本号关于 sse bug 的处理。 + + diff --git "a/docs/md/project/ai-knowledge/\347\254\2541\350\212\202\357\274\232AI RAG \347\237\245\350\257\206\345\272\223\357\274\214\351\241\271\347\233\256\344\273\213\347\273\215.md" "b/docs/md/project/ai-knowledge/\347\254\2541\350\212\202\357\274\232AI RAG \347\237\245\350\257\206\345\272\223\357\274\214\351\241\271\347\233\256\344\273\213\347\273\215.md" new file mode 100644 index 000000000..4ecb2c07a --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2541\350\212\202\357\274\232AI RAG \347\237\245\350\257\206\345\272\223\357\274\214\351\241\271\347\233\256\344\273\213\347\273\215.md" @@ -0,0 +1,50 @@ +--- +title: 【更】第1节:AI RAG 知识库,项目介绍 +pay: https://t.zsxq.com/bV1QU +--- + +# 《DeepSeek RAG 知识库》第1节:AI RAG 知识库,项目介绍 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/ssFF0](https://t.zsxq.com/ssFF0) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +AI 开发能力,几乎已经是每个工程师必备的能力。在我们去看各个公司招聘要求时,经常会看到具备 AI、AIGC、RAG 能力优先。因为这些东西可以帮助企业提效,结合AI增强自身产品能力。所以,学习一下这样的东西是非常重要的! + +在 AI 的使用场景中,我们考虑过;代码评审、需求开发、智能客服、SQL编写、需求分析等。但这些东西的回答,会随着我们发给 AI 的内容来解答,但受到AI对话的上线文字数限制,不太可能把且有的所有资料都一次发给 AI 进行解答。所以这里引出了企业知识库构建的诉求。它就是 RAG! + +RAG(检索增强生成)技术正在重构互联网知识规则,RAG不仅仅是一个简单的知识存储工具,它是一种将检索与生成相结合的智能系统,能够从海量数据中快速提取相关信息,并结合上下文生成精准、连贯的答案。对于互联网公司而言,构建自己的RAG知识库,意味着能够为用户提供更加个性化、专业化的服务,同时也能够在激烈的市场竞争中,建立起独特的技术壁垒。 + +虽然市面有一些开源的 RAG,但深入使用仍不能解决所有的场景问题,尤其是你想自定义业务诉求,解析更多场景,更复杂的知识库时候,它们就显得不合适了。**并且研发人员,自身应该具备 RAG 开发能力。** + +所以,我们来啦!构建一款属于自己的小型的 RAG 知识库,以此掌握 RAG 相关知识,扩宽自己的技术边界。 + +> 此项目小巧轻量,扩展性好,可以快速学习完成,掌握 RAG 知识库搭建和使用。 + +## 一、项目简述 + +基于 Ollama 部署 DeepSeek 大模型,提供 API 接口。运用 Spring AI 框架承接接口实现 RAG 知识库能力。这款 RAG 知识库支持文本解析,以及 Git 代码库的解析。 + +工程结构采取2层架构,轻量化设计,重点在于突出 RAG 功能实现。以此方式,帮助大家更好的理解,除了工程架构外的 RAG 知识库搭建。方便大家快速上手学习。 + +## 二、什么是 RAG + +[RAG:检索增强生成](https://www.promptingguide.ai/zh/techniques/rag) + +它通用语言模型通过微调就可以完成几类常见任务,比如分析情绪和识别命名实体。这些任务不需要额外的背景知识就可以完成。 + +要完成更复杂和知识密集型的任务,可以基于语言模型构建一个系统,访问外部知识源来做到。这样的实现与事实更加一性,生成的答案更可靠,还有助于缓解“幻觉”问题。 + +Meta AI 的研究人员引入了一种叫做检索增强生成(Retrieval Augmented Generation,RAG)的方法来完成这类知识密集型的任务。RAG 把一个信息检索组件和文本生成模型结合在一起。RAG 可以微调,其内部知识的修改方式很高效,不需要对整个模型进行重新训练。 + +RAG 会接受输入并检索出一组相关/支撑的文档,并给出文档的来源(例如维基百科)。这些文档作为上下文和输入的原始提示词组合,送给文本生成器得到最终的输出。这样 RAG 更加适应事实会随时间变化的情况。这非常有用,因为 LLM 的参数化知识是静态的。RAG 让语言模型不用重新训练就能够获取最新的信息,基于检索生成产生可靠的输出。 + +Lewis 等人(2021)提出一个通用的 RAG 微调方法。这种方法使用预训练的 seq2seq 作为参数记忆,用维基百科的密集向量索引作为非参数记忆(使通过神经网络预训练的检索器访问) + ++\ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/\347\254\2542\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\347\237\245\350\257\206\345\272\223\345\267\245\347\250\213&\346\217\220\344\272\244\344\273\243\347\240\201.md" "b/docs/md/project/ai-knowledge/\347\254\2542\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\347\237\245\350\257\206\345\272\223\345\267\245\347\250\213&\346\217\220\344\272\244\344\273\243\347\240\201.md" new file mode 100644 index 000000000..3b7af907d --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2542\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\347\237\245\350\257\206\345\272\223\345\267\245\347\250\213&\346\217\220\344\272\244\344\273\243\347\240\201.md" @@ -0,0 +1,39 @@ +--- +title: 【更】第2节:初始化知识库工程&提交代码 +pay: https://t.zsxq.com/VZSnk +--- + +# 《DeepSeek RAG 知识库》第2节:初始化知识库工程&提交代码 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/07kXb](https://t.zsxq.com/07kXb) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +教会小伙伴使用 IntelliJ IDEA 创建多模块工程,并介绍分层模块的用途。以及相关基础环境安装。 + +课程会循序渐进的从0到1,逐步带着大家完成项目的开发。开局只有一把 IntelliJ IDEA,完成项目后你可以学习到;业务、架构、设计、方案、配置、部署(Linux、Docker)等各项知识。 + +## 二、如何开始 + +站在读者视角,该怎么学习呢?这里做个必要说明和前置的知识提供。 + +### 1. 前置学习 + +小伙伴在学习的时候,可以依照课程的方式进行创建项目、变更配置、启动测试。这里有一些前置学习,包括:Git、Maven、Docker,课程已经准备好了,可以刷下; + +- Git:[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html) +- Maven:[https://bugstack.cn/md/road-map/maven.html](https://bugstack.cn/md/road-map/maven.html) +- Docker:[https://bugstack.cn/md/road-map/docker-what.html](https://bugstack.cn/md/road-map/docker-what.html) - `入门 Docker 必看` +- Docker 镜像:[https://t.zsxq.com/2DGGY](https://t.zsxq.com/2DGGY) + +另外课程会使用 Java JDK 17、Maven 3.8.x,软件已经提供好,可以直接下载;[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) - `附件内含有配置好阿里云镜像的 Maven` + +### 2. 开始学习 + +1. 你需要通过 `git clone https://xxx.git` 命令,或者 IntelliJ IDEA 自动的检出工程方式,把项目工程检出到本地。关于如何使用Git检出项目,在前置学习里提供了教程。 +2. 检出代码后,你可以通过 IntelliJ IDEA 打开项目,并按照每一节最开始说明的本节对应的代码分支,把工程代码切换到对应的这一节。 +3. 接下来你可以通过课程的视频和小册以及提供的代码进行学习,并跟随课程每节要完成的内容,一步步操作。过程中可以参考课程的代码进行学习。如果自己的代码运行出问题的时候,可以运行课程的代码验证是环境问题还是个人代码问题。**另外注意运行课程代码,要修改对应的环境为你的本地环境,postgresql、redis等** \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/\347\254\2543\346\216\245\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\346\216\245\345\217\243\345\256\236\347\216\260.md" "b/docs/md/project/ai-knowledge/\347\254\2543\346\216\245\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\346\216\245\345\217\243\345\256\236\347\216\260.md" new file mode 100644 index 000000000..a0aff68f5 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2543\346\216\245\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\346\216\245\345\217\243\345\256\236\347\216\260.md" @@ -0,0 +1,30 @@ +--- +title: 【更】第3节:Ollama DeepSeek 流式应答接口实现 +pay: https://t.zsxq.com/h5VxZ +--- + +# 《DeepSeek RAG 知识库》第3节:Ollama DeepSeek 流式应答接口实现 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/4DbVB](https://t.zsxq.com/4DbVB) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +引入 Spring AI 框架组件,对接 Ollama DeepSeek 提供服务接口。包括;普通应答接口和流式接口。 + +## 二、技术方案 + +对接 AI 的方式有很多,比如;`AI 官网提供的 SDK`、`自研 SDK 组件`、`one-api 服务类统一包装接口`,其中自研类 SDK 已经在星球 openai 项目对接 chatglm、chatgpt 的时候进行设计,为了差异化学习到不同技术,本项目会采用 Spring AI 框架进行对接。 + +++ +官网:[https://spring.io/projects/spring-ai](https://spring.io/projects/spring-ai) + +Spring AI 支持;OpenAI,Microsoft,Amazon,Google和Ollama,大模型的对接。其他不属于这个范围的,可以通过 [one-api](https://github.com/songquanpeng/one-api) 配置,统一转换为 OpenAI 接口服务格式进行使用。 + + diff --git "a/docs/md/project/ai-knowledge/\347\254\2544\350\212\202\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\351\241\265\351\235\242\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/\347\254\2544\350\212\202\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\351\241\265\351\235\242\345\257\271\346\216\245.md" new file mode 100644 index 000000000..8797a9c43 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2544\350\212\202\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\351\241\265\351\235\242\345\257\271\346\216\245.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第4节:Ollama DeepSeek 流式应答页面对接 +pay: https://t.zsxq.com/PN4lw +--- + +# 《DeepSeek RAG 知识库》第3节:Ollama DeepSeek 流式应答接口实现 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/f82uj](https://t.zsxq.com/f82uj) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +实现一款简单的UI界面,与服务端 Ollama DeepSeek AI 进行对接。 + +## 二、技术方案 + +自从有了 AI 工具以后,所有以前头疼前端页面开发的后端程序员👨🏻💻,都漏出了友善😊微笑! + +主要我们可以清楚地表达编写页面诉求,AI 工具就可以非常准确且迅速的完成代码的实现。这里我们可以选择的 AI 有很多,包括;OpenAI、DeepSeek、智谱AI等等。 + +- [https://www.deepseek.com/](https://www.deepseek.com/) +- [https://v0.dev/](https://v0.dev/) +- [https://chatglm.cn/](https://chatglm.cn/) +- [https://openai.itedus.cn/](https://openai.itedus.cn/) + +>其他更多也可以网络检索下。总有一款你是可以使用的。 + + diff --git "a/docs/md/project/ai-knowledge/\347\254\2545\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\344\270\212\344\274\240\343\200\201\350\247\243\346\236\220\345\222\214\351\252\214\350\257\201.md" "b/docs/md/project/ai-knowledge/\347\254\2545\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\344\270\212\344\274\240\343\200\201\350\247\243\346\236\220\345\222\214\351\252\214\350\257\201.md" new file mode 100644 index 000000000..a2521598b --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2545\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\344\270\212\344\274\240\343\200\201\350\247\243\346\236\220\345\222\214\351\252\214\350\257\201.md" @@ -0,0 +1,36 @@ +--- +title: 【更】第5节:Ollama RAG 知识库上传、解析和验证 +pay: https://t.zsxq.com/fTK4R +--- + +# 《DeepSeek RAG 知识库》第5节:Ollama RAG 知识库上传、解析和验证 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/PM15B](https://t.zsxq.com/PM15B) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +以大模型向量存储的方式,提交本地文件到知识库。并在 AI 对话中增强检索知识库符合 AI 对话内容的资料,合并提交问题。 + +## 二、技术方案 + +以 Spring AI 提供的向量模型处理框架,将上传文件以 TikaDocumentReader 方式进行解析,再通过 TokenTextSplitter 拆分文件。完成这些操作后,在遍历文档添加标记。标记的作用是为了可以区分不同的知识库内容。完成这些动作后,把这些拆解并打标的文件存储到 postgresql 向量库中。 + +本技术方案旨在利用 Spring AI 提供的向量模型处理框架,对上传的文件进行解析、拆分、标记,并将处理后的数据存储到 PostgreSQL 向量库中。通过这一流程,可以实现对文件内容的高效管理和检索,特别是在需要区分不同知识库内容的场景下。 + +### 1. 技术组件 + +- **Spring AI**: 提供向量模型处理框架,支持文件的解析、拆分和向量化操作。 +- **TikaDocumentReader**: 用于解析上传的文件,支持多种文件格式(如 MD、TXT、SQL 等)。 +- **TokenTextSplitter**: 用于将解析后的文本内容拆分为更小的片段,便于后续处理和存储。 +- **PostgreSQL 向量库**: 用于存储处理后的文本向量数据,支持高效的相似性搜索和检索。 + +### 2. 方案流程 + +#### 2.1 文件上传与解析 + +1. **文件上传**: 用户通过前端界面或 API 上传文件,文件可以是多种格式(如 MD、TXT、SQL 等)。 +2. **文件解析**: 使用 `TikaDocumentReader` 对上传的文件进行解析,提取出文本内容。`TikaDocumentReader` 能够处理多种文件格式,并提取出结构化的文本数据。 \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/\347\254\2546\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\346\216\245\345\217\243\346\234\215\345\212\241\345\256\236\347\216\260.md" "b/docs/md/project/ai-knowledge/\347\254\2546\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\346\216\245\345\217\243\346\234\215\345\212\241\345\256\236\347\216\260.md" new file mode 100644 index 000000000..646517066 --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2546\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\346\216\245\345\217\243\346\234\215\345\212\241\345\256\236\347\216\260.md" @@ -0,0 +1,34 @@ +--- +title: 【更】第6节:Ollama RAG 知识库接口服务实现 +pay: https://t.zsxq.com/EvnBN +--- + +# 《DeepSeek RAG 知识库》第6节:Ollama RAG 知识库接口服务实现 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/yNiZl](https://t.zsxq.com/yNiZl) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +以上一节知识库的测试案例,将这部分功能以接口方式提供。包括;知识库的上传、选择和使用。 + +## 二、技术方案 + +知识库的上传和使用是明确的,但选择哪个知识库是需要把对应的知识库记录起来。这里我们选择 Redis 列表进行记录。如果是公司里大型的知识库,还需要使用 MySQL 数据库进行存储。 + +## 三、功能实现 + +### 1. 工程结构 + +### 2. 引入组件 + +```java ++ +``` \ No newline at end of file diff --git "a/docs/md/project/ai-knowledge/\347\254\2547\350\212\202\357\274\232\345\237\272\344\272\216AI\345\267\245\345\205\267\357\274\214\350\256\276\350\256\241\347\237\245\350\257\206\345\272\223UI\345\222\214\346\216\245\345\217\243\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/\347\254\2547\350\212\202\357\274\232\345\237\272\344\272\216AI\345\267\245\345\205\267\357\274\214\350\256\276\350\256\241\347\237\245\350\257\206\345\272\223UI\345\222\214\346\216\245\345\217\243\345\257\271\346\216\245.md" new file mode 100644 index 000000000..974f043ea --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2547\350\212\202\357\274\232\345\237\272\344\272\216AI\345\267\245\345\205\267\357\274\214\350\256\276\350\256\241\347\237\245\350\257\206\345\272\223UI\345\222\214\346\216\245\345\217\243\345\257\271\346\216\245.md" @@ -0,0 +1,35 @@ +--- +title: 【更】第7节:基于AI工具,设计知识库UI和接口对接 +pay: https://t.zsxq.com/Jc7fE +--- + +# 《DeepSeek RAG 知识库》第7节:基于AI工具,设计知识库UI和接口对接 + +作者:小傅哥 +org.redisson +redisson-spring-boot-starter +3.44.0 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/BeT7k](https://t.zsxq.com/BeT7k) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +基于我们要实现对话和知识的上传使用,使用AI工具完成UI页面的实现。 + +## 二、技术方案 + +找一个合适的喜欢的AI对话页面,截取上传到 AI 工具,并告知基于这样的 UI 效果完成页面的实现。之后在告诉 AI 处理接口的对接。当然也可以把接口一起交给 AI 工具进行处理。 + +- [https://www.deepseek.com/](https://www.deepseek.com/) +- [https://v0.dev/](https://v0.dev/) +- [https://chatglm.cn/](https://chatglm.cn/) +- [https://openai.itedus.cn/](https://openai.itedus.cn/) + +>其他更多也可以网络检索下。总有一款你是可以使用的。 + +## 三、功能实现 + +### 1. 对话页面 + ++diff --git "a/docs/md/project/ai-knowledge/\347\254\2548\350\212\202\357\274\232Git\344\273\223\345\272\223\344\273\243\347\240\201\345\272\223\350\247\243\346\236\220\345\210\260\347\237\245\350\257\206\345\272\223.md" "b/docs/md/project/ai-knowledge/\347\254\2548\350\212\202\357\274\232Git\344\273\223\345\272\223\344\273\243\347\240\201\345\272\223\350\247\243\346\236\220\345\210\260\347\237\245\350\257\206\345\272\223.md" new file mode 100644 index 000000000..ecf59d99a --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2548\350\212\202\357\274\232Git\344\273\223\345\272\223\344\273\243\347\240\201\345\272\223\350\247\243\346\236\220\345\210\260\347\237\245\350\257\206\345\272\223.md" @@ -0,0 +1,34 @@ +--- +title: 【更】第8节:Git仓库代码库解析到知识库 +pay: https://t.zsxq.com/ByovV +--- + +# 《DeepSeek RAG 知识库》第8节:Git仓库代码库解析到知识库 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/EwqZH](https://t.zsxq.com/EwqZH) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +对知识库的解析进行扩展,增加Git仓库解析。用户填写Git仓库地址和账密,即可拉取代码并上传到知识库,之后就可以基于这套代码进行使用啦。 + +## 二、技术方案 + +引入 JGit 操作库到工程中,用于执行 Git 命令拉取代码仓库。之后对代码库文件进行遍历,依次解析分割上传到向量库中。 + +## 三、功能实现 + +### 1. 工程结构 + +### 2. 引入组件 + +```java ++ +``` diff --git "a/docs/md/project/ai-knowledge/\347\254\2549\350\212\202\357\274\232\346\211\251\345\261\225OpenAI\346\250\241\345\236\213\345\257\271\346\216\245\357\274\214\344\273\245\345\217\212\345\256\214\346\225\264AI\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/\347\254\2549\350\212\202\357\274\232\346\211\251\345\261\225OpenAI\346\250\241\345\236\213\345\257\271\346\216\245\357\274\214\344\273\245\345\217\212\345\256\214\346\225\264AI\345\257\271\346\216\245.md" new file mode 100644 index 000000000..841bf2c1d --- /dev/null +++ "b/docs/md/project/ai-knowledge/\347\254\2549\350\212\202\357\274\232\346\211\251\345\261\225OpenAI\346\250\241\345\236\213\345\257\271\346\216\245\357\274\214\344\273\245\345\217\212\345\256\214\346\225\264AI\345\257\271\346\216\245.md" @@ -0,0 +1,33 @@ +--- +title: 【更】第9节:扩展OpenAI模型对接,以及完整AI对接 +pay: https://t.zsxq.com/YJxRy +--- + +# 《DeepSeek RAG 知识库》第9节:扩展OpenAI模型对接,以及完整AI对接 + +作者:小傅哥 +org.eclipse.jgit +org.eclipse.jgit +5.13.0.202109080827-r +
博客:[https://bugstack.cn](https://bugstack.cn) +
博客:[https://t.zsxq.com/1JLUq](https://t.zsxq.com/1JLUq) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +基于 Spring AI 扩展 OpenAI 模型对接,这样我们就可以使用一些代理的 ChatGPT 接口完成对话了。最终在完成全部接口与页面的对接。 + +## 二、技术方案 + +Spring AI 框架的好处,就是可以以统一的方式直接配置使用各类大模型。像是一些 Spring AI 没有直接对接的大模型,可以基于 one-api 配置转发,用统一 OpenAI 方式进行对接。 + +## 三、功能实现 + +### 1. 工程结构 + +### 2. 引入组件 + +```java ++ +``` \ No newline at end of file diff --git a/docs/md/project/ai-mcp-gateway/ai-mcp-gateway.md b/docs/md/project/ai-mcp-gateway/ai-mcp-gateway.md new file mode 100644 index 000000000..6ac01e671 --- /dev/null +++ b/docs/md/project/ai-mcp-gateway/ai-mcp-gateway.md @@ -0,0 +1,121 @@ +--- +title: AI MCP Gateway 网关服务系统 +lock: no +--- + +# 《AI MCP Gateway 网关服务系统》 - 为各类应用服务接口,便捷转换为MCP服务而设计。 + +作者:小傅哥 +org.springframework.ai +spring-ai-openai-spring-boot-starter +
博客:[https://bugstack.cn](https://bugstack.cn) +
课程:[https://t.zsxq.com/SNsgH](https://t.zsxq.com/SNsgH) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +大家好,我是技术UP主小傅哥。 + +两年多了,从2023年1月起,小傅哥就开始关注AI、跟进AI,落地 AI 技术相关的场景项目。`做了 AI 问答自动回复助手`、`OpenAI 应用服务(含支付买额度 + OpenAI SDK 开发)`、`OpenAI 代码评审`、`Ai Agent 智能体(RAG、MCP)`,让一众伙伴积累到了丰富的AI应用开发技术,可以满足当下互联网AI应用开发招聘诉求。**那么接下来,关于 AI 小傅哥还要带着大家什么呢?🤔** + +++ +**足够高频,互联网AI应用场景,必备项目!** + +现阶段,众多互联网公司把 AI 作为公司的战略目标,基于 AI 为公司各类场景提效。甚至不少公司要求程序员的编码,AI 占比要有30%以上(来自于某论坛研发分享)。还在各个部门设立 AI 应用创新组。 + +而 AI 的主要提效方式,则是自研实现或基于 Dify 搭建一套 AI Agent 智能体。通过智能体把公司的文档资料转换为 RAG 知识库,再通过 MCP 协议对接各类应用的服务接口。这样我们对 AI Agent 智能体下达命令后,就可以进行分析,规划,执行,直至产出最终的结果。更多关于智能体的实现介绍,可以参考[《AI Agent 智能体设计实现》](https://mp.weixin.qq.com/s/dwsfadYKs7Uy4YvHfLFsVQ) + +**死鬼,重点来啦!** + +公司里为了扩展智能体可提效的场景,就要把现有的公司的各类应用服务接口,`日志的`、`监控的`、`服务的`、`交易的`、`结算的`、`营销的`、`人群的`、`数据的`等等,都要转换为 AI Agent 智能体可识别的 MCP 服务接口。这样就可能有成百上千,成千上完,甚至几十万个接口要做实现。 + +那肯定不能每个接口都写一遍 MCP 服务!所以,对于这样的场景问题,公司里会做一套统一的 MCP Gateway 网关服务系统,其他个各类接口(http、rpc),都可以通过一键配置的方式转换为 MCP 协议类型的接口,被 AI 可以识别和使用。 + ++
++ +而小傅哥这次带着你做的 AI 类项目,就是实现一套这样的 **MCP GateWay 网关服务系统**。小傅哥,会带着你,实现MCP服务,分析 MCP 协议,通过做AI服务代理、网页协议对接、JSON-RPC2标准等方式,把 MCP 协议厘清,之后在手把手的带着你编写响应式的 MCP Gateway 网关能力(鉴权也可以放到网关做)。 + +> 🧧 文末提供了,小傅哥所有编程实战项目获取方式,一次加入即可获得17个已完结的和本次新开展的。 + +## 一、能学到啥 + +该项目是 AI 应用场景下的通用技术服务组件类项目,以解决接口 MCP 协议转换而设计实现。在整个项目中,你可以积累到关于 MCP 协议的深度分析,学习分析协议的技巧和方案,并积累关于设计一个组件解决通用场景问题的能力。 + +- 【前端】基于 html、js、div、css,设计 MCP 协议分析页面。 +- 【前端】基于 html、js、div、css,构建一套服务端管理系统,便于 MCP 协议的录入和使用。 +- 【后端】MCP 协议的分析、理解、运用。掌握 MCP 开发和使用的能力。 +- 【后端】基于 MCP 协议的分析和网关设计诉求,构建网关服务库表。 +- 【后端】运用 DDD 分层架构,设计 MCP 网关服务系统。 +- 【后端】构建AI代理服务,断点调试分析 MCP 协议。 +- 【后端】设计 MCP 分析协议网页服务,链接 MCP 服务,观察 MCP 协议。 +- 【后端】基于 Flux 响应式接口,设计实现 MCP 协议的 sse 连接、initialize 初始化响应、tools 工具的 list 反馈和 call 调用等。 +- 【后端】提供 MCP 协议的动态录入和加载能力,以及提供录入接口组件,便于其他系统可快速录入。 +- 【后端】设计 MCP 网关协议鉴权服务,确保 MCP 服务使用的安全性。 +- 【后端】熟练使用 okhttp3、retrofit2 框架,动态对接 HTTP 服务接口,用于 MCP 协议 toos/call 工具调用。 +- 【后端】扩展学习 rpc 泛化调用,给 MCP 协议提供使用。其实有了这套东西,还可以对接如硬件设备 rs232 串口通信,让 MCP 服务,管理你的硬件设备。 +- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用,以及在本地构建前后端镜像。 +- 【运维】熟练掌握 Git、GitCode,对工程代码的管理,推送、拉取、切换分支、合并代码等操作。 + +此外,小傅哥对于每个章节还讲解了章节的诉求、流程的设计,之后再到方案实现和功能验证。并在每个章节留有作业让大家练习。当然这还没有完,你知道小傅哥这个架构师画图还是非常牛逼的,所以你还能看到各种画图的技巧,耳濡目染的把这些东西学习成自己的本事!~ + +## 二、项目介绍 + +本项目是 AI Agent 智能体,关于 MCP 协议对接的通用网关服务项目,以解决各类业务接口便捷转换为 MCP 协议而设计实现。通过这样的配置,可以大大的简化从普通http、rpc接口到 MCP 协议的转换操作。这样的项目,也是每个互联网公司在做 AI Agent 智能体时,必备的基础设施项目。 + +### 1. 更新计划 + +本项目目前已经做了基础的筹备和验证,计划于10.26日开始更新课程。整体课程预计在20+节左右。带着你完整的实现一套 AI MCP Gateway 网关服务项目。 + +### 2. 项目资料 + +#### 2.1 协议分析 - 页面 + ++
++ +- 编写了一套网页对接 MCP 服务的页面,把以前直接在 AI Agent 配置 MCP 协议使用的过程,通过页面一步步对接和使用的方式进行展示。 +- 有了这样一个操作过程步骤,你可以更加清晰的了解到 MCP 的执行过程,也能更好的为后续做 MCP 网关服务实现打下基础。 + +#### 2.2 协议分析 - 代理 + ++
++ +- 为了更好的体现出 AI 和 MCP 的交互,这里小傅哥会带着你做一个 AI 的代理接口,来调试观察 MCP 协议的传输。 + +#### 2.3 初始版本 - 案例 + ++
++- 小傅哥这里先做了一个初始的 demo 版本,跑通 MCP 网关,后续会设计整套 DDD 架构,完整整体协议和服务的对接。 + +## 三、课程大纲 + +**不同于网上demo项目。小傅哥带着你做的项目,是一步步,一个个章节的带着大家从0到1的方式,进行分析、设计和开发。是一个纯手把手教大家学习实战技术的项目!** 大家可以先看看课程的大纲,就知道可以学习到哪些东西了。 + +- 第1节:项目功能需求分析 +- 第2节:项目系统架构设计 +- 第3节:MCP 功能服务实现 +- 第4节:AI 服务代理实现 +- 第5节:通过AI 服务代理,分析 MCP 协议 +- 第6节:通过设计网页对接,分析 MCP 协议 +- 第7节:通过 json-rpc2 标准,官网资料,总结 MCP 协议 +- 第8节:设计网关服务端系统,讲解模块关系 +- 第9节:设计拆分领域模型结构 +- 第10节:设计需求服务库表 +- 第11节:网关协议功能编写(1、2、3、4),分步骤设计实现 +- 第12节:网关协议与数据库表对接 +- 第13节:网关协议与http接口对接 +- 第14节:网关协议与rpc接口对接 +- 第15节:网关协议能力管理端编写(1、2、3、4) +- 第16节:MCP 网关服务打包上线 + +随着课程开展,陆续更新课程目录,也会有一些新的内容加入。 + +>课程包括;视频、小册、1 对 1 答疑解惑、专属VIP项目交流群,并且提供简历编写模板结构的一条龙🐲服务。让你学习后,直接拉开与还在玩具项目其他人的差距,面试脱颖而出提高竞争力!! + diff --git a/docs/md/project/ai-mcp-gateway/none.md b/docs/md/project/ai-mcp-gateway/none.md new file mode 100644 index 000000000..f64218b2f --- /dev/null +++ b/docs/md/project/ai-mcp-gateway/none.md @@ -0,0 +1,15 @@ +--- +title: 新章节,编写中 +lock: no +--- + +# 新章节,编写中 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) + +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、前言 + +... 新章节,编写中 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2541-1\350\212\202\357\274\232\347\275\221\345\205\263\351\234\200\346\261\202\345\210\206\346\236\220.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2541-1\350\212\202\357\274\232\347\275\221\345\205\263\351\234\200\346\261\202\345\210\206\346\236\220.md" new file mode 100644 index 000000000..bba7f38a4 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2541-1\350\212\202\357\274\232\347\275\221\345\205\263\351\234\200\346\261\202\345\210\206\346\236\220.md" @@ -0,0 +1,64 @@ +--- +title: 【更】第1-1节:网关需求分析 +pay: https://t.zsxq.com/f6fiZ +--- + +# 《AI MCP Gateway 网关服务系统》第1-1节:网关需求分析 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/i8tV1](https://t.zsxq.com/i8tV1) + +>大家好,我是技术UP主小傅哥。 + +今天是我们 **《AI MCP Gateway 网关服务系统》** 项目学习的第1节课程,小傅哥会带着大家,以互联网公司正规的承接产品需求到开发部署上线的流程,带着大家以第一主人公视角的方式进行学习。这样既可以保证你学习到项目内容,也能了解到公司里正规的开发模式,以后进入到公司也可以很好的融入团队,承接项目需求。加油💪🏻!让我们开启新项目之旅! + +## 一、本章诉求 + +站在产品视角,分析 AI MCP Gateway 网关服务系统,这样一个产品功能需求的背景、诉求和目的。 + +需求是怎么来的呢? + +作为互联网公司里的研发,我们通常都是从业务产品经理那承接需求,评审 PRD 文档,之后研发进行详细设计,给出设计文档在评审,评审通过后开始进入编码开发,以及推进后续的测试和上线。 + +那么,还有一类需求是不需要业务产品经理的,往往是纯技术产品经理或者研发和技术一起驱动的,这类的需求包括,系统的重构、组件的设计、框架的升级等。他们虽然也是需求,但不直接影响到产品经理的业务需求,所以往往由技术产品或者研发推动。 + +所以,像是 AI MCP Gateway 网关服务系统,是附属于 AI 应用开发部门的项目,一般是由 AI 技术产品经理推动,这类产品经理,往往比纯业务产品经理要多一些技术储备的。虽然他们编码不熟练,但对技术是有不错的储备,可以很好的规划和推进技术产品。 + +## 二、项目背景 + +MCP 协议的定义和发布,改变了我们使用 AI 的形态。 + +LLM 大模型第一次以 chatgpt 问世时,就足以震撼到我们。它具备各行各业的知识储备,可以识别人类语言,可以完成逻辑关系推理。在很长一段时间里,我们都是把问题抛给大模型,大模型回答后,我们在根据它的回复,复制粘贴到具体的场景进行处理。 + +但大模型不能无中生有,不能根据你的提问,直接帮你完成最终的处理。如;帮我查询最近一天内数据库账户表写入的数据量,这是做不到的,因为大模型并不能直接连接到我们的数据库或者其他任何服务。 + +在 2023 年前,如果想让大模型和程序代码互动,我们经常做的方式是写提示词,告诉大模型我的程序具备什么样的能力,有什么样的接口格式,你需要分析我的问题,并按照最终的执行给出结构化参数。json 格式为 `{"function":"query_user_account","arguments":{"sc":"渠道值"}}` 之后再根据大模型的结果调用对应的程序方法。不过以上方式执行起来的误差较大,经常是需要慢慢微调提示词。 + +到了 2023年6月,OpenAI 发布 gpt-3.5-turbo-0613 模型,给 API 的调用提供了 Function Calling 的能力,只需要在请求 API 的时候传入 functions 参数,告知大模型本地有哪些函数方法可以被调用使用即可。到了 2023年11月,gpt-3.5-turbo-1106 发布,这回开始支持 tools 函数,我们可以在提问的时候,进行网络检索,天气对接。但是这些功能代码, 都被嵌入到大模型调用中,编写起来耦合在一块,维护起来很麻烦。 + +直至到2024年11月,Anthropic 发布了 MCP 协议,将 tools 的封装单独抽离到独立的服务,这种服务称之为 MCP 服务,然后通过远程协议的模式提供给大模型调用。而 MCP 协议的主要作用是将服务转换为可以被大模型识别的格式结构(后面章节会细分析 MCP 协议)。 + +**MCP 为何重要?** + +- MCP 在构建或与 AI 应用程序或代理集成时减少了开发时间和复杂性。 +- MCP 提供对数据源、工具和应用程序生态系统的访问,这将增强功能并改善最终用户体验。 +- MCP 可产生功能更强大的 AI 应用程序或代理,它们可以在必要时访问您的数据并代表您采取行动。 + +++ +自从有了 MCP 协议以后,市面上开始出现各类的 AI Agent 智能体服务,如被大家熟知的 `Dify`、`Corz`、`Trae.ai/Cursor` 等。这些都是通用的智能体服务,可以解决市面上大部分通用场景问题。 + +到这以后,各个公司开启了自己的 AI Agent 智能体实现,对公司里自身业务场景进行提效。如账户服务、交易订单、计息计罚、还款计划等,做成智能客户和AI运营工具,都可以为企业提效。那么这里就有一个问题,这些接口想被大模型识别,就要开发为 MCP 协议服务,只有 MCP 协议才能被大模型识别的协议,公司里的各项服务要想被大模型调用,就要编写为一个个的 MCP Server 服务端,这个工作量是非常大的。 + ++
++ +所以,为了解决需要把大量接口开发成 MCP 协议服务的工作,我们可以设计一个 MCP 网关服务系统。它的核心工作原理在于,设计实现一套 MCP 协议的统一服务入口,管理和使用动态化注册的 HTTP/RPC 服务接口。MCP 协议的接口会被接入 MCP 服务的大模型,进行调用,核心过程包括;`建立sse连接创建会话ID`、`初始化服务`、`获取 tools 工具列表`、`响应工具调用`。这些内容,小傅哥会在后续的协议分析中带着大家学习。 + +综上,当我们有了一套 MCP 网关以后,就可以把我们各项所需的接口,快速🔜转换为 MCP 协议,配置给 AI Agent 智能体系统进行使用啦。这也是我们本次课程的最终目的。 + + diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2541-2\350\212\202\357\274\232\347\263\273\347\273\237\345\273\272\346\250\241\350\256\276\350\256\241.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2541-2\350\212\202\357\274\232\347\263\273\347\273\237\345\273\272\346\250\241\350\256\276\350\256\241.md" new file mode 100644 index 000000000..2ad3c04f6 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2541-2\350\212\202\357\274\232\347\263\273\347\273\237\345\273\272\346\250\241\350\256\276\350\256\241.md" @@ -0,0 +1,24 @@ +--- +title: 【更】第1-2节:系统建模设计 +pay: https://t.zsxq.com/FKXfD +--- + +# 《AI MCP Gateway 网关服务系统》第1-2节:系统建模设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/74OwC](https://t.zsxq.com/74OwC) + +>大家好,我是技术UP主小傅哥。 + +## 一、本章诉求 + +按照 AI MCP Gateway 网关功能实现诉求,对系统服务进行建模设计。包括;用例图、四色建模拆解、工程模型分析。 + +## 二、架构选型 + +此项目会选择 DDD 领域驱动设计的方式,进行系统建模和功能设计。那为啥选择 DDD 架构呢? + +因为 DDD 架构的四色建模方法可以更好的分析场景需求模型,同时它对应的六边形架构设计,非常合理的划分了微服务的各项单元功能。如;http、redis、mysql等都有自己的分层规划,同时又为领域服务与基础设施层的设计做了依赖倒置(这样的思想在Spring源码中很多),当我们在领域模块中实现服务时,就可以专心于各个模块的内聚服务了。 + +关于 DDD 可以在这部分补充学习;[https://bugstack.cn/md/road-map/ddd-guide-01.html](https://bugstack.cn/md/road-map/ddd-guide-01.html) - `有系列的5节课程` \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2541-3\350\212\202\357\274\232\347\275\221\345\205\263\345\215\217\350\256\256\350\241\250.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2541-3\350\212\202\357\274\232\347\275\221\345\205\263\345\215\217\350\256\256\350\241\250.md" new file mode 100644 index 000000000..1e517dffe --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2541-3\350\212\202\357\274\232\347\275\221\345\205\263\345\215\217\350\256\256\350\241\250.md" @@ -0,0 +1,25 @@ +--- +title: 【更】第1-3节:网关协议表 +pay: https://t.zsxq.com/YwZQE +--- + +# 《AI MCP Gateway 网关服务系统》第1-3节:网关协议表 + +作者:小傅哥 +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/pipVW](https://t.zsxq.com/pipVW) + +## 一、本章诉求 + +设计 AI MCP Gateway 网关服务,所需的核心必备的数据库表。以用于存储,mcp 到 http 的协议转换处理,如,用户通过 sse 请求指定的网关 ID 对应的服务,则可以调用到对应的 http 服务接口。 + +## 二、功能设计 + +如图,库表驱动下的业务; + +++ +- 首先,以用户为入口,进行网关配置,他关心的是权限,以及配置的 http 怎么映射到 mcp 服务。 +- 之后,mcp 服务对应的 http 接口能力和出入参字段,都需要给出对应的描述,这样 ai 调用 mcp 服务,才能拿到工具列表说明以及进行调用。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2541-4\350\212\202\357\274\232\345\215\207\347\272\247\347\275\221\345\205\263\345\272\223\350\241\250.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2541-4\350\212\202\357\274\232\345\215\207\347\272\247\347\275\221\345\205\263\345\272\223\350\241\250.md" new file mode 100644 index 000000000..c2dfe56ee --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2541-4\350\212\202\357\274\232\345\215\207\347\272\247\347\275\221\345\205\263\345\272\223\350\241\250.md" @@ -0,0 +1,25 @@ +--- +title: 【更】第1-4节:升级网关库表 +pay: https://t.zsxq.com/eeZPc +--- + +# 《AI MCP Gateway 网关服务系统》第1-4节:升级网关库表 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/QCvqV](https://t.zsxq.com/QCvqV) + +## 一、本章诉求 + +增强网关库表设计,拆分出工具(tool)、工具协议类型(http),让网关配置可以支持一个网关下多个工具,工具可以绑定和切换到不同的协议上(1:n)。细节上会在 tool 上设计协议类型,以便于扩展支持不同的协议对接。 + +## 二、升级设计 + +如图,从旧版库表升级到新版库表的结构; + +++ +- 旧版的设计中,是有一个 mcp_protocol_registry 协议注册,里面包含了工具描述和 http 接口协议信息。功能理解和编码实现上会比较直观,适合我们最开始让大家上手学习。 +- 新版的设计中,拆分了 tool 工具表,也就是一个网关(mcp_gateway)可以对应多个 tool 表,tool 表可以单独配置对应的协议信息,可以是 http,也可以是其他的。后续扩展的时候增加新的表即可。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2542-1\350\212\202\357\274\232MCP\346\234\215\345\212\241\345\256\236\347\216\260.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2542-1\350\212\202\357\274\232MCP\346\234\215\345\212\241\345\256\236\347\216\260.md" new file mode 100644 index 000000000..f96b7af4d --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2542-1\350\212\202\357\274\232MCP\346\234\215\345\212\241\345\256\236\347\216\260.md" @@ -0,0 +1,46 @@ +--- +title: 【更】第2-1节:MCP服务实现 +pay: https://t.zsxq.com/QdTsG +--- + +# 《AI MCP Gateway 网关服务系统》第2-1节:MCP服务实现 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/mUHg8](https://t.zsxq.com/mUHg8) + +>大家好,我是技术UP主小傅哥。 + +进入到第二部分开始,小傅哥会带着大家通过各种手段对 MCP 协议进行细致的实践验证的方式进行分析。这部分包括了实现一个 MCP 服务,完成 MCP 服务的对接,通过代理的方式调试对接中 MCP 接口协议的数据,以及通过开发网页测试工具对接协议等。最后在进行 json-rpc2 定义的协议标准讲解。通过这样一套内容串联,你会对 MCP 有非常强的理解,也能为后面做 MCP 网关实现的学习打下良好的基础。 + +## 一、本章诉求 + +基于 Spring AI 框架,实现一个简单的 MCP 服务,为后续做协议的分析和验证进行使用。 + +因为协议分析,主要包括了通信的格式结构,如通信的入参,所以实现这样的一个 MCP 服务,会多增加一些入参类型,便于以后做网关设计时使用。 + +通常来讲,这部分的操作,也可以理解为是技术调研验证阶段。当我们要实现一个大的功能服务时,就要先想办法把复杂的逻辑拆分为独立的细小单元。也就是软件第一设计原则康威定律提到的,问题越小,越容易被理解和处理。所以,当你想在此项目拓展功能,或则自己在公司承接需求的时候,也可以使用这样的方式进行辅助完成系统的详细设计。 + +## 二、协议说明(MCP) + +文档:[https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html](https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html) - 可以阅读官网文档,这里就包含了如何实现 MCP 服务,并提供了小案例。 + +```java ++ +``` + +Spring AI MCP(模型上下文协议)服务启动器为在 Spring Boot 应用程序中设置 MCP 服务器提供了自动配置功能。它实现了 MCP 服务器功能与 Spring Boot 自动配置系统的无缝集成。 + +MCP 服务器启动器提供: +- MCP 服务器组件的自动配置 +- 支持同步和异步操作模式 +- 多种传输层选项 +- 灵活的工具、资源和提示规范 +- 更改通知功能 + +Spring AI MCP 框架是对 MCP 协议的实现,可以把我们实现的服务功能,以 MCP 格式进行转换处理。与我们要实现的 AI MCP Gateway 不同的是,Spring AI MCP 固定的框架,每一个 MCP 都要独立完成开发,而 AI MCP Gateway 是一个通用协议转换的服务,只需要配置就可以完成从接口(http/rpc)到 MCP 协议的转换。 + +但为了更好的理解 MCP 协议,我们可以先基于 Spring AI MCP 框架,来实现一个简单的 MCP 并陆续完成对接使用,再到协议分析和设计 AI MCP Gateway 网关服务。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2542-2\350\212\202\357\274\232MCP\344\273\243\347\220\206\350\260\203\347\224\250.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2542-2\350\212\202\357\274\232MCP\344\273\243\347\220\206\350\260\203\347\224\250.md" new file mode 100644 index 000000000..697f8a3ec --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2542-2\350\212\202\357\274\232MCP\344\273\243\347\220\206\350\260\203\347\224\250.md" @@ -0,0 +1,25 @@ +--- +title: 【更】第2-2节:MCP代理调用 +pay: https://t.zsxq.com/OkMLy +--- + +# 《AI MCP Gateway 网关服务系统》第2-2节:MCP代理调用 + +作者:小傅哥 +org.springframework.ai +spring-ai-starter-mcp-server +
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/UAbZd](https://t.zsxq.com/UAbZd) + +>大家好,我是技术UP主小傅哥。 + +## 一、本章诉求 + +实现一个 MCP 客户端,用于对接 MCP 服务端,并通过代理 AI 接口的方式完成调用。该方案旨在调试 AI 调用 MCP 过程中的通信的请求接口协议,便于查看和分析相关数据。 + +## 二、流程设计 + +++ +- 如图,是整个 Ai Client 以 Tools 工具,对接 MCP 的流程结构图。也是 Ai Agent 智能体最基础配置。如果感兴趣 [Ai Agent 项目](https://t.zsxq.com/GwNZp),也可以在星球里学习。 +- 之后,我们要在整个实现过程中,为 Ai 接口,通过 SpringBoot HTTP 方式做一层代理。这样在调用 MCP 的过程中,我们就可以清楚的知道这个过程的协议数据结构了。`代理的方式可以用在很多场景,还有一种是浏览器代理的主动安全扫描技术,甚至你服务器的应用暴漏了数据库密码都可以被扫描出来。` [扩展知识:安全漏洞扫描,他怎么拿到了我的数据库密码?](https://bugstack.cn/md/road-map/13scan-jdumpspider.html) diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2542-3\350\212\202\357\274\232MCP\351\200\232\344\277\241\345\215\217\350\256\256.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2542-3\350\212\202\357\274\232MCP\351\200\232\344\277\241\345\215\217\350\256\256.md" new file mode 100644 index 000000000..ff83dcb39 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2542-3\350\212\202\357\274\232MCP\351\200\232\344\277\241\345\215\217\350\256\256.md" @@ -0,0 +1,39 @@ +--- +title: 【更】第2-3节:MCP通信协议(json-rpc2) +pay: https://t.zsxq.com/9PlXx +--- + +# 《AI MCP Gateway 网关服务系统》第2-3节:MCP通信协议(json-rpc2) - debug 调试 Spring AI 源码 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/wwiTt](https://t.zsxq.com/wwiTt) + +>大家好,我是技术UP主小傅哥。 + +## 一、本章诉求 + +学习了解 JSON-RPC 2.0 消息协议定义,并通过工程实践调试(debug)验证的方式,分析 MCP 通信协议过程。 + +## 二、通信协议 + +MCP 等同于为 AI 安装上了手和脚,使其这个 AI 大脑具备了行为能力的执行。所以,25年以来,AI Agent 智能体才得以落地。 + +MCP 定义了一种标准化的通信协议,使客户端和服务器能够以一致且可预测的方式交换消息。这种标准化的定义对整个AI和服务的交互性至关重要。 + +而通信就要有数据的交互格式,MCP 采用的是 JSON-RPC 2.0 协议,作为客户端和服务端之间素有的通信消息格式。JSON-RPC 是一种轻量级的远程过程调用协议,采用 JSON 编码,易于阅读和调试、与编程语言无关,支持在任何编程环境中实现(Java、Python、Go、JS...),且成熟完善,规范明确,适合广泛使用。 + +++ +> 在本节代码工程下,docs/pdf -> JSON-RPC 2.0 Specification.pdf 详细介绍了 json-rpc 2.0 通信协议,可以查阅。也可以阅读它的官网,但打开会卡一些。[https://www.jsonrpc.org/specification](https://www.jsonrpc.org/specification) + +### 1. 调用协议 + ++
++ +- 首先,很多通信协议,也包括业务工程的流程处理,往往第一步是建立一个验证关系,拿到整个后续链路请求的会话ID,之后以会话ID作为全流程的串联关系进行通信。这和图中的 MCP 协议调用过程是一样的。 +- 之后,MCP 客户端和服务端的交互,分为4个步骤;初始化(连接)、发现工具列表(能力)、执行工具调用、断开连接。也就是说 AI 要拿到你配置的工具的 MCP 的能力,这样才能根据你的请求决定调用哪个 MCP 服务,以及处理 MCP 服务返回的结果。 diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-10\350\212\202\357\274\232\350\257\204\345\256\241\345\272\223\350\241\250\345\215\207\347\272\247\344\273\243\347\240\201.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-10\350\212\202\357\274\232\350\257\204\345\256\241\345\272\223\350\241\250\345\215\207\347\272\247\344\273\243\347\240\201.md" new file mode 100644 index 000000000..d92c1ebf5 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-10\350\212\202\357\274\232\350\257\204\345\256\241\345\272\223\350\241\250\345\215\207\347\272\247\344\273\243\347\240\201.md" @@ -0,0 +1,33 @@ +--- +title: 【更】第3-10节:评审库表升级代码 +pay: https://t.zsxq.com/FxVTE +--- + +# 《AI MCP Gateway 网关服务系统》第3-10节:评审库表升级代码 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/PzIhJ](https://t.zsxq.com/PzIhJ) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +针对升级的库表结构,调整工程代码`基础设施层`(dao、po、mapper),重新设计`领域层值对象`,附带调整InitializeHandler、ToolsListHandler、ToolsCallHandler的数据使用。 + +本节是一个很好的练习篇,原有的功能、流程、结构都不变,只是把库表升级,之后针对这些数据的时候重新定义对象。所以,这一节我们采用互联网公司中的代码评审方式来讲解变更信息,你可以在这个过程中,对比代码变化,来编写你的代码。也可以在学习文档和视频后,自己来编写。可能在这个过程中会遇到错误,但这些错误会驱动你深入的debug调试,快速的积累核心知识。这节学习透彻了以后,后面的章节将会非常好学习。 + +git 教程:[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html) + +## 二、流程设计 + +如图,库表升级对于领域功能的改造; + +++ +- InitializeHandler 旧版是通过网关配置和工具两部分拿到基础信息,新版直接从网关配置拿到即可。 +- ToolsListHandler 旧版从 McpGatewayToolConfigVO 定义的工具和映射,拿到 list 数据,之后做的拆分。新版定义了 McpToolConfigVO - 工具部分、McpToolProtocolConfigVO - 协议部分,有工具引入协议信息。 +- ToolsCallHandler 这部分增强了查询,通过 gatewayId 网关ID、toolName 工具名称,来获取到当前当前要调用的协议信息。这里查询的是 http 协议。如果对接了更多的协议,这部分要做策略处理。 + diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-11\350\212\202\357\274\232\344\274\232\350\257\235\345\206\205\345\256\271\347\274\226\346\216\222\345\244\204\347\220\206.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-11\350\212\202\357\274\232\344\274\232\350\257\235\345\206\205\345\256\271\347\274\226\346\216\222\345\244\204\347\220\206.md" new file mode 100644 index 000000000..31e04239c --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-11\350\212\202\357\274\232\344\274\232\350\257\235\345\206\205\345\256\271\347\274\226\346\216\222\345\244\204\347\220\206.md" @@ -0,0 +1,33 @@ +--- +title: 【更】第3-11节:会话内容编排处理 +pay: https://t.zsxq.com/7Oceg +--- + +# 《AI MCP Gateway 网关服务系统》第3-11节:会话内容编排处理 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/pxAAd](https://t.zsxq.com/pxAAd) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +将目前在 MCP 网关服务接口管理(McpGatewayController)中的 handleMessage 下的逻辑代码,抽取到 case 进行编排处理,减轻 Controller 层的代码压力。 + +++ +这里有一个设计思想,Controller 接口实现的控制器层,在处理复杂逻辑的时候,都会调用很多 Service 服务。无论这个服务是贫血模型的 mvc 架构,还是充血模型的 ddd 架构。那么为了减轻 Controller 的职责,不至于让一个 Controller 的代码逻辑过于繁重,因此引入了 case 编排层。上承接 Controller 层的出入参需求,下处理 domian 领域服务的编排处理。这一层甚至不需要额外的对象包,它可以承接 Controller 的 DTO 对象作为出入参,也可以使用领域层的对象。 + +## 二、流程设计 + +如图,会话消息处理流程设计; + ++
++ +- 首先,这部分的重点在于将原本的会话服务接口下的消息处理,直接调用 domain 领域层的部分,重构迁移到 case 层通过规则树的方式分摊 trigger 触发器下的 Controller 的压力。 +- 之后,这部分的 case 编排和会话 Session 处理的架构设计方案是一致的,使用的是星球「码农会锁」扳手工程下的通用设计模式组件。这部分的设计,只要具备编码式的规则树结构,可以划分职责的方式完成节点的拆分,就都可以作为编排设计工具使用。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-12\350\212\202\357\274\232\351\211\264\346\235\203\345\212\237\350\203\275\351\242\206\345\237\237\346\234\215\345\212\241.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-12\350\212\202\357\274\232\351\211\264\346\235\203\345\212\237\350\203\275\351\242\206\345\237\237\346\234\215\345\212\241.md" new file mode 100644 index 000000000..732cc055d --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-12\350\212\202\357\274\232\351\211\264\346\235\203\345\212\237\350\203\275\351\242\206\345\237\237\346\234\215\345\212\241.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第3-12节:鉴权功能领域服务 +pay: https://t.zsxq.com/gLU35 +--- + +# 《AI MCP Gateway 网关服务系统》第3-12节:鉴权功能领域服务 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/I9dRQ](https://t.zsxq.com/I9dRQ) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +设计 MCP 网关通信过程中的鉴权领域功能,包括;权限注册、请求限流、权限校验,这样3个主要的服务能力。领域层设计好后,就可以让 case 串联逻辑完成权限功能的使用了。 + +## 二、流程设计 + +如图,关于鉴权功能的领域处理; + +++ +- 首先,设计对鉴权领域的功能,校验阶段,判断当前用户传递 api_key 是否为配置的有效key,是否开启认证,是否在有效期。 +- 之后,是注册 api_key 的处理,以及 api_key 的使用限流。数据库表中设计了,速率限制(次/小时) 可以按需设计你的。`这部分值在使用中会转换为多少秒一次,不过程序调用过程中,一般会达到毫秒。所以这个值可以适当放大` \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-13\350\212\202\357\274\232\351\211\264\346\235\203\345\212\237\350\203\275\347\274\226\346\216\222\345\244\204\347\220\206.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-13\350\212\202\357\274\232\351\211\264\346\235\203\345\212\237\350\203\275\347\274\226\346\216\222\345\244\204\347\220\206.md" new file mode 100644 index 000000000..12e169216 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-13\350\212\202\357\274\232\351\211\264\346\235\203\345\212\237\350\203\275\347\274\226\346\216\222\345\244\204\347\220\206.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第3-13节:鉴权功能编排处理 +pay: https://t.zsxq.com/AycUA +--- + +# 《AI MCP Gateway 网关服务系统》第3-13节:鉴权功能编排处理 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/wO9Cw](https://t.zsxq.com/wO9Cw) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在 case 的 mcp 模块下,将 auth 鉴权功能,串联到 `session 会话创建`、`message 消息处理中`去。让会话创建的时候可以校验 apiKey 的可用性,以及在消息处理中使用限流控制请求频次。 + +## 二、流程设计 + +如图,将鉴权功能串联到case编排中; + +++ +- 首先,是 api 入参这部分,都需要添加一个 `apiKey` 作为后缀的请求入参。会话请求阶段,是用户配置的请求连接传递进来的,而后续的消息处理部分,是我们在会话阶段把 apiKey 拼接到请求地址里去的。 +- 之后,消息处理阶段,根据请求的 apiKey 做响应的限流处理。`基本你在各个官网申请的 mcp 服务,如百度搜索,都会让你创建一个 apiKey 针对你的这个 key 做一些列的流程处理。包括还会对你请求的数据做一个日志记录。` \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-14\350\212\202\357\274\232\350\247\243\346\236\220Swagger\346\240\207\345\207\206OpenAPI\345\215\217\350\256\256.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-14\350\212\202\357\274\232\350\247\243\346\236\220Swagger\346\240\207\345\207\206OpenAPI\345\215\217\350\256\256.md" new file mode 100644 index 000000000..d168eb169 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-14\350\212\202\357\274\232\350\247\243\346\236\220Swagger\346\240\207\345\207\206OpenAPI\345\215\217\350\256\256.md" @@ -0,0 +1,34 @@ +--- +title: 【更】第3-14节:解析Swagger标准OpenAPI协议 +pay: https://t.zsxq.com/wvb2k +--- + +# 《AI MCP Gateway 网关服务系统》第3-14节:解析Swagger标准OpenAPI协议 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/hTWme](https://t.zsxq.com/hTWme) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在前面章节,我们实现了关于 AI MCP 网关,解决 HTTP 协议向 MCP 协议的转换处理。相关的协议(HTTP)数据存储在数据库表中。那么现在的另外一个问题就是,数据库表里的协议映射数据应该怎么录入进去。 + +这个录入方案也比较多,比如,提供一个页面,让用户自己手动输入相关的协议映射信息。也可以提供一个 SDK 组件,让 HTTP 接口服务端引入,之后自动上报。之后这里还有一种方案,是通过 Swagger 导出标准 OpenAPI 协议接口 json 文件,以文件数据的方式,录入到数据库表中。 + +本节,我们先来处理关于 Swagger 的使用到提供一个工具包把 OpenAPI 的 JSON 转换为我们的设计的库表对应对象的关系。`本节操作转换的工具类包,不非得手动编码,能理解和使用即可`。 + +## 二、工具介绍(Swagger) + +官网:[https://swagger.io/](https://swagger.io/) + +Swagger 是一个开源的API 设计和文档工具,它可以帮助开发人员更快、更简单地设计、构建、文档化和测试 RESTful API。以及可以导出 [OpenAPI](https://openapi.apifox.cn/) 标准的协议接口 JSON 文件。 + +它的接入方式也非常简单,只要在项目工程中引入 Swagger 相关的 POM 文件,在工程启动后就可以访问 Swagger 页面,查看 HTTP 接口服务。如果希望接口描述信息更为准确,也可以在接口和出入参对象(属性)上添加上相关的注解描述。这个描述信息对我们 MCP 协议更为重要。 + +++ +如图,我们需要的就是这份标准的 OpenAPI 接口的 JSON 文件,使用它解析并转换为目前 ai mcp gateway 库表结构中设计的 http 协议和字段映射关系。你可以把这部分的解析,当做一个工具包使用。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-15\350\212\202\357\274\232\345\215\217\350\256\256\345\237\237-\345\215\217\350\256\256\350\247\243\346\236\220\345\244\204\347\220\206.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-15\350\212\202\357\274\232\345\215\217\350\256\256\345\237\237-\345\215\217\350\256\256\350\247\243\346\236\220\345\244\204\347\220\206.md" new file mode 100644 index 000000000..eeb0f4957 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-15\350\212\202\357\274\232\345\215\217\350\256\256\345\237\237-\345\215\217\350\256\256\350\247\243\346\236\220\345\244\204\347\220\206.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-15节:协议域-协议解析处理 +pay: https://t.zsxq.com/dEsG8 +--- + +# 《AI MCP Gateway 网关服务系统》第3-15节:协议域-协议解析处理 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/wGt6C](https://t.zsxq.com/wGt6C) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +设计**协议域**,定义分层结构,用于承接协议的解析、存储、使用等场景功能。`在整个 DDD 架构下,我们会不断的思考这些内容的功能域设计,而不是一些单一的原则方法。` + +这一节我们把前面做的解析协议的案例代码,按照协议域的分层结构,拆分编写对应的功能逻辑。 + +## 二、流程设计 + +如图,设计协议域,封装解析逻辑(其他流程后续处理); + +++ +- 首先,划分出【协议域】,增加协议解析、协议存储,对应的单一职责的接口定义。 +- 之后,把上一节的协议解析的案例代码,按照如图所示的结构,拆分设计。这里解析还增加了 rpc 包,是一个示意,如果后续大家做其他场景的接口对应的协议解析,可以都在这个结构下增加策略实现。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-16\350\212\202\357\274\232\345\215\217\350\256\256\345\237\237-\345\215\217\350\256\256\345\255\230\345\202\250\345\244\204\347\220\206.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-16\350\212\202\357\274\232\345\215\217\350\256\256\345\237\237-\345\215\217\350\256\256\345\255\230\345\202\250\345\244\204\347\220\206.md" new file mode 100644 index 000000000..3d4b804c2 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-16\350\212\202\357\274\232\345\215\217\350\256\256\345\237\237-\345\215\217\350\256\256\345\255\230\345\202\250\345\244\204\347\220\206.md" @@ -0,0 +1,27 @@ +--- +title: 【更】第3-16节:协议域-协议存储处理 +pay: https://t.zsxq.com/3kNZE +--- + +# 《AI MCP Gateway 网关服务系统》第3-16节:协议域-协议存储处理 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/wGt6C](https://t.zsxq.com/wGt6C) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +在**协议域**添加协议存储服务,以及验证存储后的数据,在 AI MCP 网关,整个流程中完成调用处理。其实这部分的内容,就是在串联流程。协议解析、协议存储,存储后的数据到数据库表中的结构,是否还可以按照约定的方式转换为可以被 MCP 协议识别的结构。之后再继续完成调用的处理。 + +## 二、流程设计 + +如图,从协议解析到协议存储流程设计; + +++ +- 首先,本节的重点是要验证,协议解析 -> 协议存储 -> 协议使用,是否可以完整整个链路调用处理。 +- 所以,在这一节完成协议存储后,我们就要做一个完整的案例,来验证整个数据解析存储和使用是否可以通过。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-17\350\212\202\357\274\232\347\275\221\345\205\263\345\237\237-\351\205\215\347\275\256\346\225\260\346\215\256\345\255\230\345\202\250(CRUD).md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-17\350\212\202\357\274\232\347\275\221\345\205\263\345\237\237-\351\205\215\347\275\256\346\225\260\346\215\256\345\255\230\345\202\250(CRUD).md" new file mode 100644 index 000000000..5c81f45ba --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-17\350\212\202\357\274\232\347\275\221\345\205\263\345\237\237-\351\205\215\347\275\256\346\225\260\346\215\256\345\255\230\345\202\250(CRUD).md" @@ -0,0 +1,28 @@ +--- +title: 【更】第3-17节:网关配置域-配置数据存储(CRUD) +pay: https://t.zsxq.com/BGsjf +--- + +# 《AI MCP Gateway 网关服务系统》第3-17节:网关配置域-配置数据存储(CRUD) + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/wGt6C](https://t.zsxq.com/wGt6C) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +本节我们要新增加一个网关配置域,对网关、工具提供基本的配置操作,也就是 CRUD 的代码从领域层操作数据库的过程。这部分的内容实现,为的就是在后续提供的 AI MCP 网关运营服务上,可以在后台配置出整个网关服务。 + +## 二、流程设计 + +如图,网关配置域功能流程设计; + +++ +- 首先,我们知道的,一整套的 AI MCP 网关配置,包括了,协议的解析存储和使用,之后是鉴权,但最开始是有一个网关的配置的,也就是写入基本的网关配置信息。 +- 那么,为了能完整的串联全部流程,我们这里需要增加下网关配置域,处理网关配置、网关工具配置的内容,一个网关可以挂多个工具,一个工具映射了一个协议(http、rpc等) +- 注意,当前我们先实现了最基本的保存和更新,后续随着运营后台的开发,在陆续补充需要的接口。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-18\350\212\202\357\274\232\347\256\241\347\220\206\347\253\257-API\345\212\237\350\203\275\347\274\226\346\216\222\344\270\262\350\201\224.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-18\350\212\202\357\274\232\347\256\241\347\220\206\347\253\257-API\345\212\237\350\203\275\347\274\226\346\216\222\344\270\262\350\201\224.md" new file mode 100644 index 000000000..fa82c77e4 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-18\350\212\202\357\274\232\347\256\241\347\220\206\347\253\257-API\345\212\237\350\203\275\347\274\226\346\216\222\344\270\262\350\201\224.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-18节:管理端-API功能编排串联 +pay: https://t.zsxq.com/qr9CQ +--- + +# 《AI MCP Gateway 网关服务系统》第3-18节:管理端-API功能编排串联 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/MyLpx](https://t.zsxq.com/MyLpx) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +到本章节往下,我们要为 AI MCP Gateway(网关)提供一个管理端页面,维护网关的配置和验证。如配置网关和工具能力,为工具添加协议。协议来自于 Swagger 导出的 openapi json 文件。这些内容,我们陆续的添加。本节主要串联服务功能接口(看看这样的架构下怎么提供的页面功能),以及提供基础UI页面。 + +注意,关于网关后台的管理页面是使用 AI IDE 工具生成的。建议每个人都生成一套自己的,你只要在对话框中,把服务端的 api 接口拖到对话中,并告诉它在什么位置编写 html 代码,以及对接服务端页面。它就可以帮你完成一套页面。 + +## 二、流程设计 + +如图,从管理端页面到服务端的流程设计; + +++ +- 首先,整个流程为;从前端页面(管理后台)通过 ajax 请求服务端 trigger 层的 http 接口开始,由 case 层分摊 trigger 层串联逻辑部分的流程。这部分流程,调用 domain 领域层处理,也就是完成 CRUD 操作。最终由基础设施层,依赖倒置于 domain 领域层,完成数据的增删改查操作。 +- 之后,本节我们的重点是完成从 trigger 往下的逻辑处理,对于页面端,先少量提供。后续陆续补充各个功能。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-19\350\212\202\357\274\232\347\256\241\347\220\206\347\253\257-API\344\270\216UI\345\257\271\346\216\245.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-19\350\212\202\357\274\232\347\256\241\347\220\206\347\253\257-API\344\270\216UI\345\257\271\346\216\245.md" new file mode 100644 index 000000000..3610e5ced --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-19\350\212\202\357\274\232\347\256\241\347\220\206\347\253\257-API\344\270\216UI\345\257\271\346\216\245.md" @@ -0,0 +1,31 @@ +--- +title: 【更】第3-19节:管理端-API与UI对接 +pay: https://t.zsxq.com/199zh +--- + +# 《AI MCP Gateway 网关服务系统》第3-19节:管理端-API与UI对接 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/JoVrf](https://t.zsxq.com/JoVrf) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +结合网关管理后台(UI)功能,在服务端提供相应的接口能力,与管理后台对接。这些功能主要是 CRUD 做页面管理的增删改查操作。 + +此部分功能使用 AI IDE 工具就可以完成,也很建议学习的伙伴使用 AI IDE 工具(opencode、trae.ai、openclaw(QClaw)),做一套属于自己的管理后台,这样你可以在投递简历的时候发送,也可以在面试的时候演示。 + +>提示,可以在你的 AI IDE 安装技能 [https://github.com/fuzhengwei/xfg-ddd-skills](https://github.com/fuzhengwei/xfg-ddd-skills) 这样处理起来更加准确。 + +## 二、流程设计 + +如图,管理端到服务端接口的设计; + +++ +- 整个这部分的设计实现都是 CRUD,管理端需要什么,就可以配置什么接口,查询、修改、删除即可。 + diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-1\350\212\202\357\274\232\345\267\245\347\250\213\345\210\235\345\247\213\345\214\226\345\210\233\345\273\272.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-1\350\212\202\357\274\232\345\267\245\347\250\213\345\210\235\345\247\213\345\214\226\345\210\233\345\273\272.md" new file mode 100644 index 000000000..e6bb94615 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-1\350\212\202\357\274\232\345\267\245\347\250\213\345\210\235\345\247\213\345\214\226\345\210\233\345\273\272.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-1节:工程初始化创建 +pay: https://t.zsxq.com/xdnB0 +--- + +# 《AI MCP Gateway 网关服务系统》第3-1节:工程初始化创建 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/5PzN8](https://t.zsxq.com/5PzN8) + +>大家好,我是技术UP主小傅哥。 + +## 一、本章诉求 + +搭建 AI MCP Gateway 网关工程,并 push 代码到课程仓库,以及演示关于 Git 使用,方便后续学习使用。 + +## 二、环境配置 + +- JDK 17 +- Maven 3.8.x - [Maven 教程](https://bugstack.cn/md/road-map/maven.html) +- IntelliJ IDEA 社区版(免费) [IntelliJ IDEA 教程](https://bugstack.cn/md/road-map/intellij-idea.html) +- Git - 安装后会配置到 IntellJ IDEA 这样才能向服务端推送或者拉取代码。学习后可以知道怎么拉取、提交和比对代码。Git 教程:https://bugstack.cn/md/road-map/git.html + +++ +>相关软件,在星球课程入口,编程环境中提供了下载链接。编程环境:[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) - 提供了已经配置好镜像的 maven 方便直接使用。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-2\350\212\202\357\274\232\344\274\232\350\257\235\347\256\241\347\220\206\346\234\215\345\212\241\345\256\236\347\216\260.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-2\350\212\202\357\274\232\344\274\232\350\257\235\347\256\241\347\220\206\346\234\215\345\212\241\345\256\236\347\216\260.md" new file mode 100644 index 000000000..ea2d8c14a --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-2\350\212\202\357\274\232\344\274\232\350\257\235\347\256\241\347\220\206\346\234\215\345\212\241\345\256\236\347\216\260.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-2节:会话管理服务实现 +pay: https://t.zsxq.com/c0WoQ +--- + +# 《AI MCP Gateway 网关服务系统》第3-2节:会话管理服务实现 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/nPibY](https://t.zsxq.com/nPibY) + +>大家好,我是技术UP主小傅哥。 + +## 一、本章诉求 + +从本章节开始,我们会以**第1-2节:系统建模设计**为标准,进行各个模块的逻辑编码实现。包括;协议、鉴权、会话等。这部分内容完成后,在定义 api 接口,以及在 trigger 的 http 下实现接口,以及调用 case 层,处理 domain 领域的编排。整个实现过程是逐步有`骨架`,之后陆续填充完善的过程,你只要跟住理解清楚了,就可以很容易的完成全部编码。 + +**温馨提示**:尽量不要完全对照视频写代码,可以是先看视频,之后对照工程中分支代码变化(前面一节教程有告诉大家怎么对比),之后来实现功能。这样你会注意到更多的细节。 + +## 二、功能设计 + +如图,会话领域服务功能; + +++ +- 首先,我们是把一次连接请求作为一次会话来看。比如数据库查询会话、MyBatis 操作会话、信贷交易会话,会话的作用在于以统一的标识记录用户的操作行为,根据你的会话ID,可以找到你再次过程中所有的行为记录。 +- 那么,在 AI MCP Gateway 中,也是按照 MCP 的协议方式,进行会话请求和消息处理。会话的作用是拿到后续处理消息的请求地址,这个地址是在会话请求阶段进行分配的。`在前面章节进行协议分析的时候,有讲解过 /mcp/message?sessionId= 的获取和使用` \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-3\350\212\202\357\274\232\344\274\232\350\257\235\346\216\245\345\217\243\347\274\226\346\216\222.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-3\350\212\202\357\274\232\344\274\232\350\257\235\346\216\245\345\217\243\347\274\226\346\216\222.md" new file mode 100644 index 000000000..74030075b --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-3\350\212\202\357\274\232\344\274\232\350\257\235\346\216\245\345\217\243\347\274\226\346\216\222.md" @@ -0,0 +1,36 @@ +--- +title: 【更】第3-3节:会话接口编排 +pay: https://t.zsxq.com/Mmuqa +--- + +# 《AI MCP Gateway 网关服务系统》第3-3节:会话接口编排 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/c0ZDk](https://t.zsxq.com/c0ZDk) + +>大家好,我是技术UP主小傅哥。 + +## 一、本章诉求 + +定义 mcp 通信协议会话服务接口,并在 case 层做领域服务的编排,为接口提供服务能力。 + +## 二、功能设计 + +如图,会话服务编排接口; + +++ +- 首先,这一节我们的主要定义并实现 mcp 服务,sse 请求接口,创建会话信息。地址案例:`http://localhost:8777/api-gateway/test10001/mcp/sse?api_key=xxx` + + - test10001 - 是每个MCP网关,申请获得的唯一标识ID + - mcp/sse - 是固定的接口格式,让使用方知道这是 mcp 服务,sse 通信协议。 + - api_key - 是一个服务网路请求时候的安全校验,确保是你申请了唯一的key,才可以访问的。这部分鉴权的操作,会放到后续实现。 + +- 之后,这里我们会看到 trigger 层是实现 MCP 服务接口,接口的实现,需要调用 domain 领域层(domain 是每一个内聚的服务方法)。而为了减轻 trigger 层的编码压力,这里我们引入下 case 层,来处理 trigger 层调用 domain 领域层所做的编排动作。让 trigger 层只负责一个接口的封装操作,如;日志打印、参数校验、对象转换、异常处理、结果封装,而具体的逻辑则有 case 层承接。 + +- 注意,case 层的编排操作,会采用星球中的扳手工程项目下的设计模式框架中的规则树,这个规则树非常适合节点的编排,对于流程的解耦非常有效。 + +> 在互联网大厂中,会有很多这样的解耦设计,架构也不是一成不变的。这些东西都会随着各种业务的迭代,不断的进行演进。所以,做为编码工程师,未来的架构师,都要大量的吸收这些编码设计经验。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-4\350\212\202\357\274\232\344\274\232\350\257\235\346\266\210\346\201\257\347\273\223\346\236\204\350\256\276\350\256\241.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-4\350\212\202\357\274\232\344\274\232\350\257\235\346\266\210\346\201\257\347\273\223\346\236\204\350\256\276\350\256\241.md" new file mode 100644 index 000000000..1dea6c710 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-4\350\212\202\357\274\232\344\274\232\350\257\235\346\266\210\346\201\257\347\273\223\346\236\204\350\256\276\350\256\241.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-4节:会话消息结构设计 +pay: https://t.zsxq.com/02FXE +--- + +# 《AI MCP Gateway 网关服务系统》第3-4节:会话消息结构设计 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/t0xJC](https://t.zsxq.com/t0xJC) + +>大家好,我是技术UP主小傅哥。 + +## 一、本章诉求 + +增加 MCP 会话通信,处理请求消息的 HTTP 服务入口方法,完成简单的消息请求接收验证。并根据消息信息,设计会话领域层中消息处理策略。 + +## 二、功能设计 + +如图,会话消息响应设计; + +++ +- 首先,这里要设计一个同名接口的不同类型服务,get 用于创建会话服务,建立 sse 连接。而 post 则是处理端点消息,完成会话服务应答。 +- 之后,对于会话消息,我们在前面已经分析过,主要包括;InitializeHandler - 协议握手、ResourcesListHandler - 返回可用资源列表、ToolsCallHandler - 执行指定的工具调用、ToolsListHandler - 返回服务器支持的工具列表。本节我们先把这些策略结构设计出来,方便后续实现具体功能。 +- 重点,本节会先来实现接口和定义整个处理消息的结构,后续再做具体的功能实现,以及服务的编排动作。 +- 此外,本节还会引入 jdk16+ 定义的新语法关键字,**record**、**sealed**、**permits** 来定义对象。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-5\350\212\202\357\274\232\346\266\210\346\201\257\345\215\217\350\256\256\345\244\204\347\220\206\346\241\210\344\276\213.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-5\350\212\202\357\274\232\346\266\210\346\201\257\345\215\217\350\256\256\345\244\204\347\220\206\346\241\210\344\276\213.md" new file mode 100644 index 000000000..4540b8fdc --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-5\350\212\202\357\274\232\346\266\210\346\201\257\345\215\217\350\256\256\345\244\204\347\220\206\346\241\210\344\276\213.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第3-5节:消息协议处理案例 +pay: https://t.zsxq.com/zUvnY +--- + +# 《AI MCP Gateway 网关服务系统》第3-5节:消息协议处理案例 + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/kWYZ9](https://t.zsxq.com/kWYZ9) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +整个 MCP 协议的通信调用过程,需要先创建 session 会话,之后通过 handler 接收下发的指令方法,完成整个 MCP 的处理。那么,为了让大家更清楚我们所开发的东西,这里我们要先做一些流程案例,完成整个 MCP 服务的通信过程。后续在把案例的固定的代码,拆分到数据库配置实现。 + +## 二、功能设计 + +如图,会话消息响应设计; + +++ +- 首先,MCP 的通信过程,分为了初始化,后去工具列表,调用工具,以及资源和通知等。这里我们要硬编码返参实现这些方法。 +- 之后,我们这里做一个单词小写转换大写的方法,让 AI 通过 MCP 调用到网关服务。做完这部分,你就能联想到,这里既然也可以硬编码操作,那么也可以调用 http、rpc,甚至是 mq,以及还可以是 rs232 串口通信,控制硬件设备。 +- 注意,这一节的实现,还是从 trigger 触发器的 http 层,直接调用到 domain 领域方法,后续在从 case 层进行串联流程。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-6\350\212\202\357\274\232\345\237\272\347\241\200\345\261\202\346\225\260\346\215\256\345\244\204\347\220\206.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-6\350\212\202\357\274\232\345\237\272\347\241\200\345\261\202\346\225\260\346\215\256\345\244\204\347\220\206.md" new file mode 100644 index 000000000..a50901f92 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-6\350\212\202\357\274\232\345\237\272\347\241\200\345\261\202\346\225\260\346\215\256\345\244\204\347\220\206.md" @@ -0,0 +1,29 @@ +--- +title: 【更】第3-6节:基础层数据处理(Dao) +pay: https://t.zsxq.com/LaFBT +--- + +# 《AI MCP Gateway 网关服务系统》第3-6节:基础层数据处理(Dao) + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/8xnuo](https://t.zsxq.com/8xnuo) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +将 AI MCP Gateway 库表设计,编写到工程中,映射成 PO、DAO、Mapper 文件,以便于后续章节的使用。 + +这一节,小傅哥会演示如何使用 AI IDE 工具,通过 Prompt 描述,来完成这些文件的生成。 + +## 二、结构介绍 + +如图,从领域层到基础设施层(mysql、redis...)的使用方式; + +++ +- 首先,这里有个设计的思想的体现,这类思想也是 Spring、MyBatis 等框架源码中常用的思想,叫做【依赖倒置】。它的设计目标是,让数据使用方,不过渡依赖于提供方。提供方在`升级`、`替换`、`迭代`时候,都不影响使用方。 +- 之后,图里是依赖倒置的具体编码体现,从 domain 领域层,每个会话、鉴权、协议的功能编写时,所需的数据,是通过在 domain 领域层定义接口,之后由infrastructure 基础设施层做具体的功能实现。也就是说,每个功能区需要啥数据,就定义好接口,确定好入参和返回结果的,基础设施层引入 domain 层定义的这个标准接口,做具体的数据封装使用。**也类似于公司的领导,要这,要那,他不关心具体是谁做,最后做好就可以了。** diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-7\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-Initialize.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-7\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-Initialize.md" new file mode 100644 index 000000000..abb8afffe --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-7\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-Initialize.md" @@ -0,0 +1,33 @@ +--- +title: 【更】第3-7节:协议消息处理-Initialize +pay: https://t.zsxq.com/Re6ZW +--- + +# 《AI MCP Gateway 网关服务系统》第3-7节:协议消息处理-Initialize + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/yIOEM](https://t.zsxq.com/yIOEM) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +从本章开始,我们将进入消息协议的处理过程,把原本的硬编码的案例操作,通过网关ID(gatewayId)与数据库配置数据进行关联。 + +今天我们来处理第一个协议消息的处理场景,Initialize 初始化部分。这部分学习时,会附带调试 Spring AI 框架中 modelcontextprotocol 关于协议处理部分的源码,让大家有更多的积累。 + +- [https://github.com/modelcontextprotocol/java-sdk](https://github.com/modelcontextprotocol/java-sdk) +- [https://modelcontextprotocol.io/docs/getting-started/intro](https://modelcontextprotocol.io/docs/getting-started/intro) + +## 二、功能设计 + +如图,Initialize 初始化协议处理; + +++ +- 首先,在 session 会话层的 adapter 下,创建调用基础设施层仓储服务的接口,并由基础设施层做功能实现。再通过依赖倒置的方式用于领域层使用。(这部分对于初次接触 DDD,又没学习过一些源码或者设计知识的伙伴,可能感觉有点绕,不过没关系,在看到课程源码以后,会逐步清晰) +- 然后,从数据库获取的数据,要进行协议转换。也就是把之前固定编码的部分,用数据库获取的数据来动态填充。这部分内容只是初次拿到数据并使用的小试牛刀,并不复杂。不过,我们还会增加对 Spring AI 源码的调试,扩展知识学习。 +- 之后,在我们陆续完成这些 handler 消息的处理后,则会在 case 层陆续做编排,以及验证网关ID和token等。 diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-8\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-ToolsList.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-8\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-ToolsList.md" new file mode 100644 index 000000000..0f81038e7 --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-8\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-ToolsList.md" @@ -0,0 +1,37 @@ +--- +title: 【更】第3-8节:协议消息处理-ToolsList +pay: https://t.zsxq.com/eOpMV +--- + +# 《AI MCP Gateway 网关服务系统》第3-8节:协议消息处理-ToolsList + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/U6Shg](https://t.zsxq.com/U6Shg) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +从 HTTP 接口到 MCP 协议的映射,这里要考虑的是怎么把一个完整请求 http 的接口描述录入到数据库,之后在通过数据库的配置,转换为 MCP 协议结构告诉 AI 客户端 tool/list,也就是这套 HTTP 接口到 MCP 以后所提供工具能力。 + +所以,小傅哥在带着大家实现的过程中,先做了基于 HTTP 接口所需存储的信息,做了库表的设计。之后到这一节,我们要把库表的数据转换为 MCP 协议结构数据。 + +拓展,像是 HTTP 可以做,那么 RPC、MQ、数据库等各类资源,你也可以转换为 MCP 服务协议进行使用。 + +## 二、流程设计 + +如图,Tool/List 工具列表协议处理; + +++ +- 首先,我们要根据网关ID(gatewayId)从数据库中,获取网关配置和http工具字段配置列表,这部分数据相当于是把 HTTP 请求结构体,拆解喽放到数据库表中,之后再查询出来按照 MCP 协议结构组装使用。 +- 然后,是对 buildTools 工具细节的处理,这部分是对元素的拆分和组装。这部分还有一些细节在下面。 + ++
++ +- 之后,映射数据库表 `mcp_protocol_mapping` 拆解字段的父子关系,一个字段以下的另外一个字段,如;`xxxRequest01 -> xxxRequest01.city` 的映射。所以在 buildProperty 的处理过程中要,要做递归循环,一层一层的找到这些内容,并拆解组装使用。 \ No newline at end of file diff --git "a/docs/md/project/ai-mcp-gateway/\347\254\2543-9\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-ToolsCall.md" "b/docs/md/project/ai-mcp-gateway/\347\254\2543-9\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-ToolsCall.md" new file mode 100644 index 000000000..5e4f90eca --- /dev/null +++ "b/docs/md/project/ai-mcp-gateway/\347\254\2543-9\350\212\202\357\274\232\345\215\217\350\256\256\346\266\210\346\201\257\345\244\204\347\220\206-ToolsCall.md" @@ -0,0 +1,28 @@ +--- +title: 【更】第3-9节:协议消息处理-ToolsCall +pay: https://t.zsxq.com/U4Ouo +--- + +# 《AI MCP Gateway 网关服务系统》第3-9节:协议消息处理-ToolsCall + +作者:小傅哥 ++
博客:[https://bugstack.cn](https://bugstack.cn) +
视频:[https://t.zsxq.com/Vodcp](https://t.zsxq.com/Vodcp) + +>沉淀、分享、成长,让自己和他人都能有所收获!😄 + +## 一、本章诉求 + +从 AI 客户端,向 AI MCP 发起请求的过程中,小傅哥已经带着大家处理了;InitializeHandler - 初始化、ToolsListHandler - 获取工具列表,接下来再要处理的就是 ToolsCallHandler 的操作了,接收来自 AI 客户端,用户的请求,转换为对应的参数,发起接口请求(这部分我们会调用 http 接口)。 + +## 二、流程设计 + +如图,Tool/Call 工具接口调用协议处理; + +++ +- 首先,从 ToolsCallHandler 入口开始,会接收到 AI 请求接口过程中,发过来的格式化参数信息(根据我们提供的工具列表说明提供过来的)。 +- 之后,根据获取的请求信息,解析请求参数(像是 http 接口分为 post、get,如果以后扩展 rpc 接口,就直接泛化调用,这部分就可以根据你想对接哪些东西来看了)并做协议调用。 +- 注意,当前章节还是gateway -> tool 是 `1:1` 的,这部分后续在做细化处理。我们先用一个简单的结构,把整个流程跑通。有了基础后,在深入的理解拆分会更好理解。 diff --git a/docs/md/project/big-market/big-market.md b/docs/md/project/big-market/big-market.md index c1acb795c..1426052cb 100644 --- a/docs/md/project/big-market/big-market.md +++ b/docs/md/project/big-market/big-market.md @@ -31,6 +31,8 @@ lock: no+
![]()
+
+
+
+
+
+
+
+- 推荐使用 [termius](https://termius.com/) 连接云服务器,在根目录创建 `/dev-ops` 文件夹。再通过 SFTP 工具,把本地的部署脚本上传到文件夹中。
+
+### 2. 执行脚本
+
+```shell
+cd /dev-ops
+# 方式1
+docker-compose -f docker-compose-environment.yml up -d
+
+# 方式2
+docker-compose -f docker-compose-environment-xfg-studio.yml up -d
+```
+
+- 方式1;需要配置可用的 docker 镜像,才能拉取。
+- 方式2;是小傅哥准备好的镜像地址,速度更快一些。如果方式2不可用了,可以继续用方式1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/md/project/big-market/extra/big-market-v7.md b/docs/md/project/big-market/extra/big-market-v7.md
new file mode 100644
index 000000000..920eb2c29
--- /dev/null
+++ b/docs/md/project/big-market/extra/big-market-v7.md
@@ -0,0 +1,86 @@
+---
+title: 第五阶段完结,微服务对接
+lock: no
+---
+
+# 第五阶段完结,微服务对接
+
+作者:小傅哥
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -46,15 +46,15 @@ DDD 是什么,这应该是每个想使用 DDD 开发项目的研发伙伴,
**领域模型**,指特定业务领域内,业务规则、策略以及业务流程的抽象和封装。在设计手段上,通过风暴模型拆分领域模块,形成界限上下文。最大的区别在于把原有的`众多 Service + 数据模型`的方式,拆分为独立的有边界的领域模块。每个领域内创建自身所属的;领域对象(实体、聚合、值对象)、仓储服务(DAO 操作)、工厂、端口适配器Port(调用外部接口的手段)等。
-那么,现在这里有几个概念;领域服务、领域对象、仓储定义、事件消息、端口适配器。我们先来看他们是怎么从贫血模型演变过来的,在细分讲解每个概念。
+那么,现在这里有几个概念:领域服务、领域对象、仓储定义、事件消息、端口适配器。我们先来看他们是怎么从贫血模型演变过来的,在细分讲解每个概念。
diff --git a/docs/md/road-map/ddd-guide-03.md b/docs/md/road-map/ddd-guide-03.md
index 356a5e0ff..84602a710 100755
--- a/docs/md/road-map/ddd-guide-03.md
+++ b/docs/md/road-map/ddd-guide-03.md
@@ -57,7 +57,7 @@ lock: need
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+下单结果:
+红包结果:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+- 如果验证不成功,可以修改下自己的域名 DNS:`ns1.alidns.com`
+
### 步骤5;等待下发
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+