# 《ChatGPT 微服务应用体系构建》,关于面试中的技能、简历、问题汇总
作者:小傅哥
博客:https://bugstack.cn (opens new window)
课程:https://t.zsxq.com/0d7K7hJ0i (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
此部分主要用于向读者提供星球项目之一的 ChatGPT 微服务项目如何体现到简历中,包括;专业技能、项目经验。
# 一、专业技能
- 【前端】熟练使用 Next.js 构建的 React、Typescript 语言,构建的前端工程。
- 【前端】熟练使用 React Route 路由子页面的开发技术,以及相应的信息传递。
- 【前端】熟练掌握,跨域接口的对接使用,以及本地 json 数据加载。
- 【前端】熟练使用本地浏览器内存,存储 Token、配置、对话等信息。
- 【前端】熟练掌握前端页面数据的存放、使用以及和后端接口的交互方式。
- 【后端】熟练构建 DDD 工程架构,分层模块,职责体系。并掌握 DDD 架构的开发模式以及微服务设计思想。
- 【后端】熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术,并对其使用源码所提供的接口、类、SPI标准开发各类组件,有一定的设计思路和落地能力。—— 因为这里包含了 SDK 的设计、开发和使用。
- 【后端】熟练使用多种设计模式、设计原则,对各类场景的方案设计和落地能力,深度提高自身编码思维和开发技术能力。—— 同时包括非常重要的会话模型OpenAi-SDK的架构设计。
- 【后端】熟练对接微信公众号 SDK,属性验签流程和对话流程。以及完成 JWT Token 的生成和校验。
- 【后端】熟练掌握 Nginx Auth 验证模块的开发和使用,以用于对接口的校验和拦截。
- 【后端】熟练使用流式异步响应式框架开发应答接口,完成前端动态展示应答数据。
- 【后端】熟悉微信支付渠道对接,掌握商品、交易、下单、发货、掉单补偿等核心流程开发。(这是一个真实支付场景,在DDD架构下实战)
- 【后端】熟练使用 okhttp3、retrofit2 框架,对接 ChatGPT 完成通用 SDK 的开发。有了这项技能,以后你可以方便的对接任何一个 HTTP 请求服务。
- 【后端】熟练掌握异常、枚举、错误码的定义和使用,并学习如何合理打印服务日志,便于问题排查。
- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用,以及在本地构建前后端镜像。
- 【运维】熟练掌握 Git、GitCode,对工程代码的管理,推送、拉取、切换分支、合并代码等操作。
- 【运维】熟练申请和使用 SSL 配置 Nginx 域名 HTTPS 服务。
# 二、项目经验
- 项目名称:OpenAI 应用服务 - 辅助工作提效工具开发
- 项目架构:微服务架构设计,OpenAI-SDK 多模型组件【ChatGLM、ChatGPT】、DDD 应用服务API封装、WEB REACT 前端界面【按需编写】
- 核心技术:SpringBoot、MyBatis、Redis/Guava、OKHttp3、OpenAI 大模型【可对接ChatGLM、腾讯混元等】、React、TypeScript
- 项目描述:此项目以应用OpenAI技术,对接多种大模型提供生成式服务,为XXX场景提效。项目的架构设计实现以微服务进行拆分,涵盖;OpenAI-SDK、OpenAI-API、公众号鉴权、企业支付【暂时申请中,如果你对接了可以写】等。并以模块化设计,积木式构建应用,让不同的场景诉求都可以配置化对接。
- 核心职责:
- 首先这是我们xxx公司/实践/实训的第一个OpenAI项目,后续势必会有更多的场景以不同的方式接入。包括 SDK 独立接入、API 接口接入、MQ 消息接入,以及使用提供好的服务类接入。所以在这部分设计的时候,我采用了微服务的架构设计,按照职责边界进行拆分设计。
- 采用 DDD 架构 API,以及便于不同领域模块的独立设计,一个领域就是一个功能域。在功能域中提供模型、仓储、事件、服务。这样可以更好扩展。
- 鉴于生成式服务的文本生成可能会有不可靠信息,所以对这部分内容添加了敏感词的过滤。并可根据不同场景选择不同范围的敏感词处理。
- OpenAI 大模型有多种,这部分在架构上设计独立的 SDK,在实现上采用了 Session 会话模型进行处理,以及通过工厂处理服务。在细节对上,采用了 OKHttp3 框架完成模型对接,这样的方式更好扩展,代码也更易于维护。
- 在整套工程的设计实现中,采用了较多的分治、抽象的思想和设计模式和设计原则知识的运用,来解决各类场景问题。
- 对接微信扫码支付,完成从商品库、下单支付、异步发货、掉单补偿等核心流程实现。让用户可以在线购买对话额度。
- 注意:你还可以根据项目中提到的各类技术和章节,来编写你的职责。
# 三、项目问答
# 1. 此项目的背景和需求来自哪里?
校招身份举例
面试官您好,此项目的最核心背景和诉求,是我希望找到一个可以真实锻炼技术应用的场景。并且可以基于此项目的设计、开发、上线、运维等一系列动作,提高编程思维和落地能力。而此项目的只是一个载体,在项目中我所运用到的微信对接、登录鉴权、异步接口、下单支付、异步发货、账户管理等场景可以运用到其他任何一个项目中使用。所以我选择开发 这样一个项目。
并且此项目运用了DDD分层架构,领域驱动设计实现,对于各个场景都遵守了设计原则和设计模式,解决各类复杂场景的实现。如;生成式服务流程中运用模板模式、策略模式、工厂模式,解决对话过程中所需的规则过滤、模型校验、账户状态、账户扣减等开发流程。
通过以上项目的学习我锻炼到了相关项目所用到的核心技术使用,架构设计和落地实现。而此项目的学习,也为我以后在工作中解决实际场问题,打下了牢固的基础。
# 2. 充血模型和贫血模型分别合适什么场景?
在 DDD 架构中,充血模型,主要的价值在于解决具有生命周期的流程。如生成式对话、商品下单支付、用户登录授权等流程。因为这些流程中具有较复杂的场景模型和唯一ID,所以采用充血模型结构,会很适合的将状态和行为封装到同一的领域包中进行聚合开发实现。这样的实现方式,也为以后扩展、迭代、维护做了良好的基建,避免工程过于腐化。—— 注意关于DDD的知识,可以把这里的5个视频都刷下。
https://bugstack.cn/md/road-map/mvc.html (opens new window)
而贫血模型则比较适合 Querys 场景,因为这些场景只是数据的汇总查询,没有唯一ID和生命周期。所以比较适合在工程中提供 query 模块,使用贫血模型开发。