Boost Your Day with Helpful Emails: W5100S-EVB-Pico and ChatGPT API in Action

This post covers how to send emails using ChatGPT API and SendGrid with the W5100S-EVB-Pico board.

转发: Boost Your Day with Helpful Emails: W5100S-EVB-Pico and ChatGPT API in Action

项目介绍

介绍

了解如何在 W5100S-EVB-Pico 开发板环境中使用 ChatGPT API 和 SendGrid 发送电子邮件。 首先,在 PC 上使用带有 Python 的 ChatGPT API。 然后,使用 Micropython 和 urequests 在 W5100S-EVB-Pico 板上使用 SendGrid 发送电子邮件。

先决条件

OpenAI账户

  • API密钥

SendGrid账户

电脑

带 Micropython 的 W5100S-EVB-Pico

第 1 步:在 PC 环境中使用 Python 使用 chatGPT API

第一步是在 PC 环境中使用 chatGPT API。 有两种方法可以做到这一点:使用库或使用请求。 library 方法需要安装 Python 包,而 requests 方法需要向 API 端点发送 HTTP 请求。

使用图书馆:
要通过库使用 chatGPT API,您首先需要安装该包。 这可以通过在您的终端中运行以下命令来使用 pip 来完成

pip install openai

安装包后,您可以在 Python 代码中导入包并使用以下代码验证您的 API 密钥:

import openai
openai.api_key = "YOUR_API_KEY"

我询问了 ChatGPT 如何通过 Python 使用 ChatGPT API 并收到了示例代码,但它提供了基于文本的模型代码,而不是最新模型 (gpt-3.5-turbo)。

看到即使再次请求也给出了相同的代码,似乎 gpt-3.5-turbo 是最近发布的,所以还没有了解信息。

不过官方文档里面解释的很清楚,大家可以参考指南文档进行操作。

我通过如下更改示例代码对其进行了测试。 为了使用环境变量,我们使用了 dotenv 包。

import openai
import os
import dotenv
dotenv.load_dotenv()

openai.api_key = os.environ.get('OPEN_API_KEY')
msg = "Hello, how are you?"

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": msg}]
)

print(response)
print(response.choices[0].message.content)

第 2 步:使用 urequests 在 W5100S-EVB-Pico 开发板环境中使用 Micropython 使用 chatGPT API

在 PC 环境中成功使用 chatGPT API 后,下一步就是在 W5100S-EVB-Pico 板上的 Micropython 环境中使用它。 为此,我们将使用 urequests 库将 HTTP 请求发送到 chatGPT API 端点。

同样,如何使用 ChatGPT API 在 OpenAI 的官方文档中有很好的解释。

PC环境API测试

import requests
import json
import os
import dotenv
dotenv.load_dotenv()

api_key = os.environ.get('OPEN_API_KEY')
url = "https://api.openai.com/v1/chat/completions"

msg = "Hello, how are you?"

headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
data = {
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": msg}]
}

response = requests.post(url, headers=headers, data=json.dumps(data))
print(response)

if response.status_code == 200:
    response_data = json.loads(response.text)
    body = response_data["choices"][0]["message"]["content"]
    print(body)
else:
    print("Error:", response.text)

W5100S-EVB-Pico板环境下的实现与执行

接下来,在 W5100S-EVB-Pico 环境中使用 Micropython 编写了使用相同功能的代码。 区别在于:

  • 使用 W5100S 的以太网初始化代码
  • 使用 urequests(使用 upip 安装)
  • 秘密:不使用 dotenv 对其进行硬编码。 以后会补充的。
from machine import Pin, SPI
import network
import utime
import urequests
import json

# W5x00 init
def init_ethernet():
    spi = SPI(0, 2_000_000, mosi=Pin(19), miso=Pin(16), sck=Pin(18))
    nic = network.WIZNET5K(spi, Pin(17), Pin(20))   # spi, cs, reset pin
    # Using DHCP
    nic.active(True)
    while not nic.isconnected():
        utime.sleep(1)
        # print(nic.regs())
        print('Connecting ethernet...')

    print(f'Ethernet connected. IP: {nic.ifconfig()}')


def gpt_main():
    init_ethernet()

    api_key = "<API_KEY>"
    url = "https://api.openai.com/v1/chat/completions"
    msg = "Hello, how are you?"

    headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
    data = {
        "model": "gpt-3.5-turbo",
        "messages": [{"role": "user", "content": msg}]
    }

    response = urequests.post(url, headers=headers, data=json.dumps(data))

    if response.status_code == 200:
        response_data = json.loads(response.text)
        # print('response_data:', response_data)
        body = response_data["choices"][0]["message"]["content"]
        print(body)
    else:
        print("Error:", response.text)


gpt_main()

第 3 步:使用带有请求的 SendGrid 发送电子邮件

使用 ChatGPT API 生成消息内容后,下一步是将消息发送到用户的电子邮件。 为此,我们可以使用 SendGrid,它是一个流行的电子邮件服务提供商,提供用于发送电子邮件的 RESTful API。 要在 Python 中使用 SendGrid API,我们可以使用 requests 库,它允许我们轻松地发出 HTTP 请求。

