在 W5100S-EVB-Pico 上集成 ChatGPT 和 Slack API:制作英语学习机器人

本文指导读者如何在PC和W5100S-EVB-Pico开发板上创建Slack应用,集成ChatGPT,利用Python和Micropython发送消息,实现自动化工作流程。通过这种方式,可以改善团队沟通和生产力。

项目介绍

Slack 是一种流行的团队沟通平台,企业使用它来改善协作和生产力。 将人工智能支持的语言模型 ChatGPT 与 Slack 集成,可以自动执行各种任务并改进工作流程。

在本文中,我将引导您完成在 PC 环境中使用 Python 请求和在 W5100S-EVB-Pico 开发板环境中使用 Micropython urequests 设置 Slack 应用程序和集成 ChatGPT 的步骤。

我把题目定为学习英语单词。

先决条件

  • OpenAI 帐户和 API 密钥
  • Slack 帐户
  • W5100S-EVB-Pico
  • Thonny:Micropython 环境

创建一个 Slack 应用程序

应用程序创建和 API 令牌发行

将 ChatGPT 与 Slack 集成的第一步是创建一个新的 Slack 应用程序。 按照以下步骤创建一个新的 Slack 应用程序:

转到 Slack API 主页并登录您的帐户。

单击“创建应用程序”按钮开始应用程序创建过程。

为您的应用程序命名并选择要安装它的工作区。

创建应用程序后,您将被重定向到“基本信息”页面。 在这里,您可以找到您的“应用凭证”,例如“客户端 ID”、“客户端密码”和“验证令牌”。 这些凭据将用于验证您的应用程序并与 Slack API 交互。

接下来,单击左侧菜单中的“OAuth & Permissions”选项卡。 在这里,您会找到“机器人令牌”部分。 单击“添加机器人用户”按钮以将机器人添加到您的应用程序。

为您的机器人设置一个显示名称,然后单击“添加机器人用户”按钮以保存更改。

您现在将看到生成了一个新的“机器人用户 OAuth 访问令牌”。 此令牌将用于验证您的机器人并与 Slack API 交互。

发送消息测试

通过使用以下代码向频道发送消息来测试我的 Slack 应用程序是否正常工作。

import requests
import time

# Slack API Token and URL
SLACK_API_TOKEN = "<Slack API Token>"
SLACK_API_URL = "https://slack.com/api/chat.postMessage"

# Message to send
message = {
    "channel": "#general",
    "text": "Hello, World!"
}

for i in range(0, 2):
    # Send message using Slack API
    response = requests.post(
        SLACK_API_URL,
        headers={
            "Authorization": "Bearer " + SLACK_API_TOKEN,
            "Content-type": "application/json"
        },
        json=message
    )
    # Print response
    print(response.json())
    # Wait for seconds before sending the message again
    time.sleep(30)

PC环境下使用Python请求的ChatGPT提示测试

基于用于邮件传输的ChatGPT提示修改

我以前使用 ChatGPT API 发送有用的电子邮件。 我是根据当时使用的提示修改的。

在生成要通过电子邮件发送的内容时,我请求使用 HTML 格式。

但是,当我按原样将其发送到频道时,标签并未应用如下:

经过检查,我发现为了使用 Slack API 发布降价格式的消息,它需要使用一种称为块的格式。

因此,需要将其转换为适合 Slack API 的块格式。

将消息格式转换为适合 Slack API 的块格式

有几种方法可以将现有的 HTML 格式转换为块格式。

您可以直接执行此操作或使用库,但您也可以请求 ChatGPT 为您执行此操作。

我在提示中添加了以下内容以请求可用于 Slack API 请求的块格式响应。

# ChatGPT Prompt part
...
Please set the format as a 'blocks' value for Slack API
...
## RETURN ONLY THE MAIN RESPONSE. REMOVE PRE-TEXT AND POST-TEXT.

以这种方式请求时,以block格式给出,但解析时需要在前后加上解释或变量名。 解析可以在代码中实现,比较简单。

下面是一个响应示例。

在 W5100S-EVB-Pico 开发板环境中使用 Slack 和 ChatGPT API,使用 Micropython urequests

添加 urequests.py

您需要添加 urequests 库。 有几种安装库的方法,但我只是从下面的链接中复制了库文件。

在 Thonny 中创建一个新文件,然后从上面的链接复制并粘贴整个库代码。 将其保存为 urequests.py.

修改 Micropython 的不兼容代码

要在 W5100S-EVB-Pico 板环境中使用 Slack 和 ChatGPT API,您需要修改 Python 代码以与 Micropython 兼容,Micropython 是为微控制器设计的 Python 轻量级实现。

您需要添加一个初始化函数才能在 W5100S-EVB-Pico 板上使用以太网。 然后,您可以通过将请求更改为 urequests 并在运行时修复任何兼容性问题来修改 Python 代码。

主要问题是在使用 urequest 时设置标题和正文。

下面是urequests的基本操作代码。 json和ujson都可以,可以使用值为json dump的data参数。

from machine import Pin, SPI
import network
import utime
import urequests
import ujson

# Slack API Token and URL
SLACK_API_TOKEN = "<Slack API Token>"
SLACK_API_URL = "https://slack.com/api/chat.postMessage"

