个人备案网站,免费注册个人电子邮箱,wordpress知更鸟 破解,番号网 wordpressChatGPT 是一个基于 LLM 的对话系统。本文将介绍如何构建一个类似 ChatGPT 的系统#xff0c;包括从模型、推理引擎到整体架构的构建过程。
系统概览
让我们关注最核心的对话部分。 如上图所示#xff0c;web 负责与用户进行交互#xff0c;server 接受用户的对话请求包括从模型、推理引擎到整体架构的构建过程。
系统概览
让我们关注最核心的对话部分。 如上图所示web 负责与用户进行交互server 接受用户的对话请求并将消息传递给 inference runtime推理运行时/推理引擎。inference runtime 加载 LLM 进行推理生成回复并返回给用户。这是一个最基本的系统框架。
会话与历史消息管理
然而上述系统存在一个致命缺陷缺乏用户的会话与历史消息的管理。常见的 inference runtime 推理引擎本身是无状态的不直接支持多轮对话的历史消息存储。这意味着在单个会话中会“遗忘”之前的上下文信息。
为此我们需要对系统做一些必要的改进。 如上图所示我们增加了数据库组件来存储用户的会话和历史消息。
在通信流程上web 与 server 之间可使用 HTTP 协议我们可以设计几个基本的 REST API
POST /chat开启新的会话。POST /chat/:chatID/completion在已有的会话中继续对话。GET /chats获取会话列表。DELETE /chat/:chatID删除某个会话。
在数据存储上server 将数据持久化到数据库中。对话消息的数据结构则应该包括 userID、chatID、userMessage、assitantMessage 等基本元素。
server 向 inference runtime 发送数据时使用统一的 prompt 格式例如
[{role: system,content: You are a helpful assistant.},{role: user,content: Hello!},{role: assistant,content: Hello there, how may I assist you today?},{role: user,content: How are you?}
]其中 role 代表不同的角色system 设定对话的系统背景user 代表用户输入assistant 代表模型输出。
至于历史消息如何处理往往有多种方式
直接填充 prompt把历史对话按照 prompt 的格式进行 user、assistant、user、assistant 不断填充。这种方式只适用于历史消息较少的情况。动态调整上下文比如舍去较早的历史消息由于 LLM 存在 token上下文窗口的限制有时候不得不这么做。对历史消息进行总结使用推理引擎生成对话总结压缩信息后再填充 prompt。
至此我们完成了会话管理与历史消息处理实现了一个最基本的系统框架。
系统扩展
当用户数量较多时上述系统需要进一步扩展。
增加 cache 缓存
我首先想到的是增加 cache 缓存避免重复的推理过程。假设缓存的 key-value 分别是用户的提问和 AI 的回复缓存命中则需要看用户提问的语义是否相似。例如如果用户问了两个意思相同但表述不同的问题系统可以返回相同的响应。
这种缓存设计不同于传统系统如下图所示 除了 cache 模块还需要引入 embedding runtime 和 text embedding model用于将文本转换为 vector 向量。当两个向量相近意味着文本语义相似。vector storage search 模块则用于向量存储和检索。
在增加缓存时还需考虑缓存的范围——是单个用户范围还是全部用户范围。如果是单用户范围缓存价值可能较小因为同一个用户反反复复问同一个问题的概率很低若是全用户范围则可能涉及到信息泄露我们不确定另一个用户的回复是否包含敏感信息。
综上所述我个人建议先做数据分析和验证之后再考虑是否使用缓存。
弹性伸缩
弹性伸缩也是应对高并发的重要手段。我们的 server 是无状态服务可以很好地扩缩容。 在架构上增加 gateway 进行负载均衡。inference runtime 也是无状态的因此也支持弹性扩展但其硬件资源消耗更高服务的响应能力通常低于 server。为应对流量高峰并保证推理服务稳定性可增加 MQ 消息队列同时将请求处理从同步变成异步从而提升系统的抗压能力。
生产就绪
上述系统架构完成了逻辑设计后续需完善以下方面以实现生产就绪
技术选型选择数据库如 PostgreSQL 或 MongoDB、推理引擎如 llama.cpp、HuggingFace Transformers、vLLM 等将逻辑组件映射为实体组件。可观测性增加 log、trace、metrics以及监控和告警。CI/CD 和部署环境配置自动化部署和持续集成流程选择合适的部署环境如云平台、Kubernetes 等等。
总结
本文介绍了自建 ChatGPT 系统的核心架构和扩展方式。从基础的对话流程入手设计了包含会话管理和历史消息存储的系统框架并讨论了系统的扩展策略。
(关注我无广告专注技术不煽动情绪也欢迎与我交流或推荐工作) 参考资料
https://github.com/ggerganov/llama.cpphttps://platform.openai.com/docs/api-reference/chat/create