
文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载导读本章聚焦于 OpenAI 生成式服务中规则过滤引擎的设计与实现在 chatgpt-api 的 openai 领域模型内通过策略模式 工厂服务抽象出统一规则过滤接口落地白名单、敏感词两类规则的过滤并将其挂载到会话应答流程中实现核心业务与易变旁路分支的彻底解耦。读完本文你将掌握一种可复用的规则引擎建模思路并能够举一反三地扩展频次限制、模型校验等更多规则。一、本章诉求生成式服务还缺控制与管理在 《ChatGPT 微服务应用体系构建》 前几章中我们完成了工程搭建、访问认证、公众号验签对接以及流式异步应答接口见 第4节工程重构和流式异步响应接口实现。但一个真正能对外提供服务的应用仅有生成式服务的调用和响应是远远不够的——它只能算是一个半成品还缺少必备的控制和管理能力频次限制服务部署上线后外部用户调用接口时必须做调用频次限制防止单个用户滥用免费额度或恶意刷接口敏感词过滤生成式模型输出的内容具有不确定性问答输入输出必须做敏感词过滤这是内容安全的基础要求白名单控制部分能力如体验额度、内部接口需要按用户白名单放行而非对所有用户开放。本章的目标就是设计一个规则过滤模型教会大家开发这类功能。在原设计中规则做了两个实现一个频次、一个敏感词同时作者建议读者在学习完成后再自行添加一个频率限制规则这样就能彻底掌握这套规则模型的设计与实现。二、流程设计把易变的规则隔离在核心流程之外在设计之初需要明确一个核心观点频次、频率、白名单、敏感词等都是用于支撑核心业务之外的辅助流程这些流程都非常容易随着业务的变动而发生变化。例如敏感词库需要随政策、舆情持续更新频次阈值需要根据运营策略动态调整白名单名单需要随用户运营不断增删。如果把这些规则代码与核心业务代码写在一块那么区分不出边界的代码会让工程的腐化程度不断加剧——每次规则调整都要改动核心逻辑核心代码的稳定性和可维护性都会被破坏。因此本章的设计原则是把规则设计在核心流程之外通过一个独立的规则引擎来承载这些快内容的实现。从整体流程上看在前面章节中我们把应答的处理设计为一个独立的openai 领域模型结构并为应答流程设计了接口和抽象类详见 第4节 DDD 架构分层在此基础上在 openai 领域模型中设计规则模型的实现和调用来处理会话流程中的规则内容处理规则引擎对外提供统一的过滤入口核心流程只依赖引擎接口而不感知具体规则实现。这样就形成了核心流程稳定、规则实现可替换的架构核心的代码不会总调整而规则可以随着业务频繁变动。三、规则引擎的核心设计策略模式 工厂服务1. 统一规则过滤接口规则引擎的建模核心是定义一个统一的规则过滤接口把不同规则的差异点收敛到各自的实现类中。在该项目的面试与复盘资料 《ChatGPT 微服务应用体系构建》面试技能与问题汇总 中对这一设计有明确描述其实除了账户、额度、模型还有敏感词过滤在这部分实现中我定义了统一的ILogicFilter过滤接口分别实现不同的过滤诉求。再通过工厂的封装装配上不同的过滤规则类。用户进行问答后会对用户的信息分别进行校验。这部分也就是整体 OpenAI 应答中使用的模板、工厂、策略三个设计模式。由此可以梳理出规则引擎的三层结构层次职责说明接口层ILogicFilter统一过滤接口定义规则过滤的统一方法签名是所有规则实现类的契约实现层各规则策略类白名单、敏感词、频次等各自实现接口封装自身过滤逻辑装配层工厂封装通过工厂装配并路由到对应的规则实现类核心流程只与工厂交互这种接口 多实现 工厂装配的组合正是策略模式与工厂模式在真实业务中的典型落地策略模式让每个规则可以独立替换、独立演进工厂模式则屏蔽了规则对象的创建与选择细节。2. 工厂装配与规则路由从上述描述可以推断规则过滤在会话应答中的调用形态大致如下核心应答流程在进入模型调用前先经过规则引擎的统一校验入口引擎内部通过工厂按规则类型或配置装配出对应的ILogicFilter实现每个规则依次对用户信息进行校验任一规则校验不通过则中断流程并返回对应提示全部规则校验通过后才进入真正的模型应答环节。另外需要说明的是这种调用验证方式也可以使用责任链的方式处理notes.md 中同样提到了这一点。责任链与工厂 策略是两种常见的规则编排方案策略 工厂适合按类型选择一个规则执行的场景责任链适合多个规则依次串行过滤的场景二者可以按业务复杂度灵活选择。3. 与会话模型的结合时机规则过滤不是孤立存在的它必须结合到会话模型中运行。结合 第4节 介绍的 DDD 分层结构app / domain / infrastructure / trigger / types五模块规则引擎被放置在openai 领域模型domain 层中由领域服务在应答流程中调用而上层的 trigger 触发器层HTTP 接口实现无需感知规则细节。这样的分层保证了高内聚规则引擎与应答流程同属 openai 领域职责聚焦低耦合接口层trigger只负责暴露 HTTP 接口规则变化不影响接口契约可扩展新增规则只需新增一个ILogicFilter实现并装配进工厂无需改动核心流程。四、两种规则的落地实现1. 白名单规则白名单规则的作用是只允许指定的用户如内部人员、体验用户、付费用户访问某些能力。实现要点可以归纳为白名单数据可从配置、Redis 或数据库中加载支持动态维护规则过滤时以用户标识如 openid、userId为入参命中白名单则放行未命中则拒绝或降级白名单的变化频率高用户运营频繁因此必须独立于核心流程之外通过配置或缓存热更新。2. 敏感词规则敏感词规则的作用是对问答的输入与输出内容进行敏感词过滤防止生成式服务输出或处理违规内容。实现要点可以归纳为敏感词库可加载通用敏感词数据支持分词与匹配校验时机通常覆盖用户提问内容与模型应答内容两段命中敏感词时需要给出准确的业务提示而不是抛出笼统的异常这与项目错误要抛出准确的异常便于快速排查给用户的提示要温馨且温暖的一贯诉求一致见 复盘OpenAi 项目复盘总结。需要注意的是敏感词规则属于强业务变动的部分词库本身需要持续更新单一静态词库往往校验过严且不动态在真实上线项目中通常会进一步对接云服务厂商的敏感词过滤服务与图片审核服务可按广告、舆情、敏感等类别分别配置过滤策略。五、源码级佐证DDD 规则树中的同源设计虽然 chatgpt-api 的规则引擎源码不在本仓库内但仓库中收录了作者同一设计思想下的另一个完整案例—— DDD 专题案例二《领域层决策规则树服务设计》其中展示了规则引擎在 DDD 领域层中的标准建模可以作为本章设计的直接参照。该案例以商品下单规则为场景同样强调规则会随业务发展而增加或变动所以不能写死需要开发一个可扩展的规则引擎服务通过给外部提供非常简单的接口来获取最终结果。其核心结构包括LogicFilter逻辑决策接口定义统一的规则决策方法如filter决策器、matterValue决策值获取让不同规则通过不同实现完成各自的决策逻辑EngineFilter引擎执行定义定义规则树的统一执行入口processMallRuleService应用层服务对外提供规则决策能力领域层 service 实现并组合引擎仓储实现在 infrastructure 基础层实现领域层定义的仓储接口组合装配 DAO、Redis 等数据源。// 逻辑决策定义摘自 DDD 规则树案例 domain/service/logic/LogicFilter.java public interface LogicFilter { /** * 逻辑决策器 * param matterValue 决策值 * param treeNodeLineInfoList 决策节点 * return 下一个节点Id */ Long filter(String matterValue, ListTreeNodeLineInfo treeNodeLineInfoList); /** * 获取决策值 * param decisionMatter 决策物料 * return 决策值 */ String matterValue(DecisionMatter decisionMatter); }对照可见本章规则引擎的设计与该案例一脉相承都以统一接口 多实现收敛规则差异LogicFilter之于ILogicFilter都由领域层服务组合执行引擎对外只暴露简单入口都强调规则可扩展、可配置不与核心业务写死在一块。不同点在于规则树案例面向多节点、多条件的分支决策树形结构而本章面向会话应答前的线性规则过滤白名单、敏感词、频次依次校验。二者可以根据场景复杂度互相借鉴。六、扩展练习为规则引擎添加频率限制规则原文档专门留下了一个作业在完成频次、敏感词两个规则后再添加一个频率限制规则。基于上面的建模方式扩展一个规则只需要四步实现接口新建FrequencyLimitFilter实现统一过滤接口在过滤方法中完成频率校验逻辑例如从 Redis 以userId 时间窗口为 key 计数超过阈值则拒绝定义规则标识为频率限制规则定义一个枚举或配置键便于工厂识别装配进工厂在工厂中把新实现类按规则标识注册进去使引擎能够路由到该规则接入会话流程在规则校验链路中加入频率限制规则与白名单、敏感词一起按序校验。完成这个练习后你将完整经历定义接口 → 实现规则 → 工厂装配 → 流程接入的闭环真正吃透这套规则模型的设计与实现。同样的思路也适用于后续章节中的账户额度校验、模型类型校验等——从 notes.md 的描述看这些校验正是被统一纳入了该规则过滤体系除了账户、额度、模型还有敏感词过滤……分别实现不同的过滤诉求这也验证了规则引擎具备极佳的横向扩展能力。七、本章小结生成式服务的调用与响应只是基础频次限制、敏感词过滤、白名单控制等控制与管理能力是服务上线的必备要素规则属于易变的旁路分支必须与核心业务流程分离设计避免工程腐化通过策略模式 工厂服务抽象统一规则过滤接口ILogicFilter实现核心流程稳定、规则实现可替换规则引擎置于 openai 领域模型内与会话应答流程结合DDD 分层保障了高内聚、低耦合与可扩展仓库中收录的 DDD 领域层决策规则树服务设计 提供了同一思想下的完整源码级参照可用于对比学习。掌握这套规则引擎的建模方式后无论后续新增频率限制模型校验账户额度校验还是任何新的业务规则都只需新增一个实现类 装配进工厂核心代码几乎零改动——这正是本章解耦设计的价值所在。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐Ceedling深度配置教程YAML配置文件完全解析与最佳实践Ceedling深度配置教程YAML配置文件完全解析与最佳实践 Ceedling是一款专为C项目打造的单元测试和构建系统通过YAML配置文件可以灵活定制项目开发工具嵌入式980个公开数据集怎么挑Awesome Public Datasets 检索与上手实战980个公开数据集怎么挑Awesome Public Datasets 检索与上手实战 做数据分析和模型训练最耗时间的往往不是写代码而是找一份靠谱的公开数文档知识库数据集iOS国密加密终极指南如何5分钟搞定SM2/SM3/SM4安全开发iOS国密加密终极指南如何5分钟搞定SM2/SM3/SM4安全开发 在移动应用开发中数据安全已成为不可忽视的重要环节。随着中国国密算法标准的普及越来越多的密码学应用安全移动开发上一篇ADTK核心功能全解析从阈值检测到季节性异常7大算法原理与实战下一篇CyberChef终极指南如何在浏览器中完成复杂的数据处理任务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考