如何部署 LLM 聊天机器人 将 LLM 聊天机器人投入生产并带给客户的 4 种方法

如何部署 LLM 聊天机器人 将 LLM 聊天机器人投入生产并带给客户的 4 种方法

img

照片由Pavel HercegUnsplash上拍摄

有许多库可用于将您的 LLM 聊天机器人从开发阶段过渡到生产阶段。

在本文中,我将根据撰写时的当前趋势讨论一些实现此目的的流行方法。

选项 1 — 将 QA 机器人添加到公司的 Discord 服务器

这种方法有利于内部反馈,并且当您的客户也在 Discord 生态系统内时也很有用。

img

通过 discord 机器人演示 LLM

此外,此解决方案的元素还可以适用于您网站上的标准聊天机器人。只需从您的 Web 应用程序而不是 Discord 调用 API 网关即可。

选项 2 — 利用 ChatUI 实现即插即用的解决方案

自带模型或使用 sagemaker 端点并开始与ChatUI聊天。

img

定制LLM的HuggingFace ChatUI演示

选项 3 — 使用 gradio

虽然它提供了更快的开发速度,但在生产环境中实施之前仍需要仔细考虑。

img

Gradio 流媒体聊天机器人演示

选项 4 - Streamlit HugChat 插件

仅当您已经在使用 Streamlit 时才推荐使用;否则,它不是仅适用于聊天机器人的最佳解决方案。

img

Streamlit Chatbot 演示由 HugChat Creds 提供支持

在生产环境中,解决方案通常包含三个主要组件:

  1. 将您公司的知识库转换为嵌入并存储它们。
  2. 将输入问题转换为嵌入,并从向量存储中有效地检索最近邻嵌入。
  3. 向 LLM 提供背景和问题并将输出提供给用户。

本文主要讨论如何向用户呈现输出。对于前两个步骤,我提供了一篇更详细的文章,您可以在此处探索:https://mrmaheshrajput.medium.com/how-to-build-an-intelligent-qa-chatbot-on-your-data-with-llm-or-chatgpt-d0009d256dce。

选项 1 — 将 LLM 支持的 QA 机器人添加到 discord

img

系统设计

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 帐户并可以访问您想要添加此机器人的服务器)。

img

将 QA Bot 添加到您的服务器(公会)

2. 注册命令

我们将使用斜线命令。如果您熟悉 Discord API,请随意探索此方法的替代方法。

python从已安装包的任何环境运行以下代码requests

我们正在使用更快的公会命令,并且该命令将通过/qadiscord 中的输入来调用。

不要忘记用您的值替换APP_ID、、BOT_TOKENSERVER_ID右键单击服务器并单击“复制服务器 ID”)。

通过以下方式注册此命令:

python 注册_命令_qa_bot.py

响应:

img

注册命令响应

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 网关触发器:

img

为了简单起见,“安全”设置为打开。

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 端点,

img

API 端点

并将其粘贴到INTERACTION ENDPOINT URL应用程序的 discord 开发者门户中“常规信息”下的选项中。

img

Discord 应用程序的交互端点 URL

如果 API 网关有效

5. 测试虚拟命令

您可以注释掉 lambda 中与端点相关的代码并测试代码。

在下面的测试中,我只是返回用户的问题来验证功能。

img

测试机器人

6.将 LLM 部署到 Sagemaker 端点

在此示例中,我将使用Sagemaker Jumpstart Foundation 模型创建一个终端节点。或者,您也可以使用任何其他基础模型或基于数据集的微调模型,并将其部署到终端节点。

如果您之前没有申请过 g5 实例,请先ml.g5.2xlarge for endpoint usage通过服务配额申请增加配额。请注意,解决工单可能需要长达 24 小时。

接下来,导航到您的 Sagemaker Studio,然后在“Sagemaker Jumpstart”下选择“Llama-2–7b-chat”。

img

Llama 2 7B 在 Sagemaker Jumpstart 上聊天

根据需要更改部署配置,记下“端点名称”变量ENDPOINT_NAME并单击“部署”按钮。

img

该模型不适用于微调,请使用“Llama 2 7b”对数据集进行微调。

几分钟后,端点状态应该处于服务状态。

img

Sagemaker Jumpstart 端点状态

您还可以从 Sagemaker Studio 中“部署”下的“端点”菜单项中检查端点状态。

img

端点详细信息

我们将使用端点名称在 lambda 中调用它。

7.修改 lambda 以调用 sagemaker 端点并返回响应

更新ENDPOINT_NAMElambda 中的环境变量名称。

还要删除或取消注释测试代码。

现在,当您/qa在 Discord 中使用该命令时,它将调用 Sagemaker 端点并返回来自 LLM 的响应。

img

调用 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 函数。

  1. 使用 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>
  1. 授予此 lambda 策略“sagemaker:InvokeEndpoint”权限。

4.添加ENDPOINT_NAME环境变量。

5.添加新的 REST API 网关触发器并记下 API 端点。

  1. 克隆https://github.com/huggingface/chat-ui存储库。

img

克隆 ChatUI Repo

  1. ChatUI 需要运行 MongoDB 实例来存储聊天历史记录。您可以按照存储库中概述的方式使用 MongoDB 容器:
docker run -d - p  27017 : 27017 --name mongo-chatui mongo:latest

img

MondoDB容器

.env.local8.在ChatUI根目录下创建新文件并添加两个新对象,MONDODB_URLMODELS

img

模型对象与文件类似.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 
    } 
]
  1. 运行以下两个命令:
npm install 
npm run dev # 对于开发环境# 对于开发
npm run prod  # 对于生产

img

npm 安装

img

npm 运行 dev

给出的 URLnpm run dev将运行 ChatUI 应用程序。

img

带有 Sagemaker Endpoint 的 ChatUI

因为我无法弄清楚我们的响应语法,ChatUI 总是给我这个错误:

img

ChatUI 错误

但是端点和 lambda 能够根据 cloudwatch 日志成功返回输出。

img

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流模式的函数。

img

Gradio 演示

选项 4 — Streamlit 聊天机器人

这篇文章“如何使用 Streamlit 构建由 LLM 驱动的聊天机器人”是开始您关于这个主题的旅程的好地方。

  1. 克隆此 repo:https 😕/github.com/streamlit/app-starter-kit
  2. 修改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

您可以选择在该文件本身中添加EMAILPASS防止输入您的 HF 凭据。

img

Streamlit 与 HugChat

您也可以在启动时跳过并输入它们。

img

secrets.toml 中没有 HF Creds 的 Streamlit

如果一切正确,您将能够与文本生成界面中选择的 LLM 聊天。

img

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 端点、管理对话历史记录、在流模式下停止模型生成以及在所有部署的模型之间切换以进行实验。

如果您拥有必要的资源,就个人而言,这是您可以在生产环境中实施的最强大的解决方案之一。

img

来源: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

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值