Type something to search...
打造你的智能Bluesky机器人!利用Langflow、TypeScript和Node.js畅游新世界!

打造你的智能Bluesky机器人!利用Langflow、TypeScript和Node.js畅游新世界!

作者 Phil Nash

Bluesky 是一个建立在 AT Protocol 上的社交网络:一种开放的、去中心化的构建社交应用程序的方式。AT Protocol 是开放的,这意味着开发者可以使用它构建自己的应用程序,从 自定义信息流客户端,再到我最喜欢的:机器人

随着生成性 AI 的出现,我们现在可以构建更智能的聊天机器人。它们可以进行真实的对话,甚至可以独立作为代理行动。Langflow 是一个拖放式 IDE,使构建 AI 代理和工作流变得更加容易。

考虑到这一切,想要将聪明的机器人连接到社交媒体是自然而然的。在这篇文章中,我们将构建一个小型 TypeScript 应用程序,以 Langflow 为动力创建一个 Bluesky 机器人。

应用程序

我们将构建的应用程序将控制一个 Bluesky 账户,在收到提及或回复时进行响应。提及是指包含账户句柄的任何帖子,而回复是指发送到账户参与的线程中的帖子。

我们将使用 @skyware/bot 包,以便轻松与 Bluesky API 进行交互,并使用 Langflow 来帮助生成对帖子的回复。

你需要的东西

要构建此应用程序,您需要以下内容:

一旦您准备好,就让我们开始构建一个 Bluesky 机器人吧。

设置应用程序

首先创建一个新的 Node.js 应用程序;创建一个名为 langflow-bluesky-bot 的新目录,并在终端中打开它。

mkdir langflow-bluesky-bot
cd langflow-bluesky-bot
```python
mkdir langflow-bluesky-bot
cd langflow-bluesky-bot

使用以下命令初始化您的新 Node 应用程序:

npm init --yes
```python
npm init --yes

安装您将要使用的依赖项和开发依赖项:

npm install @skyware/bot
npm install typescript tsx @types/node --save-dev
```python
npm install @skyware/bot
npm install typescript tsx @types/node --save-dev

在您喜欢的文本编辑器中打开项目,然后打开 package.json。我喜欢我的项目作为 ES modules 运行。要做到这一点,请在“main”键下添加以下内容。

"type": "module",
```python
"type": "module",

package.json 中也添加以下脚本。build 脚本将把我们要编写的 TypeScript 编译成 JavaScript,而 start 脚本将运行该 JavaScript。最后,为了使开发更方便,dev 脚本将使用 tsx 直接运行 TypeScript,并在检测到更改时重新启动。

"scripts": {
    "build": "tsc",
    "start": "node --env-file=.env .",
    "dev": "tsx watch --env-file=.env ./src/index.ts"
  },
```python
"scripts": {
    "build": "tsc",
    "start": "node --env-file=.env .",
    "dev": "tsx watch --env-file=.env ./src/index.ts"
  },

说到 TypeScript,我们还需要配置编译器。创建一个名为 tsconfig.json 的文件,并粘贴以下内容:

{
  "compilerOptions": {
    "target": "es2023",
    "lib": [
      "es2023"
    ],
    "module": "NodeNext",
    "sourceMap": true,
    "outDir": "./dist",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  }
}
```python
{
  "compilerOptions": {
    "target": "es2023",
    "lib": [
      "es2023"
    ],
    "module": "NodeNext",
    "sourceMap": true,
    "outDir": "./dist",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  }
}

创建一个名为 .env 的文件,并粘贴以下内容:

BSKY_USERNAME=
BSKY_PASSWORD=
LANGFLOW_URL=
LANGFLOW_TOKEN=
```python
BSKY_USERNAME=
BSKY_PASSWORD=
LANGFLOW_URL=
LANGFLOW_TOKEN=

我们将在需要时填写这些变量。

最后一步,创建一个 src 目录和一个名为 src/index.ts 的文件。

mkdir src
touch src/index.ts
```python
mkdir src
touch src/index.ts