要开始使用 SendGrid API,我们需要在他们的网站上创建一个帐户并获取一个 API 密钥。 然后我们可以使用这个 API 密钥来验证我们对 SendGrid API 的请求。

您每天可以使用 Sendgrid 免费帐户免费发送 100 封电子邮件。
 

一旦我们获得了 API 密钥,我们就可以创建一个 Python 脚本来发送电子邮件。 我们需要在请求正文中提供收件人电子邮件地址、主题和消息内容。 我们还需要设置“授权”标头以包含我们的 API 密钥。

以下是关于如何使用 ChatGPT 建议的 SendGrid API 作为 HTTP 请求方法的 Python 代码片段。
 

import requests

sg_api_key = "YOUR_SENDGRID_API_KEY"
sg_url = "https://api.sendgrid.com/v3/mail/send"

# Recipient email address
to_email = "recipient@example.com"

# Email subject
subject = "Your daily dose of inspiration"

# Message content
message = "Hello, this is your daily dose of inspiration. Keep going and never give up!"

# Create request body
data = {
    "personalizations": [{
        "to": [{"email": to_email}],
        "subject": subject
    }],
    "from": {"email": "sender@example.com"},
    "content": [{
        "type": "text/plain",
        "value": message
    }]
}

# Create request headers with API key
headers = {
    "Authorization": f"Bearer {sg_api_key}",
    "Content-Type": "application/json"
}

# Send email using SendGrid API
response = requests.post(sg_url, headers=headers, json=data)

if response.status_code == 202:
    print("Email sent successfully!")
else:
    print(f"Error sending email: {response.text}")

此脚本向收件人电子邮件地址发送一封纯文本电子邮件,其中包含提供的主题和消息内容。 如果电子邮件发送成功,脚本会打印一条成功消息。 否则,它会打印一条带有响应文本的错误消息。

第 4 步:编写和测试应用程序提示

接下来,合并步骤 2 和 3 中编写的代码,以通过电子邮件发送从 ChatGPT 收到的响应。

请求 ChatGPT API 并将收到的响应添加到 SendGrid API 的主体。

这部分花了一些时间,因为通过 ChatGPT Web 显示的内容和通过电子邮件发送的正文形状不同。

考虑到无论内容如何,都要在邮件中显示表单,因此需要进行多次测试,并在提示中添加了以 HTML 表单请求的部分。

标有 ... 的部分被省略,因为它们与上一步的代码相同。

# ...

def gpt_main():
    init_ethernet()
    # ...

    if response.status_code == 200:
        response_data = json.loads(response.text)
        body = response_data["choices"][0]["message"]["content"]
        # ...

        headers = {"Authorization": f"Bearer {sg_api_key}", "Content-Type": "application/json"}
        resp = urequests.post(sendgrid_endpoint, headers=headers, data=json.dumps(data).encode('utf-8'))
        # ...

gpt_main()

以下内容适用于提示。

使用 Unsplash

我想在邮件中放一张图片,所以我在提示中使用了 Unsplash URL。 如果你输入一个关键字,你可以得到一个随机图像。

有关相关信息,请参阅 ChatGPTers 站点上的文章。

将文本转换为 HTML

通过在提示末尾添加以下短语,我可以在发送电子邮件时发送转换为 HTML 的代码。

最后将文本(用markdown写的)转成html格式。 应用使字体大小为 18px 的样式。

它看起来比以纯文本形式发送要好一些。 需要进行更多测试。

最后一步:在特定时间使用 GhatGPT API 撰写和发送电子邮件

最后,我使用时间信息将邮件设置为每天在特定时间发送。

# ...
while True:
    # Get the current time
    current_hour = time.localtime()[3]
    current_minute = time.localtime()[4]

    # Check if it's time to send the messag
    if current_hour == 9 and current_minute == 0:
        gpt_main(morning_subject, morning_msg)
    elif current_minute == 10:
        gpt_main(english_subject, english_msg)

    print(f'Current Time: {get_current_time()}')
    time.sleep(60)

检查 OpenAI API 使用情况

在 OpenAI 帐户设置屏幕中,我检查了我使用了多少免费积分。

我已经发送了很多请求,但还没有花一美元。 我只能使用到 6 月 1 日,所以我必须在空闲时间努力测试它。

您可以看到我使用了哪些 API 的令牌数量的详细信息,如下所示。 它似乎每10分钟更新一次。

结论

在尝试了几次提示后,我得到了以下输出,功能是:

  • 在 W5100S-EVB-Pico 板环境下使用 Micropython 使用 ChatGPT API 和 SendGrid API
    • 使用 2 个提示
      • 英语单词
      • 给人力量的话
    • 将一个设置为每天上午 9:00 运行,另一个每小时运行一次

每封电子邮件的接收方式如下。

当然,结果取决于你如何提问和提问,所以你需要对此有很好的认识和大量的尝试。

一旦你习惯了,我想你就能尝试很多有趣的事情。

我还不知道下一步该怎么做,但我仍然有兴趣尝试使用它。

这就是我认为的下一步。

  • 创建提示以获得更有用的输出
  • 除了电子邮件,使用其他平台,例如 Slack 或 Notion
  • 使用其他 OpenAI API 模型,例如图像

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值