Blog

23 Mar
Xây dựng Slack App tích hợp OpenAI làm trợ lý ảo thông minh
March 23, 2023

Xây dựng Slack App tích hợp OpenAI làm trợ lý ảo thông minh

   

Xin chào! Như các bạn đã biết, Slack là một nền tảng trò chuyện và hợp tác trực tuyến cho doanh nghiệp và nhóm làm việc. Nó cho phép người dùng giao tiếp với nhau thông qua các cuộc trò chuyện và cuộc gọi video, chia sẻ tài liệu và thông tin với các thành viên khác trong nhóm, tạo ra các kênh riêng tư hoặc công khai để giữ liên lạc với nhóm làm việc và quản lý dự án. Slack có tính năng tích hợp với nhiều ứng dụng và dịch vụ khác nhau, cho phép người dùng kết nối và làm việc trên nhiều nền tảng khác nhau. Nó là một công cụ phổ biến trong các tổ chức và doanh nghiệp để tăng cường hiệu quả làm việc và cộng tác giữa các thành viên trong nhóm.

Với sự phát triển của AI, đặc biệt là ChatGPT (phát triển bởi OpenAI) đang được nhiều sự chú ý từ cộng đồng. OpenAI là một tổ chức nghiên cứu chuyên phát triển trí tuệ nhân tạo một cách có trách nhiệm và an toàn, OpenAI đã nghiên cứu và phát triển các mô hình học sâu (deep learning), học tăng cường (reinforcement learning), và các kỹ thuật khác để giải quyết các vấn đề khó khăn trong các lĩnh vực như xử lý ngôn ngữ tự nhiên, thị giác máy tính, và chơi các trò chơi trên máy tính.

Ở bài viết này mình sẽ hướng dẫn các bạn xây dựng một App Slack tích hợp OpenAI cơ bản, từ đó các bạn có thể phát triển những ứng dụng hay, có ích hơn.

Đầu tiên bạn cần clone source tại đây để làm webhook và tạo cho mình một Slack App tại đây. Sẽ có 2 lựa chọn:

  • From scratch: sẽ dùng setting của Slack để thêm thông tin cơ bản, phạm vi, cài đặt và tính năng vào ứng dụng của bạn theo cách thủ công.
  • From an app manifest: sẽ sử dụng file config mà bạn đã định nghĩa sẵn để thực hiện cấu hình app

Sau khi điền tên app và chọn workspace tương ứng để cài đặt, bạn sẽ thấy màn hình bên dưới:

Ở mục Basic Information bạn cần chú ý đến Signing Secret App-Level Tokens, click vào Generate Token and Scopes để tạo APP token sử dụng cho config .env source code ở trên


Ở mục Features OAuth & Permissions các bạn cần thêm các scope cơ bản để BOT có thể hoạt động trên workspace trước khi install to Workspace:
Ở đây mình thêm các scopes:app_mentions:read,chat:write,chat:write.public,im:history,im:read,im:write,incoming-webhook

Sau khi đã thêm các scope, click install to Workspace để cài app vào workspace, lấy thông tin Bot User OAuth Token

Tiếp theo: Enable Socket Mode ở mục Socket ModeEnable Events ở mục Event Subscriptions

Ở mục Subscribe to bot events các bạn add 1 vài event vào để BOT có thể nhận

Cuối cùng cấu hình webhook nhận sự kiện và trả tin nhắn về Slack, ở đây mình sử dụng @slack/bolt một thư viện mã nguồn mở được cung cấp bởi Slack, được sử dụng để xây dựng ứng dụng Slack.

Để cài đặt bolt:

yarn add @slack/bolt

Nhận sự kiện và trả tin nhắn về slack


require('dotenv').config();
const { App } = require('@slack/bolt');
const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);


const app = new App({
  signingSecret: process.env.SLACK_SIGNING_SECRET,
  token: process.env.SLACK_BOT_TOKEN,
  appToken: process.env.SLACK_APP_TOKEN,
  socketMode: true,
});

/* Add functionality here */
// app.message(/^(hi|hello|hey).*/, async ({message, say}) => {
//     console.log(message)
//     await say(`Hello <@${message.user}>`)
// });

app.event('app_mention', async ({ event, context, client, say }) => {
  const regex = />(.*)/;
  const result = regex.exec(event.text);
  if (result) {
    const text_after_greater_than = result[1];
    const completion = await openai.createChatCompletion({
        model: "gpt-3.5-turbo",
        messages: [
          { role: "user", content: text_after_greater_than },
        ],
        max_tokens: 4000
      });
    await say(`<@${event.user}> ${completion.data.choices[0].message.content}`)
  } else {
    console.log("No match");
  }
});

(async () => {
  // Start the app
  await app.start(process.env.PORT || 3000);
  console.log('⚡️ Bolt app is running!');
})();

Ở đây mình sử dụng hàm app.event để lắng nghe sự kiện khi người dùng mention đến slack app, hàm này lấy đoạn text message rồi sử dụng API của openai để lấy ra thông tin và trả về bằng hàm say(), hàm này có chức năng gửi tin nhắn trên slack với vai trò là Slack App.

Kết quả:

  • Add slack app vào channel
  • Mention đến App BOT nội dung đơn giản

Hi vọng qua bài viết này, bạn sẽ hiểu hơn các khái niệm cơ bản của Slack và xây dựng được một Slack App đơn giản, hẹn các bạn ở các bài chia sẻ tiếp theo nghen 😘

Thành Trung