现在我们准备开始编写机器人的代码。

编写机器人

在编辑器中打开 src/index.ts。首先导入机器人框架并创建一个机器人对象,该对象将使用账户名称和应用密码进行身份验证。

import { Bot } from "@skyware/bot";

const bot = new Bot();
await bot.login({
  identifier: process.env.BSKY_USERNAME!,
  password: process.env.BSKY_PASSWORD!,
});
```python
import { Bot } from "@skyware/bot";

const bot = new Bot();
await bot.login({
  identifier: process.env.BSKY_USERNAME!,
  password: process.env.BSKY_PASSWORD!,
});

我们还没有在 .env 文件中填写这些详细信息。因此,在继续之前,我们需要先完成这一步。

Bluesky 账户详情

登录到您想要通过此应用程序进行操作的账户。您需要为该账户创建一个应用密码。前往您的账户设置,选择 应用 密码,然后添加一个新密码。获得您的账户用户名和应用密码后,将它们添加到 .env 文件中。

我们可以通过尝试从该账户发送帖子来测试这些凭据是否有效。将此代码添加到 src/index.ts

bot.post({
  text: "Hello world!",
});
```python
bot.post({
  text: "Hello world!",
});

现在,使用以下命令运行机器人:

npm run dev
```python
npm run dev

您应该会看到来自您机器人账户的新帖子。如果没有,请再次检查您的账户凭据。

使用 Ctrl + C 停止机器人。删除发送帖子的代码——我们不想继续刷屏时间线!

监听事件

我们将监听“reply”和“mention”事件。如果您希望处理其他用例,可以选择监听“quote”、“repost”、“like”、“follow”和“message”事件。此代码设置为通过一个函数监听这两个事件,并在机器人准备好时记录一条消息。

bot.on("reply", respondToIncoming);
bot.on("mention", respondToIncoming);
console.log(
  `[] @${process.env.BSKY_USERNAME} is listening for mentions and replies.\n`
);
```python
bot.on("reply", respondToIncoming);
bot.on("mention", respondToIncoming);
console.log(
  `[] @${process.env.BSKY_USERNAME} is listening for mentions and replies.\n`
);

现在我们需要定义respondToIncoming函数。首先看看当我们被提及时会发生什么。在文件顶部,导入Post类型。然后实现respondToIncoming函数。在这种情况下,我们只需记录帖子的作者和他们发送的文本。

// At the top add Post to the import
import { Bot, Post } from "@skyware/bot";

// At the bottom
async function respondToIncoming(post: Post) {
  console.log(`[>] @${post.author.handle}: ${post.text}\n`);
}
```python
// At the top add Post to the import
import { Bot, Post } from "@skyware/bot";

// At the bottom
async function respondToIncoming(post: Post) {
  console.log(`[>] @${post.author.handle}: ${post.text}\n`);
}

有了这段代码,重新启动应用程序:

npm run dev
```python
npm run dev

您可以通过从另一个帐户发送提及或回复来测试您是否成功监听了这些事件。

您可以通过查看@skyware/bot文档来查看帖子的其余[属性],并可以通过将它们记录到终端中进行探索。

轮询

请注意,从您向您的机器人发送提及或回复到您看到帖子被记录之间可能会有延迟。这是因为 @skyware/bot 每 5 秒轮询一次 API 以获取更新。虽然您可以订阅实时 Firehose,但对于这个应用来说,这有些过于复杂,轮询就足够了。

现在我们可以看到发送到我们机器人的帖子,让我们构建一些东西来处理它们。

Langflow

在这篇博客文章中,我们将构建一个简单的 Langflow 流程来响应传入的帖子。一旦你完成了这一步,我鼓励你玩一玩 Langflow,看看你还可以创造些什么。你可以深入挖掘许多示例流程以获取灵感。

打开 DataStax 仪表板中的 Langflow 并创建一个新的流程。在这个例子中,我们将使用 Basic Prompting 模板。

