不停地书写,方能不失在人海茫茫。

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.具体实现

目前打算按下面的架构设计实现一版零碎,有应用需要的能够分割我

后续还会更新架构中用到的技术点的文章,欢送大家继续关注