# 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 main():
    init_ethernet()

    # Message to send
    message = {
        "channel": "#general",
        "text": "Hello, World!"
    }

    # Repeat message every 30 seconds
    for i in range(0, 1):
        # Send message using Slack API
        response = urequests.post(
            SLACK_API_URL,
            headers={
                "Authorization": "Bearer " + SLACK_API_TOKEN,
                "Content-type": "application/json"
            },
            data=ujson.dumps(message)
        )

        # Print response
        print(response.json())
        # Wait for seconds before sending the message again
        utime.sleep(30)

main()

测试并得到结果

我编写了一个代码来使用 ChatGPT API 获取要发送到 Slack 频道的正文并将其发布到 Slack 频道。

我已经使用时间库将其设置为每小时发送一次消息。

代码已经分享到 Github 上。

以下是发布在 Slack 频道上的结果:

最初发布在#general 频道,但后来创建了#daily-english 频道并继续在那里发布。

我在 Thonny 上编写和执行代码。

检查在 Slack web 或 PC 应用程序上收到的消息。

消息的格式不一致。 需要及时改进。

结论

将 ChatGPT 与 Slack 集成可以自动执行各种任务并改进工作流程。 在本文中,我向您介绍了在 PC 环境中使用 Python 请求和在 W5100S-EVB-Pico 开发板环境中使用 Micropython urequests 设置 Slack 应用程序和集成 ChatGPT 的步骤。 按照本文概述的步骤,您可以轻松设置 ChatGPT 与 Slack 的集成并简化您的工作流程。

最后,这是 ChatGPT 写的关于这个项目的常见问题解答。 我把它留在这里,因为它可能有助于理解。

常见问题解答

  1. 什么是 ChatGPT,它是如何工作的?
    1. ChatGPT 是一种人工智能语言模型,它使用深度学习算法对自然语言提示生成类似人类的响应。 它的工作原理是在大型人类语言数据集上进行训练,并使用这些数据根据给定的输入生成新文本。
  2. 什么是 Slack,它在商业中的用途是什么?
    • Slack 是企业用来改善协作和生产力的团队交流平台。 它允许团队成员实时沟通、共享文件和文档,并与其他工具和服务集成。
  3. 什么是 Micropython,它如何用于微控制器?
    • Micropython 是为微控制器设计的 Python 的轻量级实现。 它允许开发人员编写可在微控制器等小型设备上运行的 Python 代码,从而使他们能够构建物联网设备和嵌入式系统。
  4. ChatGPT 在商业中的用例有哪些?
    • ChatGPT 可用于广泛的业务应用程序,包括客户支持、内容创建、语言翻译等。 它可以自动执行重复性任务,并为员工腾出宝贵时间专注于更高级别的任务。
### W5100S-EVB 技术信息与替代方案 W5100S 是一款由 WIZnet 提供的单芯片以太网控制器,内置硬件 TCP/IP 协议栈,支持高达 4 个独立的 socket 连接。它的 EVB(Evaluation Board)提供了完整的开发平台,方便工程师快速实现网络功能集成[^1]。 #### 替代芯片分析 针对 W5100S 及其开发板的功能需求,市场中有若干种替代方案可供选择: ##### 1. **ENC28J60** - ENC28J60 是 Microchip 推出的一款经济高效的以太网控制器。 - 它通过 SPI 接口与主机微控制器通信,并提供基础的 MAC PHY 功能。 - 不同于 W5100S 的全硬件协议栈,ENC28J60 需要软件来管理大部分 TCP/IP 协议堆栈,因此对 MCU 性能有一定要求[^2]。 ##### 2. **LAN9252** - LAN9252 是 SMSC(现为 Microchip Technology Inc.)推出的支持 USB SPI 接口的以太网控制器。 - 具备强大的硬件加速能力,能够减轻主处理器负担。 - 支持多达 7 个独立的 socket,远超 W5100S 的 4 个 socket 数量限制。 - 更高的吞吐能力更低的延迟使得它非常适合高负载应用场景[^3]。 ##### 3. **DP83848** - DP83848 是 Texas Instruments 出品的一种独立的以太网 PHY 装置。 - 主要用于补充不具备内部 PHY 的以太网 MAC 控制器。 - 当搭配具有强大计算资源的 SoC 使用时,可以达到极佳的成本效益平衡点[^4]。 --- ### 开发板相关资料 关于 W5100S-EVB 的具体文档技术细节可以从官方渠道获取,主要包括但不限于以下内容: - **Datasheet**: 描述了模块的工作原理、引脚分配、电气规格等内容。 - **User Manual**: 提供详细的设置指南典型应用案例说明。 - **Firmware Example Code**: 包含各种主流操作系统下的驱动程序实例代码片段,帮助开发者迅速上手。 下面给出一段简单的 Python 示例代码演示如何利用 Sockets API 同 W5100S 类似设备交互: ```python import socket def create_socket_connection(ip_address='192.168.1.1', port=80): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = (ip_address, port) print(f'Connecting to {server_address}') sock.connect(server_address) message = 'GET / HTTP/1.1\r\nHost: {}\r\nConnection: close\r\n\r\n'.format(ip_address).encode('utf-8') sock.sendall(message) data_received = '' while True: chunk = sock.recv(16) if not chunk: break data_received += chunk.decode() print(data_received) sock.close() except Exception as e: print(e) create_socket_connection() ``` 此段代码展示了创建一个基本的客户端套接字并发送请求的过程。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值