使用Python中的OpenAI模型创建一个Twitter机器人:初学者指南。
#初学者 #twitter #python #openai

AI是技术生态系统中的新破坏性事物,几乎所有其他部门都在寻找创新的方法来在其重复过程中采用自动解决方案,而公司将为组织中的无缝和高效工作付费。

生成的预训练的变压器(GPTs)是一种大语模型(LLM),也是一种生成人工智能的杰出框架,它们已经存在一段时间了即使是非技术人口也可以使用。

在本文中,您将学习如何将OpenAI模型之一集成到自动化Twitter机器人的Python程序中。尽管Twitter上有大量的机器人,但要建立自己的开发人员会很酷。谁知道?您的想法可能会在Twitter开发论坛上出现。

这些过程将处于易于遵循和易于访问的步骤,让我们走!

入门
在正确启动之前,有几个设置应进行到位,其中包括:

  1. 访问Twitter API和OpenAI API。
  2. 文本编辑器。
  3. 一个定期运行Python脚本的平台。

要访问Twitter API,您应该在Twitter Developer Portal上注册DEV访问。如果没有Twitter帐户,您就无法拥有开发帐户,因此请确保使用严格用于自动推文的帐户,这将使其他用户知道您的帐户是一个机器人帐户,并防止您的帐户被标记。要了解如何正确设置自动帐户,请在Twitter’s docs上检查bots的自动帐户标签。

您会被问到几个问题以了解您的API使用范围,并且可以为Twitter API提供各种级别的访问。在Twitter上进行了一系列更改后,为新应用程序撤销了高架访问权限,免费访问是最低级别。它具有限制的功能,但应出于您将要构建的目的而做得很好。要了解有关Twitter访问级别和版本的更多信息,请检查 About the Twitter API page。

monthly cap usage for different tiers

您可以在获得访问权限后进入仪表板页面,在此页面上,您可以命名应用程序并进行身份验证设置,这些设置确定生成的令牌/秘密可以/不能做什么。默认环境通常在生产上,并且可以随着更多的发展而更改。切记将所有令牌存储在安全的地方。

dashboard interface

同样,查找OpenAi的API页面并创建一个个人帐户。免费试用应对大多数基本的通话频率进行,并且应持续相当多的时间,但是,如果您打算进行一些繁重的举重,请继续添加您的首选订阅。

OpenAi usage metrics page

有很多用于托管和部署脚本的平台,Wayscript是一个不错的选择,我们可以在一点点设置它。

准备代码环境
现在所有的准备步骤都已经避开了,现在该编写程序了。有一个无穷无尽的功能列表可以添加到Twitter机器人中,但是您需要预先安装一些具有内置功能的依赖项,以使代码写作有效。您将建立一个基于用户的请求提供有关特定主题的事实的机器人,但您也可以添加一个扭曲!

Tweepy和OpenAI是所需的库,在您的终端中运行pip install tweepy openai以安装它们。在全球安装依赖关系不是一个好练习,请参阅有关如何从终端设置虚拟环境的本文。

接下来是什么?
激活虚拟环境后,在项目文件夹中创建一个main.py文件,然后导入预装的库,您还应该导入time库,该库将在以后使用,不要安装time,因为它是一个内置的Python软件包。

# importing required libraries
import tweepy
import openai
import time

既然您已经进口了tweepy,则可以使用其一个功能来验证您最初生成的凭据,但是在此之前,请创建一个新的.py文件来存储您的凭据并将其命名为config.py。在文件中,将变量分配给每个凭据并保存文件。

## config.py
consumer_key = "xxxxxxxxxxxxxxxxxxxxxx"
consumer_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
access_token = "13812xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
access_token_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
openai_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client_ID = "S1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

您现在可以通过将配置导入主文件来导入所有凭据。

# importing required libraries
import tweepy
import openai
import time
# note the use of * to universally import config content
from config import *

您无法在不认证这些凭据的情况下访问Twitter API。 OAuthHandler,也称为新版本的Tweepy的OAuth1UserHandler,是一个tweepy类,用于验证凭证,足以使此级别的访问级别了解其他支持的身份验证方法,请检查Tweepy docs中的其他支持的身份验证。也设置您的OpenAi凭据。

# authorizing with tweepy, note that "auth" is a variable
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
# .set_access_token() is a tweepy method
auth.set_access_token(access_token, access_token_secret)

# creating API object
api = tweepy.API(auth)

# setting up OpenAi key
openai.api_key = openai_key

另一个好习惯是将config.py添加到.gitignore文件中,这将确保您的凭据将项目推到github。

OpenAI聊天模型
有各种OpenAI聊天模型,每个聊天模型都有自己的语法。所有聊天模型都会使用令牌产生响应。对于每4个字符,就会花费1个令牌,更长的单词成本更高的令牌,因此可以考虑到不超过您的API呼叫限制是很好的。

