Lens帖子自动化:Gelato Web3和OpenAI集成的技术深入研究

  • gelato
  • 发布于 2023-05-27 19:51
  • 阅读 38

本文介绍了Gelato Network的Web3 Functions和OpenAI的集成,该集成允许用户输入提示词,OpenAI将其转换为创意内容,然后通过Gelato的Web3 Functions自动安排并发布到Lens上,从而实现内容的自动创建和发布。

博客 — 用例

Lens Post Automation:Gelato Web3 和 OpenAI 集成的技术深入研究

体验 Gelato Network 的 Web3 Functions 和 OpenAI 的轻松融合。这个新功能正在彻底改变内容创作并自动化 Lens 上的帖子日程安排。这里有个好消息 - 前 1000 个帖子将免费试用这个新应用!

这种集成允许用户输入创造性的提示,OpenAI 然后将其转化为创造性的内容。感谢 Gelato 的 Web3 Functions,这些帖子然后会自动安排并在 Lens 上每天发布三次,供大家在 Lenster 上看到,Lenster 是使用 Lens 协议构建的社交媒体 Web 应用程序。

结果是?一个用户友好的平台,可以像发条一样处理内容创作和帖子。

它是如何工作的?

TL;DR

Gelato 的 Web3 Functions 不知疲倦地工作,从 LensGelatoGPT 合约中提取你存储的提示,并安排它们每 8 小时发布到 Lens 上。你所要做的就是输入你的创意,Gelato Web3 Functions 会处理剩下的事情。

此过程包括使用 OpenAI 将你的提示转化为有趣的帖子。然后使用 Lens 协议检查这些帖子,以确保它们符合标准。之后,这些帖子会安全地存储在 IPFS 上,最后使用 LensHub 合约发布在 Lens 上。有了这个简单高效的系统,你的提示就会变成引人入胜的帖子,这些帖子会自动安排并显示在 Lenster 上。

让我们看看它在底层是如何工作的:

LensGelatoGPT 合约

LensGelatoGPT 合约构成了我们平台的核心,确保安全、有组织和有效地管理用户生成的消息或提示。它允许用户将唯一的消息或“提示”与他们的个人资料相关联,但需要付费。只有个人资料所有者才能添加或删除他们的提示。

该合约还与 LensHub 保持着特殊的关系,跟踪用户个人资料并确保只有正确的用户才能操作他们的个人资料。

它的一个重要功能是 'getPaginatedPrompts'。此函数系统地分批检索提示,提供一致的用户定义提示流。这些提示被 OpenAI 用作创建引人入胜内容的基础。

contract LensGelatoGPT {
    mapping(uint => string) public prompts;
    ...
    function getPaginatedPrompts(uint start, uint end) public view returns (string[] memory) {
        ...
    }
}
利用 Gelato 的 Web3 Functions

一旦提示安全地存储在智能合约中,Gelato 的 Web3 Functions 就会介入以自动化检索这些提示和安排帖子的过程。这些函数设置为以预定义的间隔(在本例中为每 8 小时)触发,首先验证自上次发布以来经过的时间是否大于设置的间隔,然后它们从 LensGelatoGPT 合约中获取下一个提示。

const timeElapsed = blockTime - lastPostTime >= INTERVAL_IN_MIN * 60;

 if (!timeElapsed && nextPromptIndex == 0 && !areThereNewProfileIds) {
    return {
      canExec: false,
      message: "Not time elapsed since last post and not newcomers",
    };
  }
OpenAI API

然后,获取的提示由 OpenAI 的 API 处理,该 API 随后用作唯一内容片段的起源。OpenAI 采用简单的提示并将其转换为创造性的文本片段。

const openai = new OpenAIApi(new Configuration({ apiKey:SECRETS_OPEN_AI_API_KEY }));
const response = await openai.createCompletion({
    model: "text-davinci-003",
    prompt: ` ${contentURI} in less than 15 words.`,
    temperature: 1,
    max_tokens: 256,
    top_p: 1,
    frequency_penalty: 1.5,
    presence_penalty: 1,
});
let text = response.data.choices[0].text as string;

生成后,使用 Lens 协议来验证发布元数据并确保其符合 Lens 标准。

const pub = {
  …
  content: text,
 ...
};

// Checking the metadata is Correct
// 检查元数据是否正确

const lensClient = new LensClient({
  environment: production,
});

// Validating publication metadata using LensClient
// 使用 LensClient 验证发布元数据
const validateResult = await lensClient.publication.validateMetadata(pub);
存储在 IPFS 上

生成的文本安全地存储在 IPFS 上,帖子的元数据方便地打包在 JSON 文件中。利用 Web3 storage 客户端,此元数据文件可以轻松上传到 IPFS。生成的 CID 充当帖子的内容 URI,从而授予对存储在 IPFS 上的元数据的直接且可靠的访问链接。

// Upload metadata to IPFS
// 上传元数据到 IPFS
const storage = new Web3Storage({ token: WEB3_STORAGE_API_KEY! });
const myFile = new File([JSON.stringify(pub)], "publication.json");
const cid = await storage.put([myFile]);
contentURI = `https://${cid}.ipfs.w3s.link/publication.json`;
LensHub 合约

此过程的最后阶段涉及将 CID 与其他帖子数据一起打包并将其转发到 LensHub 合约,该合约验证数据、制定新帖子并将其排列以在 Lenster 上发布。

const postData = {
  profileId: profileID
  contentURI: `https://${cid}.ipfs.w3s.link/publication.json`,
  …
};