该模板将发送到聊天输入组件的消息传递给模型组件,默认情况下为 OpenAI gpt-4o-mini。如果你想在这个应用中使用 OpenAI,你需要在组件中填写 OpenAI API 密钥。如果你愿意,也可以选择使用其他模型组件。

你可以通过提示组件 提供系统指令来改变你的机器人响应的方式。对于像这样的简单流程,你可以告诉你的模型像海盗、无聊的青少年或80年代的动作电影英雄那样回应。或者说一些合乎情理的东西,我想。

模型组件将其输出发送到聊天输出组件,这意味着你可以通过使用 Playground 与它聊天来测试你的流程。一旦你对响应满意,点击 API 按钮。在这里你可以找到你的流程的 URL。复制该 URL 并将其输入到 .env 文件中,作为 LANGFLOW_URL

在这个模态窗口的代码示例上方,你可以生成一个 API 密钥。这样做后,复制 API 密钥并将其输入到 .env 文件中,作为 LANGFLOW_TOKEN

现在让我们在代码中连接 Langflow API。

使用 Langflow API

创建一个名为 getLangflowResponse 的函数。该函数将向我们之前复制的 Langflow URL 发起 HTTP POST 请求。

请求的主体是一个 JSON 对象,定义了 input_typeoutput_type 为 “chat”,input_value 为我们传入该函数的文本。

为了授权请求,我们传递一个 Authorization 头,其中包含字符串 “Bearer” 和我们生成的令牌。

一旦我们发出了请求,就解析响应为 JSON,并从响应对象中提取响应消息。

async function getLangflowResponse(text: string) {
  const body = {
    input_type: "chat",
    output_type: "chat",
    input_value: text,
  };
  const response = await fetch(process.env.LANGFLOW_URL!, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.LANGFLOW_TOKEN!}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(body),
  });
  if (!response.ok) {
    throw new Error("Could not respond", { cause: response });
  }
  const data = (await response.json()) as any;
  return data.outputs[0].outputs[0].artifacts.message;
}
```python
async function getLangflowResponse(text: string) {
  const body = {
    input_type: "chat",
    output_type: "chat",
    input_value: text,
  };
  const response = await fetch(process.env.LANGFLOW_URL!, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.LANGFLOW_TOKEN!}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(body),
  });
  if (!response.ok) {
    throw new Error("Could not respond", { cause: response });
  }
  const data = (await response.json()) as any;
  return data.outputs[0].outputs[0].artifacts.message;
}

更新 responseToIncoming 函数,以使用 getLangflowResponse 函数生成内容,处理任何错误,然后使用 post.reply 函数将该结果发布到原始帖子中。

async function respondToIncoming(post: Post) {
  console.log(`[>] @${post.author.handle}: ${post.text}\n`);
  try {
    const text = await getLangflowResponse(post.text);
    console.log(`[<] @${process.env.BSKY_USERNAME}: ${text}\n`);
    await post.reply({ text });
  } catch (error) {
    console.error(error);
  }
}
```python
async function respondToIncoming(post: Post) {
  console.log(`[>] @${post.author.handle}: ${post.text}\n`);
  try {
    const text = await getLangflowResponse(post.text);
    console.log(`[<] @${process.env.BSKY_USERNAME}: ${text}\n`);
    await post.reply({ text });
  } catch (error) {
    console.error(error);
  }
}

再次重新启动您的机器人进程,使用 Ctrl + C 停止,然后运行:

npm run dev
```python
npm run dev

再给自己发送一次提及,这次你应该看到由 Langflow 流生成的机器人响应。

这个示例机器人目前具有一个尖刻的青少年的个性。我不确定它是否是我构建的最好的机器人,但这只是一个开始。

现在您已经将 Langflow 流与您的应用程序代码集成,您可以尝试使用 Langflow 并查看您还可以实现什么。您可以通过构建以下内容进行实验:

构建更多机器人

Bluesky 使构建有趣的交互机器人变得非常简单,而 Langflow 则使构建可以轻松集成到机器人的 GenAI 应用程序变得容易,只需几行代码即可。

要开始,可以:

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多