超级能力通过AI推动通知
#编程 #python #ai #gpt3

最近,我一直在花很多时间思考如何以一种有意义的方式对用户的瞄准,但我得出的结论是,AI可以帮助我实现超级,超级个性化的帮助,几乎实时的个性化。

特别是我想专注于推送通知 - 根据我的经验,我们的手机被通知饱和。现在看我的屏幕,我有大约56个来自不同应用程序的通知,但它们都没有真正脱颖而出。

在工程上使用AI?好吧,我要说的是,对于大多数具有数千用户的公司或应用程序,对个性化,及时的手工推动通知不可扩展,并且还具有根据用户行为来更改某些方面的能力。

因此,让我们看看如何使用AI做得更好。出于该演示的目的,让我们假装我们正在为食品交付应用程序而努力 - 您知道那种;一个生态系统中的餐馆,送货司机和食品订购者。

好吧,所以让我们考虑为什么以及何时要发送推送通知。我看到了一些潜力:

  • 大事件(体育,假期,国际活动)
  • 新餐厅
  • 根据自己的身份来针对用户(饮食要求,他们在旅行?通常从哪里订购?等)

还有更多,但让我们暂时将其保留在这些方面。

首先,我们将从餐馆的通用推送通知开始。

为此,我正在使用一部分Zomato餐厅,这些餐厅从here撤离并为我的需求进行了清洁。

数据设置

我们将获取所有餐厅数据,并将其详细信息摄入矢量数据库 - 这将使我们最终插入LLM,这将创建描述,推动通知并最终决定更改推动力的决定以及何时发送推动。

You can find the full code here

,但让我们专注于一些细节:

