本教程将介绍如何将机器人部署到Chai,这是一个用于创建对话 AI 并与之交互的平台。它将允许我们通过移动应用程序与我们的机器人聊天。我们还将能够查看性能统计数据并观看它爬上 Chai bot 排行榜。

在本教程结束时,您将拥有自己的聊天机器人,如上图所示😎

我还制作了一个笔记本,其中包含此博客中的所有代码,这比手动复制和粘贴所有代码片段要方便得多。有兴趣就去看看吧!

寻找聊天机器人

为此,我们可以使用拥抱脸🤗。它拥有数百个最先进的 NLP 模型。我们将在本教程中使用Facebook 的 Blenderbot,因为它是目前最好的之一。它会从对话中学习,并在您聊天时变得更聪明!

试用机器人

这是一个示例对话:Screenshot 2021-08-12 at 12.01.56.png如果你想自己尝试这个机器人,在部署之前,你可以使用 HuggingFace 的 Transformers 模块(否则跳到下一节):

pip -q install transformers

运行以下python代码:

from transformers import BlenderbotTokenizer, BlenderbotForConditionalGeneration
import torch

model = BlenderbotForConditionalGeneration.from_pretrained("facebook/blenderbot-400M-distill")
tokenizer = BlenderbotTokenizer.from_pretrained("facebook/blenderbot-400M-distill")

print("Type \"q\" to quit")
while True:
    message = input("MESSAGE: ")
    if message in ["", "q", "quit"]:
        break
    inputs = tokenizer([message], return_tensors='pt')
    reply_ids = model.generate(**inputs)
    print(f"BOT:     {tokenizer.batch_decode(reply_ids, skip_special_tokens=True)[0]}")

很酷吧?

将聊天机器人部署到 Chai

Chai 的移动应用程序让我们可以非常轻松地展示机器人,无需拿出笔记本电脑并启动终端实例!

还有一个机器人排行榜可以攀爬。我们可以看到我们的新机器人与平台上的其他机器人相比如何:

安装所需的python模块:

pip -q install --upgrade chaipy

目录结构

我们想要一个这样的目录结构:

- bot/
    - bot.py
- dist.py

机器人代码

这是每当用户向我们的机器人发送消息时都会运行的代码。

可以使用 HuggingFace 上的任何模型。要将我们的机器人更改为另一个模型,请更改self.model网址。您还可以添加到past_user_inputs以更改机器人的起始上下文。这会改变机器人在对话开始时的行为方式。

在我们运行之前,请访问huggingface.co并创建一个帐户。转到右上角访问您的设置,您将在其中找到您的API 令牌。复制它并将其粘贴到写有<YOUR API_TOKEN GOES HERE>的行中。

bot/bot.py:

import json, requests, time
from chai_py import ChaiBot, Update


class Bot(ChaiBot):
    def setup(self): 
        self.apiToken = "<YOUR API_TOKEN GOES HERE>"  # put your huggingface API token here
        self.model = "facebook/blenderbot-400M-distill" # You can change this

        self.ENDPOINT = f"https://api-inference.huggingface.co/models/{self.model}"
        self.headers = {"Authorization": f"Bearer {self.apiToken}"}
        self.first_response = "Hey!"

    async def on_message(self, update: Update) -> str:
        if update.latest_message.text == self.FIRST_MESSAGE_STRING:
            return self.first_response
        payload = await self.get_payload(update)
        return self.query(payload)

    def query(self, payload):
        data = json.dumps(payload)
        response = requests.post(self.ENDPOINT, headers=self.headers, data=data)
        if response.status_code == 503: # This means we need to wait for the model to load 😴.
            estimated_time = response.json()['estimated_time']
            time.sleep(estimated_time)
            self.logger.info(f"Sleeping for model to load: {estimated_time}")
            data = json.loads(data)
            data["options"] = {"use_cache": False, "wait_for_model": True}
            data = json.dumps(data)
            response = requests.post(
                self.ENDPOINT,
                headers=self.headers,
                data=data
            )
        return json.loads(response.content.decode("utf-8"))["generated_text"]

    async def get_payload(self, update):
        messages = await self.get_messages(update.conversation_id)
        past_user_inputs = ["Hey"] # You can change this!
        generated_responses = [self.first_response]
        for message in messages:
            content = message.content
            if content == self.FIRST_MESSAGE_STRING:
                continue
            if message.sender_uid == self.uid:
                # Put the user's messages into past_user_inputs
                past_user_inputs.append(content)
            else:
                # Put the model generated messages into here
                generated_responses.append(content) 
        return {
            "inputs": {
                "past_user_inputs": past_user_inputs,
                "generated_responses": generated_responses,
                "text": update.latest_message.text,
            },
        }

是时候部署机器人了!

前往Chai 开发平台设置您的开发者帐户。这允许我们在我们自己的帐户下部署机器人。您的开发者 ID 和密钥可以在开发页面的底部找到。将这些粘贴到下面的DEV_UIDDEV_KEY中。

您可以更改nameimage_urldescription以个性化机器人在平台上的显示方式。

dist.py:

from chai_py import package, Metadata, upload_and_deploy, wait_for_deployment, share_bot
from chai_py.auth import set_auth

# you can find these on the chai dev page
DEV_UID = ""  
DEV_KEY = ""
set_auth(DEV_UID, DEV_KEY)

package(
    Metadata(
        name="Blenderbot Tutorial",
        image_url="https://i.imgur.com/vs0uUfD.png",
        color="0000ff",
        description="Hey! Come chat with me",
        input_class=Bot,
        developer_uid=DEV_UID,
        memory=3000,
    )
)

bot_uid = upload_and_deploy("bot/_package.zip")
wait_for_deployment(bot_uid)
share_bot(bot_uid)

运行时间dist.py

成功🎉

用你的手机扫描上面的二维码,你将被带到一个与你全新的机器人聊天的屏幕,这有多酷?!

(确保您的手机上安装了 Chai 应用,在应用商店或Google Play上获取)

结论

就是这样!您现在拥有自己的聊天机器人😄

更多教程:

  • Chai docs创建你的第一个机器人

  • Google Colab 关于在自定义对话中训练 Rick & Morty 聊天机器人的教程

  • 制作石头剪刀布机器人

Logo
向您推荐>>百度飞桨AI Studio社区

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐

  • · 如何重塑熊猫。系列
  • · 在哪里可以找到有关 Keras 中默认权重初始化器的文档? [复制]
  • · 求助!为什么用InsCode部署会出现无限重定向?

如何重塑熊猫。系列

问题:如何重塑熊猫。系列 在我看来,它就像 pandas.Series 中的一个错误。 a = pd.Series([1,2,3,4]) b = a.reshape(2,2) b b 有类型 Series 但无法显示,最后一条语句给出异常,非常冗长,最后一行是“TypeError: %d format: a number is required, not numpy.ndarray”。 b.sha

在哪里可以找到有关 Keras 中默认权重初始化器的文档? [复制]

问题:在哪里可以找到有关 Keras 中默认权重初始化器的文档? [复制] 我刚刚在这里](https://keras.io/initializers/)中阅读了有关[中的 Keras 权重初始化器的信息。在文档中,只介绍了不同的初始化程序。如: model.add(Dense(64, kernel_initializer='random_normal')) 当我没有指定kernel_initia

cover

求助!为什么用InsCode部署会出现无限重定向?