文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载本篇技术指南围绕开源仓库 CodeGuide 中的《ChatGPT 微服务应用体系构建》课程展开系统讲解如何以生成式大模型ChatGPT、ChatGLM 等为核心构建一套覆盖 API 接入、SDK 封装、用户鉴权、公众号对接、微信支付与云上部署的微服务应用体系。读完本文你将掌握微服务架构拆分思路、DDD 领域建模、会话模型 SDK 设计、流式异步应答、规则过滤与支付补偿等一整套可直接落地的实战方案。本文以 chatgpt.md 为骨架仓库中 api、sdk、web、dev-ops 各章节的课程文档作为细节佐证可对照学习。一、为什么需要一套生成式服务应用体系ChatGPT 这类生成式服务的成熟速度远快于大多数人对它的理解速度。当各种付费套壳产品层出不穷时作为研发更应该关注的是如何以生成式服务为基础搭建一套体系化的应用微服务——而不是仅仅停留在能调通接口的层面。这套体系的核心价值在于物料与业务解耦基础的物料SDK 和服务并不会频繁变化而离业务最近的 API 会随业务变动发生较多改动。因此将 OpenAI 等大模型作为产品形态通过 API 方式与具体的物料服务模块解耦这种架构在互联网大厂中非常常见见《引言学习指引》。模块化、积木式构建以模块化设计让不同的场景诉求都可以配置化对接。哪怕不是对接 ChatGPT而是对接任何一个生成式服务这套骨架都可以复用。体系完整、可产品化不只是做一个聊天接口而是包含用户鉴权、公众号、多方支付、企业微信等对接方式满足不同诉求的使用并具备商业变现的可能。二、系统架构从用户请求到 Token 授权整套系统的架构以用户请求为入口通过 Nginx SSL 443 校验转发到对应的服务并做相关的鉴权和服务控制最终完成 token 授权使用。整套微服务包括以下子系统服务职责chatgpt-api-sdk封装 OpenAI 接口的 SDK 组件以会话模型统一对外提供服务chatgpt-auth用户鉴权服务负责登录、Token 发放与校验chatgpt-wx微信公众号对接服务包括验签、消息收发、验证码登录chatgpt-pay支付服务对接微信支付完成商品下单、回调发货chatgpt-zsxq知识星球对接服务chatgpt-admin运营管理后台chatgpt-web前端页面服务React 构建从工程拓扑视角看系统从上到下以不同的产品形态网页版 ChatGPT、公众号自动回复、企业微信聊天等统一调用封装的服务 API 进行功能流转。API 系统中所处理的核心动作会以各个物料模块进行实现从而拆分出标准的 ChatGPT-API 业务系统再由各个模块系统支撑见《引言》中的拓扑说明。基于这样的模型结构后续可以通过用户购买 Token 的时效性进行成本回收这也是一种商业变现思路——这正是第 1 节简单访问认证设计的目的见第1节API工程搭建和简单访问认证。三、四大工程模块Dev-Ops / API / SDK / WEB整套课程按工程划分四大模块覆盖从开发到上线的全流程见extra/ChatGPT-v1.0.mdDev-Ops基础环境的配置和使用以及如何把应用发布部署到线上环境包括镜像打包和全流程使用。对应 dev-ops 目录下的 Docker 安装、Portainer 安装、Nginx 配置、镜像构建部署、监控与上线章节。ChatGPT-API一套统一封装的服务用于处理外部访问的接口调用包括公众号接口、流式异步响应消息应答接口、Nginx Shiro Auth 认证接口。开发过程中会带着做工程重构和设计模式重构见 api 目录。ChatGPT-SDK运用会话模型构建工厂统一对外提供服务技术上用 okhttp3 封装服务接口可维护性高。学习这类 SDK 开发后续封装任何 HTTP 接口调用 SDK 都会具备架构级的水平见 sdk 目录。ChatGPT-WEBReact 开发的 WEB 界面包含工具栏面板、对话框列表、对话框消息、对话角色设定、流式接口对接、公众号扫码登录、商品支付页等见 web 目录。需要强调的是大部分研发总以为从一个架构换到另外一个架构就能改变代码质量其实不会。代码质量主要来自设计模式架构分层只是让结构更合理。因此在 API 工程中会引入大量设计模式来提升设计思维和编码质量。四、API 工程从访问认证到 DDD 架构重构1. Nginx auth 认证与工程搭建第 1 节的目标是在 Nginx 访问接口时做一些权限校验只有校验通过才能访问接口否则直接返回失败。流程为以用户视角访问 API 开始进入 Nginx 的 auth 认证模块调用 SpringBoot 提供的认证服务根据认证结果调用重定向到对应的 API 接口或者 404 页面。这部分会涉及 Maven 工程的创建、代码提交、启动发布、Nginx auth 配置等内容对应 第1节。后续章节如第5节在此基础上不断叠加鉴权、OpenAI 会话、公众号、企业微信等能力。2. Shiro JWT 登录授权直接以明文账号密码访问接口是不安全的如http://localhost/api?userIdxfgpassword123会把密码泄漏出去。因此第 2 节通过 SpringBoot 整合 Shiro JWT 进行登录验证先用账号密码换取 token再以http://localhost/api?tokenxxxxx的方式访问 API见第2节Shiro登录授权发放访问token。注意一般 token 配置在 HTTP 请求头中这里为了更方便用户传递参数而放在链接后面。3. DDD 架构重构与流式异步响应第 4 节是整个 API 工程的关键转折使用 DDD 架构模型重构工程同时实现不使用设计模式和使用设计模式的对照开发实现 ChatGPT-WEB 页面所需的打字机渐进展示效果见第4节工程重构和流式异步响应接口实现。从源码结构看DDD 分层可以抽象为触发 - 函数 - 连接接口定义xfg-frame-api微服务中 RPC 需要对外提供接口描述信息调用方引入 Jar 包即可依赖接口定义做代理。应用封装xfg-frame-app应用启动和配置层处理 AOP 切面、config 配置以及打包镜像。领域封装xfg-frame-domain领域模型服务无论如何做 DDD 分层都一定存在的模块每个服务包内含【模型、仓库、服务】三部分。仓储服务xfg-frame-infrastructure基础层依赖 domain 领域层实现 domain 层定义的仓储接口是依赖倒置的设计方式。触发器层xfg-frame-trigger也叫 adapter 适配器层提供接口实现、消息接收、任务执行等。类型定义xfg-frame-types通用类型定义层包括 Response、Constants 和枚举被其他层引用。领域编排xfg-frame-case可选对较大且复杂的项目用于对 domain 领域逻辑进行封装组合处理。流式异步应答接口在技术上使用 SpringBoot 的ResponseBodyEmitter。当控制器返回一个 ResponseBodyEmitter 实例时Spring MVC 会开启异步请求处理可以在单个请求中发送多个 OpenAI 应答数据块非常适合大批量应答数据的场景。同时因为服务端接口需要 Nginx 转发Nginx 端还需要关闭分块解码chunked_transfer_encoding、关闭转发缓冲proxy_buffering、关闭应答缓存proxy_cache最终才能呈现出渐进式展示效果该细节在面试问答中亦有说明见 notes.md。五、公众号对接与鉴权登录1. 微信公众号验签与初步对接 OpenAI第 3 节把 OpenAI 对接到公众号上实现消息自动回复流程为对接微信公众号提供验签服务的 GET 请求和处理消息的 POST 请求以及初始化 chatgpt-sdk-java 服务验签完成后接收 POST 请求并做应答处理见第3节微信公众号验签和初步对接OpenAI。开发前需要准备个人微信订阅号个人即可申请支持基本的开发对接和内网穿透工具免费隧道或最低配置更稳定用于本地测试验证。2. 公众号验证码鉴权登录公众号分为个人和企业企业公众号功能更完整可通过扫码登录扫码时可涵盖请求连接上的信息个人公众号不允许这样做一般有两种方案见第5节公众号发送验证码鉴权登录方案 A通过网页浏览器指纹组件库生成唯一 ID网页轮询公众号服务接口判断 ID 是否写入引导用户把 ID 通过公众号回复实现自动登录/解锁。方案 B验证码方式让用户在公众号回复指定数字获取验证码验证码写入内存/缓存用户在前端页面输入验证码由前端调用服务端接口校验校验后拿到 Token 授权使用。整体流程是用户从登录到授权通过的完整旅程。第 5 节主要实现微信公众号鉴权接口的服务端部分前端 UI 对接在 web/第9节公众号扫码登录.md。3. 公众号自动回复的 5 秒限制问题个人公众号不能根据用户 ID 主动给用户返回信息只能随请求一次返回。而 OpenAI 接口返回数据可能超过公众号 5 秒限制因此利用公众号的回调机制5 秒 3 次后端使用 CountDownLatch 进行等待每次都耗时 5 秒让公众号第 3 次从后端获取数据返回。若仍未获得数据则提示用户再次提问并以问题作为 key 缓存 OpenAI 结果回答用户详见 notes.md 面试问题 15。六、规则过滤与用户额度账户1. 白名单、敏感词与频次规则过滤生成式服务的调用和响应只是半成品还缺少必备的控制和管理。第 6 节设计了一个规则过滤模型通过策略模式 工厂服务实现规则过滤并将其结合到会话模型中见第6节白名单和敏感词规则过滤。设计要点频次、频率、白名单、敏感词等都是支撑核心业务之外的辅助流程容易随业务变动而变化因此必须把规则代码设计在核心流程之外不能与核心业务代码写在一起否则工程的腐化程度会不断加剧。规则是随着业务发展频繁变动的流程但核心代码不应总调整这两部分需要分离。课程中实现了频次和敏感词两个规则实现建议学习后自行补充频率限制。2. 用户额度账户领域为了产品化后续扩展为每个用户支付购买自己的额度需要创建用户账户、商品、订单和支付服务。第 7 节先完成账户的使用见第7节用户额度账户领域实现。账户的属性账户状态、可用模型、账户额度完全可以用规则的方式进行过滤处理——基于已完成的规则实现只要按照规则接口标准实现出和账户相关的规则即可。本节复杂点在于整个 DDD 分层架构中全链路流程的设计和实现。七、商品下单与微信支付第 8 节设计商品、订单、支付的整套服务功能领域对接微信支付完成支付回调发货商品到个人账户是整套课程中难度最高★★★★★的章节见第8节商品下单对接微信支付。支付领域的设计要点在面试问答中有更详细的展开见 notes.md以购物车为下单入参的实体对象出参为支付单实体中间用聚合对象保存订单信息。下单流程采用模板模式定义标准过程先查询是否存在已下单未支付和已下单但无支付单的订单分别处理其余流程执行购物车商品 ID 查询、组装聚合订单数据、创建支付单、保存库表记录并返回用户支付。用户支付完成后接收支付回调消息通过 MQ/Redis 发布订阅/Guava 事件推送信息由 trigger 模块下的监听处理接收支付成功消息完成发货。掉单补偿定时任务扫描库表超过 15 分钟未支付的订单查询支付平台是否已支付若已支付则发送事件消息走补货流程若超过 15 分钟未支付则本地关单不对支付平台关单支付平台有自己的超时时间用户超时后支付仍可走发货流程用户刷新界面则创建新的支付单。库表核心字段包括用户 ID公众号 openid、商品 ID、商品名称、商品金额、订单 ID、下单时间、订单状态、支付单类型微信、支付宝、支付单号、支付时间、交易单号、交易状态等对订单 ID、用户唯一创建唯一索引对订单状态和订单时间创建组合索引以提高扫描效率。八、OpenAI 多渠道策略模式与分布式设计1. 多渠道策略模式OpenAI 大模型不只是 ChatGPT还有 ChatGLM、讯飞、腾讯、百度、京东各家提供的生成式大模型。在一个模型渠道出现问题时应能让用户方便地切换到另外的模型。第 9 节通过策略模式扩展多渠道对接见第9节OpenAi多渠道策略模式。实现方式是定义一个通信渠道策略接口接口方法返回统一格式数据ChatGPT、ChatGLM 等分别实现该接口两个实现注入到 Map 中Key 是枚举值。前端选择不同模型问答时根据模型枚举值从 Map 中选择对应策略处理类。设计模式的运用不是对代码的增加而是对代码的边界切割、合理摆放再进行衔接调用。在面试中可结合第4节和 sdk/chatglm-sdk-java.md 进一步说明 SDK 层面的多模型支持。2. 分布式设计从 Guava 到 Redis第 10 节将应用扩展为分布式设计当前验证码保存在 Guava 内存中分布式部署时会出现用户在服务 1 生成的验证码第二次访问落到服务 2 无法校验的问题因此改用 Redis 保存验证码见第10节应用分布式设计。此外初始化开发环境的 compose 中已安装了 redis-admin、phpmyadmin 来管理 Redis 和 MySQL 服务。一个项目是否支持分布式部署标识在于数据处理是基于单体还是分布式架构这套项目用数据库存储用户、账户、商品、下单用 Redis 存放用户登录鉴权即可基于 Nginx 轮询配置多实例负载。九、ChatGPT-SDK会话模型驱动的组件设计1. 组件工程与 okhttp3 封装第 1 节创建 ChatGPT-SDK 组件工程用 okhttp3 封装对 OpenAI 的请求处理把 OpenAI 抽象为会话模型建立工程结构设计见第1节ChatGPT-SDK组件工程简单功能实现。会话模型的设计思想可以参照《手写 MyBatis》中的会话模型结构——这类场景在业务流程中非常多封装 OpenAI 同样是会话模型结构。通过工厂模型开启使用 okhttp3 封装的 OpenAI 会话服务同时包含请求拦截处理为 HTTP 请求设置 ApiKey、Token 等必要参数。使用 Retrofit2 组件它可以将 HTTP API 转化为 Java 接口通过注解方式描述请求参数和响应结果从而方便地发送网络请求具体体现在 IOpenAiApi 接口的赋值实现。2. 流式应答会话设计第 2 节以 IOpenAiApi 统一接口、OpenAiSession 统一会话两个标准封装流式应答操作以事件实现方式接收应答消息见第2节流式应答会话设计实现。一个需求的实现分为三个部分架构、设计、代码。架构是骨架、设计是方法、代码是填充材料。如果没有设计方法的设计模式运用就相当于把代码材料直接扔进架构里久而久之代码会越来越混乱。本章重点在于如何在会话流程下把流式事件应答处理巧妙封装到统一会话接口内。3. 常用接口与多渠道支持后续章节继续完善各类常用接口第 3 节并支持多渠道对话第 4 节分别见 第3节完善实现各类常用接口.md 与 第4节支持多渠道对话.md。SDK 中还提供了针对 ChatGLM 的独立实现可参考 chatglm-sdk-java.md。十、Dev-OpsDocker、Nginx 与上线部署1. Nginx 基础安装与常用命令第 4 节讲解 Nginx 环境配置常用命令如下见第4节Nginx环境配置停止docker stop Nginx重启docker restart Nginx删除服务docker rm Nginx删除镜像docker rmi Nginx进入服务docker exec -it Nginx /bin/bash基础安装命令docker run \ --restart always \ --name Nginx \ -d \ -p 80:80 \ nginx参数说明--restart always表示容器始终自动重启不需要可删掉取值为 never/always第一个80是容器端口第二个80是服务器端口外部通过 80 端口即可访问。2. 镜像构建、容器部署与监控部署全流程在 dev-ops 目录下依次展开push 工程到仓库、Docker 环境安装、Portainer 环境安装、Nginx 环境配置、服务镜像构建和容器部署、前后端构建镜像部署、网站添加百度统计、应用监控、部署上线。部署方式参考对应 notes.md 面试问题 5 的实践记录购买云服务器并备案域名后前后端应用配置 Dockerfile 打包镜像推送到镜像仓库编写 docker compose含 MySQL、Redis 等环境脚本在云服务器执行部署部署后把服务端接口地址配置到公众号控制台进行验签和接收验证码登录。项目还部署了 Prometheus Grafana 监控组件并配置前端百度统计 PV、UV。十一、Web 前端React 构建对话界面ChatGPT-WEB 是一套 React 开发的界面首次完整学习前端技术使用。React 的学习可以是面向对象式的有 Java 语言基础基本 3 节课就能跟上代码开发。Web 工程覆盖工具栏面板、按钮定义与事件实现、对话框列表、对话框消息、完善对话处理、对话角色设定、流式接口对接、公众号扫码登录、商品支付页见 web 目录。其中流式接口对接web/第8节流式接口对接.md与后端 ResponseBodyEmitter 异步应答配合实现打字机渐进展示效果。前端还配置了 50 秒主动超时断开因为 OpenAI 接口是异步应答返回一个数据块后不计算服务端超时但第一次应答后后续数据若卡住仍可能一直无应答所以前端主动超时断开更稳妥。十二、从项目到简历与面试这套项目以教程为导向按设计思考、工程搭建、仓库使用、代码提交、模块开发、服务调试、打包构建、容器部署推进学完后可掌握一整套标准化的工程架构设计、项目搭建配置、服务打包上线流程。微服务架构设计思想和编码经验以及如何落地技术项目。积累 Nginx SSL 443 多模型配置和鉴权使用、公众号开发、企业微信对接、支付对接交易流程等真实场景经验。简历服务每个项目都会配套简历介绍、简历优化、面试题目汇总。notes.md 中提供了完整的面试问答沉淀覆盖以下高频考点为什么使用 DDD 架构分层清晰避免 PO、VO 对象被乱用将行为和逻辑封装到领域内充血模型业务流程松耦合、功能实现高内聚鉴权登录、OpenAI、下单、微信 4 个核心场景即 4 个领域独立开发设计后由上层编排。充血模型与贫血模型充血模型适合具有生命周期的流程生成式对话、下单支付、登录授权贫血模型适合 Querys 查询场景。如何保证支付补偿定时任务扫描 15 分钟未支付订单查询支付平台状态走补货或本地关单流程。流式应答的 Nginx 配置关闭 chunked_transfer_encoding、proxy_buffering、proxy_cache 才能渐进式展示。多渠道模型的设计模式策略模式注入 Map按枚举选择策略处理类账户校验、额度扣减、敏感词过滤统一抽象为 ILogicFilter 过滤接口配合模板、工厂、策略三个设计模式也可使用责任链方式处理。异常与出参规范在 types 层定义业务异常类如 ChatGPTException和异常码枚举0000 成功、0001 失败、0002 非法参数、0003 未登录、OE001 商品已下架等统一ResponseTcode、info、data封装返回结果。数据库连接池配置 SpringBoot 默认的 hikari 连接池minimum-idle 15、maximum-pool-size 25下单接口平均响应 48 毫秒时可支撑约 20.83 事务/秒/连接25 连接约 520 事务/秒的量级。HTTP 封装框架选型对比 Apache HttpClient、OkHttp、Retrofit、RestTemplate、WebClient、Feign 等OkHttp 是现代 HTTP 客户端支持同步/异步、SPDY、HTTP/2、WebSocketRetrofit 是类型安全 HTTP 客户端通过注解将 HTTP API 转为 Java 接口与 OkHttp 配合使用屏蔽对接细节。十三、学习路径建议整套课程的推进顺序建议如下SDK 先行先学习 sdk 目录理解会话模型与 okhttp3 retrofit2 封装方式这是对接大模型的基础设施。API 为核心按 api 目录从第 1 节到第 11 节顺序学习覆盖工程搭建、Shiro 鉴权、公众号验签、DDD 重构、流式异步、验证码登录、规则过滤、额度账户、微信支付、多渠道策略、分布式设计、dall-e 文生图。Web 完善体验学习 web 目录补齐前端交互。Dev-Ops 落地按 dev-ops 目录完成 Docker、Nginx、镜像构建、监控与上线部署。面试复盘最后对照 notes.md 的技能清单、简历模板与面试问题做复盘总结。每一个模块和章节都可以独立进行学习和使用既可以部分学习积累技术也可以直接用到实际项目中。从这趟完整的学习旅程中你获得的不仅是 ChatGPT 对接能力更是一套可用于任何生成式服务场景的微服务架构设计方法论。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐微信公众号网页 JSAPI 支付接入实战基于 Senparc.Weixin SDK 微信支付 V3 全流程解析微信公众号网页 JSAPI 支付接入实战基于 Senparc.Weixin SDK 微信支付 V3 全流程解析 导读 本文以 Senparc.WeixinW后端即时通讯金融科技Win11Debloat 完整指南免费一键完成 Windows 11 去臃肿与隐私清理Win11Debloat 完整指南免费一键完成 Windows 11 去臃肿与隐私清理 新装的 Windows 11 用久了是不是越来越卡系统盘莫名其妙多出人工智能MCP 服务MCP Clients上一篇EasyExcel与Apache POI版本兼容性问题解析下一篇Electric与Prisma集成ORM模型与同步数据结合创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考