Restaurant = {
        "classes": [
            {
                "class": "Restaurant",
                "description": "An MunchMate Restaurant.",
                "moduleConfig": {
                    "text2vec-openai": {
                        "skip": False,
                        "vectorizeClassName": False,
                        "vectorizePropertyName": False
                    }
                },
                "vectorIndexType": "hnsw",
                "vectorizer": "text2vec-openai",
                "properties": [
                    {
                        "name": "description",
                        "dataType": ["text"],
                        "description": "The general description written by an LLM.",
                        "moduleConfig": {
                            "text2vec-openai": {
                                "skip": False,
                                "vectorizePropertyName": False,
                                "vectorizeClassName": False
                            }
                        }
                    },
              // code omitted     
    }

看一下餐厅班,其中包含餐厅的所有细节(或您要专注于用户酶的任何其他实体)。特别是注意到,我们使用text2Vec -openai模块对描述进行矢量化 - 在这里您可以使用任何其他模型和模块(出现了许多新事物)。

我在此示例中仅矢量化描述的原因是因为这是我唯一想在稍后进行语义搜索的唯一一件事。

描述

好吧,接下来,我们需要为餐厅编写描述。我不想手动进行TBH!

所以,让我们使用LLM实际生成餐厅的描述。在这里,这取决于您的用户酶,特别是您的CRM和/或营销策略,您想关注的是餐厅。

我的提示如下:

    Create a description, for a restaurant with the following details:
    Restaurant Name: {restaurantName}
    Cuisines: {cuisines}
    Delivering now: {isDeliveringNow}
    Table Booking Offered: {hasTableBooking}
    City: {city}

    Stick to the information provided. Do not make up any information about the restaurant in your description.

这样,我最终得到了这样的各种描述:

BJ's Country Buffet is an American and BBQ restaurant located in Albany, offering a range of delicious dishes. With both dine-in and delivery options, you can enjoy the restaurant's offerings from the comfort of your own home. You can also book a table in advance to make sure you have the perfect spot to enjoy their delicious cuisine.

我要设置描述而不仅仅是直接从餐馆详细信息中创建推送通知的原因是因为我希望这成为所有不同类型的营销活动,CRM以及任何涉及内容以使用户重新进入的内容的基础应用。

现在要使用有趣的东西。

事件推动通知

就像我们最初谈论的那样,自定义推送的用途之一可能是特定的事件。为每家餐厅制作的推动。

再次,you can check out the full code here

我会带您穿过其中的某些部分。

events = ["valentines day", "super bowl", "international women's day"]
    for e in events:
        generatePrompt = """
          Write a tempting, short push notification, with a short heading for the following new Restaurant:
          Description: {description}.
         Do not make up any information in the push notification
         Target the push towards: {event}

        Style:
        Heading:
        Content: 
        """


// code omitted

new_push_properties = {
                "content": push_content,
                "event": e
            }
            new_push_id = get_valid_uuid(uuid4())
            client.data_object.create(
                data_object=new_push_properties,
                class_name="Push",
                uuid=new_push_id
            )
            client.data_object.reference.add(
                from_uuid=restaurant["_additional"]["id"],
                from_property_name="hasPush",
                to_uuid=new_push_id
            )

因此,这次我们将提示更改为基于描述的推送通知。在这里,您也可以更具创造力:也许您有一定的风格或语气,您希望所有的声音听起来都像。在这里,您也可以通过其中的例子。

在此示例中,我最终得到了这样的推动:

标题:甜蜜的情人节!
内容:在Cookie Shoppe上满足您的爱吃甜食!

到目前为止,这是相当不错的,最少的手动努力 - 每次有一个新活动时,您都可以为每家餐厅提供很多推动。或者,也许每当您在特定活动当天添加新餐厅时,都会生成并发送自动推动 - 希望您能将用户带到该餐厅。

让我们进一步向每个用户个性化。不仅是名称,而且通过信息,我们已经有关于它们的信息。

个性化的推送通知

好吧,因此,对于此步骤,您将需要有关用户的信息来创建有关它们的传记。为了简单起见,我在此示例中为用户创建了BIOS。但是实际上,您可以根据用户的饮食历史获得更多的创造力,并收集有关用户的信息,您可以要求他们输入偏好。对于其他应用程序,也许您可​​以考虑社交登录,并要求从那里收集一些有关它们的信息。

让我通过一些细节引导您:

首先,我继续创建了一个用户类。只包含一个名称和生物(请记住,在现实生活中,此数据结构可能更为复杂)。

    user_schema = {
        "classes": [
            {
                "class": "User",
                "description": "A user.",
                "properties": [
                    {
                        "dataType": ["text"],
                        "name": "biography",
                    },
                    {
                        "dataType": ["text"],
                        "name": "name"
                    }
                ]
            }
        ]
    }

接下来,我给了两个用户bios。

"biography": "Alex enjoys Mexican food, hates valentines day, loves the superbowl",
        "name": "Alex"


"biography": "Alice is a vegetarian, woman, loves Valentines day and the superbowl.",
        "name": "Alice"

请注意,关于LLM的好处之一是,您不需要对生物的结构或包含哪些信息(本质上是您拥有的任何信息)非常严格创造力给一些个性化。我说的个性化总比没有好。

提示我正在使用:

            generatePrompt = """
                 Write a short, targeted, clever, punchy push notification, with a short heading for the following new Restaurant:
                Description: {description}.
                The push notification should appeal to this user, based on their biography, likes and dislikes: {person}.
                Base the push notification on today's event: {event}.
                Use their name.
                Do not make up any information in the push notification. 
                Style:
                Heading:
                Content: 
            """

再次,您可以在提示中随心所欲!

我最终得到了这样的推动:

Heading: Bye Bye V-Day!
Content: Alex, treat yourself to BBQ at BJ's! Enjoy dine-in or delivery.
Heading: Valentine's Day at Austin's!
Content: Alex, forget roses, get BBQ! Order now: Austin's BBQ & Oyster Bar
Heading: Skip the Date Night
Content: Alex, forget V-Day with taco night at El Vaquero!
Heading: Bye Bye Valentines!
Content: Alex, end the day with something sweet at Cookie Shoppe!


Heading: Veg Out Today!
Content: Alice, make Valentine's Day extra special with a delicious feast from Austin's BBQ and Oyster Bar!
Heading: Celebrate V-Day with Alice!
Content: Enjoy Mexican-style vegetarian dishes at El Vaquero Mexican Restaurant in Albany!
Heading: Valentine's Day at Cookie Shoppe!
Content: Alice, satisfy your sweet tooth with our delicious veg options!

我真正喜欢的是,它根据每个人的BIOS考虑了差异。例如,亚历克斯(Alex)不喜欢情人节,但爱丽丝(Alice)确实喜欢。或者是爱丽丝是素食主义者,但我们不知道亚历克斯的饮食要求,因此不关注这一方面。

在那里您有 - 几百行代码,现在您可以拥有自己的完全个性化的推送通知构建器。

更进一步,您可以建立全面的营销活动。

在我的个人工作中,我将进一步采取它,并弄清我的用户对我的反应最佳的语气。如果很感兴趣,请告诉我,我也会写这件事!