不停地书写,方能不失在人海茫茫。
1. 前言
之前给大家写了 ChatGPT 对接企业微信的教程,具体可看知乎链接:https://zhuanlan.zhihu.com/p/611555021
文章结尾说了教程只能实用于小规模应用,网上能找到的其余 ChatGPT 对接钉钉、飞书、自定义网页等等教程,原理都是一样的,写个直达程序,在 ChatGPT 和你用的交互工具之间直达一遍。是个简略的单体零碎,逻辑看下图
这种单体零碎设计简略,很快就能开发实现并利用。毛病就是性能瓶颈限度在单台服务器上,无奈反对高并发场景,举例说明,当初有 10 万人要用这个零碎,零碎会间接解体。
2. 分布式 ChatGPT 对接零碎
基于此,咱们须要设计一个分布式系统,整体架构看下图
2.1 交互层
交互层就不多说了,就是用户间接应用 ChatGPT 的工具,能够是企业微信、钉钉、网页等等。这些工具都有对应的官网文档,简略说就是输出和输入接口
2.2 客户端层
- 负责接管交互层传入的文本信息,转发给服务端;
- 同时接管服务端的响应信息,回传给交互工具;
- 缓存对话上下文,反对间断对话
这里的构想是客户端有多个申请入口,比方每个公司都有本人的企业微信,给每个公司调配指定 IP 的客户端。
这样做的益处是流量入口不会繁多,不须要再做一层负载平衡流量散发。链路图可参考上面:
2.3 注册核心
注册核心的作用:
- 服务注册:服务端启动后,将本人的信息注册到注册核心,包含 IP、端口、服务接口等。
- 服务发现:客户端通过注册核心获取路由表,查问服务端的 IP 和端口,从而调用服务
- 负载平衡:均衡流量,将客户端申请服务端的流量按特定散发策略,调配到不同的服务器上
- 服务健康检查:保护注册核心和服务端的心跳查看,在某个实例故障时能从注册核心上移除,防止服务调用失败
简略地说,有了注册核心后,可通过给服务端程度扩容晋升零碎的并发能力,能反对更多人应用零碎。
2.4 服务端
服务端作用:
- 接管客户端传入的信息,包含:对话上下文、GPT key
- 和 ChatGPT API 交互,接管 API 回传的信息文本,并回传给客户端
- 服务降级,反对手动降级,在 ChatGPT 不可用时,能降级到 ChatGLM、文心一言等等对话大模型,保障对话性能依然可用。
2.5 数据存储层
次要作用:
- 存储对话上下文数据
- 反对数据设置过期工夫,到期主动删除
- 要求读取数据和写入数据响应工夫短
3. 技术选型
零碎整体架构设计完后,具体用哪种语言去实现就依据本人善于的了,这里说说我用的
- RPC 框架:Dubbo
- 编程语言和框架:Java8、SpringBoot
- 存储中间件:Redis
- 注册核心:Nacos
- 链路追踪和服务监控:Skywalking(可选)
- 代码托管和自动化部署:阿里云 - 云效
4. 具体实现
目前打算按下面的架构设计实现一版零碎,有应用需要的能够分割我
后续还会更新架构中用到的技术点的文章,欢送大家继续关注