尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从Express转向NestJS:规范架构结合LangChain开发AI服务

从Express转向NestJS:规范架构结合LangChain开发AI服务 文章目录1 为什么放着Express不用非要折腾NestJS1.1 俩框架到底差在哪2 三分钟搭起你的第一个NestJS项目2.1 几行命令就完事3 三个核心概念搞懂NestJS就入门一半了3.1 模块应用里的各个部门3.2 控制器专门接请求的前台3.3 服务真正埋头干活的打工人3.4 三者到底是什么关系4 别手动建文件了CLI一键生成不香吗5 管道数据进来的第一道安检门5.1 管道DTO的标准三步走5.2 全局开启一劳永逸6 请求链路上的四道关卡别再搞混了6.1 执行顺序先记死6.2 中间件最早的门卫大爷6.3 守卫查权限的安检员6.4 拦截器给结果打包的包装员6.5 一张表给你捋明白7 NestJS里的MVC到底是怎么落地的8 模块不是只能一配一别把自己框死9 接上LangChain给你的后端装上AI大脑9.1 先把依赖装了9.2 注册LangChain模块9.3 在服务里直接调用AI9.4 最绝的玩法把服务方法变成AI工具10 做AI应用的几个实战建议11 最后唠两句P.S. 目前国内还是很缺AI人才的希望更多人能真正加入到AI行业共同促进行业进步增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow教程通俗易懂高中生都能看懂还有各种段子风趣幽默从深度学习基础原理到各领域实战应用都有讲解我22年的AI积累全在里面了。注意教程仅限真正想入门AI的朋友否则看看零散的博文就够了。1 为什么放着Express不用非要折腾NestJS很多人刚写Node后端第一个碰的都是Express。这玩意儿是真自由文件夹想怎么建就怎么建代码想堆在哪就堆在哪写个小demo快得飞起。可等项目做大、团队人一多这份自由就成了噩梦。新人接手项目找个接口找半小时改一行代码牵一发动全身报一堆错。到最后项目成了没人敢碰的烂摊子谁接谁倒霉。1.1 俩框架到底差在哪说白了Express给你无拘无束的自由NestJS给你条条框框的规范。特性Express.jsNestJS架构风格极简、无固定模式模块化、分层架构TypeScript支持手动配置半天原生支持开箱即用依赖注入自己手动引引到晕内置DI容器要啥给啥代码组织开发者随便造模块系统强制规范可维护性小项目爽大项目炸天生适配大型项目尤其是做AI应用这种逻辑复杂、要长期迭代的项目规范的架构能帮你少踩80%的坑。2 三分钟搭起你的第一个NestJS项目别自己从零搭配置了纯纯浪费时间。官方CLI直接给你把所有环境都配好TS严格模式、编译配置、启动脚本啥都不用你管。2.1 几行命令就完事打开终端依次敲这几行# 安装 NestJS CLInpmi-gnestjs/cli# 创建项目开启TS严格模式nest new my-ai-app--strict# 进目录cdmy-ai-app# 启动开发服务npmrun start:dev完事打开浏览器访问 localhost:3000看到Hello World就成了。生成的项目结构也很清晰入口、根模块、控制器、服务分的明明白白。搁以前自己搭ExpressTS光配置文件就得写俩小时还没写业务呢人先累瘫了。3 三个核心概念搞懂NestJS就入门一半了很多人说NestJS难其实核心就三样模块、控制器、服务。把这仨搞明白剩下的都是锦上添花的东西。3.1 模块应用里的各个部门你可以把一个模块当成公司里的一个部门。技术部、运营部、财务部各管各的事互不干扰。需要协作的时候走正规流程对接就行。每个Nest应用至少有一个根模块剩下的按功能拆用户模块、订单模块、AI模块怎么清晰怎么来。用Module()装饰器一标记里面注册好控制器和服务一个部门就组建完成了。3.2 控制器专门接请求的前台控制器就是公司的前台接待。客户请求来了前台先登记一下看看是来办什么事的然后转给对应的部门处理。它只管路由转发和返回结果绝对不写业务逻辑。很多新手图省事把所有代码全堆控制器里一个文件上千行美其名曰“简单”等后期维护的时候哭都来不及。至于参数怎么拿记住三个常用装饰器就行Param()拿URL路径里的参数比如/users/123里的123Query()拿问号后面的参数比如?page1里的pageBody()拿请求体里的JSON数据别再三个东西傻傻分不清楚写接口全靠蒙了。3.3 服务真正埋头干活的打工人前台把单子递进来真正干活的是服务层。所有的业务逻辑、数据处理、数据库操作全写在服务里。用Injectable()装饰器标记一下就可以通过依赖注入直接塞给控制器用。搁以前写Express文件之间互相导入A引BB引C改个路径半片文件全爆红。现在有了依赖注入你需要什么服务直接声明就行容器自动给你送过来省心多了。3.4 三者到底是什么关系一句话总结模块管着控制器和服务控制器收请求服务干脏活累活靠依赖注入串起来。就像一个部门里部门经理管着前台和办事员前台接客户办事员处理业务各司其职不乱套。4 别手动建文件了CLI一键生成不香吗我见过不少新手加个功能就自己新建文件写完还得去模块里注册经常漏这漏那跑起来报错找半天。听我的但凡加新功能直接用CLI生成又快又规范。# 生成用户模块nest g moduleusers# 生成用户控制器nest g controllerusers# 生成用户服务nest gserviceusers# 一键生成完整CRUD模块控制器服务全齐nest g resource products命令一敲文件自动建依赖自动注册连测试文件都给你备好。省下来的时间摸鱼不好吗非要跟自己较劲手动写。5 管道数据进来的第一道安检门管道这东西说穿了就是两个作用验证数据转换格式。就像地铁站的安检违禁品直接拦下来行李尺寸不对的给你调整一下合格了才能进去。5.1 管道DTO的标准三步走最常用的玩法就是配合DTO做参数校验。第一步先装依赖npminstallclass-validator class-transformer第二步写DTO类给每个字段贴好校验规则。什么不能为空、邮箱格式、年龄下限全写在里面还能自定义错误提示。第三步控制器里直接用参数进来自动校验不合格直接返回错误根本进不了业务逻辑。5.2 全局开启一劳永逸嫌每个接口都加太麻烦直接在入口文件开全局管道。配上自动类型转换、自动剔除多余字段、遇到非法字段直接报错所有接口自动生效。尤其是做AI应用这玩意儿简直是省钱神器。你想啊要是没校验空消息、乱码、超长文本全往大模型发一天下来API额度烧没了账单出来心都在滴血。管道往这一放不合格的请求全拦在外面省下来的都是真金白银。6 请求链路上的四道关卡别再搞混了很多人学NestJS最头疼的就是中间件、守卫、拦截器、管道这四个东西。执行顺序记不住各自干啥的分不清面试一问直接卡壳。6.1 执行顺序先记死先把顺序背下来后面理解起来就快了请求进来 → 中间件 → 守卫 → 拦截器前置 → 管道 → 控制器 → 服务 → 拦截器后置 → 返回响应就像你去政府办事先过门口保安再查身份证再领号填表然后窗口办事最后拿单子走人。6.2 中间件最早的门卫大爷中间件是最先接触到请求的。记日志、配CORS、解析原始请求体这些粗活都是它干。就像小区门口的大爷你刚进小区他先瞅你一眼记下来你几点进来的别的不管。6.3 守卫查权限的安检员守卫管的是权限。你有没有登录、有没有API Key、有没有资格访问这个接口都是它说了算。没权限直接给你拦在外面连业务逻辑的边都碰不着。就像地铁安检没票或者带了违禁品直接不让你进。6.4 拦截器给结果打包的包装员拦截器是前后都能管。请求进来的时候可以改改请求数据业务处理完了可以给返回结果统一包个格式、记个耗时、做个缓存。就像快递站你寄的东西过来给你套个盒子贴个快递单整整齐齐再发出去。6.5 一张表给你捋明白特性中间件守卫管道拦截器执行顺序第一个第二个第四个第三个全程包裹核心职责原始请求处理权限身份校验数据验证转换响应映射缓存能不能碰DTO不行只能拿原始数据不行一般只看请求头专门管DTO能拿到最终结果常用装饰器configure注册UseGuards()UsePipes()UseInterceptors()对着表多看两遍再也不会搞混了。7 NestJS里的MVC到底是怎么落地的NestJS虽然不是严格的经典MVC但分层的思路是一模一样的。说白了就是各干各的别啥都往一块堆。层级干啥活Controller层收请求、转路由、返回结果Service层写业务逻辑、调外部接口、编排流程DTO/Entity层定义数据结构、写校验规则Repository层数据库增删改查ORM来搞定从上到下一层层调用谁也不越界。以后改需求找对应的层改就行不会牵一发动全身。别再把所有逻辑全写控制器里了一时省事后期全是债。8 模块不是只能一配一别把自己框死很多新手有个误区一个模块必须配一个控制器一个服务。哪有这么死板的规定。一个模块里可以放好多个控制器、好多个服务怎么合理怎么来。一个控制器也可以注入好多个服务需要啥功能就用啥。甚至有的模块根本不需要控制器就纯提供工具服务导出给别的模块用就行。比如做AI功能一个AI模块里可以放聊天控制器、文档控制器再配LangChain服务、向量服务、Prompt服务。按功能领域划分模块而不是死磕一一对应代码结构才会清爽。9 接上LangChain给你的后端装上AI大脑前面的基础打牢了现在就可以接入AI能力了。搭配LangChain不用自己吭哧吭哧封装大模型接口直接就能用。9.1 先把依赖装了npminstallnestjs-langchain langchain langchain/openai9.2 注册LangChain模块在根模块里注册一下配好大模型的配置和系统提示词。跟注册其他模块一模一样没什么额外的学习成本。9.3 在服务里直接调用AI注入LangChainService直接调用run方法就能发请求。想做RAG带上下文问答自己拼好Prompt传进去就行简单得很。9.4 最绝的玩法把服务方法变成AI工具这是我觉得最惊艳的功能。给你的服务方法加个Tool()装饰器写好描述这个方法就变成AI可以自动调用的工具了。比如你写个加法方法、写个查天气的方法注册进去之后用户问相关的问题AI会自己判断要不要调用这个工具。相当于给AI配了个工具箱需要什么自己拿不用你写一堆if else判断。10 做AI应用的几个实战建议最后给大家几个实用建议都是踩坑踩出来的经验。第一接口一定要加保护。API Key校验加上限流加上不然被人恶意刷接口账单分分钟爆炸。第二用户输入一定要校验。问题长度、参数范围都给限制好别啥乱七八糟的都往大模型发烧的都是钱。第三返回格式统一一下。所有接口都用一样的结构前端对接也舒服后期加字段也好加。第四分层一定要清晰。控制器只管路由服务写业务数据层管持久化别混在一起。不然后期加功能、改bug有你头疼的。11 最后唠两句其实NestJS没大家想的那么难核心就是一套规范的架构思路。把模块、控制器、服务这三个核心搞懂把请求链路的顺序理清楚剩下的都是边用边学的东西。再结合LangChain你就能搭出结构清晰、好维护的AI应用了。想进阶的话可以再深入研究LangChain的Chain、Agent、向量数据库做做RAG实战搞搞流式输出再补补单元测试。技术这东西基础打牢了往上搭东西都快。祝大家写代码少出bugAI账单月月省钱。P.S. 目前国内还是很缺AI人才的希望更多人能真正加入到AI行业共同促进行业进步增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow教程通俗易懂高中生都能看懂还有各种段子风趣幽默从深度学习基础原理到各领域实战应用都有讲解我22年的AI积累全在里面了。注意教程仅限真正想入门AI的朋友否则看看零散的博文就够了。
返回列表