OpenAI APIを活用したSlackBotの紹介

TA9TO
Nyle Engineering Blog
9 min readAug 4, 2023

こんにちは!ナイルでソフトウェアエンジニアをしている工藤です。私たちが最近開発したOpenAI APIを活用したSlackBotについて紹介します。この記事では、OpenAI APIの基本情報から、私たちが開発したSlackBotの特徴、そして実際の利用シーンまでを詳しくお伝えします。

OpenAI APIの概要

https://openai.com/blog/openai-api

OpenAI APIは、人工知能(AI)の強力な能力を個々のアプリケーションに組み込むためのツールです。このAPIを利用すると、AIの豊富な学習データと高度な計算能力を直接活用できます。

OpenAI APIの特徴

OpenAI APIの最大の特徴は、AIが持つ「自然言語処理(NLP)」能力を活用できる点です。これにより、テキストを生成したり、理解したり、分析したりすることが可能になります。

OpenAI APIの活用方法

OpenAI APIの活用方法は無限大です。チャットボットの開発、自動記事作成、感情分析など、様々な場面で活躍します。今回私たちは、このAPIを利用して、業務効率化を図るSlackBotを開発しました。

SlackBotの紹介

それでは、私たちが開発したSlackBotについて詳しく紹介します。

SlackBotの目的

私たちが開発したSlackBotの主要な目的は、以下の2つです。

  1. 社内のコミュニケーションを円滑にし、業務効率を向上させること。例えば、管理部門によく来る質問の内、あらかじめ用意しているポータルサイト上の資料などを少し確認すれば解決できるような内容へのサポートを自動化し、管理部門メンバーの時間を取られないようにすること。
  2. 社員が慣れたSlackのUIでChatGPTと簡単に会話ができる環境を用意し、生成AIに素早く慣れ親しむことができる環境を作ること。

SlackBotの主要機能

SlackBotの主要な機能は以下の3つです。

  1. Embeddingsを活用した、社員の質問に対して社内資料を参考に回答を生成する機能
  2. Open Weather APIを活用した、天気情報を回答する機能
  3. Open AI Images APIを活用した、テキストから画像を生成する機能

技術スタック

AWS Lambda,Node.js

1. Embeddingsを活用した、社員の質問に対して社内資料を参考に回答を生成する機能

この機能は、社員からの質問に対して、自動的に社内資料を参照して適切な回答を生成します。具体的には、質問内容を理解した上で、関連する社内文書を検索し、そこから最も適切な回答を抽出して提供します。このために、Embeddingsというテキストの意味をベクトル化する技術を活用しています。

稟議申請について質問

function callingという機能を活用し、社員からの質問に対してGPTが必要と判断した時のみ定義した関数を実行するような実装になっています。

const company_internal_documents = require("../storage/company_internal_documents.json");

async function searchCompanyInfo(params) {
const OpenAiService = require('../services/openAiService');
const openAiService = new OpenAiService();
const userQueryEmbedding = await openAiService.createEmbeddings(params.query);
let maxSimilarity = -Infinity;
let mostSimilarEntry = null;
for (const entry of company_internal_documents) {
const entryEmbedding = entry.vector;
const similarity = openAiService.calculateCosineSimilarity(userQueryEmbedding['data'][0]['embedding'], entryEmbedding);
if (similarity > maxSimilarity) {
maxSimilarity = similarity;
mostSimilarEntry = entry;
}
}
return mostSimilarEntry['body'] == ''
? mostSimilarEntry['url']
: mostSimilarEntry['body'];
}

const searchCompanyInfoDescription = {
"name": "searchCompanyInfo",
"description": "Provide the most relevant internal info based on the user's inquiry",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Inquiries from users about internal Information matters.",
},
},
"required": ["query"],
},
};

module.exports = { searchCompanyInfo, searchCompanyInfoDescription };

2. Open Weather APIを活用した、天気情報を回答する機能

Open AIの公式ドキュメントで紹介されていたサンプルコードを参考に実装した要らない機能です。

const querystring = require('querystring');
const httpRequest = require('../services/httpRequest');

async function getCurrentWeather(params) {
const openWeatherApiKey = process.env.OPEN_WEATHER_API_KEY;
// クエリパラメータを作成
const queryParams = querystring.stringify({
q: params.location,
appid: openWeatherApiKey,
units: 'metric',
lang: 'ja',
});

// リクエストURLを作成
const requestUrl = `https://api.openweathermap.org/data/2.5/weather?${queryParams}`;

return httpRequest(requestUrl, 'GET', {}, null).then(JSON.parse);
}

const getCurrentWeatherDescription = {
name: "getCurrentWeather",
description: "Get the current weather in a given location",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and state, e.g. San Francisco, CA",
},
},
required: ["location"],
}
};

module.exports = { getCurrentWeather, getCurrentWeatherDescription };

3. Open AI Images APIを活用した、テキストから画像を生成する機能

まとめ

社内情報を参考に質問に回答できる機能が社内では特に喜ばれましたが個人的にはどこで使うかわからない画像生成周りの機能が1番気に入っています。

以上、OpenAI APIを活用したSlackBotの紹介でした。どなたかの何かの参考になりましたらば幸いです。

最後に、ナイルではChatGPTやOpenAI APIを活用したアプリケーションなどを業務に組み込むお手伝いをしています。生成AIの社内導入にお困りの際はお気軽にご相談ください!

--

--