如何部署 LLM 聊天机器人 将 LLM 聊天机器人投入生产并带给客户的 4 种方法
有许多库可用于将您的 LLM 聊天机器人从开发阶段过渡到生产阶段。
在本文中,我将根据撰写时的当前趋势讨论一些实现此目的的流行方法。
选项 1 — 将 QA 机器人添加到公司的 Discord 服务器
这种方法有利于内部反馈,并且当您的客户也在 Discord 生态系统内时也很有用。
通过 discord 机器人演示 LLM
此外,此解决方案的元素还可以适用于您网站上的标准聊天机器人。只需从您的 Web 应用程序而不是 Discord 调用 API 网关即可。
选项 2 — 利用 ChatUI 实现即插即用的解决方案
自带模型或使用 sagemaker 端点并开始与ChatUI聊天。
定制LLM的HuggingFace ChatUI演示
选项 3 — 使用 gradio
虽然它提供了更快的开发速度,但在生产环境中实施之前仍需要仔细考虑。
Gradio 流媒体聊天机器人演示
选项 4 - Streamlit HugChat 插件
仅当您已经在使用 Streamlit 时才推荐使用;否则,它不是仅适用于聊天机器人的最佳解决方案。
Streamlit Chatbot 演示由 HugChat Creds 提供支持
在生产环境中,解决方案通常包含三个主要组件:
- 将您公司的知识库转换为嵌入并存储它们。
- 将输入问题转换为嵌入,并从向量存储中有效地检索最近邻嵌入。
- 向 LLM 提供背景和问题并将输出提供给用户。
本文主要讨论如何向用户呈现输出。对于前两个步骤,我提供了一篇更详细的文章,您可以在此处探索:https://mrmaheshrajput.medium.com/how-to-build-an-intelligent-qa-chatbot-on-your-data-with-llm-or-chatgpt-d0009d256dce。
选项 1 — 将 LLM 支持的 QA 机器人添加到 discord
系统设计
1. 创建一个 discord 机器人并添加到你的服务器
在另一篇文章中,我深入探讨了如何创建机器人并将其集成到服务器。您可以在此处找到该文章:https://mrmaheshrajput.medium.com/automating-ad-hoc-reports-with-discord-bot-aws-lambda-and-sagemaker-25d40e371a8a
a. 导航至https://discord.com/developers/applications
b. 点击“新申请”
c. 输入合适的名称并点击“创建”按钮
应用程序创建完成后,复制“应用程序ID” APP_ID
、“公钥”PUBLIC_KEY
以供日后使用。
在“Bot”菜单项下,单击“重置令牌”按钮并复制令牌。保存BOT_TOKEN
以供日后使用。
在“OAuth2”父菜单项下,选择“URL Generator”子菜单项,勾选application.commands
复选框,然后使用“Copy”按钮复制“GENERATED URL”。
将 URL 粘贴到您的浏览器中(已登录您的 discord 帐户并可以访问您想要添加此机器人的服务器)。
将 QA Bot 添加到您的服务器(公会)
2. 注册命令
我们将使用斜线命令。如果您熟悉 Discord API,请随意探索此方法的替代方法。
python
从已安装包的任何环境运行以下代码requests
。
我们正在使用更快的公会命令,并且该命令将通过/qa
discord 中的输入来调用。
不要忘记用您的值替换APP_ID
、、BOT_TOKEN
(SERVER_ID
右键单击服务器并单击“复制服务器 ID”)。
通过以下方式注册此命令:
python 注册_命令_qa_bot.py
响应:
注册命令响应
3.创建lambda来处理交互(和API网关触发器)
a. 使用 python3.9 运行时创建一个新的 lambda 函数,根据您的系统选择正确的架构,因为我们将向该函数添加一个层。
b.Lambda 代码:
QA Bot 交互处理程序 lambda 代码
如果您以前使用过 Discord 机器人斜线命令,那么代码就很简单了。有些功能可能看起来是多余的,但如果您计划在将来扩展此项目,它们会很有用。
在lambda_handler函数中,t==1
响应ping命令。
在command_handler函数中,我们只需从 body 对象解析问题后调用 sagemaker 端点。
该代码与我们使用的代码类似:https://mrmaheshrajput.medium.com/automating-ad-hoc-reports-with-discord-bot-aws-lambda-and-sagemaker-25d40e371a8a
c. 向此 lambda 添加 sagemaker:InvokeEndpoint
权限。
d. 进入 lambda 的配置设置,添加两个环境变量:
i. PUBLIC_KEY
— 在创建 discord 机器人时复制
ii. ENDPOINT_NAME
— 尚未生成
e.向 lambda 添加 REST API 网关触发器:
为了简单起见,“安全”设置为打开。
f. 将PyNACL层添加到此 lambda:
!rm -rf 层/python
!mkdir -p 层/python
!pip install -q --target 层/python PyNaCl
!cd层 && zip -q --recurse-paths 层.zip 。
手动上传此层或通过 S3 添加它,然后将其附加到您的 lambda。
4. 添加交互端点 URL
从触发器下复制 API 端点,
API 端点
并将其粘贴到INTERACTION ENDPOINT URL
应用程序的 discord 开发者门户中“常规信息”下的选项中。
Discord 应用程序的交互端点 URL
如果 API 网关有效
5. 测试虚拟命令
您可以注释掉 lambda 中与端点相关的代码并测试代码。
在下面的测试中,我只是返回用户的问题来验证功能。
测试机器人
6.将 LLM 部署到 Sagemaker 端点
在此示例中,我将使用Sagemaker Jumpstart Foundation 模型创建一个终端节点。或者,您也可以使用任何其他基础模型或基于数据集的微调模型,并将其部署到终端节点。
如果您之前没有申请过 g5 实例,请先
ml.g5.2xlarge for endpoint usage
通过服务配额申请增加配额。请注意,解决工单可能需要长达 24 小时。
接下来,导航到您的 Sagemaker Studio,然后在“Sagemaker Jumpstart”下选择“Llama-2–7b-chat”。
Llama 2 7B 在 Sagemaker Jumpstart 上聊天
根据需要更改部署配置,记下“端点名称”变量ENDPOINT_NAME
并单击“部署”按钮。
该模型不适用于微调,请使用“Llama 2 7b”对数据集进行微调。
几分钟后,端点状态应该处于服务状态。
Sagemaker Jumpstart 端点状态
您还可以从 Sagemaker Studio 中“部署”下的“端点”菜单项中检查端点状态。
端点详细信息
我们将使用端点名称在 lambda 中调用它。
7.修改 lambda 以调用 sagemaker 端点并返回响应
更新ENDPOINT_NAME
lambda 中的环境变量名称。
还要删除或取消注释测试代码。
现在,当您/qa
在 Discord 中使用该命令时,它将调用 Sagemaker 端点并返回来自 LLM 的响应。
调用 Sagemaker Endpoint 后,Discord 机器人做出响应
请注意,我没有加速 gif;Lambda 能够在 3 秒内做出响应。
与端点交互完成后,请将其删除以释放资源并停止计费。
选项 2 — HuggingFace ChatUI,即插即用
在他的视频中,Abhishek Thakur ( https://www.youtube.com/watch?v=o1BCq1KJULM ) 利用 hugging face text-generation-inference ( https://github.com/huggingface/text-generation-inference ) 以及chat-ui ( https://github.com/huggingface/chat-ui ) 提出了一个聊天机器人解决方案。
如果您拥有一个拥抱脸部推理端点或打算从本地机器使用 LLM,请首先使用文本生成推理包配置和生成端点。
此过程将在你的机器上执行一个开源 LLM,生成的端点将如下所示:127.0.0.1:8080
您可以将其用作端点或选择 SageMaker 端点,前提是您建立一个能够调用该端点的新 Lambda,并将新的 API 网关触发器附加到 Lambda 函数。
- 使用 python 环境创建一个新的 lambda。
*编辑:您不必创建 lambda 来调用 sagemaker 端点,因为**ChatUI****现在原生支持 sagemaker 端点集成。查看****有关 Sagemaker 集成的**ChatUI README 。*
2、功能代码:
<iframe src="https://medium.com/media/48e77b9ca4a0f4a8ef2a7407e84b5f15" allowfullscreen="" frameborder="0" height="1067" width="680" title="chatui lambda_handler.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1067px; left: 0px;"></iframe>
- 授予此 lambda 策略“sagemaker:InvokeEndpoint”权限。
4.添加ENDPOINT_NAME
环境变量。
5.添加新的 REST API 网关触发器并记下 API 端点。
- 克隆https://github.com/huggingface/chat-ui存储库。
克隆 ChatUI Repo
- ChatUI 需要运行 MongoDB 实例来存储聊天历史记录。您可以按照存储库中概述的方式使用 MongoDB 容器:
docker run -d - p 27017 : 27017 --name mongo-chatui mongo:latest
MondoDB容器
.env.local
8.在ChatUI根目录下创建新文件并添加两个新对象,MONDODB_URL
和MODELS
。
模型对象与文件类似.env
,只是我们添加了一个新endpoints
键。
MONGODB_URL =mongodb://localhost: 27017
MODELS =`[
{
"name" : "LLAMA 2 7B Chat, running on sagemaker endpoint" ,
"endpoints" : [{ "url" : "API_ENDPOINT" }],
"datasetName" : "Llama2-7b-chat/qa-sm" ,
"description" : "ChatGPT 的良好替代方案" ,
"websiteUrl" : "https://mrmaheshrajput.github.io" ,
"userMessageToken" : "<|prompter|>" ,
"assistantMessageToken" : "<|assistant|>" ,
"messageEndToken" : "</s>" ,
"preprompt" : "以下是不同人与 AI 助手之间的一系列对话。AI 试图变得乐于助人、礼貌、诚实、老练、情感意识强,并且谦逊但知识渊博。助手很乐意帮助解决几乎所有问题,并会尽力准确理解需要什么。它还会尽量避免提供虚假或误导性信息,当它不确定正确答案时会发出警告。话虽如此,助手很实用,确实尽了最大努力,不会让谨慎成为阻碍其实用性的重要因素。\n-----\n" ,
...
}
]`
url
用上面创建的 API 端点替换。
*编辑:因为**ChatUI****现在原生支持 sagemaker 端点集成,所以您可以查看****有关 Sagemaker 集成的**ChatUI README 。*
"endpoints" : [
{
"host" : "sagemaker" ,
"url" : "" , // 您的 aws sagemaker url 此处
"accessKey" : "" ,
"secretKey" : "" ,
"sessionToken" : "" , // 可选
"weight" : 1
}
]
- 运行以下两个命令:
npm install
npm run dev # 对于开发环境# 对于开发
npm run prod # 对于生产
npm 安装
npm 运行 dev
给出的 URLnpm run dev
将运行 ChatUI 应用程序。
带有 Sagemaker Endpoint 的 ChatUI
因为我无法弄清楚我们的响应语法,ChatUI 总是给我这个错误:
ChatUI 错误
但是端点和 lambda 能够根据 cloudwatch 日志成功返回输出。
CloudWatch 响应
*编辑:后来我能够弄清楚 ChatUI 对自定义端点的响应格式:*
请注意,使用 python lambda 进行响应时,我们会丢失流式更新,即整个响应块会立即出现,而不是逐字出现。要实现这一点,您可以在 NodeJS 运行时使用**AWS Lambda 的流式响应功能*,也可以使用**FAST API 流式响应**。*
选项 3 — Gradio 聊天机器人
Gradio是一款功能强大的工具,可用于为机器学习模型制作用户界面。只需几行代码,您便可以轻松为几乎任何 ML 模型设置演示。
Andrew Ng 的课程“使用 Gradio 构建生成式 AI 应用程序”强调使用 Gradio 快速创建和演示机器学习应用程序。
在此示例中,我们将利用 Hugging Face 端点与文本生成接口结合来建立端点。
Gradio 应用程序代码:
<iframe src="https://medium.com/media/e7e3cf8ed69c40e6dfb4d6d3e0b09ee6" allowfullscreen="" frameborder="0" height="1770" width="680" title="gradio聊天机器人.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1770px; left: 0px;"></iframe>
我们将使用gr.Chatbot
流模式的函数。
Gradio 演示
选项 4 — Streamlit 聊天机器人
这篇文章“如何使用 Streamlit 构建由 LLM 驱动的聊天机器人”是开始您关于这个主题的旅程的好地方。
- 克隆此 repo:https 😕/github.com/streamlit/app-starter-kit
- 修改
streamlit_app.py
文件代码如下:
<iframe src="https://medium.com/media/97531ddba9e34b61b8eae499e6b4b453" allowfullscreen="" frameborder="0" height="1246" width="680" title="streamlit_app.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1245.99px; left: 0px;"></iframe>
3.在目录下创建一个secrets.toml
文件。.streamlit
您可以选择在该文件本身中添加EMAIL
并PASS
防止输入您的 HF 凭据。
Streamlit 与 HugChat
您也可以在启动时跳过并输入它们。
secrets.toml 中没有 HF Creds 的 Streamlit
如果一切正确,您将能够与文本生成界面中选择的 LLM 聊天。
Streamlit 与 HugChat 演示
生产设置
请记住,在生产环境中,您理想情况下希望机器人仅根据知识库中包含的信息做出响应,其中可能包括文本、PDF、视频等。
在我的另一篇文章 ( https://mrmaheshrajput.medium.com/how-to-build-an-intelligent-qa-chatbot-on-your-data-with-llm-or-chatgpt-d0009d256dce ) 中,我讨论了如何实现这一点。您还可以利用 RDS 或其他数据库来存储上下文并将其与每个输入一起传递。
为了存储知识库的嵌入,您可以选择“pgvector”或嵌入数据库,或者如果您的搜索树相对较小,可以考虑使用 ANN 库。
AWS 的 CDK
AWS 提供了一个全面的示例,用于在 AWS 基础设施上使用 AWS CDK 部署由多个 LLM 驱动的聊天机器人。
您可以在此处访问:https://github.com/aws-samples/aws-genai-llm-chatbot
它部署了一个用React构建的综合 UI ,可以作为聊天机器人与已部署的 LLM 交互,支持同步请求和流模式以访问 LLM 端点、管理对话历史记录、在流模式下停止模型生成以及在所有部署的模型之间切换以进行实验。
如果您拥有必要的资源,就个人而言,这是您可以在生产环境中实施的最强大的解决方案之一。
来源:https://github.com/aws-samples/aws-genai-llm-chatbot
该堆栈包含设置聊天机器人系统所需的资源,包括:
a. 通过自定义构造部署一个或多个大型语言模型的能力,支持三种不同的技术:
- 通过指定特定的模型 ARN 从 SageMaker Foundation 模型部署模型。
- 部署HuggingFace TGI容器支持的模型。
- 使用自定义推理代码部署 Hugging Face 的所有其他模型。
b. 用户界面的后端资源,包括聊天后端操作和用于身份验证的 Cognito 用户池。
c. 由 DynamoDB 支持的用于管理对话历史的系统。
换以进行实验。
如果您拥有必要的资源,就个人而言,这是您可以在生产环境中实施的最强大的解决方案之一。
[外链图片转存中…(img-MZsh2NCp-1722335559513)]
来源:https://github.com/aws-samples/aws-genai-llm-chatbot
该堆栈包含设置聊天机器人系统所需的资源,包括:
a. 通过自定义构造部署一个或多个大型语言模型的能力,支持三种不同的技术:
- 通过指定特定的模型 ARN 从 SageMaker Foundation 模型部署模型。
- 部署HuggingFace TGI容器支持的模型。
- 使用自定义推理代码部署 Hugging Face 的所有其他模型。
b. 用户界面的后端资源,包括聊天后端操作和用于身份验证的 Cognito 用户池。
c. 由 DynamoDB 支持的用于管理对话历史的系统。
该堆栈还包含“模型适配器”,支持为特定模型设置不同的参数和功能,而无需更改核心逻辑来执行请求并使用来自不同 LLM 的 SageMaker 端点的响应。
博客原文:https://dz.closeai.cc/forum.php?mod=viewthread&tid=170