我们将使用text-davinci-003模型(一种GPT-3.5型号),但是gpt-3.5-turbo是GPT-3.5模型最强大的类型,因为它已针对聊天完成进行了优化,并且要少于令牌。在OpenAi's Docs上广泛阅读有关他们的聊天模型的广泛阅读。

写作功能
我们需要编写一个generate_fact()函数,该功能将从用户决定的任何主题中使用所选聊天模型生成响应。 Completion类允许我们创建一个聊天完成的实例,并以下选项调整一些参数,下面的代码:

#function to geenrate facts about a topic
def generate_fact(topic):
  # play around with the prompt
    prompt = f"you are a grumpy computer programmer, tell a fact about {topic} in a rude and sarcarstic tone"
    response = openai.Completion.create(
    # bear in mind that this engine has a token limit of 4000+ tokens
        engine="text-davinci-003",
        prompt=prompt,
    # note that max_token accomodates both prompt_token and completion_token so provide enough tokens
        max_tokens=1024,
    # set to n=1 for single response and n>1 for multiple responses
        n=1,
        stop=None,
    # temperature ranges from 0.0 to 1.0, nearness to 0 would make the model more deterministic and repititive, nearness to 1 would make it fluid
        temperature=0.8,
    )
    fact = response.choices[0].text.strip()
    return fact

既然您已经创建了一个事实生成的模型,则需要编写一个handle_mentions()函数来处理bot帐户的提及,您将使用tweepy来收听会触发响应的特定提及。


# function to handle mentions
def handle_mentions():
    mentions = api.mentions_timeline(count=5)  # only retrieve last 5 mentions

    for mention in mentions:
        if mention.in_reply_to_status_id is not None:  # skips tweet replies(optional)
            continue
        if mention.user.screen_name == "bot_account_username":  # skip mentions from self
            continue

        # parse mention_text, it can be "tell me about", anything
        mention_text = mention.text.casefold() # casefold to prevent any error that may arise from different cases
        if "tell a fact about" not in mention_text:
            continue
        topic = mention_text.split("tell a fact about")[1].strip()

        # generate a fact by calling our initisl function
        try:
            fact = generate_fact(topic)
            # post the fact as a reply to the mention
            api.update_status(f"@{mention.user.screen_name} {fact}", in_reply_to_status_id=mention.id)
    # handle OpenAI API errors
        except openai.OpenAIError as e:
            api.update_status(f"@{mention.user.screen_name} sorry, an error occurred while processing your request.", in_reply_to_status_id=mention.id)
    # handle Tweepy errors
        except tweepy.TweepyException as e:
            api.update_status(f"@{mention.user.screen_name} sorry, an error occurred while processing your request.", in_reply_to_status_id=mention.id)
    # Handle other errors that may arise in your code
        except Exception as e:
            api.update_status(f"@{mention.user.screen_name} sorry, an error occurred while processing your request.", in_reply_to_status_id=mention.id)

记住用您的bot帐户的用户名替换bot_account_username,添加错误处理程序也是一个很好的python练习。

要确保该程序在指定的时间段内继续进行提及并发送响应,您需要添加一个用作循环的代码块。

# by adding if __name__ == "__main__":, we can ensure that certain code blocks, handle_mentions() in this case, will only be executed when main.py is run as the main program

if __name__ == "__main__":
    while True:
        try:
            handle_mentions()
        except tweepy.TweepyException as e:
            # handle twitter API errors
            print("an error occurred while handling mentions:", e)
        except Exception as e:
            # handle other errors
            print("an error occurred while handling mentions:", e)
        # wait for 2 minutes before checking for new mentions(reduce the time if traffic increases on your bot account, this is why we imported time)
        time.sleep(120)

注意:
复制上述代码块时,可能会有一系列```Indentationerror实例'',因此请务必注意它们。

在Wayscript上部署Python脚本。
设置Welding订阅可能有点具有挑战性,但是Wandcrigh的此tutorial video彻底有助于从头到尾分解过程。

WayScript home page

结论
我一直在测试具有更多功能的机器人,看看repository。我会定期更新README.md

您想检查更多我的文章吗?您可以找到它们here,也可以在Twitter上与我联系。

使用OpenAi模型构建自己的Twitter机器人的出色工作!如您所知,Python和Openai使创建一个可以与用户交互并提供有价值信息的强大机器人变得容易。借助您学到的技术,您可以创建的可能性无尽。无论是语言翻译机器人,事实生成器还是提醒机器人,关键是使用您的想象力并建立为您的受众提供价值的东西。因此,请继续,构建自己的Twitter机器人,看着它栩栩如生!