現場から生まれるFAQ—Slackの会話からFAQを自動生成し、即ナレッジ資産化するAI活用
はじめに
こんにちは!電通デジタルの小橋敬太です。
Slackなどのチャットツールには、業務改善につながるヒントやナレッジが日々流れています。しかし、いざという時に目的の会話を探し出すのは大変ですし、「同じ質問が何度も繰り返される」「せっかくの知見が埋もれてしまう」といった悩みが絶えません。
そんな現場課題を解決したくて、私はSlackの会話からFAQ(よくある質問)を自動で抽出・整理するプログラムを開発しました。
以下のような課題意識が出発点でした。
Slackのチャットボットを作成したが、使用しているデータソースのFAQを手間をかけずに“リッチなFAQデータ”にしていきたい
手作業でFAQをまとめるのは限界、自動生成が必須
変化の早い現場ニーズに、FAQも“リアルタイムで追従”させたい
この記事では作成の手順ではなく、あくまでどのようにFAQ自動生成を可能にしているかを簡単にお伝えできればと思います。
(本ブログ記事には株式会社電通デジタルの宣伝内容を含みます。)
1. システム概要:API連携だけで“会話からFAQ”を自動化
プログラムは主に2つのAPIを連携させてFAQ自動生成を実現しています。
ChatGPT Playground API(OpenAI公式):高度な自然言語処理・FAQ文生成に活用。
Slack API:チャンネル内メッセージやスレッド履歴の自動取得・解析に活用。
これらのAPIを繋いで、「Slackで交わされた実際のQ&A」をAIがそのままFAQとしてまとめてくれる仕掛けです。 手作業なしで“現場に即したリッチなFAQデータ”を作り、更新も半自動化できます。
2. ChatGPTの会話ログとそのデータの扱い
ChatGPTや多くのAIチャットサービスでは、会話の履歴は「誰(user)がどう質問し」「AI(assistant)がどう答えたか」が時系列でJSON形式として記録・管理されています。 これにより、「AIにそのまま続きの回答やFAQ生成を依頼する」ことが可能なのです。
ChatGPT APIで使われる会話ログ(JSON例)
/*
ChatGPT APIで使われる会話ログ(ChatGPT API(Playground経由))
*/
[
{
"role": "user",
"content": [
{
"type": "text",
"text": "XX機能の初期設定ってどこからできますか?"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "初期設定は管理画面の『設定』タブから行えます。"
}
]
}
]「role」で発言者(質問なら"user"、回答なら"assistant")を指定し、content内のtextにやり取りが格納されます。
3. AI向けに最適化してFAQ化:現場有識者の発言をアシスタント役に変換
FAQ自動化のポイントは、「Slackの会話をAIが最も得意とする“対話ログ”形式に自動変換する」ことです。
実際のSlackスレッドには、質問者と答える有識者が混ざって発言しています。そのままAIに渡しても、人間との違いをAIが認識できず、最適なFAQ化ができません。
プログラムでは、 有識者の発言は「assistant」役、質問者は「user」役として処理し、上記で紹介したChatGPT APIの会話ログ形式に構築しなおします。
この変換処理(下記参照)によって、「実際の現場メンバーが発言したやりとり」を“まるで自分(ChatGPT assistant)が答えているかのようなログ”にAI向け最適化しているのがポイントです。下記プログラムではassistant_user_idsに有識者のIDを割り当てています。
/*
SlackのAPIを使用して、会話のログを成型する例
*/
def build_chat_messages_for_faq(thread_msgs, assistant_user_ids):
messages = []
for msg in thread_msgs:
role = "assistant" if msg.get("user") in assistant_user_ids else "user"
text = msg.get("text", "").replace('\n', ' ').strip()
if text:
messages.append({
"role": role,
"content": [{
"type": "text",
"text": text
}]
})
# 最後にFAQ用プロンプト(指示文)を追加
faq_prompt = '''
【FAQ化のための指示】
- Q&A形式で分かりやすくまとめること
- (例: ソリューション名の使用ルールや禁止事項、曖昧表現NG、具体的な内容で記載、不要な領域は除外等)
'''
messages.append({
"role": "user",
"content": [{
"type": "text",
"text": faq_prompt
}]
})
return messages4. FAQの“新しさ”もAIで自動判定
さらに、Googleスプレッドシート等に記録した既存FAQも自動取得し、FAQ文をベクトル形式(埋め込み)に変換。 新たにAIが生成したFAQがどれくらい既存FAQと“似ているか”をAI自身が評価し、重複や不要な追加を自動的に回避します。
/*SlackのAPIを使用して、会話のログを成型する例*/
def get_embedding(text):
text = text.replace("\n", " ")[:2000]
res = client_ai.embeddings.create(
model="text-embedding-3-large",
input=[text]
)
return np.array(res.data[0].embedding, dtype=np.float32)また、FAQ化の際には、AIに「どんな項目が必要か」「どんな表現は避けるか」「出力のフォーマット」など プロンプトで厳密に指示します。
FAQ化プロンプトで盛り込む内容(例)
Q&Aそれぞれに明確な見出し(Q:、A:等)
使って良いソリューション名やラベルの制約
曖昧な表現の禁止・具体的説明の義務
特定分野・対象外領域の排除
FAQごとの出力形式厳守(順番・粒度等)
実際のプログラムでは、作成したFAQをさらに似たものをグルーピングする処理も含めることで、同じFAQを新規で作成しないようにしています。
5. まとめ
Slackの会話履歴を ChatGPT API(Playground経由)とSlack APIを連携・活用して、そのままAIが読みやすい形に自動変換することで、高精度なFAQ自動化とナレッジ共有を実現しています。
本記事では、具体的な作成手順ではなく「全体の仕組みや考え方」「なぜこのアーキテクチャが有効か」という概念的・構造的な部分をお伝えしました。
プログラムのこうしたAIの理解に最適化したデータ変換により、 現場ナレッジが“流れるだけ”だった状況から、誰でも・すぐに取り出せる強いFAQ資産へと進化していきます。
今後も継続的にアップデートを重ね、より広い現場に役立つツールへ成長させていきます。
電通デジタルにはGA4の計測設計からDWHの構築、BI構築まで幅広いスキルを持ったチームがあります。
お困りのことがあれば、ぜひお問い合わせください。