const lensHubAddress = "0xDb46d1Dc155634FbC732f92E853b10B288AD5a1d";
const iface = new utils.Interface(lens_hub_abi);
return {
  canExec: true,
  callData: [\
    {\
      to: lensHubAddress,\
      data: iface.encodeFunctionData("post", [postData]),\
    },\
  ],
};

开始使用 LensGPT

渴望亲身体验这种革命性的融合吗?如果你是开发人员,请直接投入!如果你追求更简单的用户体验,请点击此处

1. 创建个人资料

在你开始之前,请确保你已保护你的 Lens Handle,然后前往 Lenster 应用程序并登录,然后通过你的浏览器或使用 WalletConnect 连接到你的钱包。

成功创建你的个人资料后,复制你的 ProfileID,因为你将在下一步中使用它!

注意:如果你的地址尚未列入白名单,你将无法获得 Lens Handle。

2. 设置调度程序

接下来,前往 LensHub 合约。点击 'Write as a Proxy',然后选择 'setDispatcher' 方法。

你现在需要两件事:你的 ProfileID 和调度程序地址。 使用步骤 1 中的 ProfileID。

对于调度程序地址,粘贴以下内容:0xcc53666e25bf52c7c5bc1e8f6e1f6bf58e871659。此步骤允许 Gelato 的 Web3 Functions 在你的 Lenster 帐户上发布

setDispatcher(ProfileId,0xcc53666e25bf52c7c5bc1e8f6e1f6bf58e871659).
3. 设置提示

重要提示:请确保你的帐户中至少有 5 个 MATIC 来设置提示!

接下来,访问 LensGelatoGPT 合约。点击 'Write as a Proxy' 并选择 'setPrompt' 方法。现在是填写一些详细信息的时候了。

对于 'PAYABLE AMOUNT',输入 '0'。对于 'ProfileID',使用你从步骤 1 复制的那个。对于 'YOUR PROMPT',输入你的创意。

setPrompt(PayableAmount,ProfileId,"YOUR PROMPT")

确保提示符合字符限制(10 - 160 个字符)。如果你需要一些灵感,我们为你准备好了:

  • 我即将开始我的 web3 之旅,你有什么建议给我吗?
  • 如何保持健康的工作与生活平衡?给我一些实用的技巧。
  • 给我一个简单的锻炼程序,帮助我在工作休息期间保持健康和活动
  • 哪种生产力工具或应用程序会对我的日常工作产生重大影响?

就这样!现在,坐下来观看创意内容开始流动。

4. 恭喜!

如果你查看你的 Lenster 个人资料,你会看到一篇从你的提示中生成的新帖子!最好的部分是?每天 3 次,将创建一个新帖子,以保持你的 Lenster 帐户处于活动状态。

设置你的开发环境

在 Lenster 上准备好你的个人资料后,就该为你的开发环境配置必要的密钥和设置了。按照以下说明正确设置一切:

步骤 1:克隆存储库

打开终端并写入,

git clone https://github.com/gelatodigital/eth-dam-gelato-lens-ai.git
步骤 2:安装包

接下来,安装必要的包:

npm install
步骤 3:配置密钥

我们需要为我们的应用程序提供三种类型的密钥:

  • 提供程序 URL
  • OpenAI 密钥
  • Web3.Storage 密钥

提供程序 URL: 找到根文件夹中的 .env.template 文件,复制它并将副本重命名为 .env。现在打开此 .env 文件并输入你的提供程序 URL,如下所示:

PROVIDER_URLS= YOUR_RPC

将 YOUR_RPC 替换为你的实际提供程序 URL。

OpenAI 和 Web3.Storage 密钥: 在 web3-functions/lens-ai 目录中找到 .env.template 文件。同样,制作它的副本并将副本重命名为 .env。

打开此 .env 文件并输入你的 OpenAI API 密钥和 Web3.Storage API 密钥,如下所示:

OPEN_AI_API_KEY=YOUR_KEY
WEB3_STORAGE_API_KEY=YOUR_KEY

分别将 YOUR_KEY 替换为你的实际 OpenAI 和 Web3.Storage 密钥。 如果你没有 Web3.Storage 密钥,你可以通过访问 Web3.Storage 并注册他们的服务来获得一个密钥。

恭喜你设置你的开发环境!通过此配置,你现在有能力深入了解自动内容创建和在 Lens 上安排帖子的世界,该功能由 Gelato 的 Web3 函数和 OpenAI 提供支持。

关于 Gelato Web3 Functions

Web3 函数为开发人员提供了一个创新的解决方案,可以轻松创建无服务器、去中心化的应用程序。它们可以无缝集成智能合约与链下数据,从而弥合链上和链下世界之间的差距。

通过利用 Web3 函数,开发人员可以构建强大、可扩展且去中心化的 web3 应用程序,并由可靠且有弹性的基础设施提供支持。

开始

加入我们的社区并在 Discord 上进行开发者讨论。

Web3 函数今天在 私有 Beta 中可用。有关更多信息,请查看 Web3 函数文档。要学习如何编写、测试和部署你自己的 Web3 函数,请使用此 Hardhat 模板

在此处 申请成为首批测试 Web3 函数的人之一!

免责声明

Gelato LensGPT Beta 1.0 仍处于测试阶段,并按“原样”和“可用”提供。Gelato LensGPT Beta 1.0 应用程序可能无法无限期地使用,我们保留将来停止使用的权利。Gelato 社区将赞助前 1000 个帖子。

  • 原文链接: gelato.cloud/blog/lens-a...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
gelato
gelato
The Web3 Developer Cloud. Launch your own chain via our #1 Rollup-As-A-Service platform.